{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/views/pc/PcExamReport.vue?bcf0","webpack:///./src/assets/pc/plant-active.png","webpack:///src/views/chat/chatFile.vue","webpack:///./src/views/etalk/Feedback.vue?c141","webpack:///./src/views/collect/new_words.vue?18e8","webpack:///./src/views/pc/PcMine.vue?0a19","webpack:///./src/views/study/List.vue?9f22","webpack:///./src/views/listen/History.vue?d1e9","webpack:///./src/views/read/Detail.vue?270d","webpack:///./src/assets/pc/exam.png","webpack:///./src/views/pc/PcInteractiveWrite.vue?a216","webpack:///./src/views/pc/PcPracticeHistory.vue?f7ac","webpack:///./src/components/HotList.vue?bca4","webpack:///./src/components/ArticleParser.vue?2dc4","webpack:///./src/views/pc/PcWritePraxis.vue?24d4","webpack:///./src/components/Ai.vue?3c4a","webpack:///./src/views/write/Praxis.vue?cf8d","webpack:///./src/views/write/Report.vue?fedf","webpack:///./src/layouts/TabBarLayout.vue?fce7","webpack:///./src/assets/default.jpg","webpack:///./src/assets/pc/home-active.png","webpack:///./src/views/chat/NormalChat.vue?b0a9","webpack:///./src/views/Login.vue?bf91","webpack:///./src/views/read/History.vue?1aeb","webpack:///./src/views/Calendar.vue?6b4b","webpack:///./src/views/pc/PcWriteLearn.vue?c41e","webpack:///./src/views/pc/PcMicraList.vue?088d","webpack:///./src/api/home.js","webpack:///./src/views/write/MySubmit.vue?e8ee","webpack:///./src/views/read/DetailHisPre.vue?a43d","webpack:///./src/views/notice/Detail.vue?a19f","webpack:///./src/views/micra_class/Index.vue?e32d","webpack:///./src/api/index.js","webpack:///./src/utils/language.js","webpack:///./src/App.vue?7ee0","webpack:///./src/views/exam/examList.vue?6dab","webpack:///./src/views/write/writeNew/Index.vue?3e35","webpack:///./src/views/etalk/Project.vue?f398","webpack:///./src/views/read/DetailHis.vue?f44b","webpack:///./src/views/etalk/Etalk.vue?4b5d","webpack:///./src/components/ReadLearnAi.vue?98a6","webpack:///./src/views/write/writeNew/HistoryDetail.vue?dad0","webpack:///./src/views/pc/PcEtalkHistory.vue?af9a","webpack:///./src/views/notice/ExamList.vue?d862","webpack:///./src/components/ListenLearnAi.vue?df2b","webpack:///./src/assets/pc/ai.png","webpack:///./src/views/common/Serch.vue?509c","webpack:///./src/components/ReadPraxisAi.vue?4269","webpack:///./src/views/pc/PcWriteNotice.vue?5396","webpack:///./src/views/listen/Praxis.vue?b867","webpack:///./src/views/pc/PcListenPraxis.vue?3e59","webpack:///./src/views/etalk/History.vue?b228","webpack:///./src/views/pc/PcWriteProject.vue?f449","webpack:///./src/views/pc/PcExam.vue?5fe5","webpack:///./src/views/write/Submit.vue?abde","webpack:///./src/views/pc/PcMiniPaper.vue?a1b5","webpack:///./src/components/PcAiAssistant.vue?226b","webpack:///./src/components/verifition/Verify.vue?ca08","webpack:///./src/App.vue","webpack:///src/App.vue","webpack:///./src/App.vue?774d","webpack:///./src/App.vue?3746","webpack:///./src/layouts/TabBarLayout.vue","webpack:///src/layouts/TabBarLayout.vue","webpack:///./src/layouts/TabBarLayout.vue?8292","webpack:///./src/layouts/TabBarLayout.vue?08dc","webpack:///./src/layouts/NormalLayout.vue","webpack:///./src/api/plant.js","webpack:///src/layouts/NormalLayout.vue","webpack:///./src/layouts/NormalLayout.vue?11ca","webpack:///./src/layouts/NormalLayout.vue?4733","webpack:///./src/views/Home.vue","webpack:///./src/components/Ai.vue","webpack:///src/components/Ai.vue","webpack:///./src/components/Ai.vue?9e85","webpack:///./src/components/Ai.vue?67a5","webpack:///./src/components/HotList.vue","webpack:///src/components/HotList.vue","webpack:///./src/components/HotList.vue?5008","webpack:///./src/components/HotList.vue?773c","webpack:///src/views/Home.vue","webpack:///./src/views/Home.vue?03e8","webpack:///./src/views/Home.vue?86b4","webpack:///./src/views/Exam.vue","webpack:///./src/api/exam.js","webpack:///src/views/Exam.vue","webpack:///./src/views/Exam.vue?ef76","webpack:///./src/views/Exam.vue?114a","webpack:///./src/views/Ai.vue","webpack:///src/views/Ai.vue","webpack:///./src/views/Ai.vue?7ce4","webpack:///./src/views/Ai.vue?1a97","webpack:///./src/views/MapIndex.vue","webpack:///src/views/MapIndex.vue","webpack:///./src/views/MapIndex.vue?4906","webpack:///./src/views/MapIndex.vue?a732","webpack:///./src/views/etalk/Etalk.vue","webpack:///src/views/etalk/Etalk.vue","webpack:///./src/views/etalk/Etalk.vue?ebee","webpack:///./src/views/etalk/Etalk.vue?324a","webpack:///./src/views/etalk/Feedback.vue","webpack:///./src/components/MarkdownRenderer.vue","webpack:///src/components/MarkdownRenderer.vue","webpack:///./src/components/MarkdownRenderer.vue?42fe","webpack:///./src/components/MarkdownRenderer.vue?04f9","webpack:///src/views/etalk/Feedback.vue","webpack:///./src/views/etalk/Feedback.vue?c124","webpack:///./src/views/etalk/Feedback.vue?cb9a","webpack:///./src/views/etalk/Project.vue","webpack:///src/views/etalk/Project.vue","webpack:///./src/views/etalk/Project.vue?f6af","webpack:///./src/views/etalk/Project.vue?8a02","webpack:///./src/views/etalk/ScriptPractice.vue","webpack:///src/views/etalk/ScriptPractice.vue","webpack:///./src/views/etalk/ScriptPractice.vue?9d13","webpack:///./src/views/etalk/ScriptPractice.vue?77ed","webpack:///./src/views/etalk/ScriptPracticeDetail.vue","webpack:///src/views/etalk/ScriptPracticeDetail.vue","webpack:///./src/views/etalk/ScriptPracticeDetail.vue?d346","webpack:///./src/views/etalk/ScriptPracticeDetail.vue?b608","webpack:///./src/views/etalk/History.vue","webpack:///src/views/etalk/History.vue","webpack:///./src/views/etalk/History.vue?836a","webpack:///./src/views/etalk/History.vue?a966","webpack:///./src/views/Plant.vue","webpack:///src/views/Plant.vue","webpack:///./src/views/Plant.vue?7bda","webpack:///./src/views/Plant.vue?d7b7","webpack:///./src/views/plant/set_to.vue","webpack:///src/views/plant/set_to.vue","webpack:///./src/views/plant/set_to.vue?2b9e","webpack:///./src/views/plant/set_to.vue?cf79","webpack:///./src/views/study/Note.vue","webpack:///src/views/study/Note.vue","webpack:///./src/views/study/Note.vue?cb6b","webpack:///./src/views/study/Note.vue?1bb6","webpack:///./src/views/plant/second.vue","webpack:///src/views/plant/second.vue","webpack:///./src/views/plant/second.vue?eaff","webpack:///./src/views/plant/second.vue?6987","webpack:///./src/views/plant/second_set.vue","webpack:///src/views/plant/second_set.vue","webpack:///./src/views/plant/second_set.vue?b5eb","webpack:///./src/views/plant/second_set.vue?e1de","webpack:///./src/views/noAuth.vue","webpack:///src/views/noAuth.vue","webpack:///./src/views/noAuth.vue?d4d0","webpack:///./src/views/noAuth.vue?d5de","webpack:///./src/views/Mine.vue","webpack:///src/views/Mine.vue","webpack:///./src/views/Mine.vue?9f96","webpack:///./src/views/Mine.vue?179f","webpack:///./src/views/Login.vue","webpack:///src/views/Login.vue","webpack:///./src/views/Login.vue?4fe3","webpack:///./src/views/Login.vue?b6b6","webpack:///./src/views/NewLogin.vue","webpack:///./src/components/verifition/Verify.vue","webpack:///./src/components/verifition/Verify/VerifySlide.vue","webpack:///./src/components/verifition/utils/ase.js","webpack:///./src/components/verifition/utils/util.js","webpack:///./src/components/verifition/utils/axios.js","webpack:///./src/components/verifition/api/index.js","webpack:///src/components/verifition/Verify/VerifySlide.vue","webpack:///./src/components/verifition/Verify/VerifySlide.vue?dfe7","webpack:///./src/components/verifition/Verify/VerifySlide.vue?8ae9","webpack:///./src/components/verifition/Verify/VerifyPoints.vue","webpack:///src/components/verifition/Verify/VerifyPoints.vue","webpack:///./src/components/verifition/Verify/VerifyPoints.vue?af18","webpack:///./src/components/verifition/Verify/VerifyPoints.vue?6246","webpack:///src/components/verifition/Verify.vue","webpack:///./src/components/verifition/Verify.vue?0d7e","webpack:///./src/components/verifition/Verify.vue?6ec6","webpack:///src/views/NewLogin.vue","webpack:///./src/views/NewLogin.vue?8841","webpack:///./src/views/NewLogin.vue?87de","webpack:///./src/views/authLogin.vue","webpack:///src/views/authLogin.vue","webpack:///./src/views/authLogin.vue?fd26","webpack:///./src/views/authLogin.vue?c055","webpack:///./src/views/About.vue","webpack:///src/views/About.vue","webpack:///./src/views/About.vue?703e","webpack:///./src/views/About.vue?9522","webpack:///./src/views/listen/Index.vue","webpack:///./src/api/listen.js","webpack:///./src/components/ListenAi.vue","webpack:///src/components/ListenAi.vue","webpack:///./src/components/ListenAi.vue?25ad","webpack:///./src/components/ListenAi.vue?bbb6","webpack:///src/views/listen/Index.vue","webpack:///./src/views/listen/Index.vue?b064","webpack:///./src/views/listen/Index.vue?e5a7","webpack:///./src/views/listen/Learn.vue","webpack:///./src/components/ListenLearnAi.vue","webpack:///src/components/ListenLearnAi.vue","webpack:///./src/components/ListenLearnAi.vue?32a4","webpack:///./src/components/ListenLearnAi.vue?0270","webpack:///src/views/listen/Learn.vue","webpack:///./src/views/listen/Learn.vue?1b17","webpack:///./src/views/listen/Learn.vue?9336","webpack:///./src/views/listen/Praxis.vue","webpack:///./src/components/ListenPraxisAi.vue","webpack:///src/components/ListenPraxisAi.vue","webpack:///./src/components/ListenPraxisAi.vue?3bb3","webpack:///./src/components/ListenPraxisAi.vue?1453","webpack:///./src/components/PaxisCommon.vue","webpack:///src/components/PaxisCommon.vue","webpack:///./src/components/PaxisCommon.vue?ed3d","webpack:///./src/components/PaxisCommon.vue?d922","webpack:///./src/components/ArticleParser.vue","webpack:///./src/utils/html.js","webpack:///src/components/ArticleParser.vue","webpack:///./src/components/ArticleParser.vue?1d18","webpack:///./src/components/ArticleParser.vue?d04d","webpack:///./src/components/PdfViewer.vue","webpack:///src/components/PdfViewer.vue","webpack:///./src/components/PdfViewer.vue?5cbf","webpack:///./src/components/PdfViewer.vue?1eb4","webpack:///src/views/listen/Praxis.vue","webpack:///./src/views/listen/Praxis.vue?eba2","webpack:///./src/views/listen/Praxis.vue?bf21","webpack:///./src/views/listen/Detail.vue","webpack:///./src/components/RelList.vue","webpack:///src/components/RelList.vue","webpack:///./src/components/RelList.vue?d023","webpack:///./src/components/RelList.vue?1913","webpack:///src/views/listen/Detail.vue","webpack:///./src/views/listen/Detail.vue?2c84","webpack:///./src/views/listen/Detail.vue?fa45","webpack:///./src/views/collect/index.vue","webpack:///src/views/collect/index.vue","webpack:///./src/views/collect/index.vue?156b","webpack:///./src/views/collect/index.vue?99a0","webpack:///./src/views/collect/new_words.vue","webpack:///src/views/collect/new_words.vue","webpack:///./src/views/collect/new_words.vue?1c08","webpack:///./src/views/collect/new_words.vue?e0e4","webpack:///./src/views/listen/DetailHis.vue","webpack:///src/views/listen/DetailHis.vue","webpack:///./src/views/listen/DetailHis.vue?a69d","webpack:///./src/views/listen/DetailHis.vue?5f51","webpack:///./src/views/listen/DetailHis_pre.vue","webpack:///src/views/listen/DetailHis_pre.vue","webpack:///./src/views/listen/DetailHis_pre.vue?43d1","webpack:///./src/views/listen/DetailHis_pre.vue?f512","webpack:///./src/views/listen/Report.vue","webpack:///src/views/listen/Report.vue","webpack:///./src/views/listen/Report.vue?ec23","webpack:///./src/views/listen/Report.vue?1425","webpack:///./src/views/listen/History.vue","webpack:///src/views/listen/History.vue","webpack:///./src/views/listen/History.vue?88ac","webpack:///./src/views/listen/History.vue?56cd","webpack:///./src/views/read/History.vue","webpack:///src/views/read/History.vue","webpack:///./src/views/read/History.vue?1cc0","webpack:///./src/views/read/History.vue?e5a4","webpack:///./src/views/read/Index.vue","webpack:///./src/api/read.js","webpack:///./src/components/ReadAi.vue","webpack:///src/components/ReadAi.vue","webpack:///./src/components/ReadAi.vue?099d","webpack:///./src/components/ReadAi.vue?3304","webpack:///src/views/read/Index.vue","webpack:///./src/views/read/Index.vue?f2ab","webpack:///./src/views/read/Index.vue?686e","webpack:///./src/views/read/Learn.vue","webpack:///./src/components/ReadLearnAi.vue","webpack:///src/components/ReadLearnAi.vue","webpack:///./src/components/ReadLearnAi.vue?1232","webpack:///./src/components/ReadLearnAi.vue?8e58","webpack:///src/views/read/Learn.vue","webpack:///./src/views/read/Learn.vue?4be8","webpack:///./src/views/read/Learn.vue?7d93","webpack:///./src/views/read/Praxis.vue","webpack:///./src/components/ReadPraxisAi.vue","webpack:///src/components/ReadPraxisAi.vue","webpack:///./src/components/ReadPraxisAi.vue?e697","webpack:///./src/components/ReadPraxisAi.vue?4b71","webpack:///src/views/read/Praxis.vue","webpack:///./src/views/read/Praxis.vue?a0d3","webpack:///./src/views/read/Praxis.vue?bad4","webpack:///./src/views/read/Detail.vue","webpack:///src/views/read/Detail.vue","webpack:///./src/views/read/Detail.vue?18d7","webpack:///./src/views/read/Detail.vue?1f0e","webpack:///./src/views/read/DetailHis.vue","webpack:///src/views/read/DetailHis.vue","webpack:///./src/views/read/DetailHis.vue?c0b1","webpack:///./src/views/read/DetailHis.vue?04f1","webpack:///./src/views/read/DetailHisPre.vue","webpack:///src/views/read/DetailHisPre.vue","webpack:///./src/views/read/DetailHisPre.vue?fc74","webpack:///./src/views/read/DetailHisPre.vue?84db","webpack:///./src/views/read/Report.vue","webpack:///src/views/read/Report.vue","webpack:///./src/views/read/Report.vue?30e5","webpack:///./src/views/read/Report.vue?d21a","webpack:///./src/views/write/Index.vue","webpack:///./src/components/WriteAi.vue","webpack:///src/components/WriteAi.vue","webpack:///./src/components/WriteAi.vue?1fcc","webpack:///./src/components/WriteAi.vue?5e92","webpack:///src/views/write/Index.vue","webpack:///./src/views/write/Index.vue?7b35","webpack:///./src/views/write/Index.vue?3854","webpack:///./src/views/write/Write.vue","webpack:///src/views/write/Write.vue","webpack:///./src/views/write/Write.vue?bd46","webpack:///./src/views/write/Write.vue?6660","webpack:///./src/views/write/Learn.vue","webpack:///./src/components/WriteLearnAi.vue","webpack:///src/components/WriteLearnAi.vue","webpack:///./src/components/WriteLearnAi.vue?ab1e","webpack:///./src/components/WriteLearnAi.vue?d1f7","webpack:///src/views/write/Learn.vue","webpack:///./src/views/write/Learn.vue?c2aa","webpack:///./src/views/write/Learn.vue?c4d0","webpack:///./src/views/write/Praxis.vue","webpack:///./src/components/WritePraxisAi.vue","webpack:///src/components/WritePraxisAi.vue","webpack:///./src/components/WritePraxisAi.vue?cc85","webpack:///./src/components/WritePraxisAi.vue?a8c6","webpack:///src/views/write/Praxis.vue","webpack:///./src/views/write/Praxis.vue?dd81","webpack:///./src/views/write/Praxis.vue?a407","webpack:///./src/views/write/Detail.vue","webpack:///src/views/write/Detail.vue","webpack:///./src/views/write/Detail.vue?9dab","webpack:///./src/views/write/Detail.vue?e7be","webpack:///./src/views/write/Report.vue","webpack:///src/views/write/Report.vue","webpack:///./src/views/write/Report.vue?b906","webpack:///./src/views/write/Report.vue?5f6f","webpack:///./src/views/write/List.vue","webpack:///./src/utils/reservation.js","webpack:///src/views/write/List.vue","webpack:///./src/views/write/List.vue?02a6","webpack:///./src/views/write/List.vue?1bee","webpack:///./src/views/write/writeNew/Index.vue","webpack:///src/views/write/writeNew/Index.vue","webpack:///./src/views/write/writeNew/Index.vue?e94a","webpack:///./src/views/write/writeNew/Index.vue?e37f","webpack:///./src/views/write/writeNew/InteractiveDiscussion.vue","webpack:///src/views/write/writeNew/InteractiveDiscussion.vue","webpack:///./src/views/write/writeNew/InteractiveDiscussion.vue?165e","webpack:///./src/views/write/writeNew/InteractiveDiscussion.vue?6722","webpack:///./src/views/write/writeNew/InterActive.vue","webpack:///src/views/write/writeNew/InterActive.vue","webpack:///./src/views/write/writeNew/InterActive.vue?195e","webpack:///./src/views/write/writeNew/InterActive.vue?1944","webpack:///./src/views/write/writeNew/PraxisOneInA.vue","webpack:///src/views/write/writeNew/PraxisOneInA.vue","webpack:///./src/views/write/writeNew/PraxisOneInA.vue?addf","webpack:///./src/views/write/writeNew/PraxisOneInA.vue?703f","webpack:///./src/views/write/writeNew/PraxisOneInB.vue","webpack:///src/views/write/writeNew/PraxisOneInB.vue","webpack:///./src/views/write/writeNew/PraxisOneInB.vue?268f","webpack:///./src/views/write/writeNew/PraxisOneInB.vue?d3b8","webpack:///./src/views/write/writeNew/PraxisOneInC.vue","webpack:///src/views/write/writeNew/PraxisOneInC.vue","webpack:///./src/views/write/writeNew/PraxisOneInC.vue?f0f4","webpack:///./src/views/write/writeNew/PraxisOneInC.vue?a70c","webpack:///./src/views/write/writeNew/PraxisOneInD.vue","webpack:///src/views/write/writeNew/PraxisOneInD.vue","webpack:///./src/views/write/writeNew/PraxisOneInD.vue?1092","webpack:///./src/views/write/writeNew/PraxisOneInD.vue?3542","webpack:///./src/views/write/writeNew/Write.vue","webpack:///src/views/write/writeNew/Write.vue","webpack:///./src/views/write/writeNew/Write.vue?81fb","webpack:///./src/views/write/writeNew/Write.vue?5e3a","webpack:///./src/views/write/writeNew/List.vue","webpack:///src/views/write/writeNew/List.vue","webpack:///./src/views/write/writeNew/List.vue?a676","webpack:///./src/views/write/writeNew/List.vue?2481","webpack:///./src/views/write/writeNew/WriteB.vue","webpack:///src/views/write/writeNew/WriteB.vue","webpack:///./src/views/write/writeNew/WriteB.vue?0394","webpack:///./src/views/write/writeNew/WriteB.vue?454b","webpack:///./src/views/write/writeNew/HistoryDetail.vue","webpack:///src/views/write/writeNew/HistoryDetail.vue","webpack:///./src/views/write/writeNew/HistoryDetail.vue?aea7","webpack:///./src/views/write/writeNew/HistoryDetail.vue?f55e","webpack:///./src/views/write/Submit.vue","webpack:///src/views/write/Submit.vue","webpack:///./src/views/write/Submit.vue?edfa","webpack:///./src/views/write/Submit.vue?8526","webpack:///./src/views/write/MySubmit.vue","webpack:///src/views/write/MySubmit.vue","webpack:///./src/views/write/MySubmit.vue?44b1","webpack:///./src/views/write/MySubmit.vue?fcbd","webpack:///./src/views/write/Notice.vue","webpack:///src/views/write/Notice.vue","webpack:///./src/views/write/Notice.vue?714b","webpack:///./src/views/write/Notice.vue?f005","webpack:///./src/views/micra_class/Index.vue","webpack:///./src/api/micra.js","webpack:///src/views/micra_class/Index.vue","webpack:///./src/views/micra_class/Index.vue?1409","webpack:///./src/views/micra_class/Index.vue?b04c","webpack:///./src/views/micra_class/Detail.vue","webpack:///src/views/micra_class/Detail.vue","webpack:///./src/views/micra_class/Detail.vue?f2a4","webpack:///./src/views/micra_class/Detail.vue?0eb8","webpack:///./src/views/active/List.vue","webpack:///src/views/active/List.vue","webpack:///./src/views/active/List.vue?f1b8","webpack:///./src/views/active/List.vue?cdf2","webpack:///./src/views/active/MyList.vue","webpack:///src/views/active/MyList.vue","webpack:///./src/views/active/MyList.vue?9a41","webpack:///./src/views/active/MyList.vue?1aa5","webpack:///./src/views/study/List.vue","webpack:///src/views/study/List.vue","webpack:///./src/views/study/List.vue?0b3d","webpack:///./src/views/study/List.vue?dba9","webpack:///./src/views/common/Serch.vue","webpack:///src/views/common/Serch.vue","webpack:///./src/views/common/Serch.vue?725f","webpack:///./src/views/common/Serch.vue?e7bb","webpack:///./src/views/active/Detail.vue","webpack:///src/views/active/Detail.vue","webpack:///./src/views/active/Detail.vue?3e68","webpack:///./src/views/active/Detail.vue?ed24","webpack:///./src/views/chat/chat.vue","webpack:///./src/views/chat/chat.vue?9392","webpack:///./src/views/chat/chat.vue?9e0b","webpack:///./src/views/chat/chatFile.vue","webpack:///./src/views/chat/chatFile.vue?1d44","webpack:///./src/views/chat/chatFile.vue?ec35","webpack:///./src/views/chat/NormalChat.vue","webpack:///src/views/chat/NormalChat.vue","webpack:///./src/views/chat/NormalChat.vue?7102","webpack:///./src/views/chat/NormalChat.vue?1617","webpack:///./src/views/chat/NewChat.vue","webpack:///./src/views/chat/NewChat.vue?7e27","webpack:///./src/views/chat/NewChat.vue?0b24","webpack:///./src/views/notice/List.vue","webpack:///src/views/notice/List.vue","webpack:///./src/views/notice/List.vue?11ea","webpack:///./src/views/notice/List.vue?b64a","webpack:///./src/views/notice/ExamList.vue","webpack:///src/views/notice/ExamList.vue","webpack:///./src/views/notice/ExamList.vue?e7e2","webpack:///./src/views/notice/ExamList.vue?84cc","webpack:///./src/views/notice/Detail.vue","webpack:///src/views/notice/Detail.vue","webpack:///./src/views/notice/Detail.vue?5e82","webpack:///./src/views/notice/Detail.vue?252b","webpack:///./src/views/Calendar.vue","webpack:///src/views/Calendar.vue","webpack:///./src/views/Calendar.vue?6b24","webpack:///./src/views/Calendar.vue?8e2b","webpack:///./src/views/exam/MiniPaper.vue","webpack:///src/views/exam/MiniPaper.vue","webpack:///./src/views/exam/MiniPaper.vue?611f","webpack:///./src/views/exam/MiniPaper.vue?3d59","webpack:///./src/views/exam/PaperNotice.vue","webpack:///src/views/exam/PaperNotice.vue","webpack:///./src/views/exam/PaperNotice.vue?2996","webpack:///./src/views/exam/PaperNotice.vue?18c4","webpack:///./src/views/exam/examList.vue","webpack:///src/views/exam/examList.vue","webpack:///./src/views/exam/examList.vue?36e7","webpack:///./src/views/exam/examList.vue?8874","webpack:///./src/views/exam/examReport.vue","webpack:///src/views/exam/examReport.vue","webpack:///./src/views/exam/examReport.vue?7dcf","webpack:///./src/views/exam/examReport.vue?02d1","webpack:///./src/layouts/PcLayout.vue","webpack:///src/layouts/PcLayout.vue","webpack:///./src/layouts/PcLayout.vue?10fb","webpack:///./src/layouts/PcLayout.vue?c7a6","webpack:///./src/views/pc/PcHome.vue","webpack:///./src/components/PcAiAssistant.vue","webpack:///src/components/PcAiAssistant.vue","webpack:///./src/components/PcAiAssistant.vue?3253","webpack:///./src/components/PcAiAssistant.vue?5860","webpack:///src/views/pc/PcHome.vue","webpack:///./src/views/pc/PcHome.vue?7d7d","webpack:///./src/views/pc/PcHome.vue?46ea","webpack:///./src/views/pc/PcExam.vue","webpack:///src/views/pc/PcExam.vue","webpack:///./src/views/pc/PcExam.vue?50ae","webpack:///./src/views/pc/PcExam.vue?6613","webpack:///./src/views/pc/PcExamNotice.vue","webpack:///src/views/pc/PcExamNotice.vue","webpack:///./src/views/pc/PcExamNotice.vue?c7d4","webpack:///./src/views/pc/PcExamNotice.vue?d01c","webpack:///./src/views/pc/PcMiniPaper.vue","webpack:///src/views/pc/PcMiniPaper.vue","webpack:///./src/views/pc/PcMiniPaper.vue?0423","webpack:///./src/views/pc/PcMiniPaper.vue?c9b3","webpack:///./src/views/pc/PcExamReport.vue","webpack:///src/views/pc/PcExamReport.vue","webpack:///./src/views/pc/PcExamReport.vue?693b","webpack:///./src/views/pc/PcExamReport.vue?37f4","webpack:///./src/views/pc/PcAi.vue","webpack:///src/views/pc/PcAi.vue","webpack:///./src/views/pc/PcAi.vue?4908","webpack:///./src/views/pc/PcAi.vue?a3ff","webpack:///./src/views/pc/PcPlant.vue","webpack:///src/views/pc/PcPlant.vue","webpack:///./src/views/pc/PcPlant.vue?adfa","webpack:///./src/views/pc/PcPlant.vue?3e9c","webpack:///./src/views/pc/PcMine.vue","webpack:///src/views/pc/PcMine.vue","webpack:///./src/views/pc/PcMine.vue?6fa6","webpack:///./src/views/pc/PcMine.vue?3157","webpack:///./src/views/pc/PcWrite.vue","webpack:///src/views/pc/PcWrite.vue","webpack:///./src/views/pc/PcWrite.vue?37ff","webpack:///./src/views/pc/PcWrite.vue?8742","webpack:///./src/views/pc/PcWriteProject.vue","webpack:///src/views/pc/PcWriteProject.vue","webpack:///./src/views/pc/PcWriteProject.vue?177d","webpack:///./src/views/pc/PcWriteProject.vue?d0cf","webpack:///./src/views/pc/PcWriteLearn.vue","webpack:///src/views/pc/PcWriteLearn.vue","webpack:///./src/views/pc/PcWriteLearn.vue?9cc1","webpack:///./src/views/pc/PcWriteLearn.vue?a855","webpack:///./src/views/pc/PcWritePraxis.vue","webpack:///src/views/pc/PcWritePraxis.vue","webpack:///./src/views/pc/PcWritePraxis.vue?b7a5","webpack:///./src/views/pc/PcWritePraxis.vue?2bf1","webpack:///./src/views/pc/PcWriteSubmit.vue","webpack:///src/views/pc/PcWriteSubmit.vue","webpack:///./src/views/pc/PcWriteSubmit.vue?2b61","webpack:///./src/views/pc/PcWriteSubmit.vue?8511","webpack:///./src/views/pc/PcWriteOrderList.vue","webpack:///src/views/pc/PcWriteOrderList.vue","webpack:///./src/views/pc/PcWriteOrderList.vue?58d8","webpack:///./src/views/pc/PcWriteOrderList.vue?a2f7","webpack:///./src/views/pc/PcWriteOrderDetail.vue","webpack:///src/views/pc/PcWriteOrderDetail.vue","webpack:///./src/views/pc/PcWriteOrderDetail.vue?abdc","webpack:///./src/views/pc/PcWriteOrderDetail.vue?0751","webpack:///./src/views/pc/PcWriteNotice.vue","webpack:///src/views/pc/PcWriteNotice.vue","webpack:///./src/views/pc/PcWriteNotice.vue?bf55","webpack:///./src/views/pc/PcWriteNotice.vue?0d64","webpack:///./src/views/pc/PcInteractiveArgument.vue","webpack:///src/views/pc/PcInteractiveArgument.vue","webpack:///./src/views/pc/PcInteractiveArgument.vue?2caf","webpack:///./src/views/pc/PcInteractiveArgument.vue?4517","webpack:///./src/views/pc/PcInteractiveWrite.vue","webpack:///src/views/pc/PcInteractiveWrite.vue","webpack:///./src/views/pc/PcInteractiveWrite.vue?fcd8","webpack:///./src/views/pc/PcInteractiveWrite.vue?d4cc","webpack:///./src/views/pc/PcInteractiveMultiWrite.vue","webpack:///src/views/pc/PcInteractiveMultiWrite.vue","webpack:///./src/views/pc/PcInteractiveMultiWrite.vue?35c2","webpack:///./src/views/pc/PcInteractiveMultiWrite.vue?188c","webpack:///./src/views/pc/PcWriteHistory.vue","webpack:///src/views/pc/PcWriteHistory.vue","webpack:///./src/views/pc/PcWriteHistory.vue?4578","webpack:///./src/views/pc/PcWriteHistory.vue?5f48","webpack:///./src/views/pc/PcWriteHistoryDetail.vue","webpack:///src/views/pc/PcWriteHistoryDetail.vue","webpack:///./src/views/pc/PcWriteHistoryDetail.vue?041b","webpack:///./src/views/pc/PcWriteHistoryDetail.vue?5fa2","webpack:///./src/views/pc/PcSpeak.vue","webpack:///src/views/pc/PcSpeak.vue","webpack:///./src/views/pc/PcSpeak.vue?eff4","webpack:///./src/views/pc/PcSpeak.vue?dd60","webpack:///./src/views/pc/PcEtalkHistory.vue","webpack:///src/views/pc/PcEtalkHistory.vue","webpack:///./src/views/pc/PcEtalkHistory.vue?c780","webpack:///./src/views/pc/PcEtalkHistory.vue?372d","webpack:///./src/views/pc/PcTodayTask.vue","webpack:///src/views/pc/PcTodayTask.vue","webpack:///./src/views/pc/PcTodayTask.vue?4204","webpack:///./src/views/pc/PcTodayTask.vue?98f7","webpack:///./src/views/pc/PcStudyList.vue","webpack:///src/views/pc/PcStudyList.vue","webpack:///./src/views/pc/PcStudyList.vue?55d1","webpack:///./src/views/pc/PcStudyList.vue?de1f","webpack:///./src/views/pc/PcListenIndex.vue","webpack:///src/views/pc/PcListenIndex.vue","webpack:///./src/views/pc/PcListenIndex.vue?a3c7","webpack:///./src/views/pc/PcListenIndex.vue?f084","webpack:///./src/views/pc/PcReadIndex.vue","webpack:///src/views/pc/PcReadIndex.vue","webpack:///./src/views/pc/PcReadIndex.vue?0ce1","webpack:///./src/views/pc/PcReadIndex.vue?9371","webpack:///./src/views/pc/PcListenLearn.vue","webpack:///src/views/pc/PcListenLearn.vue","webpack:///./src/views/pc/PcListenLearn.vue?7fcd","webpack:///./src/views/pc/PcListenLearn.vue?a492","webpack:///./src/views/pc/PcReadLearn.vue","webpack:///src/views/pc/PcReadLearn.vue","webpack:///./src/views/pc/PcReadLearn.vue?6f6d","webpack:///./src/views/pc/PcReadLearn.vue?75ab","webpack:///./src/views/pc/PcListenPraxis.vue","webpack:///src/views/pc/PcListenPraxis.vue","webpack:///./src/views/pc/PcListenPraxis.vue?58c0","webpack:///./src/views/pc/PcListenPraxis.vue?538f","webpack:///./src/views/pc/PcReadPraxis.vue","webpack:///src/views/pc/PcReadPraxis.vue","webpack:///./src/views/pc/PcReadPraxis.vue?410b","webpack:///./src/views/pc/PcReadPraxis.vue?535c","webpack:///./src/views/pc/PcPracticeHistory.vue","webpack:///src/views/pc/PcPracticeHistory.vue","webpack:///./src/views/pc/PcPracticeHistory.vue?6ee3","webpack:///./src/views/pc/PcPracticeHistory.vue?29d6","webpack:///./src/views/pc/PcPracticeDetail.vue","webpack:///src/views/pc/PcPracticeDetail.vue","webpack:///./src/views/pc/PcPracticeDetail.vue?ada8","webpack:///./src/views/pc/PcPracticeDetail.vue?0f32","webpack:///./src/views/pc/PcAbout.vue","webpack:///src/views/pc/PcAbout.vue","webpack:///./src/views/pc/PcAbout.vue?c484","webpack:///./src/views/pc/PcAbout.vue?a685","webpack:///./src/views/pc/PcChatIndex.vue","webpack:///./src/views/pc/PcChat.vue","webpack:///src/views/pc/PcChat.vue","webpack:///./src/views/pc/PcChat.vue?6624","webpack:///./src/views/pc/PcChat.vue?b437","webpack:///src/views/pc/PcChatIndex.vue","webpack:///./src/views/pc/PcChatIndex.vue?b3af","webpack:///./src/views/pc/PcChatIndex.vue?34fa","webpack:///./src/views/pc/PcNewChat.vue","webpack:///src/views/pc/PcNewChat.vue","webpack:///./src/views/pc/PcNewChat.vue?113a","webpack:///./src/views/pc/PcNewChat.vue?6a81","webpack:///./src/views/pc/PcChatFile.vue","webpack:///src/views/pc/PcChatFile.vue","webpack:///./src/views/pc/PcChatFile.vue?4eac","webpack:///./src/views/pc/PcChatFile.vue?3428","webpack:///./src/views/pc/PcNormalChat.vue","webpack:///src/views/pc/PcNormalChat.vue","webpack:///./src/views/pc/PcNormalChat.vue?d6ba","webpack:///./src/views/pc/PcNormalChat.vue?f228","webpack:///./src/views/pc/PcEtalkProject.vue","webpack:///src/views/pc/PcEtalkProject.vue","webpack:///./src/views/pc/PcEtalkProject.vue?d520","webpack:///./src/views/pc/PcEtalkProject.vue?0172","webpack:///./src/views/pc/PcMicraList.vue","webpack:///src/views/pc/PcMicraList.vue","webpack:///./src/views/pc/PcMicraList.vue?e46b","webpack:///./src/views/pc/PcMicraList.vue?0d1d","webpack:///./src/views/pc/PcMicraDetail.vue","webpack:///src/views/pc/PcMicraDetail.vue","webpack:///./src/views/pc/PcMicraDetail.vue?24f3","webpack:///./src/views/pc/PcMicraDetail.vue?4e61","webpack:///./src/views/pc/PcCollect.vue","webpack:///src/views/pc/PcCollect.vue","webpack:///./src/views/pc/PcCollect.vue?0d34","webpack:///./src/views/pc/PcCollect.vue?33ba","webpack:///./src/views/pc/PcNewWords.vue","webpack:///src/views/pc/PcNewWords.vue","webpack:///./src/views/pc/PcNewWords.vue?6bae","webpack:///./src/views/pc/PcNewWords.vue?1291","webpack:///./src/views/pc/PcStudyNote.vue","webpack:///src/views/pc/PcStudyNote.vue","webpack:///./src/views/pc/PcStudyNote.vue?a1cc","webpack:///./src/views/pc/PcStudyNote.vue?2046","webpack:///./src/views/pc/PcPlantSetting.vue","webpack:///src/views/pc/PcPlantSetting.vue","webpack:///./src/views/pc/PcPlantSetting.vue?c253","webpack:///./src/views/pc/PcPlantSetting.vue?fbe9","webpack:///./src/views/pc/PcActiveDetail.vue","webpack:///src/views/pc/PcActiveDetail.vue","webpack:///./src/views/pc/PcActiveDetail.vue?3643","webpack:///./src/views/pc/PcActiveDetail.vue?3388","webpack:///./src/router/pc.js","webpack:///./src/utils/device.js","webpack:///./src/router/index.js","webpack:///./src/directives/v-wordify.js","webpack:///./src/main.js","webpack:///./src/views/pc/PcAbout.vue?6833","webpack:///./src/assets/pc/mine-active.png","webpack:///./src/views/chat/chatFile.vue?2f42","webpack:///./src/views/pc/PcWriteHistoryDetail.vue?0d00","webpack:///./src/utils/auth.js","webpack:///./src/assets/pc/ai-active.png","webpack:///./src/views/Exam.vue?b769","webpack:///./src/views/pc/PcInteractiveArgument.vue?4dac","webpack:///./src/views/pc/PcWrite.vue?f7db","webpack:///./src/views/NewLogin.vue?8a1b","webpack:///./src/views/listen/Learn.vue?aa0d","webpack:///./src/views/pc/PcTodayTask.vue?e1fa","webpack:///./src/views/pc/PcHome.vue?b60d","webpack:///./src/views/listen/Index.vue?8a76","webpack:///./src/views/write/writeNew/PraxisOneInC.vue?e46b","webpack:///./src/views/collect/index.vue?a181","webpack:///src/views/chat/NewChat.vue","webpack:///./src/views/write/Index.vue?a167","webpack:///./src/views/listen/Detail.vue?7613","webpack:///./src/views/pc/PcActiveDetail.vue?431f","webpack:///./src/assets/pc/home.png","webpack:///./src/assets/pc/mine.png","webpack:///./src/components/WriteLearnAi.vue?b02e","webpack:///./src/views/plant/second_set.vue?b836","webpack:///./src/views/pc/PcMicraDetail.vue?2cda","webpack:///./src/views/etalk/ScriptPracticeDetail.vue?06a5","webpack:///./src/views/pc/PcWriteOrderList.vue?7053","webpack:///./src/views/pc/PcWriteSubmit.vue?7864","webpack:///./src/views/write/Detail.vue?92e5","webpack:///./src/views/write/writeNew/PraxisOneInB.vue?d343","webpack:///./src/views/pc/PcChat.vue?b879","webpack:///./src/views/read/Index.vue?593a","webpack:///./src/views/etalk/ScriptPractice.vue?e3d5","webpack:///./src/views/read/Learn.vue?497e","webpack:///./src/assets/pc/plant-bg.png","webpack:///./src/views/Plant.vue?ce00","webpack:///./src/views/pc/PcEtalkProject.vue?701a","webpack:///./src/views/pc/PcNewWords.vue?b6a7","webpack:///./src/assets/pc/plant.png","webpack:///./src/views/pc/PcWriteOrderDetail.vue?8eee","webpack:///./src/views/write/writeNew/InterActive.vue?6d42","webpack:///./src/views/pc/PcStudyNote.vue?ee96","webpack:///./src/views/write/writeNew/WriteB.vue?df7a","webpack:///./src/views/read/Report.vue?4708","webpack:///./src/components/ChatComposer.vue","webpack:///./src/utils/SpeechRecognitionClient.js","webpack:///src/components/ChatComposer.vue","webpack:///./src/components/ChatComposer.vue?c396","webpack:///./src/components/ChatComposer.vue?4e0f","webpack:///./src/views/pc/PcReadIndex.vue?b664","webpack:///./src/views/study/Note.vue?edb2","webpack:///./src/components/RelList.vue?6103","webpack:///./src/views/pc/PcPracticeDetail.vue?2d5b","webpack:///./src/assets/pc/exam-active.png","webpack:///./src/views/listen/DetailHis_pre.vue?793d","webpack:///./src/views/authLogin.vue?2e1e","webpack:///./src/views/write/Notice.vue?b089","webpack:///./src/views/pc/PcReadLearn.vue?aba0","webpack:///./src/views/write/List.vue?b2c5","webpack:///./src/views/write/Learn.vue?5f92","webpack:///./src/views/write/writeNew/InteractiveDiscussion.vue?6c3e","webpack:///./src/components/PdfViewer.vue?863b","webpack:///./src/views/write/writeNew/PraxisOneInD.vue?8b44","webpack:///./src/views/pc/PcStudyList.vue?cef4","webpack:///./src/assets/pc/logo.png","webpack:///./src/views/pc/PcListenLearn.vue?01a5","webpack:///./src/views/Mine.vue?5d5c","webpack:///./src/views/pc/PcCollect.vue?ac8b","webpack:///./src/views/Home.vue?1cf9","webpack:///./src/views/pc/PcSpeak.vue?4ba4","webpack:///./src/views/exam/PaperNotice.vue?019f","webpack:///./src/layouts/PcLayout.vue?ff56","webpack:///./src/views/pc/PcWriteHistory.vue?bc9e","webpack:///./src/views/plant/second.vue?604b","webpack:///./src/components/ReadAi.vue?d457","webpack:///./src/views/pc/PcReadPraxis.vue?c212","webpack:///./src/views/pc/PcListenIndex.vue?e673","webpack:///./src/api/aes.js","webpack:///./src/views/pc/PcAi.vue?13af","webpack:///./src/api/index8082.js","webpack:///./src/api/user.js","webpack:///./src/views/active/MyList.vue?3eb2","webpack:///./src/views/active/Detail.vue?4fc9","webpack:///./src/views/chat/NewChat.vue?f969","webpack:///./src/views/pc/PcPlantSetting.vue?2c61","webpack:///./src/views/exam/MiniPaper.vue?2a15","webpack:///./src/views/listen/Report.vue?95c0","webpack:///./src/views/pc/PcExamNotice.vue?9df6","webpack:///./src/views/MapIndex.vue?0b2b","webpack:///./src/views/read/Praxis.vue?1bb5","webpack:///./src/views/exam/examReport.vue?8bda","webpack:///./src/views/chat/chat.vue?296b","webpack:///./src/components/ListenPraxisAi.vue?f412","webpack:///./src/components/ListenAi.vue?876f","webpack:///./src/components/ChatComposer.vue?695b","webpack:///./src/views/pc/PcPlant.vue?45e3","webpack:///./src/components/WriteAi.vue?ba75","webpack:///./src/views/notice/List.vue?06b0","webpack:///./src/views/write/writeNew/PraxisOneInA.vue?6ba0","webpack:///./src/views/active/List.vue?c89c","webpack:///./src/components/WritePraxisAi.vue?9827","webpack:///./src/views/write/Write.vue?6fa1","webpack:///./src/views/plant/set_to.vue?d5be","webpack:///./src/layouts/NormalLayout.vue?eed7","webpack:///./src/views/pc/PcInteractiveMultiWrite.vue?3ed2","webpack:///src/views/chat/chat.vue","webpack:///./src/views/About.vue?f366","webpack:///./src/views/Ai.vue?f348","webpack:///./src/views/write/writeNew/List.vue?b94b","webpack:///./src/views/micra_class/Detail.vue?f662","webpack:///./src/views/write/writeNew/Write.vue?de34","webpack:///./src/components/PaxisCommon.vue?db6d","webpack:///./src/views/listen/DetailHis.vue?9cc9"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","components","ChatComposer","intervalId","title","new_audio","content","system","to_aplay","new_index","is_show_ai","stu_content","canuse","msg_list","type","stype","lang_time","is_history","filePath","total_count","from","currentSoundIndex","pageSize","pageLimit","project_id","is_get","global","lable","input","talk_type","isLoading","mounted","user","JSON","parse","localStorage","getItem","sid","type_id","$router","console","error","$route","query","chat_title","res_id","chat_item_answer","answer","get_history","chat","beforeDestroy","stop","clearInterval","methods","text","filepath","duration","saveEtalkStudy","onRecording","response","etalk_time_id","updateEtalkStudy","id","warn","$refs","audioPlayer","pause","$forceUpdate","fixGarbledText","buffer","Buffer","toString","simpleParse","md","replace","setTimeout","$message","message","center","item","log","question","navigator","clipboard","writeText","alert","err","index","en2cnDb","userinput","code","forEach","val","iscn","get_audio","get_audio_read","str","new_answer","new_str","trim","getttsUrl","inputtext","new_response","msg_index","results","ret","Transformation","Response","DubbingQueryResult","VoiceURL","url","stopSound","sound","audio","Audio","play","history","back","container","scrollContainer","scrollTop","scrollHeight","$set","dialogue","etalk_cate_id","preuserinput","stringify","readText","document","getElementById","scrollIntoView","change_show_ai","getAIHistory","page","size","history_list","list","reverse","new_msg","concat","totalScroll","SECRET_KEY","buildSign","keys","sort","signStr","filter","k","undefined","map","String","join","MD5","getParamNames","checkParams","getUserStudy","checkSign","request","method","params","withAuthorization","getDateList","getMenuList","getNewUserResourceList","HotResouceList","getActiveList","getActiveDetail","NoticeList","NoticeDetail","longtext2voice","longtextSearch","authLogin","UserTaskSend","getTask","getUserRowByToken","token","getAuthorizationToken","getListByWord","AddWord","getListMyByWord","topicDialogue","speak_fetch","completions","service","axios","baseURL","process","timeout","interceptors","use","config","headers","resolveLanguageBaseUrl","contentType","FormData","includes","qs","appendAuthorizationHeader","Promise","reject","LANGUAGE_KEY","DEFAULT_LANGUAGE","languageOptions","label","port","getStudyLanguage","some","setStudyLanguage","next","setItem","getStudyLanguageLabel","current","find","child","source","URL","segments","pathname","split","test","render","_vm","this","_c","_self","attrs","staticRenderFns","Vue","_Cell","_Calendar","_Field","ddesign","ElementUI","Message","_Tabbar","_TabbarItem","_Icon","_Popup","_Search","_Tab","_Tabs","_Progress","_NavBar","_Swipe","_SwipeItem","_Image","_Uploader","_NoticeBar","_CountDown","_PullRefresh","_Loading","_ActionSheet","_Empty","active","component","staticClass","on","onTabChange","model","callback","$$v","expression","getIcon","_v","path","watch","newPath","route","pop","getPlant","subjectCateGet","PlantSave","now","Date","day","getDate","now_month","getMonth","now_date","getFullYear","getUserSign","dateline","userSign","$event","showLanguageSheet","_s","languageLabel","countSign","_m","staticStyle","to_calendar","countTask","total_finish_count","total_task_count","today_minutes","plan_minutes","etalk_total_minutes","fast_list","_e","_l","page_url","to_page","img_url","notice_text","to_notice_list","active_info","to_active","start_date","end_date","NewResouceList","to_study_list","to_praxis","cover","category_id","studyLanguage","showAi","to_dingtalk","class","changeLanguage","to_free_talk","to_script_talk","to_ai_write","style","speaking","time","show_video","stu_placeholder","is_speak","recorder","mediaStream","audioChunks","audioDetails","recStop","recOpen","getRelList","resource_id","RelList","status","now_status","getHotList","saveUserStudyResource","log_id","resources_id","Ai","HotList","languageRequestId","etalk_minutes","all","getHotResouceList","refreshHomeData","saveRefreshedUser","requestId","Array","isArray","active_res","new_total","dates","element","link_url","active_id","location","href","GetUserInfo","computed","exam_list","start_time","PaperNotice","self_exam","self_exam_time","show_history","to_all_exam","right_count","to_detail_exam","StartMiniPaper","getMiniPaperByListen2","ques_id","StartMiniPaperTo","getMiniPaperByRead","ListenMiniSubmit2","ReadMiniSubmit","getMiniPaperHisList","getMiniPaperRow","pc_id","timestamp","is_allow","count","row","paper_id","count_load","has_time","end_time","timestampToDatetime","next_start_time","date","year","month","getPaperList","PaperNotice1","to_etalk","to_read","to_write","to_listen","titleList","taskList","scrollTarget","now_level","now_progress","getUserMapLevel","level","sub_level","onClickLeft","to_ai","to_project","feedback","to_history","isPc","ref","audioUrl","playingIndex","messages","playAudio","readAnswer","sending","sendInput","stopAudio","domProps","compiledMarkdown","escapeHtml","renderInline","renderMarkdown","lines","output","listType","closeList","line","heading","match","unordered","ordered","nextType","props","markdownContent","required","MarkdownRenderer","Boolean","meta","pc","disposed","sendMessage","scrollToBottom","$nextTick","el","user_id","Error","indexOf","audioRequest","player","catch","EtalkCateList","is_file","icon_img","desc","show_confim","confim","check_item","tip_content1","next_confim","cancel_confim","confim_ok","tip_content2","next_confim_ok","next_confim_cancel","tip_content3","getEtalkCateList","directives","rawName","courseStatus","$$selectedVal","target","options","selected","_value","multiple","levels","showGenerateNotice","loading","loadList","filteredCourses","courses","course","color","openCourse","_k","keyCode","preventDefault","icon","hideBrokenIcon","description","progress","width","statusLabel","colors","levelColors","CSE3","CSE4","CSE5","CSE6","CSE7","CSE8","CSE9","Set","a","b","localeCompare","numeric","normalizeCourse","rawProgress","Number","total","resource_num","studied","study_num","Math","round","max","min","isFinite","toUpperCase","completed","event","visibility","userResponse","courseName","background","sentences","sentence","activeIndex","selectSentence","english","translation","speak","recording","toggleRecording","recordings","playRecording","refInFor","DEFAULT_SENTENCES","stream","stopRecording","speechSynthesis","cancel","utterance","SpeechSynthesisUtterance","lang","rate","mediaDevices","getUserMedia","MediaRecorder","chunks","ondataavailable","onstop","blob","Blob","mimeType","createObjectURL","releaseStream","start","state","getTracks","track","currentTime","revokeObjectURL","InfoList","to_ai_project","create_time","OldInfoList","getOldInfoList","getNewInfoList","is_has_plant","styleWidth","aim_level","set_plant_second","to_set","listen","read","write","to_plant","userInfo","month_minutes","user_level","listen_level","read_level","write_level","floor","toFixed","set_aim_level","LevelInfo","info","onClickActive","BookList","set_date","EditNoteBook","DelNoteBook","has_more","load_more","isEdit","noteTitle","show","minDate","onConfirm","writing","composing","clear_input","submitNote","EditNote","check_type","has_more1","total_all","total_all1","formatDate","getNoteBookList","sign","getNoteBook","check","AddNoteBook","noteId","delNoteBook","note","to_self_test","listCate","is_check","check_list_cate","lable_name","subjectCate","check_subject_cate","check_time","set_check_time","user_time","submit","subject_str_arr","type_str_arr","subject_str","type_str","v","hour_str","hour_type","userno","RightCount","to_collect","to_note","disabled","diagnosisReportUrl","to_diagnosis_report","showLevel","userLevel","speak_level","show_level","currentTarget","arguments","to_about","has_count","report","diagnosis_report","diagnostic_report","diagnosisReport","diagnosticReport","file_url","fileUrl","report_url","reportUrl","diagnosis_report_url","diagnostic_report_url","diagnosticReportUrl","pdf_url","pdfUrl","myChart","echarts","option","radar","indicator","radius","shape","series","tooltip","trigger","areaStyle","itemStyle","opacity","lineStyle","plan_aim_level","setOption","getRightCount","userNo","student_no","getExamPdf","link","createElement","download","body","appendChild","click","removeChild","$toast","user_name","user_pwd","checked","login","user_no","saveLoginUser","to_zdtxz","redirectUri","encodeURIComponent","handleLogin","showBox","parseInt","imgSize","closeBox","padding","componentType","tag","captchaType","verifyType","figure","arith","vSpace","explain","blockSize","barSize","defaultImg","height","setSize","imgHeight","imgWidth","backImgBase","showRefresh","refresh","tipWords","passFlag","leftBarWidth","leftBarBorderColor","transaction","transitionWidth","finishText","moveBlockBackgroundColor","left","moveBlockLeft","transition","transitionLeft","iconClass","iconColor","blockBackImgBase","aesEncrypt","word","keyWord","CryptoJS","enc","Utf8","srcs","encrypted","AES","encrypt","ECB","pad","Pkcs7","resetSize","vm","img_width","img_height","bar_width","bar_height","parentWidth","$el","parentNode","offsetWidth","parentHeight","offsetHeight","barWidth","barHeight","defaults","BASE_API","authorization","res","reqGet","reqCheck","default","secretKey","backToken","startMoveTime","endMovetime","tipsBackColor","top","isEnd","barArea","querySelector","immediate","handler","init","onselectstart","getPictrue","$parent","$emit","_this","removeEventListener","e","move","end","addEventListener","touches","x","pageX","clientX","startLeft","getBoundingClientRect","stopPropagation","bar_area_left","move_block_left","moveLeftDistance","y","then","repCode","clickShow","captchaVerification","clientUid","ts","repData","originalImageBase64","jigsawImageBase64","repMsg","pointBackImgBase","bindingClick","canvasClick","tempPoints","tempPoint","position","barAreaColor","barAreaBorderColor","checkNum","fontPos","checkPosArr","num","poinTextList","getMousePos","canvas","createPoint","pointTransfrom","obj","offsetX","offsetY","pos","assign","wordList","pointArr","newPointArr","VerifySlide","VerifyPoints","locale","require","language","browserLanguage","instance","uuid","hexDigits","substr","random","slider","point","i18n","$t","$options","Verify","success","useVerify","verify","reg","RegExp","search","decodeURIComponent","StuCode","save","urlParams","URLSearchParams","hashQuery","hash","NewUserResource","changShow","listData","to_learn","read_num","keyword","check_subject_cate_id","to_share","UserResource","getList","getCateList","getResources","getJobList","submitData","updateUserStudy","jobAnswer","getMyFeedBackList","getHistoryList","getHistoryInfo","getsHistory","getSearchList","saveAccessLog","createCaptcha","checkCaptcha","to_chat","subject_cate_id","getRandomThree","arr","clone","randomIndex","rec","Recorder","sampleRate","bitRate","onProcess","buffers","powerLevel","bufferSampleRate","wave","open","recwave","WaveDiv","elem","msg","isUserNotAllow","recognition","recBlob","localUrl","upload","startRecognition","SpeechRecognition","webkitSpeechRecognition","continuous","interimResults","onresult","interimTranscript","finalTranscript","resultIndex","isFinal","transcript","onerror","onend","form","append","getTime","xhr","XMLHttpRequest","onreadystatechange","readyState","responseText","statusText","send","controls","src","ListenAi","time_level","subject_id","subject_name","resources","hisLabel","reqired","ListenLearnAi","_vm$resources$resourc","_vm$resources$resourc2","_vm$resources$resourc3","dialog_show","imageBase64","HistoryList","to_detail","to_HistoryList","playVideo","pauseVideo","activeTitle","scopedSlots","_u","fn","proxy","jobList","answerCard","change_card","to_submit","canread","file_type","file_path","onWordClick","focusInput","caninput","now_index","this_inputIndex","my_insert_word","autofocus","my_insert","cancel_caninput","change_caninput","updateTime","onAudioEnded","loadMetadata","canPlay","audio_status","audioPlay","audioPause","percentage","change_praxis_show","word_show","scColor","add_word","wordDetail","meaning_CH","translate","directions","itemChild","indexChild","isInput","insertWordAnswers","inputIndex","inputIndex1","adjustInputWidth","change_count","select_question1","this_show1","changShow1","optionsArray1","now_inputIndex1","item1","index1","change_answer1","select_question2","this_show2","changShow2","now_ind2","now_inputIndex2","item2","index2","change_answer2","select_question","optionsArray","check_answer","user_answer","inputAnser","toggleAnswer","card_show","can_submit","this_show","now_ind","change_answer","inject","localData","getSharedData","fromtype","has_answer","praxis_show","total_num","globalInputIndex","this_job_id","now_inputIndex","this_job_id1","this_inputIndex1","now_index1","now_ind1","this_job_id2","this_inputIndex2","now_index2","created","isAnswerCorrect","maxLength","distance","leven","toLowerCase","similarityLeven","similarityJw","jaroWinkler","groupedQuestions","groupSize","groups","ind","itemIndex","options_answer","parsedContent","removePunctuation","JobList","submit_data","total_jindu","total_jindu1","total_jindu2","singleAnswerAdded","stu_answer","is_right","job_id","childindex","user_answer_old","trim_str","userAnswers","every","answerSet","userAnswer","has","areAllNumbers","normalizedUserInput","is_right1","ans","my_answer","user_answerA","right_answer","check_right","compareStringsIgnoreCaseAndSymbols","resp","str1","str2","normalizedStr1","normalizedStr2","tempSpan","fontSize","getComputedStyle","fontFamily","innerText","placeholder","replacePTagsWithBr","html","index_id","lastIndex","regex","exec","textChunk","processedContent","handleWordClick","normalizeHtmlEntities","newVal","processContent","wrapWords","classList","contains","dataset","errorMessage","zoom","minZoom","changeZoom","zoomStep","maxZoom","resetZoom","pdfjsLib","workerPort","PdfWorker","workerSrc","pdf","loadToken","renderToken","rendering","renderDocument","renderPages","destroy","pages","innerHTML","tokenValue","apiHost","hostname","fileHost","normalizeUrl","fetch","credentials","ok","arrayBuffer","byteLength","pdfDocument","promise","describeError","clientWidth","innerWidth","pageNumber","numPages","getPage","baseViewport","getViewport","scale","viewport","className","setAttribute","canvasContext","getContext","delta","nextZoom","protocol","ListenPraxisAi","PaxisCommon","ArticleParser","PdfViewer","cansubmit","countdown","provide","uid","sendCode","clearTimer","timer","setInterval","close","videoPlayer","myInput","focus","his_id","decrypt","check_res","formatTime","seconds","padStart","res1","captchaCode","arrayContains","jobAnswerList","ua","ub","answer_info","rightCountTotal","countTotal","jobAnswerList1","right_bfb","ListAnswer","array","jobList1","parseIfJson","getJobAnswer","answerMap","Map","set","job","answers","startsWith","to_new_words","changeGetMyByWord","totalWord","addLoad","getMyByWord","lst","normalizeContent","s_id","ReadAi","ReadLearnAi","_vm$resources$resourc4","_vm$resources$resourc5","_vm$resources$resourc6","correctRate","isPdfResource","ReadPraxisAi","new_article","resource","fileType","endsWith","showHistory","showPaxisCommon","article","words","_vm$jobAnswerList1$","noticeTitle","toHomeNoticeList","writeTeacherList","to_list","avatar","labels","orderNumTotal","MyNewFeedBack","reply_row","toNewIndex","InterActive","InteractiveDiscussion","toAiHistory","WriteAi","noticeInfo","tea_id","getMyNewFeedBack","writeTeacher","getWriteTeacherList","getNoticeList","wordCount","countWords","reback","WriteLearnAi","submit_paper","SysInputText","WritePraxisAi","cur","visible","answer_show","total_time","checkValue","title_status","writting_text","str3","writeSubmit","get_resources","score","NewjobAnswerList","chang_tea","checkType","change_lable","college_name","isReservationFull","writeTeacherLog","addr","logTimeList","timeline","mineWriteTeacher","teacherAvatar","teacher_name","cancel_order","toTimestamp","NaN","isNaN","isReservationExpired","values","endTime","deadline","interval","indicatorDots","getMyList","keywords","cancelOrder","log_time_id","y_id","calcItemWidth","changeSwioer","swipeItems","changeWrite","paragraph","pIndex","check_index","mySwipe","swipeTo","handleResize","AiContent","AIWrite","historySave","subject_title","topic","user_input","class_id","getSubject","writingAiFetch","Level","writeTitle","get_subject","idloading","only_AI","only_AIFun","only_My","only_MyFun","setItemRef","autoScrollEnabled","itemRefs","scrollToLastMessage","deep","lastElement","behavior","block","threshold","isNearBottom","clientHeight","last_ques","historyList","page1","records","AIWriteList","msgDetail","getHistoryDetail","get_detail","intro","logList","check_date","change_date","order_num","time_id","afterRead","mine_submit","file","applyAuthorizationToXhr","getById","days","getDay","saveWriteTeacherOrder","getTeaById","orderInfo","writeTeacherOrder","mobile","writeTeacherLogTime","feedBackList","save_content","saveFeedBack","reserve_status","getMyOrderInfo","getFeedBackList","teacher_order_id","saveFeedback","this_check","changeTab","weike_list","to_micra","create_date","getMicraList","getMicraDetail","video_id","weike_info","autoplay","to_all","getDetail","active_list","active_list_all","attachment","my_status","cancel_active","active_list_has","active_list_cancel","active_list_finish","getMyActivityList","getActiveList1","getActiveList2","getActiveList3","NewResouceList1","fcreate_time","load_more1","getNewUserResourceList1","getHotUserResourceList","getUserResourceList","all_active","loadError","attended","full","isFull","quotaText","hasCapacity","capacity","submitted","onVisibleChange","submitting","userPhone","userEmail","submit_info","attend_num","remaining","Submitactivity","activity_id","phone","email","onRefresh","onPlay","myFunction","playSound","to_restart_chat","copyText","enCnText","readText2","to_new_chat","Toast","scrollToElement","taskId","response1","task_id","resolve","resultUrl","startPolling","to_exam_notice","notice_list","is_read","notice_id","NoticeExamList","notice_info","prevMonth","nextMonth","is_today","signed","nodata","maxContinuousDays","signedDays","getTaskList","calculateContinuousDays","generateCalendar","firstDay","daysInMonth","checkinDates","continuousDays","prevDate","currentDate","diff","getSignedDays","progressWidth","limitTime","part","partName","check_short_conver","paper_info","context","speakingIndex","speakingList","currentSpeaking","direction","speakingStatus","startSpeakingRecord","stopSpeakingRecord","recordingDurationText","audio_url","next_paper","recordingSeconds","recordingTimer","speakingAudioBlob","speakingAudioUrl","minutes","optionA","optionB","optionC","optionD","getUser","questions","questions1","listeningShortConversation","readingPassage","submitListening","submitReading","getMiniPaperByListen","initSpeakingPart","submit_data1","shortConversationList","question_id","readingPassageList","clearRecordingTimer","loadPaper","to_paper","listeningShortConversationQuestion","readingPassageQuestion","getPaperInfo","stageStyle","logoSrc","navList","designWidth","designHeight","transform","updateScale","documentElement","innerHeight","fastList","toPage","toCalendar","toTodayTask","toStudyList","currentCourse","toPraxis","categoryText","currentCourses","currentCourseIndex","setCurrentCourse","recommendCourses","categoryName","subject","calendarTitle","weekList","calendarDays","muted","today","noticeTabs","noticeActive","changeNoticeTab","noticeLoading","noticeList","isActivityNotice","noticeOpening","openActivityNotice","noticeTypeClass","noticeTypeText","noticeDateText","scene","robotSrc","sceneConfig","greeting","quickList","goQuick","goChat","resourcesId","writeTopics","configs","quick","home","action","loadWriteTopics","topics","chatQuery","PanelTitle","functional","h","ctx","PcAiAssistant","currentCourseTimer","prevMonthDays","monthIndex","currentNoticeTab","allSettled","loadStudy","loadSign","loadMenu","loadCourses","loadNotice","reason","itemDateText","update_time","type_name","notice_type_name","category_name","notice_type","category","activeId","activities","normalizeTitle","matches","activity","warning","normalizeImg","normalizeSignDate","matched","hot","startCurrentCourseCarousel","initUser","checkPlant","pushTask","toExamNotice","selfExamLabel","selfExamTime","examList","toExamReport","paper_name","recordStatusClass","recordStatusText","status_name","status_text","evaluate_status_name","review_status_name","review_status","evaluate_status","loadExamList","loadStartInfo","loadRecommend","playing","startExam","remainText","audioEnded","audioStatus","countLoad","paperInfo","checkOption","nextPaper","submitPaper","remainingTime","paperId","quesId","totalSeconds","ceil","startTimer","initial","submitCurrentAnswer","loadListen","loadRead","reportItems","listenItems","first","readItems","optionKeys","OptionRows","pcId","normalizeItem","parseJson","fallback","cleanText","normalizeAnswerValue","answerFromResult","questionId","optionText","buildOptions","passage","getRoutePaperId","loadReport","aiCards","cls","go","todayMinutes","planMinutes","toPlanSetting","typeCounts","goToStudy","taskTitle","backgroundImage","plantBg","goToStudyList","aimLevel","loadPlant","loadPlanData","loadSelfExam","rightCount","userLevelNum","levelDesc","levelBars","tools","chart","downloadDiagnosisReport","renderRadar","splitNumber","axisName","fontWeight","splitLine","splitArea","axisLine","symbol","symbolSize","loadUserInfo","loadRightCount","dispose","toAiWrite","update","toTeacherList","toWriteNotice","hasFeedback","toMyOrder","teacherList","toSubmit","normalizedLabels","teacherAddress","teacherTime","loadTeachers","loadFeedback","lastResource","toLearn","categoryId","loadLastResource","subjectName","resourceList","statusClass","subjectId","normalizeStatus","resourceContent","questionDirections","questionTitle","saveDraft","onPaste","clearInput","logId","draftKey","loadData","teacher","teacherLabels","rawDate","checkedLogIndex","changeDate","timeId","checkTime","fileName","canSubmit","mineSubmit","weeks","teaId","normalizeLabels","formatDateLabel","normalizeLog","firstAvailableIndex","findIndex","defaultIndex","applyLog","files","loadTeacher","orderList","toDetail","avatarSrc","formatOrderTime","canceled","finished","loadOrders","logInfo","orderTime","dingding","order","saveContent","clearContent","yId","logTime","showMessage","loadOrderInfo","pageConfig","goBack","modeList","bg","notice","startWrite","isNarrative","writeType","modes","routeName","pageTitle","aiContent","aiWriting","typeId","classId","cachedContent","cachedAiWriting","ai","removeItem","onlyAI","toggleOnlyAI","onlyMy","toggleOnlyMy","msgList","canWrite","openEditor","editorVisible","closeEditor","clearWriting","saveWriting","storageKey","last","saveCache","safeParse","clearCache","generateAi","cached","mobileList","mobileContent","loadSubject","initData","typeText","cleanTitle","hasMore","loadMore","subjectTitle","contentList","hisId","loadDetail","entries","image","openEntry","imageBase","loadHistory","todayList","olderList","group","items","openHistory","totalMinutes","getStoredUser","responses","study","levelName","grade","level_name","level_id","isDone","finish_status","is_finish","resourceId","loadTasks","tabs","activeTab","currentList","updateScrollHint","rightRate","green","actionText","showLoadMore","canScrollDown","scrollList","finishedList","studyingList","hotList","finishedPage","studyingPage","hasMoreFinished","hasMoreStudying","studyGrid","grid","scrollBy","matchMedia","normalizeList","loadStudying","loadFinished","applyInitialTab","loadHot","resourceName","dialogShow","enabled","canReadOrigin","toggleOrigin","hasDirections","audioSrc","toggleAudio","isPlaying","seekAudio","audioPercent","durationText","showOrigin","isInputType","childIndex","selectOption","markTextAnswer","titleChunks","chunk","chunkIndex","markFillAnswer","selectOptions","toHistoryList","latestHistory","totalCount","historyRate","answeredCount","timerText","answerCards","card","isCardActive","done","scrollToAnswer","openSubmitConfirm","refreshCaptcha","verifyCode","checkCaptchaCode","submitConfirmVisible","confirmSubmit","currentSeconds","durationSeconds","startTime","nowTime","currentIndex","currentBlankIndex","cards","blankCount","getBlankCount","blankIndex","questionIndex","isBlankAnswered","isAnswered","normalizeOptions","normalizeSelectAnswers","optionsAnswer","withTimeout","timeoutMs","race","__timeout","normalizeJobList","parseFillTitle","fill","countPlaceholders","normalizeFillText","normalized","_","number","answerGroup","right","toHistoryDetail","loadJobList","optionIndex","chunkCount","answerCount","standardCount","normalizeAnswerText","isFillRight","standardAnswer","userText","raw","standards","tokens","userTokens","buildSubmitData","submitList","selectedLabel","rect","percent","remain","scrollToQuestion","querySelectorAll","loadHistoryList","isFillType","wordShow","wordCollected","addWord","userValue","isRead","practiceType","answerInfo","rightPercent","submitTime","answerLabels","rightLabels","wrong","answerAt","answerDisplayText","rightAnswerText","userAnswerText","originVisible","audioPlaying","audioTime","flatAnswers","historyId","reduce","fillBlankCount","answersFor","optionsAnswerParsed","parseAnswerTokens","normalizeAnswerMap","jobId","rawJobList","loadAnswers","highlights","sectionName","loadingHistory","chatItemAnswer","restartChat","translateText","translateActiveIcon","translateIcon","hasReadAudio","toggleReadAudio","stopAudioIcon","readAudioIcon","quickQuestions","toNewChat","isFetching","stopReadAudio","stuContent","langTime","resId","projectId","isHistory","etalkTimeId","initFromRoute","requiresEtalkAuth","getSectionName","initQuickQuestions","getHistory","plainText","scrollBody","getContextMessages","buildParams","requestStype","getRequestStype","requestInput","getRequestInput","PcChat","etalkCateList","handleProject","confirmVisible","confirmStep","currentItem","nextConfirm","cancelConfirm","toSubjectChat","toFileChat","getUserInfo","categories","activeType","changeType","courseCover","FALLBACK_COVER","normalizeCover","goList","recommendations","selectCourse","videoId","listening","reading","loadRecommendations","loadCourse","toNewWords","searchWords","meaning","loadWords","showList","startNew","notes","editNote","deleteNote","saveNote","modifiers","clearForm","saving","editingId","reset","loadNotes","payload","confirm","toSelfTest","typeOptions","toggleOption","subjectOptions","timeMode","customMinutes","_n","TYPE_OPTIONS","parseNames","markSelections","names","planResponse","topicResponse","plan","isInteger","typeStr","subjectStr","loadSetting","loadActivity","coverFailed","openRegistration","showRegistration","uploading","rules","nativeOn","submitRegistration","uploadAttachment","removeAttachment","formError","slot","cancelUpload","registrationForm","clearValidate","uploadRequest","abort","fail","onload","ontimeout","onloadend","baseUrl","valid","validate","pcRoutes","PcLayout","redirect","children","PcActiveDetail","requiresAuth","PcHome","PcExam","PcExamNotice","PcMiniPaper","PcExamReport","PcAi","Feedback","PcChatIndex","PcNewChat","PcChatFile","PcNormalChat","PcWrite","PcWriteProject","PcWriteLearn","PcWritePraxis","PcWriteSubmit","PcWriteOrderList","PcWriteOrderDetail","PcWriteNotice","PcWriteHistory","PcWriteHistoryDetail","PcInteractiveArgument","PcInteractiveWrite","PcInteractiveMultiWrite","PcSpeak","ScriptPractice","ScriptPracticeDetail","PcEtalkHistory","PcEtalkProject","PcPlant","PcTodayTask","PcStudyList","PcListenIndex","PcListenLearn","PcReadIndex","PcReadLearn","PcListenPraxis","PcReadPraxis","PcPracticeHistory","PcPracticeDetail","PcMicraList","PcMicraDetail","PcMine","PcCollect","PcNewWords","PcStudyNote","PcPlantSetting","PcAbout","PC_PREFIX","mobileRouteMap","pcRouteMap","mobilePath","isPcDevice","userAgent","isiPadOS","maxTouchPoints","isPhoneUA","isTabletUA","isPcRoute","getPcPath","tab","getMobilePath","VueRouter","routes","TabBarLayout","Home","Exam","Plant","Mine","NormalLayout","stuNote","SetPlant","PlantSecond","PlantSecondSet","Index","ListenLearn","Praxis","Detail","DetailHis","DetailHisPre","Report","LHistoryList","ReadIndex","ReadLearn","ReadPraxis","ReadDetail","ReadDetailHis","ReadDetailHisPre","ReadReport","RHistoryList","WriteIndex","WriteProject","PraxisOneInA","PraxisOneInB","PraxisOneInC","PraxisOneInD","WriteA","WriteB","WriteList","HistoryDetail","Write","WriteLearn","WritePraxis","WriteDetail","WriteReport","WriteTeaList","WriteSubmit","MySubmit","WriteNotice","MicraList","MicraDetail","MapIndex","ActiveList","MyActiveList","ActiveDetail","StudyList","Serch","MiniPaper","ExamList","ExamReport","ChatIndex","ChatFile","NormalChat","NewChat","noAuth","Calendar","About","Collect","NewWords","Etalk","Project","History","Login","NewLogin","router","setDingTalkTitle","dd","ready","biz","navigation","setTitle","beforeEach","to","loggedIn","usePc","pcTargetPath","mobileTargetPath","record","afterEach","scrollTo","processNode","node","nodeType","Node","TEXT_NODE","nodeValue","parts","fragment","createDocumentFragment","span","textContent","cursor","createTextNode","replaceWith","ELEMENT_NODE","childNodes","inserted","binding","__wordifyListenerAdded","_e$target","componentUpdated","directive","wordify","productionTip","ctrlKey","shiftKey","$http","App","$mount","USER_KEY","AUTHORIZATION_KEY","setRequestHeader","saveAuthorizationToken","nextUser","fixed","sendText","busy","voiceMode","startVoice","voiceOpen","connecting","recognizedText","cancelVoice","sendVoice","SpeechRecognitionClient","constructor","bitsPerSample","channelCount","bufferSize","socket","isConnected","audioContext","audioProcessor","audioStream","isRecording","recordingStartTime","audioSize","recordingDuration","visualizerInterval","analyserNode","onStatusChange","onResultUpdate","onError","setStatusCallback","setResultCallback","setErrorCallback","connect","serverUrl","_updateStatus","WebSocket","onopen","onmessage","_handleV2Message","_triggerError","disconnect","onclose","OPEN","echoCancellation","noiseSuppression","AudioContext","webkitAudioContext","createMediaStreamSource","createScriptProcessor","onaudioprocess","_processAudioData","destination","_updateResult","stopVisualizer","getRecordingBlob","pcmLength","wavBuffer","ArrayBuffer","view","DataView","offset","_writeString","setUint32","setUint16","wavBytes","Uint8Array","writeOffset","getRecordingDurationSeconds","startVisualizer","parentElement","createAnalyser","fftSize","bufferLength","frequencyBinCount","dataArray","clearRect","getByteFrequencyData","fillStyle","fillRect","msgtype","ws","cw","w","audioBuffer","inputBuffer","getChannelData","pcmData","_floatTo16BitPCM","_sendV2AudioData","sample","dataView","setUint8","charCodeAt","VOICE_WS_PROXY","VOICE_WS_ENDPOINTS","normalizeVoiceWebSocketUrl","endpoint","initialVoice","notify","session","client","voiceSession","getWss","releaseVoice","websocket_url","rejectConnect","clearTimeout","bizId","bizName","lan","sr","bps","fs","searchParams","startRecording","StopWebSocketUrl","fields","L","fromCharCode","M","Uint16Array","Uint32Array","f","self","H","q","$","charAt","I","atob","W","Q","U","R","V","N","T","F","B","bufferType","resize","jb","K","g","C","J","dU","z","A","fU","GU","Z","POSITIVE_INFINITY","E","X","G","u","subarray","D","Y","S","O","StringExtract","crypt_key","bdD","crypt_iv","UdD","idD","ldD","VdD","OdD","BdD","ydD","sdD","ZdD","KdD","qdD","JdD","ndD","responseType"],"mappings":"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","file":"app.9062ebc81f7061f1a0e4.js?version=5.4.8","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([1,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcExamReport.vue?vue&type=style&index=0&id=372b760c&prod&scoped=true&lang=css\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAjCAYAAAD17ghaAAAEM0lEQVR4AaxXPWgUQRR+s9kTQYVTQdHqtFHU5Fax0EbPQpB4ylmqhRFzUavEQkEEc7GxNFbKXSBaKHYaPcUuprMQL38IVmcaAxYSUSEkezu+b5JdZze3d7uXDPd237yZ9973vplNZgxqoVmnHqXS2eLLdLYk06eL1Y7TQ5daCKNcYgGwcsNJTjgsTbNKJHKEJkRKCPmE7ZUD2VIGpjgSGUBHttQvbbtKQnTVTSCE1UY0mmZmwBBFbE0BgF6uriqICkSUpKZN5MAQAIOxZtNDAYDOdLY0Cnq56lSzQMFxAAZjKCA4pvdXAAB9XPEw6OSJGZbV/JIogOOF7g8fgPbOYhfo44rrr3OrUPT9wRtZD+MBQOWGIYb1wbXXRc6x7T49rgfANs3Y66wHiq5L37J6AJoFuHj2AF04u7/htD27ttDV84cI74YTtcFIAK5dOEQ380foVv4oQdf8PXXThnX04M5Jus5zh+5naee2jd5YIyUSAD3AtZAKAWzn9k1qKsD8/rug9GaPSACejUyTHnCg77gv7uH2HYQlco3PXvvnu/Z670gAkPzu4Jjnv3f3Vm8pUO293mPe2Pcff+jx889ev5kSCQCCjH6cIQh0iLsUOvWwAygAQ48ikQEgWDA4Nl2Q+k9Ts5gaWWIBQGUA4UZ3Nx36camHDyQWADhgGSDQdQEwANRtUfTYABA0mAy7Pi71iANpCQAq7b5dJtD+aXo21q5HUl1aAoAAX6s/qfPKC+q+/db3NwJjccQDMF3OfyCSE3GcW5krhTGo+xl6R5iJjCQa0G1rpkv5y3Hk5ak33a/0mD4A468uz02W8wVh27ukpBF9Yss6J0ZRIpFITb3reRKM4wPAB8lCR7bYO/7++rfJt/lcjejEapaFi3iKxChqYWFR3SVw1iSteQAwIIj6BYlBPsNV0ce+mCj3WKCOJM1ofg1VlZhZ5CK6aH5e3SUShqgQ3yXapHxAWvMA8MD/4xhfNtrUGb80uq+zaIE6kTAtUElMqebvU6Wkp1g+lXj9+rkO3CVMs0L6XYLPh2zHEV/5KgDKwEmVxf/IADkzosCBSlGrWUikT0PfTYzlw1FcLi5WBBESrbhLsL0XZ1DiZkBhQz/r4T+uQJ3xuSIkQIWLjjzoCHFOmOZm9GEHWwy2gqM4V50KD0hJPn2rogxXaTDZHUoKKW+4nS/vesbxSeHLcW28bBYnttx+k3em/cxQzmD6RiTJhyxjroStsyPJd6SmQMNeQYyAebkrJzDGwrloAPupVnO+GUzf4GS5p48l44pjGCsuJuw4hgTL0UJftkM+kKSanMDXtByfc+UL2E9g0VDjgQeo5YQPdXP9wPqMJR1Bfb781Qi7tnSVX5rie9YFgBmMliuR6n8DAiIw7FHEMBMFdxnBJjZomF8oADgAOScfUwFhiCjYmEgsiQbAZiO3fwAAAP//dPaKDgAAAAZJREFUAwB9efCDFBpz1wAAAABJRU5ErkJggg==\"","<template>\n    <div>\n        <van-nav-bar :title=\"title\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\n        <div v-if=\"msg_list.length == 0\" style=\"text-align: center\">下拉加载历史...</div>\n        <van-pull-refresh v-model=\"isLoading\" @refresh=\"onRefresh\">\n            <div style=\"display: none\">\n                <audio\n                    controls=\"controls\"\n                    :src=\"new_audio\"\n                    ref=\"audioPlayer\"\n                    autoplay\n                    @play=\"onPlay\"\n                    @ended=\"myFunction()\"\n                ></audio>\n            </div>\n            <div class=\"chat-box\" id=\"chat-box\" ref=\"scrollContainer\">\n                <div class=\"chat-item-answer\" v-html=\"chat_item_answer\"></div>\n                <div class=\"chat-item\" v-for=\"(item, index) in msg_list\" :key=\"index\">\n                    <div class=\"question-box\" v-if=\"item.type == 0 && item.question != ''\">{{ item.question }}</div>\n                    <!-- <div class=\"question-box-empty\" v-if=\"item.type == 0 && item.question == ''\"></div> -->\n                    <div\n                        class=\"question-box\"\n                        v-if=\"item.type == 1 && item.lang_time > 0\"\n                        @click=\"playSound(item.filepath)\"\n                    >\n                        <img\n                            src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/audio-msg.png\"\n                            mode=\"widthFix\"\n                            class=\"start-img\"\n                        />\n                        <span style=\"font-size: 12px; padding-left: 10px\">{{ item.lang_time }}s</span>\n                    </div>\n\n                    <div class=\"answer-box-text\" :id=\"'chat' + (index + 1)\" v-if=\"item.answer != ''\">\n                        <div style=\"margin-bottom: 10px\" v-html=\"simpleParse(item.answer)\"></div>\n                        <div class=\"answer-box\" id=\"myElement\" v-if=\"total_count != index + 1\">\n                            <div class=\"restart-create\" @click=\"to_restart_chat(item)\">重新生成</div>\n                            <img\n                                @click=\"copyText(item.answer)\"\n                                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/copy.png\"\n                                mode=\"widthFix\"\n                                class=\"copy-text\"\n                            />\n                            <img\n                                @click=\"enCnText(item.answer, index)\"\n                                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy.png\"\n                                mode=\"widthFix\"\n                                class=\"copy-text\"\n                                v-if=\"item.iscn == false\"\n                            />\n                            <img\n                                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy1.png\"\n                                mode=\"widthFix\"\n                                class=\"copy-text\"\n                                v-else\n                            />\n                            <img\n                                v-if=\"to_aplay == true && new_index == index\"\n                                @click=\"stop()\"\n                                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/xx.gif\"\n                                mode=\"widthFix\"\n                                class=\"read-audio\"\n                            />\n                            <img\n                                v-else\n                                @click=\"readText2(item.answer, index)\"\n                                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/read_audio.png\"\n                                mode=\"widthFix\"\n                                class=\"read-audio\"\n                            />\n                        </div>\n\n                        <div class=\"answer-box\" id=\"myElement\" style=\"height: 360rpx\" v-else>\n                            <div class=\"restart-create\" @click=\"to_restart_chat(item)\">重新生成</div>\n                            <img\n                                @click=\"copyText(item.answer)\"\n                                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/copy.png\"\n                                mode=\"widthFix\"\n                                class=\"copy-text\"\n                            />\n                            <img\n                                @click=\"enCnText(item.answer, index)\"\n                                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy.png\"\n                                mode=\"widthFix\"\n                                class=\"copy-text\"\n                                v-if=\"item.iscn == false\"\n                            />\n                            <img\n                                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy1.png\"\n                                mode=\"widthFix\"\n                                class=\"copy-text\"\n                                v-else\n                            />\n                            <img\n                                v-if=\"to_aplay == true && new_index == index\"\n                                @click=\"stop()\"\n                                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/xx.gif\"\n                                mode=\"widthFix\"\n                                class=\"read-audio\"\n                            />\n                            <img\n                                v-else\n                                @click=\"readText2(item.answer, index)\"\n                                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/read_audio.png\"\n                                mode=\"widthFix\"\n                                class=\"read-audio\"\n                            />\n                            <div\n                                class=\"ai-ques-item\"\n                                v-for=\"(item1, index1) in global\"\n                                :key=\"index1\"\n                                @click=\"to_new_chat(item1)\"\n                            >\n                                {{ item1.lable }}\n                            </div>\n                        </div>\n                    </div>\n                </div>\n                <div class=\"chat-item\" v-show=\"is_get == 0\">\n                    <div class=\"answer-box-text-new\">\n                        <div class=\"ai-ques-item1\">\n                            <img\n                                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/output-9_59_13.gif\"\n                                width=\"100%\"\n                                alt=\"\"\n                            />\n                        </div>\n                    </div>\n                </div>\n                <div class=\"chat-item\">\n                    <div class=\"answer-box-text-new\">\n                        <div class=\"ai-ques-item1\"></div>\n                    </div>\n                </div>\n                <div class=\"chat-item\">\n                    <div class=\"answer-box-text-new\">\n                        <div class=\"ai-ques-item1\"></div>\n                    </div>\n                </div>\n                <div style=\"width: 100vw; height: 100px\"></div>\n            </div>\n        </van-pull-refresh>\n        <ChatComposer v-model=\"stu_content\" fixed :disabled=\"is_get === 0\" @send=\"sendInput\" @recording=\"onRecording\" />\n    </div>\n</template>\n\n<script>\nimport ChatComposer from '@/components/ChatComposer.vue'\n\nimport { dialogue,toChatDb, en2cnDb, getttsUrl, saveEtalkStudy, updateEtalkStudy } from '@/api/home'\nimport { getAIHistory } from '@/api/user'\nexport default {\n    name: 'SpeechRecognitionDemo',\n    components: { ChatComposer },\n    data() {\n        return {\n            intervalId: null, // 保存定时器ID\n\n            title: '聊天',\n            new_audio: '',\n            content: '',\n            system: '',\n            to_aplay: false,\n            new_index: 0,\n            is_show_ai: false,\n\n            stu_content: '',\n\n            canuse: 0,\n\n            msg_list: [],\n            type: 0,\n            stype: 'speak_free',\n            lang_time: 0,\n            is_history: 0,\n            filePath: '',\n            total_count: 0,\n            from: 'speak',\n            currentSoundIndex: null,\n            pageSize: 0,\n            pageLimit: 1,\n            project_id: 0,\n            is_get: 1,\n\n            global: [\n                {\n                    lable: '主题对话，GAI式陪练',\n                    input: '',\n                    talk_type: 2,\n                },\n                {\n                    lable: '写作练习，AI写作辅导',\n                    input: '',\n                    talk_type: 1,\n                },\n            ],\n\n            isLoading: false,\n        }\n    },\n\n    mounted() {\n        // this.$message({\n        //     message: '系统繁忙，暂停使用！',\n        //     center: true\n        // });\n        // history.back()\n        // return\n        // this.recorder = new WebRecorder();\n        // 在组件挂载后立即获取任务数据\n        const user = JSON.parse(localStorage.getItem('user'))\n        if (user && user.sid) {\n            if (user.type_id != 2) {\n                this.$router.push({ name: 'noAuth' })\n                return\n            }\n        } else {\n            console.error('用户未登录或没有找到sid')\n        }\n        // this.recOpen()\n        // this.startPolling();  // 在组件挂载时启动定时器\n\n        this.system = this.$route.query.system\n        this.stu_content = this.$route.query.content || ''\n        this.content = this.$route.query.content || ''\n        this.title = this.$route.query.chat_title\n        this.from = this.$route.query.from\n        this.stype = this.$route.query.stype\n        this.type = this.$route.query.type\n        this.filePath = this.$route.query.filePath\n        this.lang_time = this.$route.query.lang_time\n        this.res_id = this.$route.query.res_id\n        this.is_history = this.$route.query.is_history\n        this.project_id = this.$route.query.project_id\n        this.chat_item_answer = this.$route.query.answer\n        if (this.stype == 'speak_free') {\n            this.global = [\n                {\n                    lable: '主题对话，GAI式陪练',\n                    input: '',\n                    talk_type: 2,\n                },\n                {\n                    lable: '写作练习，AI写作辅导',\n                    input: '',\n                    talk_type: 1,\n                },\n            ]\n        }\n        if (this.stype == 'write') {\n            this.global = [\n                {\n                    lable: '如何完善英语写作表达逻辑',\n                    input: 'Brief answer (within 60 words):How to improve expression in English writing?',\n                    talk_type: 0,\n                },\n                {\n                    lable: '生成一个优秀英语写作主题',\n                    input: 'Recommend one writing topic with brief writing guidance (within 60 words).',\n                    talk_type: 0,\n                },\n            ]\n        }\n        if (this.stype == 'listen_guide' || this.stype == 'read_guide') {\n            this.global = [\n                {\n                    lable: 'Summarize the gist and main idea.',\n                    input: 'Summarize the gist and main idea.',\n                    talk_type: 0,\n                    content: '',\n                },\n                {\n                    lable: 'Analyze and present the structure.',\n                    input: 'Analyze and present the structure.',\n                    talk_type: 0,\n                    content: '',\n                },\n                {\n                    lable: 'Explain sentences that contain over three clauses.',\n                    input: 'Explain sentences that contain over three clauses.',\n                    talk_type: 0,\n                    content: '',\n                },\n            ]\n        }\n        if (this.stype == 'write_guide' || this.stype == 'write_subject') {\n            this.global = [\n                {\n                    lable: 'Help me improve the language expression.',\n                    input: 'Help me improve the language expression.',\n                    talk_type: 0,\n                    content: '',\n                },\n                {\n                    lable: 'Help me enrich and improve the content.',\n                    input: 'Help me enrich and improve the content.',\n                    talk_type: 0,\n                    content: '',\n                },\n                {\n                    lable: 'Help me improve the article structure.',\n                    input: 'Help me improve the article structure.',\n                    talk_type: 0,\n                    content: '',\n                },\n            ]\n        }\n        if (this.stype == 'speak_subject') {\n            this.global = [\n                {\n                    lable: '重新生成一个口语练习主题',\n                    input: 'Generate a new oral practice topic and provide a brief description of it (within 60 words).',\n                    talk_type: 0,\n                    content: '',\n                },\n                {\n                    lable: '尝试进行AI写作练习',\n                    input: 'Assist me with english writing',\n                    talk_type: 1,\n                    content: '',\n                },\n            ]\n        }\n        if (this.is_history == 1) {\n            this.get_history()\n        } else {\n            this.chat()\n        }\n\n        // this.saveEtalkStudy()\n    },\n    beforeDestroy() {\n        this.stop()\n        clearInterval(this.intervalId) // 清除定时器\n    },\n    methods: {\n        async sendInput({ text, filepath, duration, type }) {\n            if (this.is_get === 0) return\n            this.content = text\n            this.filePath = filepath\n            this.lang_time = duration\n            this.type = type\n            this.stu_content = ''\n            this.is_get = 0\n            await this.saveEtalkStudy()\n            try {\n                await this.chat()\n            } finally {\n                this.is_get = 1\n                this.canuse = 1\n            }\n        },\n        onRecording() {\n            this.stop()\n            // Study timing is started when the message is sent.\n        },\n        async saveEtalkStudy() {\n            try {\n                const user = JSON.parse(localStorage.getItem('user'))\n                if (user && user.sid) {\n                    const response = await saveEtalkStudy({ sid: user.sid })\n                    const data = response.data\n                    this.etalk_time_id = data\n                } else {\n                    console.error('用户未登录或没有找到sid')\n                }\n            } catch (error) {\n                console.error('Login Failed:', error)\n            }\n        },\n        async updateEtalkStudy() {\n            if (!this.etalk_time_id) {\n                console.warn('未找到有效学习记录ID')\n                return\n            }\n            try {\n                await updateEtalkStudy({ id: this.etalk_time_id })\n                this.etalk_time_id = null // 重置ID避免重复更新\n            } catch (error) {\n                console.error('Login Failed:', error)\n            }\n        },\n        async myFunction() {\n            this.to_aplay = false\n        },\n        async onPlay() {\n            this.to_aplay = true\n        },\n\n        async stop() {\n            this.to_aplay = false\n            this.$refs.audioPlayer.pause()\n            this.new_audio = ''\n            // 确保更新视图\n            this.$forceUpdate()\n        },\n        fixGarbledText(text) {\n            // 匹配乱码部分（根据你的案例，乱码以 “ 开头，包含非常用符号）\n            const buffer = Buffer.from(text, 'binary') // 先转成字节\n            return buffer.toString('utf-8') // 再正确解码\n            // return input.replace(/[^\\x20-\\x7E]/g, ' ');\n        },\n        simpleParse(md) {\n            return (\n                md\n                    // 解析 # 标题\n                    .replace(/^\\s*#\\s+(.+?)\\s*$/gm, '<h1>$1</h1>')\n                    // 解析 ## 标题\n                    .replace(/^\\s*##\\s+(.+?)\\s*$/gm, '<h2>$1</h2>')\n                    // 解析代码块 ```...```\n                    .replace(/```([\\s\\S]*?)```/g, '<pre><code>$1</code></pre>')\n                    // 解析行内代码 `...`\n                    .replace(/`([^`]+)`/g, '<code>$1</code>')\n                    // 解析加粗 **...**\n                    .replace(/\\*\\*(.+?)\\*\\*/g, '<strong>$1</strong>')\n                    // 解析斜体 *...*\n                    .replace(/\\*(.+?)\\*/g, '<em>$1</em>')\n                    // 解析超链接 [text](url)\n                    .replace(/\\[(.+?)\\]\\((.+?)\\)/g, '<a href=\"$2\">$1</a>')\n                    // 解析无序列表项 - ...\n                    .replace(/^\\s*-\\s+(.+?)$/gm, '<li>$1</li>')\n                    // 合并相邻的 <li> 标签到 <ul> 中\n                    .replace(/<\\/li>\\n<li>/g, '</li><li>')\n                    // 将 <li> 包裹在 <ul> 中\n                    .replace(/(<li>.*<\\/li>)/gs, '<ul>$1</ul>')\n                    // 处理多个 <ul> 之间的换行\n                    .replace(/<\\/ul>\\n<ul>/g, '')\n                    // 解析换行符为 <br>\n                    .replace(/\\n/g, '<br>')\n            )\n        },\n\n        async onRefresh() {\n            setTimeout(() => {\n                this.$message({\n                    message: '刷新成功',\n                    center: true,\n                })\n                this.isLoading = false\n                this.pageSize++\n                this.get_history()\n            }, 1000)\n        },\n        async to_restart_chat(item) {\n            console.log(item)\n            this.content = item.question ///语音文本内容\n            this.filepath = item.filePath //语音文件地址\n            this.type = item.type //消息类型\n            this.lang_time = item.lang_time\n            this.chat()\n        },\n        async to_new_chat(item) {\n            this.content = item.input //语音文本内容\n            if (item.talk_type == 1) {\n                this.stop()\n                this.stu_content = ''\n                this.type = 0\n                this.lang_time = 0\n                this.filePath = ''\n                this.msg_list = []\n                this.$router.push({\n                    name: 'NewChat',\n                    query: {\n                        project_id: 0,\n                        is_history: 0,\n                        lang_time: this.lang_time,\n                        filePath: this.filePath,\n                        type: this.type,\n                        stype: 'write_guide',\n                        from: 'write',\n                        chat_title: 'E-Write',\n                        content: this.stu_content,\n                        res_id: this.res_id,\n                    },\n                })\n\n                this.title = 'E-Write'\n                this.from = 'write'\n                this.stype = 'write_guide'\n                this.msg_list = []\n                this.global = [\n                    {\n                        lable: '如何完善英语写作表达逻辑',\n                        input: 'Brief answer (within 60 words):How to improve expression in English writing?',\n                        talk_type: 0,\n                    },\n                    {\n                        lable: '生成一个优秀英语写作主题',\n                        input: 'Recommend one writing topic with brief writing guidance (within 60 words).',\n                        talk_type: 0,\n                    },\n                ]\n\n                this.chat()\n                // 确保更新视图\n                this.$forceUpdate()\n            } else if (item.talk_type == 2) {\n                this.$router.push({ name: 'Project' })\n            } else {\n                console.log(this.content)\n                this.filePath = ''\n                this.type = 0\n                this.lang_time = 0\n\n                this.chat()\n                // 确保更新视图\n                this.$forceUpdate()\n            }\n        },\n        async copyText(item) {\n            try {\n                await navigator.clipboard.writeText(item)\n                alert('文本已复制到剪贴板')\n            } catch (err) {\n                console.error('复制到剪贴板失败', err)\n            }\n        },\n        async enCnText(item, index) {\n            try {\n                const response = await en2cnDb({ userinput: item })\n                const data = response.data\n                var msg_list = this.msg_list\n                if (response.code == 100) {\n                    msg_list.forEach((val, key) => {\n                        if (key === index) {\n                            val.answer += '\\n' + data.content\n                            val.iscn = true\n                        }\n                    })\n                }\n                this.msg_list = msg_list\n            } catch (error) {\n                console.error('Login Failed:', error)\n            }\n        },\n        async readText(item, index) {\n            this.$refs.audioPlayer.pause()\n            await this.get_audio(item, index)\n        },\n        async readText2(item, index) {\n            this.$refs.audioPlayer.pause()\n            this.get_audio_read(item, index)\n        },\n        async get_audio(str, index) {\n            // const regex = /[!@#&$%^*()_+={}[\\]:;\"'<>,.?/~`-]/g;\n            // var new_answer = str.replace(regex, '');\n            var new_answer = str\n\n            var new_str = this.fixGarbledText(new_answer)\n            new_str = new_str.replace(/<[^>]+>/g, '')\n            new_str = new_str.trim().replace(/[^a-zA-Z0-9\\s.,!?;:'\"()-]/g, '')\n            const response = await getttsUrl({ inputtext: new_str })\n            const new_response = JSON.parse(response.data.result)\n\n            this.new_index = index - 1\n            var msg_index = this.msg_list.length - 1\n            this.msg_list[msg_index].answer = new_answer\n            console.log(this.msg_list[msg_index])\n            console.log(new_response.results)\n            if (new_response.results.ret == 'FAILED') {\n                this.stu_content = ''\n                this.content = ''\n                this.is_get = 1\n                this.total_count = this.msg_list.length\n                // this.scrollToElement()\n                // 确保更新视图\n                this.$forceUpdate()\n                return\n            } else {\n                this.new_audio = new_response.results.Transformation.Response.DubbingQueryResult.VoiceURL\n\n                this.stu_content = ''\n                this.content = ''\n                this.is_get = 1\n                this.total_count = this.msg_list.length\n                // this.scrollToElement()\n                // 确保更新视图\n                this.$forceUpdate()\n            }\n        },\n        async get_audio_read(str, index) {\n            // const regex = /[!@#&$%^*()_+={}[\\]:;\"'<>,.?/~`-]/g;\n            // var new_str = str.replace(regex, '');\n            var new_str = str\n            new_str = this.fixGarbledText(new_str)\n            new_str = new_str.replace(/<[^>]+>/g, '')\n            new_str = new_str.trim().replace(/[^a-zA-Z0-9\\s.,!?;:'\"()-]/g, '')\n            const response = await getttsUrl({ inputtext: new_str })\n            const new_response = JSON.parse(response.data.result)\n\n            this.new_index = index\n            this.to_aplay = true\n            console.log(index)\n            if (new_response.results.ret != 'FAILED') {\n                this.new_audio = new_response.results.Transformation.Response.DubbingQueryResult.VoiceURL\n            }\n            this.canuse = 1\n            this.total_count = this.msg_list.length\n            // console.log(this.msg_list)\n            // this.scrollToElement()\n            // 确保更新视图\n            this.$forceUpdate()\n        },\n        async playSound(url) {\n            // 停止当前播放的语音\n            if (this.currentSoundIndex !== null && this.currentSoundIndex !== url) {\n                this.stopSound(url)\n            }\n            // 播放新的语音\n            const sound = url\n            const audio = new Audio(sound)\n            audio.play()\n            // 更新当前播放\n            console.log(url)\n            this.currentSoundIndex = url\n        },\n        async stopSound(sound) {\n            // 停止语音播放的逻辑\n            const audio = new Audio(sound)\n            audio.pause()\n        },\n        async onClickLeft() {\n            history.back()\n        },\n\n        async chat() {\n            try {\n                this.updateEtalkStudy()\n                if (this.content == '' && this.stype != 'translate') {\n                    this.is_get = 1\n                    return\n                }\n                this.is_get = 0\n                const container = this.$refs.scrollContainer\n                container.scrollTop = container.scrollHeight\n                const user = JSON.parse(localStorage.getItem('user'))\n                if (user && user.sid) {\n                    if (this.stype != 'translate') {\n                        this.$set(this.msg_list, this.msg_list.length, {\n                            answer: '',\n                            type: this.type,\n                            question: this.content,\n                            lang_time: this.lang_time,\n                            iscn: false,\n                            filepath: this.filePath || '',\n                        })\n                    } else {\n                        this.$set(this.msg_list, this.msg_list.length, {\n                            answer: '',\n                            type: this.type,\n                            question: this.content,\n                            lang_time: this.lang_time,\n                            iscn: true,\n                            filepath: this.filePath || '',\n                        })\n                    }\n                    const response = await dialogue({\n                        userinput: this.content, //语音文本内容\n                        filepath: this.filePath, //语音文件地址\n                        type: this.type, //消息类型\n                        lang_time: this.lang_time,\n                        etalk_cate_id: this.project_id,\n                        stype: this.stype, //消息类型\n                        from: this.from, //聊天来源\n                        sid: user.sid, //学生sid\n                        res_id: this.res_id,\n                        preuserinput: JSON.stringify(this.msg_list.slice(-3)),\n                    })\n                    const data = response.data\n\n                    this.content = ''\n                    this.msg_list[this.msg_list.length - 1].answer = data.content || ''\n                    if (data.content != '') {\n                        await this.readText(data.content, this.msg_list.length)\n                    } else {\n                        await this.readText('Hi~ I am your English learning assistant.', this.msg_list.length)\n                    }\n\n                    console.log(data)\n                    // 确保更新视图\n                    // this.$forceUpdate();\n                } else {\n                    console.error('用户未登录或没有找到sid')\n                }\n            } catch (error) {\n                console.error('Login Failed:', error)\n            } finally {\n                this.is_get = 1\n                this.canuse = 1\n            }\n        },\n        async scrollToElement() {\n            document.getElementById('myElement').scrollIntoView()\n        },\n        async to_free_talk() {},\n        async to_ai_write() {},\n        async to_script_talk() {},\n\n        change_show_ai() {\n            this.is_show_ai = !this.is_show_ai\n        },\n\n        async get_history() {\n            try {\n                const user = JSON.parse(localStorage.getItem('user'))\n                if (user && user.sid) {\n                    const response = await getAIHistory({\n                        sid: user.sid,\n                        from: this.from,\n                        page: this.pageSize,\n                        size: this.pageLimit,\n                    })\n                    const data = response.data\n                    var msg_list = this.msg_list\n                    var history_list = data.list.reverse()\n                    var new_msg = history_list.concat(msg_list)\n                    new_msg.forEach((val) => {\n                        val.iscn = false\n                    })\n                    this.msg_list = new_msg\n                    console.log(this.msg_list)\n                    this.totalScroll = 0\n                    this.total_count = new_msg.length\n                } else {\n                    console.error('用户未登录或没有找到sid')\n                }\n            } catch (error) {\n                console.error('Login Failed:', error)\n            }\n        },\n\n        // 初始化语音识别客户端\n\n        // 初始化音频可视化\n\n        // 处理连接/断开连接\n\n        // 开始录音\n\n        // 停止录音\n\n        // 断开连接\n\n        // 开始音频可视化\n\n        // 停止音频可视化\n\n        // 清理资源\n    },\n}\n</script>\n\n<style scoped>\n.chat-box {\n    width: 100vw;\n    height: 70vh;\n    overflow-y: auto;\n    /* 使内容可滚动 */\n    padding-bottom: 120px;\n}\n\n.question-box {\n    height: auto;\n    max-width: 280px;\n    min-width: 100px;\n    min-height: 30px;\n    background: linear-gradient(118deg, #4499ee 0%, #9ce4ff 100%);\n    border-radius: 20px 0px 20px 20px;\n    font-size: 14px;\n    color: #fff;\n    padding: 5px 10px;\n    line-height: 30px;\n    text-align: left;\n    float: right;\n    margin: 20px;\n}\n\n.question-box-empty {\n    max-width: 280px;\n    min-width: 100px;\n    height: 5px;\n    border-radius: 20px 0px 20px 20px;\n    font-size: 14px;\n    color: #fff;\n    padding: 5px 10px;\n    line-height: 30px;\n    text-align: center;\n    float: right;\n    margin: 10px;\n}\n\n.answer-box-text {\n    height: auto;\n    width: 300px;\n    min-height: 30px;\n    font-size: 14px;\n    padding: 5px 10px 20px 10px;\n    line-height: 1.5;\n    text-align: left;\n    float: left;\n    background-color: #f6f6f6;\n    margin-left: 20px;\n    border-radius: 10px;\n    margin-bottom: 20px;\n}\n\n.answer-box-text-new {\n    height: auto;\n    width: 300px;\n    min-height: 30px;\n    font-size: 14px;\n    padding: 5px 10px 20px 10px;\n    line-height: 1.5;\n    text-align: left;\n    float: left;\n    /* background-color: #F6F6F6; */\n    margin-left: 20px;\n    border-radius: 10px;\n}\n\n.chat-item {\n    width: 100%;\n    height: 80px;\n}\n\n.chat-item:last-child > .answer-box-text {\n    padding-bottom: 200px;\n}\n\n.answer-box {\n    padding-top: 10px;\n    border-top: 1px solid #e4e3e3;\n    width: 300px;\n    height: 100rpx;\n    line-height: 50px;\n}\n\n.answer-box > img {\n    width: 20px;\n    height: 20px;\n    vertical-align: top;\n    display: inline-block;\n    margin-bottom: 20px;\n}\n\n.restart-create {\n    width: 20%;\n    font-size: 12px;\n    height: 40px;\n    vertical-align: top;\n    display: inline-block;\n    margin-right: 45%;\n    line-height: 40px;\n}\n\n.copy-text {\n    width: 14px;\n    height: 15px;\n    padding-top: 10px;\n    vertical-align: top;\n    display: inline-block;\n    padding-right: 13px;\n}\n\n.read-audio {\n    width: 18px;\n    height: 15px;\n    padding-top: 10px;\n    vertical-align: top;\n    display: inline-block;\n}\n\n.ai-ques-item {\n    width: auto;\n    height: 30px;\n    border-radius: 15px;\n    border: 1px solid rgb(221, 219, 219);\n    line-height: 30px;\n    text-align: left;\n    padding: 0 10px;\n    font-size: 12px;\n    margin-bottom: 10px;\n}\n\n.ai-ques-item1 {\n    width: 30px;\n    height: 30px;\n    position: relative;\n    left: 20px;\n    top: 10px;\n}\n\n.start-img {\n    width: 20px;\n    height: 20px;\n    vertical-align: top;\n    display: inline-block;\n    padding-top: 5px;\n}\n\n.chat-item-answer {\n    height: auto;\n    width: 300px;\n    min-height: 30px;\n    font-size: 14px;\n    padding: 5px 10px 20px 10px;\n    line-height: 1.5;\n    text-align: left;\n    float: left;\n    background-color: #f6f6f6;\n    margin-left: 20px;\n    border-radius: 10px;\n}\n</style>\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Feedback.vue?vue&type=style&index=0&id=baf90558&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./new_words.vue?vue&type=style&index=0&id=2b4c00d6&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcMine.vue?vue&type=style&index=0&id=576b81ad&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./List.vue?vue&type=style&index=0&id=fced80fa&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./History.vue?vue&type=style&index=0&id=02a8c4b2&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Detail.vue?vue&type=style&index=0&id=5a132944&prod&scoped=true&lang=css\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAhCAYAAAAlK6DZAAACsUlEQVR4AeyXz2sTQRTH30xo2IpgEYS2XorWiyhEtF4EU1GogofowYMoFrEqmqyTgyY9GS8aqyRrKR5tL0IVbBT/gOZWRQ9GvNeLmlpoFMQUmux03oahm2R/pNltTx34ZubNj/eZefMCOxQcCmOsS2XJ+0LzajzJ3RRjiVyUJQcdXBpDjtAqKDkgkBLqgxYKISRCCcxG2b0IOJQ6aCw+GpZS46NXCIHarjk80DmccJZ+jgMvgCgUaFb6wZqxZN2mDWiMJYdVligR4HkpAD4l1gM6GtfSqQktnXfW2FvOCcM1GBnpB2udwLxgzEo4jYo7ECeaBEK6jAUNP4STHQ1dtiYBqDsRmIpgDOrAc9hFhZHChq0I9BmJVEsoTCpLiZNMilNlbf3gACEhvG8qdhdG21ECDLWEStnVYvPDYBMts29x3yHjTs2dm9Hegm5olH0P78ED+wHltGtfoZcuXli5dvUyoI4OHLbl+gZF4MCRQx2StK9/j2w21b5AG4ELvxfLM7n3TTDZ4RlqBcxqzzvLy8uS0VTbQs8MnYLorRHY3dvTtEh2tAPEtZZQBJ0eOgl4L2r0uo42TjarXSD6sISWy2uhURSFMvXmSv/eWmJ0Kgok7t6pmpMG79AtpAiTsoQulUow/Wrmv5wUDAY7YrdHIHz8GKixG9Xenu6AHFsvENdZQnFg7uOnbWYw9p2PnAWvQPRjC8VBCdZ1/R/aZhW+flt6mM44Zql5vrntCMWJCH6amdheqVTKaKMQ+GLq5U5styNXKDr98fMXZMR/r1hcKM59+LzoBYj+WoLiRAQ/GtO6p1+/2YW2F7UM9QJpXLsFbYyIrzblwP/66tHFGQf9D3735l3m+TocEE8XSsX7g2/aafkzTXvyhWpa+nuAk5B4ML3bKLjwW+Bcj49nHxsPrFUAAAD//9EIIPMAAAAGSURBVAMAd39fC7XWRDUAAAAASUVORK5CYII=\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcInteractiveWrite.vue?vue&type=style&index=0&id=54ddff6c&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcPracticeHistory.vue?vue&type=style&index=0&id=217617ca&prod&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HotList.vue?vue&type=style&index=0&id=8a64e4be&prod&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ArticleParser.vue?vue&type=style&index=0&id=401741ca&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWritePraxis.vue?vue&type=style&index=0&id=e6286dc2&prod&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Ai.vue?vue&type=style&index=0&id=7599a439&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Praxis.vue?vue&type=style&index=0&id=b78df3dc&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Report.vue?vue&type=style&index=0&id=5d888191&prod&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TabBarLayout.vue?vue&type=style&index=0&id=1ce1bc87&prod&scoped=true&lang=css\"","module.exports = __webpack_public_path__ + \"img/default.82b9c7a5.jpg\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAeCAYAAABJ/8wUAAADY0lEQVR4AcRXTUhUURQ+5+okYgOVYFhJFpKGzowIiSJKRGo6LyspLFu4cZIgihYG/WC2KKFFvwt1ZioJLCkJ/BkiQjRqUMEkfwjERRSUrYQIXZTzbvdcnGlGffNmJp0e7757zznfd8439/0chkGEx+7S1mSL4ugwW+2zZsXxPKvkYUqEqSQtIiHZB5pTDQY2LDJUIeJGBDgaY1gYNh1szRC+iM6whZjKW01qbMywKB64A4jJjLNBi+LMjURJWEKyy5wFyJgbAZM0im0AUAcsSmuJRlzTHbIQS7ldUZnahwBGzWwygPHA0WWxOiqlGeIlJCFmq7OGM+hCxLiQ8iLGcoBOk2K3hYQXIF0hZsVRj8jbEFAXK/L5TpQEtAt+o88ZZBE0ucVqv48AN4PwdUOCf9Ws2O0g7lcwsIaQRma2OtoA8UwwcqgxBLSJ29sJe/tjtTjLhKSV3YuzKFvE8wA1WqRI/OJWVVrWT7u25T+LX4kfICS94oExgcX3AaACa3JgSeKmHwPZhx+J1zywgE+IuaQ5Kc7jcQNCQSBklS2EXHXh9yC1CP/MUgj1CTSIryWiyT+4VmvxzGRQi8gsdaZ5azDqD9QnADHV64zGjAApMQY+RC2D6jGmYpcQkUxGtIcQk8gQX1FdxhHHafEfxyjVZuO9tmMAaiFwaCBHtAYH3sQ5FI25Tsk3VD6sY7117zjnH6MlQtbhbGrcZXsr1+IihYhZ8zQmrINbl4vBccMK6Ts2aeL8A4QjPPGI7x/TWusKuX2lGPblbYc9pmRwNilQXZGplUv6T1ZkSRzhiUdiZEDnoivEmPC38xvF7lyw5UPH3SNw7VwR1J3IkcJoJpv89bY8IJy37tbNRu8y6KwrpL1rYlmCjJ2JcGj/LjhdnQMkjGayyb8U3N41udS1oq0rpLtvGhruvFmRrOckXnv3KgmhYiSm9pILRiZnyNQdhKs6+wKIpwteBOjuyCIORiZmoPaiCwqPP5Y71PJ0FGhQMZppnL/+WsYJN/Vp1ksNaQ5ZiDfbz7lf8pe2PBFCxKDt9677hz4Dxb3YcOawhYSTPBysT4j4c/Q9HOK/YlXOv/nn8An58LLWLb7/X/yDa7bm/GtcjOr2z+8TQk5EKOcAPaIZzZG9+oPPU36PB8vf99TN++f/AwAA///TdPIUAAAABklEQVQDAOrR9xTCzDYyAAAAAElFTkSuQmCC\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NormalChat.vue?vue&type=style&index=0&id=402f1544&prod&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=style&index=0&id=d944c916&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./History.vue?vue&type=style&index=0&id=737200f7&prod&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Calendar.vue?vue&type=style&index=0&id=13b6bbab&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWriteLearn.vue?vue&type=style&index=0&id=672a7f76&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcMicraList.vue?vue&type=style&index=0&id=66a83314&prod&scoped=true&lang=css\"","import request from './index'\r\nimport MD5 from 'crypto-js/md5'\r\nimport { getAuthorizationToken } from '@/utils/auth'\r\n\r\nconst SECRET_KEY = 'zjuEnglish'\r\nfunction buildSign(data) {\r\n    const keys = Object.keys(data).sort()\r\n    const signStr = keys\r\n        .filter(k => data[k] !== undefined && data[k] !== null)\r\n       .map(k => `${k}=${String(data[k])}`)\r\n        .join('')\r\n        console.log('signStr', signStr + SECRET_KEY)\r\n    return MD5(signStr + SECRET_KEY).toString()\r\n}\r\n\r\nfunction getParamNames(data) {\r\n\r\n    var checkParams = Object.keys(data)\r\n        .sort()\r\n        .join(',')\r\n    return checkParams\r\n}\r\n// 获取统计信息\r\nexport function getUserStudy(sid) {\r\n    const checkParams = getParamNames({ sid })\r\n    const checkSign = buildSign({ sid })\r\n    return request({\r\n        url: '/user/getUserStudy',\r\n        method: 'get',\r\n        params: { sid },\r\n        checkParams,\r\n        checkSign,\r\n        withAuthorization: true\r\n    })\r\n}\r\n\r\n// 获取统计信息\r\nexport function getDateList(data) {\r\n    const checkParams = getParamNames(data)\r\n    const checkSign = buildSign(data)\r\n    return request({\r\n        url: '/user_sign/getDateList',\r\n        method: 'post',\r\n        withAuthorization: true,\r\n        data,\r\n        checkParams,\r\n        checkSign\r\n    })\r\n}\r\n\r\n// 获取首页快捷菜单\r\nexport function getMenuList() {\r\n    return request({\r\n        url: '/subject/getCategoryList',\r\n        method: 'get',\r\n        withAuthorization: true,\r\n    })\r\n}\r\n\r\n\r\n// 获取首页正在学\r\nexport function getNewUserResourceList(sid) {\r\n    const checkParams = getParamNames({ sid })\r\n    const checkSign = buildSign({ sid })\r\n    return request({\r\n        url: '/resources/getNewUserResourceList',\r\n        method: 'get',\r\n        withAuthorization: true,\r\n        params: { sid },\r\n        checkParams,\r\n        checkSign\r\n    })\r\n}\r\n\r\n// 获取首页推荐学\r\nexport function HotResouceList(sid) {\r\n    const checkParams = getParamNames({ sid })\r\n    const checkSign = buildSign({ sid })\r\n    return request({\r\n        url: '/resources/getHotUserResourceList',\r\n        method: 'get',\r\n        withAuthorization: true,\r\n        params: { sid },\r\n        checkParams,\r\n        checkSign\r\n    })\r\n}\r\n\r\nexport function UploadAudio(data) {\r\n    return request({\r\n        url: '/mobileupload/upload',\r\n        method: 'post',\r\n        withAuthorization: true,\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n// activity/listall\r\n// 获取活动列表\r\nexport function getActiveList(sid) {\r\n    return request({\r\n        url: '/activity/listall',\r\n        method: 'get',\r\n        withAuthorization: true,\r\n        params: { sid },\r\n        checkParams: getParamNames({ sid }),\r\n        checkSign: buildSign({ sid })\r\n    })\r\n}\r\n\r\n// 获取活动详情\r\nexport function getActiveDetail(data) {\r\n    return request({\r\n        url: '/activity/activitydetail',\r\n        method: 'post',\r\n        withAuthorization: true,\r\n        data,\r\n        // checkParams: getParamNames(data),\r\n        // checkSign: buildSign(data)\r\n    })\r\n}\r\n// http://localhost:8090/zhedaAi/chat?sid=1&system=假如你是一名语文老师&content=说说三国演义的读后感\r\nexport function toChat(data) {\r\n    return request({\r\n        url: '/zhedaAi/speak_fetch',\r\n        // url: '/banxue/doubao_speak_fetch',\r\n        // url: '/zhedaOutAi/speak_fetch',\r\n        method: 'post',\r\n        withAuthorization: true,\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n// deepSeekAi/speak_fetch\r\nexport function toChatDb(data) {\r\n    return request({\r\n        url: '/deepSeekAi/speak_fetch',\r\n        // url: '/banxue/doubao_speak_fetch',\r\n        // url: '/zhedaOutAi/speak_fetch',\r\n        method: 'post',\r\n        withAuthorization: true,\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n        \r\n    })\r\n}\r\nexport function chat_emoji(data) {\r\n    return request({\r\n        url: '/deepSeekAi/emoji',\r\n        // url: '/banxue/doubao_speak_fetch',\r\n        // url: '/zhedaOutAi/speak_fetch',\r\n        method: 'post',\r\n        withAuthorization: true,\r\n        data,   \r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\nexport function en2cn(data) {\r\n    return request({\r\n        // url: '/zhedaAi/chat',\r\n        url: '/zhedaAi/en2cn',\r\n        method: 'post',\r\n        withAuthorization: true,\r\n        data,   \r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\nexport function en2cnDb(data) {\r\n    return request({\r\n        // url: '/zhedaAi/chat',\r\n        url: '/deepSeekAi/en2cn',\r\n        method: 'post',\r\n        withAuthorization: true,\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\nexport function NoticeList(data) {\r\n    return request({\r\n        url: '/notice/getList',\r\n        method: 'get',\r\n        withAuthorization: true,\r\n        params: data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\nexport function NoticeDetail(data) {\r\n    return request({\r\n        url: '/notice/get',\r\n        method: 'get',\r\n        withAuthorization: true,\r\n        params: data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n\r\nexport function text2voice(data) {\r\n    return request({\r\n        url: '/tts/text2voice',\r\n        method: 'post',\r\n        withAuthorization: true,\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\nexport function longtext2voice(data) {\r\n    return request({\r\n        url: '/tts/longtext2voice',\r\n        method: 'post',\r\n        withAuthorization: true,\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\nexport function longtextSearch(data) {\r\n    return request({\r\n        url: '/tts/longtext_search',\r\n        method: 'post',\r\n        withAuthorization: true,\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\nexport function voice2text(data) {\r\n    return request({\r\n        url: '/asr/voice2text',\r\n        method: 'post',\r\n        withAuthorization: true,\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\nexport function voice2textSearch(data) {\r\n    return request({\r\n        url: '/asr/voice2text_search',\r\n        method: 'post',\r\n        withAuthorization: true,\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\nexport function authLogin(data) {\r\n    return request({\r\n        url: '/login/auth',\r\n        method: 'post',\r\n        withAuthorization: true,\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n// 推送用户每日任务\r\nexport function UserTaskSend(data) {\r\n    return request({\r\n        url: '/user_task/submit',\r\n        method: 'get',\r\n        withAuthorization: true,\r\n        params: data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n// 推送用户每日任务\r\nexport function getTask(data) {\r\n    return request({\r\n        url: '/user_task/getList',\r\n        method: 'get',\r\n        withAuthorization: true,\r\n        params: data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n// 获取用户信息\r\nexport function GetUserInfo(data) {\r\n    return request({\r\n        url: '/user/getUserRow',\r\n        method: 'get',\r\n        withAuthorization: true,\r\n        params: data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n// 根据token获取用户信息\r\nexport function getUserRowByToken(data) {\r\n    const params = {\r\n        ...data,\r\n        token: getAuthorizationToken() || (data && data.token)\r\n    }\r\n    return request({\r\n        url: '/user/getUserRowByToken',\r\n        method: 'get',\r\n        withAuthorization: true,\r\n        params,\r\n        checkParams: getParamNames(params),\r\n        checkSign: buildSign(params)\r\n    })\r\n}\r\n\r\nexport function saveEtalkStudy(data) {\r\n    return request({\r\n        url: '/user/saveEtalkStudy',\r\n        method: 'post',\r\n        withAuthorization: true,\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\nexport function updateEtalkStudy(data) {\r\n    return request({\r\n        url: '/user/updateEtalkStudy',\r\n        method: 'post',\r\n        withAuthorization: true,\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n/**\r\n * \r\n * @param {*} data \r\n * @returns \r\n * 语音合成\r\n */\r\nexport function getttsUrl(data) {\r\n    return request({\r\n        url: '/xunfei/getttsUrl',\r\n        method: 'post',\r\n        withAuthorization: true,\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n\r\nexport function simpleParse(md) {\r\n    return md\r\n        // 解析 # 标题\r\n        .replace(/^\\s*#\\s+(.+?)\\s*$/gm, '<h1>$1</h1>')\r\n        // 解析 ## 标题\r\n        .replace(/^\\s*##\\s+(.+?)\\s*$/gm, '<h2>$1</h2>')\r\n        // 解析代码块 ```...```\r\n        .replace(/```([\\s\\S]*?)```/g, '<pre><code>$1</code></pre>')\r\n        // 解析行内代码 `...`\r\n        .replace(/`([^`]+)`/g, '<code>$1</code>')\r\n        // 解析加粗 **...**\r\n        .replace(/\\*\\*(.+?)\\*\\*/g, '<strong>$1</strong>')\r\n        // 解析斜体 *...*\r\n        .replace(/\\*(.+?)\\*/g, '<em>$1</em>')\r\n        // 解析超链接 [text](url)\r\n        .replace(/\\[(.+?)\\]\\((.+?)\\)/g, '<a href=\"$2\">$1</a>')\r\n        // 解析无序列表项 - ...\r\n        .replace(/^\\s*-\\s+(.+?)$/gm, '<li>$1</li>')\r\n        // 合并相邻的 <li> 标签到 <ul> 中\r\n        .replace(/<\\/li>\\n<li>/g, '</li><li>')\r\n        // 将 <li> 包裹在 <ul> 中\r\n        .replace(/(<li>.*<\\/li>)/gs, '<ul>$1</ul>')\r\n        // 处理多个 <ul> 之间的换行\r\n        .replace(/<\\/ul>\\n<ul>/g, '')\r\n        // 解析换行符为 <br>\r\n        .replace(/\\n/g, '<br>')\r\n}\r\n\r\n\r\n// 获取单词释义\r\nexport function getListByWord(data) {\r\n    return request({\r\n        url: '/vocabulary/getListByWord',\r\n        method: 'get',\r\n        withAuthorization: true,\r\n        params: data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n/**\r\n * 添加生词本\r\n * @param {*} data \r\n * @returns \r\n */\r\nexport function AddWord(data) {\r\n    return request({\r\n        url: '/vocabulary/userSave',\r\n        method: 'post',\r\n        withAuthorization: true,\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n\r\n// 获取我的单词本\r\nexport function getListMyByWord(data) {\r\n    return request({\r\n        url: '/vocabulary/getUserList',\r\n        method: 'get',\r\n        withAuthorization: true,\r\n        params: data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n\r\n// 2026-10-10 gqj new api\r\n// deepSeekAi/speak_fetch\r\nexport function topicDialogue(data) {\r\n    // The API documents `message` as a required form-data string. Keep the\r\n    // JSON representation stable for signing and append it as multipart data.\r\n   \r\n    return request({\r\n        url: '/etalk/topicDialogue',\r\n        // url: '/banxue/doubao_speak_fetch',\r\n        // url: '/zhedaOutAi/speak_fetch',\r\n        method: 'post',\r\n        withAuthorization: true,\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n        \r\n    })\r\n}\r\n\r\n\r\nexport function dialogue(data) {\r\n    // The API documents `message` as a required form-data string. Keep the\r\n    // JSON representation stable for signing and append it as multipart data.\r\n   \r\n    return request({\r\n        url: '/etalk/dialogue',\r\n        // url: '/banxue/doubao_speak_fetch',\r\n        // url: '/zhedaOutAi/speak_fetch',\r\n        method: 'post',\r\n        withAuthorization: true,\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n        \r\n    })\r\n}\r\n\r\n\r\nexport function speak_fetch(data) {\r\n    // The API documents `message` as a required form-data string. Keep the\r\n    // JSON representation stable for signing and append it as multipart data.\r\n   \r\n    return request({\r\n        url: '/etalk/speak_fetch',\r\n        // url: '/banxue/doubao_speak_fetch',\r\n        // url: '/zhedaOutAi/speak_fetch',\r\n        method: 'post',\r\n        withAuthorization: true,\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n        \r\n    })\r\n}\r\n\r\n\r\nexport function completions(data) {\r\n    // The API documents `message` as a required form-data string. Keep the\r\n    // JSON representation stable for signing and append it as multipart data.\r\n   \r\n    return request({\r\n        url: '/etalk/completions',\r\n        // url: '/banxue/doubao_speak_fetch',\r\n        // url: '/zhedaOutAi/speak_fetch',\r\n        method: 'post',\r\n        withAuthorization: true,\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n        \r\n    })\r\n}","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MySubmit.vue?vue&type=style&index=0&id=6b11b97c&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DetailHisPre.vue?vue&type=style&index=0&id=cbb2caae&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Detail.vue?vue&type=style&index=0&id=72b84ac2&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=style&index=0&id=186c39e2&prod&scoped=true&lang=css\"","import axios from 'axios'\nimport qs from 'qs'\nimport { appendAuthorizationHeader } from '@/utils/auth'\nimport { resolveLanguageBaseUrl } from '@/utils/language'\n\nconst service = axios.create({\n  baseURL: process.env.VUE_APP_BASE_API,\n  timeout: 1200000\n})\n\nservice.interceptors.request.use(\n  config => {\n    config.headers = config.headers || {}\n    config.baseURL = resolveLanguageBaseUrl(config.baseURL)\n\n    if (config.contentType === 'json') {\n      config.headers['Content-Type'] = 'application/json'\n    } else if (typeof FormData !== 'undefined' && config.data instanceof FormData) {\n      // Let the browser/axios add the multipart boundary. Stringifying a\n      // FormData object would send an empty body to form-data endpoints.\n    } else if (['post', 'put', 'delete'].includes(config.method)) {\n      config.data = qs.stringify(config.data)\n    }\n\n    appendAuthorizationHeader(config)\n\n    if (config.checkParams !== undefined && config.checkSign !== undefined) {\n      config.headers.checkParams = config.checkParams\n      config.headers.checkSign = config.checkSign\n    }\n\n    return config\n  },\n  error => Promise.reject(error)\n)\n\nservice.interceptors.response.use(\n  response => response.data,\n  error => Promise.reject(error)\n)\n\nexport default service\n","const LANGUAGE_KEY = 'studyLanguage'\nconst DEFAULT_LANGUAGE = 'en'\n\nexport const languageOptions = [\n  { value: 'en', label: '英语', port: '8082' },\n  { value: 'ru', label: '俄语', port: '8084' }\n]\n\nexport function getStudyLanguage() {\n  const value = localStorage.getItem(LANGUAGE_KEY)\n  return languageOptions.some(item => item.value === value) ? value : DEFAULT_LANGUAGE\n}\n\nexport function setStudyLanguage(value) {\n  const next = languageOptions.some(item => item.value === value) ? value : DEFAULT_LANGUAGE\n  localStorage.setItem(LANGUAGE_KEY, next)\n  return next\n}\n\nexport function getStudyLanguageLabel() {\n  const current = getStudyLanguage()\n  const item = languageOptions.find(child => child.value === current)\n  return item ? item.label : languageOptions[0].label\n}\n\nexport function resolveLanguageBaseUrl(baseURL) {\n  const current = getStudyLanguage()\n  const item = languageOptions.find(child => child.value === current) || languageOptions[0]\n  const source = baseURL || process.env.VUE_APP_BASE_API || ''\n\n  if (!source) return source\n\n  // Keep the locale prefix of the main API in sync with the selected language.\n  try {\n    const url = new URL(source)\n    const segments = url.pathname.split('/')\n    if (segments[1] === 'en' || segments[1] === 'ru') {\n      segments[1] = item.value\n      url.pathname = segments.join('/')\n      return url.toString()\n    }\n  } catch (error) {\n    // Fall through for relative or otherwise non-standard base URLs.\n  }\n  if (/:\\d+\\//.test(source)) {\n    return source.replace(/:\\d+\\//, `:${item.port}/`)\n  }\n\n  return source\n}\n","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&id=767f7478&prod&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./examList.vue?vue&type=style&index=0&id=1dcc63ac&prod&scoped=true&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=style&index=0&id=5ee38a8c&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Project.vue?vue&type=style&index=0&id=522f4b04&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DetailHis.vue?vue&type=style&index=0&id=19268f88&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Etalk.vue?vue&type=style&index=0&id=2be09e02&prod&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReadLearnAi.vue?vue&type=style&index=0&id=a3debdbc&prod&scoped=true&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HistoryDetail.vue?vue&type=style&index=0&id=748a8fb4&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcEtalkHistory.vue?vue&type=style&index=0&id=623bd2df&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ExamList.vue?vue&type=style&index=0&id=5f1ca691&prod&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListenLearnAi.vue?vue&type=style&index=0&id=18c4b91d&prod&scoped=true&lang=css\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAADWklEQVR4AcRXzWsTQRT/vYlgc7O9qZei3lUEBYU2giCe7H/QXjzZplPQNgUxvSixClmankS0INWDYisIWlBqBS+K9Eu9Fg/qzdqT6SH7nDfNbjfbuElsNx32Zd7XzvvNe292NwoNDK0z7emBof4+PTTVpzOzaZ1ZSQ9kWEjkDRrKa331WAPLWte6gKQHhrvTemjeJawA5BBRFxFSILSjPETeINIuJeYtSJ3Jaq33lV0ip0ggvTqTkl0CPAGixnYpIAkjLvaarA13R6Iwxn8CkRIowqzs0vj9/0VkMsITUs6o7GwBIs4mCw9gSoAdHGTKabIzK31WbdktQEpoyROhB3EMU14XPCWbDS9fAaRPD+rYQHiRDRiz2SlP9GYfiDQmkcp7hjhns9mUOVUjwRg+EAKyQUPsPMEc7Yx//C0Q05w9gjL24KEA5rnkZ8UCIXB/yKdZYrd3ipRlTAPVE/nggf1ItrTUdD1y+FBdfrJQCUjBDFWC22XmyEsAZK8NYvBKGrmbWVw4f66qvwDI3biOvsuXrF9nx5mqfkElEdv4iogsoqAxzJ86eQJtba2+urPjtM8HGfFLJpO+KlUHEIAuwgzFIPMINlzEFVxc3ERua90EJjqhZLKybEHwYo8iRcxHoxzEtrT8RSafvv/4iV+rq77sMUvLXz3WzsufK2WrrPLTa16uCvalVMUaUMmCo3fG8GrmDSYfP0Vh/G7Ausl++PgJ9+4/xNy799Zv8tGTTWMNTtWw+2bJwsuZ15Bgf4pFXx9mBPSz6Rc1/cL3mR7BXFjZbHkPigt1ZyROcI7j/DbNirfYxcHgRQmvFErTwuwaMU9IbOU4txcY+CbCblACbCtie4QYFhWaPBiYk0RIWAtEoeiYWq2JopnEjBGUhwUiXQtmX1m2xTqxyca4k7NlkUAWiDAFZ9QB+LnwcROD1xJc7ArG8YGIUrE7InOcxBaEm7JVCASqAFJCItaPZwEBJu01aAAHfCDlvxI1v02CNzfCC4gEu6mCkyuf0Mq7LRD5XCRQttK0c5I0ZoLX26tlwotigbjEDur4HPBuqndmczJcxtlCPrelJ8JrWCBh5XZkU4JFZndAcem4AAge0ah1LRDF6z2CfDukuNg6ls9RIX/rmDwKospQDdBfAAAA//+QtRtFAAAABklEQVQDAN4GSFQgwomWAAAAAElFTkSuQmCC\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Serch.vue?vue&type=style&index=0&id=f44c8320&prod&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReadPraxisAi.vue?vue&type=style&index=0&id=01339094&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWriteNotice.vue?vue&type=style&index=0&id=6647436c&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Praxis.vue?vue&type=style&index=0&id=0beee7c4&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcListenPraxis.vue?vue&type=style&index=0&id=56f774dc&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./History.vue?vue&type=style&index=0&id=1900dd1f&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWriteProject.vue?vue&type=style&index=0&id=1a72cf2e&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcExam.vue?vue&type=style&index=0&id=a34e0cee&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Submit.vue?vue&type=style&index=0&id=55da53c4&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcMiniPaper.vue?vue&type=style&index=0&id=5784be95&prod&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcAiAssistant.vue?vue&type=style&index=0&id=5ca9091e&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Verify.vue?vue&type=style&index=0&id=2f099e2c&prod&lang=css\"","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{attrs:{\"id\":\"app\"}},[_c('router-view')],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n  <div id=\"app\">\r\n\r\n    <router-view />\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport Vue from 'vue';\r\nimport 'vant/es/toast/style';\r\nimport ddesign from 'ddesign';\r\nimport 'ddesign/dist/ddesign.css';\r\nimport ElementUI from 'element-ui';\r\nimport 'element-ui/lib/theme-chalk/index.css';\r\nimport '@wangeditor/editor/dist/css/style.css'\r\nimport { Cell, Calendar, Field, Tabbar, TabbarItem, Icon, Popup, Search, Tab, Tabs, Progress, NavBar, Swipe, SwipeItem, Image, Uploader, NoticeBar, CountDown, PullRefresh, Loading, ActionSheet, Empty } from 'vant';\r\nimport { Message } from 'element-ui';\r\nVue.use(Cell);\r\nVue.use(Calendar);\r\nVue.use(Field);\r\nVue.use(ddesign);\r\nVue.use(ElementUI);\r\nVue.use(Message);\r\nVue.use(Tabbar);\r\nVue.use(TabbarItem);\r\nVue.use(Icon);\r\nVue.use(Popup);\r\nVue.use(Search);\r\nVue.use(Tab);\r\nVue.use(Tabs);\r\nVue.use(Progress);\r\nVue.use(NavBar);\r\nVue.use(Swipe);\r\nVue.use(SwipeItem);\r\nVue.use(Image);\r\nVue.use(Uploader);\r\nVue.use(NoticeBar);\r\nVue.use(CountDown);\r\nVue.use(PullRefresh);\r\nVue.use(Loading);\r\nVue.use(ActionSheet);\r\nVue.use(Empty);\r\n\r\nexport default {\r\n  data() {\r\n    return {\r\n      active: 0,\r\n    };\r\n  },\r\n}\r\n</script>\r\n\r\n\r\n<style>\r\n/* 页面使用 px 布局，根字号不随屏幕尺寸或键盘弹出而缩放。 */\r\nhtml {\r\n  font-size: 16px;\r\n}\r\n\r\nbody {\r\n  font-size: 14px;\r\n}\r\n\r\n#app {\r\n  font-family: Avenir, Helvetica, Arial, sans-serif;\r\n  -webkit-font-smoothing: antialiased;\r\n  -moz-osx-font-smoothing: grayscale;\r\n  /* text-align: center; */\r\n  color: #2c3e50;\r\n}\r\n\r\n.van-overlay {\r\n  background-color: rgba(0, 0, 0, 1%) !important\r\n}\r\n\r\n.van-action-sheet__close {\r\n  right: 20px;\r\n}\r\n\r\ntable {\r\n  width: 100%;\r\n  border-collapse: collapse;\r\n}\r\n\r\ntable,\r\nth,\r\ntd {\r\n  border: 1px solid black;\r\n}\r\n\r\nth,\r\ntd {\r\n  padding: 8px;\r\n  text-align: left;\r\n}\r\n\r\nu {\r\n  display: inline-block;\r\n  /* height: 20px; */\r\n  text-align: center;\r\n  padding: 0 5px;\r\n}\r\n\r\np {\r\n  white-space: normal;\r\n  /* 正常的空白处理，允许换行 */\r\n  word-break: keep-all;\r\n  /* 确保单词不被截断 */\r\n  overflow-wrap: anywhere;\r\n  /* 单词太长时允许换行，不会强制截断 */\r\n}\r\n\r\n.input-answer {\r\n  width: 40px;\r\n  height: 30px;\r\n  border: none;\r\n  border-bottom: 1px solid #54a4ee;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  text-align: left;\r\n}\r\n\r\n.input-answer>input {\r\n  width: 100%;\r\n  padding: 10px 15px;\r\n  margin: 8px 0;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  border-radius: 4px;\r\n  box-sizing: border-box;\r\n  font-size: 16px;\r\n  transition: border-color 0.3s ease;\r\n\r\n}\r\n\r\n.input-answer>input:focus {\r\n  border-color: #6FDBFF;\r\n  /* 改变边框颜色 */\r\n  outline: none;\r\n  /* 移除默认的 focus 外框 */\r\n  box-shadow: 0 0 8px rgba(110, 219, 255, 0.5);\r\n  /* 增加阴影效果 */\r\n}\r\n\r\np>img {\r\n  width: 100%;\r\n}\r\n\r\n.input-answer>input::placeholder {\r\n  color: #999;\r\n  /* 提示文字颜色 */\r\n  font-size: 14px;\r\n}\r\n\r\n.input-answer>input[disabled] {\r\n  background-color: #f2f2f2;\r\n  color: #ccc;\r\n}\r\n\r\n#nav {\r\n  padding: 30px;\r\n}\r\n\r\n#nav a {\r\n  font-weight: bold;\r\n  color: #2c3e50;\r\n}\r\n\r\n#nav a.router-link-exact-active {\r\n  color: #42b983;\r\n}\r\n\r\n.van-nav-bar__title {\r\n  font-size: 22px;\r\n  font-weight: bold;\r\n}\r\n\r\n\r\nhtml,\r\nbody {\r\n  position: relative;\r\n  z-index: auto !important;\r\n}\r\n\r\n::after,\r\n::before {\r\n  content: \"\";\r\n  display: none;\r\n  height: 0 !important;\r\n  width: 0 !important;\r\n}\r\n\r\n.van-nav-bar__arrow {\r\n  margin-right: 18px;\r\n  font-size: 16px;\r\n}\r\n\r\n.van-field__control {\r\n  padding-left: 20px;\r\n}\r\n</style>\r\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--13-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--13-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=767f7478\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\nimport style0 from \"./App.vue?vue&type=style&index=0&id=767f7478&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"tab-bar-layout\"},[_c('router-view'),_c('van-tabbar',{on:{\"change\":_vm.onTabChange},model:{value:(_vm.active),callback:function ($$v) {_vm.active=$$v},expression:\"active\"}},[_c('van-tabbar-item',{attrs:{\"icon\":_vm.getIcon('/home'),\"replace\":\"\",\"to\":\"/home\"}},[_vm._v(\"首页\")]),_c('van-tabbar-item',{attrs:{\"icon\":_vm.getIcon('/exam'),\"replace\":\"\",\"to\":\"/exam\"}},[_vm._v(\"测试\")]),_c('van-tabbar-item',{attrs:{\"icon\":_vm.getIcon('/ai'),\"replace\":\"\",\"to\":\"/ai\"}},[_vm._v(\"AI伴学\")]),_c('van-tabbar-item',{attrs:{\"icon\":_vm.getIcon('/plant'),\"replace\":\"\",\"to\":\"/plant\"}},[_vm._v(\"计划\")]),_c('van-tabbar-item',{attrs:{\"icon\":_vm.getIcon('/mine'),\"replace\":\"\",\"to\":\"/mine\"}},[_vm._v(\"我的\")])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- src/layouts/TabBarLayout.vue -->\r\n\r\n<template>\r\n    <div class=\"tab-bar-layout\">\r\n      <!-- 主内容区域 -->\r\n      <router-view></router-view>\r\n  \r\n      <!-- 底部 TabBar -->\r\n      <van-tabbar v-model=\"active\" @change=\"onTabChange\">\r\n        <van-tabbar-item\r\n          :icon=\"getIcon('/home')\"\r\n          replace\r\n          to=\"/home\">首页</van-tabbar-item>\r\n        <van-tabbar-item\r\n          :icon=\"getIcon('/exam')\"\r\n          replace\r\n          to=\"/exam\">测试</van-tabbar-item>\r\n        <van-tabbar-item\r\n          :icon=\"getIcon('/ai')\"\r\n          replace\r\n          to=\"/ai\">AI伴学</van-tabbar-item>\r\n        <van-tabbar-item\r\n          :icon=\"getIcon('/plant')\"\r\n          replace\r\n          to=\"/plant\">计划</van-tabbar-item>\r\n        <van-tabbar-item\r\n          :icon=\"getIcon('/mine')\"\r\n          replace\r\n          to=\"/mine\">我的</van-tabbar-item>\r\n      </van-tabbar>\r\n    </div>\r\n  </template>\r\n  \r\n  <script>\r\n  export default {\r\n    data() {\r\n      return {\r\n        active: this.$route.path // 基于当前路径设置激活的路由\r\n      }\r\n    },\r\n    watch: {\r\n      '$route.path': function(newPath) {\r\n        this.active = newPath; // 路由变化时更新激活的路由\r\n      }\r\n    },\r\n    methods: {\r\n      getIcon(route) {\r\n        return this.active === route \r\n          ? `https://a-news.oss-accelerate.aliyuncs.com/zheda/menu_tab/${route.split('/').pop()}-check.png` \r\n          : `https://a-news.oss-accelerate.aliyuncs.com/zheda/menu_tab/${route.split('/').pop()}.png`;\r\n      },\r\n      onTabChange(route) {\r\n        this.$router.push(route);\r\n      }\r\n    }\r\n  }\r\n  </script>\r\n  \r\n  <style scoped>\r\n  .tab-bar-layout {\r\n    position: relative;\r\n    height: 100%;\r\n  }\r\n  .van-tabbar{\r\n    padding-bottom: 20px !important;\r\n  }\r\n  /* 可以在这里添加 TabBar 的样式 */\r\n  </style>\r\n  ","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TabBarLayout.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TabBarLayout.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./TabBarLayout.vue?vue&type=template&id=1ce1bc87&scoped=true\"\nimport script from \"./TabBarLayout.vue?vue&type=script&lang=js\"\nexport * from \"./TabBarLayout.vue?vue&type=script&lang=js\"\nimport style0 from \"./TabBarLayout.vue?vue&type=style&index=0&id=1ce1bc87&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"1ce1bc87\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"normal-layout\"},[_c('router-view')],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import request from './index'\r\nimport MD5 from 'crypto-js/md5'\r\n\r\nconst SECRET_KEY = 'zjuEnglish'\r\nfunction buildSign(data) {\r\n    const keys = Object.keys(data).sort()\r\n    const signStr = keys\r\n        .filter(k => data[k] !== undefined && data[k] !== null)\r\n       .map(k => `${k}=${String(data[k])}`)\r\n        .join('')\r\n        console.log('signStr', signStr + SECRET_KEY)\r\n    return MD5(signStr + SECRET_KEY).toString()\r\n}\r\n\r\nfunction getParamNames(data) {\r\n\r\n    var checkParams = Object.keys(data)\r\n        .sort()\r\n        .join(',')\r\n    return checkParams\r\n}\r\n// 鑾峰彇缁熻淇℃伅\r\nexport function getPlant(sid) {\r\n    return request({\r\n        url: '/plan/get',\r\n        method: 'get',\r\n        params: { sid },\r\n        checkParams: getParamNames({ sid }),\r\n        checkSign: buildSign({ sid })\r\n    })\r\n}\r\n// 鑾峰彇鑷€夎嚜椤圭洰\r\nexport function subjectCateGet() {\r\n    return request({\r\n        url: '/subjectCate/gets',\r\n        method: 'get',\r\n    })\r\n}\r\n\r\n// 璁″垝淇敼\r\nexport function PlantSave(data) {\r\n    return request({\r\n        url: '/plan/save',\r\n        method: 'post',\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n// 鑾峰彇缁熻淇℃伅\r\nexport function getDateList(data) {\r\n    return request({\r\n        url: '/user_sign/getDateList',\r\n        method: 'post',\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n// 鑾峰彇棣栭〉蹇嵎鑿滃崟\r\nexport function getMenuList() {\r\n    return request({\r\n        url: '/subject/getCategoryList',\r\n        method: 'get',\r\n    })\r\n}\r\n\r\n\r\n// 鑾峰彇棣栭〉姝ｅ湪瀛?\r\nexport function getNewUserResourceList(sid) {\r\n    return request({\r\n        url: '/resources/getNewUserResourceList',\r\n        method: 'get',\r\n        params: { sid },\r\n        checkParams: getParamNames({ sid }),\r\n        checkSign: buildSign({ sid })\r\n    })\r\n}\r\n\r\n// 鑾峰彇棣栭〉鎺ㄨ崘瀛?\r\nexport function HotResouceList(sid) {\r\n    return request({\r\n        url: '/resources/getHotUserResourceList',\r\n        method: 'get',\r\n        params: { sid },\r\n        checkParams: getParamNames({ sid }),\r\n        checkSign: buildSign({ sid })\r\n    })\r\n}\r\n","<!-- src/layouts/NormalLayout.vue -->\r\n\r\n<template>\r\n  <div class=\"normal-layout\">\r\n    <!-- 主内容区域 -->\r\n    <router-view></router-view>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport { getUserSign } from '@/api/user'\r\nimport { getPlant } from '@/api/plant'\r\nexport default {\r\n  // 可以在此添加普通页面布局的逻辑和样式\r\n  methods: {\r\n    async userSign() {\r\n      const user = JSON.parse(localStorage.getItem('user'))\r\n      if (user && user.sid) {\r\n        const now = new Date()\r\n        var day = now.getDate()\r\n        var now_month = now.getMonth() + 1;\r\n        if (now_month < 10) {\r\n          now_month = '0' + now_month\r\n        }\r\n        if (day < 10) {\r\n          day = '0' + day\r\n        }\r\n        let now_date = now.getFullYear() + '-' + now_month + '-' + day\r\n        await getUserSign({ sid: user.sid, dateline: now_date })\r\n      } else {\r\n        console.error('用户未登录或没有找到sid')\r\n      }\r\n    },\r\n\r\n    async getPlant() {\r\n      const user = JSON.parse(localStorage.getItem('user'))\r\n      if (user && user.sid) {\r\n        const response = await getPlant(user.sid)\r\n        console.log(response)\r\n        if (response.code !== 100) {\r\n          this.$router.push({ name: 'SetPlant' })\r\n        }\r\n      } else {\r\n        console.error('用户未登录或没有找到sid')\r\n      }\r\n\r\n    },\r\n  },\r\n  mounted() {\r\n    // 在组件挂载后立即获取任务数据\r\n    this.userSign()\r\n    this.getPlant()\r\n\r\n  }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.normal-layout {\r\n  position: relative;\r\n  height: 100%;\r\n}\r\n\r\n/* 可以添加普通页面布局的样式 */\r\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NormalLayout.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NormalLayout.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./NormalLayout.vue?vue&type=template&id=6e73f3c0&scoped=true\"\nimport script from \"./NormalLayout.vue?vue&type=script&lang=js\"\nexport * from \"./NormalLayout.vue?vue&type=script&lang=js\"\nimport style0 from \"./NormalLayout.vue?vue&type=style&index=0&id=6e73f3c0&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"6e73f3c0\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"home\"},[_c('div',{staticClass:\"main\"},[_c('div',{staticClass:\"head\"},[_c('div',{staticClass:\"head-left\"},[_c('div',{staticClass:\"head-left-title\"},[_vm._v(\" 学习 \"),_c('button',{staticClass:\"language-trigger\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){_vm.showLanguageSheet = true}}},[_vm._v(\" \"+_vm._s(_vm.languageLabel)+\" \"),_c('van-icon',{attrs:{\"name\":\"arrow-down\",\"size\":\"12px\"}})],1)]),_c('div',{staticClass:\"head-left-content\"},[_vm._v(\"已学习\"+_vm._s(_vm.countSign)+\"天，继续加油！\")])]),_vm._m(0)]),_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"content-today-count\"},[_c('img',{staticClass:\"tree-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/tree.png\",\"mode\":\"widthFix\"}}),_c('div',{staticClass:\"today-count-item\",staticStyle:{\"margin-left\":\"70px\"},on:{\"click\":_vm.to_calendar}},[_c('div',{staticClass:\"count-one\"},[_vm._v(_vm._s(_vm.countTask.total_finish_count))]),_c('div',{staticClass:\"count-two\"},[_vm._v(\"/\"+_vm._s(_vm.countTask.total_task_count)+\"个\")]),_c('div',{staticClass:\"count-title\"},[_vm._v(\"今日任务\")])]),_c('div',{staticClass:\"today-count-item\"},[_c('div',{staticClass:\"count-one\"},[_vm._v(_vm._s(_vm.countTask.today_minutes))]),_c('div',{staticClass:\"count-two\"},[_vm._v(\"/\"+_vm._s(_vm.countTask.plan_minutes)+\"min\")]),_c('div',{staticClass:\"count-title\"},[_vm._v(\"今日时长\")])]),_c('div',{staticClass:\"today-count-item\"},[_c('div',{staticClass:\"count-one\"},[_vm._v(_vm._s(_vm.countTask.etalk_total_minutes)+\"min\")]),_c('div',{staticClass:\"count-two\"}),_c('div',{staticClass:\"count-title\"},[_vm._v(\"E-Talk时长\")])]),_c('div',{staticClass:\"today-count-item today-count-item-last\",on:{\"click\":_vm.to_calendar}},[_c('div',{staticClass:\"count-one\"},[_vm._v(_vm._s(_vm.countSign))]),_c('div',{staticClass:\"count-two\"},[_vm._v(\"天\")]),_vm._m(1)]),_c('div',{staticClass:\"icon-sign\"},[_c('van-icon',{attrs:{\"name\":\"arrow\",\"color\":\"#606060\",\"size\":\"12px\"}})],1)]),_c('div',{staticClass:\"fast-click\"},[(_vm.fast_list.length == 0 || _vm.fast_list == [])?_c('div',{staticClass:\"empty\",staticStyle:{\"width\":\"100%\",\"height\":\"80px\",\"text-align\":\"center\"}},[_c('van-loading',{attrs:{\"size\":\"24px\"}},[_vm._v(\"加载中...\")])],1):_vm._e(),_vm._l((_vm.fast_list),function(item,index){return _c('div',{key:index,staticClass:\"fast-item\",attrs:{\"data-index\":item.page_url,\"replace\":\"\"},on:{\"click\":function($event){return _vm.to_page(item)}}},[_c('img',{staticClass:\"fast-img\",attrs:{\"src\":item.img_url,\"mode\":\"widthFix\"}}),_c('div',{staticClass:\"fast-title\"},[_vm._v(_vm._s(item.name))])])}),_vm._m(2)],2),_c('div',{staticClass:\"notice\"},[_c('img',{staticClass:\"notice-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/notice.png\",\"mode\":\"widthFix\"}}),_c('div',{staticClass:\"notice-title\"},[_c('van-notice-bar',{attrs:{\"background\":\"#FFF\",\"color\":\"#000\",\"text\":_vm.notice_text}})],1),_c('div',{staticClass:\"more-info\",on:{\"click\":_vm.to_notice_list}},[_vm._v(\"全部\")]),_c('div',{staticClass:\"more-icon\"},[_c('van-icon',{attrs:{\"name\":\"arrow\",\"color\":\"#606060\"}})],1)]),(_vm.active_info.id)?_c('div',{staticClass:\"xzds\",on:{\"click\":function($event){return _vm.to_active(_vm.active_info.id)}}},[_c('div',{staticClass:\"xzds-title\"},[_vm._v(_vm._s(_vm.active_info.name))]),_c('div',{staticClass:\"xzds-time\"},[_vm._v(_vm._s(_vm.active_info.start_date)+\"~\"+_vm._s(_vm.active_info.end_date))])]):_vm._e(),(_vm.NewResouceList.length > 0)?_c('div',{staticClass:\"learn-model\"},[_c('div',{staticClass:\"model-start\"},[_c('div',{staticClass:\"model-title\"},[_vm._v(\"正在学\")]),_c('div',{staticClass:\"model-more\",attrs:{\"data-index\":\"1\"},on:{\"click\":function($event){return _vm.to_study_list(0)}}},[_vm._v(\"全部\")]),_c('div',{staticClass:\"model-icon\",attrs:{\"data-index\":\"1\"},on:{\"click\":function($event){return _vm.to_study_list(0)}}},[_c('van-icon',{attrs:{\"name\":\"arrow\",\"color\":\"#606060\"}})],1),_vm._l((_vm.NewResouceList),function(item,index){return _c('div',{key:index,staticClass:\"learn-item\",on:{\"click\":function($event){return _vm.to_praxis(item)}}},[_c('img',{staticClass:\"learn-img\",attrs:{\"src\":item.cover,\"mode\":\"aspectFill\"}}),_c('div',{staticClass:\"learn-item-info\"},[_c('div',{staticClass:\"learn-item-title\"},[(item.category_id == 1)?_c('span',[_vm._v(\"[听力]\")]):_vm._e(),(item.category_id == 2)?_c('span',[_vm._v(\"[阅读]\")]):_vm._e(),(item.category_id == 4)?_c('span',[_vm._v(\"[写作]\")]):_vm._e(),_vm._v(\" \"+_vm._s(item.name)+\" \")])]),_c('div',{staticClass:\"btn-learn\"},[_vm._v(\"继续学习\")])])})],2)]):_vm._e(),_c('HotList',{key:_vm.studyLanguage}),_c('div',{staticClass:\"wall\"})],1)]),(_vm.showAi)?_c('Ai',{attrs:{\"allow\":\"microphone\"}}):_vm._e(),_c('span',{staticClass:\"reback\",on:{\"click\":_vm.to_dingtalk}},[_vm._v(\"问题反馈\")]),_c('van-action-sheet',{attrs:{\"title\":\"选择语言\",\"closeable\":\"\"},model:{value:(_vm.showLanguageSheet),callback:function ($$v) {_vm.showLanguageSheet=$$v},expression:\"showLanguageSheet\"}},[_c('div',{staticClass:\"language-sheet\"},_vm._l((_vm.languageOptions),function(item){return _c('button',{key:item.value,staticClass:\"language-option\",class:{ active: _vm.studyLanguage === item.value },attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.changeLanguage(item.value)}}},[_c('span',[_vm._v(_vm._s(item.label))]),(_vm.studyLanguage === item.value)?_c('van-icon',{attrs:{\"name\":\"success\",\"size\":\"22px\"}}):_vm._e()],1)}),0)])],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"head-right\"},[_c('img',{staticClass:\"head-right-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/study.png\",\"mode\":\"widthFix\"}})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"count-title\"},[_c('div',{staticClass:\"sign-text\"},[_vm._v(\"本月打卡\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"fast-item\"},[_c('img',{staticClass:\"fast-img-empty\"}),_c('div',{staticClass:\"fast-title\"})])\n}]\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[(!_vm.is_show_ai)?_c('img',{staticClass:\"wyt\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\",\"mode\":\"widthFix\"},on:{\"click\":_vm.change_show_ai}}):_vm._e(),(_vm.is_show_ai)?_c('div',{staticClass:\"check-main-ai\"},[_c('div',{staticClass:\"guanbi\",on:{\"click\":_vm.change_show_ai}},[_c('van-icon',{attrs:{\"name\":\"cross\",\"color\":\"#606060\"}})],1),_c('img',{staticClass:\"wyt-say\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\",\"mode\":\"widthFix\"}}),_c('div',{staticClass:\"say-text\"},[_vm._v(\"嗨，你好，试试慧学外语这些伴学功能\")]),_c('div',{staticClass:\"fast-parent\"},[_c('div',{staticClass:\"fast-box\",on:{\"click\":_vm.to_free_talk}},[_vm._m(0)]),_c('div',{staticClass:\"fast-box\",on:{\"click\":_vm.to_script_talk}},[_vm._m(1)]),_c('div',{staticClass:\"fast-box\",on:{\"click\":_vm.to_ai_write}},[_vm._m(2)])]),_c('div',{staticClass:\"input-box\"},[_c('button',{staticClass:\"button-default\",style:(_vm.speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''),on:{\"click\":_vm.chat}},[_vm._v(\"去对话\")])])]):_vm._e()])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('span',[_c('span',{staticStyle:{\"font-size\":\"32rpx\",\"font-weight\":\"bold\"}},[_vm._v(\"\\\"自由对话\\\"\")]),_vm._v(\" 口语练习 \")])\n},function (){var _vm=this,_c=_vm._self._c;return _c('span',[_c('span',{staticStyle:{\"font-size\":\"32rpx\",\"font-weight\":\"bold\"}},[_vm._v(\"\\\"主题对话\\\"\")]),_vm._v(\" 口语练习 \")])\n},function (){var _vm=this,_c=_vm._self._c;return _c('span',[_c('span',{staticStyle:{\"font-size\":\"32rpx\",\"font-weight\":\"bold\"}},[_vm._v(\"\\\"写作练习\\\"\")]),_vm._v(\" 写作指导 \")])\n}]\n\nexport { render, staticRenderFns }","<!-- src/layouts/TabBarLayout.vue -->\r\n\r\n<template>\r\n    <div>\r\n        <!-- 初始状态下显示的图片，点击可切换显示 -->\r\n\r\n        <img v-if=\"!is_show_ai\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\"\r\n            mode=\"widthFix\" @click=\"change_show_ai\" class=\"wyt\" />\r\n        <!-- 显示 AI 伴学功能的主要界面 -->\r\n        <div class=\"check-main-ai\" v-if=\"is_show_ai\">\r\n            <div class=\"guanbi\" @click=\"change_show_ai\">\r\n                <van-icon name=\"cross\" color=\"#606060\" />\r\n            </div>\r\n            <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\" mode=\"widthFix\"\r\n                class=\"wyt-say\" />\r\n            <div class=\"say-text\">嗨，你好，试试慧学外语这些伴学功能</div>\r\n            <!-- 功能选项按钮 -->\r\n            <div class=\"fast-parent\">\r\n                <div class=\"fast-box\" @click=\"to_free_talk\">\r\n                    <span>\r\n                        <span style=\"font-size: 32rpx; font-weight: bold;\">\"自由对话\"</span>\r\n                        口语练习\r\n                    </span>\r\n                </div>\r\n                <div class=\"fast-box\" @click=\"to_script_talk\">\r\n                    <span>\r\n                        <span style=\"font-size: 32rpx; font-weight: bold;\">\"主题对话\"</span>\r\n                        口语练习\r\n                    </span>\r\n                </div>\r\n                <div class=\"fast-box\" @click=\"to_ai_write\">\r\n                    <span>\r\n                        <span style=\"font-size: 32rpx; font-weight: bold;\">\"写作练习\"</span>\r\n                        写作指导\r\n                    </span>\r\n                </div>\r\n            </div>\r\n            <div class=\"input-box\">\r\n                <button class=\"button-default\"\r\n                    :style=\"speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''\"\r\n                    @click=\"chat\">去对话</button>\r\n            </div>\r\n            <!-- 输入框和录音按钮 -->\r\n            <!-- <div class=\"input-box\" v-show=\"is_speak == 1\">\r\n                <input class=\"question\" maxlength=\"-1\" v-model=\"stu_content\" @input=\"inputText\"\r\n                    placeholder-class=\"placeholder\" :placeholder=\"stu_placeholder\" type=\"text\" />\r\n            </div>\r\n            <div class=\"input-box\" v-show=\"is_speak != 1\"> -->\r\n            <!-- <button class=\"button-default\"\r\n                    :style=\"speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''\"\r\n                    @click=\"recStart\">{{ stu_placeholder }}</button> -->\r\n            <!-- <button class=\"button-default\"\r\n                    :style=\"speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''\"\r\n                    @click=\"chat\"></button>\r\n            </div> -->\r\n            <!-- 发送信息和切换语音输入的按钮 -->\r\n            <!-- <div class=\"say-box\" id=\"end\" v-if=\"speaking === false\">\r\n                <img v-if=\"stu_content !== '' && is_speak === 1\" @click=\"chat\" class=\"send-img\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/send_msg.png\" mode=\"aspectFill\" />\r\n                <img v-if=\"stu_content === '' && is_speak === 1\" @click=\"chang_speak\" data-is-speak=\"0\"\r\n                    class=\"other-img\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/audio.png\"\r\n                    mode=\"scaleToFill\" />\r\n                <img v-if=\"stu_content === '' && is_speak === 0 && speaking === false\" @click=\"chang_hand\"\r\n                    data-is-speak=\"1\" class=\"other-img\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/hand.png\" mode=\"scaleToFill\" />\r\n            </div> -->\r\n        </div>\r\n        <!-- <van-popup v-model=\"show_video\" round position=\"bottom\" :style=\"{ height: '30%' }\">\r\n            <div class=\"speak-talk-desc\">语音识别中，请说英语</div>\r\n            <div class=\"speak-loading\">\r\n                <img width=\"30%\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/output-20_27_20.gif\"\r\n                    alt=\"\">\r\n            </div>\r\n            <van-count-down :time=\"time\" ref=\"countDown\" format=\"ss\" @finish=\"speak_finish\" />\r\n            <div class=\"caozuo\">\r\n                <div class=\"caozuo-btn-cancel\" @click=\"cancel\">取消</div>\r\n                <div class=\"caozuo-btn-send\" @click=\"recStop\">发送</div>\r\n            </div>\r\n        </van-popup> -->\r\n    </div>\r\n</template>\r\n\r\n<script>\r\nimport { getRelList } from '@/api/user'\r\nexport default {\r\n    name: 'Ai',\r\n    data() {\r\n        return {\r\n            time: 60000,\r\n            show_video: false,\r\n            is_show_ai: false,\r\n            stu_placeholder: '请输入你的疑问...',\r\n            stu_content: '',\r\n            is_speak: 1,\r\n            res_id: '',\r\n            canuse: 1,\r\n            speaking: false,\r\n            recorder: null,\r\n            mediaStream: null,\r\n            audioChunks: [],\r\n            type: 0,\r\n            filePath: '',\r\n            lang_time: 0,\r\n            audioDetails: null // 新增用于存储音频文件详细信息的状态\r\n        }\r\n    },\r\n    watch: {\r\n        '$route.path': function (newPath) {\r\n            this.active = newPath // 路由变化时更新激活的路由\r\n        }\r\n    },\r\n    methods: {\r\n        async speak_finish() {\r\n            this.$message({\r\n                message: '录音结束,最多60s',\r\n                center: true\r\n            })\r\n            this.speaking = false;\r\n            this.recStop()\r\n        },\r\n        async inputText() {\r\n            console.log(this.stu_content)\r\n            this.type = 0\r\n        },\r\n        async chat() {\r\n            this.$router.push({\r\n                name: 'ChatIndex', query: {\r\n                    project_id: 0,\r\n                    is_history: 0,\r\n                    lang_time: this.lang_time,\r\n                    filePath: this.filePath,\r\n                    type: this.type,\r\n                    stype: 'speak_free',\r\n                    from: 'speak_free',\r\n                    chat_title: '自由对话',\r\n                    content: this.stu_content,\r\n                    res_id: this.res_id\r\n                }\r\n            })\r\n        },\r\n        async to_free_talk() {\r\n            this.$router.push({\r\n                name: 'ChatIndex', query: {\r\n                    project_id: 0,\r\n                    is_history: 0,\r\n                    lang_time: this.lang_time,\r\n                    filePath: this.filePath,\r\n                    type: 0,\r\n                    stype: 'speak_free',\r\n                    from: 'speak_free',\r\n                    chat_title: '自由对话',\r\n                    content: '',\r\n                    res_id: this.res_id\r\n                }\r\n            })\r\n        },\r\n\r\n        async to_ai_write() {\r\n            this.$router.push({\r\n                name: 'NewChat', query: {\r\n                    project_id: 0,\r\n                    is_history: 0,\r\n                    lang_time: this.lang_time,\r\n                    filePath: this.filePath,\r\n                    type: 0,\r\n                    stype: 'write',\r\n                    from: 'write',\r\n                    chat_title: '写作练习',\r\n                    content: '',\r\n                    res_id: this.res_id\r\n                }\r\n            })\r\n        },\r\n        async to_script_talk() {\r\n            this.$router.push({ name: 'Project' })\r\n            // this.$router.push({\r\n            //     name: 'ChatIndex', query: {\r\n            //         project_id: 0,\r\n            //         is_history: 0,\r\n            //         lang_time: this.lang_time,\r\n            //         filePath: this.filePath,\r\n            //         type: 0,\r\n            //         stype: 'speak_script',\r\n            //         from: 'speak_script',\r\n            //         chat_title: '朗读练习',\r\n            //         content: '',\r\n            //         res_id: this.res_id\r\n            //     }\r\n            // })\r\n        },\r\n        async chang_speak() {\r\n            await this.recOpen();\r\n            this.is_speak = 0;\r\n            this.stu_placeholder = \"开始说话\";\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n\r\n        async chang_hand() {\r\n            this.is_speak = 1;\r\n            this.stu_placeholder = \"请输入你的疑问...\";\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n\r\n        change_show_ai() {\r\n            this.is_show_ai = !this.is_show_ai\r\n        },\r\n        async getRelList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getRelList({ sid: user.sid, resource_id: 1193 })\r\n                    const data = response.data\r\n                    this.RelList = data\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n\r\n    },\r\n    mounted() {\r\n\r\n        // 在组件挂载后立即获取任务数据\r\n        this.getRelList()\r\n    }\r\n}\r\n</script>\r\n\r\n\r\n<style scoped>\r\n.speak-talk-desc {\r\n    font-size: 16px;\r\n    margin: 30px 0;\r\n}\r\n\r\n.speak-loading {\r\n    width: 100vw;\r\n    height: 30px;\r\n    margin-bottom: 20px;\r\n}\r\n\r\n.caozuo {\r\n    width: 100vw;\r\n    height: 50px;\r\n    position: fixed;\r\n    bottom: 20px;\r\n}\r\n\r\n.caozuo-btn-cancel,\r\n.caozuo-btn-send {\r\n    width: 130px;\r\n    height: 42px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 42px;\r\n}\r\n\r\n.caozuo-btn-cancel {\r\n    width: 130px;\r\n    height: 42px;\r\n    background: #EEEEEE;\r\n    border-radius: 8px 8px 8px 8px;\r\n    margin-right: 20px;\r\n}\r\n\r\n.caozuo-btn-send {\r\n    width: 130px;\r\n    height: 42px;\r\n    background: linear-gradient(134deg, #4499EE 0%, #9CE4FF 100%);\r\n    border-radius: 8px 8px 8px 8px;\r\n    color: #FFF;\r\n}\r\n\r\n.check-main-ai {\r\n    width: 100vw;\r\n    height: auto;\r\n    max-height: 400px;\r\n    overflow-y: auto;\r\n    background: linear-gradient(134deg, #eff7fe, #e3f3ff);\r\n    padding-bottom: 25px;\r\n    position: fixed;\r\n    bottom: 0px;\r\n    border-radius: 40px 40px 0 0;\r\n    z-index: 200;\r\n    -webkit-overflow-scrolling: touch;\r\n    /* 改善 iOS 滚动 */\r\n    transform: translateZ(0);\r\n    /* 触发硬件加速 */\r\n}\r\n\r\n.guanbi {\r\n    width: auto;\r\n    height: auto;\r\n    position: fixed;\r\n    right: 10px;\r\n    text-align: center;\r\n    padding: 8px 15px;\r\n    font-weight: bold;\r\n    /* background-color: rgba(236, 221, 10, 0.3); */\r\n    border-radius: 40px;\r\n}\r\n\r\n.wyt-say {\r\n    width: 75px;\r\n    height: 75px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.say-text {\r\n    width: 300px;\r\n    height: 75px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 60px;\r\n    font-size: 14px;\r\n}\r\n\r\n.fast-parent {\r\n    padding-left: 10vw;\r\n}\r\n\r\n.fast-box {\r\n    width: 80px;\r\n    height: 55px;\r\n    background: #ffffff;\r\n    border-radius: 0px 20px 0px 20px;\r\n    border: 1px solid #acc5ff;\r\n    margin-left: 5px;\r\n    color: #686868;\r\n    font-size: 12px;\r\n    text-align: center;\r\n    padding: 8px 9px;\r\n    text-align: center;\r\n    margin-bottom: 110px;\r\n    align-items: center;\r\n    display: flex;\r\n    float: left;\r\n}\r\n\r\n.fast-box:last-child {\r\n    margin-right: 0;\r\n}\r\n\r\n.input-box {\r\n    width: 80vw;\r\n    height: 42px;\r\n    background: #ffffff;\r\n    border-radius: 16px;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border: none;\r\n}\r\n\r\n.question {\r\n    padding: 10px 60px 10px 15px;\r\n    font-size: 14px;\r\n    color: #000;\r\n    border: none;\r\n}\r\n\r\n.placeholder {\r\n    font-size: 14px;\r\n    color: #989898;\r\n    padding: 3px 15px;\r\n}\r\n\r\n.say-box {\r\n    width: 60px;\r\n    height: 42px;\r\n    background: #ffffff;\r\n    border-radius: 15px;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 293px;\r\n}\r\n\r\n.say-img {\r\n    width: 10px;\r\n    height: 15px;\r\n    padding: 7px 25px;\r\n}\r\n\r\n.send-img {\r\n    width: 53px;\r\n    height: 30px;\r\n    position: fixed;\r\n    bottom: 50px;\r\n    left: 293px;\r\n}\r\n\r\n.other-img {\r\n    width: 25px;\r\n    height: 25px;\r\n    position: fixed;\r\n    bottom: 53px;\r\n    left: 326px;\r\n}\r\n\r\n.button-default {\r\n    background: #fff;\r\n    /* color: #000000; */\r\n    height: 42px;\r\n    width: 323px;\r\n    line-height: 25px;\r\n    text-align: center;\r\n    border-radius: 21;\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n    border: none;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border-radius: 16px;\r\n}\r\n\r\n.button-speaking {\r\n    background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);\r\n    color: #fff;\r\n    height: 42px;\r\n    width: 333px;\r\n    line-height: 25px;\r\n    /* text-align: center; */\r\n    border-radius: 21px;\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n    z-index: 100;\r\n    border: none;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border-radius: 16px;\r\n}\r\n\r\n\r\n.wyt {\r\n    position: fixed;\r\n    bottom: 60px;\r\n    right: 5px;\r\n    width: 75px;\r\n    height: 75px;\r\n    -webkit-user-select: none;\r\n    /* 防止 iOS 选择文本 */\r\n    -webkit-touch-callout: none;\r\n}\r\n\r\n.btn-test {\r\n    position: absolute;\r\n    top: 0;\r\n}\r\n\r\n.btn-test2 {\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Ai.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Ai.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Ai.vue?vue&type=template&id=7599a439&scoped=true\"\nimport script from \"./Ai.vue?vue&type=script&lang=js\"\nexport * from \"./Ai.vue?vue&type=script&lang=js\"\nimport style0 from \"./Ai.vue?vue&type=style&index=0&id=7599a439&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"7599a439\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"about-send\"},[_c('div',{staticClass:\"model-title\"},[_vm._v(\"推荐学\")]),_c('div',{staticClass:\"model-more\",attrs:{\"data-index\":\"1\"},on:{\"click\":function($event){return _vm.to_study_list(1)}}},[_vm._v(\"全部\")]),_c('div',{staticClass:\"model-icon\",attrs:{\"data-index\":\"1\"},on:{\"click\":function($event){return _vm.to_study_list(1)}}},[_c('van-icon',{attrs:{\"name\":\"arrow\",\"color\":\"#606060\"}})],1),_vm._l((_vm.RelList),function(item,index){return _c('div',{key:index,staticClass:\"about-item\",on:{\"click\":function($event){return _vm.to_praxis(item)}}},[_c('img',{staticClass:\"item-cover\",attrs:{\"src\":item.cover,\"mode\":\"aspectFill\"}}),_c('div',{staticClass:\"item-info\"},[_c('div',{staticClass:\"info-title\"},[(item.category_id == 1)?_c('span',[_vm._v(\"[听力]\")]):_vm._e(),(item.category_id == 2)?_c('span',[_vm._v(\"[阅读]\")]):_vm._e(),(item.category_id == 4)?_c('span',[_vm._v(\"[写作]\")]):_vm._e(),_vm._v(\" \"+_vm._s(item.name)+\" \")])]),(item.status == 1)?_c('div',{staticClass:\"con-to-study\"},[_vm._v(\"继续学习\")]):_vm._e(),(item.status == 2)?_c('div',{staticClass:\"con-to-study\"},[_vm._v(\"已完成\")]):_vm._e(),(item.status == 0)?_c('div',{staticClass:\"con-to-study\"},[_vm._v(\"进入学习\")]):_vm._e()])})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- src/layouts/TabBarLayout.vue -->\r\n\r\n<template>\r\n    <div class=\"about-send\">\r\n        <div class=\"model-title\">推荐学</div>\r\n        <div class=\"model-more\" @click=\"to_study_list(1)\" data-index=\"1\">全部</div>\r\n        <div class=\"model-icon\" @click=\"to_study_list(1)\" data-index=\"1\">\r\n            <van-icon name=\"arrow\" color=\"#606060\" />\r\n        </div>\r\n        <div class=\"about-item\" v-for=\"(item, index) in RelList\" :key=\"index\" @click=\"to_praxis(item)\">\r\n            <img :src=\"item.cover\" mode=\"aspectFill\" class=\"item-cover\" />\r\n            <div class=\"item-info\">\r\n                <div class=\"info-title\">\r\n                    <span v-if=\"item.category_id == 1\">[听力]</span>\r\n                    <span v-if=\"item.category_id == 2\">[阅读]</span>\r\n                    <span v-if=\"item.category_id == 4\">[写作]</span>\r\n                    {{ item.name }}\r\n                </div>\r\n            </div>\r\n            <div class=\"con-to-study\" v-if=\"item.status == 1\">继续学习</div>\r\n            <div class=\"con-to-study\" v-if=\"item.status == 2\">已完成</div>\r\n            <div class=\"con-to-study\" v-if=\"item.status == 0\">进入学习</div>\r\n        </div>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\nimport { getHotList, saveUserStudyResource } from '@/api/user'\r\nexport default {\r\n    name: 'HotList',\r\n    data() {\r\n        return {\r\n            RelList: [],\r\n            active: this.$route.path, // 基于当前路径设置激活的路由,\r\n            resource_id: this.$route.query.resource_id\r\n        }\r\n    },\r\n    watch: {\r\n        '$route.path': function (newPath) {\r\n            this.active = newPath; // 路由变化时更新激活的路由\r\n        }\r\n    },\r\n    methods: {\r\n        async to_study_list(index) {\r\n            this.$router.push({ name: 'StudyList', query: { now_status: index } })\r\n        },\r\n        async getRelList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getHotList({ sid: user.sid })\r\n                    const data = response.data\r\n                    this.RelList = data\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async to_praxis(item) {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await saveUserStudyResource({ sid: user.sid, resource_id: item.id })\r\n                    if (response.code == 100) {\r\n                        if (item.category_id == 1) {\r\n                            this.$router.push({ name: 'Praxis', query: { log_id: response.data, resources_id: item.id } })\r\n                        }\r\n                        if (item.category_id == 2) {\r\n                            this.$router.push({ name: 'ReadPraxis', query: { log_id: response.data, resources_id: item.id } })\r\n                        }\r\n                        if (item.category_id == 4) {\r\n                            this.$router.push({ name: 'WritePraxis', query: { log_id: response.data, resources_id: item.id } })\r\n                        }\r\n                    }\r\n\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        }\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        this.getRelList()\r\n    }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.tab-bar-layout {\r\n    position: relative;\r\n    height: 100%;\r\n}\r\n\r\n.about-send {\r\n    width: 330px;\r\n    height: auto;\r\n    margin: 28px auto 0 auto;\r\n    text-align: left;\r\n}\r\n\r\n.title {\r\n    font-size: 16px;\r\n    padding-bottom: 7px;\r\n}\r\n\r\n.about-item {\r\n    width: 100%;\r\n    height: 80px;\r\n    background: #FFFFFF;\r\n    box-shadow: 0px 2px 10px 1px rgba(80, 143, 206, 0.1);\r\n    border-radius: 20px;\r\n    margin: 10px 0;\r\n}\r\n\r\n.item-cover {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 58px;\r\n    height: 58px;\r\n    border-radius: 10px;\r\n    margin: 10px 6px 0 12px;\r\n}\r\n\r\n.item-info {\r\n    width: 180px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-top: 21px;\r\n}\r\n\r\n.info-title {\r\n    font-size: 12px;\r\n    font-weight: bold;\r\n    line-height: 20px;\r\n    width: 180px;\r\n    overflow: hidden;\r\n    text-overflow: ellipsis;\r\n    white-space: nowrap;\r\n\r\n}\r\n\r\n.con-to-study {\r\n    width: 60px;\r\n    height: 85px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 85px;\r\n    font-size: 12px;\r\n    color: #003F88;\r\n    text-align: center;\r\n}\r\n\r\n.model-more {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 200px;\r\n    text-align: right;\r\n    font-size: 12px;\r\n}\r\n\r\n.model-icon {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.model-title {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 110px;\r\n    text-align: left;\r\n    font-size: 16px;\r\n}\r\n\r\n/* 可以在这里添加 TabBar 的样式 */\r\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HotList.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HotList.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./HotList.vue?vue&type=template&id=8a64e4be&scoped=true\"\nimport script from \"./HotList.vue?vue&type=script&lang=js\"\nexport * from \"./HotList.vue?vue&type=script&lang=js\"\nimport style0 from \"./HotList.vue?vue&type=style&index=0&id=8a64e4be&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"8a64e4be\",\n  null\n  \n)\n\nexport default component.exports","<template>\r\n  <div class=\"home\">\r\n    <div class=\"main\">\r\n      <div class=\"head\">\r\n        <div class=\"head-left\">\n          <div class=\"head-left-title\">\n            学习\n            <button type=\"button\" class=\"language-trigger\" @click=\"showLanguageSheet = true\">\n              {{ languageLabel }}\n              <van-icon name=\"arrow-down\" size=\"12px\" />\n            </button>\n          </div>\n          <div class=\"head-left-content\">已学习{{ countSign }}天，继续加油！</div>\n        </div>\n        <div class=\"head-right\">\r\n          <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/study.png\" mode=\"widthFix\"\r\n            class=\"head-right-img\" />\r\n        </div>\r\n      </div>\r\n      <div class=\"content\">\r\n        <!-- 统计数据开始 -->\r\n        <div class=\"content-today-count\">\r\n          <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/tree.png\" mode=\"widthFix\"\r\n            class=\"tree-img\" />\r\n          <div class=\"today-count-item\" style=\"margin-left: 70px;\" @click=\"to_calendar\">\r\n            <div class=\"count-one\">{{ countTask.total_finish_count }}</div>\r\n            <div class=\"count-two\">/{{ countTask.total_task_count }}个</div>\r\n            <div class=\"count-title\">今日任务</div>\r\n          </div>\r\n          <div class=\"today-count-item\">\r\n            <div class=\"count-one\">{{ countTask.today_minutes }}</div>\r\n            <div class=\"count-two\">/{{ countTask.plan_minutes }}min</div>\r\n            <div class=\"count-title\">今日时长</div>\r\n          </div>\r\n          <div class=\"today-count-item\">\r\n            <div class=\"count-one\">{{ countTask.etalk_total_minutes }}min</div>\r\n            <div class=\"count-two\"></div>\r\n            <div class=\"count-title\">E-Talk时长</div>\r\n          </div>\r\n          <div class=\"today-count-item today-count-item-last\" @click=\"to_calendar\">\r\n            <div class=\"count-one\">{{ countSign }}</div>\r\n            <div class=\"count-two\">天</div>\r\n            <div class=\"count-title\">\r\n              <div class=\"sign-text\">本月打卡</div>\r\n            </div>\r\n          </div>\r\n          <div class=\"icon-sign\">\r\n            <van-icon name=\"arrow\" color=\"#606060\" size=\"12px\" />\r\n          </div>\r\n        </div>\r\n        <!-- 统计数据结束 -->\r\n        <!-- 快速模块开始 -->\r\n        <div class=\"fast-click\">\r\n          <div class=\"empty\" style=\" width:100%;height: 80px;text-align: center;\"\r\n            v-if=\"fast_list.length == 0 || fast_list == []\">\r\n            <van-loading size=\"24px\">加载中...</van-loading>\r\n          </div>\r\n          <div class=\"fast-item\" :data-index=\"item.page_url\" v-for=\"(item, index) in fast_list\" :key=\"index\" replace\r\n            @click=\"to_page(item)\">\r\n            <img :src=\"item.img_url\" mode=\"widthFix\" class=\"fast-img\" />\r\n            <div class=\"fast-title\">{{ item.name }}</div>\r\n          </div>\r\n          <div class=\"fast-item\">\r\n            <img class=\"fast-img-empty\" />\r\n            <div class=\"fast-title\"></div>\r\n          </div>\r\n        </div>\r\n        <!-- 快速模块结束 -->\r\n        <!-- 通知开始 -->\r\n        <div class=\"notice\">\r\n          <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/notice.png\" mode=\"widthFix\"\r\n            class=\"notice-img\" />\r\n          <div class=\"notice-title\">\r\n            <van-notice-bar background=\"#FFF\" color=\"#000\" :text=\"notice_text\" />\r\n          </div>\r\n          <div class=\"more-info\" @click=\"to_notice_list\">全部</div>\r\n          <div class=\"more-icon\">\r\n            <van-icon name=\"arrow\" color=\"#606060\" />\r\n          </div>\r\n        </div>\r\n        <!-- 通知结束 -->\r\n        <!-- 写作大赛 -->\r\n        <div v-if=\"active_info.id\" class=\"xzds\" @click=\"to_active(active_info.id)\">\n          <div class=\"xzds-title\">{{ active_info.name }}</div>\r\n          <div class=\"xzds-time\">{{ active_info.start_date }}~{{ active_info.end_date }}</div>\r\n        </div>\r\n        <!-- 写作大赛 -->\r\n        <!-- 正在学 -->\r\n        <div class=\"learn-model\" v-if=\"NewResouceList.length > 0\">\r\n          <div class=\"model-start\">\r\n            <div class=\"model-title\">正在学</div>\r\n            <div class=\"model-more\" @click=\"to_study_list(0)\" data-index=\"1\">全部</div>\r\n            <div class=\"model-icon\" @click=\"to_study_list(0)\" data-index=\"1\">\r\n              <van-icon name=\"arrow\" color=\"#606060\" />\r\n            </div>\r\n\r\n            <div class=\"learn-item\" v-for=\"(item, index) in NewResouceList\" :key=\"index\" @click=\"to_praxis(item)\">\r\n              <img :src=\"item.cover\" mode=\"aspectFill\" class=\"learn-img\" />\r\n              <div class=\"learn-item-info\">\r\n                <div class=\"learn-item-title\">\r\n                  <span v-if=\"item.category_id == 1\">[听力]</span>\r\n                  <span v-if=\"item.category_id == 2\">[阅读]</span>\r\n                  <span v-if=\"item.category_id == 4\">[写作]</span>\r\n                  {{ item.name }}\r\n                </div>\r\n              </div>\r\n              <div class=\"btn-learn\">继续学习</div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <!-- 正在学 -->\r\n        <!-- 推荐学 -->\r\n\r\n        <HotList :key=\"studyLanguage\" />\n        <!-- 推荐学 -->\r\n        <div class=\"wall\"></div>\r\n      </div>\r\n    </div>\r\n    <Ai allow=\"microphone\" v-if=\"showAi\" />\n    <span class=\"reback\" @click=\"to_dingtalk\">问题反馈</span>\n\n    <van-action-sheet v-model=\"showLanguageSheet\" title=\"选择语言\" closeable>\n      <div class=\"language-sheet\">\n        <button\n          v-for=\"item in languageOptions\"\n          :key=\"item.value\"\n          type=\"button\"\n          class=\"language-option\"\n          :class=\"{ active: studyLanguage === item.value }\"\n          @click=\"changeLanguage(item.value)\"\n        >\n          <span>{{ item.label }}</span>\n          <van-icon v-if=\"studyLanguage === item.value\" name=\"success\" size=\"22px\" />\n        </button>\n      </div>\n    </van-action-sheet>\n  </div>\n</template>\n\n<script>\nimport { getUserStudy, getDateList, getMenuList, getNewUserResourceList, HotResouceList, getActiveList, NoticeList, UserTaskSend, getUserRowByToken } from '@/api/home'\nimport { saveUserStudyResource, getUserSign } from '@/api/user'\nimport { getPlant } from '@/api/plant'\nimport { getStudyLanguage, getStudyLanguageLabel, languageOptions, setStudyLanguage } from '@/utils/language'\nimport { saveRefreshedUser } from '@/utils/auth'\nimport Ai from \"@/components/Ai\";\nimport HotList from \"@/components/HotList\";\nexport default {\r\n  components: { Ai, HotList },\r\n  name: 'Home',\r\n  data() {\r\n    return {\r\n      countSign: 10,\r\n      fast_list: [],\r\n      NewResouceList: [],\r\n      HotResouceList: [],\n      active_info: {},\n      languageRequestId: 0,\n      showAi: false,\n      showLanguageSheet: false,\n      studyLanguage: getStudyLanguage(),\n      languageOptions,\n      notice_text: '暂无通知',\n      countTask: {\r\n        total_finish_count: 1,\r\n        total_task_count: 1,\r\n        today_minutes: 0,\r\n        etalk_minutes: 0,\r\n        etalk_total_minutes: 0,\r\n        plan_minutes: 0\r\n      }\r\n    }\r\n  },\r\n  methods: {\n    async refreshHomeData() {\n      this.languageRequestId += 1\n      this.fast_list = []\n      this.NewResouceList = []\n      this.HotResouceList = []\n      this.notice_text = '暂无通知'\n      this.active_info = {}\n      this.countSign = 0\n      this.countTask = {\n        total_finish_count: 0, total_task_count: 0, today_minutes: 0,\n        etalk_minutes: 0, etalk_total_minutes: 0, plan_minutes: 0\n      }\n      await Promise.all([\n        this.getUserStudy(),\n        this.getDateList(),\n        this.getMenuList(),\n        this.getNewUserResourceList(),\n        this.getHotResouceList(),\n        this.NoticeList()\n      ])\n    },\n    changeLanguage(value) {\n      const next = setStudyLanguage(value)\n      if (next === this.studyLanguage) {\n        this.showLanguageSheet = false\n        return\n      }\n      this.studyLanguage = next\n      this.showLanguageSheet = false\n      this.refreshHomeData()\n    },\n    async to_praxis(item) {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await saveUserStudyResource({ sid: user.sid, resource_id: item.id })\r\n          if (response.code == 100) {\r\n            if (item.category_id == 1) {\r\n              this.$router.push({ name: 'Praxis', query: { log_id: response.data, resources_id: item.id } })\r\n            }\r\n            if (item.category_id == 2) {\r\n              this.$router.push({ name: 'ReadPraxis', query: { log_id: response.data, resources_id: item.id } })\r\n            }\r\n            if (item.category_id == 4) {\r\n              this.$router.push({ name: 'WritePraxis', query: { log_id: response.data, resources_id: item.id } })\r\n            }\r\n          }\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async GetUserInfo() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        console.log(user)\r\n        if (user && user.sid) {\r\n          const response = await getUserRowByToken({ token: user.token })\n          this.userSign(user.sid)\n          saveRefreshedUser(response.data)\n          if (response.data.type_id == 3) {\r\n            this.$router.push({ name: 'noAuth' })\r\n            return\r\n          }\r\n          if (response.data.type_id == 2) {\r\n            this.showAi = true\r\n          }\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async UserTaskSend() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          await UserTaskSend({ sid: user.sid })\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async to_notice_list() {\r\n      this.$router.push({ name: 'NoticeList' })\r\n    },\r\n    async to_study_list(index) {\r\n      this.$router.push({ name: 'StudyList', query: { now_status: index } })\r\n    },\r\n    to_calendar() {\r\n      this.$router.push({ name: 'Calendar' })\r\n    },\r\n    async NoticeList() {\n      const requestId = this.languageRequestId\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await NoticeList({\r\n            sid: user.sid,\r\n            page: 1,\r\n            size: 1,\r\n            type: 'common',\r\n          })\r\n          if (requestId !== this.languageRequestId) return\n          const list = response.data && response.data.list\n          this.notice_text = Array.isArray(list) && list[0] ? list[0].title : '暂无通知'\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async getUserStudy() {\n      const requestId = this.languageRequestId\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await getUserStudy(user.sid)\n          if (requestId !== this.languageRequestId) return\n          const active_res = await getActiveList(user.sid)\n          if (requestId !== this.languageRequestId) return\n          const data = response.data || {}\n          this.active_info = Array.isArray(active_res.data) ? active_res.data[0] || {} : {}\n          var new_total = data.etalk_total_minutes\r\n          // if(new_total > 60){\r\n          //  var new_total =  (new_total / 60).toFixed(2) + 'h'\r\n          // }\r\n          // if(new_total > 1440){\r\n          //  var new_total =  (new_total/1440).toFixed(2) + 'day'\r\n          // }\r\n          this.countTask = {\r\n            total_finish_count: data.total_finish_count,\r\n            total_task_count: data.total_task_count,\r\n            today_minutes: data.today_minutes,\r\n            etalk_minutes: data.etalk_minutes,\r\n            etalk_total_minutes: new_total,\r\n            plan_minutes: data.plan_minutes\r\n          }\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async getNewUserResourceList() {\n      const requestId = this.languageRequestId\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await getNewUserResourceList(user.sid)\n          if (requestId !== this.languageRequestId) return\n          if (response.code == 100) {\r\n            const data = response.data\r\n            this.NewResouceList = Array.isArray(data) ? data : []\n          }\r\n\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async getHotResouceList() {\n      const requestId = this.languageRequestId\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await HotResouceList(user.sid)\n          if (requestId !== this.languageRequestId) return\n          const data = response.data\r\n          this.HotResouceList = data\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async getDateList() {\n      const requestId = this.languageRequestId\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        const now = new Date()\r\n        var now_month = now.getMonth() + 1;\r\n        if (now_month < 10) {\r\n          now_month = '0' + now_month\r\n        }\r\n        let now_date = now.getFullYear() + '' + now_month\r\n        if (user && user.sid) {\r\n          const response = await getDateList({ sid: user.sid, dates: now_date })\n          if (requestId !== this.languageRequestId) return\n          const data = response.data\n          this.countSign = Array.isArray(data) ? data.length : 0\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async getMenuList() {\n      const requestId = this.languageRequestId\n      try {\r\n        const response = await getMenuList()\n        if (requestId !== this.languageRequestId) return\n        const data = Array.isArray(response.data) ? response.data : []\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        console.log(user)\r\n        data.forEach(element => {\r\n          element.img_url = element.img_url.replace('a-news.oss-cn-hangzhou.aliyuncs.com', 'a-news.oss-accelerate.aliyuncs.com');\r\n        });\r\n        this.fast_list = data\r\n        console.log(data)\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async to_page(item) {\r\n      if (item.id == 3 && !this.showAi) {\r\n        this.$router.push({ name: 'noAuth' })\r\n        return\r\n      }\r\n      this.$router.push(item.link_url)\r\n    },\r\n    async to_active(active_id) {\r\n      this.$router.push({ name: 'ActiveDetail', query: { active_id: active_id } })\r\n    },\r\n    async getPlant() {\r\n      const user = JSON.parse(localStorage.getItem('user'))\r\n      if (user && user.sid) {\r\n        const response = await getPlant(user.sid)\r\n        console.log(response)\r\n        if (response.code !== 100) {\r\n          this.$router.push({ name: 'SetPlant' })\r\n        }\r\n      } else {\r\n        console.error('用户未登录或没有找到sid')\r\n      }\r\n\r\n    },\r\n    async userSign(sid) {\r\n      const now = new Date()\r\n      var day = now.getDate()\r\n      var now_month = now.getMonth() + 1;\r\n      if (now_month < 10) {\r\n        now_month = '0' + now_month\r\n      }\r\n      if (day < 10) {\r\n        day = '0' + day\r\n      }\r\n      let now_date = now.getFullYear() + '-' + now_month + '-' + day\r\n      await getUserSign({ sid: sid, dateline: now_date })\r\n    },\r\n    async to_dingtalk() {\r\n      window.location.href = 'https://qr.dingtalk.com/action/joingroup?code=v1,k1,IhOSmROFTSw+3pBELANkfbCOdwZd2JiTcd6YyE+gR7k=&_dt_no_comment=1&origin=11';\r\n    },\r\n  },\r\n  mounted() {\n    // 在组件挂载后立即获取任务数据\r\n    this.GetUserInfo()\r\n    this.getPlant()\r\n    this.UserTaskSend()\r\n    this.getUserStudy()\r\n    this.getDateList()\r\n    this.getMenuList()\r\n    this.getNewUserResourceList()\r\n    this.getHotResouceList()\r\n    this.NoticeList()\r\n\r\n\r\n  },\n  computed: {\n    languageLabel() {\n      const item = this.languageOptions.find(child => child.value === this.studyLanguage)\n      return item ? item.label : getStudyLanguageLabel()\n    }\n  }\n}\n</script>\n\r\n<style scoped>\r\n.head {\r\n  width: 100%;\r\n  height: 180px;\r\n  background-color: #E2F2FF;\r\n}\r\n\r\n.reback {\r\n  position: fixed;\r\n  bottom: 160px;\r\n  right: 5px;\r\n  font-size: 16px;\r\n  width: 20px;\r\n  padding: 10px 5px;\r\n  background: rgba(2, 208, 245, 0.5);\r\n  border-radius: 10px;\r\n}\r\n\r\n.head-left {\r\n  width: 169px;\r\n  padding: 49px 0 0 25px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  text-align: left;\r\n}\r\n\r\n.head-left-title {\n  width: 169px;\n  color: #030303;\n  font-weight: bold;\n  font-size: 22px;\n  height: 29px;\n  line-height: 29px;\n  margin-bottom: 5px;\n  text-align: left;\n  display: flex;\n  align-items: center;\n}\n\n.language-trigger {\n  display: inline-flex;\n  align-items: center;\n  height: 24px;\n  margin-left: 8px;\n  padding: 0;\n  border: 0;\n  background: transparent;\n  color: #5f5f5f;\n  font-size: 14px;\n  font-weight: 400;\n  line-height: 24px;\n}\n\n.language-trigger .van-icon {\n  margin-left: 4px;\n}\n\n.language-sheet {\n  min-height: 260px;\n  padding: 34px 34px 42px;\n  border-top: 1px solid #e8e8e8;\n  box-sizing: border-box;\n}\n\n.language-option {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  width: 100%;\n  height: 48px;\n  margin-bottom: 28px;\n  padding: 0;\n  border: 0;\n  background: transparent;\n  color: #999;\n  font-size: 20px;\n  line-height: 48px;\n  text-align: left;\n}\n\n.language-option.active {\n  color: #1479f6;\n}\n\n::v-deep .van-action-sheet__header {\n  height: 88px;\n  color: #111;\n  font-size: 20px;\n  font-weight: 600;\n  line-height: 88px;\n}\n\n::v-deep .van-action-sheet__close {\n  top: 32px;\n  right: 26px;\n  color: #999;\n  font-size: 24px;\n}\n\r\n.head-left-content {\r\n  width: 169px;\r\n  font-size: 12px;\r\n  color: #707070;\r\n  height: 16px;\r\n  line-height: 16px;\r\n  text-align: left;\r\n}\r\n\r\n.head-right {\r\n  padding-top: 53px;\r\n  width: 153px;\r\n  height: 53px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.head-right-img {\r\n  width: 153px;\r\n  height: 106px;\r\n}\r\n\r\n.content {\r\n  width: 100%;\r\n  height: auto;\r\n  border-radius: 32px;\r\n  background-color: #FFF;\r\n  position: relative;\r\n  top: -30px;\r\n}\r\n\r\n.content-today-count {\r\n  width: 100%;\r\n  height: 70px;\r\n}\r\n\r\n.tree-img {\r\n  /* margin: 3px 0 0 0px; */\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 69px;\r\n  height: 90px;\r\n  position: absolute;\r\n  left: 10px;\r\n}\r\n\r\n.today-count-item {\r\n  /* width: 80px; */\r\n  height: 90px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  text-align: center;\r\n  margin-right: 15px;\r\n}\r\n\r\n.today-count-item-last {\r\n  width: 45px;\r\n  margin-right: 0px;\r\n}\r\n\r\n.count-one {\r\n  color: #000000;\r\n  font-size: 22px;\r\n  display: inline-block;\r\n  text-align: center;\r\n  padding-top: 32px;\r\n}\r\n\r\n.count-two {\r\n  color: #000000;\r\n  font-size: 12px;\r\n  display: inline-block;\r\n  text-align: center;\r\n  padding-top: 32px;\r\n}\r\n\r\n.count-title {\r\n  color: #5B5B5B;\r\n  font-size: 10px;\r\n  margin-top: 9px;\r\n  line-height: 20px;\r\n  height: 20px;\r\n}\r\n\r\n.sign-text {\r\n  display: inline-block;\r\n  text-align: center;\r\n}\r\n\r\n.icon-sign {\r\n  height: 20px;\r\n  display: inline-block;\r\n  text-align: center;\r\n  padding-top: 65px;\r\n}\r\n\r\n.fast-click {\r\n  width: 295px;\r\n  height: auto;\r\n  margin: 60px auto 0px auto;\r\n}\r\n\r\n.fast-item {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 48px;\r\n  height: 60px;\r\n  text-align: center;\r\n  padding-right: 34px;\r\n  margin-bottom: 20px;\r\n}\r\n\r\n.fast-item:nth-child(4n+4) {\r\n  padding-right: 0px;\r\n}\r\n\r\n.fast-img {\r\n  width: 43px;\r\n  height: 43px;\r\n}\r\n\r\n.fast-img-empty {\r\n  height: 43px;\r\n}\r\n\r\n.fast-title {\r\n  width: 48px;\r\n  height: 17px;\r\n  line-height: 17px;\r\n  font-size: 12px;\r\n  color: #000000;\r\n}\r\n\r\n.notice {\r\n  width: 325px;\r\n  height: 40px;\r\n  margin: 20px auto;\r\n  border-top: 1px solid #E4E4E4;\r\n  border-bottom: 1px solid #E4E4E4;\r\n  line-height: 40px;\r\n}\r\n\r\n.notice-img {\r\n  width: 22px;\r\n  height: 22px;\r\n  margin: 9px 12px 8px 7px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.notice-title {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 224px;\r\n  font-size: 12px;\r\n}\r\n\r\n.more-info {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 40px;\r\n  height: 22px;\r\n  font-size: 12px;\r\n  text-align: right;\r\n}\r\n\r\n.more-icon {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 20px;\r\n  height: 22px;\r\n  /* padding-top: 13px; */\r\n  font-size: 12px;\r\n}\r\n\r\n.xzds {\r\n  width: 330px;\r\n  height: 87px;\r\n  margin: 0 auto;\r\n  background: url('https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/xzds.png');\r\n  background-size: cover;\r\n  text-align: left;\r\n}\r\n\r\n.xzds-title {\r\n  padding: 22px 0 0 43px;\r\n  font-size: 18px;\r\n  font-weight: 400;\r\n}\r\n\r\n.xzds-time {\r\n  padding-left: 43px;\r\n  font-size: 12px;\r\n  color: #A1A1A1;\r\n}\r\n\r\n.learn-model {\r\n  width: 330px;\r\n  height: auto;\r\n  margin: 0 auto;\r\n}\r\n\r\n.model-start {\r\n  width: 330px;\r\n  height: auto;\r\n  margin: 0 auto;\r\n  line-height: 40px;\r\n  margin-top: 30px;\r\n}\r\n\r\n.model-title {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 110px;\r\n  text-align: left;\r\n  font-size: 16px;\r\n}\r\n\r\n.model-more {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 200px;\r\n  text-align: right;\r\n  font-size: 12px;\r\n}\r\n\r\n.model-icon {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.learn-item {\r\n  width: 300px;\r\n  height: 80px;\r\n  background: #FFFFFF;\r\n  box-shadow: 0px 2px 10px 1px rgba(80, 143, 206, 0.1);\r\n  border-radius: 20px 20px 20px 20px;\r\n  margin-bottom: 11px;\r\n  padding-right: 30px;\r\n}\r\n\r\n.learn-img {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 58px;\r\n  height: 58px;\r\n  margin: 10px 10px 13px 13px;\r\n  border-radius: 10px;\r\n}\r\n\r\n.learn-item-info {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 170px;\r\n  height: 50px;\r\n  line-height: 25px;\r\n  padding: 10px 0;\r\n  text-align: left;\r\n}\r\n\r\n.learn-item-title {\r\n  width: 170px;\r\n  font-size: 12px;\r\n  font-weight: bold;\r\n  overflow: hidden;\r\n  text-overflow: ellipsis;\r\n  white-space: nowrap;\r\n}\r\n\r\n.btn-learn {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  color: #003F88;\r\n  font-size: 12px;\r\n  height: 85px;\r\n  line-height: 85px;\r\n}\r\n\r\n.wall {\r\n  width: 100%;\r\n  height: 100px;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Home.vue?vue&type=template&id=50da5511&scoped=true\"\nimport script from \"./Home.vue?vue&type=script&lang=js\"\nexport * from \"./Home.vue?vue&type=script&lang=js\"\nimport style0 from \"./Home.vue?vue&type=style&index=0&id=50da5511&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"50da5511\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"exam\"},[_c('div',{staticClass:\"head\"},[_c('div',{staticClass:\"head-left\"},[_c('div',{staticClass:\"head-left-title\"},[_vm._v(\"测试\")]),_c('div',{staticClass:\"head-left-content\"},[_vm._v(\"上次测试：\"+_vm._s(_vm.exam_list.start_time)+\" \")])]),_vm._m(0)]),_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"content-top\"},[_c('div',{staticClass:\"content-top-title\"},[_vm._v(\" 测试模块 \")]),_c('div',{staticClass:\"exam-model\"},[_c('div',{staticClass:\"model-left\",attrs:{\"data-index\":\"1\"},on:{\"click\":_vm.PaperNotice}},[_c('div',{staticClass:\"model-left-title-cn\"},[_vm._v(\"能力自测\")]),_vm._m(1),(_vm.self_exam == 0)?_c('div',{staticClass:\"next-exam\"},[_vm._v(\"下次测试：\"+_vm._s(_vm.self_exam_time))]):_vm._e(),(_vm.self_exam == 1)?_c('div',{staticClass:\"next-exam\"},[_vm._v(\"测试结束：\"+_vm._s(_vm.self_exam_time))]):_vm._e()])])]),(_vm.show_history)?_c('div',{staticClass:\"learn-model\",staticStyle:{\"height\":\"200rpx\"}},[_c('div',{staticClass:\"model-start\"},[_c('div',{staticClass:\"model-title\"},[_vm._v(\"最新测试\")]),_c('div',{staticClass:\"model-more\",on:{\"click\":_vm.to_all_exam}},[_vm._v(\"全部\")]),_c('div',{staticClass:\"model-icon\"},[_c('van-icon',{attrs:{\"name\":\"arrow\",\"color\":\"#606060\"}})],1),_c('div',{staticClass:\"exam-item\"},[_c('div',{staticClass:\"exam-item-info\"},[_c('div',{staticClass:\"exam-item-info-title\"},[_vm._v(_vm._s(_vm.exam_list.start_time))]),_c('div',{staticClass:\"exam-item-info-time\"},[_vm._v(_vm._s(_vm.exam_list.right_count)+\"/\"+_vm._s(_vm.exam_list.total_count))])]),_c('div',{staticClass:\"btn-exam\",on:{\"click\":_vm.to_detail_exam}},[_vm._v(\"去查看\")])])])]):_vm._e(),_c('HotList'),(_vm.showAi)?_c('Ai',{attrs:{\"allow\":\"microphone\"}}):_vm._e(),_c('span',{staticClass:\"reback\",on:{\"click\":_vm.to_dingtalk}},[_vm._v(\"问题反馈\")]),_c('div',{staticClass:\"wall\"})],1)])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"head-right\"},[_c('img',{staticClass:\"head-right-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/exam/study.png\",\"mode\":\"widthFix\"}})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"lable-model\"},[_c('div',{staticClass:\"lable-model-item\"},[_c('div',{staticClass:\"lable-model-item-cicle\"}),_c('div',{staticClass:\"lable-model-item-title\"},[_vm._v(\"人工智能分析\")])]),_c('div',{staticClass:\"lable-model-item\"},[_c('div',{staticClass:\"lable-model-item-cicle\"}),_c('div',{staticClass:\"lable-model-item-title\"},[_vm._v(\"强大算法支撑\")])])])\n}]\n\nexport { render, staticRenderFns }","import request from './index'\r\nimport MD5 from 'crypto-js/md5'\r\n\r\nconst SECRET_KEY = 'zjuEnglish'\r\nfunction buildSign(data) {\r\n    const keys = Object.keys(data).sort()\r\n    const signStr = keys\r\n        .filter(k => data[k] !== undefined && data[k] !== null)\r\n        .map(k => `${k}=${String(data[k])}`)\r\n        .join('')\r\n\r\n    return MD5(signStr + SECRET_KEY).toString()\r\n}\r\n\r\nfunction getParamNames(data) {\r\n\r\n    var checkParams = Object.keys(data)\r\n        .sort()\r\n        .join(',')\r\n    return checkParams\r\n}\r\n// // 获取统计信息\n// export function getPaperList(sid) {\r\n//     return request({\r\n//         url: '/paper/getUserMiniPaperList',\r\n//         method: 'get',\r\n//         params: { sid }\r\n//     })\r\n// }\r\n\r\n// 获取统计信息\nexport function getDateList(data) {\r\n    const checkParams = getParamNames(data)\r\n    const checkSign = buildSign(data)\r\n    return request({\r\n        url: '/user_sign/getDateList',\r\n        method: 'post',\r\n        data,\r\n        checkParams,\r\n         withAuthorization: true,\r\n        checkSign\r\n    })\r\n}\r\n\r\n// 获取首页快捷菜单\nexport function getMenuList() {\r\n    return request({\r\n        url: '/subject/getCategoryList',\r\n        method: 'get',\r\n         withAuthorization: true,\r\n    })\r\n}\r\n\r\n\r\n// 获取首页正在学\nexport function getNewUserResourceList(sid) {\r\n    return request({\r\n        url: '/resources/getNewUserResourceList',\r\n        method: 'get',\r\n        params: { sid },\r\n        checkParams: getParamNames({ sid }),\r\n         withAuthorization: true,\r\n        checkSign: buildSign({ sid })\r\n    })\r\n}\r\n\r\n// 获取首页推荐学\nexport function HotResouceList(sid) {\r\n    return request({\r\n        url: '/resources/getHotUserResourceList',\r\n        method: 'get',\r\n        params: { sid },\r\n        checkParams: getParamNames({ sid }),\r\n         withAuthorization: true,\r\n        checkSign: buildSign({ sid })\r\n    })\r\n}\r\n\r\n// 获取 mini 试卷\nexport function getMiniPaperByListen(sid) {\r\n    // paper/getMiniPaperByListen\r\n    return request({\r\n        url: '/paper/getMiniPaperByListen',\r\n        method: 'get',\r\n        params: { sid },\r\n        checkParams: getParamNames({ sid }),\r\n         withAuthorization: true,\r\n        checkSign: buildSign({ sid })\r\n    })\r\n}\r\n\r\n// 获取 mini 试卷\nexport function StartMiniPaper(sid) {\r\n    // paper/getMiniPaperByListen\r\n    return request({\r\n        url: '/paper/getStartMiniPaper',\r\n        method: 'get',\r\n        params: { sid },\r\n        checkParams: getParamNames({ sid }),\r\n         withAuthorization: true,\r\n        checkSign: buildSign({ sid })\r\n    })\r\n}\r\n\r\n// 获取 mini 试卷小程序版本\nexport function getMiniPaperByListen2(sid, ques_id) {\r\n    // paper/getMiniPaperByListen\r\n    return request({\r\n        url: '/paper/getMiniPaperByListen2',\r\n        method: 'get',\r\n        params: { sid, ques_id },\r\n        checkParams: getParamNames({ sid, ques_id }),\r\n         withAuthorization: true,\r\n        checkSign: buildSign({ sid, ques_id })\r\n    })\r\n}\r\n//寮€濮嬭€冭瘯\r\nexport function StartMiniPaperTo(sid) {\r\n    // paper/getMiniPaperByListen\r\n    return request({\r\n        url: '/paper/startMiniPaper',\r\n        method: 'get',\r\n        params: { sid },\r\n        checkParams: getParamNames({ sid }),\r\n         withAuthorization: true,\r\n        checkSign: buildSign({ sid })\r\n    })\r\n}\r\n// 获取 mini 试卷\nexport function getMiniPaperByRead(sid, ques_id) {\r\n    // paper/getMiniPaperByListen\r\n    return request({\r\n        url: '/paper/getMiniPaperByRead',\r\n        method: 'get',\r\n        params: { sid, ques_id },\r\n        checkParams: getParamNames({ sid, ques_id }),\r\n         withAuthorization: true,\r\n        checkSign: buildSign({ sid, ques_id })\r\n    })\r\n}\r\n\r\n// 提交听力答案\nexport function ListenMiniSubmit(data) {\r\n    return request({\r\n        url: '/paper/paperListenMiniSubmit',\r\n        method: 'post',\r\n        data,\r\n        checkParams: getParamNames(data),\r\n         withAuthorization: true,\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n// 提交听力答案小程序版本\nexport function ListenMiniSubmit2(data) {\r\n    return request({\r\n        url: '/paper/paperListenMiniSubmit2',\r\n        method: 'post',\r\n        data,\r\n        checkParams: getParamNames(data),\r\n         withAuthorization: true,\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n// 提交阅读答案\nexport function ReadMiniSubmit(data) {\r\n    return request({\r\n        url: '/paper/paperReadMiniSubmit',\r\n        method: 'post',\r\n        data,\r\n        checkParams: getParamNames(data),\r\n         withAuthorization: true,\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n\r\n\r\n// 获取能力自测历史列表\nexport function getMiniPaperHisList(sid) {\r\n    // paper/getMiniPaperByListen\r\n    return request({\r\n        url: '/paper/getMiniPaperHisList',\r\n        method: 'get',\r\n        params: { sid },\r\n        checkParams: getParamNames({ sid }),\r\n         withAuthorization: true,\r\n        checkSign: buildSign({ sid })\r\n    })\r\n}\r\n\r\n\r\n// paper/getMiniPaperRow?pc_id=721\r\nexport function getMiniPaperRow(pc_id) {\r\n    // paper/getMiniPaperByListen\r\n    return request({\r\n        url: '/paper/getMiniPaperRow',\r\n        method: 'get',\r\n        params: { pc_id },\r\n         withAuthorization: true,\r\n        // checkParams: getParamNames({ pc_id }),\r\n        // checkSign: buildSign({ pc_id })\r\n    })\r\n}\r\n","<template>\r\n  <div class=\"exam\">\r\n    <div class=\"head\">\r\n      <div class=\"head-left\">\r\n        <div class=\"head-left-title\">测试</div>\r\n        <div class=\"head-left-content\">上次测试：{{ exam_list.start_time }} </div>\r\n      </div>\r\n\r\n      <div class=\"head-right\">\r\n        <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/exam/study.png\" mode=\"widthFix\"\r\n          class=\"head-right-img\" />\r\n      </div>\r\n    </div>\r\n    <div class=\"content\">\r\n\r\n      <div class=\"content-top\">\r\n        <!-- 测试模块开始 -->\r\n        <div class=\"content-top-title\">\r\n          测试模块\r\n        </div>\r\n        <div class=\"exam-model\">\r\n          <div class=\"model-left\" @click=\"PaperNotice\" data-index=\"1\">\r\n            <div class=\"model-left-title-cn\">能力自测</div>\r\n            <!-- <div class=\"model-left-title-en\">Ability self-test</div> -->\r\n            <div class=\"lable-model\">\r\n              <!-- <div class=\"lable-model-item\">\r\n                <div class=\"lable-model-item-cicle\"></div>\r\n                <div class=\"lable-model-item-title\">准确性高</div>\r\n              </div> -->\r\n              <div class=\"lable-model-item\">\r\n                <div class=\"lable-model-item-cicle\"></div>\r\n                <div class=\"lable-model-item-title\">人工智能分析</div>\r\n              </div>\r\n              <div class=\"lable-model-item\">\r\n                <div class=\"lable-model-item-cicle\"></div>\r\n                <div class=\"lable-model-item-title\">强大算法支撑</div>\r\n              </div>\r\n            </div>\r\n            <div class=\"next-exam\" v-if=\"self_exam == 0\">下次测试：{{ self_exam_time }}</div>\r\n            <div class=\"next-exam\" v-if=\"self_exam == 1\">测试结束：{{ self_exam_time }}</div>\r\n          </div>\r\n          <!-- <div class=\"model-right\">\r\n            <div class=\"right-top\" data-index=\"1\">\r\n              <div class=\"right-top-title-cn\">入学测试</div>\r\n              <div class=\"right-top-title-en\">Entrance test</div>\r\n              <div class=\"model-right-lable-model\">\r\n                <div class=\"lable-model-item\" style=\"padding-left: 50rpx;\">\r\n                  <div class=\"lable-model-item-cicle\" style=\"background-color: #DB8D7A;\"></div>\r\n                  <div class=\"lable-model-item-title\" style=\"color: #DB8D7A;\">因材施教</div>\r\n                </div>\r\n                <div class=\"lable-model-item\" style=\"padding-left: 50rpx;\">\r\n                  <div class=\"lable-model-item-cicle\" style=\"background-color: #DB8D7A;\"></div>\r\n                  <div class=\"lable-model-item-title\" style=\"color: #DB8D7A;\">人工智能分析</div>\r\n                </div>\r\n                <div class=\"lable-model-item\" style=\"padding-left: 50rpx;\">\r\n                  <div class=\"lable-model-item-cicle\" style=\"background-color: #DB8D7A;\"></div>\r\n                  <div class=\"lable-model-item-title\" style=\"color: #DB8D7A;\">强大算法支撑</div>\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div> -->\r\n        </div>\r\n      </div>\r\n      <!-- 测试模块结束 -->\r\n      <!-- 最新测试 -->\r\n      <div class=\"learn-model\" style=\"height: 200rpx;\" v-if=\"show_history\">\r\n        <div class=\"model-start\">\r\n          <div class=\"model-title\">最新测试</div>\r\n          <div class=\"model-more\" @click=\"to_all_exam\">全部</div>\r\n          <div class=\"model-icon\">\r\n            <van-icon name=\"arrow\" color=\"#606060\" />\r\n          </div>\r\n          <div class=\"exam-item\">\r\n            <div class=\"exam-item-info\">\r\n              <div class=\"exam-item-info-title\">{{ exam_list.start_time }}</div>\r\n              <div class=\"exam-item-info-time\">{{ exam_list.right_count }}/{{ exam_list.total_count }}</div>\r\n            </div>\r\n            <div class=\"btn-exam\" @click=\"to_detail_exam\">去查看</div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n      <!-- 最新测试 -->\r\n      <!-- 推荐学 -->\r\n      <HotList />\r\n      <!-- 推荐学 -->\r\n      <Ai allow=\"microphone\" v-if=\"showAi\" />\r\n      <span class=\"reback\" @click=\"to_dingtalk\">问题反馈</span>\r\n      <div class=\"wall\"></div>\r\n    </div>\r\n  </div>\r\n</template>\r\n<script>\r\nimport { getMiniPaperHisList, StartMiniPaper } from '@/api/exam'\r\nimport { HotResouceList, getUserRowByToken } from '@/api/home'\r\nimport HotList from \"@/components/HotList\";\r\nimport Ai from \"@/components/Ai\";\r\nimport { saveRefreshedUser } from '@/utils/auth'\r\nexport default {\r\n  components: { Ai, HotList },\r\n  name: 'Exam',\r\n  data() {\r\n    return {\r\n      exam_list: [],\r\n      self_exam: 0,\r\n      showAi: false,\r\n      show_history: false,\r\n      self_exam_time: '未开始'\r\n    }\r\n  },\r\n  methods: {\r\n    to_all_exam() {\r\n      this.$router.push({ name: 'ExamList' })\r\n    },\r\n    to_detail_exam() {\r\n      this.$router.push({ name: 'ExamReport', query: { pc_id: this.exam_list.id } })\r\n    },\r\n    async getPaperList() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await getMiniPaperHisList(user.sid)\r\n          const data = response.data\r\n\r\n          console.log(data)\r\n          if (data) {\r\n            this.exam_list = data[0]\r\n            this.show_history = true\r\n          } else {\r\n            this.exam_list = []\r\n            this.show_history = false\r\n          }\r\n\r\n        } else {\r\n          console.log('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.log('Login Failed:', error)\r\n      }\r\n    },\r\n    async getHotResouceList() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await HotResouceList(user.sid)\r\n          const data = response.data\r\n          this.HotResouceList = data\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async PaperNotice() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await StartMiniPaper(user.sid)\r\n          const data = response.data\r\n          var timestamp = Date.parse(new Date());\r\n          if (data.is_allow == 0 && data.count == 6) {\r\n            alert('不在时间范围')\r\n            return\r\n          }\r\n          if (data.row == null) {\r\n            this.self_exam = 1,\r\n              this.self_exam_time = '你还没有做过'\r\n          }\r\n          if (data.is_allow == 1) {\r\n            console.log(\"3\" + data)\r\n            if (data.row == null) {\r\n              this.$router.push({ name: 'PaperNotice', query: { paper_id: 0, count_load: 0, has_time: 600000 } })\r\n            } else {\r\n              console.log(\"1\" + data)\r\n              var has_time = data.end_time - timestamp\r\n              this.$router.push({ name: 'PaperNotice', query: { paper_id: data.row.id, count_load: this.count_load, has_time: has_time } })\r\n            }\r\n          }\r\n          //超时\r\n          if (data.end_time < timestamp && data.is_allow == 1) {\r\n            console.log(\"2\" + data)\r\n            this.$router.push({ name: 'PaperNotice', query: { paper_id: data.row.id, count_load: this.count_load, has_time: 600000 } })\r\n          } else {\r\n            this.this.self_exam_time = '你还没有做过'\r\n            this.$message({\r\n              message: '不在时间范围',\r\n              center: true\r\n            })\r\n          }\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n\r\n\r\n    },\r\n    async PaperNotice1() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await StartMiniPaper(user.sid)\r\n          const data = response.data\r\n          console.log(data)\r\n          var timestamp = Date.parse(new Date());\r\n          if (data.is_allow == 0 && data.count == 6) {\r\n            this.timestampToDatetime(data.next_start_time)\r\n            return\r\n          }\r\n          if (data.row == null) {\r\n            this.self_exam = 1,\r\n              this.self_exam_time = '你还没有做过'\r\n            return\r\n          }\r\n          if (data.is_allow == 1) {\r\n            if (data.row == null) {\r\n              this.self_exam_time = '你还没有做过'\r\n              return\r\n            } else {\r\n              // var has_time = data.end_time - timestamp\r\n              // this.$router.push({ name: 'PaperNotice', query: { paper_id: data.row.id, count_load: this.count_load, has_time: has_time } })\r\n            }\r\n          }\r\n          //超时\r\n          if (data.end_time < timestamp && data.is_allow == 1) {\r\n            // alert(timestamp)\r\n            // this.$router.push({ name: 'PaperNotice', query: { paper_id: data.row.id, count_load: this.count_load, has_time: 600000 } })\r\n          } else {\r\n            if (data.is_allow == 1 && data.row == null) {\r\n              this.self_exam_time = '你还没有做过'\r\n              return\r\n            }\r\n            this.timestampToDatetime(data.next_start_time)\r\n          }\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n\r\n\r\n    },\r\n    async timestampToDatetime(timestamp) {\r\n      const date = new Date(timestamp);\r\n      const year = date.getFullYear();\r\n      const month = date.getMonth() + 1;\r\n      const day = date.getDate();\r\n      console.log(`${year}-${month}-${day}`)\r\n      this.self_exam_time = `${year}-${month}-${day}`;\r\n    },\r\n    async GetUserInfo() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await getUserRowByToken({ token: user.token })\r\n          saveRefreshedUser(response.data)\r\n          if (response.data.type_id == 3) {\r\n            this.$router.push({ name: 'noAuth' })\r\n            return\r\n          }\r\n          if (response.data.type_id == 2) {\r\n            this.showAi = true\r\n          }\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async to_dingtalk() {\r\n      window.location.href = 'https://qr.dingtalk.com/action/joingroup?code=v1,k1,IhOSmROFTSw+3pBELANkfbCOdwZd2JiTcd6YyE+gR7k=&_dt_no_comment=1&origin=11';\r\n    },\r\n  },\r\n  mounted() {\r\n    // 在组件挂载后立即获取任务数据\r\n    this.getPaperList()\r\n    this.getHotResouceList()\r\n    this.PaperNotice1()\r\n    this.GetUserInfo()\r\n  }\r\n}\r\n</script>\r\n<style scoped>\r\n.head {\r\n  width: 100%;\r\n  height: 180px;\r\n  background-color: #E2F2FF;\r\n  text-align: left;\r\n}\r\n\r\n.reback {\r\n  position: fixed;\r\n  bottom: 160px;\r\n  right: 5px;\r\n  font-size: 16px;\r\n  width: 20px;\r\n  padding: 10px 5px;\r\n  background: rgba(2, 208, 245, 0.5);\r\n  border-radius: 10px;\r\n}\r\n\r\n.head-left {\r\n  width: 169px;\r\n  padding: 49px 0 0 25px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.head-left-title {\r\n  width: 169px;\r\n  color: #030303;\r\n  font-weight: bold;\r\n  font-size: 22px;\r\n  height: 29px;\r\n  line-height: 29px;\r\n  margin-bottom: 5px;\r\n}\r\n\r\n.head-left-content {\r\n  width: 169px;\r\n  font-size: 12px;\r\n  color: #707070;\r\n  /* height: 16px; */\r\n  line-height: 20px;\r\n}\r\n\r\n.head-right {\r\n  padding-top: 53rpx;\r\n  width: 154px;\r\n  height: 106px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.head-right-img {\r\n  width: 154px;\r\n  height: 106px;\r\n}\r\n\r\n.content {\r\n  width: 100%;\r\n  height: auto;\r\n  border-radius: 32px;\r\n  background-color: #FFF;\r\n  position: relative;\r\n  top: -30px;\r\n}\r\n\r\n.content-top {\r\n  width: 330px;\r\n  height: auto;\r\n  padding-top: 30px;\r\n  margin: 0 auto;\r\n  font-size: 16px;\r\n}\r\n\r\n.content-top-title {\r\n  font-size: 16px;\r\n  padding-bottom: 16px;\r\n}\r\n\r\n.exam-model {\r\n  width: 330px;\r\n  height: 189px;\r\n  text-align: left;\r\n}\r\n\r\n.model-left {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  /* width: 128px; */\r\n  width: 300px;\r\n  height: 145px;\r\n  background-size: cover;\r\n  background-image: url('https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/exam/zsy-bg.png');\r\n  padding: 22px 20px;\r\n}\r\n\r\n.model-left-title-cn {\r\n  font-weight: bold;\r\n  font-size: 16px;\r\n  color: #5847A0;\r\n  margin-bottom: 5px;\r\n}\r\n\r\n.model-left-title-en {\r\n  font-size: 14px;\r\n  color: #7662C9;\r\n}\r\n\r\n.next-exam {\r\n  text-align: right;\r\n  font-size: 10px;\r\n  color: #5847A0;\r\n  font-weight: 400;\r\n  line-height: 20px;\r\n}\r\n\r\n.lable-model {\r\n  margin: 30px 0 0 33px;\r\n}\r\n\r\n.lable-model-item {\r\n  width: 100px;\r\n  height: 20px;\r\n  text-align: left;\r\n}\r\n\r\n.lable-model-item-cicle {\r\n  width: 5px;\r\n  height: 5px;\r\n  border-radius: 5px;\r\n  background-color: #7662C9;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin: 6px 5px 0 0;\r\n}\r\n\r\n.lable-model-item-title {\r\n  color: #7662C9;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  font-size: 12px;\r\n  height: 16px;\r\n  line-height: 16px;\r\n}\r\n\r\n.model-right {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 161px;\r\n  height: 189px;\r\n  background-size: cover;\r\n  margin-left: 9px;\r\n  background-image: url('https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/exam/rxcsbg.png');\r\n}\r\n\r\n.model-right-lable-model {\r\n  margin: 30px 0 0 50px;\r\n}\r\n\r\n.right-top-title-cn {\r\n  color: #884722;\r\n  font-size: 16px;\r\n  font-weight: bold;\r\n  padding: 22px 0 0 16px;\r\n}\r\n\r\n.right-top-title-en {\r\n  color: #884722;\r\n  font-size: 14px;\r\n  padding: 5px 0 0 16px;\r\n}\r\n\r\n\r\n.model-start {\r\n  width: 330px;\r\n  height: 40px;\r\n  margin: 0 auto;\r\n  line-height: 40px;\r\n  margin-top: 30px;\r\n}\r\n\r\n.model-title {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 110px;\r\n  text-align: left;\r\n  font-size: 16px;\r\n}\r\n\r\n.model-more {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 200px;\r\n  text-align: right;\r\n  font-size: 12px;\r\n}\r\n\r\n.model-icon {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.learn-model {\r\n  width: 330px;\r\n  height: auto;\r\n  margin: 0 auto;\r\n}\r\n\r\n.exam-item {\r\n  width: 308px;\r\n  height: 36px;\r\n  background: #F6F6F6;\r\n  border-radius: 20px;\r\n  padding: 14px 0 13px 22px;\r\n}\r\n\r\n.exam-item-info {\r\n  width: 250px;\r\n  height: 36px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.exam-item-info-title {\r\n  font-size: 14px;\r\n  line-height: 16px;\r\n  margin-bottom: 5px;\r\n  height: 16px;\r\n  text-align: left;\r\n}\r\n\r\n.exam-item-info-time {\r\n  font-size: 20px;\r\n  line-height: 15px;\r\n  color: #a1a1a1;\r\n  text-align: left;\r\n}\r\n\r\n.btn-exam {\r\n  width: 58px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  font-size: 12px;\r\n  color: #D13515;\r\n}\r\n\r\n.learn-model {\r\n  width: 330px;\r\n  height: auto;\r\n  margin: 0 auto;\r\n}\r\n\r\n.model-start {\r\n  width: 330px;\r\n  height: auto;\r\n  margin: 0 auto;\r\n  line-height: 40px;\r\n  margin-top: 30px;\r\n}\r\n\r\n.model-title {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 110px;\r\n  text-align: left;\r\n  font-size: 16px;\r\n}\r\n\r\n.model-more {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 200px;\r\n  text-align: right;\r\n  font-size: 12px;\r\n}\r\n\r\n.model-icon {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.learn-item {\r\n  width: 330px;\r\n  height: 85px;\r\n  background: #FFFFFF;\r\n  box-shadow: 0px 2px 10px 1px rgba(80, 143, 206, 0.1);\r\n  border-radius: 20px 20px 20px 20px;\r\n  margin-bottom: 11px;\r\n}\r\n\r\n.learn-img {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 58px;\r\n  height: 58px;\r\n  margin: 14px 10px 13px 13px;\r\n}\r\n\r\n.learn-item-info {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 170px;\r\n  height: 50px;\r\n  line-height: 25px;\r\n  padding: 10px 0;\r\n}\r\n\r\n.learn-item-title {\r\n  width: 150px;\r\n  font-size: 14px;\r\n  font-weight: bold;\r\n  overflow: hidden;\r\n  text-overflow: ellipsis;\r\n  white-space: nowrap;\r\n  height: 20px;\r\n}\r\n\r\n.learn-item-update-time {\r\n  font-size: 12px;\r\n  color: #979797;\r\n  padding-top: 15px;\r\n}\r\n\r\n.btn-learn {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  color: #003F88;\r\n  font-size: 12px;\r\n  height: 85px;\r\n  line-height: 85px;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Exam.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Exam.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Exam.vue?vue&type=template&id=5a8e4126&scoped=true\"\nimport script from \"./Exam.vue?vue&type=script&lang=js\"\nexport * from \"./Exam.vue?vue&type=script&lang=js\"\nimport style0 from \"./Exam.vue?vue&type=style&index=0&id=5a8e4126&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"5a8e4126\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"ai\"},[_c('div',{staticClass:\"top-title\"},[_vm._v(\"AI伴学\")]),_c('div',{staticClass:\"second-lable\"},[_vm._v(\"慧学见证你的每一个进步瞬间\")]),_c('div',{staticClass:\"etalk-click\",on:{\"click\":_vm.to_etalk}},[_c('van-image',{attrs:{\"fit\":\"contain\",\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/e-talk/e-talk.png\"}})],1),_c('div',{staticClass:\"eread-click\",on:{\"click\":_vm.to_read}},[_c('van-image',{attrs:{\"fit\":\"contain\",\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/e-talk/e-read.png\"}})],1),_c('div',{staticClass:\"ewrite-click\",on:{\"click\":_vm.to_write}},[_c('van-image',{attrs:{\"fit\":\"contain\",\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/e-talk/e-write.png\"}})],1),_c('div',{staticClass:\"elisten-click\",on:{\"click\":_vm.to_listen}},[_c('van-image',{attrs:{\"fit\":\"contain\",\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/e-talk/e-listen.png\"}})],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n  <div class=\"ai\">\r\n    <div class=\"top-title\">AI伴学</div>\r\n    <div class=\"second-lable\">慧学见证你的每一个进步瞬间</div>\r\n    <div class=\"etalk-click\" @click=\"to_etalk\">\r\n      <van-image fit=\"contain\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/e-talk/e-talk.png\" />\r\n    </div>\r\n    <div class=\"eread-click\" @click=\"to_read\">\r\n      <van-image fit=\"contain\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/e-talk/e-read.png\" />\r\n    </div>\r\n    <div class=\"ewrite-click\" @click=\"to_write\">\r\n      <van-image fit=\"contain\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/e-talk/e-write.png\" />\r\n    </div>\r\n    <div class=\"elisten-click\" @click=\"to_listen\">\r\n      <van-image fit=\"contain\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/e-talk/e-listen.png\" />\r\n    </div>\r\n  </div>\r\n</template>\r\n<script>\r\n\r\nexport default {\r\n  name: 'Ai',\r\n  data() {\r\n    return {\r\n\r\n    }\r\n  },\r\n  methods: {\r\n    async to_etalk() {\r\n      this.$router.push('/etalk/index')\r\n    },\r\n    async to_read() {\r\n      this.$router.push('/read/index')\r\n    },\r\n    async to_write() {\r\n      this.$router.push('/write/index')\r\n    },\r\n    async to_listen() {\r\n      this.$router.push('/listen/index')\r\n    }\r\n  },\r\n  mounted() {\r\n    // 在组件挂载后立即获取任务数据\r\n\r\n  }\r\n}\r\n</script>\r\n<style scoped>\r\n/* pages/etalk/index.wxss */\r\n.ai {\r\n  width: 100vw;\r\n  height: 100vh;\r\n  background-image: url('https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/ai-study.png?v2');\r\n  background-size: cover;\r\n  /* overflow: hidden; */\r\n  background-repeat: no-repeat;\r\n  /* padding-bottom: 300rpx; */\r\n}\r\n\r\n.top-title {\r\n  position: fixed;\r\n  top: 49px;\r\n  left: 25px;\r\n  font-size: 22px;\r\n  font-weight: bold;\r\n}\r\n\r\n.second-lable {\r\n  position: fixed;\r\n  top: 83px;\r\n  left: 24px;\r\n  color: #707070;\r\n  font-size: 12px;\r\n}\r\n\r\n.etalk-click {\r\n  width: 120px;\r\n  height: 120px;\r\n  /* background-color: lightblue; */\r\n  position: fixed;\r\n  top: 20%;\r\n  left: 60px;\r\n  border-radius: 120px;\r\n}\r\n\r\n.eread-click {\r\n  width: 70px;\r\n  height: 70px;\r\n  /* background-color: rgb(124, 233, 35); */\r\n  position: fixed;\r\n  top: 40%;\r\n  left: 50px;\r\n  border-radius: 70px;\r\n}\r\n\r\n.ewrite-click {\r\n  width: 70px;\r\n  height: 70px;\r\n  /* background-color: rgb(143, 25, 240); */\r\n  position: fixed;\r\n  top: 60%;\r\n  left: 40px;\r\n  border-radius: 70px;\r\n}\r\n\r\n.elisten-click {\r\n  width: 70px;\r\n  height: 70px;\r\n  /* background-color: lightblue; */\r\n  position: fixed;\r\n  top: 80%;\r\n  left: 100px;\r\n  border-radius: 70px;\r\n}\r\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Ai.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Ai.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Ai.vue?vue&type=template&id=2dc9a91c&scoped=true\"\nimport script from \"./Ai.vue?vue&type=script&lang=js\"\nexport * from \"./Ai.vue?vue&type=script&lang=js\"\nimport style0 from \"./Ai.vue?vue&type=style&index=0&id=2dc9a91c&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"2dc9a91c\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"hello\"},[_c('div',{staticClass:\"main\"},[_c('div',{staticClass:\"level7\"},[_c('van-image',{staticClass:\"level-img\",attrs:{\"fit\":\"cover\",\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/exam/level7.png\",\"mode\":\"\"}}),_c('div',{staticClass:\"level-num\"},[_vm._v(\"07\")])],1),_c('div',{staticClass:\"level6\"},[_c('van-image',{staticClass:\"level-img\",attrs:{\"fit\":\"cover\",\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/exam/level6.png\",\"mode\":\"\"}}),_c('div',{staticClass:\"level-num\"},[_vm._v(\"06\")])],1),_c('div',{staticClass:\"level5\"},[_c('van-image',{staticClass:\"level-img\",attrs:{\"fit\":\"cover\",\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/exam/level5.png\",\"mode\":\"\"}}),_c('div',{staticClass:\"level-num\"},[_vm._v(\"05\")])],1),_c('div',{staticClass:\"level4\"},[_c('van-image',{staticClass:\"level-img\",attrs:{\"fit\":\"cover\",\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/exam/level4.png\",\"mode\":\"\"}}),_c('div',{staticClass:\"level-num\"},[_vm._v(\"04\")])],1),_c('div',{staticClass:\"level3\"},[_c('van-image',{staticClass:\"level-img\",attrs:{\"fit\":\"cover\",\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/exam/level3.png\",\"mode\":\"\"}}),_c('div',{staticClass:\"level-num\"},[_vm._v(\"03\")])],1),_c('div',{staticClass:\"level2\"},[_c('van-image',{staticClass:\"level-img\",attrs:{\"fit\":\"cover\",\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/exam/level2.png\",\"mode\":\"\"}}),_c('div',{staticClass:\"level-num\"},[_vm._v(\"02\")])],1),_c('div',{staticClass:\"level1\"},[_c('van-image',{staticClass:\"level-img\",attrs:{\"fit\":\"cover\",\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/exam/level1.png\",\"mode\":\"\"}}),_c('div',{staticClass:\"level-num\"},[_vm._v(\"01\")])],1),_vm._l((_vm.titleList),function(item,index){return _c('div',{key:index,staticClass:\"chenghao\"},[_vm._v(_vm._s(item.lable))])}),_c('div',{staticClass:\"footer-box\"},[_c('div',{staticClass:\"left-box\"},[_c('div',{staticClass:\"left-box-info\"},[(_vm.countTask.total_finish_count < _vm.countTask.total_task_count)?_c('van-image',{staticClass:\"xunzhang\",attrs:{\"fit\":\"cover\",\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/calendar/xunzhang-gray.png\",\"mode\":\"widthFix\"}}):_vm._e(),(_vm.countTask.total_finish_count >= _vm.countTask.total_task_count)?_c('van-image',{staticClass:\"xunzhang\",attrs:{\"fit\":\"cover\",\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/calendar/xunzhang.png\",\"mode\":\"widthFix\"}}):_vm._e(),_c('div',{staticClass:\"task-box\"},[_c('div',{staticClass:\"task-count\"},[_vm._v(_vm._s(_vm.countTask.total_finish_count)+\"/\"+_vm._s(_vm.countTask.total_task_count)+\"个任务 \")]),(_vm.countTask.total_finish_count < _vm.countTask.total_task_count)?_c('div',{staticClass:\"task-status\"},[_vm._v(\" 未完成\")]):_vm._e(),(_vm.countTask.total_finish_count >= _vm.countTask.total_task_count)?_c('div',{staticClass:\"task-status\"},[_vm._v(\" 已完成\")]):_vm._e()])],1)]),_vm._m(0)])],2)])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"right-box\"},[_c('div',{staticClass:\"start-study\",attrs:{\"bind:tap\":\"to_plant\"}},[_vm._v(\"开始学习\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"hello\">\r\n        <!--plantPage/pages/map/index.wxml-->\r\n        <div class=\"main\">\r\n            <div class=\"level7\">\r\n                <van-image fit=\"cover\" class=\"level-img\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/exam/level7.png\" mode=\"\" />\r\n                <div class=\"level-num\">07</div>\r\n            </div>\r\n            <div class=\"level6\">\r\n                <van-image fit=\"cover\" class=\"level-img\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/exam/level6.png\" mode=\"\" />\r\n                <div class=\"level-num\">06</div>\r\n            </div>\r\n            <div class=\"level5\">\r\n                <van-image fit=\"cover\" class=\"level-img\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/exam/level5.png\" mode=\"\" />\r\n                <div class=\"level-num\">05</div>\r\n            </div>\r\n            <div class=\"level4\">\r\n                <van-image fit=\"cover\" class=\"level-img\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/exam/level4.png\" mode=\"\" />\r\n                <div class=\"level-num\">04</div>\r\n            </div>\r\n            <div class=\"level3\">\r\n                <van-image fit=\"cover\" class=\"level-img\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/exam/level3.png\" mode=\"\" />\r\n                <div class=\"level-num\">03</div>\r\n            </div>\r\n            <div class=\"level2\">\r\n                <van-image fit=\"cover\" class=\"level-img\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/exam/level2.png\" mode=\"\" />\r\n                <div class=\"level-num\">02</div>\r\n            </div>\r\n            <div class=\"level1\">\r\n                <van-image fit=\"cover\" class=\"level-img\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/exam/level1.png\" mode=\"\" />\r\n                <div class=\"level-num\">01</div>\r\n            </div>\r\n            <div class=\"chenghao\" v-for=\"(item, index) in titleList\" :key=\"index\">{{ item.lable }}</div>\r\n\r\n            <div class=\"footer-box\">\r\n                <div class=\"left-box\">\r\n                    <div class=\"left-box-info\">\r\n                        <van-image fit=\"cover\" class=\"xunzhang\"\r\n                            src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/calendar/xunzhang-gray.png\"\r\n                            mode=\"widthFix\" v-if=\"countTask.total_finish_count < countTask.total_task_count\" />\r\n                        <van-image fit=\"cover\" class=\"xunzhang\"\r\n                            src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/calendar/xunzhang.png\"\r\n                            mode=\"widthFix\" v-if=\"countTask.total_finish_count >= countTask.total_task_count\" />\r\n                        <div class=\"task-box\">\r\n                            <div class=\"task-count\">{{ countTask.total_finish_count }}/{{ countTask.total_task_count\r\n                                }}个任务\r\n                            </div>\r\n                            <div class=\"task-status\" v-if=\"countTask.total_finish_count < countTask.total_task_count\">\r\n                                未完成</div>\r\n                            <div class=\"task-status\" v-if=\"countTask.total_finish_count >= countTask.total_task_count\">\r\n                                已完成</div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                <div class=\"right-box\">\r\n                    <div class=\"start-study\" bind:tap=\"to_plant\">开始学习</div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\nimport { getUserMapLevel } from '@/api/user'\r\nexport default {\r\n    name: 'HelloWorld',\r\n    data() {\r\n        return {\r\n            data: {\r\n                titleList: [{\r\n                    id: 30,\r\n                    lable: '完美收官'\r\n                },\r\n                {\r\n                    id: 29,\r\n                    lable: '志在必得'\r\n                },\r\n                {\r\n                    id: 28,\r\n                    lable: '收获颇丰'\r\n                },\r\n                {\r\n                    id: 27,\r\n                    lable: '步步登高'\r\n                },\r\n                {\r\n                    id: 26,\r\n                    lable: '再踏征途'\r\n                },\r\n                {\r\n                    id: 25,\r\n                    lable: '大功告成'\r\n                },\r\n                {\r\n                    id: 24,\r\n                    lable: '胜利可期'\r\n                },\r\n                {\r\n                    id: 23,\r\n                    lable: '成效显著'\r\n                },\r\n                {\r\n                    id: 22,\r\n                    lable: '日进有功'\r\n                },\r\n                {\r\n                    id: 21,\r\n                    lable: '迈出脚步'\r\n                },\r\n                {\r\n                    id: 20,\r\n                    lable: '凯旋而归'\r\n                },\r\n                {\r\n                    id: 19,\r\n                    lable: '指日可待'\r\n                },\r\n                {\r\n                    id: 18,\r\n                    lable: '成效突出'\r\n                },\r\n                {\r\n                    id: 17,\r\n                    lable: '如鱼得水'\r\n                },\r\n                {\r\n                    id: 16,\r\n                    lable: '扬帆起航'\r\n                },\r\n                {\r\n                    id: 15,\r\n                    lable: '旗开得胜'\r\n                },\r\n                {\r\n                    id: 14,\r\n                    lable: '胜券在握'\r\n                },\r\n                {\r\n                    id: 13,\r\n                    lable: '成绩斐然'\r\n                },\r\n                {\r\n                    id: 12,\r\n                    lable: '竿头直上'\r\n                },\r\n                {\r\n                    id: 11,\r\n                    lable: '崭露头角'\r\n                },\r\n                {\r\n                    id: 10,\r\n                    lable: '马到成功'\r\n                },\r\n                {\r\n                    id: 9,\r\n                    lable: '胜利在握'\r\n                },\r\n                {\r\n                    id: 8,\r\n                    lable: '卓有成效'\r\n                },\r\n                {\r\n                    id: 7,\r\n                    lable: '稳扎稳打'\r\n                },\r\n                {\r\n                    id: 6,\r\n                    lable: '牛刀小试'\r\n                },\r\n                {\r\n                    id: 5,\r\n                    lable: '旗开得胜'\r\n                },\r\n                {\r\n                    id: 4,\r\n                    lable: '胜利在望'\r\n                },\r\n                {\r\n                    id: 3,\r\n                    lable: '略有小成'\r\n                },\r\n                {\r\n                    id: 2,\r\n                    lable: '渐入佳境'\r\n                },\r\n                {\r\n                    id: 1,\r\n                    lable: '初露锋芒'\r\n                },\r\n                ],\r\n                taskList: [],\r\n                scrollTarget: 0,\r\n                now_level: 1,\r\n                now_progress: 30\r\n            },\r\n        }\r\n    },\r\n    methods: {\r\n        async getUserMapLevel() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getUserMapLevel(user.sid)\r\n                    const data = response.data\r\n                    if (response.code == 100) {\r\n                        var level = data.level\r\n                        var sub_level = data.sub_level\r\n                        var now_level = (level - 1) * 5 + sub_level\r\n\r\n                        this.now_level = data.level\r\n                        this.now_progress = now_level\r\n\r\n                        console.log(this.data)\r\n                    }\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        this.getUserMapLevel()\r\n    }\r\n}\r\n</script>\r\n\r\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\r\n<style scoped>\r\nh3 {\r\n    margin: 40px 0 0;\r\n}\r\n\r\nul {\r\n    list-style-type: none;\r\n    padding: 0;\r\n}\r\n\r\nli {\r\n    display: inline-block;\r\n    margin: 0 10px;\r\n}\r\n\r\na {\r\n    color: #42b983;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MapIndex.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MapIndex.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./MapIndex.vue?vue&type=template&id=20862862&scoped=true\"\nimport script from \"./MapIndex.vue?vue&type=script&lang=js\"\nexport * from \"./MapIndex.vue?vue&type=script&lang=js\"\nimport style0 from \"./MapIndex.vue?vue&type=style&index=0&id=20862862&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"20862862\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"ai\"},[_c('van-nav-bar',{attrs:{\"title\":\"E-Talk\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticClass:\"main\"},[_c('div',{staticClass:\"wall\",staticStyle:{\"height\":\"20px\"}}),_c('div',{staticClass:\"project-box\"},[_c('div',{staticClass:\"box-info\"},[_c('div',{staticClass:\"item-box\",on:{\"click\":function($event){return _vm.to_ai('speak_free', '自由对话')}}},[_c('div',{staticClass:\"item-title\"},[_vm._v(\"自由对话\")])])]),_c('div',{staticClass:\"box-info1\"},[_c('div',{staticClass:\"item-box\",on:{\"click\":_vm.to_project}},[_c('div',{staticClass:\"item-title\"},[_vm._v(\"主题对话\")])])]),_c('div',{staticClass:\"box-info3\"},[_c('div',{staticClass:\"item-box\",on:{\"click\":function($event){return _vm.feedback()}}},[_c('div',{staticClass:\"item-title\"},[_vm._v(\"口语反馈\")])])])]),_c('div',{staticClass:\"jiluhuifang\",on:{\"click\":_vm.to_history}},[_vm._v(\"记录回放\")])])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"ai\">\r\n        <van-nav-bar title=\"E-Talk\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <div class=\"main\">\r\n            <div class=\"wall\" style=\"height: 20px;\"></div>\r\n            <div class=\"project-box\">\r\n                <div class=\"box-info\">\r\n                    <div class=\"item-box\" @click=\"to_ai('speak_free', '自由对话')\">\r\n                        <div class=\"item-title\">自由对话</div>\r\n                        <!-- <div class=\"item-title-en\">Dialogue is free</div> -->\r\n                    </div>\r\n                </div>\r\n                <div class=\"box-info1\">\r\n                    <div class=\"item-box\" @click=\"to_project\">\r\n                        <div class=\"item-title\">主题对话</div>\r\n                        <!-- <div class=\"item-title-en\">Thematic conversations</div> -->\r\n                    </div>\r\n                </div>\r\n                <!-- <div class=\"box-info2\">\r\n                    <div class=\"item-box\" @click=\"$router.push({ name: 'ScriptPractice' })\">\r\n                        <div class=\"item-title\">脚本练习</div>\r\n                    </div>\r\n                </div> -->\r\n                 <div class=\"box-info3\">\r\n                    <div class=\"item-box\" @click=\"feedback()\">\r\n                        <div class=\"item-title\">口语反馈</div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n            <div class=\"jiluhuifang\" @click=\"to_history\">记录回放</div>\r\n        </div>\r\n    </div>\r\n</template>\r\n<script>\r\n\r\nexport default {\r\n    name: 'Ai',\r\n    data() {\r\n        return {\r\n\r\n        }\r\n    },\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        async to_ai(stype, chat_title){\r\n            this.$router.push({ name: 'ChatIndex', query: { project_id: 0, is_history: 0, lang_time: 0, filePath: '', type: 0, stype: stype, from: 'speak_free', chat_title: chat_title, system: '假如你是一名语文老师', content: '' } })\r\n        },\r\n        async feedback(){\r\n            this.$router.push({ name: 'Feedback'})\r\n        },\r\n        to_project(){\r\n            this.$router.push({ name: 'Project'})\r\n        },\r\n        to_history(){\r\n            this.$router.push({ name: 'History'})\r\n        }\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n/* pages/etalk/index.wxss */\r\n.main {\r\n    background: url(https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/etalk-bg.png);\r\n    width: 100vw;\r\n    height: 100vh;\r\n    background-size: cover;\r\n}\r\n\r\n\r\n\r\n.project-box {\r\n    width: 90vw;\r\n    height: auto;\r\n    background-color: rgba(255, 255, 255, 0.2);\r\n    box-shadow: 0 3px 6px 1px #abe1f3;\r\n    padding: 25px 0 25px 0;\r\n    border-radius: 32px;\r\n    margin: 0 auto 20px auto;\r\n    position: relative;\r\n}\r\n\r\n.box-info {\r\n    width: 320px;\r\n    height: 110px;\r\n    margin: 0px auto 5px auto;\r\n    background: url('https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/auto-talk-bg.png?v1');\r\n    background-size: 100% 100%;\r\n    /* 拉伸图片以填满容器 */\r\n    background-repeat: no-repeat;\r\n}\r\n\r\n.box-info1 {\r\n    width: 320px;\r\n    height: 110px;\r\n    margin: 5px auto;\r\n    background: url('https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/project-talk-bg.png?v1');\r\n    background-size: 100% 100%;\r\n    /* 拉伸图片以填满容器 */\r\n    background-repeat: no-repeat;\r\n}\r\n\r\n.box-info2 {\r\n    width: 320px;\r\n    height: 110px;\r\n    margin: 5px auto 0px auto;\r\n    background: url('https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/script_talk.png?v1');\r\n    background-size: 100% 100%;\r\n    /* 拉伸图片以填满容器 */\r\n    background-repeat: no-repeat;\r\n}\r\n\r\n.box-info3 {\r\n    width: 320px;\r\n    height: 110px;\r\n    margin: 5px auto 0px auto;\r\n    background: url('https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/feedback.png?v1');\r\n    background-size: 100% 100%;\r\n    /* 拉伸图片以填满容器 */\r\n    background-repeat: no-repeat;\r\n}\r\n.item-box {\r\n    width: 320px;\r\n    height: 110px;\r\n    z-index: 1000;\r\n    line-height: 25px;\r\n    padding-top: 25px;\r\n    text-align: left;\r\n}\r\n\r\n.item-title {\r\n    color: #000;\r\n    font-size: 16px;\r\n    font-weight: bold;\r\n    padding-left: 32px;\r\n    line-height: 64px;\r\n}\r\n\r\n.item-title-en {\r\n    color: #000000;\r\n    font-size: 12px;\r\n    padding-left: 32px;\r\n}\r\n\r\n.jiluhuifang {\r\n    width: 100vw;\r\n    height: 25px;\r\n    text-align: center;\r\n    color: #3B3B3B;\r\n    font-size: 14px;\r\n    line-height: 25px;\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Etalk.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Etalk.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Etalk.vue?vue&type=template&id=2be09e02&scoped=true\"\nimport script from \"./Etalk.vue?vue&type=script&lang=js\"\nexport * from \"./Etalk.vue?vue&type=script&lang=js\"\nimport style0 from \"./Etalk.vue?vue&type=style&index=0&id=2be09e02&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"2be09e02\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"feedback\",class:{ 'feedback-pc': _vm.isPc }},[(_vm.isPc)?_c('div',{staticClass:\"breadcrumb\"},[_c('router-link',{attrs:{\"to\":{ name: 'PcSpeak' }}},[_vm._v(\"E-talk\")]),_c('span',[_vm._v(\" / 口语反馈\")])],1):_c('van-nav-bar',{attrs:{\"title\":\"口语反馈\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":function($event){return _vm.$router.back()}}}),_c('section',{staticClass:\"chat-panel\"},[_c('audio',{ref:\"audioPlayer\",attrs:{\"src\":_vm.audioUrl},on:{\"ended\":function($event){_vm.playingIndex = -1}}}),_c('div',{ref:\"messages\",staticClass:\"message-list\",attrs:{\"aria-live\":\"polite\"}},[(!_vm.messages.length)?_c('div',{staticClass:\"empty-tip\"},[_vm._v(\"点击说话或输入文字，开始口语反馈\")]):_vm._e(),_vm._l((_vm.messages),function(item,index){return _c('div',{key:index,staticClass:\"chat-item\"},[_c('div',{staticClass:\"question-row\"},[_c('div',{staticClass:\"question-bubble\"},[(item.filepath)?_c('button',{staticClass:\"audio-message\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.playAudio(item.filepath, index)}}},[_c('van-icon',{attrs:{\"name\":\"volume-o\"}}),_vm._v(\" \"+_vm._s(item.lang_time)+\"s \")],1):_vm._e(),_c('div',[_vm._v(_vm._s(item.question))])])]),(item.answer)?_c('div',{staticClass:\"answer-bubble\"},[_c('MarkdownRenderer',{staticClass:\"answer-content\",attrs:{\"markdown-content\":item.answer}}),_c('button',{staticClass:\"read-button\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.readAnswer(item.answer, index)}}},[_c('van-icon',{attrs:{\"name\":_vm.playingIndex === index ? 'pause-circle-o' : 'volume-o'}}),_vm._v(\" \"+_vm._s(_vm.playingIndex === index ? '停止播放' : '播放回复')+\" \")],1)],1):_vm._e(),(item.error)?_c('div',{staticClass:\"error-tip\",attrs:{\"role\":\"alert\"}},[_vm._v(_vm._s(item.error))]):_vm._e()])}),(_vm.sending)?_c('div',{staticClass:\"loading-tip\"},[_vm._v(\"回复中...\")]):_vm._e()],2),_c('ChatComposer',{attrs:{\"disabled\":_vm.sending},on:{\"send\":_vm.sendInput,\"recording\":_vm.stopAudio},model:{value:(_vm.input),callback:function ($$v) {_vm.input=$$v},expression:\"input\"}})],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{domProps:{\"innerHTML\":_vm._s(_vm.compiledMarkdown)}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div v-html=\"compiledMarkdown\"></div>\n</template>\n\n<script>\nfunction escapeHtml(value) {\n  return String(value || '')\n    .replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/\"/g, '&quot;')\n    .replace(/'/g, '&#39;')\n}\n\nfunction renderInline(value) {\n  return escapeHtml(value)\n    .replace(/`([^`]+)`/g, '<code>$1</code>')\n    .replace(/\\*\\*(.+?)\\*\\*/g, '<strong>$1</strong>')\n    .replace(/__([^_]+)__/g, '<strong>$1</strong>')\n    .replace(/\\*([^*]+)\\*/g, '<em>$1</em>')\n}\n\nfunction renderMarkdown(value) {\n  const lines = String(value || '').replace(/\\r\\n?/g, '\\n').split('\\n')\n  const output = []\n  let listType = ''\n\n  const closeList = () => {\n    if (listType) output.push(`</${listType}>`)\n    listType = ''\n  }\n\n  lines.forEach((line) => {\n    const heading = line.match(/^\\s*(#{1,6})\\s+(.+?)\\s*$/)\n    const unordered = line.match(/^\\s*[-*]\\s+(.+)$/)\n    const ordered = line.match(/^\\s*\\d+[.)]\\s+(.+)$/)\n\n    if (!line.trim()) {\n      closeList()\n    } else if (heading) {\n      closeList()\n      const level = heading[1].length\n      output.push(`<h${level}>${renderInline(heading[2])}</h${level}>`)\n    } else if (unordered || ordered) {\n      const nextType = unordered ? 'ul' : 'ol'\n      if (listType !== nextType) {\n        closeList()\n        listType = nextType\n        output.push(`<${listType}>`)\n      }\n      output.push(`<li>${renderInline((unordered || ordered)[1])}</li>`)\n    } else {\n      closeList()\n      output.push(`<p>${renderInline(line)}</p>`)\n    }\n  })\n  closeList()\n  return output.join('')\n}\n\nexport default {\n  props: {\n    markdownContent: {\n      type: String,\n      required: true\n    }\n  },\n  computed: {\n    compiledMarkdown() {\n      return renderMarkdown(this.markdownContent)\n    }\n  }\n}\n</script>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MarkdownRenderer.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MarkdownRenderer.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./MarkdownRenderer.vue?vue&type=template&id=e09fbfb0\"\nimport script from \"./MarkdownRenderer.vue?vue&type=script&lang=js\"\nexport * from \"./MarkdownRenderer.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","<template>\n  <div class=\"feedback\" :class=\"{ 'feedback-pc': isPc }\">\n    <div v-if=\"isPc\" class=\"breadcrumb\">\n      <router-link :to=\"{ name: 'PcSpeak' }\">E-talk</router-link><span> / 口语反馈</span>\n    </div>\n    <van-nav-bar v-else title=\"口语反馈\" left-text=\"返回\" left-arrow @click-left=\"$router.back()\" />\n\n    <section class=\"chat-panel\">\n      <audio ref=\"audioPlayer\" :src=\"audioUrl\" @ended=\"playingIndex = -1\"></audio>\n      <div ref=\"messages\" class=\"message-list\" aria-live=\"polite\">\n        <div v-if=\"!messages.length\" class=\"empty-tip\">点击说话或输入文字，开始口语反馈</div>\n        <div v-for=\"(item, index) in messages\" :key=\"index\" class=\"chat-item\">\n          <div class=\"question-row\">\n            <div class=\"question-bubble\">\n              <button v-if=\"item.filepath\" type=\"button\" class=\"audio-message\" @click=\"playAudio(item.filepath, index)\">\n                <van-icon name=\"volume-o\" /> {{ item.lang_time }}s\n              </button>\n              <div>{{ item.question }}</div>\n            </div>\n          </div>\n          <div v-if=\"item.answer\" class=\"answer-bubble\">\n            <MarkdownRenderer class=\"answer-content\" :markdown-content=\"item.answer\" />\n            <button type=\"button\" class=\"read-button\" @click=\"readAnswer(item.answer, index)\">\n              <van-icon :name=\"playingIndex === index ? 'pause-circle-o' : 'volume-o'\" />\n              {{ playingIndex === index ? '停止播放' : '播放回复' }}\n            </button>\n          </div>\n          <div v-if=\"item.error\" class=\"error-tip\" role=\"alert\">{{ item.error }}</div>\n        </div>\n        <div v-if=\"sending\" class=\"loading-tip\">回复中...</div>\n      </div>\n\n      <ChatComposer v-model=\"input\" :disabled=\"sending\" @send=\"sendInput\" @recording=\"stopAudio\" />\n    </section>\n  </div>\n</template>\n\n<script>\nimport ChatComposer from '@/components/ChatComposer.vue'\nimport MarkdownRenderer from '@/components/MarkdownRenderer.vue'\nimport { completions, getttsUrl } from '@/api/home'\n\nexport default {\n  name: 'SpeakingFeedback',\n  components: { ChatComposer, MarkdownRenderer },\n  data() {\n    return {\n      messages: [],\n      input: '',\n      sending: false,\n      audioUrl: '',\n      playingIndex: -1,\n    }\n  },\n  computed: {\n    isPc() {\n      return Boolean(this.$route.meta.pc)\n    },\n  },\n  mounted() {\n    const user = JSON.parse(localStorage.getItem('user') || '{}')\n    if (user.type_id != 2) this.$router.replace({ name: 'noAuth' })\n  },\n  beforeDestroy() {\n    this.disposed = true\n    this.stopAudio()\n  },\n  methods: {\n    sendInput({ text, filepath, duration }) {\n      return this.sendMessage(text, filepath, duration)\n    },\n\n    scrollToBottom() {\n      this.$nextTick(() => {\n        const el = this.$refs.messages\n        if (el) el.scrollTop = el.scrollHeight\n      })\n    },\n\n    async sendMessage(text, filepath = '', duration = 0) {\n      const user = JSON.parse(localStorage.getItem('user') || '{}')\n      if (!user.sid || this.disposed) return\n      this.sending = true\n      this.stopAudio()\n      // Only the current visit's messages are used as conversation context.\n      // const context = this.messages.filter((item) => item.answer).slice(-3)\n      const message = { question: text, answer: '', filepath, lang_time: duration, error: '' }\n      this.messages.push(message)\n      this.scrollToBottom()\n      try {\n        const params = {\n          userinput: text ,\n          user_id: user.sid,\n        }\n        if (filepath) params.filepath = filepath\n        const response = await completions(params)\n        if (this.disposed) return\n        const data = response && (response.data || response)\n        if (!data || !data.content) throw new Error('Empty response')\n        message.answer = data.content\n        this.readAnswer(message.answer, this.messages.indexOf(message))\n      } catch (error) {\n        if (!this.disposed) message.error = '回复失败，请重新发送。'\n      } finally {\n        this.sending = false\n        if (!this.disposed) this.scrollToBottom()\n      }\n    },\n\n    stopAudio() {\n      this.audioRequest = (this.audioRequest || 0) + 1\n      if (this.$refs.audioPlayer) this.$refs.audioPlayer.pause()\n      this.audioUrl = ''\n      this.playingIndex = -1\n    },\n    playAudio(url, index) {\n      this.stopAudio()\n      this.audioUrl = url\n      this.playingIndex = index\n      this.$nextTick(() => {\n        const player = this.$refs.audioPlayer\n        if (player)\n          player.play().catch(() => {\n            this.playingIndex = -1\n          })\n      })\n    },\n    async readAnswer(text, index) {\n      if (this.playingIndex === index) {\n        this.stopAudio()\n        return\n      }\n      this.stopAudio()\n      const requestId = this.audioRequest\n      try {\n        const response = await getttsUrl({ inputtext: text })\n        if (this.disposed || requestId !== this.audioRequest) return\n        const result = JSON.parse(response.data.result)\n        const url = result.results.Transformation.Response.DubbingQueryResult.VoiceURL\n        if (url) this.playAudio(url, index)\n      } catch (error) {\n        // Text replies remain available when speech synthesis is unavailable.\n      }\n    },\n  },\n}\n</script>\n\n<style scoped>\n.feedback {\n  height: 100vh;\n  height: 100dvh;\n  display: flex;\n  flex-direction: column;\n  color: #17253a;\n  background: #f8fbff;\n}\n.chat-panel {\n  flex: 1;\n  min-height: 0;\n  display: flex;\n  flex-direction: column;\n}\n.message-list {\n  flex: 1;\n  min-height: 0;\n  overflow-y: auto;\n  padding: 20px 16px;\n}\n.empty-tip,\n.loading-tip {\n  text-align: center;\n  color: #7c8ca3;\n  font-size: 14px;\n  padding: 20px 0;\n}\n.chat-item {\n  margin-bottom: 20px;\n}\n.question-row {\n  display: flex;\n  justify-content: flex-end;\n  margin-bottom: 12px;\n}\n.question-bubble {\n  max-width: 80%;\n  padding: 12px 16px;\n  border-radius: 12px;\n  color: #fff;\n  background: linear-gradient(120deg, #4499ee, #72c7f1);\n  white-space: pre-wrap;\n  overflow-wrap: anywhere;\n}\n.answer-bubble {\n  max-width: 88%;\n  padding: 14px 16px;\n  border-radius: 12px;\n  background: #e1eeff;\n}\n.answer-content {\n  overflow-wrap: anywhere;\n  font-size: 15px;\n  line-height: 1.6;\n}\n.answer-content ::v-deep p {\n  margin: 0 0 10px;\n}\n.answer-content ::v-deep p:last-child {\n  margin-bottom: 0;\n}\n.answer-content ::v-deep ul,\n.answer-content ::v-deep ol {\n  margin: 8px 0 10px;\n  padding-left: 22px;\n}\n.answer-content ::v-deep li {\n  margin: 4px 0;\n}\n.answer-content ::v-deep strong {\n  font-weight: 700;\n}\nbutton,\ninput {\n  font: inherit;\n}\nbutton {\n  cursor: pointer;\n  border: none;\n}\nbutton:disabled {\n  cursor: default;\n  opacity: 0.5;\n}\n.audio-message,\n.read-button {\n  display: inline-flex;\n  gap: 16px;\n  align-items: center;\n  background: transparent;\n  color: inherit;\n  padding: 4px 0;\n}\n.read-button {\n  font-size: 13px;\n  color: #3975b5;\n  margin-top: 10px;\n}\n.error-tip {\n  color: #be4141;\n  font-size: 13px;\n}\n.feedback-pc {\n  height: 583px;\n  background: transparent;\n}\n.breadcrumb {\n  height: 28px;\n  font-size: 12px;\n  color: #6c7d94;\n}\n.breadcrumb a {\n  color: inherit;\n  text-decoration: none;\n}\n.feedback-pc .chat-panel {\n  border-radius: 8px;\n  overflow: hidden;\n  background: rgba(225, 238, 255, 0.74);\n}\n.feedback-pc .message-list {\n  padding: 28px 34px;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Feedback.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Feedback.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Feedback.vue?vue&type=template&id=baf90558&scoped=true\"\nimport script from \"./Feedback.vue?vue&type=script&lang=js\"\nexport * from \"./Feedback.vue?vue&type=script&lang=js\"\nimport style0 from \"./Feedback.vue?vue&type=style&index=0&id=baf90558&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"baf90558\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"ai\"},[_c('van-nav-bar',{attrs:{\"title\":\"主题列表\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_vm._l((_vm.EtalkCateList),function(item,index){return _c('block',{key:index},[(item.is_file == 0)?_c('div',{staticClass:\"cate-item\",on:{\"click\":function($event){return _vm.to_ai( 'speak_subject', item)}}},[(item.level != '')?_c('div',{staticClass:\"cate-level\"},[_vm._v(_vm._s(item.level))]):_vm._e(),_c('div',{staticClass:\"first-item\"},[(item.icon_img != '' && item.icon_img != null)?_c('img',{staticClass:\"first-item-img\",attrs:{\"src\":item.icon_img,\"mode\":\"widthFix\"}}):_vm._e(),_c('div',{staticClass:\"cate-title\"},[_vm._v(_vm._s(item.name))])]),_c('div',{staticClass:\"second-item\"},[_vm._v(\" \"+_vm._s(item.desc)+\" \")])]):_vm._e(),(item.is_file == 1)?_c('div',{staticClass:\"cate-item\",on:{\"click\":function($event){return _vm.show_confim(item)}}},[_c('div',{staticClass:\"first-item\"},[(item.icon_img != '' && item.icon_img != null)?_c('img',{staticClass:\"first-item-img\",attrs:{\"src\":item.icon_img,\"mode\":\"widthFix\"}}):_vm._e(),_c('div',{staticClass:\"cate-title\",staticStyle:{\"width\":\"120px\"}},[_vm._v(_vm._s(item.name))])]),_c('div',{staticClass:\"second-item\"},[_vm._v(\" \"+_vm._s(item.desc)+\" \")])]):_vm._e()])}),_c('van-popup',{staticStyle:{\"border-radius\":\"30px 30px 0 0\",\"background-color\":\"aliceblue\",\"max-height\":\"600px\"},attrs:{\"position\":\"center\"},model:{value:(_vm.confim),callback:function ($$v) {_vm.confim=$$v},expression:\"confim\"}},[_c('div',{staticClass:\"confim-content\",domProps:{\"innerHTML\":_vm._s(_vm.check_item.tip_content1)}}),_c('div',{staticClass:\"btn-box\"},[_c('div',{staticClass:\"btn-ok\",on:{\"click\":_vm.next_confim}},[_vm._v(\"OK\")]),_c('div',{staticClass:\"btn-cancel\",on:{\"click\":_vm.cancel_confim}},[_vm._v(\"Cancel\")])])]),_c('van-popup',{staticStyle:{\"border-radius\":\"30px 30px 0 0\",\"background-color\":\"aliceblue\",\"max-height\":\"600px\"},attrs:{\"position\":\"center\"},model:{value:(_vm.confim_ok),callback:function ($$v) {_vm.confim_ok=$$v},expression:\"confim_ok\"}},[_c('div',{staticClass:\"confim-content\",domProps:{\"innerHTML\":_vm._s(_vm.check_item.tip_content2)}}),_c('div',{staticClass:\"btn-box\"},[_c('div',{staticClass:\"btn-ok\",on:{\"click\":function($event){return _vm.next_confim_ok('speak_subject', _vm.EtalkCateList[0])}}},[_vm._v(\"OK\")]),_c('div',{staticClass:\"btn-cancel\",on:{\"click\":_vm.next_confim_cancel}},[_vm._v(\"Cancel\")])])])],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"ai\">\r\n        <van-nav-bar title=\"主题列表\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n\r\n        <block v-for=\"(item, index) in EtalkCateList\" :key=\"index\">\r\n            <div v-if=\"item.is_file == 0\" class=\"cate-item\" @click=\"to_ai( 'speak_subject', item)\">\r\n                <div class=\"cate-level\" v-if=\"item.level != ''\">{{ item.level }}</div>\r\n                <div class=\"first-item\">\r\n                    <img class=\"first-item-img\" v-if=\"item.icon_img != '' && item.icon_img != null\" :src=\"item.icon_img\"\r\n                        mode=\"widthFix\" />\r\n                    <div class=\"cate-title\">{{ item.name }}</div>\r\n                </div>\r\n                <div class=\"second-item\">\r\n                    {{ item.desc }}\r\n                </div>\r\n            </div>\r\n            <div v-if=\"item.is_file == 1\" class=\"cate-item\" @click=\"show_confim(item)\">\r\n                <!-- <div class=\"cate-level\" v-if=\"item.level != ''\">{{ item.level }}</div> -->\r\n                <div class=\"first-item\">\r\n                    <img class=\"first-item-img\" v-if=\"item.icon_img != '' && item.icon_img != null\" :src=\"item.icon_img\"\r\n                        mode=\"widthFix\" />\r\n                    <div style=\"width: 120px;\" class=\"cate-title\">{{ item.name }}</div>\r\n                </div>\r\n                <div class=\"second-item\">\r\n                    {{ item.desc }}\r\n                </div>\r\n            </div>\r\n        </block>\r\n\r\n\r\n\r\n\r\n\r\n        <van-popup v-model=\"confim\" position=\"center\"\r\n            style=\"border-radius: 30px 30px 0 0;background-color: aliceblue;max-height: 600px;\">\r\n            <div class=\"confim-content\" v-html=\"check_item.tip_content1\">\r\n            </div>\r\n            <div class=\"btn-box\">\r\n                <div class=\"btn-ok\" @click=\"next_confim\">OK</div>\r\n                <div class=\"btn-cancel\" @click=\"cancel_confim\">Cancel</div>\r\n            </div>\r\n        </van-popup>\r\n        <van-popup v-model=\"confim_ok\" position=\"center\"\r\n            style=\"border-radius: 30px 30px 0 0;background-color: aliceblue;max-height: 600px;\">\r\n            <div class=\"confim-content\" v-html=\"check_item.tip_content2\">\r\n            </div>\r\n            <div class=\"btn-box\">\r\n                <div class=\"btn-ok\" @click=\"next_confim_ok('speak_subject', EtalkCateList[0])\">OK</div>\r\n                <div class=\"btn-cancel\" @click=\"next_confim_cancel\">Cancel</div>\r\n            </div>\r\n        </van-popup>\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getEtalkCateList } from '@/api/user'\nimport { getUserRowByToken } from '@/api/home'\nimport { saveRefreshedUser } from '@/utils/auth'\nexport default {\r\n    name: 'Ai',\r\n    data() {\r\n        return {\r\n            EtalkCateList: [],\r\n            confim: false,\r\n            confim_ok: false,\r\n            check_item: []\r\n        }\r\n    },\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        async next_confim() {\r\n            this.confim_ok = true\r\n        },\r\n        async show_confim(check_item) {\r\n            this.check_item = check_item\r\n            this.confim = true\r\n        },\r\n        async cancel_confim() {\r\n            this.confim = false\r\n        },\r\n        async next_confim_ok() {\r\n\r\n            this.$router.push({\r\n                name: 'ChatFile',\r\n                query: {\r\n                    project_id: this.check_item.id,\r\n                    res_id: '',\r\n                    is_history: 0,\r\n                    lang_time: 0,\r\n                    filePath: '',\r\n                    type: 0,\r\n                    stype: 'speak_subject_more',\r\n                    from: 'speak_subject_more',\r\n                    chat_title: '主题对话',\r\n                    content: this.check_item.content,\r\n                    answer: this.check_item.tip_content3,\r\n                }\r\n            })\r\n        },\r\n        async next_confim_cancel() {\r\n            this.confim_ok = false\r\n            this.confim = false\r\n        },\r\n        async to_ai(stype, item) {\r\n            // this.$router.push({ name: 'ChatIndex', query: { project_id: item.id, res_id: item.id, is_history: 0, lang_time: 0, filePath: '', type: 0, stype: stype, from: 'speak_subject', chat_title: '主题对话', system: '假如你是一名语文老师', content: item.name } })\r\n            this.$router.push({\r\n                name: 'ChatIndex',\r\n                query: {\r\n                    project_id: item.id,\r\n                    res_id: '',\r\n                    is_history: 0,\r\n                    lang_time: 0,\r\n                    filePath: '',\r\n                    type: 0,\r\n                    stype: stype,\r\n                    from: 'speak_subject',\r\n                    chat_title: '主题对话',\r\n                    system: '假如你是一名语文老师',\r\n                    content: item.content\r\n                }\r\n            })\r\n        },\r\n        async getEtalkCateList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getEtalkCateList({ sid: user.sid })\r\n                    const data = response.data\r\n                    this.EtalkCateList = data\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async GetUserInfo() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getUserRowByToken({ token: user.token })\n                    saveRefreshedUser(response.data)\n                    if (response.data.type_id != 2) {\r\n                        this.$router.push({ name: 'noAuth' })\r\n                        return\r\n                    }\r\n\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        this.getEtalkCateList()\r\n        this.GetUserInfo()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n/* pages/etalk/index.wxss */\r\n/* otherPage/pages/etalk/project.wxss */\r\n.confim-title {\r\n    width: 85vw;\r\n    height: 80px;\r\n    text-align: left;\r\n    padding-left: 5vw;\r\n    line-height: 80px;\r\n    font-size: 21px;\r\n    font-weight: bold;\r\n}\r\n\r\n.confim-content {\r\n    width: 85vw;\r\n    height: auto;\r\n    text-align: left;\r\n    padding: 10px 2vw 30px 3vw;\r\n    line-height: 20px;\r\n    font-size: 14px;\r\n    max-height: 420px;\r\n    overflow-y: auto;\r\n}\r\n\r\n.btn-box {\r\n    width: 80vw;\r\n    height: 80px;\r\n    margin: 0 auto;\r\n\r\n}\r\n\r\n.btn-ok {\r\n    width: 20vw;\r\n    height: 40px;\r\n    background-color: #E2F2FF;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: center;\r\n    line-height: 40px;\r\n}\r\n\r\n.btn-cancel {\r\n    width: 20vw;\r\n    height: 40px;\r\n    background-color: #e5eaee;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: center;\r\n    line-height: 40px;\r\n    margin-left: 40vw;\r\n}\r\n\r\n.ai {\r\n    width: 90vw;\r\n    height: 240vh;\r\n    margin: 20px auto 0 auto;\r\n    background: linear-gradient(to bottom, #FFFFFF, #E2F2FF);\r\n    padding: 0 5vw;\r\n    align-items: left;\r\n}\r\n\r\n.cate-item {\r\n    width: 39vw;\r\n    height: 120px;\r\n    background: #FFFFFF;\r\n    box-shadow: 0px 2px 10px 1px rgba(80, 143, 206, 0.1);\r\n    border-radius: 10px;\r\n    float: left;\r\n    margin: 10px 0;\r\n    padding: 15px 0 5px 12px;\r\n    margin-right: 2vw;\r\n    text-align: left;\r\n}\r\n\r\n.cate-item:nth-child(2n) {\r\n    margin-left: 1vw;\r\n}\r\n\r\n.first-item {\r\n    width: 37vw;\r\n    /* height: 24px; */\r\n    height: auto;\r\n    border-bottom: 1rpx solid #E4E4E4;\r\n}\r\n\r\n.first-item-img {\r\n    width: 14px;\r\n    /* height: 15px; */\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin-right: 5px;\r\n\r\n}\r\n\r\n.cate-title {\r\n    width: 80px;\r\n    /* height: 15px; */\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: left;\r\n    font-size: 10px;\r\n}\r\n\r\n.cate-level {\r\n    width: 35px;\r\n    height: 16px;\r\n    float: right;\r\n    font-size: 10px;\r\n    background: linear-gradient(to right, #FF7220, #FFDE92);\r\n    text-align: center;\r\n    line-height: 16px;\r\n    color: #FFF;\r\n    border-radius: 4px 0px 0px 4px;\r\n}\r\n\r\n.second-item {\r\n    width: 37vw;\r\n    height: auto;\r\n    padding-top: 5px;\r\n    line-height: 14px;\r\n    color: #878787;\r\n    font-size: 11px;\r\n}\r\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Project.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Project.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Project.vue?vue&type=template&id=522f4b04&scoped=true\"\nimport script from \"./Project.vue?vue&type=script&lang=js\"\nexport * from \"./Project.vue?vue&type=script&lang=js\"\nimport style0 from \"./Project.vue?vue&type=style&index=0&id=522f4b04&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"522f4b04\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"script-practice\",class:{ 'is-pc': _vm.isPc }},[(_vm.isPc)?_c('div',{staticClass:\"breadcrumb\"},[_vm._v(\"当前位置：首页>E-Talk>脚本练习\")]):_c('van-nav-bar',{attrs:{\"title\":\"脚本练习\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":function($event){return _vm.$router.back()}}}),_c('section',{staticClass:\"course-panel\",attrs:{\"aria-label\":\"脚本练习课程\"}},[_c('div',{staticClass:\"course-toolbar\"},[_c('label',{staticClass:\"filter-control\"},[_c('span',{staticClass:\"sr-only\"},[_vm._v(\"课程状态\")]),_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.courseStatus),expression:\"courseStatus\"}],attrs:{\"aria-label\":\"课程状态\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.courseStatus=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},[_c('option',{attrs:{\"value\":\"all\"}},[_vm._v(\"全部课程\")]),_c('option',{attrs:{\"value\":\"not-started\"}},[_vm._v(\"未开始\")]),_c('option',{attrs:{\"value\":\"in-progress\"}},[_vm._v(\"学习中\")]),_c('option',{attrs:{\"value\":\"completed\"}},[_vm._v(\"已完成\")])])]),_c('label',{staticClass:\"filter-control\"},[_c('span',{staticClass:\"sr-only\"},[_vm._v(\"难度\")]),_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.level),expression:\"level\"}],attrs:{\"aria-label\":\"难度\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.level=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},[_c('option',{attrs:{\"value\":\"\"}},[_vm._v(\"全部难度\")]),_vm._l((_vm.levels),function(value){return _c('option',{key:value,domProps:{\"value\":value}},[_vm._v(_vm._s(value))])})],2)]),_c('button',{staticClass:\"generate-button\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.showGenerateNotice}},[_vm._v(\"智能生成\")])]),_c('div',{staticClass:\"course-scroll\",attrs:{\"aria-busy\":_vm.loading}},[(_vm.loading)?_c('div',{staticClass:\"state-message\"},[_c('van-loading',{attrs:{\"size\":\"22px\"}},[_vm._v(\"加载中...\")])],1):(_vm.error)?_c('div',{staticClass:\"state-message\",attrs:{\"role\":\"alert\"}},[_c('p',[_vm._v(_vm._s(_vm.error))]),_c('button',{staticClass:\"retry-button\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.loadList}},[_vm._v(\"重新加载\")])]):(_vm.filteredCourses.length === 0)?_c('div',{staticClass:\"state-message\"},[_vm._v(\" \"+_vm._s(_vm.courses.length ? '没有符合筛选条件的课程' : '暂无课程')+\" \")]):_c('div',{staticClass:\"course-grid\"},_vm._l((_vm.filteredCourses),function(course){return _c('article',{key:course.key,staticClass:\"course-card\",style:({ '--course-color': course.color }),attrs:{\"tabindex\":\"0\",\"role\":\"button\"},on:{\"click\":function($event){return _vm.openCourse(course)},\"keydown\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.openCourse(course)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"space\",32,$event.key,[\" \",\"Spacebar\"]))return null;$event.preventDefault();return _vm.openCourse(course)}]}},[_c('div',{staticClass:\"course-head\"},[(course.icon)?_c('img',{staticClass:\"course-icon\",attrs:{\"src\":course.icon,\"alt\":\"\"},on:{\"error\":_vm.hideBrokenIcon}}):_c('span',{staticClass:\"course-icon icon-fallback\",attrs:{\"aria-hidden\":\"true\"}},[_c('van-icon',{attrs:{\"name\":\"description\"}})],1),_c('h2',[_vm._v(_vm._s(course.name))]),(course.level)?_c('span',{staticClass:\"level-tag\"},[_vm._v(_vm._s(course.level))]):_vm._e()]),_c('p',{staticClass:\"course-description\"},[_vm._v(_vm._s(course.description || '暂无课程介绍'))]),_c('div',{staticClass:\"course-footer\"},[_c('div',{staticClass:\"progress-track\",attrs:{\"role\":\"progressbar\",\"aria-label\":course.name + '学习进度',\"aria-valuenow\":course.progress,\"aria-valuemin\":\"0\",\"aria-valuemax\":\"100\"}},[_c('span',{style:({ width: course.progress + '%' })})]),_c('span',{staticClass:\"course-status\"},[_vm._v(_vm._s(_vm.statusLabel(course.status)))])])])}),0)])])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"script-practice\" :class=\"{ 'is-pc': isPc }\">\n    <div v-if=\"isPc\" class=\"breadcrumb\">当前位置：首页&gt;E-Talk&gt;脚本练习</div>\n    <van-nav-bar v-else title=\"脚本练习\" left-text=\"返回\" left-arrow @click-left=\"$router.back()\" />\n\n    <section class=\"course-panel\" aria-label=\"脚本练习课程\">\n      <div class=\"course-toolbar\">\n        <label class=\"filter-control\">\n          <span class=\"sr-only\">课程状态</span>\n          <select v-model=\"courseStatus\" aria-label=\"课程状态\">\n            <option value=\"all\">全部课程</option>\n            <option value=\"not-started\">未开始</option>\n            <option value=\"in-progress\">学习中</option>\n            <option value=\"completed\">已完成</option>\n          </select>\n        </label>\n        <label class=\"filter-control\">\n          <span class=\"sr-only\">难度</span>\n          <select v-model=\"level\" aria-label=\"难度\">\n            <option value=\"\">全部难度</option>\n            <option v-for=\"value in levels\" :key=\"value\" :value=\"value\">{{ value }}</option>\n          </select>\n        </label>\n        <button type=\"button\" class=\"generate-button\" @click=\"showGenerateNotice\">智能生成</button>\n      </div>\n\n      <div class=\"course-scroll\" :aria-busy=\"loading\">\n        <div v-if=\"loading\" class=\"state-message\"><van-loading size=\"22px\">加载中...</van-loading></div>\n        <div v-else-if=\"error\" class=\"state-message\" role=\"alert\">\n          <p>{{ error }}</p>\n          <button type=\"button\" class=\"retry-button\" @click=\"loadList\">重新加载</button>\n        </div>\n        <div v-else-if=\"filteredCourses.length === 0\" class=\"state-message\">\n          {{ courses.length ? '没有符合筛选条件的课程' : '暂无课程' }}\n        </div>\n        <div v-else class=\"course-grid\">\n          <article v-for=\"course in filteredCourses\" :key=\"course.key\" class=\"course-card\" :style=\"{ '--course-color': course.color }\" tabindex=\"0\" role=\"button\" @click=\"openCourse(course)\" @keydown.enter=\"openCourse(course)\" @keydown.space.prevent=\"openCourse(course)\">\n            <div class=\"course-head\">\n              <img v-if=\"course.icon\" :src=\"course.icon\" class=\"course-icon\" alt=\"\" @error=\"hideBrokenIcon\" />\n              <span v-else class=\"course-icon icon-fallback\" aria-hidden=\"true\"><van-icon name=\"description\" /></span>\n              <h2>{{ course.name }}</h2>\n              <span v-if=\"course.level\" class=\"level-tag\">{{ course.level }}</span>\n            </div>\n            <p class=\"course-description\">{{ course.description || '暂无课程介绍' }}</p>\n            <div class=\"course-footer\">\n              <div class=\"progress-track\" role=\"progressbar\" :aria-label=\"course.name + '学习进度'\" :aria-valuenow=\"course.progress\" aria-valuemin=\"0\" aria-valuemax=\"100\">\n                <span :style=\"{ width: course.progress + '%' }\"></span>\n              </div>\n              <span class=\"course-status\">{{ statusLabel(course.status) }}</span>\n            </div>\n          </article>\n        </div>\n      </div>\n    </section>\n  </div>\n</template>\n\n<script>\nimport { getEtalkCateList } from '@/api/user'\nimport { getUserRowByToken } from '@/api/home'\nimport { saveRefreshedUser } from '@/utils/auth'\n\nconst colors = ['#34b9ef', '#ffad27', '#5774ed', '#ff7440', '#35c99d', '#5470ed']\nconst levelColors = { CSE3: '#c49b3e', CSE4: '#ff9138', CSE5: '#9551ff', CSE6: '#c44af5', CSE7: '#ed36a2', CSE8: '#ff6b16', CSE9: '#ff6553' }\n\nexport default {\n  name: 'ScriptPractice',\n  data() {\n    return { courses: [], courseStatus: 'all', level: '', loading: false, error: '' }\n  },\n  computed: {\n    isPc() { return Boolean(this.$route.meta && this.$route.meta.pc) },\n    levels() {\n      return [...new Set(this.courses.map(course => course.level).filter(Boolean))]\n        .sort((a, b) => a.localeCompare(b, 'zh-CN', { numeric: true }))\n    },\n    filteredCourses() {\n      return this.courses.filter(course => (!this.level || course.level === this.level) &&\n        (this.courseStatus === 'all' || course.status === this.courseStatus))\n    }\n  },\n  methods: {\n    normalizeCourse(item, index) {\n      const level = String(item.level || '').trim()\n      const rawProgress = Number(item.progress)\n      const total = Number(item.resource_num)\n      const studied = Number(item.study_num)\n      // 主题接口没有提供进度时从 0 开始，不根据主题编号虚构学习记录。\n      const progress = Math.round(Math.max(0, Math.min(100,\n        item.progress != null && item.progress !== '' && Number.isFinite(rawProgress)\n          ? rawProgress : total > 0 && studied > 0 ? studied / total * 100 : 0)))\n      return {\n        key: item.id != null ? item.id : index,\n        name: item.name || '未命名课程',\n        description: String(item.desc || '').replace(/<[^>]*>/g, '').trim(),\n        icon: item.icon_img || '', level, progress,\n        status: progress >= 100 ? 'completed' : progress > 0 ? 'in-progress' : 'not-started',\n        color: levelColors[level.toUpperCase()] || colors[index % colors.length]\n      }\n    },\n    statusLabel(status) {\n      return { 'not-started': '未开始', 'in-progress': '学习中', completed: '已完成' }[status]\n    },\n    hideBrokenIcon(event) { event.target.style.visibility = 'hidden' },\n    openCourse(course) {\n      this.$router.push({\n        name: this.isPc ? 'PcScriptPracticeDetail' : 'ScriptPracticeDetail',\n        query: {\n          id: course.key,\n          name: course.name,\n          level: course.level,\n          icon: course.icon,\n          color: course.color\n        }\n      })\n    },\n    showGenerateNotice() { this.$message({ message: '智能生成即将开放', center: true }) },\n    async loadList() {\n      if (this.loading) return\n      this.loading = true\n      this.error = ''\n      try {\n        const user = JSON.parse(localStorage.getItem('user') || '{}')\n        if (!user.sid) throw new Error('请先登录后查看课程')\n        // 保持与主题列表相同的访问条件。\n        if (user.token) {\n          const userResponse = await getUserRowByToken({ token: user.token })\n          if (!userResponse || !userResponse.data) throw new Error('课程加载失败，请稍后重试')\n          saveRefreshedUser(userResponse.data)\n          if (userResponse.data.type_id != 2) {\n            this.$router.push({ name: 'noAuth' })\n            return\n          }\n        }\n        const response = await getEtalkCateList({ sid: user.sid })\n        if (!response || response.code != 100 || !Array.isArray(response.data)) {\n          throw new Error('课程加载失败，请稍后重试')\n        }\n        this.courses = response.data.map(this.normalizeCourse)\n      } catch (error) {\n        this.error = error.message || '课程加载失败，请稍后重试'\n      } finally {\n        this.loading = false\n      }\n    }\n  },\n  mounted() { this.loadList() }\n}\n</script>\n\n<style scoped>\n.script-practice { min-height: 100vh; background: linear-gradient(180deg, #fafcff, #eaf0ff); color: #353535; font-size: 14px; }\n.course-toolbar { position: sticky; top: 0; z-index: 1; display: flex; align-items: center; gap: 12px; padding: 8px 16px; background: #fff; }\n.filter-control select { max-width: 112px; min-height: 36px; padding: 0 12px; border: 1px solid #e0e0e3; border-radius: 11px; background: #fafafa; color: #183356; font: inherit; cursor: pointer; }\n.generate-button { margin-left: auto; min-height: 36px; padding: 0 13px; border: 0; border-radius: 11px; background: #405de8; color: #fff; font: inherit; font-weight: 600; cursor: pointer; white-space: nowrap; }\n.course-scroll { padding: 12px 16px 24px; }\n.course-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }\n.course-card { display: flex; flex-direction: column; min-width: 0; padding: 12px 8px; border-radius: 12px; background: rgba(255, 255, 255, .86); box-shadow: 0 2px 4px rgba(47, 77, 117, .06); cursor: pointer; }\n.course-card:focus-visible { outline: 2px solid #405de8; outline-offset: 3px; }\n.course-head { position: relative; display: flex; align-items: center; gap: 7px; min-height: 20px; padding-bottom: 10px; border-bottom: 1px solid #f0f0f0; }\n.course-icon { flex: 0 0 16px; width: 16px; height: 16px; object-fit: contain; }\n.icon-fallback { display: flex; align-items: center; justify-content: center; border-radius: 4px; background: var(--course-color); color: #fff; font-size: 12px; }\n.course-head h2 { min-width: 0; margin: 0; padding-right: 32px; font-size: 13px; line-height: 20px; font-weight: 500; overflow-wrap: anywhere; }\n.level-tag { position: absolute; right: -8px; top: 1px; padding: 1px 3px; border-radius: 3px 0 0 3px; background: var(--course-color); color: #fff; font-size: 10px; line-height: 14px; }\n.course-description { flex: 1; min-height: 51px; margin: 8px 0 12px; color: #858585; font-size: 12px; line-height: 17px; overflow-wrap: anywhere; }\n.course-footer { display: flex; align-items: center; gap: 7px; }\n.progress-track { flex: 1; height: 8px; overflow: hidden; border-radius: 8px; background: #e7e7e7; }\n.progress-track span { display: block; height: 100%; border-radius: inherit; background: var(--course-color); }\n.course-status { color: #a19595; font-size: 12px; white-space: nowrap; }\n.state-message { padding: 64px 12px; color: #7c8794; text-align: center; line-height: 24px; }\n.retry-button { padding: 8px 16px; border: 1px solid #d8e0ed; border-radius: 8px; background: #fff; color: #405de8; cursor: pointer; font: inherit; }\n.sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0, 0, 0, 0); }\nselect:focus-visible, button:focus-visible { outline: 2px solid #405de8; outline-offset: 3px; }\n.is-pc { width: 1114px; height: 583px; min-height: 0; background: transparent; }\n.breadcrumb { height: 28px; color: #7c8794; font-size: 12px; line-height: 18px; }\n.is-pc .course-panel { display: flex; flex-direction: column; height: 555px; overflow: hidden; border-radius: 12px; background: linear-gradient(180deg, #f8fbff, #eaf0ff); }\n.is-pc .course-toolbar { padding: 14px 20px; gap: 16px; }\n.is-pc .filter-control select { max-width: 160px; min-width: 114px; }\n.is-pc .course-scroll { flex: 1; min-height: 0; overflow-y: auto; padding: 18px 20px 24px; }\n.is-pc .course-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px; }\n.is-pc .course-card { padding: 16px 14px; }\n.is-pc .course-head h2 { font-size: 15px; }\n.is-pc .level-tag { right: -14px; font-size: 11px; }\n.is-pc .course-description { min-height: 60px; font-size: 13px; line-height: 20px; }\n@media (max-width: 350px) { .course-toolbar { gap: 8px; padding-left: 12px; padding-right: 12px; } .filter-control select { padding: 0 7px; } .generate-button { padding: 0 9px; } .course-scroll { padding-left: 12px; padding-right: 12px; } .course-grid { gap: 10px; } }\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ScriptPractice.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ScriptPractice.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ScriptPractice.vue?vue&type=template&id=5d60df36&scoped=true\"\nimport script from \"./ScriptPractice.vue?vue&type=script&lang=js\"\nexport * from \"./ScriptPractice.vue?vue&type=script&lang=js\"\nimport style0 from \"./ScriptPractice.vue?vue&type=style&index=0&id=5d60df36&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"5d60df36\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"script-detail\",class:{ 'is-pc': _vm.isPc }},[(!_vm.isPc)?_c('van-nav-bar',{attrs:{\"title\":\"脚本练习\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":function($event){return _vm.$router.back()}}}):_c('div',{staticClass:\"detail-breadcrumb\"},[_vm._v(\"当前位置：首页 > E-Talk > 脚本练习 > \"+_vm._s(_vm.courseName))]),_c('main',{staticClass:\"detail-shell\"},[_c('header',{staticClass:\"detail-header\"},[(_vm.isPc)?_c('button',{staticClass:\"back-button\",attrs:{\"type\":\"button\",\"aria-label\":\"返回\"},on:{\"click\":function($event){return _vm.$router.back()}}},[_vm._v(\"‹\")]):_vm._e(),_c('div',{staticClass:\"title-icon\",style:({ background: _vm.color })},[(_vm.icon)?_c('img',{attrs:{\"src\":_vm.icon,\"alt\":\"\"},on:{\"error\":function($event){_vm.icon = ''}}}):_c('van-icon',{attrs:{\"name\":\"description\"}})],1),_c('div',{staticClass:\"title-copy\"},[_c('h1',[_vm._v(_vm._s(_vm.courseName))]),_c('span',[_vm._v(_vm._s(_vm.level || 'CSE5'))])]),_c('div',{staticClass:\"progress-copy\"},[_c('strong',[_vm._v(_vm._s(_vm.completed))]),_vm._v(\" / \"+_vm._s(_vm.total))])]),_c('div',{staticClass:\"progress-track\",attrs:{\"role\":\"progressbar\",\"aria-valuenow\":_vm.completed,\"aria-valuemin\":0,\"aria-valuemax\":_vm.total}},[_c('span',{style:({ width: _vm.progress + '%' })})]),_c('section',{staticClass:\"sentence-list\",attrs:{\"aria-label\":\"脚本句子练习\"}},_vm._l((_vm.sentences),function(sentence,index){return _c('article',{key:index,staticClass:\"sentence-card\",class:{ active: _vm.activeIndex === index },attrs:{\"tabindex\":\"0\",\"role\":\"button\"},on:{\"click\":function($event){return _vm.selectSentence(index)},\"keydown\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.selectSentence(index)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"space\",32,$event.key,[\" \",\"Spacebar\"]))return null;$event.preventDefault();return _vm.selectSentence(index)}]}},[_c('div',{staticClass:\"sentence-number\"},[_vm._v(_vm._s(index + 1))]),_c('div',{staticClass:\"sentence-content\"},[_c('p',{staticClass:\"english\"},[_vm._v(_vm._s(sentence.english))]),_c('p',{staticClass:\"translation\"},[_vm._v(_vm._s(sentence.translation))]),(_vm.activeIndex === index)?_c('div',{staticClass:\"sentence-actions\"},[_c('button',{staticClass:\"text-action\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.speak(sentence.english)}}},[_c('van-icon',{attrs:{\"name\":\"volume-o\"}}),_vm._v(\"播放示例\")],1),_c('button',{staticClass:\"record-button\",class:{ recording: _vm.recording && _vm.activeIndex === index },attrs:{\"type\":\"button\",\"aria-label\":_vm.recording && _vm.activeIndex === index ? '停止录音' : '开始录音'},on:{\"click\":function($event){return _vm.toggleRecording(index)}}},[_c('van-icon',{attrs:{\"name\":_vm.recording && _vm.activeIndex === index ? 'stop' : 'volume'}})],1),_c('button',{staticClass:\"text-action\",attrs:{\"type\":\"button\",\"disabled\":!_vm.recordings[index]},on:{\"click\":function($event){return _vm.playRecording(index)}}},[_c('van-icon',{attrs:{\"name\":\"play-circle-o\"}}),_vm._v(\"播放录音\")],1)]):_vm._e(),(_vm.recordings[index])?_c('audio',{ref:'audio-' + index,refInFor:true,attrs:{\"src\":_vm.recordings[index],\"preload\":\"metadata\"}}):_vm._e()])])}),0),(_vm.message)?_c('p',{staticClass:\"feedback\",attrs:{\"role\":\"status\"}},[_vm._v(_vm._s(_vm.message))]):_vm._e()])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"script-detail\" :class=\"{ 'is-pc': isPc }\">\n    <van-nav-bar v-if=\"!isPc\" title=\"脚本练习\" left-text=\"返回\" left-arrow @click-left=\"$router.back()\" />\n    <div v-else class=\"detail-breadcrumb\">当前位置：首页 &gt; E-Talk &gt; 脚本练习 &gt; {{ courseName }}</div>\n\n    <main class=\"detail-shell\">\n      <header class=\"detail-header\">\n        <button v-if=\"isPc\" class=\"back-button\" type=\"button\" aria-label=\"返回\" @click=\"$router.back()\">‹</button>\n        <div class=\"title-icon\" :style=\"{ background: color }\">\n          <img v-if=\"icon\" :src=\"icon\" alt=\"\" @error=\"icon = ''\" />\n          <van-icon v-else name=\"description\" />\n        </div>\n        <div class=\"title-copy\">\n          <h1>{{ courseName }}</h1>\n          <span>{{ level || 'CSE5' }}</span>\n        </div>\n        <div class=\"progress-copy\"><strong>{{ completed }}</strong> / {{ total }}</div>\n      </header>\n\n      <div class=\"progress-track\" role=\"progressbar\" :aria-valuenow=\"completed\" :aria-valuemin=\"0\" :aria-valuemax=\"total\">\n        <span :style=\"{ width: progress + '%' }\"></span>\n      </div>\n\n      <section class=\"sentence-list\" aria-label=\"脚本句子练习\">\n        <article v-for=\"(sentence, index) in sentences\" :key=\"index\" class=\"sentence-card\" :class=\"{ active: activeIndex === index }\" tabindex=\"0\" role=\"button\" @click=\"selectSentence(index)\" @keydown.enter=\"selectSentence(index)\" @keydown.space.prevent=\"selectSentence(index)\">\n          <div class=\"sentence-number\">{{ index + 1 }}</div>\n          <div class=\"sentence-content\">\n            <p class=\"english\">{{ sentence.english }}</p>\n            <p class=\"translation\">{{ sentence.translation }}</p>\n            <div v-if=\"activeIndex === index\" class=\"sentence-actions\">\n              <button type=\"button\" class=\"text-action\" @click=\"speak(sentence.english)\"><van-icon name=\"volume-o\" />播放示例</button>\n              <button type=\"button\" class=\"record-button\" :class=\"{ recording: recording && activeIndex === index }\" :aria-label=\"recording && activeIndex === index ? '停止录音' : '开始录音'\" @click=\"toggleRecording(index)\">\n                <van-icon :name=\"recording && activeIndex === index ? 'stop' : 'volume'\" />\n              </button>\n              <button type=\"button\" class=\"text-action\" :disabled=\"!recordings[index]\" @click=\"playRecording(index)\"><van-icon name=\"play-circle-o\" />播放录音</button>\n            </div>\n            <audio v-if=\"recordings[index]\" :ref=\"'audio-' + index\" :src=\"recordings[index]\" preload=\"metadata\"></audio>\n          </div>\n        </article>\n      </section>\n      <p v-if=\"message\" class=\"feedback\" role=\"status\">{{ message }}</p>\n    </main>\n  </div>\n</template>\n\n<script>\nconst DEFAULT_SENTENCES = [\n  { english: 'A successful life is one that is filled with happiness, purpose, and fulfillment.', translation: '成功的生活是充满幸福、目标和满足感的。' },\n  { english: 'It is not defined by material possessions or social status, but rather by the relationships we build and the impact we have on others.', translation: '成功并不是由物质财富或社会地位定义的，而是由我们建立的关系以及对他人的影响决定的。' },\n  { english: 'To achieve success, we must set goals, work hard, and never give up on our dreams.', translation: '为了取得成功，我们必须设定目标、努力工作，永远不要放弃梦想。' },\n  { english: 'With patience and persistence, every small step can lead us closer to the life we want.', translation: '凭借耐心和坚持，每一个小步都能让我们更接近理想的生活。' }\n]\n\nexport default {\n  name: 'ScriptPracticeDetail',\n  data() {\n    const query = this.$route.query || {}\n    return {\n      courseName: query.name || '成功人生', level: query.level || 'CSE5', icon: query.icon || '', color: query.color || '#9551ff',\n      sentences: DEFAULT_SENTENCES, activeIndex: 0, recordings: [], recording: false, recorder: null, stream: null, message: ''\n    }\n  },\n  computed: {\n    isPc() { return Boolean(this.$route.meta && this.$route.meta.pc) },\n    total() { return this.sentences.length },\n    completed() { return this.recordings.filter(Boolean).length },\n    progress() { return this.total ? this.completed / this.total * 100 : 0 }\n  },\n  methods: {\n    selectSentence(index) {\n      if (this.recording && this.activeIndex !== index) this.stopRecording()\n      this.activeIndex = index\n      this.message = ''\n    },\n    speak(text) {\n      if (!window.speechSynthesis) { this.message = '当前浏览器不支持示例播放'; return }\n      window.speechSynthesis.cancel()\n      const utterance = new SpeechSynthesisUtterance(text)\n      utterance.lang = 'en-US'; utterance.rate = 0.9\n      window.speechSynthesis.speak(utterance)\n    },\n    async toggleRecording(index) {\n      if (this.recording) { this.stopRecording(); return }\n      if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia || !window.MediaRecorder) {\n        this.message = '当前浏览器不支持录音，请使用最新版浏览器'; return\n      }\n      this.activeIndex = index; this.message = ''\n      try {\n        this.stream = await navigator.mediaDevices.getUserMedia({ audio: true })\n        const chunks = []\n        this.recorder = new MediaRecorder(this.stream)\n        this.recorder.ondataavailable = event => { if (event.data.size) chunks.push(event.data) }\n        this.recorder.onstop = () => {\n          const blob = new Blob(chunks, { type: this.recorder.mimeType || 'audio/webm' })\n          this.$set(this.recordings, index, URL.createObjectURL(blob)); this.releaseStream()\n        }\n        this.recorder.start(); this.recording = true\n      } catch (error) { this.message = '无法访问麦克风，请允许浏览器使用麦克风'; this.releaseStream() }\n    },\n    stopRecording() {\n      if (this.recorder && this.recorder.state !== 'inactive') this.recorder.stop()\n      this.recording = false\n    },\n    releaseStream() {\n      if (this.stream) this.stream.getTracks().forEach(track => track.stop())\n      this.stream = null; this.recorder = null\n    },\n    playRecording(index) {\n      const ref = this.$refs['audio-' + index]\n      const audio = Array.isArray(ref) ? ref[0] : ref\n      if (audio) { audio.currentTime = 0; audio.play() }\n    }\n  },\n  beforeDestroy() {\n    if (window.speechSynthesis) window.speechSynthesis.cancel()\n    if (this.recording) this.stopRecording()\n    this.releaseStream()\n    this.recordings.forEach(url => { if (url) URL.revokeObjectURL(url) })\n  }\n}\n</script>\n\n<style scoped>\n.script-detail { min-height: 100vh; box-sizing: border-box; background: linear-gradient(180deg, #f7fbff 0%, #e9f1ff 100%); color: #17304e; font-size: 14px; }\n.detail-shell { width: min(calc(100% - 28px), 760px); margin: 0 auto; padding: 12px 0 32px; box-sizing: border-box; }\n.detail-header { display: flex; align-items: center; gap: 10px; min-height: 58px; padding: 0 2px; }\n.back-button { border: 0; padding: 0 4px; background: transparent; color: #527091; font-size: 31px; line-height: 1; cursor: pointer; }\n.title-icon { display: flex; align-items: center; justify-content: center; width: 40px; height: 40px; border-radius: 11px; color: #fff; overflow: hidden; }\n.title-icon img { width: 100%; height: 100%; object-fit: cover; }\n.title-copy { min-width: 0; flex: 1; }\n.title-copy h1 { margin: 0 0 3px; color: #172e4c; font-size: 18px; line-height: 24px; font-weight: 700; }\n.title-copy span { color: #7a8ca4; font-size: 12px; }\n.progress-copy { color: #8396ac; font-size: 13px; white-space: nowrap; }\n.progress-copy strong { color: #2c68d8; font-size: 20px; }\n.progress-track { height: 7px; margin: 8px 0 18px; overflow: hidden; border-radius: 8px; background: #dce7f6; }\n.progress-track span { display: block; height: 100%; border-radius: inherit; background: linear-gradient(90deg, #5d91ff, #6d64e9); transition: width .25s ease; }\n.sentence-list { display: grid; gap: 14px; }\n.sentence-card { position: relative; display: flex; gap: 11px; padding: 17px 15px; border: 1px solid rgba(201, 217, 238, .8); border-radius: 15px; background: rgba(255, 255, 255, .92); box-shadow: 0 5px 14px rgba(55, 89, 138, .07); cursor: pointer; transition: border-color .2s ease, box-shadow .2s ease; }\n.sentence-card.active { border-color: #acc8ff; }\n.sentence-card.active { box-shadow: 0 6px 16px rgba(55, 105, 190, .1); }\n.sentence-card:focus-visible { outline: 2px solid #4b80ed; outline-offset: 2px; }\n.sentence-number { flex: 0 0 22px; width: 22px; height: 22px; border-radius: 50%; background: #e9f0ff; color: #547ce0; font-size: 12px; line-height: 22px; text-align: center; }\n.sentence-content { min-width: 0; flex: 1; }\n.english { margin: 0; color: #253e5d; font-size: 16px; line-height: 25px; font-weight: 600; }\n.translation { margin: 7px 0 13px; color: #8796a9; font-size: 13px; line-height: 21px; }\n.sentence-actions { display: grid; grid-template-columns: minmax(0, 1fr) 56px minmax(0, 1fr); align-items: center; min-height: 52px; margin-top: 4px; padding-top: 9px; border-top: 1px solid #edf2f9; }\n.text-action { display: inline-flex; align-items: center; gap: 8px; border: 0; padding: 4px 0; background: transparent; color: #527297; font: inherit; cursor: pointer; white-space: nowrap; }\n.sentence-actions .text-action:first-child { justify-self: start; }\n.sentence-actions .text-action:last-child { justify-self: end; }\n.text-action:disabled { color: #c2cad5; cursor: default; }\n.record-button { display: flex; align-items: center; justify-content: center; justify-self: center; width: 52px; height: 52px; margin-top: -2px; border: 0; border-radius: 50%; background: linear-gradient(145deg, #4a9bff, #596eea); color: #fff; font-size: 22px; line-height: 1; box-shadow: 0 5px 10px rgba(73, 118, 226, .3); cursor: pointer; }\n.record-button .van-icon { display: block; line-height: 1; }\n.record-button.recording { background: #ef6a72; animation: pulse 1.2s infinite; }\n.feedback { margin: 15px 0 0; color: #d15c65; font-size: 13px; text-align: center; }\n.detail-breadcrumb { width: min(1114px, calc(100% - 44px)); margin: 0 auto; color: #7c8794; font-size: 12px; line-height: 18px; }\n.is-pc { min-height: 0; height: 583px; padding: 0; background: transparent; }\n.is-pc .detail-shell { width: 820px; height: 545px; margin: 8px auto 0; padding: 18px 30px 25px; overflow-y: auto; border-radius: 16px; background: linear-gradient(180deg, #f8fbff, #eaf1ff); }\n.is-pc .sentence-card { padding: 20px 22px 16px; }\n.is-pc .english { font-size: 18px; line-height: 28px; }\n@keyframes pulse { 50% { transform: scale(1.06); } }\n@media (max-width: 350px) { .detail-shell { width: calc(100% - 22px); } .english { font-size: 14px; line-height: 22px; } .record-button { width: 46px; height: 46px; } .sentence-actions { grid-template-columns: minmax(0, 1fr) 50px minmax(0, 1fr); } }\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ScriptPracticeDetail.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ScriptPracticeDetail.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ScriptPracticeDetail.vue?vue&type=template&id=5b8ca922&scoped=true\"\nimport script from \"./ScriptPracticeDetail.vue?vue&type=script&lang=js\"\nexport * from \"./ScriptPracticeDetail.vue?vue&type=script&lang=js\"\nimport style0 from \"./ScriptPracticeDetail.vue?vue&type=style&index=0&id=5b8ca922&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"5b8ca922\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"ai\"},[_c('van-nav-bar',{attrs:{\"title\":\"记录回放\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticClass:\"main\"},[(_vm.InfoList.length > 0)?_c('div',{staticClass:\"title\"},[_vm._v(\"今天\"),_c('span',{staticStyle:{\"font-size\":\"12px\",\"font-weight\":\"normal\"}},[_vm._v(\"(E-Talk部分已学\"+_vm._s(_vm.etalk_minutes)+\"min)\")])]):_vm._e(),_vm._l((_vm.InfoList),function(item,index){return _c('div',{key:index,staticClass:\"item\",on:{\"click\":function($event){return _vm.to_ai_project(item)}}},[_c('img',{staticClass:\"img\",attrs:{\"src\":item.icon_img,\"mode\":\"widthFix\"}}),_c('div',{staticClass:\"item-center\"},[_c('div',{staticClass:\"item-title\"},[_vm._v(_vm._s(item.name))]),_c('div',{staticClass:\"item-history\"},[_vm._v(_vm._s(item.question))])]),_c('div',{staticClass:\"history-time\"},[_vm._v(_vm._s(item.create_time))])])}),(_vm.OldInfoList.length > 0)?_c('div',{staticClass:\"history-title\"},[_vm._v(\"更早记录\"),_c('span',{staticStyle:{\"font-size\":\"12px\",\"font-weight\":\"normal\"}},[_vm._v(\"(E-Talk部分已学\"+_vm._s(_vm.etalk_total_minutes)+\"min)\")])]):_vm._e(),_vm._l((_vm.OldInfoList),function(item,index){return _c('div',{key:index,staticClass:\"item\",on:{\"click\":function($event){return _vm.to_ai_project(item)}}},[_c('img',{staticClass:\"img\",attrs:{\"src\":item.icon_img,\"mode\":\"widthFix\"}}),_c('div',{staticClass:\"item-center\"},[_c('div',{staticClass:\"item-title\"},[_vm._v(_vm._s(item.name))]),_c('div',{staticClass:\"item-history\"},[_vm._v(_vm._s(item.question))])]),_c('div',{staticClass:\"history-time\"},[_vm._v(_vm._s(item.create_time))])])})],2)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"ai\">\r\n        <van-nav-bar title=\"记录回放\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <div class=\"main\">\r\n            <div class=\"title\" v-if=\"InfoList.length > 0\">今天<span style=\"font-size: 12px;font-weight: normal;\">(E-Talk部分已学{{ etalk_minutes }}min)</span></div>\r\n            <div class=\"item\" v-for=\"(item, index) in InfoList\" :key=\"index\" @click=\"to_ai_project(item)\">\r\n                <img class=\"img\" :src=\"item.icon_img\" mode=\"widthFix\" />\r\n                <div class=\"item-center\">\r\n                    <div class=\"item-title\">{{ item.name }}</div>\r\n                    <div class=\"item-history\">{{ item.question }}</div>\r\n                </div>\r\n                <div class=\"history-time\">{{ item.create_time }}</div>\r\n            </div>\r\n\r\n\r\n            <div class=\"history-title\" v-if=\"OldInfoList.length > 0\">更早记录<span style=\"font-size: 12px;font-weight: normal;\">(E-Talk部分已学{{ etalk_total_minutes }}min)</span></div>\r\n            <div class=\"item\" v-for=\"(item, index) in OldInfoList\" :key=\"index\" @click=\"to_ai_project(item)\">\r\n                <img class=\"img\" :src=\"item.icon_img\" mode=\"widthFix\" />\r\n                <div class=\"item-center\">\r\n                    <div class=\"item-title\">{{ item.name }}</div>\r\n                    <div class=\"item-history\">{{ item.question }}</div>\r\n                </div>\r\n                <div class=\"history-time\">{{ item.create_time }}</div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getOldInfoList, getNewInfoList } from '@/api/user'\r\nimport { getUserStudy } from '@/api/home'\r\nexport default {\r\n    name: 'Ai',\r\n    data() {\r\n        return {\r\n            InfoList: [],\r\n            OldInfoList: [],\r\n            etalk_minutes:0,\r\n            etalk_total_minutes:0\r\n        }\r\n    },\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        async to_ai_project(item) {\r\n            this.$router.push({ name: 'ChatIndex', query: { project_id: 0, is_history: 1, lang_time: 0, filePath: '', type: 0, stype: item.from, from: item.from, chat_title: '主题对话', system: '假如你是一名语文老师', content: '' } })\r\n        },\r\n        async getOldInfoList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getOldInfoList({ sid: user.sid })\r\n                    const data = response.data\r\n                    this.OldInfoList = data\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async getNewInfoList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getNewInfoList({ sid: user.sid })\r\n                    const data = response.data\r\n                    this.InfoList = data\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async getUserStudy() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getUserStudy(user.sid)\r\n                    const data = response.data\r\n                \r\n                    this.etalk_minutes = data.etalk_minutes\r\n                    this.etalk_total_minutes = data.etalk_total_minutes\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        this.getNewInfoList()\r\n        this.getOldInfoList()\r\n        this.getUserStudy()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n/* pages/etalk/index.wxss */\r\n/* otherPage/pages/etalk/project.wxss */\r\n\r\n.ai {\r\n    width: 100vw;\r\n    height: 100vh;\r\n    background-color: #F8F8F8;\r\n    align-items: left;\r\n}\r\n\r\n.main {\r\n    width: 90vw;\r\n    height: 100vh;\r\n    background-color: #F8F8F8;\r\n    align-items: left;\r\n    margin: 20px auto;\r\n}\r\n\r\n.title {\r\n    color: #3D3D3D;\r\n    font-size: 16px;\r\n    font-weight: bold;\r\n    padding-left: 10px;\r\n    text-align: left;\r\n    margin-top: 10px;\r\n}\r\n\r\n.history-title {\r\n    color: #3D3D3D;\r\n    font-size: 16px;\r\n    font-weight: bold;\r\n    padding-left: 10px;\r\n    margin-top: 15px;\r\n    text-align: left;\r\n}\r\n\r\n.item {\r\n    width: 90vw;\r\n    height: 70px;\r\n    background: #FFFFFF;\r\n    border-radius: 10px;\r\n    margin-top: 10px;\r\n}\r\n\r\n.img {\r\n    width: 30px;\r\n    height: 30px;\r\n    padding: 21px 12px 0 15px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.item-center {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 200px;\r\n    padding-top: 15px;\r\n}\r\n\r\n.item-title {\r\n    font-size: 14px;\r\n    padding-bottom: 4px;\r\n    text-align: left;\r\n}\r\n\r\n.item-history {\r\n    font-size: 12px;\r\n    width: 180px;\r\n    overflow: hidden;\r\n    text-overflow: ellipsis;\r\n    white-space: nowrap;\r\n}\r\n\r\n.history-time {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 73px;\r\n    text-align: left;\r\n    font-size: 12px;\r\n    line-height: 70px;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./History.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./History.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./History.vue?vue&type=template&id=1900dd1f&scoped=true\"\nimport script from \"./History.vue?vue&type=script&lang=js\"\nexport * from \"./History.vue?vue&type=script&lang=js\"\nimport style0 from \"./History.vue?vue&type=style&index=0&id=1900dd1f&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"1900dd1f\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"main\"},[_c('div',{staticClass:\"plant\"},[_c('div',{staticClass:\"top-title\"},[_vm._v(\"提升计划\")]),(_vm.is_has_plant == 2)?_c('div',{staticClass:\"now-stu-level\"},[_c('div',{staticClass:\"now-stu_level\"},[_vm._v(\"CSE\"+_vm._s(_vm.level))]),_c('div',{staticClass:\"level-line\"},[_c('div',{staticClass:\"has-finish\",style:(_vm.styleWidth)}),_c('div',{staticClass:\"no-finish\"})]),_c('div',{staticClass:\"to-stu_level\"},[_vm._v(\"CSE\"+_vm._s(_vm.aim_level))])]):_vm._e(),(_vm.is_has_plant == 2)?_c('div',{staticClass:\"content-today-count\"},[_c('div',{staticClass:\"today-count-item\"},[_c('div',{staticClass:\"count-one\"},[_vm._v(_vm._s(_vm.countTask.total_finish_count))]),_c('div',{staticClass:\"count-two\"},[_vm._v(\"/\"+_vm._s(_vm.countTask.total_task_count)+\"个\")]),_c('div',{staticClass:\"count-title\"},[_vm._v(\"完成计划\")])]),_c('div',{staticClass:\"today-count-item\"},[_c('div',{staticClass:\"count-one\"},[_vm._v(_vm._s(_vm.countTask.today_minutes * 1 + _vm.countTask.etalk_minutes * 1))]),_c('div',{staticClass:\"count-two\"},[_vm._v(\"/\"+_vm._s(_vm.countTask.plan_minutes)+\"min\")]),_c('div',{staticClass:\"count-title\"},[_vm._v(\"今日时长\")])]),_c('div',{staticClass:\"today-count-item\"},[_c('div',{staticClass:\"count-one\"},[_vm._v(_vm._s(_vm.countTask.etalk_total_minutes))]),_c('div',{staticClass:\"count-two\"},[_vm._v(\"min\")]),_c('div',{staticClass:\"count-title\"},[_vm._v(\"E-Talk时长\")])])]):_vm._e(),(_vm.is_has_plant == 1)?_c('div',{staticClass:\"second-lable\"},[_vm._v(\"慧学见证你的每一个进步瞬间\")]):_vm._e(),(_vm.is_has_plant == 1)?_c('div',{staticClass:\"plant-step\"},[_c('div',{staticClass:\"first-step first-step-ed\"},[_vm._v(\"1\")]),_c('div',{staticClass:\"center-line center-line-ed\"}),_c('div',{staticClass:\"first-step first-step-ed\"},[_vm._v(\"2\")]),_c('div',{staticClass:\"center-line\"}),_c('div',{staticClass:\"first-step\"},[_vm._v(\"3\")])]):_vm._e(),(_vm.is_has_plant == 1)?_c('div',{staticClass:\"step-name\"},[_c('div',{staticClass:\"step-item\"},[_vm._v(\"等级测评\")]),_c('div',{staticClass:\"step-item\"},[_vm._v(\"设置目标\")]),_c('div',{staticClass:\"step-item\"},[_vm._v(\"获取计划\")])]):_vm._e()]),(_vm.is_has_plant == 1)?_c('div',{staticClass:\"level-info\"},[_c('div',{staticClass:\"level-info-top\"},[_c('div',{staticClass:\"now-level\"},[_vm._v(\"当前等级：Lv.\"+_vm._s(_vm.level))]),_c('div',{staticClass:\"restart-exam\"},[_vm._v(\"等级不准，重新测评\")])]),_vm._m(0),_c('div',{staticClass:\"set-object\",on:{\"click\":_vm.set_plant_second}},[_vm._v(\"设定目标\")])]):_vm._e(),(_vm.is_has_plant == 2)?_c('div',{staticClass:\"today-task\"},[_c('div',{staticClass:\"level-info-top\"},[_c('div',{staticClass:\"now-level\",staticStyle:{\"font-size\":\"16px\"}},[_vm._v(\" 今日任务 \"),(_vm.countTask.today_minutes < _vm.countTask.plan_minutes)?_c('span',{staticStyle:{\"font-size\":\"16px\",\"font-weight\":\"normal\"}},[_vm._v(\" (未完成) \")]):_vm._e(),(_vm.countTask.today_minutes >= _vm.countTask.plan_minutes)?_c('span',{staticStyle:{\"font-size\":\"16px\",\"font-weight\":\"normal\"}},[_vm._v(\"(已完成) \")]):_vm._e(),_c('div',{staticStyle:{\"color\":\"#848484\",\"font-size\":\"12px\",\"font-weight\":\"normal\"}},[_vm._v(\" \"+_vm._s(_vm.countTask.today_minutes)+\"min/\"+_vm._s(_vm.countTask.plan_minutes)+\"min\")])]),_c('div',{staticClass:\"restart-exam plant-manger\",staticStyle:{\"width\":\"90px\"},on:{\"click\":_vm.to_set}},[_vm._v(\"计划管理\")])]),_c('div',{staticClass:\"level-has\"},[_c('div',{staticClass:\"left\"},[_c('div',{staticClass:\"left-title\"},[_vm._v(\"听力\")]),_c('div',{staticClass:\"left-num\"},[_vm._v(_vm._s(_vm.listen))]),_c('div',{staticClass:\"left-bottom\"})]),_c('div',{staticClass:\"center\"},[_c('div',{staticClass:\"left-title\"},[_vm._v(\"阅读\")]),_c('div',{staticClass:\"left-num\"},[_vm._v(_vm._s(_vm.read))]),_c('div',{staticClass:\"right-bottom\"})]),_c('div',{staticClass:\"right\"},[_c('div',{staticClass:\"left-title\"},[_vm._v(\"写作\")]),_c('div',{staticClass:\"left-num\"},[_vm._v(_vm._s(_vm.write))]),_c('div',{staticClass:\"right-bottom\"})])]),_c('div',{staticClass:\"set-object\",on:{\"click\":_vm.to_plant}},[_vm._v(\"去学习\")])]):_vm._e(),(_vm.is_has_plant == 2)?_c('div',{staticClass:\"learn-bottom\"},[_c('div',{staticClass:\"model-title\"},[_vm._v(\"慧学相伴\")]),_c('div',{staticClass:\"learn-item\"},[_c('div',{staticClass:\"item-left\"},[_c('div',{staticClass:\"item-left-title\",staticStyle:{\"color\":\"#C4C4C4\"}},[_vm._v(\"自适应测试\")]),(_vm.self_exam == 0)?_c('div',{staticClass:\"item-left-finish\"},[_vm._v(\"下次测试：\"+_vm._s(_vm.self_exam_time))]):_vm._e(),(_vm.self_exam == 1)?_c('div',{staticClass:\"item-left-finish\"},[_vm._v(\"测试结束：\"+_vm._s(_vm.self_exam_time))]):_vm._e(),_vm._m(1)]),_c('div',{staticClass:\"item-right-btn\",on:{\"click\":_vm.PaperNotice}},[_vm._v(\"去测评\")])])]):_vm._e()])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"level-has\"},[_c('div',{staticClass:\"level-has-item\"},[_c('div',{staticClass:\"level-lable\"},[_vm._v(\"√\")]),_c('div',{staticClass:\"has-info\"},[_vm._v(\"基本的日常生活沟通以及简单例行的工作\")])]),_c('div',{staticClass:\"level-has-item\"},[_c('div',{staticClass:\"level-lable\"},[_vm._v(\"√\")]),_c('div',{staticClass:\"has-info\"},[_vm._v(\"基本的日常生活沟通以及简单例行的工作\")])]),_c('div',{staticClass:\"level-has-item\"},[_c('div',{staticClass:\"level-lable\"},[_vm._v(\"√\")]),_c('div',{staticClass:\"has-info\"},[_vm._v(\"基本的日常生活沟通以及简单例行的工作\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"item-left-finish-box\"},[_c('div',{staticClass:\"has-finish\",staticStyle:{\"width\":\"35%\"}}),_c('div',{staticClass:\"no-finish\"})])\n}]\n\nexport { render, staticRenderFns }","<template>\r\n  <div class=\"main\">\r\n    <div class=\"plant\">\r\n      <div class=\"top-title\">提升计划</div>\r\n      <div class=\"now-stu-level\" v-if=\"is_has_plant == 2\">\r\n        <div class=\"now-stu_level\">CSE{{ level }}</div>\r\n        <div class=\"level-line\">\r\n          <div class=\"has-finish\" :style=\"styleWidth\"></div>\r\n          <div class=\"no-finish\"></div>\r\n        </div>\r\n        <div class=\"to-stu_level\">CSE{{ aim_level }}</div>\r\n      </div>\r\n\r\n      <!-- 统计数据开始 -->\r\n      <div class=\"content-today-count\" v-if=\"is_has_plant == 2\">\r\n        <div class=\"today-count-item\">\r\n          <div class=\"count-one\">{{ countTask.total_finish_count }}</div>\r\n          <div class=\"count-two\">/{{ countTask.total_task_count }}个</div>\r\n          <div class=\"count-title\">完成计划</div>\r\n        </div>\r\n        <div class=\"today-count-item\">\r\n          <div class=\"count-one\">{{ countTask.today_minutes * 1 + countTask.etalk_minutes * 1 }}</div>\r\n          <div class=\"count-two\">/{{ countTask.plan_minutes }}min</div>\r\n          <div class=\"count-title\">今日时长</div>\r\n        </div>\r\n        <div class=\"today-count-item\">\r\n          <div class=\"count-one\">{{ countTask.etalk_total_minutes }}</div>\r\n          <div class=\"count-two\">min</div>\r\n          <div class=\"count-title\">E-Talk时长</div>\r\n        </div>\r\n      </div>\r\n      <!-- 统计数据结束 -->\r\n      <div class=\"second-lable\" v-if=\"is_has_plant == 1\">慧学见证你的每一个进步瞬间</div>\r\n      <div class=\"plant-step\" v-if=\"is_has_plant == 1\">\r\n        <div class=\"first-step first-step-ed\">1</div>\r\n        <div class=\"center-line center-line-ed\"></div>\r\n        <div class=\"first-step first-step-ed\">2</div>\r\n        <div class=\"center-line\"></div>\r\n        <div class=\"first-step\">3</div>\r\n      </div>\r\n      <div class=\"step-name\" v-if=\"is_has_plant == 1\">\r\n        <div class=\"step-item\">等级测评</div>\r\n        <div class=\"step-item\">设置目标</div>\r\n        <div class=\"step-item\">获取计划</div>\r\n      </div>\r\n    </div>\r\n    <div class=\"level-info\" v-if=\"is_has_plant == 1\">\r\n      <div class=\"level-info-top\">\r\n        <div class=\"now-level\">当前等级：Lv.{{ level }}</div>\r\n        <div class=\"restart-exam\">等级不准，重新测评</div>\r\n      </div>\r\n      <div class=\"level-has\">\r\n        <div class=\"level-has-item\">\r\n          <div class=\"level-lable\">√</div>\r\n          <div class=\"has-info\">基本的日常生活沟通以及简单例行的工作</div>\r\n        </div>\r\n        <div class=\"level-has-item\">\r\n          <div class=\"level-lable\">√</div>\r\n          <div class=\"has-info\">基本的日常生活沟通以及简单例行的工作</div>\r\n        </div>\r\n        <div class=\"level-has-item\">\r\n          <div class=\"level-lable\">√</div>\r\n          <div class=\"has-info\">基本的日常生活沟通以及简单例行的工作</div>\r\n        </div>\r\n      </div>\r\n      <div class=\"set-object\" @click=\"set_plant_second\">设定目标</div>\r\n    </div>\r\n    <div class=\"today-task\" v-if=\"is_has_plant == 2\">\r\n      <div class=\"level-info-top\">\r\n        <div class=\"now-level\" style=\"font-size: 16px;\">\r\n          今日任务\r\n          <span style=\"font-size: 16px;font-weight: normal;\" v-if=\"countTask.today_minutes < countTask.plan_minutes\">\r\n            (未完成)\r\n          </span>\r\n          <span style=\"font-size: 16px;font-weight: normal;\"\r\n            v-if=\"countTask.today_minutes >= countTask.plan_minutes\">(已完成)\r\n          </span>\r\n          <div style=\"color:#848484;font-size:12px;font-weight:normal\">\r\n            {{ countTask.today_minutes }}min/{{ countTask.plan_minutes }}min</div>\r\n        </div>\r\n        <div class=\"restart-exam plant-manger\" style=\"width: 90px;\" @click=\"to_set\">计划管理</div>\r\n      </div>\r\n      <div class=\"level-has\">\r\n        <div class=\"left\">\r\n          <div class=\"left-title\">听力</div>\r\n          <div class=\"left-num\">{{ listen }}</div>\r\n          <div class=\"left-bottom\"></div>\r\n        </div>\r\n        <div class=\"center\">\r\n          <div class=\"left-title\">阅读</div>\r\n          <div class=\"left-num\">{{ read }}</div>\r\n          <div class=\"right-bottom\"></div>\r\n        </div>\r\n        <div class=\"right\">\r\n          <div class=\"left-title\">写作</div>\r\n          <div class=\"left-num\">{{ write }}</div>\r\n          <div class=\"right-bottom\"></div>\r\n        </div>\r\n      </div>\r\n      <div class=\"set-object\" @click=\"to_plant\">去学习</div>\r\n    </div>\r\n    <div class=\"learn-bottom\" v-if=\"is_has_plant == 2\">\r\n      <div class=\"model-title\">慧学相伴</div>\r\n      <!-- <div class=\"learn-item\">\r\n        <div class=\"item-left\">\r\n          <div class=\"item-left-title\">知识地图</div>\r\n          <div class=\"item-left-finish\">已解锁知识点：35%</div>\r\n          <div class=\"item-left-finish-box\">\r\n            <div class=\"has-finish\" style=\"width: 35%;\"></div>\r\n            <div class=\"no-finish\"></div>\r\n          </div>\r\n        </div>\r\n        <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/map.png\" mode=\"widthFix\"\r\n          class=\"item-right-img\" />\r\n      </div> -->\r\n      <div class=\"learn-item\">\r\n        <div class=\"item-left\">\r\n          <div class=\"item-left-title\" style=\"color: #C4C4C4;\">自适应测试</div>\r\n          <div class=\"item-left-finish\" v-if=\"self_exam == 0\">下次测试：{{ self_exam_time }}</div>\r\n          <div class=\"item-left-finish\" v-if=\"self_exam == 1\">测试结束：{{ self_exam_time }}</div>\r\n          <div class=\"item-left-finish-box\">\r\n            <div class=\"has-finish\" style=\"width: 35%;\"></div>\r\n            <div class=\"no-finish\"></div>\r\n          </div>\r\n        </div>\r\n        <div class=\"item-right-btn\" @click=\"PaperNotice\">去测评</div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n<script>\r\nimport { getPlant } from '@/api/plant'\r\nimport { getUserStudy, getTask, getUserRowByToken } from '@/api/home'\r\nimport { StartMiniPaper } from '@/api/exam'\r\nexport default {\r\n  name: 'Plant',\r\n  data() {\r\n    return {\r\n      is_has_plant: 1,\r\n      level: 1,\r\n      aim_level: 1,\r\n      self_exam: 0,\r\n      self_exam_time: '未开始',\r\n      listen: 0,\r\n      read: 0,\r\n      styleWidth: \"width:0%\",\r\n      write: 0,\r\n      userInfo: [],\r\n      countTask: {\r\n        total_finish_count: 1,\r\n        total_task_count: 1,\r\n        today_minutes: 0,\r\n        month_minutes: 0,\r\n        etalk_minutes: 0,\r\n        etalk_total_minutes: 0,\r\n        plan_minutes: 0\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    async GetUserInfo() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await getUserRowByToken({ token: user.token })\r\n          this.userInfo = response.data\r\n          var user_level = response.data.listen_level + response.data.read_level + response.data.write_level + response.data.write_level\r\n          \r\n          this.level = Math.floor(user_level/4)\r\n          var styleWidth = ( this.level / this.aim_level).toFixed(2)\r\n          styleWidth = styleWidth * 100\r\n          console.log(this.aim_level)\r\n          console.log(styleWidth)\r\n          if(styleWidth > 100){\r\n            styleWidth = 100\r\n          }\r\n          styleWidth = styleWidth + '%'\r\n          this.styleWidth = 'width:' + styleWidth\r\n          console.log(this.styleWidth)\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async getPlant() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await getPlant(user.sid)\r\n          if (response.code !== 100) {\r\n            this.$router.push({ name: 'SetPlant' })\r\n          }\r\n          const data = response.data\r\n          this.is_has_plant = 2\r\n          // this.level = data.level\r\n          console.log(\"用户信息：\")\r\n          this.aim_level = data.aim_level\r\n          this.GetUserInfo()\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async to_plant() {\r\n      this.$router.push({ name: 'Calendar' })\r\n    },\r\n    async to_set() {\r\n      this.$router.push({ name: 'PlantSecond' })\r\n    },\r\n    async getUserStudy() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await getUserStudy(user.sid)\r\n          const data = response.data\r\n          this.countTask = {\r\n            total_finish_count: data.total_finish_count,\r\n            total_task_count: data.total_task_count,\r\n            today_minutes: data.today_minutes,\r\n            plan_minutes: data.plan_minutes,\r\n            etalk_minutes: data.etalk_minutes,\r\n            etalk_total_minutes: data.etalk_total_minutes,\r\n            month_minutes: data.month_minutes\r\n          }\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async getTask() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await getTask({ sid: user.sid })\r\n          const data = response.data\r\n          var listen = 0;\r\n          var read = 0;\r\n          var write = 0;\r\n          data.forEach(val => {\r\n            if (val.category_id == 1) {\r\n              listen++\r\n            }\r\n            if (val.category_id == 2) {\r\n              read++\r\n            }\r\n            if (val.category_id == 4) {\r\n              write++\r\n            }\r\n          })\r\n          this.listen = listen\r\n          this.read = read\r\n          this.write = write\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async set_plant_second() {\r\n      this.$router.push({ name: 'SetPlant' })\r\n    },\r\n    async PaperNotice() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await StartMiniPaper(user.sid)\r\n          const data = response.data\r\n          var timestamp = Date.parse(new Date());\r\n          if (data.is_allow == 0 && data.count == 6) {\r\n            alert('不在时间范围')\r\n            return\r\n          }\r\n          if (data.row == null) {\r\n            this.self_exam = 1,\r\n              this.self_exam_time = '你还没有做过'\r\n          }\r\n          if (data.is_allow == 1) {\r\n            console.log(\"3\" + data)\r\n            if (data.row == null) {\r\n              this.$router.push({ name: 'PaperNotice', query: { paper_id: 0, count_load: 0, has_time: 600000 } })\r\n            } else {\r\n              console.log(\"1\" + data)\r\n              var has_time = data.end_time - timestamp\r\n              this.$router.push({ name: 'PaperNotice', query: { paper_id: data.row.id, count_load: this.count_load, has_time: has_time } })\r\n            }\r\n          }\r\n          //超时\r\n          if (data.end_time < timestamp && data.is_allow == 1) {\r\n            console.log(\"2\" + data)\r\n            this.$router.push({ name: 'PaperNotice', query: { paper_id: data.row.id, count_load: this.count_load, has_time: 600000 } })\r\n          } else {\r\n            this.this.self_exam_time = '你还没有做过'\r\n            this.$message({\r\n              message: '不在时间范围',\r\n              center: true\r\n            })\r\n          }\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n\r\n\r\n    },\r\n    async PaperNotice1() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await StartMiniPaper(user.sid)\r\n          const data = response.data\r\n          console.log(data)\r\n          var timestamp = Date.parse(new Date());\r\n          if (data.is_allow == 0 && data.count == 6) {\r\n            this.timestampToDatetime(data.next_start_time)\r\n            return\r\n          }\r\n          if (data.row == null) {\r\n            this.self_exam = 1,\r\n              this.self_exam_time = '你还没有做过'\r\n            return\r\n          }\r\n          if (data.is_allow == 1) {\r\n            if (data.row == null) {\r\n              this.self_exam_time = '你还没有做过'\r\n              return\r\n            } else {\r\n              // var has_time = data.end_time - timestamp\r\n              // this.$router.push({ name: 'PaperNotice', query: { paper_id: data.row.id, count_load: this.count_load, has_time: has_time } })\r\n            }\r\n          }\r\n          //超时\r\n          if (data.end_time < timestamp && data.is_allow == 1) {\r\n            // alert(timestamp)\r\n            // this.$router.push({ name: 'PaperNotice', query: { paper_id: data.row.id, count_load: this.count_load, has_time: 600000 } })\r\n          } else {\r\n            if (data.is_allow == 1 && data.row == null) {\r\n              this.self_exam_time = '你还没有做过'\r\n              return\r\n            }\r\n            this.timestampToDatetime(data.next_start_time)\r\n          }\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n\r\n\r\n    },\r\n    async timestampToDatetime(timestamp) {\r\n      const date = new Date(timestamp);\r\n      const year = date.getFullYear();\r\n      const month = date.getMonth() + 1;\r\n      const day = date.getDate();\r\n      console.log(`${year}-${month}-${day}`)\r\n      this.self_exam_time = `${year}-${month}-${day}`;\r\n    }\r\n  },\r\n  mounted() {\r\n    // 在组件挂载后立即获取任务数据\r\n    \r\n    this.getPlant()\r\n    this.getUserStudy()\r\n    this.PaperNotice1()\r\n    this.getTask()\r\n   \r\n  }\r\n}\r\n</script>\r\n<style scoped>\r\n.plant {\r\n  width: 100%;\r\n  height: 280px;\r\n  background-image: url('https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/plant.png');\r\n  background-size: cover;\r\n  overflow: hidden;\r\n  position: absolute;\r\n  top: 0;\r\n}\r\n\r\n.main {\r\n  width: 100vw;\r\n  height: 100vh;\r\n  padding-bottom: 200px;\r\n}\r\n\r\n.top-title {\r\n  width: 93%;\r\n  font-size: 22px;\r\n  font-weight: bold;\r\n  text-align: left;\r\n  padding: 49px 0 0 14px;\r\n  height: 50px;\r\n}\r\n\r\n.now-stu-level {\r\n  width: 80%;\r\n  height: 30px;\r\n  text-align: left;\r\n  margin-left: 10%;\r\n}\r\n\r\n.now-stu_level {\r\n  width: 44px;\r\n  height: 14px;\r\n  background: -webkit-linear-gradient(left, #E2CCA6, #B29360);\r\n  -webkit-background-clip: text;\r\n  -webkit-text-fill-color: transparent;\r\n  margin: 0px 0 0 0px;\r\n  font-size: 14px;\r\n  font-weight: bold;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  text-align: left;\r\n}\r\n\r\n.to-stu_level {\r\n  width: 43px;\r\n  height: 14px;\r\n  padding: 93px 0 0 0rpx;\r\n  color: #C2C2C2;\r\n  font-size: 14px;\r\n  font-weight: bold;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  text-align: center;\r\n}\r\n\r\n.level-line {\r\n  width: 148px;\r\n  height: 5px;\r\n  background: rgba(5, 5, 5, 0.14);\r\n  border-radius: 6px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin: 5px 0 0 0;\r\n}\r\n\r\n.has-finish {\r\n  height: 5px;\r\n  background: linear-gradient(90deg, #E2CCA6 0%, #B29360 100%);\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.no-finish {\r\n  height: 5px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.second-lable {\r\n  position: fixed;\r\n  top: 83px;\r\n  left: 24px;\r\n  color: #707070;\r\n  font-size: 12px;\r\n}\r\n\r\n.plant-step {\r\n  width: 300px;\r\n  position: fixed;\r\n  top: 108px;\r\n}\r\n\r\n.first-step {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 18px;\r\n  height: 18px;\r\n  background-color: #B4B4B4;\r\n  border-radius: 18px;\r\n  color: #FFF;\r\n  text-align: center;\r\n  line-height: 18px;\r\n}\r\n\r\n.first-step-ed {\r\n  background-color: #003F88;\r\n}\r\n\r\n.step-name {\r\n  width: 300px;\r\n  position: fixed;\r\n  top: 133px;\r\n}\r\n\r\n.step-item:first-child {\r\n  text-align: left;\r\n}\r\n\r\n.step-item:last-child {\r\n  text-align: right;\r\n}\r\n\r\n.step-item {\r\n  width: 75px;\r\n  height: 20px;\r\n  font-size: 12px;\r\n  text-align: center;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.center-line {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 71px;\r\n  height: 3px;\r\n  background: #B4B4B4;\r\n  border-radius: 0px;\r\n  margin-top: 9px;\r\n}\r\n\r\n.center-line-ed {\r\n  background: #003F88;\r\n}\r\n\r\n.level-info {\r\n  width: 93%;\r\n  height: 264px;\r\n  background: #FFFFFF;\r\n  border-radius: 32px;\r\n  position: absolute;\r\n  top: 190px;\r\n  left: 13px;\r\n}\r\n\r\n.level-info-top {\r\n  width: 99%;\r\n  height: 64px;\r\n  background: #FFFFFF;\r\n  border-radius: 32px;\r\n  text-align: left;\r\n}\r\n\r\n.now-level {\r\n  width: 160px;\r\n  font-size: 20px;\r\n  font-weight: bold;\r\n  padding: 38px 0 0 20px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.restart-exam {\r\n  width: 125px;\r\n  height: 22px;\r\n  background: #EFEFEF;\r\n  border-radius: 11px 0px 0px 11px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin: 40px 0 0 50px;\r\n  font-size: 12px;\r\n  line-height: 22px;\r\n  text-align: center;\r\n}\r\n\r\n.level-has {\r\n  width: 264px;\r\n  height: auto;\r\n  margin: 33px auto;\r\n}\r\n\r\n.level-has-item {\r\n  width: 264px;\r\n  height: 20px;\r\n}\r\n\r\n.level-lable {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  color: #FFF;\r\n  background-color: #26C541;\r\n  width: 13px;\r\n  height: 13px;\r\n  border-radius: 13px;\r\n  font-size: 13px;\r\n  text-align: center;\r\n  line-height: 13px;\r\n  margin: 3px 5px 0 0;\r\n}\r\n\r\n.has-info {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  font-size: 12px;\r\n  text-align: left;\r\n  line-height: 20px;\r\n}\r\n\r\n.set-object {\r\n  width: 288px;\r\n  height: 45px;\r\n  background: #003F88;\r\n  border-radius: 23px;\r\n  color: #FFF;\r\n  margin: 0 auto;\r\n  text-align: center;\r\n  line-height: 45px;\r\n  font-size: 14px;\r\n}\r\n\r\n.today-task {\r\n  width: 93%;\r\n  height: 273px;\r\n  background: #FFFFFF;\r\n  border-radius: 32px;\r\n  background: #FFFFFF;\r\n  position: absolute;\r\n  top: 196px;\r\n  left: 13px;\r\n}\r\n\r\n.content-today-count {\r\n  width: 60%;\r\n  height: 70px;\r\n  padding-left: 25px;\r\n}\r\n\r\n.today-count-item {\r\n  width: 75px;\r\n  height: 89px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  text-align: center;\r\n}\r\n\r\n.count-one {\r\n  color: #000000;\r\n  font-size: 22px;\r\n  display: inline-block;\r\n  text-align: center;\r\n  /* padding-top: 64rpx; */\r\n}\r\n\r\n.count-two {\r\n  color: #000000;\r\n  font-size: 12px;\r\n  display: inline-block;\r\n  text-align: center;\r\n  padding-top: 16px;\r\n}\r\n\r\n.count-title {\r\n  color: #5B5B5B;\r\n  font-size: 10px;\r\n  /* text-align: center; */\r\n  /* margin-top: 18rpx; */\r\n}\r\n\r\n.left {\r\n  width: 50px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin-right: 50px;\r\n}\r\n\r\n.center {\r\n  width: 50px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin-right: 50px;\r\n}\r\n\r\n.right {\r\n  width: 50px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.left-title,\r\n.right-title {\r\n  color: #959595;\r\n  font-size: 12px;\r\n  text-align: left;\r\n}\r\n\r\n.left-num {\r\n  color: #000;\r\n  font-size: 25px;\r\n  font-weight: bold;\r\n  padding: 4px 0;\r\n  text-align: left;\r\n}\r\n\r\n.left-bottom {\r\n  width: 36px;\r\n  height: 5px;\r\n  background: #D0F0FC;\r\n  border-radius: 0px;\r\n}\r\n\r\n.right-bottom {\r\n  width: 36px;\r\n  height: 5px;\r\n  background: #F6D8CB;\r\n  border-radius: 0px;\r\n}\r\n\r\n.learn-bottom {\r\n  width: 100%;\r\n  height: auto;\r\n  position: absolute;\r\n  top: 490px;\r\n  text-align: left;\r\n}\r\n\r\n.model-title {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 110px;\r\n  text-align: left;\r\n  font-size: 16px;\r\n  padding-left: 23px;\r\n}\r\n\r\n.learn-item {\r\n  background: linear-gradient(to right, #FFF, #DEEFFF);\r\n  width: 330px;\r\n  height: 85px;\r\n  position: relative;\r\n  /* top: 500px; */\r\n  margin: 20px auto;\r\n  border-radius: 20px;\r\n}\r\n\r\n.item-left {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 175px;\r\n  height: 85px;\r\n}\r\n\r\n.item-left-title {\r\n  font-size: 18px;\r\n  font-weight: bold;\r\n  color: #003F88;\r\n  padding: 18px 0 0 36px;\r\n}\r\n\r\n.item-left-finish {\r\n  font-size: 10px;\r\n  color: #BEA272;\r\n  padding: 4px 0 0 36px;\r\n}\r\n\r\n.item-left-finish-box {\r\n  background-color: #CECECE;\r\n  width: 140px;\r\n  height: 5px;\r\n  margin: 4px 0 0 36px;\r\n}\r\n\r\n.item-right-img {\r\n  width: 55px;\r\n  height: 55px;\r\n  padding-top: 17px;\r\n  padding-left: 80px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.item-right-btn {\r\n  width: 82px;\r\n  height: 29px;\r\n  margin-top: 29px;\r\n  margin-left: 60px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  background-color: #B8B8B8;\r\n  border-radius: 31px;\r\n  text-align: center;\r\n  line-height: 29px;\r\n  color: #FFF;\r\n  font-size: 12px;\r\n}\r\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Plant.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Plant.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Plant.vue?vue&type=template&id=6a1a03e7&scoped=true\"\nimport script from \"./Plant.vue?vue&type=script&lang=js\"\nexport * from \"./Plant.vue?vue&type=script&lang=js\"\nimport style0 from \"./Plant.vue?vue&type=style&index=0&id=6a1a03e7&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"6a1a03e7\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"ai\"},[_c('div',{staticClass:\"mian\"},[_vm._m(0),_vm._m(1),_c('div',{staticClass:\"level-box\"},[_c('div',{staticClass:\"level-item-box\",on:{\"click\":function($event){return _vm.set_aim_level(1)}}},[_c('div',{staticClass:\"bar bar0\",class:{ 'bar-check': _vm.level == 1 || _vm.aim_level >= 1 }},[(1 == _vm.level)?_c('div',{staticClass:\"user_level\"},[_vm._v(\" 我的水平 \"),_c('image',{staticClass:\"level-to\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\",\"mode\":\"widthFix\"}})]):_vm._e(),(1 == _vm.aim_level)?_c('div',{staticClass:\"user_level\"},[_vm._v(\" 目标水平 \"),_c('image',{staticClass:\"level-to\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\",\"mode\":\"widthFix\"}})]):_vm._e(),(1 != _vm.aim_level && 1 != _vm.level)?_c('div',{staticClass:\"user_level\"}):_vm._e()]),_c('div',{staticClass:\"level\"},[_vm._v(\"1\")])]),_c('div',{staticClass:\"level-item-box\",on:{\"click\":function($event){return _vm.set_aim_level(2)}}},[_c('div',{staticClass:\"bar bar1\",class:{ 'bar-check': _vm.level == 2 || _vm.aim_level >= 2 }},[(2 == _vm.level)?_c('div',{staticClass:\"user_level\"},[_vm._v(\" 我的水平 \"),_c('image',{staticClass:\"level-to\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\",\"mode\":\"widthFix\"}})]):_vm._e(),(2 == _vm.aim_level)?_c('div',{staticClass:\"user_level\"},[_vm._v(\" 目标水平 \"),_c('image',{staticClass:\"level-to\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\",\"mode\":\"widthFix\"}})]):_vm._e(),(2 != _vm.aim_level && 2 != _vm.level)?_c('div',{staticClass:\"user_level\"}):_vm._e()]),_c('div',{staticClass:\"level\"},[_vm._v(\"2\")])]),_c('div',{staticClass:\"level-item-box\",on:{\"click\":function($event){return _vm.set_aim_level(3)}}},[_c('div',{staticClass:\"bar bar2\",class:{ 'bar-check': _vm.level == 3 || _vm.aim_level >= 3 }},[(3 == _vm.level)?_c('div',{staticClass:\"user_level\"},[_vm._v(\" 我的水平 \"),_c('image',{staticClass:\"level-to\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\",\"mode\":\"widthFix\"}})]):_vm._e(),(3 == _vm.aim_level)?_c('div',{staticClass:\"user_level\"},[_vm._v(\" 目标水平 \"),_c('image',{staticClass:\"level-to\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\",\"mode\":\"widthFix\"}})]):_vm._e(),(3 != _vm.aim_level && 3 != _vm.level)?_c('div',{staticClass:\"user_level\"}):_vm._e()]),_c('div',{staticClass:\"level\"},[_vm._v(\"3\")])]),_c('div',{staticClass:\"level-item-box\",on:{\"click\":function($event){return _vm.set_aim_level(4)}}},[_c('div',{staticClass:\"bar bar3\",class:{ 'bar-check': _vm.level == 4 || _vm.aim_level >= 4 }},[(4 == _vm.level)?_c('div',{staticClass:\"user_level\"},[_vm._v(\" 我的水平 \"),_c('image',{staticClass:\"level-to\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\",\"mode\":\"widthFix\"}})]):_vm._e(),(4 == _vm.aim_level)?_c('div',{staticClass:\"user_level\"},[_vm._v(\" 目标水平 \"),_c('image',{staticClass:\"level-to\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\",\"mode\":\"widthFix\"}})]):_vm._e(),(4 != _vm.aim_level && 4 != _vm.level)?_c('div',{staticClass:\"user_level\"}):_vm._e()]),_c('div',{staticClass:\"level\"},[_vm._v(\"4\")])]),_c('div',{staticClass:\"level-item-box\",on:{\"click\":function($event){return _vm.set_aim_level(5)}}},[_c('div',{staticClass:\"bar bar4\",class:{ 'bar-check': _vm.level == 5 || _vm.aim_level >= 5 }},[(5 == _vm.level)?_c('div',{staticClass:\"user_level\"},[_vm._v(\" 我的水平 \"),_c('image',{staticClass:\"level-to\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\",\"mode\":\"widthFix\"}})]):_vm._e(),(5 == _vm.aim_level)?_c('div',{staticClass:\"user_level\"},[_vm._v(\" 目标水平 \"),_c('image',{staticClass:\"level-to\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\",\"mode\":\"widthFix\"}})]):_vm._e(),(5 != _vm.aim_level && 5 != _vm.level)?_c('div',{staticClass:\"user_level\"}):_vm._e()]),_c('div',{staticClass:\"level\"},[_vm._v(\"5\")])]),_c('div',{staticClass:\"level-item-box\",on:{\"click\":function($event){return _vm.set_aim_level(6)}}},[_c('div',{staticClass:\"bar bar5\",class:{ 'bar-check': _vm.level == 6 || _vm.aim_level >= 6 }},[(6 == _vm.level)?_c('div',{staticClass:\"user_level\"},[_vm._v(\" 我的水平 \"),_c('image',{staticClass:\"level-to\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\",\"mode\":\"widthFix\"}})]):_vm._e(),(6 == _vm.aim_level)?_c('div',{staticClass:\"user_level\"},[_vm._v(\" 目标水平 \"),_c('image',{staticClass:\"level-to\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\",\"mode\":\"widthFix\"}})]):_vm._e(),(6 != _vm.aim_level && 6 != _vm.level)?_c('div',{staticClass:\"user_level\"}):_vm._e()]),_c('div',{staticClass:\"level\"},[_vm._v(\"6\")])]),_c('div',{staticClass:\"level-item-box\",on:{\"click\":function($event){return _vm.set_aim_level(7)}}},[_c('div',{staticClass:\"bar bar6\",class:{ 'bar-check': _vm.level == 7 || _vm.aim_level >= 7 }},[(7 == _vm.level)?_c('div',{staticClass:\"user_level\"},[_vm._v(\" 我的水平 \"),_c('image',{staticClass:\"level-to\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\",\"mode\":\"widthFix\"}})]):_vm._e(),(7 == _vm.aim_level)?_c('div',{staticClass:\"user_level\"},[_vm._v(\" 目标水平 \"),_c('image',{staticClass:\"level-to\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\",\"mode\":\"widthFix\"}})]):_vm._e(),(7 != _vm.aim_level && 7 != _vm.level)?_c('div',{staticClass:\"user_level\"}):_vm._e()]),_c('div',{staticClass:\"level\"},[_vm._v(\"7\")])]),_c('div',{staticClass:\"level-item-box\",on:{\"click\":function($event){return _vm.set_aim_level(8)}}},[_c('div',{staticClass:\"bar bar7\",class:{ 'bar-check': _vm.level == 8 || _vm.aim_level >= 8 }},[(8 == _vm.level)?_c('div',{staticClass:\"user_level\"},[_vm._v(\" 我的水平 \"),_c('image',{staticClass:\"level-to\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\",\"mode\":\"widthFix\"}})]):_vm._e(),(8 == _vm.aim_level)?_c('div',{staticClass:\"user_level\"},[_vm._v(\" 目标水平 \"),_c('image',{staticClass:\"level-to\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\",\"mode\":\"widthFix\"}})]):_vm._e(),(8 != _vm.aim_level && 8 != _vm.level)?_c('div',{staticClass:\"user_level\"}):_vm._e()]),_c('div',{staticClass:\"level\"},[_vm._v(\"8\")])]),_c('div',{staticClass:\"level-item-box\",on:{\"click\":function($event){return _vm.set_aim_level(9)}}},[_c('div',{staticClass:\"bar bar8\",class:{ 'bar-check': _vm.level == 9 || _vm.aim_level >= 9 }},[(9 == _vm.level)?_c('div',{staticClass:\"user_level\"},[_vm._v(\" 我的水平 \"),_c('image',{staticClass:\"level-to\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\",\"mode\":\"widthFix\"}})]):_vm._e(),(9 == _vm.aim_level)?_c('div',{staticClass:\"user_level\"},[_vm._v(\" 目标水平 \"),_c('image',{staticClass:\"level-to\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\",\"mode\":\"widthFix\"}})]):_vm._e(),(9 != _vm.aim_level && 9 != _vm.level)?_c('div',{staticClass:\"user_level\"}):_vm._e()]),_c('div',{staticClass:\"level\"},[_vm._v(\"9\")])])]),_c('div',{staticClass:\"level-has\"},[_c('div',{staticClass:\"aim-level\"},[_vm._v(\"CSE \"+_vm._s(_vm.aim_level))]),_vm._l((_vm.LevelInfo),function(item,index){return _c('block',{key:index},[(_vm.aim_level == item.level)?_c('div',{staticClass:\"level-has-item\"},[_c('div',{staticClass:\"level-lable\"},[_vm._v(\"√\")]),_c('div',{staticClass:\"has-info\"},[_vm._v(\" \"+_vm._s(item.info)+\" \")])]):_vm._e()])})],2),_c('div',{staticClass:\"set-object\",on:{\"click\":_vm.set_plant_second}},[_vm._v(\"下一步\")])])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"top-progress\"},[_c('div',{staticClass:\"top-progress-now\",staticStyle:{\"width\":\"90%\"}})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"step-name\"},[_vm._v(\" Step 2 \"),_c('div',{staticClass:\"cn\"},[_vm._v(\"选择目标水平\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\r\n  <div class=\"ai\">\r\n    <div class=\"mian\">\r\n      <div class=\"top-progress\">\r\n        <div class=\"top-progress-now\" style=\"width: 90%;\"></div>\r\n      </div>\r\n      <div class=\"step-name\">\r\n        Step 2\r\n        <div class=\"cn\">选择目标水平</div>\r\n      </div>\r\n      <div class=\"level-box\">\r\n        <div class=\"level-item-box\" @click=\"set_aim_level(1)\">\r\n          <div class=\"bar bar0\" :class=\"{ 'bar-check': level == 1 || aim_level >= 1 }\">\r\n            <div v-if=\"1 == level\" class=\"user_level\">\r\n              我的水平\r\n              <image class=\"level-to\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\"\r\n                mode=\"widthFix\" />\r\n            </div>\r\n            <div v-if=\"1 == aim_level\" class=\"user_level\">\r\n              目标水平\r\n              <image class=\"level-to\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\"\r\n                mode=\"widthFix\" />\r\n            </div>\r\n            <div v-if=\"1 != aim_level && 1 != level\" class=\"user_level\"></div>\r\n          </div>\r\n          <div class=\"level\">1</div>\r\n        </div>\r\n        <div class=\"level-item-box\" @click=\"set_aim_level(2)\">\r\n          <div class=\"bar bar1\" :class=\"{ 'bar-check': level == 2 || aim_level >= 2 }\">\r\n            <div v-if=\"2 == level\" class=\"user_level\">\r\n              我的水平\r\n              <image class=\"level-to\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\"\r\n                mode=\"widthFix\" />\r\n            </div>\r\n            <div v-if=\"2 == aim_level\" class=\"user_level\">\r\n              目标水平\r\n              <image class=\"level-to\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\"\r\n                mode=\"widthFix\" />\r\n            </div>\r\n            <div v-if=\"2 != aim_level && 2 != level\" class=\"user_level\"></div>\r\n          </div>\r\n          <div class=\"level\">2</div>\r\n        </div>\r\n\r\n        <div class=\"level-item-box\" @click=\"set_aim_level(3)\">\r\n          <div class=\"bar bar2\" :class=\"{ 'bar-check': level == 3 || aim_level >= 3 }\">\r\n            <div v-if=\"3 == level\" class=\"user_level\">\r\n              我的水平\r\n              <image class=\"level-to\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\"\r\n                mode=\"widthFix\" />\r\n            </div>\r\n            <div v-if=\"3 == aim_level\" class=\"user_level\">\r\n              目标水平\r\n              <image class=\"level-to\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\"\r\n                mode=\"widthFix\" />\r\n            </div>\r\n            <div v-if=\"3 != aim_level && 3 != level\" class=\"user_level\"></div>\r\n          </div>\r\n          <div class=\"level\">3</div>\r\n        </div>\r\n\r\n        <div class=\"level-item-box\" @click=\"set_aim_level(4)\">\r\n          <div class=\"bar bar3\" :class=\"{ 'bar-check': level == 4 || aim_level >= 4 }\">\r\n            <div v-if=\"4 == level\" class=\"user_level\">\r\n              我的水平\r\n              <image class=\"level-to\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\"\r\n                mode=\"widthFix\" />\r\n            </div>\r\n            <div v-if=\"4 == aim_level\" class=\"user_level\">\r\n              目标水平\r\n              <image class=\"level-to\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\"\r\n                mode=\"widthFix\" />\r\n            </div>\r\n            <div v-if=\"4 != aim_level && 4 != level\" class=\"user_level\"></div>\r\n          </div>\r\n          <div class=\"level\">4</div>\r\n        </div>\r\n\r\n        <div class=\"level-item-box\" @click=\"set_aim_level(5)\">\r\n          <div class=\"bar bar4\" :class=\"{ 'bar-check': level == 5 || aim_level >= 5 }\">\r\n            <div v-if=\"5 == level\" class=\"user_level\">\r\n              我的水平\r\n              <image class=\"level-to\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\"\r\n                mode=\"widthFix\" />\r\n            </div>\r\n            <div v-if=\"5 == aim_level\" class=\"user_level\">\r\n              目标水平\r\n              <image class=\"level-to\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\"\r\n                mode=\"widthFix\" />\r\n            </div>\r\n            <div v-if=\"5 != aim_level && 5 != level\" class=\"user_level\"></div>\r\n          </div>\r\n          <div class=\"level\">5</div>\r\n        </div>\r\n\r\n        <div class=\"level-item-box\" @click=\"set_aim_level(6)\">\r\n          <div class=\"bar bar5\" :class=\"{ 'bar-check': level == 6 || aim_level >= 6 }\">\r\n            <div v-if=\"6 == level\" class=\"user_level\">\r\n              我的水平\r\n              <image class=\"level-to\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\"\r\n                mode=\"widthFix\" />\r\n            </div>\r\n            <div v-if=\"6 == aim_level\" class=\"user_level\">\r\n              目标水平\r\n              <image class=\"level-to\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\"\r\n                mode=\"widthFix\" />\r\n            </div>\r\n            <div v-if=\"6 != aim_level && 6 != level\" class=\"user_level\"></div>\r\n          </div>\r\n          <div class=\"level\">6</div>\r\n        </div>\r\n\r\n        <div class=\"level-item-box\" @click=\"set_aim_level(7)\">\r\n          <div class=\"bar bar6\" :class=\"{ 'bar-check': level == 7 || aim_level >= 7 }\">\r\n            <div v-if=\"7 == level\" class=\"user_level\">\r\n              我的水平\r\n              <image class=\"level-to\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\"\r\n                mode=\"widthFix\" />\r\n            </div>\r\n            <div v-if=\"7 == aim_level\" class=\"user_level\">\r\n              目标水平\r\n              <image class=\"level-to\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\"\r\n                mode=\"widthFix\" />\r\n            </div>\r\n            <div v-if=\"7 != aim_level && 7 != level\" class=\"user_level\"></div>\r\n          </div>\r\n          <div class=\"level\">7</div>\r\n        </div>\r\n        <div class=\"level-item-box\" @click=\"set_aim_level(8)\">\r\n          <div class=\"bar bar7\" :class=\"{ 'bar-check': level == 8 || aim_level >= 8 }\">\r\n            <div v-if=\"8 == level\" class=\"user_level\">\r\n              我的水平\r\n              <image class=\"level-to\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\"\r\n                mode=\"widthFix\" />\r\n            </div>\r\n            <div v-if=\"8 == aim_level\" class=\"user_level\">\r\n              目标水平\r\n              <image class=\"level-to\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\"\r\n                mode=\"widthFix\" />\r\n            </div>\r\n            <div v-if=\"8 != aim_level && 8 != level\" class=\"user_level\"></div>\r\n          </div>\r\n          <div class=\"level\">8</div>\r\n        </div>\r\n\r\n        <div class=\"level-item-box\" @click=\"set_aim_level(9)\">\r\n          <div class=\"bar bar8\" :class=\"{ 'bar-check': level == 9 || aim_level >= 9 }\">\r\n            <div v-if=\"9 == level\" class=\"user_level\">\r\n              我的水平\r\n              <image class=\"level-to\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\"\r\n                mode=\"widthFix\" />\r\n            </div>\r\n            <div v-if=\"9 == aim_level\" class=\"user_level\">\r\n              目标水平\r\n              <image class=\"level-to\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/level-to.png\"\r\n                mode=\"widthFix\" />\r\n            </div>\r\n            <div v-if=\"9 != aim_level && 9 != level\" class=\"user_level\"></div>\r\n          </div>\r\n          <div class=\"level\">9</div>\r\n        </div>\r\n      </div>\r\n      <div class=\"level-has\">\r\n        <div class=\"aim-level\">CSE {{ aim_level }}</div>\r\n        <block v-for=\"(item, index) in LevelInfo\" :key=\"index\">\r\n          <div class=\"level-has-item\" v-if=\"aim_level == item.level\">\r\n            <div class=\"level-lable\">√</div>\r\n            <div class=\"has-info\">\r\n              {{ item.info }}\r\n            </div>\r\n          </div>\r\n        </block>\r\n      </div>\r\n      <div class=\"set-object\" @click=\"set_plant_second\">下一步</div>\r\n    </div>\r\n  </div>\r\n</template>\r\n<script>\r\nimport { getPlant } from '@/api/plant'\r\nimport { getUserRowByToken } from '@/api/home'\r\nexport default {\r\n  name: 'Ai',\r\n  data() {\r\n    return {\r\n      level: 1,\r\n      aim_level: 0,\r\n      LevelInfo: [\r\n        {\r\n          level: 1,\r\n          info: '能理解日常生活中十分熟悉的简单语言材料，识别相关活动或身边事物的基本信息，理解基本词语的含义。'\r\n        },\r\n        {\r\n          level: 1,\r\n          info: '能用基本的、简短的话语与他人交流，互致问候，相互介绍或描述、陈述身边事物的基本信息，以及表明态度等，有时借助重复或手势、表情等非言语手段。'\r\n        },\r\n        {\r\n          level: 2,\r\n          info: '能理解日常生活中常见的简单语言材料，获取基本的事实性信息，把握主要内容。'\r\n        },\r\n        {\r\n          level: 2,\r\n          info: '能就熟悉的话题或身边的事物用简单的语言进行交流，陈述信息，叙述事件，描述情况，表达基本的交际意图，实现基本的交际目的。'\r\n        },\r\n        {\r\n          level: 3,\r\n          info: '能理解日常生活中的简单语言材料，获取特定或关键信息，抓住要点，推断他人的意图'\r\n        },\r\n        {\r\n          level: 3,\r\n          info: '能在日常生活或一般社交场合中用简单的语言与他人交流，描述个人经历、志向等，并能说明理由、表达观点等，表达基本准确、连贯、顺畅。'\r\n        },\r\n        {\r\n          level: 4,\r\n          info: '能理解一般社交场合中常见话题的语言材料，抓住主题和主要内容，把握主要事实与观点，清楚他人的意图和态度。'\r\n        },\r\n        {\r\n          level: 4,\r\n          info: '能在熟悉的场合就熟悉的话题进行交流，叙述事件发展，描绘事物状况，介绍相关活动，说明事物要点，简单论述个人观点等，表达较为准确、清晰、连贯。'\r\n        },\r\n        {\r\n          level: 5,\r\n          info: '能理解不同场合中一般性话题的语言材料，把握主旨，抓住重点，明晰事实、观点与细节，领悟他人的意图和态度。'\r\n        },\r\n        {\r\n          level: 5,\r\n          info: '能在较为熟悉的场合就学习、工作等话题进行交流、讨论、协商，表明观点和态度，就一般性话题进行较有效的描述、说明或阐述，表达准确、连贯、得体。'\r\n        },\r\n        {\r\n          level: 6,\r\n          info: '能理解多种话题（包括一般性专业话题）的语言材料，把握要点及其逻辑关系，分析、判断、评价材料中的观点、态度和隐含的意义。'\r\n        },\r\n        {\r\n          level: 6,\r\n          info: '能在熟悉的学术或工作交流中参与多种话题的讨论，有效传递信息，比较和评析不同的意见，发表见解，表达连贯、得体、顺畅，符合相关文体规范和语体要求。'\r\n        },\r\n        {\r\n          level: 7,\r\n          info: '能理解多种话题的语言材料，包括自己所学专业领域的学术性材料，准确把握主旨和要义，客观审视、评析材料的内容，理解深层含义。'\r\n        },\r\n        {\r\n          level: 7,\r\n          info: '能就多种相关学术和社会话题进行深入交流和讨论，有效地进行描述、说明、解释、论证和评析，表达规范、清晰、得体、顺畅。'\r\n        },\r\n        {\r\n          level: 8,\r\n          info: '能理解不同体裁和话题的语言材料，领悟其内涵和话语特征，包括语言风格。'\r\n        },\r\n        {\r\n          level: 8,\r\n          info: '能在多种场合熟练使用各种表达方式和策略进行有效的学术交流或与专业有关的交流，就不同的相关话题进行充分、准确、恰当的阐述、论证和评析，表达准确、流畅、连贯、得当。'\r\n        },\r\n        {\r\n          level: 9,\r\n          info: '能准确、透彻地理解和把握各种语言材料。'\r\n        },\r\n        {\r\n          level: 9,\r\n          info: '能自如地运用各种表达方式就各种话题进行深入沟通和交流，表达精确、自然、纯正，并体现一定的语言风格。'\r\n        },\r\n      ]\r\n    }\r\n  },\r\n  methods: {\r\n    async GetUserInfo() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await getUserRowByToken({ token: user.token })\r\n          this.userInfo = response.data\r\n          var user_level = response.data.listen_level + response.data.read_level + response.data.write_level + response.data.write_level\r\n          this.level = Math.floor(user_level / 4)\r\n          console.log(this.styleWidth)\r\n          this.getPlant()\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async getPlant() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await getPlant(user.sid)\r\n          const data = response.data\r\n          // this.level = data.level\r\n          if (response.code == 100) {\r\n            this.aim_level = data.aim_level\r\n          } else {\r\n            this.aim_level = this.level + 1\r\n          }\r\n\r\n\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async set_aim_level(aim_level) {\r\n      if (aim_level < this.level) {\r\n        this.$message({\r\n          message: '上进心哦',\r\n          center: true\r\n        })\r\n\r\n        return\r\n      }\r\n      this.aim_level = aim_level\r\n    },\r\n    async set_plant_second() {\r\n      console.log(this.aim_level)\r\n      if (this.aim_level < this.level) {\r\n        this.$message({\r\n          message: '上进心哦',\r\n          center: true\r\n        })\r\n\r\n        return\r\n      }\r\n      this.$router.push({\r\n        name: 'PlantSecondSet', query: {\r\n          aim_level: this.aim_level,\r\n          level: this.level\r\n        }\r\n      })\r\n    }\r\n  },\r\n  mounted() {\r\n    // 在组件挂载后立即获取任务数据\r\n    this.GetUserInfo()\r\n\r\n\r\n  }\r\n}\r\n</script>\r\n<style scoped>\r\n/* pages/plant/index.wxss */\r\n.ai {\r\n  background: linear-gradient(180deg, #E2F2FF 0%, #FFFFFF 100%);\r\n}\r\n\r\n.mian {\r\n  width: 340px;\r\n  height: auto;\r\n  margin: 0 auto;\r\n}\r\n\r\n.top-progress {\r\n  width: 320px;\r\n  height: 5px;\r\n  margin: 0 auto;\r\n  background-color: #FFFFFF;\r\n  border-radius: 3px;\r\n}\r\n\r\n.top-progress-now {\r\n  background: linear-gradient(270deg, #E2CCA6 0%, #B29360 100%);\r\n  height: 5px;\r\n  border-radius: 3px;\r\n}\r\n\r\n.step-name {\r\n  margin-top: 37px;\r\n  font-size: 26px;\r\n  font-weight: bold;\r\n  color: #000000;\r\n}\r\n\r\n.cn {\r\n  padding-top: 5px;\r\n  color: #8B8B8B;\r\n  font-size: 16px;\r\n  font-weight: normal;\r\n}\r\n\r\n.level-box {\r\n  width: 340px;\r\n  height: 220px;\r\n  margin-top: 78px;\r\n}\r\n\r\n.level-item-box {\r\n  width: 35px;\r\n  height: 220px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  text-align: center;\r\n  font-size: 14px;\r\n}\r\n\r\n.bar {\r\n  width: 30px;\r\n  height: 190px;\r\n  background: #F5F5F5;\r\n  border-radius: 21px;\r\n  margin-left: 11px;\r\n}\r\n\r\n.bar-check {\r\n  background: linear-gradient(to bottom, #4499EE 0%, #9CE4FF 100%);\r\n}\r\n\r\n.bar0 {\r\n  height: 20px;\r\n  margin-top: 170px;\r\n}\r\n\r\n.bar1 {\r\n  height: 47px;\r\n  margin-top: 143px;\r\n}\r\n\r\n.bar2 {\r\n  height: 74px;\r\n  margin-top: 116px;\r\n}\r\n\r\n.bar3 {\r\n  height: 101px;\r\n  margin-top: 89px;\r\n}\r\n\r\n.bar4 {\r\n  height: 121px;\r\n  margin-top: 69px;\r\n}\r\n\r\n.bar5 {\r\n  height: 154px;\r\n  margin-top: 36px;\r\n}\r\n\r\n.bar6 {\r\n  height: 170px;\r\n  margin-top: 20px;\r\n}\r\n\r\n.bar7 {\r\n  height: 180px;\r\n  margin-top: 10px;\r\n}\r\n\r\n.bar8 {\r\n  height: 190px;\r\n}\r\n\r\n.level {\r\n  height: 15px;\r\n  text-align: center;\r\n  width: 48px;\r\n}\r\n\r\n.user_level {\r\n  width: 48px;\r\n  height: 15px;\r\n  font-size: 12px;\r\n  color: #000000;\r\n  font-weight: bold;\r\n  position: relative;\r\n  text-align: center;\r\n  top: -45px;\r\n  left: -9px;\r\n}\r\n\r\n.level-has {\r\n  width: 264px;\r\n  height: auto;\r\n  margin: 33px auto 200px auto;\r\n}\r\n\r\n.aim-level {\r\n  font-size: 14px;\r\n  font-weight: bold;\r\n  margin-bottom: 15px;\r\n}\r\n\r\n.level-has-item {\r\n  width: 264px;\r\n  height: auto;\r\n  margin-bottom: 10px;\r\n}\r\n\r\n.level-to {\r\n  width: 19px;\r\n  height: 19px;\r\n  margin-top: 5px;\r\n}\r\n\r\n.level-lable {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  color: #FFF;\r\n  background-color: #26C541;\r\n  width: 12px;\r\n  height: 12px;\r\n  border-radius: 12px;\r\n  font-size: 12px;\r\n  text-align: center;\r\n  line-height: 12px;\r\n  margin: 3px 5px 0 0;\r\n}\r\n\r\n.has-info {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  font-size: 12px;\r\n  text-align: left;\r\n  /* line-height: 20px; */\r\n  width: 240px;\r\n\r\n}\r\n\r\n.set-object {\r\n  width: 288px;\r\n  height: 45px;\r\n  background: #003F88;\r\n  border-radius: 23px;\r\n  color: #FFF;\r\n  margin: 0 auto;\r\n  text-align: center;\r\n  line-height: 45px;\r\n  font-size: 14px;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./set_to.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./set_to.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./set_to.vue?vue&type=template&id=73702bea&scoped=true\"\nimport script from \"./set_to.vue?vue&type=script&lang=js\"\nexport * from \"./set_to.vue?vue&type=script&lang=js\"\nimport style0 from \"./set_to.vue?vue&type=style&index=0&id=73702bea&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"73702bea\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"active_list\"},[_c('van-nav-bar',{attrs:{\"title\":\"反思日志\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('van-tabs',{attrs:{\"color\":\"#6FDBFF\"},on:{\"click\":_vm.onClickActive},model:{value:(_vm.active),callback:function ($$v) {_vm.active=$$v},expression:\"active\"}},[_c('van-tab',{attrs:{\"title\":\"日志查看\"}},[_c('div',{staticClass:\"model-start\"},_vm._l((_vm.BookList),function(item,index){return _c('div',{key:index,staticClass:\"learn-item\"},[_c('div',{staticClass:\"learn-item-info\"},[_c('div',{staticClass:\"learn-item-title\"},[_vm._v(\" \"+_vm._s(item.title)+\" \")]),_c('div',{staticClass:\"learn-item-update-time\"},[_vm._v(_vm._s(item.set_date))])]),_c('div',{staticClass:\"btn-learn\",on:{\"click\":function($event){return _vm.EditNoteBook(item)}}},[_vm._v(\"编辑\")]),_c('div',{staticClass:\"btn-learn\",staticStyle:{\"margin-left\":\"10px\",\"color\":\"red\"},on:{\"click\":function($event){return _vm.DelNoteBook(item.id)}}},[_vm._v(\"删除\")])])}),0),(_vm.has_more)?_c('div',{staticClass:\"load-more\",on:{\"click\":_vm.load_more}},[_vm._v(\"点击加载更多~~\")]):_c('div',{staticClass:\"load-more-empty\"},[_vm._v(\"没有了~~\")])]),(!_vm.isEdit)?_c('van-tab',{attrs:{\"title\":\"新增日志\"}},[_c('van-field',{attrs:{\"required\":\"\",\"label\":\"日志标题\",\"placeholder\":\"请输入\"},model:{value:(_vm.noteTitle),callback:function ($$v) {_vm.noteTitle=$$v},expression:\"noteTitle\"}}),_c('van-field',{attrs:{\"required\":\"\",\"label\":\"选择日期\",\"placeholder\":\"请选择日期\"},on:{\"click\":function($event){_vm.show = true}},model:{value:(_vm.date),callback:function ($$v) {_vm.date=$$v},expression:\"date\"}}),_c('van-calendar',{attrs:{\"min-date\":_vm.minDate,\"show-confirm\":false},on:{\"confirm\":_vm.onConfirm},model:{value:(_vm.show),callback:function ($$v) {_vm.show=$$v},expression:\"show\"}}),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.writing),expression:\"writing\"}],attrs:{\"maxlength\":\"8000\",\"placeholder\":\"请输入日志内容\"},domProps:{\"value\":(_vm.writing)},on:{\"input\":function($event){if($event.target.composing)return;_vm.writing=$event.target.value}}}),_vm._v(\" \"),_c('div',{staticClass:\"btn-box\"},[_c('span',{on:{\"click\":_vm.clear_input}},[_vm._v(\"一键清空\")]),_c('div',{staticClass:\"submit-btn\",on:{\"click\":_vm.submitNote}},[_vm._v(\"保存\")])])],1):_vm._e(),(_vm.isEdit)?_c('van-tab',{attrs:{\"title\":\"编辑日志\"}},[_c('van-field',{attrs:{\"required\":\"\",\"label\":\"日志标题\",\"placeholder\":\"请输入\"},model:{value:(_vm.noteTitle),callback:function ($$v) {_vm.noteTitle=$$v},expression:\"noteTitle\"}}),_c('van-field',{attrs:{\"required\":\"\",\"label\":\"选择日期\",\"placeholder\":\"请选择日期\"},on:{\"click\":function($event){_vm.show = true}},model:{value:(_vm.date),callback:function ($$v) {_vm.date=$$v},expression:\"date\"}}),_c('van-calendar',{attrs:{\"min-date\":_vm.minDate,\"show-confirm\":false},on:{\"confirm\":_vm.onConfirm},model:{value:(_vm.show),callback:function ($$v) {_vm.show=$$v},expression:\"show\"}}),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.writing),expression:\"writing\"}],attrs:{\"maxlength\":\"8000\",\"placeholder\":\"请输入日志内容\"},domProps:{\"value\":(_vm.writing)},on:{\"input\":function($event){if($event.target.composing)return;_vm.writing=$event.target.value}}}),_vm._v(\" \"),_c('div',{staticClass:\"btn-box\"},[_c('span',{on:{\"click\":_vm.clear_input}},[_vm._v(\"一键清空\")]),_c('div',{staticClass:\"submit-btn\",on:{\"click\":_vm.EditNote}},[_vm._v(\"保存\")])])],1):_vm._e()],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"active_list\">\r\n        <van-nav-bar title=\"反思日志\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <van-tabs v-model=\"active\" color=\"#6FDBFF\" @click=\"onClickActive\">\r\n            <van-tab title=\"日志查看\">\r\n                <div class=\"model-start\">\r\n                    <div class=\"learn-item\" v-for=\"(item, index) in BookList\" :key=\"index\">\r\n                        <div class=\"learn-item-info\">\r\n                            <div class=\"learn-item-title\">\r\n                                {{ item.title }}\r\n                            </div>\r\n                            <div class=\"learn-item-update-time\">{{ item.set_date }}</div>\r\n                        </div>\r\n                        <div class=\"btn-learn\" @click=\"EditNoteBook(item)\">编辑</div>\r\n                        <div class=\"btn-learn\" style=\"margin-left: 10px;color: red;\" @click=\"DelNoteBook(item.id)\">删除</div>\r\n                    </div>\r\n                </div>\r\n                <div class=\"load-more\" v-if=\"has_more\" @click=\"load_more\">点击加载更多~~</div>\r\n                <div class=\"load-more-empty\" v-else>没有了~~</div>\r\n            </van-tab>\r\n            <van-tab title=\"新增日志\" v-if=\"!isEdit\">\r\n                <van-field v-model=\"noteTitle\" required label=\"日志标题\" placeholder=\"请输入\" />\r\n                <van-field v-model=\"date\" required label=\"选择日期\" placeholder=\"请选择日期\" @click=\"show = true\" />\r\n                <van-calendar v-model=\"show\" :min-date=\"minDate\" :show-confirm=\"false\" @confirm=\"onConfirm\" />\r\n                <textarea v-model=\"writing\" maxlength=\"8000\" placeholder=\"请输入日志内容\" />\r\n                <div class=\"btn-box\">\r\n                    <span @click=\"clear_input\">一键清空</span>\r\n                    <div class=\"submit-btn\" @click=\"submitNote\">保存</div>\r\n                </div>\r\n            </van-tab>\r\n            <van-tab title=\"编辑日志\" v-if=\"isEdit\">\r\n                <van-field v-model=\"noteTitle\" required label=\"日志标题\" placeholder=\"请输入\" />\r\n                <van-field v-model=\"date\" required label=\"选择日期\" placeholder=\"请选择日期\" @click=\"show = true\" />\r\n                <van-calendar v-model=\"show\" :min-date=\"minDate\" :show-confirm=\"false\" @confirm=\"onConfirm\" />\r\n                <textarea v-model=\"writing\" maxlength=\"8000\" placeholder=\"请输入日志内容\" />\r\n                <div class=\"btn-box\">\r\n                    <span @click=\"clear_input\">一键清空</span>\r\n                    <div class=\"submit-btn\" @click=\"EditNote\">保存</div>\r\n                </div>\r\n            </van-tab>\r\n        </van-tabs>\r\n    </div>\r\n</template>\r\n<script>\r\nimport MD5 from 'crypto-js/md5'\r\nimport { AddNoteBook, EditNoteBook, getNoteBook, getNoteBookById, delNoteBook } from '@/api/user'\r\nexport default {\r\n    name: 'ActiveList',\r\n    data() {\r\n        return {\r\n            date: '',\r\n            show: false,\r\n            minDate: new Date(2025, 11, 31),\r\n            noteTitle: '',\r\n            writing: '',\r\n            BookList: [],\r\n            check_type: 1,\r\n            page: 1,\r\n            active: 0,\r\n            has_more: true,\r\n            has_more1: true,\r\n            total_all: 0,\r\n            total_all1: 0,\r\n            isEdit: false\r\n        }\r\n    },\r\n\r\n    methods: {\r\n        onClickActive(index) {\r\n            this.active = index\r\n            if (this.active === 0) {\r\n                this.isEdit = false\r\n            }\r\n        },\r\n        formatDate(date) {\r\n\r\n            var day = date.getDate()\r\n            var now_month = date.getMonth() + 1;\r\n            if (now_month < 10) {\r\n                now_month = '0' + now_month\r\n            }\r\n            if (day < 10) {\r\n                day = '0' + day\r\n            }\r\n            return `${date.getFullYear()}-${now_month}-${day}`;\r\n        },\r\n        onConfirm(date) {\r\n            this.show = false;\r\n            this.date = this.formatDate(date);\r\n        },\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        async load_more() {\r\n            this.page++\r\n            this.getNoteBookList()\r\n        },\r\n\r\n        async getNoteBookList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                console.log(user)\r\n                if (user && user.sid) {\r\n                    // const response = await getNoteBook({ sid: user.sid, page: this.page })\r\n                    const params = {sid: user.sid, page: this.page}\r\n                    const sign = MD5(JSON.stringify(params) + 'zjuenglish').toString()\r\n                    const response = await getNoteBook({ sid: user.sid, page: this.page,check:sign})\r\n                    if (response.code !== 100) {\r\n                        this.has_more = false\r\n                        return\r\n                    }\r\n                    const data = response.data\r\n                    this.total_all = response.data.total\r\n                    if (data.length < 10) {\r\n                        this.has_more = false\r\n                    }\r\n                    this.BookList = data.concat(this.BookList)\r\n                    this.active = 0\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async submitNote() {\r\n            const user = JSON.parse(localStorage.getItem('user'));\r\n            if (user && user.sid) {\r\n                const params = {sid: user.sid, title: this.noteTitle, set_date: this.date, content: this.writing}\r\n                const sign = MD5(JSON.stringify(params) + 'zjuenglish').toString()\r\n                const response = await AddNoteBook({ sid: user.sid, title: this.noteTitle, set_date: this.date, content: this.writing,check:sign })\r\n                if (response.code !== 100) {\r\n                    console.error('新增失败')\r\n                    return\r\n                }\r\n                this.onClickActive(0)\r\n                this.BookList = []\r\n                this.page = 1\r\n                this.getNoteBookList()\r\n            }\r\n        },\r\n        async EditNote() {\r\n            const user = JSON.parse(localStorage.getItem('user'));\r\n            if (user && user.sid) {\r\n                const params = {id: this.noteId, title: this.noteTitle, set_date: this.date, content: this.writing}\r\n                const sign = MD5(JSON.stringify(params) + 'zjuenglish').toString()\r\n                const response = await EditNoteBook({ id: this.noteId, title: this.noteTitle, set_date: this.date, content: this.writing,check:sign })\r\n                if (response.code !== 100) {\r\n                    console.error('新增失败')\r\n                    return\r\n                }\r\n                this.onClickActive(0)\r\n                this.BookList = []\r\n                this.page = 1\r\n                this.getNoteBookList()\r\n            }\r\n        },\r\n        async DelNoteBook(noteId){\r\n            const user = JSON.parse(localStorage.getItem('user'));\r\n            if (user && user.sid) {\r\n                const response = await delNoteBook({ id: noteId })\r\n                if (response.code !== 100) {\r\n                    console.error('删除失败')\r\n                    return\r\n                }\r\n                this.onClickActive(0)\r\n                this.BookList = []\r\n                this.page = 1\r\n                this.getNoteBookList()\r\n            }\r\n        },\r\n        async EditNoteBook(note) {\r\n            this.active = 1\r\n            this.isEdit = true\r\n            this.noteTitle = note.title\r\n            this.noteId = note.id\r\n            this.date = note.set_date\r\n            this.writing = note.content\r\n        },\r\n        async clear_input() {\r\n            this.writing = ''\r\n        },\r\n    },\r\n    mounted() {\r\n        this.active = this.$route.query.now_status;\r\n        this.getNoteBookList()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n.stu-info {\r\n    width: 330px;\r\n    height: 40px;\r\n}\r\n\r\n.active_list {\r\n    width: 100vw;\r\n    height: 100vh;\r\n}\r\n\r\ntextarea {\r\n    width: 86vw;\r\n    height: 500px;\r\n    margin: 2% 4vw;\r\n    font-size: 14px;\r\n    border: 1px solid lightgray;\r\n    padding: 10px 2vw;\r\n}\r\n\r\n.btn-box {\r\n    width: 90vw;\r\n    padding: 0 5vw;\r\n    height: 55px;\r\n    box-shadow: 0rpx -2px 6px 1px rgba(80, 143, 206, 0.1);\r\n    position: fixed;\r\n    bottom: 0;\r\n    padding-top: 27px;\r\n}\r\n\r\nspan {\r\n    padding: 30px 25px 0 7px;\r\n    font-size: 12px;\r\n    height: 25px;\r\n    line-height: 25px;\r\n    color: #A1A1A1;\r\n}\r\n\r\n.submit-btn {\r\n    width: 118px;\r\n    height: 36px;\r\n    background: #003F88;\r\n    border-radius: 20px;\r\n    color: #FFF;\r\n    text-align: center;\r\n    line-height: 36px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.count-info {\r\n    width: 30%;\r\n    height: 40px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.right-count,\r\n.total-count {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.right-box {\r\n    width: 70%;\r\n    height: 40px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    font-size: 14px;\r\n}\r\n\r\n.right-avg {\r\n    width: 100%;\r\n    height: 20px;\r\n    line-height: 20px;\r\n}\r\n\r\n.submit-time {\r\n    width: 100%;\r\n    height: 20px;\r\n    line-height: 20px;\r\n}\r\n\r\n.learn-item {\r\n    width: 330px;\r\n    height: 80px;\r\n    border-style: solid;\r\n    box-shadow: 0px 2px 10px 1px rgba(80, 143, 206, 0.1);\r\n    border-width: 0px;\r\n    margin: 11px auto;\r\n    border-radius: 20px;\r\n    background-color: #FFF;\r\n    padding: 0 10px;\r\n}\r\n\r\n.learn-item-finished {\r\n    width: 330px;\r\n    height: 130px;\r\n    border-style: solid;\r\n    box-shadow: 0px 2px 10px 1px rgba(80, 143, 206, 0.1);\r\n    border-width: 0px;\r\n    margin: 11px auto;\r\n    border-radius: 20px;\r\n    background-color: #FFF;\r\n}\r\n\r\n.learn-img {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 58px;\r\n    height: 58px;\r\n    margin: 10px 6px 0 12px;\r\n    border-radius: 10px;\r\n}\r\n\r\n\r\n.learn-item-info {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 240px;\r\n    /* height: auto; */\r\n    height: 50px;\r\n    line-height: 20px;\r\n    padding-top: 21px;\r\n    text-align: left;\r\n    /* padding: 10px 0; */\r\n}\r\n\r\n.learn-item-title {\r\n    width: 220px;\r\n    font-size: 12px;\r\n    font-weight: bold;\r\n    overflow: hidden;\r\n    text-overflow: ellipsis;\r\n    white-space: nowrap;\r\n    text-align: left;\r\n}\r\n\r\n.learn-item-content {\r\n    width: 220px;\r\n    font-size: 12px;\r\n    text-align: left;\r\n}\r\n\r\n.learn-item-update-time {\r\n    font-size: 12px;\r\n    color: #979797;\r\n}\r\n\r\n.btn-learn {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    color: #003F88;\r\n    font-size: 12px;\r\n    height: 85px;\r\n    line-height: 85px;\r\n}\r\n\r\n.load-more,\r\n.load-more-empty {\r\n    text-align: center;\r\n    font-size: 12px;\r\n    width: 100%;\r\n    height: 40px;\r\n    line-height: 40px;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Note.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Note.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Note.vue?vue&type=template&id=70c0e28d&scoped=true\"\nimport script from \"./Note.vue?vue&type=script&lang=js\"\nexport * from \"./Note.vue?vue&type=script&lang=js\"\nimport style0 from \"./Note.vue?vue&type=style&index=0&id=70c0e28d&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"70c0e28d\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"ai\"},[_c('van-nav-bar',{attrs:{\"title\":\"提升计划\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticClass:\"main\"},[_vm._m(0),_c('div',{staticClass:\"reset-test\",on:{\"click\":_vm.to_self_test}},[_vm._v(\"等级不准，重新测评\")])]),_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"can-check\"},[_c('div',{staticClass:\"can-check-title\"},[_vm._v(\"侧重哪方面提升（多选）\")]),_c('div',{staticClass:\"can-check-lable\"},_vm._l((_vm.listCate),function(item,index){return _c('div',{key:index,staticClass:\"lable-item\",class:{ 'lable-item-check': item.is_check == 1 },on:{\"click\":function($event){return _vm.check_list_cate(item)}}},[_vm._v(_vm._s(item.lable_name)+\" \")])}),0)]),_c('div',{staticClass:\"can-check\"},[_c('div',{staticClass:\"can-check-title\"},[_vm._v(\"感兴趣的话题（多选）\")]),_c('div',{staticClass:\"can-check-lable\"},_vm._l((_vm.subjectCate),function(item,index){return _c('div',{key:index,staticClass:\"lable-item\",class:{ 'lable-item-check': item.is_check == 1 },on:{\"click\":function($event){return _vm.check_subject_cate(item)}}},[_vm._v(_vm._s(item.name)+\" \")])}),0)]),_c('div',{staticClass:\"can-check\"},[_c('div',{staticClass:\"can-check-title\"},[_vm._v(\"每天学习时长\")]),_c('div',{staticClass:\"can-check-lable\"},[_c('div',{staticClass:\"lable-item\",class:{ 'lable-item-check': _vm.check_time == 0 },on:{\"click\":function($event){return _vm.set_check_time(0)}}},[_vm._v(\" 60min/天 \")]),_c('div',{staticClass:\"lable-item\",class:{ 'lable-item-check': _vm.check_time == 1 },on:{\"click\":function($event){return _vm.set_check_time(1)}}},[_vm._v(\" 30min/天 \")]),_c('div',{staticClass:\"lable-item\",class:{ 'lable-item-check': _vm.check_time == 2 },on:{\"click\":function($event){return _vm.set_check_time(2)}}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.user_time),expression:\"user_time\"}],staticClass:\"set-min\",class:{ 'set-min1': _vm.check_time == 2 },attrs:{\"placeholder-class\":\"set-min-p\",\"bindinput\":\"getInputValue\",\"type\":\"number\",\"placeholder\":\"自定义\"},domProps:{\"value\":(_vm.user_time)},on:{\"input\":function($event){if($event.target.composing)return;_vm.user_time=$event.target.value}}}),_vm._v(\" min/天 \")])])])]),_c('div',{staticClass:\"update-btn\",on:{\"click\":_vm.submit}},[_vm._v(\"确定\")])],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"main-left\"},[_c('div',{staticClass:\"top-desc\"},[_vm._v(\"选择计划内容\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\r\n  <div class=\"ai\">\r\n    <van-nav-bar title=\"提升计划\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n    <div class=\"main\">\r\n      <div class=\"main-left\">\r\n        <div class=\"top-desc\">选择计划内容</div>\r\n      </div>\r\n      <div class=\"reset-test\" @click=\"to_self_test\">等级不准，重新测评</div>\r\n    </div>\r\n    <div class=\"content\">\r\n      <div class=\"can-check\">\r\n        <div class=\"can-check-title\">侧重哪方面提升（多选）</div>\r\n        <div class=\"can-check-lable\">\r\n          <div class=\"lable-item\" :class=\"{ 'lable-item-check': item.is_check == 1 }\" v-for=\"(item, index) in listCate\"\r\n            :key=\"index\" @click=\"check_list_cate(item)\">{{ item.lable_name\r\n            }}\r\n          </div>\r\n        </div>\r\n      </div>\r\n      <div class=\"can-check\">\r\n        <div class=\"can-check-title\">感兴趣的话题（多选）</div>\r\n        <div class=\"can-check-lable\">\r\n          <div class=\"lable-item\" :class=\"{ 'lable-item-check': item.is_check == 1 }\"\r\n            v-for=\"(item, index) in subjectCate\" :key=\"index\" @click=\"check_subject_cate(item)\">{{ item.name\r\n            }}\r\n          </div>\r\n        </div>\r\n      </div>\r\n      <div class=\"can-check\">\r\n        <div class=\"can-check-title\">每天学习时长</div>\r\n        <div class=\"can-check-lable\">\r\n          <div @click=\"set_check_time(0)\" class=\"lable-item\" :class=\"{ 'lable-item-check': check_time == 0 }\">\r\n            60min/天\r\n          </div>\r\n          <div @click=\"set_check_time(1)\" class=\"lable-item\" :class=\"{ 'lable-item-check': check_time == 1 }\">\r\n            30min/天\r\n          </div>\r\n          <div @click=\"set_check_time(2)\" class=\"lable-item\" :class=\"{ 'lable-item-check': check_time == 2 }\">\r\n            <input placeholder-class=\"set-min-p\" class=\"set-min\" :class=\"{ 'set-min1': check_time == 2 }\"\r\n              bindinput='getInputValue' v-model=\"user_time\" type=\"number\" placeholder=\"自定义\" />\r\n\r\n            min/天\r\n          </div>\r\n\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n    <div class=\"update-btn\" @click=\"submit\">确定</div>\r\n  </div>\r\n</template>\r\n<script>\r\nimport { getPlant, subjectCateGet, PlantSave } from '@/api/plant'\r\nimport { getUserRowByToken } from '@/api/home'\r\nexport default {\r\n  name: 'Ai',\r\n  data() {\r\n    return {\r\n      user_time: '',\r\n      listCate: [{\r\n        id: 1,\r\n        lable_name: '听力',\r\n        is_check: 0\r\n      },\r\n      {\r\n        id: 2,\r\n        lable_name: '阅读',\r\n        is_check: 0\r\n      },\r\n      {\r\n        id: 3,\r\n        lable_name: '口语',\r\n        is_check: 0\r\n      },\r\n      {\r\n        id: 4,\r\n        lable_name: '写作',\r\n        is_check: 0\r\n      },\r\n      ],\r\n      subjectCate: [],\r\n      check_time: 0,\r\n      subject_str_arr: [],\r\n      type_str_arr: []\r\n    }\r\n  },\r\n  methods: {\r\n    async GetUserInfo() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await getUserRowByToken({ token: user.token })\r\n          this.userInfo = response.data\r\n          var user_level = response.data.listen_level + response.data.read_level + response.data.write_level + response.data.listen_level\r\n          this.level = Math.floor(user_level/4)\r\n          console.log(this.styleWidth)\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async onClickLeft() {\r\n      history.back()\r\n    },\r\n    async set_check_time(val) {\r\n      console.log(val)\r\n      this.check_time = val\r\n    },\r\n\r\n    async getPlant() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await getPlant(user.sid)\r\n          const data = response.data\r\n          var listCate = this.listCate\r\n          var subject_str = data.subject_str.slice(0, -1)\r\n          var type_str = data.type_str.slice(0, -1)\r\n\r\n          subject_str = subject_str.split(/[,，]/)\r\n          type_str = type_str.split(/[,，]/)\r\n          type_str.forEach(val => {\r\n            listCate.forEach(item => {\r\n              if (val === item.lable_name) {\r\n                item.is_check = 1\r\n              }\r\n            })\r\n          })\r\n\r\n          this.subject_str_arr = subject_str,\r\n            this.listCate = listCate,\r\n            this.aim_level = data.aim_level\r\n            //this.level = data.level\r\n\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async subjectCateGet() {\r\n      const response = await subjectCateGet()\r\n      var subject_str = this.subject_str_arr\r\n      var subjectCate = response.data\r\n      subjectCate.forEach(val => {\r\n        val.is_check = 0\r\n        subject_str.forEach(v => {\r\n          if (v == val.name) {\r\n            val.is_check = 1;\r\n          }\r\n        })\r\n      })\r\n      this.subjectCate = subjectCate\r\n    },\r\n    //选择侧重方面\r\n    async check_list_cate(item) {\r\n      var listCate = this.listCate\r\n      listCate.forEach(val => {\r\n        if (val.id == item.id) {\r\n          if (val.is_check == 0) {\r\n            val.is_check = 1;\r\n          } else {\r\n            val.is_check = 0\r\n          }\r\n        }\r\n      })\r\n      this.listCate = listCate\r\n    },\r\n    //选择感兴趣的话题\r\n    async check_subject_cate(item) {\r\n      var subjectCate = this.subjectCate\r\n      subjectCate.forEach(val => {\r\n        if (val.id == item.id) {\r\n          if (val.is_check == 0) {\r\n            val.is_check = 1;\r\n          } else {\r\n            val.is_check = 0\r\n          }\r\n        }\r\n      })\r\n      this.subjectCate = subjectCate\r\n    },\r\n    async to_self_test() {\r\n      this.$router.push({ name: 'Exam' })\r\n    },\r\n    async submit() {\r\n      const user = JSON.parse(localStorage.getItem('user'))\r\n      var type_str = ''\r\n      var subject_str = ''\r\n      var hour_str = 0\r\n      var hour_type = this.check_time\r\n      var listCate = this.listCate\r\n      var subjectCate = this.subjectCate\r\n      listCate.forEach(val => {\r\n        if (val.is_check == 1) {\r\n          type_str += val.lable_name + ','\r\n        }\r\n      })\r\n      subjectCate.forEach(item => {\r\n        if (item.is_check == 1) {\r\n          subject_str += item.name + ','\r\n        }\r\n      })\r\n      if (hour_type == 0) {\r\n        hour_str = 60\r\n      }\r\n      if (hour_type == 1) {\r\n        hour_str = 30\r\n      }\r\n      if (hour_type == 2) {\r\n        hour_str = this.user_time\r\n      }\r\n      console.log(this.user_time)\r\n      if (hour_str > 24 * 60 || hour_str < 10) {\r\n        alert('请输入合法时间')\r\n        return\r\n      }\r\n      const response = await PlantSave({\r\n        sid: user.sid,\r\n        type_str: type_str,\r\n        subject_str: subject_str,\r\n        hour_str: hour_str,\r\n        level: this.level,\r\n        aim_level: this.aim_level\r\n      })\r\n      if (response.code == 100) {\r\n        this.$router.push({ name: 'Plant' })\r\n      }\r\n    }\r\n  },\r\n  mounted() {\r\n    // 在组件挂载后立即获取任务数据\r\n    this.aim_level = this.$route.query.aim_level;\r\n    this.level = this.$route.query.level;\r\n    this.GetUserInfo()\r\n    this.getPlant()\r\n    this.subjectCateGet()\r\n  }\r\n}\r\n</script>\r\n<style scoped>\r\n/* pages/plant/index.wxss */\r\n.ai {\r\n  background-color: #FFFFFF;\r\n  height: auto;\r\n  overflow-y: auto;\r\n}\r\n\r\n.main {\r\n  width: 100vw;\r\n  height: 311px;\r\n  background: linear-gradient(180deg, #E2F2FF 0%, #FFFFFF 100%);\r\n  border-radius: 0px;\r\n  padding-top: 20px;\r\n}\r\n\r\n.main-left {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin-right: 106px;\r\n}\r\n\r\n.top-title {\r\n  padding: 0 0 0 32px;\r\n  font-size: 22px;\r\n  font-weight: bold;\r\n}\r\n\r\n.top-desc {\r\n  color: #8B8B8B;\r\n  font-size: 16px;\r\n  padding: 4px 0 0 30px;\r\n}\r\n\r\n.reset-test {\r\n  width: 133px;\r\n  height: 22px;\r\n  background: #EFEFEF;\r\n  border-radius: 11px 0px 0px 11px;\r\n  font-family: Microsoft YaHei, Microsoft YaHei;\r\n  font-weight: 400;\r\n  font-size: 12px;\r\n  color: #4E4E4E;\r\n  line-height: 22px;\r\n  text-align: center;\r\n  font-style: normal;\r\n  text-transform: none;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.content {\r\n  width: 315px;\r\n  height: auto;\r\n  margin: -250px auto 0 auto;\r\n  text-align: left;\r\n}\r\n\r\n.can-check-title {\r\n  font-size: 12px;\r\n  padding: 10px 0;\r\n  color: #000;\r\n}\r\n\r\n.lable-item {\r\n  padding: 0px 12px;\r\n  height: 29px;\r\n  border: 1px solid #707070;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  border-radius: 15px;\r\n  color: #7D7D7D;\r\n  font-size: 12px;\r\n  line-height: 29px;\r\n  margin: 10px 5px;\r\n}\r\n\r\n.set-min {\r\n  width: 40px !important;\r\n  line-height: 24px !important;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  padding-top: 4px;\r\n  border: none;\r\n  color: #000;\r\n}\r\n\r\n.set-min1 {\r\n  color: #FFF;\r\n  background: linear-gradient(180deg, #4499EE 0%, #9CE4FF 100%);\r\n\r\n}\r\n\r\n.set-min-p-check {\r\n  color: #FFF;\r\n}\r\n\r\n.lable-item-check {\r\n  color: #FFF;\r\n  background: linear-gradient(180deg, #4499EE 0%, #9CE4FF 100%);\r\n  border: none;\r\n}\r\n\r\n.update-btn {\r\n  width: 286px;\r\n  height: 45px;\r\n  background: #003F88;\r\n  border-radius: 23px;\r\n  line-height: 45px;\r\n  text-align: center;\r\n  color: #FFF;\r\n  font-size: 14px;\r\n  margin: 10px auto;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./second.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./second.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./second.vue?vue&type=template&id=157b7ff9&scoped=true\"\nimport script from \"./second.vue?vue&type=script&lang=js\"\nexport * from \"./second.vue?vue&type=script&lang=js\"\nimport style0 from \"./second.vue?vue&type=style&index=0&id=157b7ff9&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"157b7ff9\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"ai\"},[_c('div',{staticClass:\"main\"},[_vm._m(0),_c('div',{staticClass:\"reset-test\",on:{\"click\":_vm.to_self_test}},[_vm._v(\"等级不准，重新测评\")])]),_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"can-check\"},[_c('div',{staticClass:\"can-check-title\"},[_vm._v(\"侧重哪方面提升（多选）\")]),_c('div',{staticClass:\"can-check-lable\"},_vm._l((_vm.listCate),function(item,index){return _c('div',{key:index,staticClass:\"lable-item\",class:{ 'lable-item-check': item.is_check == 1 },on:{\"click\":function($event){return _vm.check_list_cate(item)}}},[_vm._v(_vm._s(item.lable_name)+\" \")])}),0)]),_c('div',{staticClass:\"can-check\"},[_c('div',{staticClass:\"can-check-title\"},[_vm._v(\"感兴趣的话题（多选）\")]),_c('div',{staticClass:\"can-check-lable\"},_vm._l((_vm.subjectCate),function(item,index){return _c('div',{key:index,staticClass:\"lable-item\",class:{ 'lable-item-check': item.is_check == 1 },on:{\"click\":function($event){return _vm.check_subject_cate(item)}}},[_vm._v(_vm._s(item.name)+\" \")])}),0)]),_c('div',{staticClass:\"can-check\"},[_c('div',{staticClass:\"can-check-title\"},[_vm._v(\"每天学习时长\")]),_c('div',{staticClass:\"can-check-lable\"},[_c('div',{staticClass:\"lable-item\",class:{ 'lable-item-check': _vm.check_time == 0 },on:{\"click\":function($event){return _vm.set_check_time(0)}}},[_vm._v(\" 60min/天 \")]),_c('div',{staticClass:\"lable-item\",class:{ 'lable-item-check': _vm.check_time == 1 },on:{\"click\":function($event){return _vm.set_check_time(1)}}},[_vm._v(\" 30min/天 \")]),_c('div',{staticClass:\"lable-item\",class:{ 'lable-item-check': _vm.check_time == 2 },on:{\"click\":function($event){return _vm.set_check_time(2)}}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.user_time),expression:\"user_time\"}],staticClass:\"set-min\",class:{ 'set-min1': _vm.check_time == 2 },attrs:{\"placeholder-class\":\"set-min-p\",\"bindinput\":\"getInputValue\",\"type\":\"number\",\"placeholder\":\"自定义\"},domProps:{\"value\":(_vm.user_time)},on:{\"input\":function($event){if($event.target.composing)return;_vm.user_time=$event.target.value}}}),_vm._v(\" min/天 \")])])])]),_c('div',{staticClass:\"update-btn\",on:{\"click\":_vm.submit}},[_vm._v(\"确定\")])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"main-left\"},[_c('div',{staticClass:\"top-title\"},[_vm._v(\" Step 3\")]),_c('div',{staticClass:\"top-desc\"},[_vm._v(\"选择计划内容\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"ai\">\r\n        <div class=\"main\">\r\n            <div class=\"main-left\">\r\n                <div class=\"top-title\"> Step 3</div>\r\n                <div class=\"top-desc\">选择计划内容</div>\r\n            </div>\r\n            <div class=\"reset-test\" @click=\"to_self_test\">等级不准，重新测评</div>\r\n        </div>\r\n        <div class=\"content\">\r\n            <div class=\"can-check\">\r\n                <div class=\"can-check-title\">侧重哪方面提升（多选）</div>\r\n                <div class=\"can-check-lable\">\r\n                    <div class=\"lable-item\" :class=\"{ 'lable-item-check': item.is_check == 1 }\"\r\n                        v-for=\"(item, index) in listCate\" :key=\"index\" @click=\"check_list_cate(item)\">{{ item.lable_name\r\n                        }}\r\n                    </div>\r\n                </div>\r\n            </div>\r\n            <div class=\"can-check\">\r\n                <div class=\"can-check-title\">感兴趣的话题（多选）</div>\r\n                <div class=\"can-check-lable\">\r\n                    <div class=\"lable-item\" :class=\"{ 'lable-item-check': item.is_check == 1 }\"\r\n                        v-for=\"(item, index) in subjectCate\" :key=\"index\" @click=\"check_subject_cate(item)\">{{ item.name\r\n                        }}\r\n                    </div>\r\n                </div>\r\n            </div>\r\n            <div class=\"can-check\">\r\n                <div class=\"can-check-title\">每天学习时长</div>\r\n                <div class=\"can-check-lable\">\r\n                    <div @click=\"set_check_time(0)\" class=\"lable-item\" :class=\"{ 'lable-item-check': check_time == 0 }\">\r\n                        60min/天\r\n                    </div>\r\n                    <div @click=\"set_check_time(1)\" class=\"lable-item\" :class=\"{ 'lable-item-check': check_time == 1 }\">\r\n                        30min/天\r\n                    </div>\r\n                    <div @click=\"set_check_time(2)\" class=\"lable-item\" :class=\"{ 'lable-item-check': check_time == 2 }\">\r\n                        <input placeholder-class=\"set-min-p\" class=\"set-min\" :class=\"{ 'set-min1': check_time == 2 }\"\r\n                            bindinput='getInputValue' v-model=\"user_time\" type=\"number\" placeholder=\"自定义\" />\r\n\r\n                        min/天\r\n                    </div>\r\n\r\n                </div>\r\n            </div>\r\n        </div>\r\n\r\n        <div class=\"update-btn\" @click=\"submit\">确定</div>\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getPlant, subjectCateGet, PlantSave } from '@/api/plant'\r\nexport default {\r\n    name: 'Ai',\r\n    data() {\r\n        return {\r\n            user_time: '',\r\n            listCate: [{\r\n                id: 1,\r\n                lable_name: '听力',\r\n                is_check: 0\r\n            },\r\n            {\r\n                id: 2,\r\n                lable_name: '阅读',\r\n                is_check: 0\r\n            },\r\n            {\r\n                id: 3,\r\n                lable_name: '口语',\r\n                is_check: 0\r\n            },\r\n            {\r\n                id: 4,\r\n                lable_name: '写作',\r\n                is_check: 0\r\n            },\r\n            ],\r\n            subjectCate: [],\r\n            check_time: 0,\r\n            subject_str_arr: [],\r\n            type_str_arr: []\r\n        }\r\n    },\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        async set_check_time(val) {\r\n            console.log(val)\r\n            this.check_time = val\r\n        },\r\n\r\n        async getPlant() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getPlant(user.sid)\r\n                    const data = response.data\r\n                    var listCate = this.listCate\r\n                    var subject_str = data.subject_str.slice(0, -1)\r\n                    var type_str = data.type_str.slice(0, -1)\r\n\r\n                    subject_str = subject_str.split(/[,，]/)\r\n                    type_str = type_str.split(/[,，]/)\r\n                    type_str.forEach(val => {\r\n                        listCate.forEach(item => {\r\n                            if (val === item.lable_name) {\r\n                                item.is_check = 1\r\n                            }\r\n                        })\r\n                    })\r\n\r\n                    this.subject_str_arr = subject_str,\r\n                    this.listCate = listCate\r\n                       \r\n\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async subjectCateGet() {\r\n            const response = await subjectCateGet()\r\n            var subject_str = this.subject_str_arr\r\n            var subjectCate = response.data\r\n            subjectCate.forEach(val => {\r\n                val.is_check = 0\r\n                subject_str.forEach(v => {\r\n                    if (v == val.name) {\r\n                        val.is_check = 1;\r\n                    }\r\n                })\r\n            })\r\n            this.subjectCate = subjectCate\r\n        },\r\n        //选择侧重方面\r\n        async check_list_cate(item) {\r\n            var listCate = this.listCate\r\n            listCate.forEach(val => {\r\n                if (val.id == item.id) {\r\n                    if (val.is_check == 0) {\r\n                        val.is_check = 1;\r\n                    } else {\r\n                        val.is_check = 0\r\n                    }\r\n                }\r\n            })\r\n            this.listCate = listCate\r\n        },\r\n        //选择感兴趣的话题\r\n        async check_subject_cate(item) {\r\n            var subjectCate = this.subjectCate\r\n            subjectCate.forEach(val => {\r\n                if (val.id == item.id) {\r\n                    if (val.is_check == 0) {\r\n                        val.is_check = 1;\r\n                    } else {\r\n                        val.is_check = 0\r\n                    }\r\n                }\r\n            })\r\n            this.subjectCate = subjectCate\r\n        },\r\n        async to_self_test() {\r\n            this.$router.push({ name: 'Exam' })\r\n        },\r\n        async submit() {\r\n            const user = JSON.parse(localStorage.getItem('user'))\r\n            var type_str = ''\r\n            var subject_str = ''\r\n            var hour_str = 0\r\n            var hour_type = this.check_time\r\n            var listCate = this.listCate\r\n            var subjectCate = this.subjectCate\r\n            listCate.forEach(val => {\r\n                if (val.is_check == 1) {\r\n                    type_str += val.lable_name + ','\r\n                }\r\n            })\r\n            subjectCate.forEach(item => {\r\n                if (item.is_check == 1) {\r\n                    subject_str += item.name + ','\r\n                }\r\n            })\r\n            if (hour_type == 0) {\r\n                hour_str = 60\r\n            }\r\n            if (hour_type == 1) {\r\n                hour_str = 30\r\n            }\r\n            if (hour_type == 2) {\r\n                hour_str = this.user_time\r\n            }\r\n\r\n            if (hour_str > 24 * 60 || hour_str < 10) {\r\n                alert('请输入合法时间')\r\n                return\r\n            }\r\n            const response = await PlantSave({\r\n                sid: user.sid,\r\n                type_str: type_str,\r\n                subject_str: subject_str,\r\n                hour_str: hour_str,\r\n                level: this.level,\r\n                aim_level: this.aim_level\r\n            })\r\n            if (response.code == 100) {\r\n                this.$router.push({ name: 'Plant' })\r\n            }\r\n        }\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        this.aim_level = this.$route.query.aim_level;\r\n        this.level = this.$route.query.level;\r\n        this.getPlant()\r\n        this.subjectCateGet()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n/* pages/plant/index.wxss */\r\n.ai {\r\n    background-color: #FFFFFF;\r\n    height: auto;\r\n    overflow-y: auto;\r\n}\r\n\r\n.main {\r\n    width: 100vw;\r\n    height: 311px;\r\n    background: linear-gradient(180deg, #E2F2FF 0%, #FFFFFF 100%);\r\n    border-radius: 0px;\r\n}\r\n\r\n.main-left {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin-right: 106px;\r\n}\r\n\r\n.top-title {\r\n    padding: 0 0 0 32px;\r\n    font-size: 22px;\r\n    font-weight: bold;\r\n}\r\n\r\n.top-desc {\r\n    color: #8B8B8B;\r\n    font-size: 16px;\r\n    padding: 4px 0 0 30px;\r\n}\r\n\r\n.reset-test {\r\n    width: 133px;\r\n    height: 22px;\r\n    background: #EFEFEF;\r\n    border-radius: 11px 0px 0px 11px;\r\n    font-family: Microsoft YaHei, Microsoft YaHei;\r\n    font-weight: 400;\r\n    font-size: 12px;\r\n    color: #4E4E4E;\r\n    line-height: 22px;\r\n    text-align: center;\r\n    font-style: normal;\r\n    text-transform: none;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.content {\r\n    width: 315px;\r\n    height: auto;\r\n    margin: -210px auto 0 auto;\r\n    text-align: left;\r\n}\r\n\r\n.can-check-title {\r\n    font-size: 12px;\r\n    padding: 10px 0;\r\n    color: #000;\r\n}\r\n\r\n.lable-item {\r\n    padding: 0px 12px;\r\n    height: 29px;\r\n    border: 1px solid #707070;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    border-radius: 15px;\r\n    color: #7D7D7D;\r\n    font-size: 12px;\r\n    line-height: 29px;\r\n    margin: 10px 5px;\r\n}\r\n\r\n.set-min {\r\n    width: 40px !important;\r\n    line-height: 24px !important;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-top: 4px;\r\n    border: none;\r\n}\r\n\r\n.set-min1 {\r\n    width: 40px !important;\r\n    line-height: 24px !important;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-top: 4px;\r\n    border: none;\r\n    color: #FFF;\r\n    background: linear-gradient(180deg, #4499EE 0%, #9CE4FF 100%);\r\n}\r\n\r\n.set-min-p-check {\r\n    color: #000;\r\n}\r\n\r\n.lable-item-check {\r\n    color: #FFF;\r\n    background: linear-gradient(180deg, #4499EE 0%, #9CE4FF 100%);\r\n    border: none;\r\n}\r\n\r\n.update-btn {\r\n    width: 286px;\r\n    height: 45px;\r\n    background: #003F88;\r\n    border-radius: 23px;\r\n    line-height: 45px;\r\n    text-align: center;\r\n    color: #FFF;\r\n    font-size: 14px;\r\n    margin: 10px auto;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./second_set.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./second_set.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./second_set.vue?vue&type=template&id=be483738&scoped=true\"\nimport script from \"./second_set.vue?vue&type=script&lang=js\"\nexport * from \"./second_set.vue?vue&type=script&lang=js\"\nimport style0 from \"./second_set.vue?vue&type=style&index=0&id=be483738&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"be483738\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"home\"},[_c('van-nav-bar',{attrs:{\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticClass:\"noauth\"},[_vm._v(\"暂无访问权限，如有问题请联系蒋老师 88206256\")])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n  <div class=\"home\">\r\n    <van-nav-bar left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n    <div class=\"noauth\">暂无访问权限，如有问题请联系蒋老师 88206256</div>\r\n  </div>\r\n</template>\r\n<script>\r\nexport default {\r\n  name: 'Ai',\r\n  data() {\r\n    return {\r\n\r\n    }\r\n  },\r\n  watch: {\r\n    '$route.path': function (newPath) {\r\n      this.active = newPath // 路由变化时更新激活的路由\r\n    }\r\n  },\r\n  methods: {\r\n    async onClickLeft() {\r\n      window.location.href = \"https://elang.zju.edu.cn/#/home\";\r\n    },\r\n  },\r\n  mounted() {\r\n  }\r\n}\r\n</script>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./noAuth.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./noAuth.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./noAuth.vue?vue&type=template&id=bb6530fc\"\nimport script from \"./noAuth.vue?vue&type=script&lang=js\"\nexport * from \"./noAuth.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"mine\"},[_vm._m(0),_c('div',{staticClass:\"mine-info\"},[_c('div',{staticClass:\"stu-info\"},[_c('img',{staticClass:\"user-header\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png\",\"mode\":\"widthFix\"}}),_c('div',{staticClass:\"stu-detail\"},[_c('div',{staticClass:\"stu-name\"},[_vm._v(_vm._s(_vm.userInfo.name))]),_c('div',{staticClass:\"stu-Id\"},[_vm._v(\"学号：\"+_vm._s(_vm.userInfo.userno))])]),_c('div',{staticClass:\"sys-setting\"},[_c('div',{staticStyle:{\"margin-left\":\"45px\"},on:{\"click\":function($event){return _vm.to_study_list(2)}}},[_vm._v(\"已完成达标篇数:\"),_c('strong',{staticStyle:{\"font-size\":\"20px\"}},[_vm._v(_vm._s(_vm.RightCount))])]),_c('div',{staticClass:\"stu-status\"},[_vm._v(\" 提升计划已制定 \"),_c('van-icon',{attrs:{\"name\":\"arrow\",\"color\":\"#606060\"}})],1)])])]),_c('div',{staticClass:\"gongneng\"},[_c('div',{staticClass:\"gongneng-list\"},[_c('div',{staticClass:\"gongneng-item\",on:{\"click\":_vm.to_active}},[_c('img',{staticClass:\"gongneng-item-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/mine-active.png\",\"mode\":\"widthFix\"}}),_c('div',{staticClass:\"gongneng-item-name\"},[_vm._v(\"我的活动\")])]),_c('div',{staticClass:\"gongneng-item\",on:{\"click\":_vm.to_collect}},[_c('img',{staticClass:\"gongneng-item-img\",attrs:{\"src\":\"https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/public/img/collect/words.png\",\"mode\":\"widthFix\"}}),_c('div',{staticClass:\"gongneng-item-name\"},[_vm._v(\"生词本\")])]),_c('div',{staticClass:\"gongneng-item\",on:{\"click\":_vm.to_note}},[_c('img',{staticClass:\"gongneng-item-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/my-note.png\",\"mode\":\"widthFix\"}}),_c('div',{staticClass:\"gongneng-item-name\"},[_vm._v(\"反思日志\")])]),_c('div',{staticClass:\"gongneng-item\",class:{ disabled: !_vm.diagnosisReportUrl },on:{\"click\":_vm.to_diagnosis_report}},[_c('img',{staticClass:\"gongneng-item-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/exam_score.png\",\"mode\":\"widthFix\"}}),_c('div',{staticClass:\"gongneng-item-name\"},[_vm._v(\"诊断报告\")])])])]),_c('div',{staticClass:\"radar\"},[_c('div',{staticClass:\"radar-top\"},[(_vm.user_level == 3)?_c('img',{staticClass:\"level\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/cse3.png\",\"mode\":\"widthFix\"}}):_vm._e(),(_vm.user_level == 4)?_c('img',{staticClass:\"level\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/cse4.png\",\"mode\":\"widthFix\"}}):_vm._e(),(_vm.user_level == 5)?_c('img',{staticClass:\"level\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/cse5.png\",\"mode\":\"widthFix\"}}):_vm._e(),(_vm.user_level == 6)?_c('img',{staticClass:\"level\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/cse6.png\",\"mode\":\"widthFix\"}}):_vm._e(),(_vm.user_level == 7)?_c('img',{staticClass:\"level\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/cse7.png\",\"mode\":\"widthFix\"}}):_vm._e(),(_vm.user_level == 8)?_c('img',{staticClass:\"level\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/cse8.png\",\"mode\":\"widthFix\"}}):_vm._e(),(_vm.user_level == 9)?_c('img',{staticClass:\"level\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/cse9.png\",\"mode\":\"widthFix\"}}):_vm._e(),_c('div',{staticClass:\"wall-level\"},[_vm._v(\"|\")]),(_vm.user_level == 3)?_c('div',{staticClass:\"level-desc\"},[_vm._v(\"基础阶段（初级学习者和使用者）\")]):_vm._e(),(_vm.user_level == 4)?_c('div',{staticClass:\"level-desc\"},[_vm._v(\"提高阶段（中级学习者和使用者）\")]):_vm._e(),(_vm.user_level == 5)?_c('div',{staticClass:\"level-desc\"},[_vm._v(\"提高阶段（中级学习者和使用者）\")]):_vm._e(),(_vm.user_level == 6)?_c('div',{staticClass:\"level-desc\"},[_vm._v(\"提高阶段（中级学习者和使用者）\")]):_vm._e(),(_vm.user_level == 7)?_c('div',{staticClass:\"level-desc\"},[_vm._v(\"熟练阶段（高级学习者和使用者）\")]):_vm._e(),(_vm.user_level == 8)?_c('div',{staticClass:\"level-desc\"},[_vm._v(\"熟练阶段（高级学习者和使用者）\")]):_vm._e(),(_vm.user_level == 9)?_c('div',{staticClass:\"level-desc\"},[_vm._v(\"熟练阶段（高级学习者和使用者）\")]):_vm._e(),_c('span',{staticClass:\"level-desc\",on:{\"click\":_vm.showLevel}},[_c('van-icon',{attrs:{\"name\":\"question-o\",\"size\":\"16\",\"color\":\"#8A8A8A\"}})],1)]),_vm._m(1),_c('div',{staticClass:\"level-desc\",staticStyle:{\"padding-left\":\"31px\",\"text-align\":\"right\",\"margin-bottom\":\"20px\"}},[_vm._v(\" 当前能力等级： 听力：  \"+_vm._s(_vm.userLevel.listen_level)+\"   口语：  \"+_vm._s(_vm.userLevel.speak_level)+\" \"),_c('br'),_c('br'),_vm._v(\" 阅读：  \"+_vm._s(_vm.userLevel.read_level)+\"   写作：  \"+_vm._s(_vm.userLevel.write_level)+\" \")]),_vm._m(2)]),(_vm.show_level)?_c('div',{staticClass:\"level-popup-mask\",on:{\"click\":function($event){if($event.target !== $event.currentTarget)return null;return _vm.showLevel.apply(null, arguments)}}},[_c('div',{staticClass:\"level-popup\"},[_c('div',{staticClass:\"guanbi\",on:{\"click\":_vm.showLevel}},[_c('van-icon',{attrs:{\"name\":\"cross\",\"color\":\"#606060\"}})],1),_c('div',{staticClass:\"level-has\"},[_c('div',{staticClass:\"aim-level\"},[_vm._v(\"CSE \"+_vm._s(_vm.user_level)),_c('span',{staticStyle:{\"font-weight\":\"100\",\"font-size\":\"12px\"}},[_vm._v(\"（综合能力等级，由听力、口语、阅读、写作四个方面的能力等级综合计算获得）\")])]),_vm._l((_vm.LevelInfo),function(item,index){return [(Number(_vm.user_level) === Number(item.level))?_c('div',{key:index,staticClass:\"level-has-item\"},[_c('div',{staticClass:\"level-lable\"},[_vm._v(\"√\")]),_c('div',{staticClass:\"has-info\"},[_vm._v(\" \"+_vm._s(item.info)+\" \")])]):_vm._e()]})],2)])]):_vm._e(),_c('div',{staticClass:\"about\",on:{\"click\":_vm.to_about}},[_c('img',{staticClass:\"about-img\",attrs:{\"mode\":\"widthFix\",\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/about.png\"}}),_c('span',{staticStyle:{\"color\":\"#888\",\"padding-left\":\"20rpx\",\"font-size\":\"28rpx\"}},[_vm._v(\"关于慧学\")])]),_c('div',{staticClass:\"wall\"})])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"head\"},[_c('div',{staticClass:\"head-left\"},[_c('div',{staticClass:\"head-left-title\"},[_vm._v(\"个人中心\")]),_c('div',{staticClass:\"head-left-content\"})])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"ec-box\"},[_c('div',{staticClass:\"main-ec\",attrs:{\"id\":\"main\"}})])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"change-lable\"},[_c('div',{staticClass:\"lable-item\"},[_c('div',{staticClass:\"cicle cicle-check\"}),_c('div',{staticClass:\"lable-item-name\"},[_vm._v(\"我的水平\")])]),_c('div',{staticClass:\"lable-item\"},[_c('div',{staticClass:\"cicle\"}),_c('div',{staticClass:\"lable-item-name\"},[_vm._v(\"目标水平\")])])])\n}]\n\nexport { render, staticRenderFns }","<template>\r\n  <div class=\"mine\">\r\n    <div class=\"head\">\r\n      <div class=\"head-left\">\r\n        <div class=\"head-left-title\">个人中心</div>\r\n        <div class=\"head-left-content\"></div>\r\n      </div>\r\n    </div>\r\n    <div class=\"mine-info\">\r\n      <div class=\"stu-info\">\r\n        <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png\" mode=\"widthFix\"\r\n          class=\"user-header\" />\r\n        <div class=\"stu-detail\">\r\n          <div class=\"stu-name\">{{ userInfo.name }}</div>\r\n          <div class=\"stu-Id\">学号：{{ userInfo.userno }}</div>\r\n        </div>\r\n        <div class=\"sys-setting\">\r\n          <!-- <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/sys.png\" mode=\"aspectFill\" class=\"sys-setting-img\" /> -->\r\n          <!-- <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/setting.png\"\r\n            style=\"width: 50rpx;height: 44rpx;margin-top: -5rpx;\" mode=\"aspectFill\" class=\"sys-setting-img\" /> -->\r\n          <div style=\"margin-left: 45px;\" @click=\"to_study_list(2)\">已完成达标篇数:<strong style=\"font-size: 20px;\">{{\r\n            RightCount }}</strong></div>\r\n          <div class=\"stu-status\">\r\n            提升计划已制定\r\n            <van-icon name=\"arrow\" color=\"#606060\" />\r\n          </div>\r\n        </div>\r\n      </div>\r\n      <!-- \r\n      <div class=\"mine-list\">\r\n        <div class=\"list-item\" bind:tap=\"to_new_words\">\r\n          <div class=\"item-num\">99+</div>\r\n          <div class=\"item-name\">生词本</div>\r\n        </div>\r\n        <div class=\"list-item\" bind:tap=\"to_correction_notebook\">\r\n          <div class=\"item-num\">3</div>\r\n          <div class=\"item-name\">错题本</div>\r\n        </div>\r\n        <div class=\"list-item\">\r\n          <div class=\"item-num\">{{ has_count }}%</div>\r\n          <div class=\"item-name\">任务进度</div>\r\n        </div>\r\n        <div class=\"list-item\">\r\n          <div class=\"item-num\">3</div>\r\n          <div class=\"item-name\">成就勋章</div>\r\n        </div>\r\n      </div> -->\r\n    </div>\r\n    <div class=\"gongneng\">\r\n      <div class=\"gongneng-list\">\r\n        <!-- \r\n        <div class=\"gongneng-item\">\n          <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/exam_score.png\" mode=\"widthFix\"\r\n            class=\"gongneng-item-img\" />\r\n          <div class=\"gongneng-item-name\">考试成绩</div>\r\n        </div> -->\r\n        <div class=\"gongneng-item\" @click=\"to_active\">\r\n          <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/mine-active.png\" mode=\"widthFix\"\r\n            class=\"gongneng-item-img\" />\r\n          <div class=\"gongneng-item-name\">我的活动</div>\r\n        </div>\r\n        <div class=\"gongneng-item\" @click=\"to_collect\">\r\n          <img src=\"https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/public/img/collect/words.png\" mode=\"widthFix\"\r\n            class=\"gongneng-item-img\" />\r\n          <div class=\"gongneng-item-name\">生词本</div>\r\n        </div>\r\n        <div class=\"gongneng-item\" @click=\"to_note\">\r\n          <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/my-note.png\" mode=\"widthFix\"\r\n            class=\"gongneng-item-img\" />\r\n          <div class=\"gongneng-item-name\">反思日志</div>\r\n        </div>\r\n        <div class=\"gongneng-item\" :class=\"{ disabled: !diagnosisReportUrl }\" @click=\"to_diagnosis_report\">\n          <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/exam_score.png\" mode=\"widthFix\"\r\n            class=\"gongneng-item-img\" />\r\n          <div class=\"gongneng-item-name\">诊断报告</div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n    <div class=\"radar\">\r\n      <div class=\"radar-top\">\r\n        <img v-if=\"user_level == 3\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/cse3.png\"\r\n          mode=\"widthFix\" class=\"level\" />\r\n        <img v-if=\"user_level == 4\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/cse4.png\"\r\n          mode=\"widthFix\" class=\"level\" />\r\n        <img v-if=\"user_level == 5\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/cse5.png\"\r\n          mode=\"widthFix\" class=\"level\" />\r\n        <img v-if=\"user_level == 6\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/cse6.png\"\r\n          mode=\"widthFix\" class=\"level\" />\r\n        <img v-if=\"user_level == 7\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/cse7.png\"\r\n          mode=\"widthFix\" class=\"level\" />\r\n        <img v-if=\"user_level == 8\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/cse8.png\"\r\n          mode=\"widthFix\" class=\"level\" />\r\n        <img v-if=\"user_level == 9\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/cse9.png\"\r\n          mode=\"widthFix\" class=\"level\" />\r\n        <div class=\"wall-level\">|</div>\r\n        <div class=\"level-desc\" v-if=\"user_level == 3\">基础阶段（初级学习者和使用者）</div>\r\n        <div class=\"level-desc\" v-if=\"user_level == 4\">提高阶段（中级学习者和使用者）</div>\r\n        <div class=\"level-desc\" v-if=\"user_level == 5\">提高阶段（中级学习者和使用者）</div>\r\n        <div class=\"level-desc\" v-if=\"user_level == 6\">提高阶段（中级学习者和使用者）</div>\r\n        <div class=\"level-desc\" v-if=\"user_level == 7\">熟练阶段（高级学习者和使用者）</div>\r\n        <div class=\"level-desc\" v-if=\"user_level == 8\">熟练阶段（高级学习者和使用者）</div>\r\n        <div class=\"level-desc\" v-if=\"user_level == 9\">熟练阶段（高级学习者和使用者）</div>\r\n        <span class=\"level-desc\" @click=\"showLevel\"><van-icon name=\"question-o\" size=\"16\" color=\"#8A8A8A\" /></span>\r\n      </div>\r\n      <div class=\"ec-box\">\r\n        <div id=\"main\" class=\"main-ec\"></div>\r\n      </div>\r\n      <div class=\"level-desc\" style=\"padding-left: 31px;text-align: right;margin-bottom: 20px;\">\r\n        当前能力等级：\r\n        听力：&nbsp;&nbsp;{{ userLevel.listen_level }}\r\n        &nbsp;&nbsp;口语：&nbsp;&nbsp;{{ userLevel.speak_level }} <br><br>\r\n        阅读：&nbsp;&nbsp;{{ userLevel.read_level }}\r\n        &nbsp;&nbsp;写作：&nbsp;&nbsp;{{ userLevel.write_level }}\r\n      </div>\r\n      <div class=\"change-lable\">\r\n        <div class=\"lable-item\">\r\n          <div class=\"cicle cicle-check\"></div>\r\n          <div class=\"lable-item-name\">我的水平</div>\r\n        </div>\r\n        <div class=\"lable-item\">\r\n          <div class=\"cicle\"></div>\r\n          <div class=\"lable-item-name\">目标水平</div>\r\n        </div>\r\n      </div>\r\n\r\n      <!-- <div class=\"btn-learn\"> -->\r\n      <!-- <div class=\"rsjy\">\r\n          提升建议：你的语法，口语，发音多项能力薄弱，\r\n          建议学习以下课程及资料。\r\n        </div> -->\r\n      <!-- <div class=\"to-kecheng\">查看详情</div> -->\r\n      <!-- </div> -->\r\n    </div>\r\n\r\n    <div v-if=\"show_level\" class=\"level-popup-mask\" @click.self=\"showLevel\">\n      <div class=\"level-popup\">\n      <div class=\"guanbi\" @click=\"showLevel\">\n        <van-icon name=\"cross\" color=\"#606060\" />\n      </div>\n      <div class=\"level-has\">\r\n        <div class=\"aim-level\">CSE {{ user_level }}<span\r\n            style=\"font-weight: 100;font-size: 12px;\">（综合能力等级，由听力、口语、阅读、写作四个方面的能力等级综合计算获得）</span></div>\r\n        <template v-for=\"(item, index) in LevelInfo\">\n          <div class=\"level-has-item\" v-if=\"Number(user_level) === Number(item.level)\" :key=\"index\">\n            <div class=\"level-lable\">√</div>\r\n            <div class=\"has-info\">\r\n              {{ item.info }}\r\n            </div>\r\n          </div>\r\n        </template>\n      </div>\n      </div>\n    </div>\n    <div class=\"about\" @click=\"to_about\">\r\n      <img class=\"about-img\" mode=\"widthFix\"\r\n        src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/about.png\" />\r\n      <span style=\"color: #888;padding-left: 20rpx;font-size: 28rpx;\">关于慧学</span>\r\n    </div>\r\n    <div class=\"wall\"></div>\r\n  </div>\r\n</template>\r\n<script>\r\nimport * as echarts from 'echarts';\r\nimport { getUserRowByToken } from '@/api/home'\r\nimport { getExamPdf, getRightCount } from '@/api/user'\nexport default {\r\n  name: 'Mine',\r\n  data() {\n    return {\r\n      userInfo: JSON.parse(localStorage.getItem('user')),\r\n      has_count: 0,\r\n      userLevel: [],\r\n      show_level: false,\r\n      user_level: 3,\r\n      LevelInfo: [\r\n        {\r\n          level: 1,\r\n          info: '能理解日常生活中十分熟悉的简单语言材料，识别相关活动或身边事物的基本信息，理解基本词语的含义。'\r\n        },\r\n        {\r\n          level: 1,\r\n          info: '能用基本的、简短的话语与他人交流，互致问候，相互介绍或描述、陈述身边事物的基本信息，以及表明态度等，有时借助重复或手势、表情等非言语手段。'\r\n        },\r\n        {\r\n          level: 2,\r\n          info: '能理解日常生活中常见的简单语言材料，获取基本的事实性信息，把握主要内容。'\r\n        },\r\n        {\r\n          level: 2,\r\n          info: '能就熟悉的话题或身边的事物用简单的语言进行交流，陈述信息，叙述事件，描述情况，表达基本的交际意图，实现基本的交际目的。'\r\n        },\r\n        {\r\n          level: 3,\r\n          info: '能理解日常生活中的简单语言材料，获取特定或关键信息，抓住要点，推断他人的意图'\r\n        },\r\n        {\r\n          level: 3,\r\n          info: '能在日常生活或一般社交场合中用简单的语言与他人交流，描述个人经历、志向等，并能说明理由、表达观点等，表达基本准确、连贯、顺畅。'\r\n        },\r\n        {\r\n          level: 4,\r\n          info: '能理解一般社交场合中常见话题的语言材料，抓住主题和主要内容，把握主要事实与观点，清楚他人的意图和态度。'\r\n        },\r\n        {\r\n          level: 4,\r\n          info: '能在熟悉的场合就熟悉的话题进行交流，叙述事件发展，描绘事物状况，介绍相关活动，说明事物要点，简单论述个人观点等，表达较为准确、清晰、连贯。'\r\n        },\r\n        {\r\n          level: 5,\r\n          info: '能理解不同场合中一般性话题的语言材料，把握主旨，抓住重点，明晰事实、观点与细节，领悟他人的意图和态度。'\r\n        },\r\n        {\r\n          level: 5,\r\n          info: '能在较为熟悉的场合就学习、工作等话题进行交流、讨论、协商，表明观点和态度，就一般性话题进行较有效的描述、说明或阐述，表达准确、连贯、得体。'\r\n        },\r\n        {\r\n          level: 6,\r\n          info: '能理解多种话题（包括一般性专业话题）的语言材料，把握要点及其逻辑关系，分析、判断、评价材料中的观点、态度和隐含的意义。'\r\n        },\r\n        {\r\n          level: 6,\r\n          info: '能在熟悉的学术或工作交流中参与多种话题的讨论，有效传递信息，比较和评析不同的意见，发表见解，表达连贯、得体、顺畅，符合相关文体规范和语体要求。'\r\n        },\r\n        {\r\n          level: 7,\r\n          info: '能理解多种话题的语言材料，包括自己所学专业领域的学术性材料，准确把握主旨和要义，客观审视、评析材料的内容，理解深层含义。'\r\n        },\r\n        {\r\n          level: 7,\r\n          info: '能就多种相关学术和社会话题进行深入交流和讨论，有效地进行描述、说明、解释、论证和评析，表达规范、清晰、得体、顺畅。'\r\n        },\r\n        {\r\n          level: 8,\r\n          info: '能理解不同体裁和话题的语言材料，领悟其内涵和话语特征，包括语言风格。'\r\n        },\r\n        {\r\n          level: 8,\r\n          info: '能在多种场合熟练使用各种表达方式和策略进行有效的学术交流或与专业有关的交流，就不同的相关话题进行充分、准确、恰当的阐述、论证和评析，表达准确、流畅、连贯、得当。'\r\n        },\r\n        {\r\n          level: 9,\r\n          info: '能准确、透彻地理解和把握各种语言材料。'\r\n        },\r\n        {\r\n          level: 9,\r\n          info: '能自如地运用各种表达方式就各种话题进行深入沟通和交流，表达精确、自然、纯正，并体现一定的语言风格。'\r\n        },\r\n      ],\r\n      RightCount: 0\n    }\n  },\n  computed: {\n    diagnosisReportUrl() {\n      const info = this.userInfo || {}\n      const report = info.diagnosis_report || info.diagnostic_report || info.diagnosisReport || info.diagnosticReport\n      if (typeof report === 'string') return report\n      if (report && typeof report === 'object') {\n        return report.url || report.path || report.file_url || report.fileUrl || ''\n      }\n      return info.report_url || info.reportUrl || info.diagnosis_report_url || info.diagnosisReportUrl ||\n        info.diagnostic_report_url || info.diagnosticReportUrl || info.pdf_url || info.pdfUrl || ''\n    }\n  },\n  methods: {\n    async to_study_list(index) {\r\n      this.$router.push({ name: 'StudyList', query: { now_status: index } })\r\n    },\r\n    async showLevel() {\r\n      this.show_level = !this.show_level\r\n      // alert(this.user_level)\r\n    },\r\n    async myChart() {\r\n      var myChart = echarts.init(document.getElementById('main'));\r\n      // 绘制图表\r\n      let option = {\r\n        radar: [{\r\n          indicator: [\r\n            { text: '听力', max: 9 },\r\n            { text: '阅读', max: 9 },\r\n            { text: '写作', max: 9 },\r\n            { text: '口语', max: 9 }\r\n          ],\r\n          radius: 65,\r\n          shape: 'circle' // 将最外层变成圆形\r\n        }],\r\n        series: [{\r\n          type: 'radar',\r\n          tooltip: {\r\n            trigger: 'item'\r\n          },\r\n          areaStyle: {}, // 默认的区域样式\r\n          data: [\r\n            {\r\n              value: [this.userLevel.listen_level, this.userLevel.read_level, this.userLevel.write_level, this.userLevel.listen_level],\r\n              name: '我的水平',\r\n              itemStyle: { // 数据点的样式\r\n                color: '#2A63FF', // 点的颜色，\r\n                opacity: 1,\r\n\r\n              },\r\n              lineStyle: { // 线条的样式\r\n                color: 'rgb(188,228,255)' // 线条的颜色\r\n              },\r\n              areaStyle: { // 区域的样式\r\n                color: '#2A63FF' // 填充的颜色\r\n              },\r\n              // label: {\r\n              //   show: true,\r\n              //   formatter: function (params) {\r\n              //     return params.value;\r\n              //   }\r\n              // }\r\n            },\r\n            {\r\n              value: [this.userLevel.plan_aim_level, this.userLevel.plan_aim_level, this.userLevel.plan_aim_level, this.userLevel.plan_aim_level],\r\n              name: '目标水平',\r\n              itemStyle: { // 数据点的样式\r\n                color: 'rgb(188,228,255,0.42)', // 点的颜色，\r\n                opacity: 1,\r\n\r\n              },\r\n              lineStyle: { // 线条的样式\r\n                color: 'rgb(188,228,255,0.42)' // 线条的颜色\r\n              },\r\n              areaStyle: { // 区域的样式\r\n                color: 'rgb(188,228,255,0.42)' // 填充的颜色\r\n              },\r\n              // label: {\r\n              //   show: true,\r\n              //   formatter: function (params) {\r\n              //     return params.value;\r\n              //   }\r\n              // }\r\n            },\r\n\r\n          ]\r\n        }]\r\n      };\r\n\r\n      myChart.setOption(option);\r\n    },\r\n    async GetUserInfo() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await getUserRowByToken({ token: user.token })\r\n          this.userLevel = response.data\r\n          var user_level = Number(response.data.listen_level || 0) +\n            Number(response.data.speak_level || 0) +\n            Number(response.data.read_level || 0) +\n            Number(response.data.write_level || 0)\n          this.user_level = Math.max(1, Math.min(9, Math.floor(user_level / 4)))\n          // this.user_level = 3;\r\n          this.myChart()\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async getRightCount() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await getRightCount({ sid: user.sid })\r\n          this.RightCount = response.data\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async to_about() {\r\n      this.$router.push({ name: 'About' })\r\n    },\r\n    async to_active() {\r\n      this.$router.push({ name: 'MyActiveList' })\r\n    },\r\n    async to_collect() {\r\n      this.$router.push({ name: 'NewWords' })\r\n    },\r\n    async to_note() {\n      this.$router.push({ name: 'stuNote' })\n    },\n    async to_diagnosis_report() {\n      const user = this.userInfo || {}\n      const userno = user.userno || user.userNo || user.student_no || user.sid\n      if (!userno) {\n        this.$toast && this.$toast('诊断报告暂不可用')\n        return\n      }\n      try {\n        const result = await getExamPdf(userno)\n        const blob = result instanceof Blob ? result : new Blob([result], { type: 'application/pdf' })\n        const url = URL.createObjectURL(blob)\n        const link = document.createElement('a')\n        link.href = url\n        link.download = '诊断报告.pdf'\n        document.body.appendChild(link)\n        link.click()\n        document.body.removeChild(link)\n        URL.revokeObjectURL(url)\n      } catch (error) {\n        console.error('Failed to fetch diagnosis report:', error)\n        this.$toast && this.$toast('诊断报告暂不可用')\n      }\n      return\n      const url = this.diagnosisReportUrl\n      if (!url) {\n        this.$toast && this.$toast('诊断报告暂不可用')\n        return\n      }\n      const link = document.createElement('a')\n      link.href = url\n      link.download = '诊断报告.pdf'\n      link.target = '_blank'\n      link.rel = 'noopener'\n      document.body.appendChild(link)\n      link.click()\n      document.body.removeChild(link)\n    }\n  },\r\n  mounted() {\r\n    // 在组件挂载后立即获取任务数据\r\n    this.GetUserInfo()\r\n    this.getRightCount()\r\n\r\n\r\n  }\r\n}\r\n</script>\r\n<style scoped>\r\n.level-has {\n  width: 90vw;\r\n  height: auto;\r\n  margin: 33px auto;\r\n}\r\n\r\n.guanbi {\r\n  width: auto;\r\n  height: auto;\r\n  position: fixed;\r\n  right: 10px;\r\n  text-align: center;\r\n  padding: 8px 15px;\r\n  font-weight: bold;\r\n  /* background-color: rgba(236, 221, 10, 0.3); */\r\n  border-radius: 40px;\r\n}\r\n\r\n.aim-level {\r\n  font-size: 14px;\r\n  font-weight: bold;\r\n  /* margin-bottom: 15px; */\r\n  margin: 15px 30px;\r\n}\r\n\r\n.level-has-item {\r\n  width: 264px;\r\n  height: auto;\r\n  margin: 0 auto;\r\n  margin-bottom: 10px;\r\n}\r\n\r\n.level-lable {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  color: #FFF;\r\n  background-color: #26C541;\r\n  width: 12px;\r\n  height: 12px;\r\n  border-radius: 12px;\r\n  font-size: 12px;\r\n  text-align: center;\r\n  line-height: 12px;\r\n  margin: 3px 5px 0 0;\r\n}\r\n\r\n.has-info {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  font-size: 12px;\r\n  text-align: left;\r\n  /* line-height: 20px; */\r\n  width: 240px;\r\n\r\n}\r\n\r\n\r\n.mine {\r\n  background-color: #F8F8F8;\r\n  width: 750rpx;\r\n  height: auto;\r\n  padding-bottom: 200rpx;\r\n}\r\n\r\n.head {\r\n  width: 100vw;\r\n  height: 231px;\r\n  background-color: #E2F2FF;\r\n}\r\n\r\n.head-left {\r\n  width: 169px;\r\n  padding: 49px 0 0 25px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.head-left-title {\r\n  width: 169px;\r\n  color: #030303;\r\n  font-weight: bold;\r\n  font-size: 22px;\r\n  height: 29px;\r\n  line-height: 29px;\r\n  margin-bottom: 5px;\r\n}\r\n\r\n.head-left-content {\r\n  width: 169px;\r\n  font-size: 12px;\r\n  color: #707070;\r\n  height: 16px;\r\n  line-height: 16px;\r\n}\r\n\r\n.mine-info {\r\n  width: 93%;\r\n  /* height: 174px; */\r\n  height: 100px;\r\n  background-color: #FFF;\r\n  margin: -135px 13px 0 13px;\r\n  border-radius: 32px;\r\n}\r\n\r\n.user-header {\r\n  width: 50px;\r\n  height: 50px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  padding: 29px 15px 0 29px;\r\n}\r\n\r\n.stu-detail {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  padding: 33px 0px 0 0px;\r\n  text-align: left;\r\n}\r\n\r\n.stu-name {\r\n  font-size: 18px;\r\n}\r\n\r\n.stu-Id {\r\n  font-size: 12px;\r\n  color: #828282;\r\n  padding-top: 3px;\r\n}\r\n\r\n.sys-setting {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  padding: 17px 0 0 0px;\r\n}\r\n\r\n.sys-setting-img:first-child {\r\n  padding-left: 113px;\r\n  padding-right: 11px;\r\n  width: 20px;\r\n  height: 20px;\r\n}\r\n\r\n.sys-setting-img {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 16px;\r\n  height: 16px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.stu-status {\r\n  background-color: #EFEFEF;\r\n  width: 103px;\r\n  height: 22px;\r\n  font-size: 10px;\r\n  color: #4E4E4E;\r\n  line-height: 22px;\r\n  text-align: center;\r\n  border-radius: 12px;\r\n  margin-left: 45px;\r\n  margin-top: 19px;\r\n}\r\n\r\n.list-item {\r\n  width: 87px;\r\n  height: 50px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  text-align: center;\r\n  margin-top: 23px;\r\n}\r\n\r\n.item-num {\r\n  font-size: 14px;\r\n  font-weight: bold;\r\n}\r\n\r\n.item-name {\r\n  padding-top: 7px;\r\n  font-size: 12px;\r\n  color: #4E4E4E;\r\n}\r\n\r\n.gongneng {\r\n  width: 93%;\r\n  height: auto;\r\n  background-color: #FFF;\r\n  border-radius: 32px;\r\n  margin: 9px auto;\r\n}\r\n\r\n.gongneng-title {\r\n  padding: 21px 0 19px 24px;\r\n  font-size: 16px;\r\n}\r\n\r\n.gongneng-list {\n  width: 100%;\n  height: auto;\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n}\n\n.level-popup-mask {\n  position: fixed;\n  z-index: 3000;\n  inset: 0;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: 20px;\n  box-sizing: border-box;\n  background: rgba(0, 0, 0, 0.28);\n}\n\n.level-popup {\n  position: relative;\n  width: min(90vw, 360px);\n  max-height: 80vh;\n  overflow-y: auto;\n  border-radius: 24px;\n  background: #f8f8f8;\n}\n\n.gongneng-item {\n  width: auto;\n  height: 60px;\n  display: block;\n  text-align: center;\n  margin: 15px 0;\n}\n\n.gongneng-item.disabled {\n  cursor: default;\n  opacity: 0.6;\n}\n\r\n.gongneng-item-img {\r\n  width: 31px;\r\n  height: 31px;\r\n}\r\n\r\n.gongneng-item-name {\r\n  margin-top: 9px;\r\n  font-size: 12px;\r\n  color: #8A8A8A;\r\n}\r\n\r\n.radar {\r\n  width: 93%;\r\n  height: auto;\r\n  background-color: #FFF;\r\n  border-radius: 32px;\r\n  margin: 12px auto;\r\n  padding-bottom: 23px;\r\n}\r\n\r\n.radar-top {\r\n  width: 100%;\r\n  height: 45px;\r\n}\r\n\r\n.level {\r\n  width: 60px;\r\n  height: 20px;\r\n  padding: 26px 10px 0 31px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.wall-level {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  padding-top: 29px;\r\n  padding-right: 5px;\r\n  font-size: 12px;\r\n  color: #8A8A8A;\r\n}\r\n\r\n.level-desc {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  padding-top: 29px;\r\n  font-size: 12px;\r\n  color: #8A8A8A;\r\n}\r\n\r\n.ec-box {\r\n  width: 100%;\r\n  /* height: 280px; */\r\n  height: auto;\r\n  margin: 0 auto;\r\n}\r\n\r\n.main-ec {\r\n  width: 100%;\r\n  height: 240px;\r\n}\r\n\r\n.change-lable {\r\n  width: 170px;\r\n  height: 40px;\r\n  margin: 0 auto;\r\n}\r\n\r\n.lable-item {\r\n  width: 85px;\r\n  height: 40px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  text-align: center;\r\n}\r\n\r\n.cicle {\r\n  width: 9px;\r\n  height: 9px;\r\n  background-color: rgb(188, 228, 255, 0.42);\r\n  border-radius: 9px;\r\n  display: inline-block;\r\n  text-align: center;\r\n}\r\n\r\n.cicle-check {\r\n  background-color: #2A63FF;\r\n}\r\n\r\n.lable-item-name {\r\n  font-size: 12px;\r\n  color: #A2A2A2;\r\n  display: inline-block;\r\n  text-align: center;\r\n  padding-left: 5px;\r\n}\r\n\r\n.btn-learn {\r\n  background-color: #F6F6F6;\r\n  width: 310px;\r\n  /* height: 149px; */\r\n  height: 90px;\r\n  border-radius: 10px;\r\n  margin: 0 auto;\r\n}\r\n\r\n.rsjy {\r\n  padding: 27px 23px 16px 23px;\r\n  font-size: 12px;\r\n  color: #A2A2A2;\r\n}\r\n\r\n.to-kecheng {\r\n  background-color: #003F88;\r\n  width: 264px;\r\n  height: 45px;\r\n  border-radius: 23px;\r\n  text-align: center;\r\n  line-height: 45px;\r\n  font-size: 14px;\r\n  color: #FFF;\r\n  margin: 0 auto;\r\n}\r\n\r\n.about {\r\n  width: 88%;\r\n  height: 45px;\r\n  margin: 10px;\r\n  background-color: #FFF;\r\n  padding-left: 25px;\r\n  line-height: 45px;\r\n  text-align: left;\r\n  border-radius: 20px;\r\n}\r\n\r\n.about-img {\r\n  width: 17px;\r\n}\r\n\r\n.wall {\r\n  width: 100%;\r\n  height: 80px;\r\n}\r\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Mine.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Mine.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Mine.vue?vue&type=template&id=00fe27e8&scoped=true\"\nimport script from \"./Mine.vue?vue&type=script&lang=js\"\nexport * from \"./Mine.vue?vue&type=script&lang=js\"\nimport style0 from \"./Mine.vue?vue&type=style&index=0&id=00fe27e8&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"00fe27e8\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"home\"})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n  <div class=\"home\">\r\n  \r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport { login, getUserSign } from '@/api/user'\r\nimport { saveLoginUser } from '@/utils/auth'\r\n\r\nexport default {\r\n  name: 'Home',\r\n  data() {\r\n    return {\r\n      user_name: '',\r\n      user_pwd: '',\r\n      checked: true,\r\n    }\r\n  },\r\n  methods: {\r\n    async handleLogin() {\r\n      try {\r\n        const response = await login({ user_no: this.user_name, name: this.user_pwd })\r\n        // 在 localStorage 中存储用户信息\r\n        saveLoginUser(response.data)\r\n        this.userSign(response.data.sid)\r\n        // 跳转到另一个页面\r\n        this.$router.push('/home')\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async agree() {\r\n      console.log(this.checked)\r\n      this.checked = !this.checked\r\n\r\n    },\r\n    async userSign(sid) {\r\n      const now = new Date()\r\n      var day = now.getDate()\r\n      var now_month = now.getMonth() + 1;\r\n      if (now_month < 10) {\r\n        now_month = '0' + now_month\r\n      }\r\n      if (day < 10) {\r\n        day = '0' + day\r\n      }\r\n      let now_date = now.getFullYear() + '-' + now_month + '-' + day\r\n      await getUserSign({ sid: sid, dateline: now_date })\r\n    },\r\n    to_zdtxz() {\r\n      // The redirect URI contains a hash route, so it must be URL-encoded or\r\n      // the hash will be treated as part of the authorization URL itself.\r\n      const redirectUri = encodeURIComponent('https://elang.zju.edu.cn/#/authLogin')\r\n      window.location.href = `https://zjuam.zju.edu.cn/cas/oauth2.0/authorize?response_type=code&client_id=oE2sT0Qxx99SLkezd4&redirect_uri=${redirectUri}`\r\n    },\r\n  },\r\n  mounted() {\r\n    this.to_zdtxz()\r\n  },\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.login-top {\r\n  width: 100vw;\r\n  height: 367px;\r\n}\r\n\r\n.login-box {\r\n  width: 250px;\r\n  height: auto;\r\n  margin: 0 auto;\r\n  color: #B4B4B4;\r\n  padding-top: 20px;\r\n}\r\n\r\n.account,\r\n.password {\r\n  border-bottom: 1px solid #B4B4B4;\r\n  padding: 10px 6px;\r\n  text-align: left;\r\n}\r\n\r\ninput {\r\n  border: none;\r\n}\r\n\r\n.lable-name {\r\n  width: 50px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.input-box {\r\n  width: 150px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  padding-left: 6px;\r\n}\r\n\r\n\r\n.login-btn {\r\n  width: 288px;\r\n  height: 45px;\r\n  background: #003F88;\r\n  border-radius: 23px;\r\n  color: #FFF;\r\n  margin: 32px auto 19px auto;\r\n  font-size: 14px;\r\n  text-align: center;\r\n  line-height: 45px;\r\n}\r\n\r\n.check-arggen {\r\n  /* width: 414rpx; */\r\n  height: 25px;\r\n  font-size: 12px;\r\n  color: #4A4A4A;\r\n  position: fixed;\r\n  bottom: 49px;\r\n  left: 84px;\r\n  line-height: 15px;\r\n}\r\n\r\n\r\n.check-arggen-div {\r\n  width: 15px;\r\n  height: 15px;\r\n  display: block;\r\n  border: 1px solid #bebebe;\r\n  border-radius: 15px;\r\n  margin-right: 5px;\r\n  position: relative;\r\n  float: left;\r\n}\r\n\r\n.is_checked {\r\n  width: 15px;\r\n  height: 15px;\r\n  display: block;\r\n  border-radius: 15px;\r\n  position: relative;\r\n  background-color: #1A72B2;\r\n  border: 1px solid #1A72B2 !important;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Login.vue?vue&type=template&id=d944c916&scoped=true\"\nimport script from \"./Login.vue?vue&type=script&lang=js\"\nexport * from \"./Login.vue?vue&type=script&lang=js\"\nimport style0 from \"./Login.vue?vue&type=style&index=0&id=d944c916&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"d944c916\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"home\"},[_c('div',{staticClass:\"main\"},[_c('img',{staticClass:\"login-top\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/collect/login.png\",\"mode\":\"widthFix\"}}),_c('div',{staticClass:\"login-box\"},[_c('div',{staticClass:\"account\"},[_c('div',{staticClass:\"lable-name\"},[_vm._v(\"学号\")]),_c('div',{staticClass:\"input-box\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.user_name),expression:\"user_name\"}],attrs:{\"type\":\"text\",\"bindinput\":\"getInputValue\"},domProps:{\"value\":(_vm.user_name)},on:{\"input\":function($event){if($event.target.composing)return;_vm.user_name=$event.target.value}}})])]),_c('div',{staticClass:\"password\"},[_c('div',{staticClass:\"lable-name\"},[_vm._v(\"姓名\")]),_c('div',{staticClass:\"input-box\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.user_pwd),expression:\"user_pwd\"}],attrs:{\"type\":\"text\",\"bindinput\":\"getInputValue\"},domProps:{\"value\":(_vm.user_pwd)},on:{\"input\":function($event){if($event.target.composing)return;_vm.user_pwd=$event.target.value}}})])])]),_c('div',{staticClass:\"login-btn\",on:{\"click\":_vm.handleLogin}},[_vm._v(\"一键登录\")]),_c('div',{staticStyle:{\"text-align\":\"center\",\"width\":\"100%\",\"height\":\"20px\",\"font-size\":\"12px\"}},[_vm._v(\"以学号，姓名为账号密码，登录开启自己的学习提升之旅\")])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showBox),expression:\"showBox\"}],class:_vm.mode=='pop'?'mask':''},[_c('div',{class:_vm.mode=='pop'?'verifybox':'',style:({'max-width':parseInt(_vm.imgSize.width)+30+'px'})},[(_vm.mode=='pop')?_c('div',{staticClass:\"verifybox-top\"},[_vm._v(\" 请完成安全验证 \"),_c('span',{staticClass:\"verifybox-close\",on:{\"click\":_vm.closeBox}},[_c('i',{staticClass:\"iconfont icon-close\"})])]):_vm._e(),_c('div',{staticClass:\"verifybox-bottom\",style:({padding:_vm.mode=='pop'?'15px':'0'})},[(_vm.componentType)?_c(_vm.componentType,{ref:\"instance\",tag:\"components\",attrs:{\"captcha-type\":_vm.captchaType,\"type\":_vm.verifyType,\"figure\":_vm.figure,\"arith\":_vm.arith,\"mode\":_vm.mode,\"v-space\":_vm.vSpace,\"explain\":_vm.explain,\"img-size\":_vm.imgSize,\"block-size\":_vm.blockSize,\"bar-size\":_vm.barSize,\"default-img\":_vm.defaultImg}}):_vm._e()],1)])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticStyle:{\"position\":\"relative\"}},[(_vm.type === '2')?_c('div',{staticClass:\"verify-img-out\",style:({height: (parseInt(_vm.setSize.imgHeight) + _vm.vSpace) + 'px'})},[_c('div',{staticClass:\"verify-img-panel\",style:({width: _vm.setSize.imgWidth,\n               height: _vm.setSize.imgHeight,})},[_c('img',{staticStyle:{\"width\":\"100%\",\"height\":\"100%\",\"display\":\"block\"},attrs:{\"src\":_vm.backImgBase?('data:image/png;base64,'+_vm.backImgBase):_vm.defaultImg,\"alt\":\"\"}}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showRefresh),expression:\"showRefresh\"}],staticClass:\"verify-refresh\",on:{\"click\":_vm.refresh}},[_c('i',{staticClass:\"iconfont icon-refresh\"})]),_c('transition',{attrs:{\"name\":\"tips\"}},[(_vm.tipWords)?_c('span',{staticClass:\"verify-tips\",class:_vm.passFlag ?'suc-bg':'err-bg'},[_vm._v(_vm._s(_vm.tipWords))]):_vm._e()])],1)]):_vm._e(),_c('div',{staticClass:\"verify-bar-area\",style:({width: _vm.setSize.imgWidth,\n             height: _vm.barSize.height,\n             'line-height':_vm.barSize.height})},[_c('span',{staticClass:\"verify-msg\",domProps:{\"textContent\":_vm._s(_vm.text)}}),_c('div',{staticClass:\"verify-left-bar\",style:({width: (_vm.leftBarWidth!==undefined)?_vm.leftBarWidth: _vm.barSize.height, height: _vm.barSize.height, 'border-color': _vm.leftBarBorderColor, transaction: _vm.transitionWidth})},[_c('span',{staticClass:\"verify-msg\",domProps:{\"textContent\":_vm._s(_vm.finishText)}}),_c('div',{staticClass:\"verify-move-block\",style:({width: _vm.barSize.height, height: _vm.barSize.height, 'background-color': _vm.moveBlockBackgroundColor, left: _vm.moveBlockLeft, transition: _vm.transitionLeft}),on:{\"touchstart\":_vm.start,\"mousedown\":_vm.start}},[_c('i',{class:['verify-icon iconfont', _vm.iconClass],style:({color: _vm.iconColor})}),(_vm.type === '2')?_c('div',{staticClass:\"verify-sub-block\",style:({'width':Math.floor(parseInt(_vm.setSize.imgWidth)*47/310)+ 'px',\n                   'height': _vm.setSize.imgHeight,\n                   'top':'-' + (parseInt(_vm.setSize.imgHeight) + _vm.vSpace) + 'px',\n                   'background-size': _vm.setSize.imgWidth + ' ' + _vm.setSize.imgHeight,\n          })},[_c('img',{staticStyle:{\"width\":\"100%\",\"height\":\"100%\",\"display\":\"block\"},attrs:{\"src\":'data:image/png;base64,'+_vm.blockBackImgBase,\"alt\":\"\"}})]):_vm._e()])])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import CryptoJS from 'crypto-js'\n/**\n * @word 要加密的内容\n * @keyWord String  服务器随机返回的关键字\n *  */\nexport function aesEncrypt(word, keyWord = 'XwKsGlMcdPMEhR1B') {\n  var key = CryptoJS.enc.Utf8.parse(keyWord)\n  var srcs = CryptoJS.enc.Utf8.parse(word)\n  var encrypted = CryptoJS.AES.encrypt(srcs, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 })\n  return encrypted.toString()\n}\n","export function resetSize(vm) {\n  var img_width, img_height, bar_width, bar_height\t// 图片的宽度、高度，移动条的宽度、高度\n\n  var parentWidth = vm.$el.parentNode.offsetWidth || window.offsetWidth\n  var parentHeight = vm.$el.parentNode.offsetHeight || window.offsetHeight\n\n  if (vm.imgSize.width.indexOf('%') != -1) {\n    img_width = parseInt(this.imgSize.width) / 100 * parentWidth + 'px'\n  } else {\n    img_width = this.imgSize.width\n  }\n\n  if (vm.imgSize.height.indexOf('%') != -1) {\n    img_height = parseInt(this.imgSize.height) / 100 * parentHeight + 'px'\n  } else {\n    img_height = this.imgSize.height\n  }\n\n  if (vm.barSize.width.indexOf('%') != -1) {\n    bar_width = parseInt(this.barSize.width) / 100 * parentWidth + 'px'\n  } else {\n    bar_width = this.barSize.width\n  }\n\n  if (vm.barSize.height.indexOf('%') != -1) {\n    bar_height = parseInt(this.barSize.height) / 100 * parentHeight + 'px'\n  } else {\n    bar_height = this.barSize.height\n  }\n\n  return { imgWidth: img_width, imgHeight: img_height, barWidth: bar_width, barHeight: bar_height }\n}\n\nexport const _code_chars = [1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']\nexport const _code_color1 = ['#fffff0', '#f0ffff', '#f0fff0', '#fff0f0']\nexport const _code_color2 = ['#FF0033', '#006699', '#993366', '#FF9900', '#66CC66', '#FF33CC']\n","import axios from 'axios'\nimport { getAuthorizationToken } from '@/utils/auth'\n\naxios.defaults.baseURL = process.env.BASE_API\n\nconst service = axios.create({\n  timeout: 40000,\n  headers: {\n    'X-Requested-With': 'XMLHttpRequest',\n    'Content-Type': 'application/json; charset=UTF-8'\n  },\n})\nservice.interceptors.request.use(\n  config => {\n    const authorization = getAuthorizationToken()\n    config.headers = config.headers || {}\n    if (authorization) {\n      config.headers['authorization'] = authorization\n    }\n    return config\n  },\n  error => {\n    Promise.reject(error)\n  }\n)\n\n// response interceptor\nservice.interceptors.response.use(\n  response => {\n    const res = response.data\n    return res\n  },\n  error => {\n  }\n)\nexport default service\n","/**\r\n * 姝ゅ鍙洿鎺ュ紩鐢ㄨ嚜宸遍」鐩皝瑁呭ソ鐨?axios 閰嶅悎鍚庣鑱旇皟\r\n */\r\n\r\nimport request from './../utils/axios' // 缁勪欢鍐呴儴灏佽鐨刟xios\r\n// import request from \"@/api/axios.js\"       //璋冪敤椤圭洰灏佽鐨刟xios\r\n\r\n// 鑾峰彇楠岃瘉鍥剧墖  浠ュ強token\r\nexport function reqGet(data) {\r\n  return request({\n    url: '/captcha/get',\n    method: 'post',\n    data,\n  })\n}\n\nexport function reqCheck(data) {\n// 婊戝姩鎴栬€呯偣閫夐獙璇?export function reqCheck(data) {\r\n  return request({\r\n    url: '/captcha/check',\r\n    method: 'post',\r\n    data\r\n  })\r\n}\r\n\r\n","<template>\n  <div style=\"position: relative;\">\n    <div\n      v-if=\"type === '2'\"\n      class=\"verify-img-out\"\n      :style=\"{height: (parseInt(setSize.imgHeight) + vSpace) + 'px'}\"\n    >\n      <div\n        class=\"verify-img-panel\"\n        :style=\"{width: setSize.imgWidth,\n                 height: setSize.imgHeight,}\"\n      >\n        <img :src=\"backImgBase?('data:image/png;base64,'+backImgBase):defaultImg\" alt=\"\" style=\"width:100%;height:100%;display:block\">\n        <div v-show=\"showRefresh\" class=\"verify-refresh\" @click=\"refresh\"><i class=\"iconfont icon-refresh\" />\n        </div>\n        <transition name=\"tips\">\n          <span v-if=\"tipWords\" class=\"verify-tips\" :class=\"passFlag ?'suc-bg':'err-bg'\">{{ tipWords }}</span>\n        </transition>\n      </div>\n    </div>\n    <!-- 公共部分 -->\n    <div\n      class=\"verify-bar-area\"\n      :style=\"{width: setSize.imgWidth,\n               height: barSize.height,\n               'line-height':barSize.height}\"\n    >\n      <span class=\"verify-msg\" v-text=\"text\" />\n      <div\n        class=\"verify-left-bar\"\n        :style=\"{width: (leftBarWidth!==undefined)?leftBarWidth: barSize.height, height: barSize.height, 'border-color': leftBarBorderColor, transaction: transitionWidth}\"\n      >\n        <span class=\"verify-msg\" v-text=\"finishText\" />\n        <div\n          class=\"verify-move-block\"\n          :style=\"{width: barSize.height, height: barSize.height, 'background-color': moveBlockBackgroundColor, left: moveBlockLeft, transition: transitionLeft}\"\n          @touchstart=\"start\"\n          @mousedown=\"start\"\n        >\n          <i\n            :class=\"['verify-icon iconfont', iconClass]\"\n            :style=\"{color: iconColor}\"\n          />\n          <div\n            v-if=\"type === '2'\"\n            class=\"verify-sub-block\"\n            :style=\"{'width':Math.floor(parseInt(setSize.imgWidth)*47/310)+ 'px',\n                     'height': setSize.imgHeight,\n                     'top':'-' + (parseInt(setSize.imgHeight) + vSpace) + 'px',\n                     'background-size': setSize.imgWidth + ' ' + setSize.imgHeight,\n            }\"\n          >\n            <img :src=\"'data:image/png;base64,'+blockBackImgBase\" alt=\"\" style=\"width:100%;height:100%;display:block\">\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n<script type=\"text/babel\">\n/**\n     * VerifySlide\n     * @description 滑块\n     * */\nimport { aesEncrypt } from './../utils/ase'\nimport { resetSize } from './../utils/util'\nimport { reqGet, reqCheck } from './../api/index'\n\n//  \"captchaType\":\"blockPuzzle\",\nexport default {\n  name: 'VerifySlide',\n  props: {\n    captchaType: {\n      type: String,\n    },\n    type: {\n      type: String,\n      default: '1'\n    },\n    // 弹出式pop，固定fixed\n    mode: {\n      type: String,\n      default: 'fixed'\n    },\n    vSpace: {\n      type: Number,\n      default: 5\n    },\n    explain: {\n      type: String,\n      default: '向右滑动完成验证'\n    },\n    imgSize: {\n      type: Object,\n      default() {\n        return {\n          width: '310px',\n          height: '155px'\n        }\n      }\n    },\n    blockSize: {\n      type: Object,\n      default() {\n        return {\n          width: '50px',\n          height: '50px'\n        }\n      }\n    },\n    barSize: {\n      type: Object,\n      default() {\n        return {\n          width: '310px',\n          height: '40px'\n        }\n      }\n    },\n    defaultImg: {\n      type: String,\n      default: ''\n    }\n  },\n  data() {\n    return {\n      secretKey: '', // 后端返回的加密秘钥 字段\n      passFlag: '', // 是否通过的标识\n      backImgBase: '', // 验证码背景图片\n      blockBackImgBase: '', // 验证滑块的背景图片\n      backToken: '', // 后端返回的唯一token值\n      startMoveTime: '', // 移动开始的时间\n      endMovetime: '', // 移动结束的时间\n      tipsBackColor: '', // 提示词的背景颜色\n      tipWords: '',\n      text: '',\n      finishText: '',\n      setSize: {\n        imgHeight: 0,\n        imgWidth: 0,\n        barHeight: 0,\n        barWidth: 0\n      },\n      top: 0,\n      left: 0,\n      moveBlockLeft: undefined,\n      leftBarWidth: undefined,\n      // 移动中样式\n      moveBlockBackgroundColor: undefined,\n      leftBarBorderColor: '#ddd',\n      iconColor: undefined,\n      iconClass: 'icon-right',\n      status: false, // 鼠标状态\n      isEnd: false,\t\t// 是够验证完成\n      showRefresh: true,\n      transitionLeft: '',\n      transitionWidth: ''\n    }\n  },\n  computed: {\n    barArea() {\n      return this.$el.querySelector('.verify-bar-area')\n    },\n    resetSize() {\n      return resetSize\n    }\n  },\n  watch: {\n    // type变化则全面刷新\n    type: {\n      immediate: true,\n      handler() {\n        this.init()\n      }\n    }\n  },\n  mounted() {\n    // 禁止拖拽\n    this.$el.onselectstart = function() {\n      return false\n    }\n    console.log(this.defaultImg)\n  },\n  methods: {\n    init() {\n      this.text = this.explain\n      this.getPictrue()\n      this.$nextTick(() => {\n        const setSize = this.resetSize(this)\t// 重新设置宽度高度\n        for (const key in setSize) {\n          this.$set(this.setSize, key, setSize[key])\n        }\n        this.$parent.$emit('ready', this)\n      })\n\n      var _this = this\n\n      window.removeEventListener('touchmove', function(e) {\n        _this.move(e)\n      })\n      window.removeEventListener('mousemove', function(e) {\n        _this.move(e)\n      })\n\n      // 鼠标松开\n      window.removeEventListener('touchend', function() {\n        _this.end()\n      })\n      window.removeEventListener('mouseup', function() {\n        _this.end()\n      })\n\n      window.addEventListener('touchmove', function(e) {\n        _this.move(e)\n      })\n      window.addEventListener('mousemove', function(e) {\n        _this.move(e)\n      })\n\n      // 鼠标松开\n      window.addEventListener('touchend', function() {\n        _this.end()\n      })\n      window.addEventListener('mouseup', function() {\n        _this.end()\n      })\n    },\n\n    // 鼠标按下\n    start: function(e) {\n      e = e || window.event\n      if (!e.touches) { // 兼容PC端\n        var x = e.clientX\n      } else { // 兼容移动端\n        var x = e.touches[0].pageX\n      }\n      this.startLeft = Math.floor(x - this.barArea.getBoundingClientRect().left)\n      this.startMoveTime = +new Date() // 开始滑动的时间\n      if (this.isEnd == false) {\n        this.text = ''\n        this.moveBlockBackgroundColor = '#337ab7'\n        this.leftBarBorderColor = '#337AB7'\n        this.iconColor = '#fff'\n        e.stopPropagation()\n        this.status = true\n      }\n    },\n    // 鼠标移动\n    move: function(e) {\n      e = e || window.event\n      if (this.status && this.isEnd == false) {\n        if (!e.touches) { // 兼容PC端\n          var x = e.clientX\n        } else { // 兼容移动端\n          var x = e.touches[0].pageX\n        }\n        var bar_area_left = this.barArea.getBoundingClientRect().left\n        var move_block_left = x - bar_area_left // 小方块相对于父元素的left值\n        if (move_block_left >= this.barArea.offsetWidth - parseInt(parseInt(this.blockSize.width) / 2) - 2) {\n          move_block_left = this.barArea.offsetWidth - parseInt(parseInt(this.blockSize.width) / 2) - 2\n        }\n        if (move_block_left <= 0) {\n          move_block_left = parseInt(parseInt(this.blockSize.width) / 2)\n        }\n        // 拖动后小方块的left值\n        this.moveBlockLeft = (move_block_left - this.startLeft) + 'px'\n        this.leftBarWidth = (move_block_left - this.startLeft) + 'px'\n      }\n    },\n\n    // 鼠标松开\n    end: function() {\n      this.endMovetime = +new Date()\n      var _this = this\n      // 判断是否重合\n      if (this.status && this.isEnd == false) {\n        var moveLeftDistance = parseInt((this.moveBlockLeft || '').replace('px', ''))\n        moveLeftDistance = moveLeftDistance * 310 / parseInt(this.setSize.imgWidth)\n        const data = {\n          captchaType: this.captchaType,\n          'pointJson': this.secretKey ? aesEncrypt(JSON.stringify({ x: moveLeftDistance, y: 5.0 }), this.secretKey) : JSON.stringify({ x: moveLeftDistance, y: 5.0 }),\n          'token': this.backToken\n        }\n        reqCheck(data).then(res => {\n          if (res.repCode == '0000') {\n            this.moveBlockBackgroundColor = '#5cb85c'\n            this.leftBarBorderColor = '#5cb85c'\n            this.iconColor = '#fff'\n            this.iconClass = 'icon-check'\n            this.showRefresh = false\n            this.isEnd = true\n            if (this.mode == 'pop') {\n              setTimeout(() => {\n                this.$parent.clickShow = false\n                this.refresh()\n              }, 1500)\n            }\n            this.passFlag = true\n            this.tipWords = `${((this.endMovetime - this.startMoveTime) / 1000).toFixed(2)}s验证成功`\n            var captchaVerification = this.secretKey ? aesEncrypt(this.backToken + '---' + JSON.stringify({ x: moveLeftDistance, y: 5.0 }), this.secretKey) : this.backToken + '---' + JSON.stringify({ x: moveLeftDistance, y: 5.0 })\n            setTimeout(() => {\n              this.tipWords = ''\n              this.$parent.closeBox()\n              this.$parent.$emit('success', { captchaVerification })\n            }, 1000)\n          } else {\n            this.moveBlockBackgroundColor = '#d9534f'\n            this.leftBarBorderColor = '#d9534f'\n            this.iconColor = '#fff'\n            this.iconClass = 'icon-close'\n            this.passFlag = false\n            setTimeout(function() {\n              _this.refresh()\n            }, 1000)\n            this.$parent.$emit('error', this)\n            this.tipWords = '验证失败'\n            setTimeout(() => {\n              this.tipWords = ''\n            }, 1000)\n          }\n        })\n        this.status = false\n      }\n    },\n\n    refresh: function() {\n      this.showRefresh = true\n      this.finishText = ''\n\n      this.transitionLeft = 'left .3s'\n      this.moveBlockLeft = 0\n\n      this.leftBarWidth = undefined\n      this.transitionWidth = 'width .3s'\n\n      this.leftBarBorderColor = '#ddd'\n      this.moveBlockBackgroundColor = '#fff'\n      this.iconColor = '#000'\n      this.iconClass = 'icon-right'\n      this.isEnd = false\n\n      this.getPictrue()\n      setTimeout(() => {\n        this.transitionWidth = ''\n        this.transitionLeft = ''\n        this.text = this.explain\n      }, 300)\n    },\n\n    // 请求背景图片和验证图片\n    getPictrue() {\n      const data = {\n        captchaType: this.captchaType,\n        clientUid: localStorage.getItem('slider'),\n        ts: Date.now(), // 现在的时间戳\n      }\n      reqGet(data).then(res => {\n        if (res.repCode == '0000') {\n          this.backImgBase = res.repData.originalImageBase64\n          this.blockBackImgBase = res.repData.jigsawImageBase64\n          this.backToken = res.repData.token\n          this.secretKey = res.repData.secretKey\n        } else {\n          this.tipWords = res.repMsg\n        }\n\n        // 判断接口请求次数是否失效\n        if (res.repCode == '6201') {\n          this.backImgBase = null\n          this.blockBackImgBase = null\n        }\n      })\n    },\n  },\n}\n</script>\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VerifySlide.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VerifySlide.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./VerifySlide.vue?vue&type=template&id=104954c3\"\nimport script from \"./VerifySlide.vue?vue&type=script&lang=js\"\nexport * from \"./VerifySlide.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticStyle:{\"position\":\"relative\"}},[_c('div',{staticClass:\"verify-img-out\"},[_c('div',{staticClass:\"verify-img-panel\",style:({'width': _vm.setSize.imgWidth,\n               'height': _vm.setSize.imgHeight,\n               'background-size' : _vm.setSize.imgWidth + ' '+ _vm.setSize.imgHeight,\n               'margin-bottom': _vm.vSpace + 'px'})},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showRefresh),expression:\"showRefresh\"}],staticClass:\"verify-refresh\",staticStyle:{\"z-index\":\"3\"},on:{\"click\":_vm.refresh}},[_c('i',{staticClass:\"iconfont icon-refresh\"})]),_c('img',{ref:\"canvas\",staticStyle:{\"width\":\"100%\",\"height\":\"100%\",\"display\":\"block\"},attrs:{\"src\":_vm.pointBackImgBase?('data:image/png;base64,'+_vm.pointBackImgBase):_vm.defaultImg,\"alt\":\"\"},on:{\"click\":function($event){_vm.bindingClick?_vm.canvasClick($event):undefined}}}),_vm._l((_vm.tempPoints),function(tempPoint,index){return _c('div',{key:index,staticClass:\"point-area\",style:({\n          'background-color':'#1abd6c',\n          color:'#fff',\n          'z-index':9999,\n          width:'20px',\n          height:'20px',\n          'text-align':'center',\n          'line-height':'20px',\n          'border-radius': '50%',\n          position:'absolute',\n          top:parseInt(tempPoint.y-10) + 'px',\n          left:parseInt(tempPoint.x-10) + 'px'\n        })},[_vm._v(\" \"+_vm._s(index + 1)+\" \")])})],2)]),_c('div',{staticClass:\"verify-bar-area\",style:({'width': _vm.setSize.imgWidth,\n             'color': this.barAreaColor,\n             'border-color': this.barAreaBorderColor,\n             'line-height':this.barSize.height})},[_c('span',{staticClass:\"verify-msg\"},[_vm._v(_vm._s(_vm.text))])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div\n    style=\"position: relative\"\n  >\n    <div class=\"verify-img-out\">\n      <div\n        class=\"verify-img-panel\"\n        :style=\"{'width': setSize.imgWidth,\n                 'height': setSize.imgHeight,\n                 'background-size' : setSize.imgWidth + ' '+ setSize.imgHeight,\n                 'margin-bottom': vSpace + 'px'}\"\n      >\n        <div v-show=\"showRefresh\" class=\"verify-refresh\" style=\"z-index:3\" @click=\"refresh\">\n          <i class=\"iconfont icon-refresh\" />\n        </div>\n        <img\n          ref=\"canvas\"\n          :src=\"pointBackImgBase?('data:image/png;base64,'+pointBackImgBase):defaultImg\"\n          alt=\"\"\n          style=\"width:100%;height:100%;display:block\"\n          @click=\"bindingClick?canvasClick($event):undefined\"\n        >\n\n        <div\n          v-for=\"(tempPoint, index) in tempPoints\"\n          :key=\"index\"\n          class=\"point-area\"\n          :style=\"{\n            'background-color':'#1abd6c',\n            color:'#fff',\n            'z-index':9999,\n            width:'20px',\n            height:'20px',\n            'text-align':'center',\n            'line-height':'20px',\n            'border-radius': '50%',\n            position:'absolute',\n            top:parseInt(tempPoint.y-10) + 'px',\n            left:parseInt(tempPoint.x-10) + 'px'\n          }\"\n        >\n          {{ index + 1 }}\n        </div>\n      </div>\n    </div>\n    <!-- 'height': this.barSize.height, -->\n    <div\n      class=\"verify-bar-area\"\n      :style=\"{'width': setSize.imgWidth,\n               'color': this.barAreaColor,\n               'border-color': this.barAreaBorderColor,\n               'line-height':this.barSize.height}\"\n    >\n      <span class=\"verify-msg\">{{ text }}</span>\n    </div>\n  </div>\n</template>\n<script type=\"text/babel\">\n/**\n     * VerifyPoints\n     * @description 点选\n     * */\nimport { resetSize, _code_chars, _code_color1, _code_color2 } from './../utils/util'\nimport { aesEncrypt } from './../utils/ase'\nimport { reqGet, reqCheck } from './../api/index'\n\nexport default {\n  name: 'VerifyPoints',\n  props: {\n    // 弹出式pop，固定fixed\n    mode: {\n      type: String,\n      default: 'fixed'\n    },\n    captchaType: {\n      type: String,\n    },\n    // 间隔\n    vSpace: {\n      type: Number,\n      default: 5\n    },\n    imgSize: {\n      type: Object,\n      default() {\n        return {\n          width: '310px',\n          height: '155px'\n        }\n      }\n    },\n    barSize: {\n      type: Object,\n      default() {\n        return {\n          width: '310px',\n          height: '40px'\n        }\n      }\n    },\n    defaultImg: {\n      type: String,\n      default: ''\n    }\n  },\n  data() {\n    return {\n      secretKey: '', // 后端返回的ase加密秘钥\n      checkNum: 3, // 默认需要点击的字数\n      fontPos: [], // 选中的坐标信息\n      checkPosArr: [], // 用户点击的坐标\n      num: 1, // 点击的记数\n      pointBackImgBase: '', // 后端获取到的背景图片\n      poinTextList: [], // 后端返回的点击字体顺序\n      backToken: '', // 后端返回的token值\n      setSize: {\n        imgHeight: 0,\n        imgWidth: 0,\n        barHeight: 0,\n        barWidth: 0\n      },\n      tempPoints: [],\n      text: '',\n      barAreaColor: undefined,\n      barAreaBorderColor: undefined,\n      showRefresh: true,\n      bindingClick: true\n    }\n  },\n  computed: {\n    resetSize() {\n      return resetSize\n    }\n  },\n  watch: {\n    // type变化则全面刷新\n    type: {\n      immediate: true,\n      handler() {\n        this.init()\n      }\n    }\n  },\n  mounted() {\n    // 禁止拖拽\n    this.$el.onselectstart = function() {\n      return false\n    }\n  },\n  methods: {\n    init() {\n      // 加载页面\n      this.fontPos.splice(0, this.fontPos.length)\n      this.checkPosArr.splice(0, this.checkPosArr.length)\n      this.num = 1\n      this.getPictrue()\n      this.$nextTick(() => {\n        this.setSize = this.resetSize(this)\t// 重新设置宽度高度\n        this.$parent.$emit('ready', this)\n      })\n    },\n    canvasClick(e) {\n      this.checkPosArr.push(this.getMousePos(this.$refs.canvas, e))\n      if (this.num == this.checkNum) {\n        this.num = this.createPoint(this.getMousePos(this.$refs.canvas, e))\n        // 按比例转换坐标值\n        this.checkPosArr = this.pointTransfrom(this.checkPosArr, this.setSize)\n        // 等创建坐标执行完\n        setTimeout(() => {\n          // var flag = this.comparePos(this.fontPos, this.checkPosArr);\n          // 发送后端请求\n          var captchaVerification = this.secretKey ? aesEncrypt(this.backToken + '---' + JSON.stringify(this.checkPosArr), this.secretKey) : this.backToken + '---' + JSON.stringify(this.checkPosArr)\n          const data = {\n            captchaType: this.captchaType,\n            'pointJson': this.secretKey ? aesEncrypt(JSON.stringify(this.checkPosArr), this.secretKey) : JSON.stringify(this.checkPosArr),\n            'token': this.backToken\n          }\n          reqCheck(data).then(res => {\n            if (res.repCode == '0000') {\n              this.barAreaColor = '#4cae4c'\n              this.barAreaBorderColor = '#5cb85c'\n              this.text = '验证成功'\n              this.bindingClick = false\n              if (this.mode == 'pop') {\n                setTimeout(() => {\n                  this.$parent.clickShow = false\n                  this.refresh()\n                }, 1500)\n              }\n              this.$parent.$emit('success', { captchaVerification })\n            } else {\n              this.$parent.$emit('error', this)\n              this.barAreaColor = '#d9534f'\n              this.barAreaBorderColor = '#d9534f'\n              this.text = '验证失败'\n              setTimeout(() => {\n                this.refresh()\n              }, 700)\n            }\n          })\n        }, 400)\n      }\n      if (this.num < this.checkNum) {\n        this.num = this.createPoint(this.getMousePos(this.$refs.canvas, e))\n      }\n    },\n\n    // 获取坐标\n    getMousePos: function(obj, e) {\n      var x = e.offsetX\n      var y = e.offsetY\n      return { x, y }\n    },\n    // 创建坐标点\n    createPoint: function(pos) {\n      this.tempPoints.push(Object.assign({}, pos))\n      return ++this.num\n    },\n    refresh: function() {\n      this.tempPoints.splice(0, this.tempPoints.length)\n      this.barAreaColor = '#000'\n      this.barAreaBorderColor = '#ddd'\n      this.bindingClick = true\n      this.fontPos.splice(0, this.fontPos.length)\n      this.checkPosArr.splice(0, this.checkPosArr.length)\n      this.num = 1\n      this.getPictrue()\n      this.text = '验证失败'\n      this.showRefresh = true\n    },\n\n    // 请求背景图片和验证图片\n    getPictrue() {\n      const data = {\n        captchaType: this.captchaType,\n        clientUid: localStorage.getItem('point'),\n        ts: Date.now(), // 现在的时间戳\n      }\n      reqGet(data).then(res => {\n        if (res.repCode == '0000') {\n          this.pointBackImgBase = res.repData.originalImageBase64\n          this.backToken = res.repData.token\n          this.secretKey = res.repData.secretKey\n          this.poinTextList = res.repData.wordList\n          this.text = '请依次点击【' + this.poinTextList.join(',') + '】'\n        } else {\n          this.text = res.repMsg\n        }\n\n        // 判断接口请求次数是否失效\n        if (res.repCode == '6201') {\n          this.pointBackImgBase = null\n        }\n      })\n    },\n    // 坐标转换函数\n    pointTransfrom(pointArr, imgSize) {\n      var newPointArr = pointArr.map(p => {\n        const x = Math.round(310 * p.x / parseInt(imgSize.imgWidth))\n        const y = Math.round(155 * p.y / parseInt(imgSize.imgHeight))\n        return { x, y }\n      })\n      // console.log(newPointArr,\"newPointArr\");\n      return newPointArr\n    }\n  },\n}\n</script>\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VerifyPoints.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VerifyPoints.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./VerifyPoints.vue?vue&type=template&id=48b81fec\"\nimport script from \"./VerifyPoints.vue?vue&type=script&lang=js\"\nexport * from \"./VerifyPoints.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","<template>\n  <div v-show=\"showBox\" :class=\"mode=='pop'?'mask':''\">\n    <div :class=\"mode=='pop'?'verifybox':''\" :style=\"{'max-width':parseInt(imgSize.width)+30+'px'}\">\n      <div v-if=\"mode=='pop'\" class=\"verifybox-top\">\n        请完成安全验证\n        <span class=\"verifybox-close\" @click=\"closeBox\">\n          <i class=\"iconfont icon-close\" />\n        </span>\n      </div>\n      <div class=\"verifybox-bottom\" :style=\"{padding:mode=='pop'?'15px':'0'}\">\n        <!-- 验证码容器 -->\n        <components\n          :is=\"componentType\"\n          v-if=\"componentType\"\n          ref=\"instance\"\n          :captcha-type=\"captchaType\"\n          :type=\"verifyType\"\n          :figure=\"figure\"\n          :arith=\"arith\"\n          :mode=\"mode\"\n          :v-space=\"vSpace\"\n          :explain=\"explain\"\n          :img-size=\"imgSize\"\n          :block-size=\"blockSize\"\n          :bar-size=\"barSize\"\n          :default-img=\"defaultImg\"\n        />\n      </div>\n    </div>\n  </div>\n</template>\n<script type=\"text/babel\">\n/**\n     * Verify 验证码组件\n     * @description 分发验证码使用\n     * */\nimport VerifySlide from './Verify/VerifySlide'\nimport VerifyPoints from './Verify/VerifyPoints'\n\nexport default {\n  name: 'Vue2Verify',\n  components: {\n    VerifySlide,\n    VerifyPoints\n  },\n  props: {\n    // 双语化\n    locale: {\n      require: false,\n      type: String,\n      default() {\n        // 默认语言不输入为浏览器语言\n        if (navigator.language) {\n          var language = navigator.language\n        } else {\n          var language = navigator.browserLanguage\n        }\n        return language\n      }\n    },\n    captchaType: {\n      type: String,\n      required: true\n    },\n    figure: {\n      type: Number\n    },\n    arith: {\n      type: Number\n    },\n    mode: {\n      type: String,\n      default: 'pop'\n    },\n    vSpace: {\n      type: Number\n    },\n    explain: {\n      type: String\n    },\n    imgSize: {\n      type: Object,\n      default() {\n        return {\n          width: '310px',\n          height: '155px'\n        }\n      }\n    },\n    blockSize: {\n      type: Object\n    },\n    barSize: {\n      type: Object\n    },\n  },\n  data() {\n    return {\n      // showBox:true,\n      clickShow: false,\n      // 内部类型\n      verifyType: undefined,\n      // 所用组件类型\n      componentType: undefined,\n      // 默认图片\n      defaultImg: require('@/assets/default.jpg')\n    }\n  },\n  computed: {\n    instance() {\n      return this.$refs.instance || {}\n    },\n    showBox() {\n      if (this.mode == 'pop') {\n        return this.clickShow\n      } else {\n        return true\n      }\n    }\n  },\n  watch: {\n    captchaType: {\n      immediate: true,\n      handler(captchaType) {\n        switch (captchaType.toString()) {\n          case 'blockPuzzle':\n            this.verifyType = '2'\n            this.componentType = 'VerifySlide'\n            break\n          case 'clickWord':\n            this.verifyType = ''\n            this.componentType = 'VerifyPoints'\n            break\n        }\n      }\n    },\n  },\n  mounted() {\n    this.uuid()\n  },\n  methods: {\n    // 生成 uuid\n    uuid() {\n      var s = []\n      var hexDigits = '0123456789abcdef'\n      for (var i = 0; i < 36; i++) {\n        s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1)\n      }\n      s[14] = '4' // bits 12-15 of the time_hi_and_version field to 0010\n      s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1) // bits 6-7 of the clock_seq_hi_and_reserved to 01\n      s[8] = s[13] = s[18] = s[23] = '-'\n\n      var slider = 'slider' + '-' + s.join('')\n      var point = 'point' + '-' + s.join('')\n      // 判断下是否存在 slider\n      console.log(localStorage.getItem('slider'))\n      if (!localStorage.getItem('slider')) {\n        localStorage.setItem('slider', slider)\n      }\n      if (!localStorage.getItem('point')) {\n        localStorage.setItem('point', point)\n      }\n    },\n    /**\n             * i18n\n             * @description 兼容vue-i18n 调用$t来转换ok\n             * @param {String} text-被转换的目标\n             * @return {String} i18n的结果\n             * */\n    i18n(text) {\n      if (this.$t) {\n        return this.$t(text)\n      } else {\n        // 兼容不存在的语言\n        const i18n = this.$options.i18n.messages[this.locale] || this.$options.i18n.messages['en-US']\n        return i18n[text]\n      }\n    },\n    /**\n             * refresh\n             * @description 刷新\n             * */\n    refresh() {\n      if (this.instance.refresh) {\n        this.instance.refresh()\n      }\n    },\n    closeBox() {\n      this.clickShow = false\n      this.refresh()\n    },\n    show() {\n      if (this.mode == 'pop') {\n        this.clickShow = true\n      }\n    }\n  },\n}\n</script>\n<style>\n    .verifybox{\n        position: relative;\n        box-sizing: border-box;\n        border-radius: 2px;\n        border: 1px solid #e4e7eb;\n        background-color: #fff;\n        box-shadow: 0 0 10px rgba(0,0,0,.3);\n        left: 50%;\n        top:50%;\n        transform: translate(-50%,-50%);\n    }\n    .verifybox-top{\n        padding: 0 15px;\n        height: 50px;\n        line-height: 50px;\n        text-align: left;\n        font-size: 16px;\n        color: #45494c;\n        border-bottom: 1px solid #e4e7eb;\n        box-sizing: border-box;\n    }\n    .verifybox-bottom{\n        padding: 15px;\n        box-sizing: border-box;\n    }\n    .verifybox-close{\n        position: absolute;\n        top: 13px;\n        right: 9px;\n        width: 24px;\n        height: 24px;\n        text-align: center;\n        cursor: pointer;\n    }\n    .mask{\n        position: fixed;\n        top: 0;\n        left:0;\n        z-index: 1001;\n        width: 100%;\n        height: 100vh;\n        background: rgba(0,0,0,.3);\n        /* display: none; */\n        transition: all .5s;\n    }\n    .verify-tips{\n        position: absolute;\n        left: 0px;\n        bottom:0px;\n        width: 100%;\n        height: 30px;\n        line-height:30px;\n        color: #fff;\n    }\n    .suc-bg{\n       background-color:rgba(92, 184, 92,.5);\n       filter: progid:DXImageTransform.Microsoft.gradient(startcolorstr=#7f5CB85C, endcolorstr=#7f5CB85C);\n    }\n    .err-bg{\n       background-color:rgba(217, 83, 79,.5);\n       filter: progid:DXImageTransform.Microsoft.gradient(startcolorstr=#7fD9534F, endcolorstr=#7fD9534F);\n    }\n    .tips-enter,.tips-leave-to{\n        bottom: -30px;\n    }\n    .tips-enter-active,.tips-leave-active{\n        transition: bottom .5s;\n    }\n    /* ---------------------------- */\n    /*常规验证码*/\n    .verify-code {\n        font-size: 20px;\n        text-align: center;\n        cursor: pointer;\n        margin-bottom: 5px;\n        border: 1px solid #ddd;\n    }\n\n    .cerify-code-panel {\n        height: 100%;\n        overflow: hidden;\n    }\n\n    .verify-code-area {\n        float: left;\n    }\n\n    .verify-input-area {\n        float: left;\n        width: 60%;\n        padding-right: 10px;\n\n    }\n\n    .verify-change-area {\n        line-height: 30px;\n        float: left;\n    }\n\n    .varify-input-code {\n        display: inline-block;\n        width: 100%;\n        height: 25px;\n    }\n\n    .verify-change-code {\n        color: #337AB7;\n        cursor: pointer;\n    }\n\n    .verify-btn {\n        width: 200px;\n        height: 30px;\n        background-color: #337AB7;\n        color: #FFFFFF;\n        border: none;\n        margin-top: 10px;\n    }\n\n    /*滑动验证码*/\n    .verify-bar-area {\n        position: relative;\n        background: #FFFFFF;\n        text-align: center;\n        -webkit-box-sizing: content-box;\n        -moz-box-sizing: content-box;\n        box-sizing: content-box;\n        border: 1px solid #ddd;\n        -webkit-border-radius: 4px;\n    }\n\n    .verify-bar-area .verify-move-block {\n        position: absolute;\n        top: 0px;\n        left: 0;\n        background: #fff;\n        cursor: pointer;\n        -webkit-box-sizing: content-box;\n        -moz-box-sizing: content-box;\n        box-sizing: content-box;\n        box-shadow: 0 0 2px #888888;\n        -webkit-border-radius: 1px;\n    }\n\n    .verify-bar-area .verify-move-block:hover {\n        background-color: #337ab7;\n        color: #FFFFFF;\n    }\n\n    .verify-bar-area .verify-left-bar {\n        position: absolute;\n        top: -1px;\n        left: -1px;\n        background: #f0fff0;\n        cursor: pointer;\n        -webkit-box-sizing: content-box;\n        -moz-box-sizing: content-box;\n        box-sizing: content-box;\n        border: 1px solid #ddd;\n    }\n\n    .verify-img-panel {\n        margin: 0;\n        -webkit-box-sizing: content-box;\n        -moz-box-sizing: content-box;\n        box-sizing: content-box;\n        border-top: 1px solid #ddd;\n        border-bottom: 1px solid #ddd;\n        border-radius: 3px;\n        position: relative;\n    }\n\n    .verify-img-panel .verify-refresh {\n        width: 25px;\n        height: 25px;\n        text-align: center;\n        padding: 5px;\n        cursor: pointer;\n        position: absolute;\n        top: 0;\n        right: 0;\n        z-index: 2;\n    }\n\n    .verify-img-panel .icon-refresh {\n        font-size: 20px;\n        color: #fff;\n    }\n\n    .verify-img-panel .verify-gap {\n        background-color: #fff;\n        position: relative;\n        z-index: 2;\n        border: 1px solid #fff;\n    }\n\n    .verify-bar-area .verify-move-block .verify-sub-block {\n        position: absolute;\n        text-align: center;\n        z-index: 3;\n        /* border: 1px solid #fff; */\n    }\n\n    .verify-bar-area .verify-move-block .verify-icon {\n        font-size: 18px;\n    }\n\n    .verify-bar-area .verify-msg {\n        z-index: 3;\n    }\n\n    /*字体图标的css*/\n    /*@font-face {font-family: \"iconfont\";*/\n    /*src: url('../fonts/iconfont.eot?t=1508229193188'); !* IE9*!*/\n    /*src: url('../fonts/iconfont.eot?t=1508229193188#iefix') format('embedded-opentype'), !* IE6-IE8 *!*/\n    /*url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff'),*/\n    /*url('../fonts/iconfont.ttf?t=1508229193188') format('truetype'), !* chrome, firefox, opera, Safari, Android, iOS 4.2+*!*/\n    /*url('../fonts/iconfont.svg?t=1508229193188#iconfont') format('svg'); !* iOS 4.1- *!*/\n    /*}*/\n\n    .iconfont {\n        font-family: \"iconfont\" !important;\n        font-size: 16px;\n        font-style: normal;\n        -webkit-font-smoothing: antialiased;\n        -moz-osx-font-smoothing: grayscale;\n    }\n\n    .icon-check:before {\n        content: \" \";\n        display: block;\n        width: 16px;\n        height: 16px;\n        position: absolute;\n        margin: auto;\n        left: 0;\n        right: 0;\n        top: 0;\n        bottom: 0;\n        z-index: 9999;\n        background-image: url(\"data:image/png;base64,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\");\n        background-size: contain;\n    }\n\n    .icon-close:before {\n        content: \" \";\n        display: block;\n        width: 16px;\n        height: 16px;\n        position: absolute;\n        margin: auto;\n        left: 0;\n        right: 0;\n        top: 0;\n        bottom: 0;\n        z-index: 9999;\n        background-image: url(\"data:image/png;base64,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\");\n        background-size: contain;\n    }\n\n    .icon-right:before {\n        content: \" \";\n        display: block;\n        width: 16px;\n        height: 16px;\n        position: absolute;\n        margin: auto;\n        left: 0;\n        right: 0;\n        top: 0;\n        bottom: 0;\n        background-size: cover;\n        z-index: 9999;\n        background-image: url(\"data:image/png;base64,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\");\n        background-size: contain;\n    }\n\n    .icon-refresh:before {\n        content: \" \";\n        display: block;\n        width: 16px;\n        height: 16px;\n        position: absolute;\n        margin: auto;\n        left: 0;\n        right: 0;\n        top: 0;\n        bottom: 0;\n        z-index: 9999;\n        background-image: url(\"data:image/png;base64,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\");\n        background-size: contain;\n    }\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Verify.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Verify.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Verify.vue?vue&type=template&id=2f099e2c\"\nimport script from \"./Verify.vue?vue&type=script&lang=js\"\nexport * from \"./Verify.vue?vue&type=script&lang=js\"\nimport style0 from \"./Verify.vue?vue&type=style&index=0&id=2f099e2c&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","<template>\r\n  <div class=\"home\">\r\n    <div class=\"main\">\r\n      <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/collect/login.png\" mode=\"widthFix\"\r\n        class=\"login-top\" />\r\n      <div class=\"login-box\">\r\n        <div class=\"account\">\r\n          <div class=\"lable-name\">学号</div>\r\n          <div class=\"input-box\">\r\n            <input type=\"text\" bindinput='getInputValue' v-model=\"user_name\" />\r\n          </div>\r\n        </div>\r\n        <div class=\"password\">\r\n          <div class=\"lable-name\">姓名</div>\r\n          <div class=\"input-box\">\r\n            <input type=\"text\" bindinput='getInputValue' v-model=\"user_pwd\" />\r\n          </div>\r\n        </div>\r\n      </div>\r\n      <!-- <Verify @success=\"'success'\" :mode=\"'pop'\" :captchaType=\"'clickWord'\"\r\n        :imgSize=\"{ width: '330px', height: '155px' }\" ref=\"verify\"></Verify>\r\n      //mode=\"pop\"模式\r\n      <button @click=\"useVerify\">调用验证组件</button> -->\r\n      <div class=\"login-btn\" @click=\"handleLogin\">一键登录</div>\r\n      <div style=\"text-align: center;width: 100%;height: 20px;font-size: 12px;\">以学号，姓名为账号密码，登录开启自己的学习提升之旅</div>\r\n      <!-- <div class=\"check-arggen\" @click=\"agree\">\r\n        <div v-if=\"checked\" class=\"is_checked\"></div>\r\n        <div v-else class=\"check-arggen-div\"></div>\r\n        <span>同意并遵守隐私政策及用户服务协议</span>\r\n      </div> -->\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport { login, getUserSign } from '@/api/user'\r\nimport Verify from \"../components/verifition/Verify\";\r\nimport { saveLoginUser } from '@/utils/auth'\r\nexport default {\r\n  name: 'Home',\r\n  components: {\r\n    Verify\r\n  },\r\n  data() {\r\n    return {\r\n      user_name: '',\r\n      user_pwd: '',\r\n      checked: true,\r\n    }\r\n  },\r\n  methods: {\r\n    success(params) {\r\n      // params 返回的二次验证参数, 和登录参数一起回传给登录接口，方便后台进行二次验证\r\n    },\r\n    useVerify() {\r\n      this.$refs.verify.show()\r\n    },\r\n    async handleLogin() {\n      if (!this.user_name || !this.user_pwd) {\n        console.warn('Student number and name are required')\n        return\n      }\n      try {\n        const response = await login({ user_no: this.user_name, name: this.user_pwd })\r\n        if (response.code !== 100) {\r\n          console.log('账号或密码错误')\r\n          return\r\n        }\r\n        // 在 localStorage 中存储用户信息\r\n        saveLoginUser(response.data)\r\n        await this.userSign(response.data.sid)\n        // 跳转到另一个页面\r\n        this.$router.push('/home')\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async agree() {\r\n      console.log(this.checked)\r\n      this.checked = !this.checked\r\n\r\n    },\r\n    async userSign(sid) {\r\n      const now = new Date()\r\n      var day = now.getDate()\r\n      var now_month = now.getMonth() + 1;\r\n      if (now_month < 10) {\r\n        now_month = '0' + now_month\r\n      }\r\n      if (day < 10) {\r\n        day = '0' + day\r\n      }\r\n      let now_date = now.getFullYear() + '-' + now_month + '-' + day\r\n      await getUserSign({ sid: sid, dateline: now_date })\r\n    },\r\n  },\n}\n</script>\r\n\r\n<style scoped>\r\n.login-top {\r\n  width: 100vw;\r\n  height: 367px;\r\n}\r\n\r\n.login-box {\r\n  width: 250px;\r\n  height: auto;\r\n  margin: 0 auto;\r\n  color: #B4B4B4;\r\n  padding-top: 20px;\r\n}\r\n\r\n.account,\r\n.password {\r\n  border-bottom: 1px solid #B4B4B4;\r\n  padding: 10px 6px;\r\n  text-align: left;\r\n}\r\n\r\ninput {\r\n  border: none;\r\n}\r\n\r\n.lable-name {\r\n  width: 50px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.input-box {\r\n  width: 150px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  padding-left: 6px;\r\n}\r\n\r\n\r\n.login-btn {\r\n  width: 288px;\r\n  height: 45px;\r\n  background: #003F88;\r\n  border-radius: 23px;\r\n  color: #FFF;\r\n  margin: 32px auto 19px auto;\r\n  font-size: 14px;\r\n  text-align: center;\r\n  line-height: 45px;\r\n}\r\n\r\n.check-arggen {\r\n  /* width: 414rpx; */\r\n  height: 25px;\r\n  font-size: 12px;\r\n  color: #4A4A4A;\r\n  position: fixed;\r\n  bottom: 49px;\r\n  left: 84px;\r\n  line-height: 15px;\r\n}\r\n\r\n\r\n.check-arggen-div {\r\n  width: 15px;\r\n  height: 15px;\r\n  display: block;\r\n  border: 1px solid #bebebe;\r\n  border-radius: 15px;\r\n  margin-right: 5px;\r\n  position: relative;\r\n  float: left;\r\n}\r\n\r\n.is_checked {\r\n  width: 15px;\r\n  height: 15px;\r\n  display: block;\r\n  border-radius: 15px;\r\n  position: relative;\r\n  background-color: #1A72B2;\r\n  border: 1px solid #1A72B2 !important;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NewLogin.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NewLogin.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./NewLogin.vue?vue&type=template&id=082e46d6&scoped=true\"\nimport script from \"./NewLogin.vue?vue&type=script&lang=js\"\nexport * from \"./NewLogin.vue?vue&type=script&lang=js\"\nimport style0 from \"./NewLogin.vue?vue&type=style&index=0&id=082e46d6&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"082e46d6\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"home\"})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n  <div class=\"home\">\r\n    <!-- <div class=\"noauth\">暂无访问权限，请联系后台人员：17767204949</div> -->\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport { authLogin } from '@/api/home'\r\nimport { getUserSign } from '@/api/user'\nimport { saveLoginUser } from '@/utils/auth'\n\r\nexport default {\r\n  name: 'Home',\r\n  data() {\r\n    return {\r\n      user_name: '',\r\n      user_pwd: '',\r\n      checked: true,\r\n    }\r\n  },\r\n  methods: {\r\n    async getQueryString(params) {\r\n      var reg = new RegExp(\"(^|&)\" + params + \"=([^&]*)(&|$)\", \"i\");//解析url地址\r\n      var r = window.location.search.substr(1).match(reg);\r\n      if (r != null) {\r\n        return decodeURIComponent(r[2]);\r\n      }\r\n      return null;\r\n    },\r\n    async save() {\n      if (!this.StuCode) {\n        console.error('CAS login callback did not contain a code', window.location.href)\n        return\n      }\n      try {\n        let response = await authLogin({ code: this.StuCode });\n        console.log(response)\n        if (response.code == 100) {\n          saveLoginUser(response.data)\n          // localStorage.setItem('tok', response.data.token)\n          await this.userSign(response.data.sid)\n        } else {\n          console.error('CAS login failed', response)\n        }\n      } catch (error) {\n        console.error('CAS login request failed', error)\n      }\r\n      return;\r\n    },\r\n    async userSign(sid) {\r\n      const now = new Date()\r\n      var day = now.getDate()\r\n      var now_month = now.getMonth() + 1;\r\n      if (now_month < 10) {\r\n        now_month = '0' + now_month\r\n      }\r\n      if (day < 10) {\r\n        day = '0' + day\r\n      }\r\n      let now_date = now.getFullYear() + '-' + now_month + '-' + day\r\n      await getUserSign({ sid: sid, dateline: now_date })\r\n\r\n      // 跳转到另一个页面\r\n\r\n      window.location.href = \"https://elang.zju.edu.cn/#/home\";\r\n    },\r\n  },\r\n  mounted() {\r\n    this.save()\r\n  },\r\n  async created() {\n    const urlParams = new URLSearchParams(window.location.search);\n    // Depending on how CAS appends the callback parameters, code can be in\n    // the normal query string or in the hash route query.\n    const hashQuery = window.location.hash.indexOf('?') >= 0\n      ? new URLSearchParams(window.location.hash.split('?')[1])\n      : null\n    this.StuCode = this.$route.query.code || urlParams.get('code') || (hashQuery && hashQuery.get('code'))\n    console.log(this.StuCode)\n  },\n}\r\n</script>\r\n\r\n<style scoped>\r\n.login-top {\r\n  width: 100vw;\r\n  height: 367px;\r\n}\r\n\r\n.login-box {\r\n  width: 250px;\r\n  height: auto;\r\n  margin: 0 auto;\r\n  color: #B4B4B4;\r\n  padding-top: 20px;\r\n}\r\n\r\n.account,\r\n.password {\r\n  border-bottom: 1px solid #B4B4B4;\r\n  padding: 10px 6px;\r\n  text-align: left;\r\n}\r\n\r\ninput {\r\n  border: none;\r\n}\r\n\r\n.lable-name {\r\n  width: 50px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.input-box {\r\n  width: 150px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  padding-left: 6px;\r\n}\r\n\r\n\r\n.login-btn {\r\n  width: 288px;\r\n  height: 45px;\r\n  background: #003F88;\r\n  border-radius: 23px;\r\n  color: #FFF;\r\n  margin: 32px auto 19px auto;\r\n  font-size: 14px;\r\n  text-align: center;\r\n  line-height: 45px;\r\n}\r\n\r\n.check-arggen {\r\n  /* width: 414rpx; */\r\n  height: 25px;\r\n  font-size: 12px;\r\n  color: #4A4A4A;\r\n  position: fixed;\r\n  bottom: 49px;\r\n  left: 84px;\r\n  line-height: 15px;\r\n}\r\n\r\n\r\n.check-arggen-div {\r\n  width: 15px;\r\n  height: 15px;\r\n  display: block;\r\n  border: 1px solid #bebebe;\r\n  border-radius: 15px;\r\n  margin-right: 5px;\r\n  position: relative;\r\n  float: left;\r\n}\r\n\r\n.is_checked {\r\n  width: 15px;\r\n  height: 15px;\r\n  display: block;\r\n  border-radius: 15px;\r\n  position: relative;\r\n  background-color: #1A72B2;\r\n  border: 1px solid #1A72B2 !important;\r\n}\r\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./authLogin.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./authLogin.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./authLogin.vue?vue&type=template&id=7f00803b&scoped=true\"\nimport script from \"./authLogin.vue?vue&type=script&lang=js\"\nexport * from \"./authLogin.vue?vue&type=script&lang=js\"\nimport style0 from \"./authLogin.vue?vue&type=style&index=0&id=7f00803b&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"7f00803b\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"plant\"},[_c('van-nav-bar',{attrs:{\"title\":\"关于慧学\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_vm._m(0)],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"main\"},[_c('div',{staticClass:\"top\"},[_c('div',{staticClass:\"top-title\"},[_vm._v(\"AI赋能 创新育人\")]),_c('div',{staticClass:\"top-second-title\"},[_vm._v(\"智慧测评、智慧伴学、自主学习、因材施教\")])]),_c('div',{staticClass:\"ptld\"},[_c('div',{staticClass:\"ptld-title\"},[_c('div',{staticClass:\"title-lable\"},[_vm._v(\"“\")]),_c('div',{staticClass:\"title\"},[_vm._v(\"平台亮点\")]),_c('div',{staticClass:\"title-lable\"},[_vm._v(\"”\")])]),_c('div',{staticClass:\"ptld-item\"},[_c('div',{staticClass:\"ptld-item-title\"},[_c('div',{staticClass:\"text-item\"},[_vm._v(\"智\")]),_c('div',{staticClass:\"text-item\"},[_vm._v(\"慧\")]),_c('div',{staticClass:\"title-pretty\"},[_c('img',{staticStyle:{\"width\":\"34px\",\"padding-top\":\"4px\"},attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/teach.png\",\"mode\":\"widthFix\"}})])]),_c('div',{staticClass:\"ptld-content\"},[_c('div',{staticClass:\"content-title\"},[_vm._v(\"变革教学模式\")]),_c('div',{staticClass:\"content-main\"},[_vm._v(\" 个性教学设计：贴近教学目标，持续拓充教学资源库，贯穿线上线下课堂。融合AI技术，为学生提供AI写作指导，远程写作预约等服务。 \")])])]),_c('div',{staticClass:\"ptld-item\"},[_c('div',{staticClass:\"ptld-content1\"},[_c('div',{staticClass:\"content-title\"},[_vm._v(\"赋能自主学习\")]),_c('div',{staticClass:\"content-main\"},[_vm._v(\" 自适应自主学习：结合学生能力诊断，个性化推荐学习资料，有针对性提升学生技能。利用数字化技术，提供数字人口语对话练习、AI互动伴学等服务。 \")])]),_c('div',{staticClass:\"ptld-item-title\"},[_c('div',{staticClass:\"text-item\"},[_vm._v(\"智\")]),_c('div',{staticClass:\"text-item\"},[_vm._v(\"慧\")]),_c('div',{staticClass:\"title-pretty\"},[_c('img',{staticStyle:{\"width\":\"34px\",\"padding-top\":\"4px\"},attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/learn.png\",\"mode\":\"widthFix\"}})])])]),_c('div',{staticClass:\"ptld-item\"},[_c('div',{staticClass:\"ptld-item-title\"},[_c('div',{staticClass:\"text-item\"},[_vm._v(\"智\")]),_c('div',{staticClass:\"text-item\"},[_vm._v(\"慧\")]),_c('div',{staticClass:\"title-pretty\"},[_c('img',{staticStyle:{\"width\":\"34px\",\"padding-top\":\"4px\"},attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/ping.png\",\"mode\":\"widthFix\"}})])]),_c('div',{staticClass:\"ptld-content\"},[_c('div',{staticClass:\"content-title\"},[_vm._v(\"改革评价方式\")]),_c('div',{staticClass:\"content-main\"},[_vm._v(\" 权威精准诊断测评：应用《中国英语能力等级量表》，融合自适应诊断技术，建构权威英语能力等级测评体系，让教学评价更精准。 \")])])]),_c('div',{staticClass:\"ptld-item\"},[_c('div',{staticClass:\"ptld-content1\"},[_c('div',{staticClass:\"content-title\"},[_vm._v(\"践行科教融合\")]),_c('div',{staticClass:\"content-main\"},[_vm._v(\" 数智教学研究：全方位收集学生学习行为数据、测评数据，利用大数据挖掘技术洞察教与学变量关系，赋能教学研究开展。 \")])]),_c('div',{staticClass:\"ptld-item-title\"},[_c('div',{staticClass:\"text-item\"},[_vm._v(\"智\")]),_c('div',{staticClass:\"text-item\"},[_vm._v(\"慧\")]),_c('div',{staticClass:\"title-pretty\"},[_c('img',{staticStyle:{\"width\":\"34px\",\"padding-top\":\"4px\"},attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/yan.png\",\"mode\":\"widthFix\"}})])])])]),_c('div',{staticClass:\"dtys\"},[_c('div',{staticClass:\"ptld-title\"},[_c('div',{staticClass:\"title-lable\"},[_vm._v(\"“\")]),_c('div',{staticClass:\"title\"},[_vm._v(\"关于慧学外语智能学习平台\")]),_c('div',{staticClass:\"title-lable\"},[_vm._v(\"”\")])]),_c('div',{staticClass:\"dtys-content\"},[_c('div',{staticStyle:{\"text-indent\":\"2em\"}},[_vm._v(\"为更好服务国家战略与学生成长成才需求，深入实施数智赋能外语类公共课程教学，学校主动探索人工智能技术支持下的外语教与学数智化工具，自主研发慧学外语智能学习平台（ZJU E-LANG），实现精准化、高效化、个性化英语教与学的目的，提升学生英语能力可持续发展。\")]),_c('br'),_c('div',{staticStyle:{\"text-indent\":\"2em\"}},[_vm._v(\" 慧学外语智能学习平台是以《中国英语能力等级量表》为依据、以认知诊断测评技术为核心、由人工智能大模型驱动的生成式AI学习平台。平台建有英语能力自适应诊断测试、优质线上教学资源、英语自适应自主学习、英文写作创新实践、人机对话口语和可视化测评反馈六大模块。针对英语学习者，可科学测评其能力、设计符合其能力水平并可动态调整学习方案，形成“自适应诊断-自适应学习-可视化评价”全链路AI智能化伴学，从而构建GAI赋能的外语“教-学-评一体化”新体系。 \")]),_c('br'),_c('div',{staticStyle:{\"text-indent\":\"2em\"}},[_vm._v(\" 慧学外语，AI赋能，助力外语数智学习，促进外语持续提升。预祝各位同学使用平台学习能学有所获、学有所用。 \")])])]),_c('div',{staticClass:\"bottom\"})])\n}]\n\nexport { render, staticRenderFns }","<template>\r\n  <div class=\"plant\">\r\n    <van-nav-bar title=\"关于慧学\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n    <div class=\"main\">\r\n      <div class=\"top\">\r\n        <div class=\"top-title\">AI赋能 创新育人</div>\r\n        <div class=\"top-second-title\">智慧测评、智慧伴学、自主学习、因材施教</div>\r\n      </div>\r\n      <div class=\"ptld\">\r\n        <div class=\"ptld-title\">\r\n          <div class=\"title-lable\">“</div>\r\n          <div class=\"title\">平台亮点</div>\r\n          <div class=\"title-lable\">”</div>\r\n        </div>\r\n        <div class=\"ptld-item\">\r\n          <div class=\"ptld-item-title\">\r\n            <div class=\"text-item\">智</div>\r\n            <div class=\"text-item\">慧</div>\r\n            <div class=\"title-pretty\">\r\n              <img style=\"width: 34px;padding-top: 4px;\"\r\n                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/teach.png\" mode=\"widthFix\" />\r\n            </div>\r\n          </div>\r\n          <div class=\"ptld-content\">\r\n            <div class=\"content-title\">变革教学模式</div>\r\n            <div class=\"content-main\">\r\n              个性教学设计：贴近教学目标，持续拓充教学资源库，贯穿线上线下课堂。融合AI技术，为学生提供AI写作指导，远程写作预约等服务。\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"ptld-item\">\r\n          <div class=\"ptld-content1\">\r\n            <div class=\"content-title\">赋能自主学习</div>\r\n            <div class=\"content-main\">\r\n              自适应自主学习：结合学生能力诊断，个性化推荐学习资料，有针对性提升学生技能。利用数字化技术，提供数字人口语对话练习、AI互动伴学等服务。\r\n            </div>\r\n          </div>\r\n          <div class=\"ptld-item-title\">\r\n            <div class=\"text-item\">智</div>\r\n            <div class=\"text-item\">慧</div>\r\n            <div class=\"title-pretty\">\r\n              <img style=\"width: 34px;padding-top: 4px;\"\r\n                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/learn.png\" mode=\"widthFix\" />\r\n            </div>\r\n          </div>\r\n\r\n        </div>\r\n\r\n        <div class=\"ptld-item\">\r\n          <div class=\"ptld-item-title\">\r\n            <div class=\"text-item\">智</div>\r\n            <div class=\"text-item\">慧</div>\r\n            <div class=\"title-pretty\">\r\n              <img style=\"width: 34px;padding-top: 4px;\"\r\n                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/ping.png\" mode=\"widthFix\" />\r\n            </div>\r\n          </div>\r\n          <div class=\"ptld-content\">\r\n            <div class=\"content-title\">改革评价方式</div>\r\n            <div class=\"content-main\">\r\n              权威精准诊断测评：应用《中国英语能力等级量表》，融合自适应诊断技术，建构权威英语能力等级测评体系，让教学评价更精准。\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"ptld-item\">\r\n          <div class=\"ptld-content1\">\r\n            <div class=\"content-title\">践行科教融合</div>\r\n            <div class=\"content-main\">\r\n              数智教学研究：全方位收集学生学习行为数据、测评数据，利用大数据挖掘技术洞察教与学变量关系，赋能教学研究开展。\r\n            </div>\r\n          </div>\r\n          <div class=\"ptld-item-title\">\r\n            <div class=\"text-item\">智</div>\r\n            <div class=\"text-item\">慧</div>\r\n            <div class=\"title-pretty\">\r\n              <img style=\"width: 34px;padding-top: 4px;\"\r\n                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/yan.png\" mode=\"widthFix\" />\r\n            </div>\r\n          </div>\r\n\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"dtys\">\r\n        <div class=\"ptld-title\">\r\n          <div class=\"title-lable\">“</div>\r\n          <div class=\"title\">关于慧学外语智能学习平台</div>\r\n          <div class=\"title-lable\">”</div>\r\n        </div>\r\n        <div class=\"dtys-content\">\r\n          <!-- 为更好服务国家战略与学生成长成才需求，深入实施数智赋能外语公共课程教学，学校主动探索人工智能技术支持下的外语教与学数智化工具，自主研发慧学外语智能学习平台（ZJU E-LANG），达到精准化、高效化、个性化英语学习目的，促进英语能力水平的可持续发展。\r\n          <div class=\"dtys-lable\">两个基座：</div>\r\n          ● AI数字化基座：浙江大学计算机系统机构实验室自研的教育大模型“观止大模型”，测试评分唯一接近Chat-gpt 4.0国内高校自研大模型，智能、安全、可靠\r\n          <div>● 业务基座：浙江大学外国语学院基于新国标量表研发的英语等级能力测试体系，配套一体化诊断、练习题库，权威、领先、唯一</div>\r\n          <div class=\"dtys-lable\">三个智能体：</div>\r\n          ● 浙江大学计算机系统机构实验室OPEN BUDY模型研发的“智慧教AI AGENT”，为学生提供个性化的教学设计，伴侣式的AI口语对话、写作教学，以及情景式的听力、阅读训练，教学有趣、有效，让大规模因材施教成为可能\r\n          <div>● 浙江大学计算机系统机构实验室OPEN BUDDY模型研发的“智慧学 AI AGENT”，为学生提供最佳的学习路径规划，匹配数字人启发式的引导互动，促进学生自主探索，让学习更有趣、个性化</div> \r\n          <div>● 基于慧学外语自研的大数据引擎，为师校提供完善的“学生数据集、教学行为数据集、教材题库数据集”，配套“智慧研AI AGENT”，让教学和学术研究更便捷、创新</div>\r\n          <div class=\"dtys-lable\">N多智能应用：</div>\r\n          ● 智能口语对话、智能写作伴侣、智能阅读伴侣、智能听力伴侣、智能教学助手、智能研究助手、智能诊断测评 -->\r\n          <div style=\"text-indent: 2em;\">为更好服务国家战略与学生成长成才需求，深入实施数智赋能外语类公共课程教学，学校主动探索人工智能技术支持下的外语教与学数智化工具，自主研发慧学外语智能学习平台（ZJU E-LANG），实现精准化、高效化、个性化英语教与学的目的，提升学生英语能力可持续发展。</div>\r\n            <br>\r\n          <div style=\"text-indent: 2em;\">\r\n            慧学外语智能学习平台是以《中国英语能力等级量表》为依据、以认知诊断测评技术为核心、由人工智能大模型驱动的生成式AI学习平台。平台建有英语能力自适应诊断测试、优质线上教学资源、英语自适应自主学习、英文写作创新实践、人机对话口语和可视化测评反馈六大模块。针对英语学习者，可科学测评其能力、设计符合其能力水平并可动态调整学习方案，形成“自适应诊断-自适应学习-可视化评价”全链路AI智能化伴学，从而构建GAI赋能的外语“教-学-评一体化”新体系。\r\n          </div>\r\n          <br>\r\n          <div style=\"text-indent: 2em;\">\r\n            慧学外语，AI赋能，助力外语数智学习，促进外语持续提升。预祝各位同学使用平台学习能学有所获、学有所用。\r\n          </div>\r\n\r\n        </div>\r\n      </div>\r\n      <div class=\"bottom\"></div>\r\n    </div>\r\n  </div>\r\n</template>\r\n<script>\r\n\r\nexport default {\r\n  name: 'Plant',\r\n  data() {\r\n    return {\r\n\r\n    }\r\n  },\r\n  methods: {\r\n\r\n    async onClickLeft() {\r\n      history.back()\r\n    },\r\n  },\r\n  mounted() {\r\n    // 在组件挂载后立即获取任务数据\r\n\r\n  }\r\n}\r\n</script>\r\n<style scoped>\r\n.top {\r\n  background: url('https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/ai-funeng.png?v=1');\r\n  width: 100%;\r\n  height: 256px;\r\n  background-repeat: no-repeat;\r\n  background-size: cover;\r\n}\r\n\r\n.top-title {\r\n  font-size: 30px;\r\n  color: #000;\r\n  font-weight: bold;\r\n  padding: 26px 0 0 33px;\r\n}\r\n\r\n.top-second-title {\r\n  font-size: 14px;\r\n  color: #000;\r\n  padding: 8px 0 0 33px;\r\n}\r\n\r\n.ptld {\r\n  width: 348px;\r\n  /* height: 577px; */\r\n  background: #FFFFFF;\r\n  border-radius: 20px;\r\n  margin: -20px 13px 0 13px;\r\n}\r\n\r\n.ptld-title {\r\n  width: 348px;\r\n  height: 90px;\r\n  /* padding-left: 80px; */\r\n  text-align: center;\r\n}\r\n\r\n.title-lable {\r\n  width: 40px;\r\n  height: auto;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  font-size: 35px;\r\n  font-weight: bold;\r\n  color: #6FDBFF;\r\n  line-height: 100px;\r\n  text-align: center;\r\n}\r\n\r\n.title {\r\n  width: 240px;\r\n  height: 60px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  padding: 0 5px;\r\n  font-size: 20px;\r\n  font-weight: bold;\r\n  border-bottom: #6FDBFF 6px solid;\r\n  line-height: 100px;\r\n}\r\n\r\n.ptld-item {\r\n  width: 301px;\r\n  height: 140px;\r\n  background: #EEF8FF;\r\n  border-radius: 10px;\r\n  margin: 0 auto;\r\n  margin-bottom: 20px;\r\n}\r\n\r\n.ptld-item-title {\r\n  width: 50px;\r\n  height: 110px;\r\n  background: #CFE8FE;\r\n  border-radius: 10px;\r\n  text-align: center;\r\n  padding-top: 30px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.title-pretty {\r\n  width: 50px;\r\n  height: 36px;\r\n  background: #003F88;\r\n}\r\n\r\n.ptld-content {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 216px;\r\n  height: 86px;\r\n  padding-top: 14px;\r\n  padding-left: 18px;\r\n}\r\n\r\n.ptld-content1 {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 228px;\r\n  height: 86px;\r\n  padding-top: 14px;\r\n  padding: 14px 8px 0 15px;\r\n}\r\n\r\n.content-title {\r\n  font-size: 16px;\r\n  text-align: left;\r\n}\r\n\r\n.content-main {\r\n  color: #555056;\r\n  font-size: 12px;\r\n  padding-top: 5px;\r\n  text-align: left;\r\n}\r\n\r\n.dtys {\r\n  width: 348px;\r\n  height: 620px;\r\n  background: #FFFFFF;\r\n  border-radius: 20px;\r\n  margin: 27px 13px 26px 13px;\r\n}\r\n\r\n.dtys-content {\r\n  width: 306px;\r\n  margin: 0 auto;\r\n  font-size: 12px;\r\n  color: #707070;\r\n  line-height: 20px;\r\n  text-align: left;\r\n}\r\n\r\n.dtys-lable {\r\n  font-size: 12px;\r\n  color: #000;\r\n  font-weight: bold;\r\n  text-align: left;\r\n}\r\n\r\n.add-our {\r\n  width: 348px;\r\n  height: 550px;\r\n  background: #FFFFFF;\r\n  border-radius: 20px;\r\n  margin: 0 13px;\r\n}\r\n\r\n.apply-use {\r\n  padding: 0 23px 0 19px;\r\n}\r\n\r\n.add-our-title {\r\n  font-weight: bold;\r\n  font-size: 16px;\r\n}\r\n\r\n.add-our-desc {\r\n  color: #707070;\r\n  font-size: 12px;\r\n  padding-top: 7px;\r\n}\r\n\r\n.apply-btn {\r\n  text-align: center;\r\n  width: 300px;\r\n  height: 45px;\r\n  line-height: 45px;\r\n  color: #FFF;\r\n  background-color: #003F88;\r\n  border-radius: 31px;\r\n  margin: 15px 0 0 6px;\r\n}\r\n\r\n.apply-zixun {\r\n  margin-top: 39px;\r\n  padding: 0 23px 0 19px;\r\n}\r\n\r\n.lxr {\r\n  width: 280px;\r\n  height: auto;\r\n  margin: 26px auto;\r\n}\r\n\r\n.lxr-item {\r\n  width: 140px;\r\n  height: auto;\r\n  font-size: 14px;\r\n  text-align: center;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.lxr-img {\r\n  margin-top: 17px;\r\n  width: 76px;\r\n  height: 76px;\r\n  border: 5px solid #67A9FF;\r\n}\r\n\r\n.bottom {\r\n  width: 100%;\r\n  height: 40px;\r\n}\r\n\r\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./About.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./About.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./About.vue?vue&type=template&id=6141f3b5&scoped=true\"\nimport script from \"./About.vue?vue&type=script&lang=js\"\nexport * from \"./About.vue?vue&type=script&lang=js\"\nimport style0 from \"./About.vue?vue&type=style&index=0&id=6141f3b5&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"6141f3b5\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"index\"},[_c('van-nav-bar',{attrs:{\"title\":\"听闻天下\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),(_vm.NewUserResource != [] && _vm.NewUserResource != null)?_c('div',{staticClass:\"head\"},[_c('div',{staticClass:\"model-title\"},[_vm._v(\"上次学习\")]),_c('div',{staticClass:\"last-learn\",on:{\"click\":function($event){return _vm.to_praxis(_vm.NewUserResource)}}},[_c('img',{staticClass:\"lesson-cover-img\",attrs:{\"src\":_vm.NewUserResource.cover,\"mode\":\"aspectFill\"}}),_c('div',{staticClass:\"lesson-info\"},[_c('div',{staticClass:\"lesson-name\"},[_vm._v(\"[听力]\"+_vm._s(_vm.NewUserResource.name))])]),(_vm.NewUserResource.status == 1)?_c('div',{staticClass:\"con-to-study\",attrs:{\"data-index\":_vm.NewUserResource.id}},[_vm._v(\"继续学习\")]):_vm._e(),(_vm.NewUserResource.status == 2)?_c('div',{staticClass:\"con-to-study\",attrs:{\"data-index\":_vm.NewUserResource.id}},[_vm._v(\"已学\")]):_vm._e()])]):_vm._e(),_c('div',{staticClass:\"theme-listening\"},[_c('div',{staticClass:\"listening-top\"},[_c('div',{staticClass:\"listening-title\"},[_vm._v(\"主题列表\")]),_c('div',{staticClass:\"model-check\",on:{\"click\":_vm.changShow}},[_vm._v(\" 筛选 \"),_c('van-icon',{attrs:{\"name\":\"list-switch\",\"color\":\"#FFF\"}})],1)]),(_vm.listData.length == 0 || _vm.listData == [])?_c('div',{staticClass:\"empty\",staticStyle:{\"width\":\"100vw\",\"height\":\"80px\",\"text-align\":\"center\"}},[_c('van-loading',{attrs:{\"size\":\"24px\"}},[_vm._v(\"加载中...\")])],1):_vm._e(),_vm._l((_vm.listData),function(item,index){return _c('div',{key:index,on:{\"click\":function($event){return _vm.to_learn(item)}}},[(item.resource_num > 0)?_c('div',{staticClass:\"listen-item\"},[_c('img',{staticClass:\"listen-cover\",attrs:{\"src\":item.cover,\"mode\":\"aspectFill\"}}),_c('div',{staticClass:\"listen-name\"},[_vm._v(\"[听力]\"+_vm._s(item.name))]),_c('div',{staticClass:\"listen-desc\"},[_vm._v(\"共\"+_vm._s(item.resource_num)+\"个资源包\")]),_c('div',{staticClass:\"listen-count\"},[_c('div',{staticClass:\"listening-now\"},[_c('div',{staticClass:\"count-detail\"},[_vm._v(_vm._s(item.read_num)+\"人正在学\")])]),(item.study_num > 0)?_c('div',{staticClass:\"listening-svg\"},[_vm._v(\"已学\"+_vm._s(item.study_num))]):_vm._e(),(item.study_num == 0)?_c('div',{staticClass:\"listening-svg can-check\"},[_vm._v(\"进入学习\")]):_vm._e()])]):_vm._e()])})],2),_c('van-popup',{staticStyle:{\"border-radius\":\"0 0 40px 40px\"},attrs:{\"position\":\"top\"},model:{value:(_vm.show),callback:function ($$v) {_vm.show=$$v},expression:\"show\"}},[_c('div',{staticClass:\"check-main\"},[_c('div',{staticClass:\"tea-search\"},[_c('van-search',{attrs:{\"placeholder\":\"请输入搜索关键词\"},model:{value:(_vm.keyword),callback:function ($$v) {_vm.keyword=$$v},expression:\"keyword\"}})],1),_c('div',{staticClass:\"check-item\"},[_c('div',{staticClass:\"check-item-lables\"},_vm._l((_vm.listData),function(item,index){return _c('div',{key:index,class:['lable-item', _vm.keyword === item.name ? 'lable-item-check' : ''],attrs:{\"data-index\":item.id},on:{\"click\":function($event){return _vm.check_subject_cate_id(item)}}},[_vm._v(_vm._s(item.name))])}),0)]),_c('div',{staticClass:\"btn-cancel\",on:{\"click\":_vm.changShow}},[_vm._v(\"关闭\")]),_c('div',{staticClass:\"btn-ok\",on:{\"click\":_vm.to_share}},[_vm._v(\"确定\")])])]),_c('ListenAi',{attrs:{\"allow\":\"microphone\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import request from './index'\r\nimport MD5 from 'crypto-js/md5'\r\n\r\nconst SECRET_KEY = 'zjuEnglish'\r\nfunction buildSign(data) {\r\n    const keys = Object.keys(data).sort()\r\n    const signStr = keys\r\n        .filter(k => data[k] !== undefined && data[k] !== null)\r\n        .map(k => `${k}=${String(data[k])}`)\r\n        .join('')\r\n        console.log('signStr', signStr + SECRET_KEY)\r\n    return MD5(signStr + SECRET_KEY).toString()\r\n}\r\n\r\nfunction getParamNames(data) {\r\n\r\n    var checkParams = Object.keys(data)\r\n        .sort()\r\n        .join(',')\r\n    return checkParams\r\n}\r\n// 获取上次学习\nexport function UserResource(data) {\r\n    return request({\r\n        url: '/resources/getNewUserResource',\r\n        method: 'get',\r\n        params: data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n// 获取听力主题\nexport function getList(data) {\r\n    return request({\r\n        url: '/subject/gets',\r\n        method: 'get',\r\n        params: data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n// 获取主题\nexport function getCateList(data) {\r\n    return request({\r\n        url: '/subjectCate/gets',\r\n        method: 'get',\r\n        params: data,\r\n        // checkParams: getParamNames(data),\r\n        // checkSign: buildSign(data)\r\n    })\r\n}\r\n// 鑾峰彇璧勬簮鍖?\r\nexport function getResources(data) {\r\n    return request({\r\n        url: '/resources/gets',\r\n        method: 'get',\r\n        params: data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n\r\n// 记录学习资源插入学习日志\nexport function saveUserStudyResource(data) {\r\n    return request({\r\n        url: '/resources/saveUserStudyResource',\r\n        method: 'post',\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n// 鑾峰彇缁冧範棰樺唴瀹?\r\nexport function getJobList(params) {\r\n    return request({\r\n        url: '/job/gets',\r\n        method: 'get',\r\n        params: params,\r\n        checkParams: getParamNames(params),\r\n        checkSign: buildSign(params)\r\n    })\r\n}\r\n\r\n// 提交练习答案\nexport function submitData(data) {\r\n    return request({\r\n        url: '/jobAnswer/save',\r\n        method: 'post',\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n// 修改记录学习时间\nexport function updateUserStudy(data) {\r\n    return request({\r\n        url: '/resources/updateUserStudy',\r\n        method: 'post',\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n// 修改记录学习时间\nexport function jobAnswer(data) {\r\n    return request({\r\n        url: '/jobAnswer/gets',\r\n        method: 'get',\r\n        params: data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\nexport function getMyFeedBackList(data) {\r\n    return request({\r\n        url: '/writeTeacher/getMyFeedBackList',\r\n        method: 'get',\r\n        params: data,   \r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n// 获取答题记录\nexport function getHistoryList(data) {\r\n    return request({\r\n        url: '/jobAnswer/getHistoryList',\r\n        method: 'get',\r\n        params: data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n// 获取答题记录详情\nexport function getHistoryInfo(data) {\r\n    return request({\r\n        url: '/jobAnswer/getHistoryInfo',\r\n        method: 'get',\r\n        params: data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n// 获取答题记录详情题目\nexport function getsHistory(data) {\r\n    return request({\r\n        url: '/job/getsHistory',\r\n        method: 'get',\r\n        params: data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n// resources/getSearchList\r\nexport function getSearchList(data) {\r\n    return request({\r\n        url: '/resources/getSearchList',\r\n        method: 'get',\r\n        params: data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n// resources/getSearchList\r\nexport function saveAccessLog(data) {\r\n    return request({\r\n        url: '/yzm/saveAccessLog',\r\n        method: 'post',\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n\r\n// resources/getSearchList\r\nexport function createCaptcha(data) {\r\n    return request({\r\n        url: '/yzm/createCaptcha',\r\n        method: 'post',\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n\r\n// resources/getSearchList\r\nexport function checkCaptcha(data) {\r\n    return request({\r\n        url: '/yzm/checkCaptcha',\r\n        method: 'post',\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('span',{staticClass:\"reback\",on:{\"click\":_vm.to_dingtalk}},[_vm._v(\"问题反馈\")]),(!_vm.is_show_ai)?_c('img',{staticClass:\"wyt\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\",\"mode\":\"widthFix\"},on:{\"click\":_vm.change_show_ai}}):_vm._e(),(_vm.is_show_ai)?_c('div',{staticClass:\"check-main-ai\"},[_c('div',{staticClass:\"guanbi\",on:{\"click\":_vm.change_show_ai}},[_c('van-icon',{attrs:{\"name\":\"cross\",\"color\":\"#606060\"}})],1),_c('img',{staticClass:\"wyt-say\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\",\"mode\":\"widthFix\"}}),_c('div',{staticClass:\"say-text\"},[_vm._v(\"嗨，你好，一起开启外语学习吧\")]),_c('div',{staticClass:\"fast-parent\"},[_c('div',{staticClass:\"fast-box\",on:{\"click\":function($event){return _vm.chat('Generate a listening passage suitable for me and ask a question based on this passage to help me better understand the main idea.')}}},[_c('span',[_vm._v(\" 生成一篇适合我的听力练习段篇章 \")])]),_c('div',{staticClass:\"fast-box\",on:{\"click\":function($event){_vm.chat('Briefly introduce methods to improve listening comprehension skills (within 60 words).')}}},[_c('span',[_vm._v(\" 介绍提升听力理解的方法 \")])]),_c('div',{staticClass:\"fast-box\",on:{\"click\":function($event){_vm.chat('Briefly introduce how to grasp the main idea in listening practice (within 60 words).')}}},[_c('span',[_vm._v(\" 如何在听力练习中抓住主旨要点 \")])])]),_c('div',{staticClass:\"input-box\"},[_c('button',{staticClass:\"button-default\",style:(_vm.speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''),on:{\"click\":_vm.to_chat}},[_vm._v(\"去对话\")])])]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- src/layouts/TabBarLayout.vue -->\r\n\r\n<template>\r\n    <div>\r\n        <!-- 初始状态下显示的图片，点击可切换显示 -->\r\n        <span class=\"reback\" @click=\"to_dingtalk\">问题反馈</span>\r\n        <img v-if=\"!is_show_ai\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\"\r\n            mode=\"widthFix\" @click=\"change_show_ai\" class=\"wyt\" />\r\n        <!-- 显示 AI 伴学功能的主要界面 -->\r\n        <div class=\"check-main-ai\" v-if=\"is_show_ai\">\r\n            <div class=\"guanbi\" @click=\"change_show_ai\">\r\n                <van-icon name=\"cross\" color=\"#606060\" />\r\n            </div>\r\n            <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\" mode=\"widthFix\"\r\n                class=\"wyt-say\" />\r\n            <div class=\"say-text\">嗨，你好，一起开启外语学习吧</div>\r\n            <!-- 功能选项按钮 -->\r\n            <div class=\"fast-parent\">\r\n                <div class=\"fast-box\"\r\n                    @click=\"chat('Generate a listening passage suitable for me and ask a question based on this passage to help me better understand the main idea.')\">\r\n                    <span>\r\n                        生成一篇适合我的听力练习段篇章\r\n                    </span>\r\n                </div>\r\n                <div class=\"fast-box\"\r\n                    @click=\"chat('Briefly introduce methods to improve listening comprehension skills (within 60 words).')\">\r\n                    <span>\r\n                        介绍提升听力理解的方法\r\n                    </span>\r\n                </div>\r\n                <div class=\"fast-box\"\r\n                    @click=\"chat('Briefly introduce how to grasp the main idea in listening practice (within 60 words).')\">\r\n                    <span>\r\n                        如何在听力练习中抓住主旨要点\r\n                    </span>\r\n                </div>\r\n            </div>\r\n            <div class=\"input-box\">\r\n                <button class=\"button-default\"\r\n                    :style=\"speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''\"\r\n                    @click=\"to_chat\">去对话</button>\r\n            </div>\r\n            <!-- 输入框和录音按钮 -->\r\n            <!-- <div class=\"input-box\" v-show=\"is_speak == 1\">\r\n                <input class=\"question\" maxlength=\"-1\" v-model=\"stu_content\" @input=\"inputText\"\r\n                    placeholder-class=\"placeholder\" :placeholder=\"stu_placeholder\" type=\"text\" />\r\n            </div>\r\n            <div class=\"input-box\" v-show=\"is_speak != 1\">\r\n                <button class=\"button-default\"\r\n                    :style=\"speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''\"\r\n                    @touchstart=\"recStart\" @touchend=\"recStop\">{{ stu_placeholder }}</button>\r\n            </div> -->\r\n            <!-- 发送信息和切换语音输入的按钮 -->\r\n            <!-- <div class=\"say-box\" id=\"end\" v-if=\"speaking === false\">\r\n                <img v-if=\"stu_content !== '' && is_speak === 1\" @click=\"to_chat\" class=\"send-img\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/send_msg.png\" mode=\"aspectFill\" />\r\n                <img v-if=\"stu_content === '' && is_speak === 1\" @click=\"chang_speak\" data-is-speak=\"0\"\r\n                    class=\"other-img\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/audio.png\"\r\n                    mode=\"scaleToFill\" />\r\n                <img v-if=\"stu_content === '' && is_speak === 0 && speaking === false\" @click=\"chang_hand\"\r\n                    data-is-speak=\"1\" class=\"other-img\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/hand.png\" mode=\"scaleToFill\" />\r\n            </div> -->\r\n        </div>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\nimport { getList } from '@/api/listen'\r\n//必须引入的核心\r\nimport Recorder from 'recorder-core'\r\n\r\n//引入mp3格式支持文件；如果需要多个格式支持，把这些格式的编码引擎js文件放到后面统统引入进来即可\r\nimport 'recorder-core/src/engine/mp3'\r\nimport 'recorder-core/src/engine/mp3-engine'\r\n//录制wav格式的用这一句就行\r\nimport 'recorder-core/src/engine/wav'\r\n\r\n//可选的插件支持项，这个是波形可视化插件\r\nimport 'recorder-core/src/extensions/waveview'\r\n//ts import 提示：npm包内已自带了.d.ts声明文件（不过是any类型）\r\nexport default {\r\n    name: 'ListenAi',\r\n    data() {\r\n        return {\r\n            listData: [],\r\n            is_show_ai: false,\r\n            stu_placeholder: '请输入你的疑问...',\r\n            stu_content: '',\r\n            res_id: '',\r\n            is_speak: 1,\r\n            canuse: 1,\r\n            type: 0,\r\n            lang_time: 0,\r\n            speaking: false,\r\n            recorder: null,\r\n            mediaStream: null,\r\n            audioChunks: [],\r\n            audioDetails: null // 新增用于存储音频文件详细信息的状态\r\n        }\r\n    },\r\n    watch: {\r\n        '$route.path': function (newPath) {\r\n            this.active = newPath // 路由变化时更新激活的路由\r\n        }\r\n    },\r\n    methods: {\r\n        async getList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getList({ sid: user.sid, category_id: 1, level: this.level, subject_cate_id: this.subject_cate_id, keyword: this.keyword })\r\n                    const data = response.data\r\n\r\n                    this.getRandomThree(data)\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async to_dingtalk() {\r\n            window.location.href = 'https://qr.dingtalk.com/action/joingroup?code=v1,k1,IhOSmROFTSw+3pBELANkfbCOdwZd2JiTcd6YyE+gR7k=&_dt_no_comment=1&origin=11';\r\n        },\r\n        async getRandomThree(arr) {\r\n            let result = [];\r\n            let clone = arr.slice(); // 创建原数组的副本，避免修改原数组\r\n            console.log(clone)\r\n            // 循环三次，每次选取一个随机元素\r\n            for (let i = 0; i < 3; i++) {\r\n                if (clone.length === 0) break; // 如果数组为空，则退出循环\r\n                let randomIndex = Math.floor(Math.random() * clone.length); // 获取随机索引\r\n                result.push(clone[randomIndex]); // 将随机选取的元素添加到结果数组中\r\n                clone.splice(randomIndex, 1); // 将已选取的元素从原数组中移除\r\n            }\r\n\r\n            this.listData = result\r\n            console.log(this.listData)\r\n        },\r\n        async inputText() {\r\n            console.log(this.stu_content)\r\n            this.type = 0\r\n        },\r\n        async chat(item) {\r\n            this.$router.push({\r\n                name: 'NewChat', query: {\r\n                    project_id: 0,\r\n                    is_history: 0,\r\n                    lang_time: this.lang_time,\r\n                    filePath: this.filePath,\r\n                    type: 0,\r\n                    stype: 'listen',\r\n                    from: 'listen',\r\n                    chat_title: 'E-Listen',\r\n                    content: item,\r\n                    res_id: this.res_id\r\n                }\r\n            })\r\n        },\r\n        async to_chat() {\r\n            this.$router.push({\r\n                name: 'NewChat', query: {\r\n                    project_id: 0,\r\n                    is_history: 0,\r\n                    lang_time: this.lang_time,\r\n                    filePath: this.filePath,\r\n                    type: this.type,\r\n                    stype: 'listen_guide',\r\n                    from: 'listen',\r\n                    chat_title: 'E-Listen',\r\n                    content: this.stu_content,\r\n                    res_id: this.res_id\r\n                }\r\n            })\r\n        },\r\n        async chang_speak() {\r\n            await this.recOpen();\r\n            this.is_speak = 0;\r\n            this.stu_placeholder = \"按住说话...\";\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n\r\n        async chang_hand() {\r\n            this.is_speak = 1;\r\n            this.stu_placeholder = \"请输入你的疑问...\";\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n\r\n        change_show_ai() {\r\n            this.is_show_ai = !this.is_show_ai\r\n        },\r\n        async recOpen() {\r\n            //创建录音对象\r\n            this.rec = Recorder({\r\n                type: \"mp3\" //录音格式，可以换成wav等其他格式\r\n                , sampleRate: 16000 //录音的采样率，越大细节越丰富越细腻\r\n                , bitRate: 16 //录音的比特率，越大音质越好\r\n                , onProcess: (buffers, powerLevel, bufferSampleRate) => {\r\n                    //录音实时回调，大约1秒调用12次本回调\r\n                    //可实时绘制波形，实时上传（发送）数据\r\n                    if (this.wave) this.wave.input(buffers[buffers.length - 1], powerLevel, bufferSampleRate);\r\n                }\r\n            });\r\n\r\n            //打开录音，获得权限\r\n            this.rec.open(() => {\r\n                console.log(\"录音已打开\");\r\n                if (this.$refs.recwave) {//创建音频可视化图形绘制对象\r\n                    this.wave = Recorder.WaveDiv({ elem: this.$refs.recwave });\r\n                }\r\n            }, (msg, isUserNotAllow) => {\r\n                //用户拒绝了录音权限，或者浏览器不支持录音\r\n                console.log((isUserNotAllow ? \"UserNotAllow，\" : \"\") + \"无法录音:\" + msg);\r\n            });\r\n            // this.startRecognition(); // 启动语音识别\r\n        },\r\n        async recStart() {\r\n            if (!this.rec) { console.error(\"未打开录音\"); return }\r\n            this.rec.start();\r\n            this.stu_placeholder = '正在说话';\r\n            this.speaking = true;\r\n            console.log(\"已开始录音\");\r\n            if (this.recognition) {\r\n                this.recognition.start(); // 启动语音识别\r\n            }\r\n        },\r\n        async recStop() {\r\n            if (!this.rec) { console.error(\"未打开录音\"); return }\r\n            this.rec.stop((blob, duration) => {\r\n                //blob就是我们要的录音文件对象，可以上传，或者本地播放\r\n                this.recBlob = blob;\r\n                //简单利用URL生成本地文件地址，此地址只能本地使用，比如赋值给audio.src进行播放，赋值给a.href然后a.click()进行下载（a需提供download=\"xxx.mp3\"属性）\r\n                var localUrl = (window.URL).createObjectURL(blob);\r\n                console.log(\"录音成功\", blob, localUrl, \"时长:\" + duration + \"ms\");\r\n                this.stu_placeholder = '按住说话';\r\n                this.lang_time = (duration / 1000).toFixed()\r\n                this.type = 1\r\n                this.speaking = false;\r\n                this.upload(blob);//把blob文件上传到服务器\r\n                if (this.recognition) {\r\n                    this.recognition.stop(); // 停止语音识别\r\n                }\r\n                // this.rec.close();//关闭录音，释放录音资源，当然可以不释放，后面可以连续调用start\r\n                // this.rec = null;\r\n            }, (err) => {\r\n                console.error(\"结束录音出错：\" + err);\r\n                // this.rec.close();//关闭录音，释放录音资源，当然可以不释放，后面可以连续调用start\r\n                // this.rec = null;\r\n            });\r\n        },\r\n        startRecognition() {\r\n            const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;\r\n            if (SpeechRecognition) {\r\n                this.recognition = new SpeechRecognition();\r\n                // 配置和使用 recognition 对象\r\n            } else {\r\n                console.error('该浏览器不支持语音识别');\r\n            }\r\n\r\n            this.recognition.continuous = true;\r\n            this.recognition.interimResults = true;\r\n            this.recognition.lang = 'en-US';\r\n\r\n            this.recognition.onresult = (event) => {\r\n                let interimTranscript = '';\r\n                let finalTranscript = '';\r\n\r\n                for (let i = event.resultIndex; i < event.results.length; i++) {\r\n                    if (event.results[i].isFinal) {\r\n                        finalTranscript += event.results[i][0].transcript;\r\n                    } else {\r\n                        interimTranscript += event.results[i][0].transcript;\r\n                    }\r\n                }\r\n\r\n                this.content = finalTranscript || interimTranscript;\r\n            };\r\n\r\n            this.recognition.onerror = (event) => {\r\n                console.error('识别错误: ', event.error);\r\n            };\r\n\r\n            this.recognition.onend = () => {\r\n                console.log('识别结束' + this.content);\r\n\r\n            };\r\n        },\r\n        async upload(blob) {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    var form = new FormData();\r\n                    form.append(\"file\", blob, user.sid + \"-\" + new Date().getTime() + \".mp3\"); //和普通form表单并无二致，后端接收到upfile参数的文件，文件名为recorder.mp3\r\n                    form.append(\"key\", \"value\"); //其他参数\r\n\r\n                    var xhr = new XMLHttpRequest();\r\n                    xhr.open(\"POST\", \"https://elang.zju.edu.cn:8082/mobileupload/upload\");\r\n                    // xhr.open(\"POST\", \"https://zju.3dease.com/fcapi/mobileupload/upload\");\r\n                    xhr.onreadystatechange = () => {\r\n                        if (xhr.readyState === 4) {\r\n                            if (xhr.status === 200) {\r\n                                // 请求成功，解析响应\r\n                                var response = JSON.parse(xhr.responseText);\r\n                                console.log(\"上传成功，服务器返回的数据:\", response);\r\n                                this.filePath = response.data.url\r\n                                // 在这里处理服务器返回的数据\r\n                                // this.startRecognition()\r\n                                this.type = 1; //消息类型\r\n                                this.to_chat()\r\n                            } else {\r\n                                // 请求失败，处理错误\r\n                                console.error(\"上传失败，状态码:\", xhr.status);\r\n                                console.error(\"错误信息:\", xhr.statusText);\r\n                            }\r\n                        }\r\n                    };\r\n                    xhr.send(form);\r\n\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async recPlay() {\r\n            //本地播放录音试听，可以直接用URL把blob转换成本地播放地址，用audio进行播放\r\n            var localUrl = URL.createObjectURL(this.recBlob);\r\n            var audio = document.createElement(\"audio\");\r\n            audio.controls = true;\r\n            document.body.appendChild(audio);\r\n            audio.src = localUrl;\r\n            audio.play(); //这样就能播放了\r\n\r\n            //注意不用了时需要revokeObjectURL，否则霸占内存\r\n            setTimeout(function () { URL.revokeObjectURL(audio.src) }, 5000);\r\n        },\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        this.getList()\r\n    }\r\n}\r\n</script>\r\n\r\n\r\n<style scoped>\r\n.check-main-ai {\r\n    width: 100vw;\r\n    height: auto;\r\n    max-height: 400px;\r\n    overflow-y: auto;\r\n    background: linear-gradient(134deg, #eff7fe, #e3f3ff);\r\n    padding-bottom: 25px;\r\n    position: fixed;\r\n    bottom: 0px;\r\n    border-radius: 40px 40px 0 0;\r\n    z-index: 200;\r\n}\r\n\r\n.guanbi {\r\n    width: auto;\r\n    height: auto;\r\n    position: fixed;\r\n    right: 10px;\r\n    text-align: center;\r\n    padding: 8px 15px;\r\n    font-weight: bold;\r\n    /* background-color: rgba(236, 221, 10, 0.3); */\r\n    border-radius: 40px;\r\n}\r\n\r\n.wyt-say {\r\n    width: 75px;\r\n    height: 75px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.say-text {\r\n    width: 300px;\r\n    height: 75px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 60px;\r\n    font-size: 14px;\r\n}\r\n\r\n.fast-parent {\r\n    padding-left: 10vw;\r\n}\r\n\r\n.fast-box {\r\n    width: 80px;\r\n    height: 55px;\r\n    background: #ffffff;\r\n    border-radius: 0px 20px 0px 20px;\r\n    border: 1px solid #acc5ff;\r\n    margin-left: 5px;\r\n    color: #686868;\r\n    font-size: 12px;\r\n    text-align: center;\r\n    padding: 8px 9px;\r\n    text-align: center;\r\n    margin-bottom: 110px;\r\n    align-items: center;\r\n    display: flex;\r\n    float: left;\r\n}\r\n\r\n.fast-box:last-child {\r\n    margin-right: 0;\r\n}\r\n\r\n.input-box {\r\n    width: 80vw;\r\n    height: 42px;\r\n    background: #ffffff;\r\n    border-radius: 16px;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border: none;\r\n}\r\n\r\n.question {\r\n    padding: 10px 60px 10px 15px;\r\n    font-size: 14px;\r\n    color: #000;\r\n    border: none;\r\n}\r\n\r\n.placeholder {\r\n    font-size: 14px;\r\n    color: #989898;\r\n    padding: 3px 15px;\r\n}\r\n\r\n.say-box {\r\n    width: 60px;\r\n    height: 42px;\r\n    background: #ffffff;\r\n    border-radius: 15px;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 293px;\r\n}\r\n\r\n.say-img {\r\n    width: 10px;\r\n    height: 15px;\r\n    padding: 7px 25px;\r\n}\r\n\r\n.send-img {\r\n    width: 53px;\r\n    height: 30px;\r\n    position: fixed;\r\n    bottom: 50px;\r\n    left: 293px;\r\n}\r\n\r\n.other-img {\r\n    width: 25px;\r\n    height: 25px;\r\n    position: fixed;\r\n    bottom: 53px;\r\n    left: 326px;\r\n}\r\n\r\n.button-default {\r\n    background: #fff;\r\n    /* color: #000000; */\r\n    height: 42px;\r\n    width: 323px;\r\n    line-height: 25px;\r\n    text-align: center;\r\n    border-radius: 21;\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n    border: none;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border-radius: 16px;\r\n}\r\n\r\n.button-speaking {\r\n    background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);\r\n    color: #fff;\r\n    height: 42px;\r\n    width: 333px;\r\n    line-height: 25px;\r\n    /* text-align: center; */\r\n    border-radius: 21px;\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n    z-index: 100;\r\n    border: none;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border-radius: 16px;\r\n}\r\n\r\n.reback {\r\n    position: fixed;\r\n    bottom: 160px;\r\n    right: 5px;\r\n    font-size: 16px;\r\n    width: 20px;\r\n    padding: 10px 5px;\r\n    background: rgba(2, 208, 245, 0.5);\r\n    border-radius: 10px;\r\n}\r\n\r\n.wyt {\r\n    position: fixed;\r\n    bottom: 60px;\r\n    right: 5px;\r\n    width: 75px;\r\n    height: 75px;\r\n}\r\n\r\n.btn-test {\r\n    position: absolute;\r\n    top: 0;\r\n}\r\n\r\n.btn-test2 {\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListenAi.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListenAi.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ListenAi.vue?vue&type=template&id=601ae1f4&scoped=true\"\nimport script from \"./ListenAi.vue?vue&type=script&lang=js\"\nexport * from \"./ListenAi.vue?vue&type=script&lang=js\"\nimport style0 from \"./ListenAi.vue?vue&type=style&index=0&id=601ae1f4&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"601ae1f4\",\n  null\n  \n)\n\nexport default component.exports","<template>\r\n  <div class=\"index\">\r\n    <van-nav-bar title=\"听闻天下\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n    <div class=\"head\" v-if=\"NewUserResource != [] && NewUserResource != null\">\r\n      <div class=\"model-title\">上次学习</div>\r\n      <div class=\"last-learn\" @click=\"to_praxis(NewUserResource)\">\r\n        <img :src=\"NewUserResource.cover\" mode=\"aspectFill\" class=\"lesson-cover-img\" />\r\n        <div class=\"lesson-info\">\r\n          <div class=\"lesson-name\">[听力]{{ NewUserResource.name }}</div>\r\n        </div>\r\n        <div class=\"con-to-study\" :data-index=\"NewUserResource.id\" v-if=\"NewUserResource.status == 1\">继续学习</div>\r\n        <div class=\"con-to-study\" :data-index=\"NewUserResource.id\" v-if=\"NewUserResource.status == 2\">已学</div>\r\n      </div>\r\n    </div>\r\n    <div class=\"theme-listening\">\r\n      <div class=\"listening-top\">\r\n        <div class=\"listening-title\">主题列表</div>\r\n        <div class=\"model-check\" @click=\"changShow\">\r\n          筛选\r\n          <van-icon name=\"list-switch\" color=\"#FFF\" />\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"empty\" style=\" width: 100vw;height: 80px;text-align: center;\"\r\n        v-if=\"listData.length == 0 || listData == []\">\r\n        <van-loading size=\"24px\">加载中...</van-loading>\r\n      </div>\r\n      <div v-for=\"(item, index) in listData\" :key=\"index\" @click=\"to_learn(item)\">\r\n        <div class=\"listen-item\" v-if=\"item.resource_num > 0\">\r\n          <img :src=\"item.cover\" mode=\"aspectFill\" class=\"listen-cover\" />\r\n          <div class=\"listen-name\">[听力]{{ item.name }}</div>\r\n          <div class=\"listen-desc\">共{{ item.resource_num }}个资源包</div>\n          <div class=\"listen-count\">\r\n            <div class=\"listening-now\">\r\n              <div class=\"count-detail\">{{ item.read_num }}人正在学</div>\r\n            </div>\r\n            <div class=\"listening-svg\" v-if=\"item.study_num > 0\">已学{{ item.study_num }}</div>\r\n            <div class=\"listening-svg can-check\" v-if=\"item.study_num == 0\">进入学习</div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n    <van-popup v-model=\"show\" position=\"top\" style=\"border-radius: 0 0 40px 40px\">\r\n      <div class=\"check-main\">\r\n        <div class=\"tea-search\">\r\n          <van-search v-model=\"keyword\" placeholder=\"请输入搜索关键词\" />\r\n        </div>\r\n        <!-- <div class=\"check-item\">\r\n          <div class=\"check-item-title\">难易度</div>\r\n          <div class=\"check-item-lables\">\r\n            <div @click=\"check_level(0)\" :class=\"['lable-item', level === 0 ? 'lable-item-check' : '']\" :data-index=\"0\">\r\n              全部\r\n            </div>\r\n            <div @click=\"check_level(1)\" :class=\"['lable-item', level === 1 ? 'lable-item-check' : '']\" :data-index=\"1\">\r\n              初级\r\n            </div>\r\n            <div @click=\"check_level(2)\" :class=\"['lable-item', level === 2 ? 'lable-item-check' : '']\" :data-index=\"2\">\r\n              中级\r\n            </div>\r\n            <div @click=\"check_level(3)\" :class=\"['lable-item', level === 3 ? 'lable-item-check' : '']\" :data-index=\"3\">\r\n              高级\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"check-item\">\r\n          <div class=\"check-item-title\">发布时间</div>\r\n          <div class=\"check-item-lables\">\r\n            <div @click=\"check_time_level(0)\" :class=\"['lable-item', time_level === 0 ? 'lable-item-check' : '']\"\r\n              :data-index=\"0\">全部</div>\r\n            <div @click=\"check_time_level(1)\" :class=\"['lable-item', time_level === 1 ? 'lable-item-check' : '']\"\r\n              :data-index=\"1\">一天内</div>\r\n            <div @click=\"check_time_level(2)\" :class=\"['lable-item', time_level === 2 ? 'lable-item-check' : '']\"\r\n              :data-index=\"2\">一周内</div>\r\n            <div @click=\"check_time_level(3)\" :class=\"['lable-item', time_level === 3 ? 'lable-item-check' : '']\"\r\n              :data-index=\"3\">一月内</div>\r\n          </div>\r\n        </div> -->\r\n\r\n\r\n        <div class=\"check-item\">\r\n          <div class=\"check-item-lables\">\r\n            <div @click=\"check_subject_cate_id(item)\"\r\n              :class=\"['lable-item', keyword === item.name ? 'lable-item-check' : '']\" :data-index=\"item.id\"\r\n              v-for=\"(item, index) in listData\" :key=\"index\">{{ item.name }}</div>\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"btn-cancel\" @click=\"changShow\">关闭</div>\r\n        <div class=\"btn-ok\" @click=\"to_share\">确定</div>\r\n      </div>\r\n    </van-popup>\r\n    <ListenAi allow=\"microphone\" />\r\n  </div>\r\n</template>\r\n<script>\r\nimport { UserResource, getList, getCateList } from '@/api/listen'\r\nimport { saveUserStudyResource } from '@/api/user'\r\nimport ListenAi from \"@/components/ListenAi\";\r\nexport default {\r\n  components: { ListenAi },\r\n  name: 'Index',\r\n  data() {\r\n    return {\r\n      NewUserResource: [],\r\n      listData: [],\r\n      subjectCate: [],\r\n      show: false,\r\n      level: '',\r\n      time_level: '',\r\n      subject_cate_id: '',\r\n      keyword: '',\r\n      loading: false\r\n    }\r\n  },\r\n  methods: {\r\n    async check_level(e) {\r\n      this.level = e\r\n    },\r\n    async to_share() {\r\n      this.$router.push({ name: 'Serch', query: { category_id: 1, keyword: this.keyword } })\r\n    },\r\n    async check_time_level(e) {\r\n      this.time_level = e\r\n    },\r\n    async check_subject_cate_id(item) {\r\n      this.keyword = item.name\r\n    },\r\n    async to_praxis(item) {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          console.log(item)\r\n          const response = await saveUserStudyResource({ sid: user.sid, resource_id: item.id })\r\n          if (response.code == 100) {\r\n\r\n            this.$router.push({ name: 'Praxis', query: { log_id: response.data, resources_id: item.id } })\r\n\r\n          }\r\n\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async onClickLeft() {\r\n      history.back()\r\n    },\r\n    async UserResource() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await UserResource({ sid: user.sid, category_id: 1 })\r\n          const data = response.data\r\n\r\n          data.cover = data.cover.replace('a-news.oss-cn-hangzhou.aliyuncs.com', 'a-news.oss-accelerate.aliyuncs.com');\r\n\r\n          console.log(data)\r\n          this.NewUserResource = data\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async getList() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          if (this.level == 0) { this.level = '' }\r\n          if (this.subject_cate_id == 0) { this.subject_cate_id = '' }\r\n          const response = await getList({ sid: user.sid, category_id: 1, level: this.level, subject_cate_id: this.subject_cate_id, keyword: this.keyword })\r\n          const data = response.data\r\n\r\n          data.forEach(element => {\r\n            element.cover = element.cover.replace('a-news.oss-cn-hangzhou.aliyuncs.com', 'a-news.oss-accelerate.aliyuncs.com');\r\n          });\r\n\r\n          this.listData = data\r\n          this.show = false;\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async getCateList() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await getCateList()\r\n          const data = response.data\r\n          data.forEach(element => {\r\n            element.cover = element.cover.replace('a-news.oss-cn-hangzhou.aliyuncs.com', 'a-news.oss-accelerate.aliyuncs.com');\r\n          });\r\n          this.subjectCate = data\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async changShow() {\r\n      this.show = !this.show;\r\n    },\r\n    async to_learn(item) {\r\n      this.$router.push({ name: 'ListenLearn', query: { subject_id: item.id, subject_name: item.name } })\r\n    }\r\n  },\r\n  mounted() {\r\n    // 在组件挂载后立即获取任务数据\r\n    this.UserResource()\r\n    this.getList()\r\n    this.getCateList()\r\n  }\r\n}\r\n</script>\r\n<style scoped>\r\n.head {\r\n  width: 100vw;\r\n  height: 150px;\r\n  background: linear-gradient(to bottom, #E2F2FF, #FFF);\r\n}\r\n\r\n.model-title {\r\n  padding: 13px 0 11px 24px;\r\n  font-size: 16px;\r\n  text-align: left;\r\n}\r\n\r\n.last-learn {\r\n  width: 90vw;\r\n  height: 85px;\r\n  background: #FFFFFF;\r\n  box-shadow: 0px 2px 10px 1px rgba(80, 143, 206, 0.1);\r\n  border-radius: 20px 20px 20px 20px;\r\n  margin: 0 auto;\r\n}\r\n\r\n.lesson-cover-img {\r\n  width: 58px;\r\n  height: 58px;\r\n  padding: 14px 10px 0 13px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  border-radius: 5px;\r\n}\r\n\r\n.lesson-info {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 185px;\r\n  height: 44px;\r\n  padding: 10px 5px 20px 0;\r\n  text-align: left;\r\n}\r\n\r\n.lesson-name {\r\n  font-size: 14px;\r\n  font-weight: bold;\r\n  padding-bottom: 9px;\r\n  overflow: hidden;\r\n  height: 28px;\r\n  text-overflow: ellipsis;\r\n  white-space: nowrap;\r\n}\r\n\r\n.con-to-study {\r\n  width: 60px;\r\n  height: 85px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  line-height: 85px;\r\n  font-size: 12px;\r\n  color: #003F88;\r\n}\r\n\r\n.theme-listening {\r\n  width: 100vw;\r\n  height: auto;\r\n  text-align: left;\r\n  /* margin: 0 auto; */\r\n}\r\n\r\n.listening-title {\r\n  padding: 13px 0 11px 24px;\r\n  font-size: 16px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.model-check {\r\n  width: 59px;\r\n  height: 24px;\r\n  background: #000000;\r\n  border-radius: 25px;\r\n  opacity: 0.26;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin-left: 183px;\r\n  margin-top: 15px;\r\n  color: #FFF;\r\n  line-height: 24px;\r\n  padding-left: 21px;\r\n  font-size: 14px;\r\n}\r\n\r\n.listen-item {\r\n  width: 90vw;\r\n  height: auto;\r\n  margin: 18px auto;\r\n  border-bottom: 1px #E4E4E4 solid;\r\n  padding-bottom: 20px;\r\n}\r\n\r\n.listen-cover {\r\n  width: 90vw;\r\n  height: 150px;\r\n  border-radius: 10px;\r\n}\r\n\r\n.listen-name {\r\n  font-size: 14px;\r\n  font-weight: bold;\r\n  padding-top: 10px;\r\n}\r\n\r\n.listen-desc {\r\n  font-size: 12px;\r\n  color: #979797;\r\n  padding: 5px 23px 0px 0;\r\n}\r\n\r\n.listening-now {\r\n  /* width: 200px; */\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  padding-right: 10px;\r\n}\r\n\r\n.count-detail {\r\n  vertical-align: top;\r\n  padding: 5px 5px 0rpx 0rpx;\r\n  font-size: 12px;\r\n  display: inline-block;\r\n  vertical-align: top;\r\n  color: #979797;\r\n}\r\n\r\n.listening-svg {\r\n  width: 70px;\r\n  height: 29px;\r\n  font-size: 12px;\r\n  line-height: 29px;\r\n  border: #003F88 solid 1px;\r\n  border-radius: 14px;\r\n  text-align: center;\r\n  margin-top: -12px;\r\n  float: right;\r\n}\r\n\r\n.can-check {\r\n  background-color: #003F88;\r\n  color: #FFF;\r\n}\r\n\r\n.check-main {\r\n  width: 100%;\r\n  height: auto;\r\n  max-height: 600px;\r\n  overflow-y: scroll;\r\n  border-radius: 0 0 40px 40px;\r\n  background-color: #FFF;\r\n  padding-bottom: 25px;\r\n}\r\n\r\n.tea-search {\r\n  width: 360px;\r\n  height: 36px;\r\n  background: #000000;\r\n  border-radius: 25px;\r\n  /* opacity: 0.26; */\r\n  margin: 11px auto;\r\n}\r\n\r\n.check-item {\r\n  width: 339px;\r\n  margin: 11px auto;\r\n  height: auto;\r\n  text-align: left;\r\n}\r\n\r\n.check-item-title {\r\n  font-size: 12px;\r\n  font-weight: bold;\r\n  text-align: left;\r\n}\r\n\r\n.check-item-lables {\r\n  margin-top: 15px;\r\n}\r\n\r\n.lable-item {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin-right: 12px;\r\n  margin-bottom: 12px;\r\n  border: solid 1px #F4F8FB;\r\n  background-color: #F4F8FB;\r\n  padding: 2px 5px;\r\n  border-radius: 20rpx;\r\n  font-size: 12px;\r\n  color: #989898;\r\n}\r\n\r\n.lable-item-check {\r\n  border: #699FDE solid 1px;\r\n  background-color: #E2F9FF;\r\n  color: #579ACE;\r\n}\r\n\r\n.btn-cancel {\r\n  width: 152px;\r\n  height: 39px;\r\n  border-radius: 20px;\r\n  border: 1px solid #828282;\r\n  text-align: center;\r\n  line-height: 39px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin-left: 22px;\r\n}\r\n\r\n.btn-ok {\r\n  width: 152px;\r\n  height: 39px;\r\n  border-radius: 20px;\r\n  color: #FFF;\r\n  background-color: #003F88;\r\n  border: 1px solid #828282;\r\n  text-align: center;\r\n  line-height: 39px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin-left: 22px;\r\n}\r\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Index.vue?vue&type=template&id=72a0eff4&scoped=true\"\nimport script from \"./Index.vue?vue&type=script&lang=js\"\nexport * from \"./Index.vue?vue&type=script&lang=js\"\nimport style0 from \"./Index.vue?vue&type=style&index=0&id=72a0eff4&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"72a0eff4\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"learn\"},[_c('img',{staticClass:\"top-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/2.png\",\"mode\":\"\"}}),_c('div',{staticClass:\"main-top\"},[_c('van-nav-bar',{attrs:{\"title\":\"听闻天下\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}})],1),_c('div',{staticClass:\"main-content\"},[_c('div',{staticClass:\"content-mian\"},[_c('div',{staticClass:\"listen-title\"},[_vm._v(\"[听力]\"+_vm._s(_vm.subject_name))]),(_vm.resources.length == 0 || _vm.resources == [] || _vm.loading == true)?_c('div',{staticClass:\"empty\",staticStyle:{\"width\":\"100%\",\"height\":\"80px\",\"text-align\":\"center\",\"line-height\":\"80px\"}},[_c('van-loading',{attrs:{\"size\":\"24px\"}},[_vm._v(\"加载中...\")])],1):_vm._e(),_vm._l((_vm.resources),function(item,index){return _c('div',{key:index,staticClass:\"listen-item\",on:{\"click\":function($event){return _vm.to_praxis(item)}}},[_c('div',{staticClass:\"listen-left\"},[_c('div',{staticClass:\"listen-name\"},[_vm._v(_vm._s(item.name))])]),_c('div',{staticClass:\"listen-right\"},[(item.status == 0)?_c('div',{staticClass:\"listen-status\"},[_vm._v(\"未完成\")]):_vm._e(),(item.status == 1)?_c('div',{staticClass:\"listen-status listen-status3\"},[_vm._v(\"上次未学完\")]):_vm._e(),(item.status == 2)?_c('div',{staticClass:\"listen-status listen-status3\"},[_vm._v(\"已学\")]):_vm._e(),(item.hisLabel == 1)?_c('div',{staticClass:\"listen-status listen-status3\",staticStyle:{\"color\":\"red\"}},[_vm._v(\"历史已做\")]):_vm._e()])])})],2)]),_c('ListenLearnAi',{attrs:{\"subject_name\":_vm.subject_name,\"allow\":\"microphone\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('span',{staticClass:\"reback\",on:{\"click\":_vm.to_dingtalk}},[_vm._v(\"问题反馈\")]),(!_vm.is_show_ai)?_c('img',{staticClass:\"wyt\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\",\"mode\":\"widthFix\"},on:{\"click\":_vm.change_show_ai}}):_vm._e(),(_vm.is_show_ai)?_c('div',{staticClass:\"check-main-ai\"},[_c('div',{staticClass:\"guanbi\",on:{\"click\":_vm.change_show_ai}},[_c('van-icon',{attrs:{\"name\":\"cross\",\"color\":\"#606060\"}})],1),_c('img',{staticClass:\"wyt-say\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\",\"mode\":\"widthFix\"}}),_c('div',{staticClass:\"say-text\"},[_vm._v(\"嗨，你好，一起开启外语学习吧\")]),_c('div',{staticClass:\"fast-parent\"},[_c('div',{staticClass:\"fast-box\",on:{\"click\":function($event){return _vm.chat('Generate a listening passage suitable for me and ask a question based on this passage to help me better understand the main idea.')}}},[_c('span',[_vm._v(\" 生成一篇适合我的听力练习段篇章 \")])]),_c('div',{staticClass:\"fast-box\",on:{\"click\":function($event){_vm.chat('Briefly introduce methods to improve listening comprehension skills (within 60 words).')}}},[_c('span',[_vm._v(\" 介绍提升听力理解的方法 \")])]),_c('div',{staticClass:\"fast-box\",on:{\"click\":function($event){_vm.chat('Briefly introduce how to grasp the main idea in listening practice (within 60 words).')}}},[_c('span',[_vm._v(\" 如何在听力练习中抓住主旨要点 \")])])]),_c('div',{staticClass:\"input-box\"},[_c('button',{staticClass:\"button-default\",style:(_vm.speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''),on:{\"click\":_vm.to_chat}},[_vm._v(\"去对话\")])])]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- src/layouts/TabBarLayout.vue -->\r\n\r\n<template>\r\n    <div>\r\n        <!-- 初始状态下显示的图片，点击可切换显示 -->\r\n        <span class=\"reback\" @click=\"to_dingtalk\">问题反馈</span>\r\n        <img v-if=\"!is_show_ai\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\"\r\n            mode=\"widthFix\" @click=\"change_show_ai\" class=\"wyt\" />\r\n        <!-- 显示 AI 伴学功能的主要界面 -->\r\n        <div class=\"check-main-ai\" v-if=\"is_show_ai\">\r\n            <div class=\"guanbi\" @click=\"change_show_ai\">\r\n                <van-icon name=\"cross\" color=\"#606060\" />\r\n            </div>\r\n            <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\" mode=\"widthFix\"\r\n                class=\"wyt-say\" />\r\n            <div class=\"say-text\">嗨，你好，一起开启外语学习吧</div>\r\n            <!-- 功能选项按钮 -->\r\n            <div class=\"fast-parent\">\r\n                <div class=\"fast-box\"\r\n                    @click=\"chat('Generate a listening passage suitable for me and ask a question based on this passage to help me better understand the main idea.')\">\r\n                    <span>\r\n                        生成一篇适合我的听力练习段篇章\r\n                    </span>\r\n                </div>\r\n                <div class=\"fast-box\"\r\n                    @click=\"chat('Briefly introduce methods to improve listening comprehension skills (within 60 words).')\">\r\n                    <span>\r\n                        介绍提升听力理解的方法\r\n                    </span>\r\n                </div>\r\n                <div class=\"fast-box\"\r\n                    @click=\"chat('Briefly introduce how to grasp the main idea in listening practice (within 60 words).')\">\r\n                    <span>\r\n                        如何在听力练习中抓住主旨要点\r\n                    </span>\r\n                </div>\r\n            </div>\r\n            <div class=\"input-box\">\r\n                <button class=\"button-default\"\r\n                    :style=\"speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''\"\r\n                    @click=\"to_chat\">去对话</button>\r\n            </div>\r\n            <!-- 输入框和录音按钮 -->\r\n            <!-- <div class=\"input-box\" v-show=\"is_speak == 1\">\r\n                <input class=\"question\" maxlength=\"-1\" v-model=\"stu_content\" @input=\"inputText\"\r\n                    placeholder-class=\"placeholder\" :placeholder=\"stu_placeholder\" type=\"text\" />\r\n            </div>\r\n            <div class=\"input-box\" v-show=\"is_speak != 1\">\r\n                <button class=\"button-default\"\r\n                    :style=\"speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''\"\r\n                    @touchstart=\"recStart\" @touchend=\"recStop\">{{ stu_placeholder }}</button>\r\n            </div> -->\r\n            <!-- 发送信息和切换语音输入的按钮 -->\r\n            <!-- <div class=\"say-box\" id=\"end\" v-if=\"speaking === false\">\r\n                <img v-if=\"stu_content !== '' && is_speak === 1\" @click=\"to_chat\" class=\"send-img\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/send_msg.png\" mode=\"aspectFill\" />\r\n                <img v-if=\"stu_content === '' && is_speak === 1\" @click=\"chang_speak\" data-is-speak=\"0\"\r\n                    class=\"other-img\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/audio.png\"\r\n                    mode=\"scaleToFill\" />\r\n                <img v-if=\"stu_content === '' && is_speak === 0 && speaking === false\" @click=\"chang_hand\"\r\n                    data-is-speak=\"1\" class=\"other-img\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/hand.png\" mode=\"scaleToFill\" />\r\n            </div> -->\r\n        </div>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\n//必须引入的核心\r\nimport Recorder from 'recorder-core'\r\n\r\n//引入mp3格式支持文件；如果需要多个格式支持，把这些格式的编码引擎js文件放到后面统统引入进来即可\r\nimport 'recorder-core/src/engine/mp3'\r\nimport 'recorder-core/src/engine/mp3-engine'\r\n//录制wav格式的用这一句就行\r\nimport 'recorder-core/src/engine/wav'\r\n\r\n//可选的插件支持项，这个是波形可视化插件\r\nimport 'recorder-core/src/extensions/waveview'\r\n//ts import 提示：npm包内已自带了.d.ts声明文件（不过是any类型）\r\nexport default {\r\n    name: 'ListenAi',\r\n    props: {\r\n        subject_name: {\r\n            type: String,\r\n            reqired: true\r\n        }\r\n    },\r\n    data() {\r\n        return {\r\n            listData: [],\r\n            is_show_ai: false,\r\n            stu_placeholder: '请输入你的疑问...',\r\n            stu_content: '',\r\n            is_speak: 1,\r\n            res_id: '',\r\n            canuse: 1,\r\n            type: 0,\r\n            lang_time: 0,\r\n            speaking: false,\r\n            recorder: null,\r\n            mediaStream: null,\r\n            audioChunks: [],\r\n            audioDetails: null // 新增用于存储音频文件详细信息的状态\r\n        }\r\n    },\r\n    watch: {\r\n        '$route.path': function (newPath) {\r\n            this.active = newPath // 路由变化时更新激活的路由\r\n        }\r\n    },\r\n    methods: {\r\n        async to_dingtalk() {\r\n            window.location.href = 'https://qr.dingtalk.com/action/joingroup?code=v1,k1,IhOSmROFTSw+3pBELANkfbCOdwZd2JiTcd6YyE+gR7k=&_dt_no_comment=1&origin=11';\r\n        },\r\n        async inputText() {\r\n            console.log(this.stu_content)\r\n            this.type = 0\r\n        },\r\n        async chat(item) {\r\n            this.$router.push({\r\n                name: 'NewChat', query: {\r\n                    project_id: 0,\r\n                    is_history: 0,\r\n                    lang_time: this.lang_time,\r\n                    filePath: this.filePath,\r\n                    type: 0,\r\n                    stype: 'listen_guide',\r\n                    from: 'listen',\r\n                    chat_title: 'E-Listen',\r\n                    system: this.subject_name,\r\n                    content: item,\r\n                    res_id: this.res_id\r\n                }\r\n            })\r\n        },\r\n        async to_chat() {\r\n            this.$router.push({\r\n                name: 'NewChat', query: {\r\n                    project_id: 0,\r\n                    is_history: 0,\r\n                    lang_time: this.lang_time,\r\n                    filePath: this.filePath,\r\n                    type: this.type,\r\n                    stype: 'listen',\r\n                    from: 'listen_guide',\r\n                    chat_title: 'E-Listen',\r\n                    system: this.subject_name,\r\n                    content: this.stu_content,\r\n                    res_id: this.res_id\r\n                }\r\n            })\r\n        },\r\n        async chang_speak() {\r\n            await this.recOpen();\r\n            this.is_speak = 0;\r\n            this.stu_placeholder = \"按住说话...\";\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n\r\n        async chang_hand() {\r\n            this.is_speak = 1;\r\n            this.stu_placeholder = \"请输入你的疑问...\";\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n\r\n        change_show_ai() {\r\n            this.is_show_ai = !this.is_show_ai\r\n        },\r\n        async recOpen() {\r\n            //创建录音对象\r\n            this.rec = Recorder({\r\n                type: \"mp3\" //录音格式，可以换成wav等其他格式\r\n                , sampleRate: 16000 //录音的采样率，越大细节越丰富越细腻\r\n                , bitRate: 16 //录音的比特率，越大音质越好\r\n                , onProcess: (buffers, powerLevel, bufferSampleRate) => {\r\n                    //录音实时回调，大约1秒调用12次本回调\r\n                    //可实时绘制波形，实时上传（发送）数据\r\n                    if (this.wave) this.wave.input(buffers[buffers.length - 1], powerLevel, bufferSampleRate);\r\n                }\r\n            });\r\n\r\n            //打开录音，获得权限\r\n            this.rec.open(() => {\r\n                console.log(\"录音已打开\");\r\n                if (this.$refs.recwave) {//创建音频可视化图形绘制对象\r\n                    this.wave = Recorder.WaveDiv({ elem: this.$refs.recwave });\r\n                }\r\n            }, (msg, isUserNotAllow) => {\r\n                //用户拒绝了录音权限，或者浏览器不支持录音\r\n                console.log((isUserNotAllow ? \"UserNotAllow，\" : \"\") + \"无法录音:\" + msg);\r\n            });\r\n            // this.startRecognition(); // 启动语音识别\r\n        },\r\n        async recStart() {\r\n            if (!this.rec) { console.error(\"未打开录音\"); return }\r\n            this.rec.start();\r\n            this.stu_placeholder = '正在说话';\r\n            this.speaking = true;\r\n            console.log(\"已开始录音\");\r\n            if (this.recognition) {\r\n                this.recognition.start(); // 启动语音识别\r\n            }\r\n        },\r\n        async recStop() {\r\n            if (!this.rec) { console.error(\"未打开录音\"); return }\r\n            this.rec.stop((blob, duration) => {\r\n                //blob就是我们要的录音文件对象，可以上传，或者本地播放\r\n                this.recBlob = blob;\r\n                //简单利用URL生成本地文件地址，此地址只能本地使用，比如赋值给audio.src进行播放，赋值给a.href然后a.click()进行下载（a需提供download=\"xxx.mp3\"属性）\r\n                var localUrl = (window.URL).createObjectURL(blob);\r\n                console.log(\"录音成功\", blob, localUrl, \"时长:\" + duration + \"ms\");\r\n                this.stu_placeholder = '按住说话';\r\n                this.lang_time = (duration / 1000).toFixed()\r\n                this.type = 1\r\n                this.speaking = false;\r\n                this.upload(blob);//把blob文件上传到服务器\r\n                if (this.recognition) {\r\n                    this.recognition.stop(); // 停止语音识别\r\n                }\r\n                // this.rec.close();//关闭录音，释放录音资源，当然可以不释放，后面可以连续调用start\r\n                // this.rec = null;\r\n            }, (err) => {\r\n                console.error(\"结束录音出错：\" + err);\r\n                // this.rec.close();//关闭录音，释放录音资源，当然可以不释放，后面可以连续调用start\r\n                // this.rec = null;\r\n            });\r\n        },\r\n        startRecognition() {\r\n            const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;\r\n            if (SpeechRecognition) {\r\n                this.recognition = new SpeechRecognition();\r\n                // 配置和使用 recognition 对象\r\n            } else {\r\n                console.error('该浏览器不支持语音识别');\r\n            }\r\n\r\n            this.recognition.continuous = true;\r\n            this.recognition.interimResults = true;\r\n            this.recognition.lang = 'en-US';\r\n\r\n            this.recognition.onresult = (event) => {\r\n                let interimTranscript = '';\r\n                let finalTranscript = '';\r\n\r\n                for (let i = event.resultIndex; i < event.results.length; i++) {\r\n                    if (event.results[i].isFinal) {\r\n                        finalTranscript += event.results[i][0].transcript;\r\n                    } else {\r\n                        interimTranscript += event.results[i][0].transcript;\r\n                    }\r\n                }\r\n\r\n                this.content = finalTranscript || interimTranscript;\r\n            };\r\n\r\n            this.recognition.onerror = (event) => {\r\n                console.error('识别错误: ', event.error);\r\n            };\r\n\r\n            this.recognition.onend = () => {\r\n                console.log('识别结束' + this.content);\r\n\r\n            };\r\n        },\r\n        async upload(blob) {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    var form = new FormData();\r\n                    form.append(\"file\", blob, user.sid + \"-\" + new Date().getTime() + \".mp3\"); //和普通form表单并无二致，后端接收到upfile参数的文件，文件名为recorder.mp3\r\n                    form.append(\"key\", \"value\"); //其他参数\r\n\r\n                    var xhr = new XMLHttpRequest();\r\n                    xhr.open(\"POST\", \"https://elang.zju.edu.cn:8082/mobileupload/upload\");\r\n                    // xhr.open(\"POST\", \"https://zju.3dease.com/fcapi/mobileupload/upload\");\r\n                    xhr.onreadystatechange = () => {\r\n                        if (xhr.readyState === 4) {\r\n                            if (xhr.status === 200) {\r\n                                // 请求成功，解析响应\r\n                                var response = JSON.parse(xhr.responseText);\r\n                                console.log(\"上传成功，服务器返回的数据:\", response);\r\n                                this.filePath = response.data.url\r\n                                // 在这里处理服务器返回的数据\r\n                                // this.startRecognition()\r\n                                this.type = 1; //消息类型\r\n                                this.to_chat()\r\n                            } else {\r\n                                // 请求失败，处理错误\r\n                                console.error(\"上传失败，状态码:\", xhr.status);\r\n                                console.error(\"错误信息:\", xhr.statusText);\r\n                            }\r\n                        }\r\n                    };\r\n                    xhr.send(form);\r\n\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async recPlay() {\r\n            //本地播放录音试听，可以直接用URL把blob转换成本地播放地址，用audio进行播放\r\n            var localUrl = URL.createObjectURL(this.recBlob);\r\n            var audio = document.createElement(\"audio\");\r\n            audio.controls = true;\r\n            document.body.appendChild(audio);\r\n            audio.src = localUrl;\r\n            audio.play(); //这样就能播放了\r\n\r\n            //注意不用了时需要revokeObjectURL，否则霸占内存\r\n            setTimeout(function () { URL.revokeObjectURL(audio.src) }, 5000);\r\n        },\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n    }\r\n}\r\n</script>\r\n\r\n\r\n<style scoped>\r\n.check-main-ai {\r\n    width: 100vw;\r\n    height: auto;\r\n    max-height: 400px;\r\n    overflow-y: auto;\r\n    background: linear-gradient(134deg, #eff7fe, #e3f3ff);\r\n    padding-bottom: 25px;\r\n    position: fixed;\r\n    bottom: 0px;\r\n    border-radius: 40px 40px 0 0;\r\n    z-index: 200;\r\n}\r\n\r\n.guanbi {\r\n    width: auto;\r\n    height: auto;\r\n    position: fixed;\r\n    right: 10px;\r\n    text-align: center;\r\n    padding: 8px 15px;\r\n    font-weight: bold;\r\n    /* background-color: rgba(236, 221, 10, 0.3); */\r\n    border-radius: 40px;\r\n}\r\n\r\n.wyt-say {\r\n    width: 75px;\r\n    height: 75px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.say-text {\r\n    width: 300px;\r\n    height: 75px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 60px;\r\n    font-size: 14px;\r\n}\r\n\r\n.fast-parent {\r\n    padding-left: 10vw;\r\n}\r\n\r\n.fast-box {\r\n    width: 80px;\r\n    height: 55px;\r\n    background: #ffffff;\r\n    border-radius: 0px 20px 0px 20px;\r\n    border: 1px solid #acc5ff;\r\n    margin-left: 5px;\r\n    color: #686868;\r\n    font-size: 12px;\r\n    text-align: center;\r\n    padding: 8px 9px;\r\n    text-align: center;\r\n    margin-bottom: 110px;\r\n    align-items: center;\r\n    display: flex;\r\n    float: left;\r\n}\r\n\r\n.fast-box:last-child {\r\n    margin-right: 0;\r\n}\r\n\r\n.input-box {\r\n    width: 80vw;\r\n    height: 42px;\r\n    background: #ffffff;\r\n    border-radius: 16px;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border: none;\r\n}\r\n\r\n.question {\r\n    padding: 10px 60px 10px 15px;\r\n    font-size: 14px;\r\n    color: #000;\r\n    border: none;\r\n}\r\n\r\n.placeholder {\r\n    font-size: 14px;\r\n    color: #989898;\r\n    padding: 3px 15px;\r\n}\r\n\r\n.say-box {\r\n    width: 60px;\r\n    height: 42px;\r\n    background: #ffffff;\r\n    border-radius: 15px;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 293px;\r\n}\r\n\r\n.say-img {\r\n    width: 10px;\r\n    height: 15px;\r\n    padding: 7px 25px;\r\n}\r\n\r\n.send-img {\r\n    width: 53px;\r\n    height: 30px;\r\n    position: fixed;\r\n    bottom: 50px;\r\n    left: 293px;\r\n}\r\n\r\n.other-img {\r\n    width: 25px;\r\n    height: 25px;\r\n    position: fixed;\r\n    bottom: 53px;\r\n    left: 326px;\r\n}\r\n\r\n.button-default {\r\n    background: #fff;\r\n    /* color: #000000; */\r\n    height: 42px;\r\n    width: 323px;\r\n    line-height: 25px;\r\n    text-align: center;\r\n    border-radius: 21;\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n    border: none;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border-radius: 16px;\r\n}\r\n\r\n.button-speaking {\r\n    background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);\r\n    color: #fff;\r\n    height: 42px;\r\n    width: 333px;\r\n    line-height: 25px;\r\n    /* text-align: center; */\r\n    border-radius: 21px;\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n    z-index: 100;\r\n    border: none;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border-radius: 16px;\r\n}\r\n\r\n.reback {\r\n    position: fixed;\r\n    bottom: 160px;\r\n    right: 5px;\r\n    font-size: 16px;\r\n    width: 20px;\r\n    padding: 10px 5px;\r\n    background: rgba(2, 208, 245, 0.5);\r\n    border-radius: 10px;\r\n}\r\n\r\n.wyt {\r\n    position: fixed;\r\n    bottom: 60px;\r\n    right: 5px;\r\n    width: 75px;\r\n    height: 75px;\r\n}\r\n\r\n.btn-test {\r\n    position: absolute;\r\n    top: 0;\r\n}\r\n\r\n.btn-test2 {\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListenLearnAi.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListenLearnAi.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ListenLearnAi.vue?vue&type=template&id=18c4b91d&scoped=true\"\nimport script from \"./ListenLearnAi.vue?vue&type=script&lang=js\"\nexport * from \"./ListenLearnAi.vue?vue&type=script&lang=js\"\nimport style0 from \"./ListenLearnAi.vue?vue&type=style&index=0&id=18c4b91d&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"18c4b91d\",\n  null\n  \n)\n\nexport default component.exports","<template>\r\n    <div class=\"learn\">\r\n        <img class=\"top-img\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/2.png\" mode=\"\" />\r\n        <div class=\"main-top\">\r\n            <van-nav-bar title=\"听闻天下\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        </div>\r\n        <div class=\"main-content\">\r\n            <div class=\"content-mian\">\r\n                <div class=\"listen-title\">[听力]{{ subject_name }}</div>\r\n                <div class=\"empty\" style=\" width:100%;height: 80px;text-align: center;line-height: 80px;\"\r\n                    v-if=\"resources.length == 0 || resources == [] || loading == true\">\r\n                    <van-loading size=\"24px\">加载中...</van-loading>\r\n                </div>\r\n                <div class=\"listen-item\" v-for=\"(item, index) in resources\" :key=\"index\" @click=\"to_praxis(item)\">\r\n                    <div class=\"listen-left\">\r\n                        <div class=\"listen-name\">{{ item.name }}</div>\r\n                    </div>\r\n                    <div class=\"listen-right\">\r\n                        <div class=\"listen-status\" v-if=\"item.status == 0\">未完成</div>\r\n                        <div class=\"listen-status listen-status3\" v-if=\"item.status == 1\">上次未学完</div>\r\n                        <div class=\"listen-status listen-status3\" v-if=\"item.status == 2\">已学</div>\r\n                        <div class=\"listen-status listen-status3\" style=\"color: red;\" v-if=\"item.hisLabel == 1\">历史已做</div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n        <ListenLearnAi :subject_name=\"subject_name\" allow=\"microphone\" />\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getResources, saveUserStudyResource } from '@/api/listen'\r\nimport ListenLearnAi from \"@/components/ListenLearnAi\";\r\nexport default {\r\n    components: { ListenLearnAi },\r\n    name: 'Learn',\r\n    data() {\r\n        return {\r\n            subject_id: 0,\r\n            subject_name: '',\r\n            resources: [],\r\n            loading:false\r\n        }\r\n    },\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        async getList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getResources({ sid: user.sid, subject_id: this.subject_id })\r\n                    const data = response.data\r\n                    this.resources = data\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async to_praxis(item) {\r\n            try {\r\n                this.loading = true\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await saveUserStudyResource({ sid: user.sid, resource_id: item.id })\r\n                    const data = response.data\r\n                    this.$router.push({ name: 'Praxis', query: { log_id: data, resources_id: item.id } })\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        }\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        this.subject_id = this.$route.query.subject_id;\r\n        this.subject_name = this.$route.query.subject_name;\r\n        this.getList()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n.top-img {\r\n    width: 100vw;\r\n    height: 425px;\r\n    position: absolute;\r\n    top: 0;\r\n    left: 0;\r\n}\r\n\r\n.main-top {\r\n    width: 100vw;\r\n    height: 425px;\r\n    position: absolute;\r\n    top: 0;\r\n    left: 0;\r\n    text-align: left;\r\n}\r\n\r\n.reback {\r\n    padding: 20px 0 0 12px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.pagetitle {\r\n    padding: 20px 0 0 150px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    font-size: 16px;\r\n    color: #030303;\r\n}\r\n\r\n.main-content {\r\n    width: 100vw;\r\n    height: 532px;\r\n    background: #FFFFFF;\r\n    border-radius: 32px;\r\n    position: relative;\r\n    top: 252px;\r\n}\r\n\r\n.content-mian {\r\n    width: 90vw;\r\n    height: 532px;\r\n    margin: 0 auto;\r\n}\r\n\r\n.listen-title {\r\n    color: #000000;\r\n    font-size: 16px;\r\n    font-weight: bold;\r\n    padding-top: 23px;\r\n    text-align: center;\r\n}\r\n\r\n.listen-item {\r\n    width: 100%;\r\n    border-bottom: solid 1px #E4E4E4;\r\n    padding: 10px 0;\r\n}\r\n\r\n.listen-left {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 210px;\r\n}\r\n\r\n.listen-name {\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n    margin: 16px 0 8px 0;\r\n}\r\n\r\n.listen-right {\r\n    width: 100px;\r\n    text-align: right;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.listen-status {\r\n    padding-top: 16px;\r\n    font-size: 14px;\r\n    color: #919191;\r\n}\r\n\r\n.listen-status3 {\r\n    color: #51BF23;\r\n}\r\n\r\n.listen-status1,\r\n.listen-status2,\r\n.listen-status0 {\r\n    color: #919191;\r\n}\r\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Learn.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Learn.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Learn.vue?vue&type=template&id=b1ab9776&scoped=true\"\nimport script from \"./Learn.vue?vue&type=script&lang=js\"\nexport * from \"./Learn.vue?vue&type=script&lang=js\"\nimport style0 from \"./Learn.vue?vue&type=style&index=0&id=b1ab9776&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"b1ab9776\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"praxis\"},[(_vm.dialog_show == false)?_c('div',{staticClass:\"Verify-box\"},[_c('img',{attrs:{\"src\":_vm.imageBase64,\"alt\":\"\"},on:{\"click\":_vm.checkCaptcha}}),_c('div',{staticClass:\"input-box\"},[_c('span',[_vm._v(\"请输入验证码：\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.Verify),expression:\"Verify\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.Verify)},on:{\"input\":function($event){if($event.target.composing)return;_vm.Verify=$event.target.value}}})]),_c('div',{staticClass:\"btn-Verify\",on:{\"click\":_vm.checkCaptcha}},[_vm._v(\"提交\")])]):_c('div',[_c('van-nav-bar',{attrs:{\"title\":_vm.resources.resources.name,\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),(!_vm.loading || _vm.resources.resources.name == '加载中')?_c('div',{staticClass:\"empty\",staticStyle:{\"width\":\"100%\",\"height\":\"80px\",\"text-align\":\"center\"}},[_c('van-loading',{attrs:{\"size\":\"24px\"}},[_vm._v(\"加载中...\")])],1):_vm._e(),(_vm.HistoryList.length > 0 && _vm.resources.resources.name != '加载中')?_c('div',{staticClass:\"last-box\"},[_c('div',{staticClass:\"last-title\",on:{\"click\":function($event){return _vm.to_detail(_vm.HistoryList[0])}}},[_vm._v(\"答题\"),_c('br'),_vm._v(\"记录\")]),_c('div',{staticClass:\"last-count\"},[_c('span',{staticStyle:{\"font-size\":\"20px\",\"font-weight\":\"bold\"}},[_vm._v(_vm._s(_vm.HistoryList[0].right_count))]),_vm._v(\"/\"+_vm._s(_vm.HistoryList[0].total_count)+\"(第\"+_vm._s(_vm.HistoryList.length)+\"次)\"),_c('br'),_vm._v(\" 正确率：\"+_vm._s(((_vm.HistoryList[0].right_count / _vm.HistoryList[0].total_count) * 100).toFixed(2))+\"% \")]),_c('div',{staticClass:\"last-right\"},[_c('div',{staticClass:\"all-last\",on:{\"click\":_vm.to_HistoryList}},[_vm._v(\"全部\")]),_c('div',{staticClass:\"last-time\"},[_vm._v(\"提交时间：\"+_vm._s(_vm.HistoryList[0].create_time))])])]):_vm._e(),(_vm.type_id == 'video')?_c('div',{staticClass:\"video-box\"},[_c('video',{ref:\"videoPlayer\",attrs:{\"src\":_vm.src,\"object-fit\":\"contain\",\"controls\":\"\"},on:{\"play\":_vm.playVideo,\"pause\":_vm.pauseVideo}})]):_vm._e(),(_vm.resources.resources.name != '加载中')?_c('div',{staticClass:\"main-box\"},[_c('van-tabs',{attrs:{\"color\":\"#6FDBFF\"},model:{value:(_vm.activeTitle),callback:function ($$v) {_vm.activeTitle=$$v},expression:\"activeTitle\"}},[_c('van-tab',{scopedSlots:_vm._u([{key:\"title\",fn:function(){return [_vm._v(\"做题 \")]},proxy:true}],null,false,2017623487)},[(_vm.jobList.length > 0)?_c('PaxisCommon',{attrs:{\"resources_id\":_vm.resources_id,\"log_id\":_vm.log_id,\"fromtype\":\"listen\",\"allow\":\"microphone\"}}):_vm._e(),(_vm.jobList.length == 0 && _vm.resources.resources.name != '加载中')?_c('van-empty',{staticClass:\"custom-image\",attrs:{\"image\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/menu_tab/empty.png\",\"description\":\"此资源无作业，建议先听听力，再看原文~\"}}):_vm._e(),_c('div',{staticClass:\"wall\"}),(_vm.answerCard.length > 0)?_c('van-popup',{staticStyle:{\"border-radius\":\"30px 30px 0 0\"},attrs:{\"position\":\"bottom\"},model:{value:(_vm.show),callback:function ($$v) {_vm.show=$$v},expression:\"show\"}},[_c('div',{staticClass:\"card-title\"},[_vm._v(\"答题卡\")]),_c('div',{staticClass:\"main-answer-card\"},_vm._l((_vm.answerCard),function(item,index){return _c('div',{key:index,staticClass:\"card-item\",class:{ 'card-item-empty': item.is_check == 0 }},[_vm._v(\" \"+_vm._s(index + 1)+\" \")])}),0),_c('div',{staticClass:\"btn-cancel\",on:{\"click\":_vm.change_card}},[_vm._v(\"取消\")]),_c('div',{staticClass:\"btn-ok\",on:{\"click\":_vm.to_submit}},[_vm._v(\"确定\")])]):_vm._e()],1),_c('van-tab',{scopedSlots:_vm._u([{key:\"title\",fn:function(){return [_vm._v(\"原文 \")]},proxy:true}],null,false,1837596037)},[(_vm.canread == true)?_c('div',{staticClass:\"wrap-text\"},[(_vm.resources.resources?.file_type === 'pdf')?_c('PdfViewer',{attrs:{\"src\":_vm.resources.resources?.file_path}}):_c('ArticleParser',{attrs:{\"content\":_vm.resources.resources?.content},on:{\"word-click\":_vm.onWordClick}})],1):_c('div',{staticClass:\"wrap-text\",staticStyle:{\"color\":\"red\"}},[(_vm.jobList.length > 0)?_c('span',[_vm._v(\"请先完成听力练习\")]):_c('span',[_vm._v(\"查看原文前，请先听完听力材料\")])])])],1),_c('van-popup',{staticStyle:{\"position\":\"fixed\"},attrs:{\"position\":\"bottom\",\"close-on-click-overlay\":false},on:{\"opened\":_vm.focusInput},model:{value:(_vm.caninput),callback:function ($$v) {_vm.caninput=$$v},expression:\"caninput\"}},[_c('div',{staticClass:\"input_new\"},[_vm._v(\" 题\"+_vm._s(_vm.now_index + 1)+\"-\"+_vm._s(_vm.this_inputIndex + 1)),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.my_insert_word),expression:\"my_insert_word\"}],ref:\"myInput\",attrs:{\"type\":\"text\",\"autofocus\":_vm.autofocus},domProps:{\"value\":(_vm.my_insert_word)},on:{\"input\":[function($event){if($event.target.composing)return;_vm.my_insert_word=$event.target.value},_vm.my_insert]}})]),_c('div',[_c('div',{staticClass:\"btn-cancel\",on:{\"click\":_vm.cancel_caninput}},[_vm._v(\"取消\")]),_c('div',{staticClass:\"btn-ok\",on:{\"click\":_vm.change_caninput}},[_vm._v(\"确定\")])])]),(_vm.type_id == 'audio')?_c('div',{staticClass:\"praxis-bottom\"},[_c('div',{staticClass:\"new-audio\"},[_c('audio',{ref:\"audioPlayer\",attrs:{\"src\":_vm.src},on:{\"timeupdate\":_vm.updateTime,\"ended\":_vm.onAudioEnded,\"loadedmetadata\":_vm.loadMetadata,\"canplay\":_vm.canPlay}}),(_vm.audio_status == 1)?_c('img',{staticClass:\"start-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/start.png\",\"mode\":\"\"},on:{\"click\":_vm.audioPlay}}):_vm._e(),(_vm.audio_status == 2)?_c('img',{staticClass:\"start-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/zanting.png\",\"mode\":\"\"},on:{\"click\":_vm.audioPause}}):_vm._e()]),_c('div',{staticClass:\"audio-info\"},[_c('div',{staticClass:\"progress\"},[_c('van-progress',{attrs:{\"percentage\":_vm.percentage,\"track-color\":\"#E3E3E3\",\"color\":\"#6EE6FF\",\"show-pivot\":false}})],1),_c('div',{staticClass:\"now-time\"},[_vm._v(_vm._s(_vm.currentTime))]),(_vm.canread == true && _vm.jobList.length == 0)?_c('div',{staticClass:\"btn-ok\",on:{\"click\":_vm.to_submit}},[_vm._v(\"完成听力\")]):_vm._e(),(_vm.canread == false && _vm.jobList.length == 0)?_c('div',{staticClass:\"btn-ok-no\",on:{\"click\":_vm.to_submit}},[_vm._v(\"完成听力\")]):_vm._e()])]):_vm._e()],1):_vm._e(),_c('ListenPraxisAi',{attrs:{\"resources_id\":_vm.resources_id,\"allow\":\"microphone\"}})],1),_c('van-action-sheet',{staticStyle:{\"min-height\":\"300px\",\"background-color\":\"aliceblue\",\"z-index\":\"9999\"},attrs:{\"title\":\"单词释义\"},on:{\"close\":_vm.change_praxis_show,\"click-overlay\":_vm.change_praxis_show},model:{value:(_vm.word_show),callback:function ($$v) {_vm.word_show=$$v},expression:\"word_show\"}},[_c('div',{staticClass:\"collect\"},[_c('div',{staticStyle:{\"text-align\":\"left\",\"display\":\"inline-block\",\"vertical-align\":\"top\",\"width\":\"40%\",\"padding-left\":\"10px\",\"font-size\":\"24px\",\"font-weight\":\"500\"}},[_vm._v(\" \"+_vm._s(_vm.word))]),_c('div',{staticClass:\"collect-icon\",staticStyle:{\"text-align\":\"right\",\"display\":\"inline-block\",\"vertical-align\":\"top\",\"width\":\"50%\"}},[(_vm.scColor == false)?_c('van-icon',{attrs:{\"name\":\"star\",\"size\":\"30\",\"color\":\"#D9DCE3\"},on:{\"click\":_vm.add_word}}):_c('van-icon',{attrs:{\"name\":\"star\",\"size\":\"30\",\"color\":\"orange\"}})],1)]),_c('div',{staticClass:\"word-box\"},_vm._l((_vm.wordDetail),function(item,index){return _c('div',{key:index,staticClass:\"word-item\"},[_c('div',{staticClass:\"item-meaning_CH\"},[_vm._v(_vm._s(item.type)+\"  :  \"+_vm._s(item.meaning_CH))])])}),0)])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[(!_vm.is_show_ai)?_c('img',{staticClass:\"wyt\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\",\"mode\":\"widthFix\"},on:{\"click\":_vm.change_show_ai}}):_vm._e(),(_vm.is_show_ai)?_c('div',{staticClass:\"check-main-ai\"},[_c('div',{staticClass:\"guanbi\",on:{\"click\":_vm.change_show_ai}},[_c('van-icon',{attrs:{\"name\":\"cross\",\"color\":\"#606060\"}})],1),_c('img',{staticClass:\"wyt-say\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\",\"mode\":\"widthFix\"}}),_c('div',{staticClass:\"say-text\"},[_vm._v(\"嗨，你好，一起开启外语学习吧\")]),_c('div',{staticClass:\"fast-parent\"},[_c('div',{staticClass:\"fast-box\",on:{\"click\":function($event){_vm.chat('listen_gist', 'Briefly summarize the main idea of the article (within 60 words).')}}},[_c('span',[_vm._v(\" 概括文章主旨大意 \")])]),_c('div',{staticClass:\"fast-box\",on:{\"click\":function($event){_vm.chat('listen_structure', 'Briefly analyze the structure of the article (within 80 words).')}}},[_c('span',[_vm._v(\" 分析文章逻辑结构 \")])]),_c('div',{staticClass:\"fast-box\",on:{\"click\":_vm.translate}},[_c('span',[_vm._v(\" 翻译本篇练习材料 \")])])]),_c('div',{staticClass:\"input-box\"},[_c('button',{staticClass:\"button-default\",style:(_vm.speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''),on:{\"click\":_vm.to_chat}},[_vm._v(\"去对话\")])])]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- src/layouts/TabBarLayout.vue -->\r\n\r\n<template>\r\n    <div>\r\n        <!-- 初始状态下显示的图片，点击可切换显示 -->\r\n        <img v-if=\"!is_show_ai\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\"\r\n            mode=\"widthFix\" @click=\"change_show_ai\" class=\"wyt\" />\r\n        <!-- 显示 AI 伴学功能的主要界面 -->\r\n        <div class=\"check-main-ai\" v-if=\"is_show_ai\">\r\n            <div class=\"guanbi\" @click=\"change_show_ai\">\r\n                <van-icon name=\"cross\" color=\"#606060\" />\r\n            </div>\r\n            <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\" mode=\"widthFix\"\r\n                class=\"wyt-say\" />\r\n            <div class=\"say-text\">嗨，你好，一起开启外语学习吧</div>\r\n            <!-- 功能选项按钮 -->\r\n            <div class=\"fast-parent\">\r\n                <div class=\"fast-box\"\r\n                    @click=\"chat('listen_gist', 'Briefly summarize the main idea of the article (within 60 words).')\">\r\n                    <span>\r\n                        概括文章主旨大意\r\n                    </span>\r\n                </div>\r\n                <div class=\"fast-box\"\r\n                    @click=\"chat('listen_structure', 'Briefly analyze the structure of the article (within 80 words).')\">\r\n                    <span>\r\n                        分析文章逻辑结构\r\n                    </span>\r\n                </div>\r\n                <!-- <div class=\"fast-box\" @click=\"chat('listen_details', 'Give a brief analysis of the complex long sentences (sentences with more than three clauses) in this article (within 120 words).')\">\r\n                    <span>\r\n                        分析文章复杂句子\r\n                    </span>\r\n                </div> -->\r\n                <div class=\"fast-box\" @click=\"translate\">\r\n                    <span>\r\n                        翻译本篇练习材料\r\n                    </span>\r\n                </div>\r\n            </div>\r\n            <div class=\"input-box\">\r\n                <button class=\"button-default\"\r\n                    :style=\"speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''\"\r\n                    @click=\"to_chat\">去对话</button>\r\n            </div>\r\n            <!-- 输入框和录音按钮 -->\r\n            <!-- <div class=\"input-box\" v-show=\"is_speak == 1\">\r\n                <input class=\"question\" maxlength=\"-1\" v-model=\"stu_content\" @input=\"inputText\"\r\n                    placeholder-class=\"placeholder\" :placeholder=\"stu_placeholder\" type=\"text\" />\r\n            </div>\r\n            <div class=\"input-box\" v-show=\"is_speak != 1\">\r\n                <button class=\"button-default\"\r\n                    :style=\"speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''\"\r\n                    @touchstart=\"recStart\" @touchend=\"recStop\">{{ stu_placeholder }}</button>\r\n            </div> -->\r\n            <!-- 发送信息和切换语音输入的按钮 -->\r\n            <!-- <div class=\"say-box\" id=\"end\" v-if=\"speaking === false\">\r\n                <img v-if=\"stu_content !== '' && is_speak === 1\" @click=\"to_chat\" class=\"send-img\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/send_msg.png\" mode=\"aspectFill\" />\r\n                <img v-if=\"stu_content === '' && is_speak === 1\" @click=\"chang_speak\" data-is-speak=\"0\"\r\n                    class=\"other-img\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/audio.png\"\r\n                    mode=\"scaleToFill\" />\r\n                <img v-if=\"stu_content === '' && is_speak === 0 && speaking === false\" @click=\"chang_hand\"\r\n                    data-is-speak=\"1\" class=\"other-img\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/hand.png\" mode=\"scaleToFill\" />\r\n            </div> -->\r\n        </div>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\n//必须引入的核心\r\nimport Recorder from 'recorder-core'\r\n\r\n//引入mp3格式支持文件；如果需要多个格式支持，把这些格式的编码引擎js文件放到后面统统引入进来即可\r\nimport 'recorder-core/src/engine/mp3'\r\nimport 'recorder-core/src/engine/mp3-engine'\r\n//录制wav格式的用这一句就行\r\nimport 'recorder-core/src/engine/wav'\r\n\r\n//可选的插件支持项，这个是波形可视化插件\r\nimport 'recorder-core/src/extensions/waveview'\r\n//ts import 提示：npm包内已自带了.d.ts声明文件（不过是any类型）\r\nexport default {\r\n    name: 'ListenAi',\r\n    props: {\r\n        resources_id: {\r\n            type: String,\r\n            reqired: true\r\n        }\r\n    },\r\n    data() {\r\n        return {\r\n            listData: [],\r\n            is_show_ai: false,\r\n            stu_placeholder: '请输入你的疑问...',\r\n            stu_content: '',\r\n            is_speak: 1,\r\n            canuse: 1,\r\n            type: 0,\r\n            lang_time: 0,\r\n            speaking: false,\r\n            recorder: null,\r\n            mediaStream: null,\r\n            audioChunks: [],\r\n            audioDetails: null // 新增用于存储音频文件详细信息的状态\r\n        }\r\n    },\r\n    watch: {\r\n        '$route.path': function (newPath) {\r\n            this.active = newPath // 路由变化时更新激活的路由\r\n        }\r\n    },\r\n    methods: {\r\n        async inputText() {\r\n            console.log(this.stu_content)\r\n            this.type = 0\r\n        },\r\n        async chat(item, index) {\r\n            this.$router.push({\r\n                name: 'NewChat', query: {\r\n                    project_id: 0,\r\n                    is_history: 0,\r\n                    res_id: this.resources_id,\r\n                    lang_time: this.lang_time,\r\n                    filePath: this.filePath,\r\n                    type: 0,\r\n                    stype: item,\r\n                    from: 'listen',\r\n                    chat_title: 'E-Listen',\r\n                    system: this.subject_name,\r\n                    content: index\r\n                }\r\n            })\r\n        },\r\n        async translate() {\r\n            this.$router.push({\r\n                name: 'NewChat', query: {\r\n                    project_id: 0,\r\n                    is_history: 0,\r\n                    res_id: this.resources_id,\r\n                    lang_time: this.lang_time,\r\n                    filePath: this.filePath,\r\n                    type: 0,\r\n                    stype: 'translate',\r\n                    from: 'listen',\r\n                    chat_title: 'E-Listen',\r\n                    system: this.subject_name,\r\n                    content: '翻译本篇练习材料'\r\n                }\r\n            })\r\n        },\r\n        async to_chat() {\r\n            this.$router.push({\r\n                name: 'NewChat', query: {\r\n                    project_id: 0,\r\n                    is_history: 0,\r\n                    res_id: this.resources_id,\r\n                    lang_time: this.lang_time,\r\n                    filePath: this.filePath,\r\n                    type: this.type,\r\n                    stype: 'listen_guide',\r\n                    from: 'listen',\r\n                    chat_title: 'E-Listen',\r\n                    system: this.subject_name,\r\n                    content: this.stu_content\r\n                }\r\n            })\r\n        },\r\n        async chang_speak() {\r\n            await this.recOpen();\r\n            this.is_speak = 0;\r\n            this.stu_placeholder = \"按住说话...\";\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n\r\n        async chang_hand() {\r\n            this.is_speak = 1;\r\n            this.stu_placeholder = \"请输入你的疑问...\";\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n\r\n        change_show_ai() {\r\n            this.is_show_ai = !this.is_show_ai\r\n        },\r\n        async recOpen() {\r\n            //创建录音对象\r\n            this.rec = Recorder({\r\n                type: \"mp3\" //录音格式，可以换成wav等其他格式\r\n                , sampleRate: 16000 //录音的采样率，越大细节越丰富越细腻\r\n                , bitRate: 16 //录音的比特率，越大音质越好\r\n                , onProcess: (buffers, powerLevel, bufferSampleRate) => {\r\n                    //录音实时回调，大约1秒调用12次本回调\r\n                    //可实时绘制波形，实时上传（发送）数据\r\n                    if (this.wave) this.wave.input(buffers[buffers.length - 1], powerLevel, bufferSampleRate);\r\n                }\r\n            });\r\n\r\n            //打开录音，获得权限\r\n            this.rec.open(() => {\r\n                console.log(\"录音已打开\");\r\n                if (this.$refs.recwave) {//创建音频可视化图形绘制对象\r\n                    this.wave = Recorder.WaveDiv({ elem: this.$refs.recwave });\r\n                }\r\n            }, (msg, isUserNotAllow) => {\r\n                //用户拒绝了录音权限，或者浏览器不支持录音\r\n                console.log((isUserNotAllow ? \"UserNotAllow，\" : \"\") + \"无法录音:\" + msg);\r\n            });\r\n            // this.startRecognition(); // 启动语音识别\r\n        },\r\n        async recStart() {\r\n            if (!this.rec) { console.error(\"未打开录音\"); return }\r\n            this.rec.start();\r\n            this.stu_placeholder = '正在说话';\r\n            this.speaking = true;\r\n            console.log(\"已开始录音\");\r\n            if (this.recognition) {\r\n                this.recognition.start(); // 启动语音识别\r\n            }\r\n        },\r\n        async recStop() {\r\n            if (!this.rec) { console.error(\"未打开录音\"); return }\r\n            this.rec.stop((blob, duration) => {\r\n                //blob就是我们要的录音文件对象，可以上传，或者本地播放\r\n                this.recBlob = blob;\r\n                //简单利用URL生成本地文件地址，此地址只能本地使用，比如赋值给audio.src进行播放，赋值给a.href然后a.click()进行下载（a需提供download=\"xxx.mp3\"属性）\r\n                var localUrl = (window.URL).createObjectURL(blob);\r\n                console.log(\"录音成功\", blob, localUrl, \"时长:\" + duration + \"ms\");\r\n                this.stu_placeholder = '按住说话';\r\n                this.lang_time = (duration / 1000).toFixed()\r\n                this.type = 1\r\n                this.speaking = false;\r\n                this.upload(blob);//把blob文件上传到服务器\r\n                if (this.recognition) {\r\n                    this.recognition.stop(); // 停止语音识别\r\n                }\r\n                // this.rec.close();//关闭录音，释放录音资源，当然可以不释放，后面可以连续调用start\r\n                // this.rec = null;\r\n            }, (err) => {\r\n                console.error(\"结束录音出错：\" + err);\r\n                // this.rec.close();//关闭录音，释放录音资源，当然可以不释放，后面可以连续调用start\r\n                // this.rec = null;\r\n            });\r\n        },\r\n        startRecognition() {\r\n            const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;\r\n            if (SpeechRecognition) {\r\n                this.recognition = new SpeechRecognition();\r\n                // 配置和使用 recognition 对象\r\n            } else {\r\n                console.error('该浏览器不支持语音识别');\r\n            }\r\n\r\n            this.recognition.continuous = true;\r\n            this.recognition.interimResults = true;\r\n            this.recognition.lang = 'en-US';\r\n\r\n            this.recognition.onresult = (event) => {\r\n                let interimTranscript = '';\r\n                let finalTranscript = '';\r\n\r\n                for (let i = event.resultIndex; i < event.results.length; i++) {\r\n                    if (event.results[i].isFinal) {\r\n                        finalTranscript += event.results[i][0].transcript;\r\n                    } else {\r\n                        interimTranscript += event.results[i][0].transcript;\r\n                    }\r\n                }\r\n\r\n                this.content = finalTranscript || interimTranscript;\r\n            };\r\n\r\n            this.recognition.onerror = (event) => {\r\n                console.error('识别错误: ', event.error);\r\n            };\r\n\r\n            this.recognition.onend = () => {\r\n                console.log('识别结束' + this.content);\r\n            };\r\n        },\r\n        async upload(blob) {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    var form = new FormData();\r\n                    form.append(\"file\", blob, user.sid + \"-\" + new Date().getTime() + \".mp3\"); //和普通form表单并无二致，后端接收到upfile参数的文件，文件名为recorder.mp3\r\n                    form.append(\"key\", \"value\"); //其他参数\r\n\r\n                    var xhr = new XMLHttpRequest();\r\n                    xhr.open(\"POST\", \"https://elang.zju.edu.cn:8082/mobileupload/upload\");\r\n                    // xhr.open(\"POST\", \"https://zju.3dease.com/fcapi/mobileupload/upload\");\r\n                    xhr.onreadystatechange = () => {\r\n                        if (xhr.readyState === 4) {\r\n                            if (xhr.status === 200) {\r\n                                // 请求成功，解析响应\r\n                                var response = JSON.parse(xhr.responseText);\r\n                                console.log(\"上传成功，服务器返回的数据:\", response);\r\n                                this.filePath = response.data.url\r\n                                // 在这里处理服务器返回的数据\r\n                                // this.startRecognition()\r\n                                this.type = 1; //消息类型\r\n                                this.to_chat()\r\n                            } else {\r\n                                // 请求失败，处理错误\r\n                                console.error(\"上传失败，状态码:\", xhr.status);\r\n                                console.error(\"错误信息:\", xhr.statusText);\r\n                            }\r\n                        }\r\n                    };\r\n                    xhr.send(form);\r\n\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async recPlay() {\r\n            //本地播放录音试听，可以直接用URL把blob转换成本地播放地址，用audio进行播放\r\n            var localUrl = URL.createObjectURL(this.recBlob);\r\n            var audio = document.createElement(\"audio\");\r\n            audio.controls = true;\r\n            document.body.appendChild(audio);\r\n            audio.src = localUrl;\r\n            audio.play(); //这样就能播放了\r\n\r\n            //注意不用了时需要revokeObjectURL，否则霸占内存\r\n            setTimeout(function () { URL.revokeObjectURL(audio.src) }, 5000);\r\n        },\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n    }\r\n}\r\n</script>\r\n\r\n\r\n<style scoped>\r\n.check-main-ai {\r\n    width: 100vw;\r\n    height: auto;\r\n    max-height: 400px;\r\n    overflow-y: auto;\r\n    background: linear-gradient(134deg, #eff7fe, #e3f3ff);\r\n    padding-bottom: 25px;\r\n    position: fixed;\r\n    bottom: 0px;\r\n    border-radius: 40px 40px 0 0;\r\n    z-index: 200;\r\n}\r\n\r\n.guanbi {\r\n    width: auto;\r\n    height: auto;\r\n    position: fixed;\r\n    right: 10px;\r\n    text-align: center;\r\n    padding: 8px 15px;\r\n    font-weight: bold;\r\n    /* background-color: rgba(236, 221, 10, 0.3); */\r\n    border-radius: 40px;\r\n}\r\n\r\n.wyt-say {\r\n    width: 75px;\r\n    height: 75px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.say-text {\r\n    width: 300px;\r\n    height: 75px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 60px;\r\n    font-size: 14px;\r\n}\r\n\r\n.fast-parent {\r\n    padding-left: 10vw;\r\n}\r\n\r\n.fast-box {\r\n    width: 80px;\r\n    height: 55px;\r\n    background: #ffffff;\r\n    border-radius: 0px 20px 0px 20px;\r\n    border: 1px solid #acc5ff;\r\n    margin-left: 5px;\r\n    color: #686868;\r\n    font-size: 12px;\r\n    text-align: center;\r\n    padding: 8px 9px;\r\n    text-align: center;\r\n    margin-bottom: 110px;\r\n    align-items: center;\r\n    display: flex;\r\n    float: left;\r\n}\r\n\r\n.fast-box:last-child {\r\n    margin-right: 0;\r\n}\r\n\r\n.input-box {\r\n    width: 80vw;\r\n    height: 42px;\r\n    background: #ffffff;\r\n    border-radius: 16px;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border: none;\r\n}\r\n\r\n.question {\r\n    padding: 10px 60px 10px 15px;\r\n    font-size: 14px;\r\n    color: #000;\r\n    border: none;\r\n}\r\n\r\n.placeholder {\r\n    font-size: 14px;\r\n    color: #989898;\r\n    padding: 3px 15px;\r\n}\r\n\r\n.say-box {\r\n    width: 60px;\r\n    height: 42px;\r\n    background: #ffffff;\r\n    border-radius: 15px;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 293px;\r\n}\r\n\r\n.say-img {\r\n    width: 10px;\r\n    height: 15px;\r\n    padding: 7px 25px;\r\n}\r\n\r\n.send-img {\r\n    width: 53px;\r\n    height: 30px;\r\n    position: fixed;\r\n    bottom: 50px;\r\n    left: 293px;\r\n}\r\n\r\n.other-img {\r\n    width: 25px;\r\n    height: 25px;\r\n    position: fixed;\r\n    bottom: 53px;\r\n    left: 326px;\r\n}\r\n\r\n.button-default {\r\n    background: #fff;\r\n    /* color: #000000; */\r\n    height: 42px;\r\n    width: 323px;\r\n    line-height: 25px;\r\n    text-align: center;\r\n    border-radius: 21;\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n    border: none;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border-radius: 16px;\r\n}\r\n\r\n.button-speaking {\r\n    background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);\r\n    color: #fff;\r\n    height: 42px;\r\n    width: 333px;\r\n    line-height: 25px;\r\n    /* text-align: center; */\r\n    border-radius: 21px;\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n    z-index: 100;\r\n    border: none;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border-radius: 16px;\r\n}\r\n\r\n.wyt {\r\n    position: fixed;\r\n    bottom: 60px;\r\n    right: 5px;\r\n    width: 75px;\r\n    height: 75px;\r\n}\r\n\r\n.btn-test {\r\n    position: absolute;\r\n    top: 0;\r\n}\r\n\r\n.btn-test2 {\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListenPraxisAi.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListenPraxisAi.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ListenPraxisAi.vue?vue&type=template&id=ddf329dc&scoped=true\"\nimport script from \"./ListenPraxisAi.vue?vue&type=script&lang=js\"\nexport * from \"./ListenPraxisAi.vue?vue&type=script&lang=js\"\nimport style0 from \"./ListenPraxisAi.vue?vue&type=style&index=0&id=ddf329dc&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"ddf329dc\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"praxis-common\"},[_vm._l((_vm.jobList),function(item,index){return _c('div',{key:index},[(item.directions != null || item.directions != '')?_c('div',{staticClass:\"answer-desc\"},[_c('div',{staticClass:\"wrap-text\",staticStyle:{\"padding-bottom\":\"0\"},domProps:{\"innerHTML\":_vm._s(item.directions)}})]):_vm._e(),_c('div',{staticClass:\"praxis-item\"},[_c('div',{staticClass:\"praxis-title\"},[_vm._v(\"题\"+_vm._s(index + 1))]),(item.type_id == 1)?_c('div',{staticClass:\"praxis-desc\"},[_c('div',{staticClass:\"wrap-text\",domProps:{\"innerHTML\":_vm._s(item.title)}})]):_vm._e(),(item.type_id == 4)?_c('div',{staticClass:\"praxis-desc\"},[_c('div',{staticClass:\"wrap-text\",domProps:{\"innerHTML\":_vm._s(item.title)}})]):_vm._e(),(item.type_id == 2)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.title),function(itemChild,indexChild){return _c('block',{key:indexChild,staticClass:\"input-answer-box\"},[(!itemChild.isInput)?_c('span',[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(itemChild.text)}})]):_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.insertWordAnswers[item.id][itemChild.inputIndex]),expression:\"insertWordAnswers[item.id][itemChild.inputIndex]\"}],staticClass:\"input-answer\",attrs:{\"type\":\"text\",\"placeholder\":'( ' + (itemChild.inputIndex1 + 1) + ' )'},domProps:{\"value\":(_vm.insertWordAnswers[item.id][itemChild.inputIndex])},on:{\"input\":[function($event){if($event.target.composing)return;_vm.$set(_vm.insertWordAnswers[item.id], itemChild.inputIndex, $event.target.value)},function($event){return _vm.adjustInputWidth(itemChild.inputIndex1, index, $event)}],\"blur\":_vm.change_count}})])}),1):_vm._e(),(item.type_id == 7)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.title),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"input-answer-box\"},[(!itemChild.isInput)?_c('span',[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(itemChild.text)}})]):_c('div',{staticClass:\"insert-div\",on:{\"click\":function($event){return _vm.select_question1(item.id, itemChild.inputIndex1, index)}}},[(!_vm.insertWordAnswers[item.id][itemChild.inputIndex1])?_c('span',[_vm._v(\"请选择\")]):_c('span',[_vm._v(\" \"+_vm._s(_vm.insertWordAnswers[item.id][itemChild.inputIndex1]))])]),_c('van-popup',{staticStyle:{\"border-radius\":\"40px 40px  0 0\",\"max-height\":\"70%\"},attrs:{\"position\":\"bottom\",\"z-index\":20000,\"get-container\":\"body\"},model:{value:(_vm.this_show1),callback:function ($$v) {_vm.this_show1=$$v},expression:\"this_show1\"}},[_c('div',{staticClass:\"block\"},[_c('div',{staticClass:\"header\"},[_c('div',{staticClass:\"title\"},[_vm._v(\"请点击选择\"+_vm._s(itemChild.inputIndex1))]),_c('div',{staticClass:\"btn btn--confirm\",attrs:{\"aria-role\":\"button\"},on:{\"click\":_vm.changShow1}},[_vm._v(\"取消\")])]),_c('div',{staticClass:\"date-list\"},_vm._l((item.optionsArray1[_vm.now_inputIndex1].options),function(item1,index1){return _c('div',{key:index1,staticClass:\"date-item\",on:{\"click\":function($event){return _vm.change_answer1(item1)}}},[_vm._v(\" \"+_vm._s(item1.label)+\" - \"+_vm._s(item1.title)+\" \")])}),0)])])],1)}),0):_vm._e(),(item.type_id == 8)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.title),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"input-answer-box\"},[(!itemChild.isInput)?_c('span',[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(itemChild.text)}})]):_c('div',{staticClass:\"insert-div\",on:{\"click\":function($event){return _vm.select_question2(item.id, itemChild.inputIndex1, index)}}},[(!_vm.insertWordAnswers[item.id][itemChild.inputIndex1])?_c('span',[_vm._v(\"请选择\")]):_c('span',[_vm._v(\" \"+_vm._s(_vm.insertWordAnswers[item.id][itemChild.inputIndex1]))])]),_c('van-popup',{staticStyle:{\"border-radius\":\"40px 40px  0 0\",\"max-height\":\"70%\"},attrs:{\"position\":\"bottom\",\"z-index\":20000,\"get-container\":\"body\"},model:{value:(_vm.this_show2),callback:function ($$v) {_vm.this_show2=$$v},expression:\"this_show2\"}},[_c('div',{staticClass:\"block\"},[_c('div',{staticClass:\"header\"},[_c('div',{staticClass:\"title\"},[_vm._v(\"请点击选择\")]),_c('div',{staticClass:\"btn btn--confirm\",attrs:{\"aria-role\":\"button\"},on:{\"click\":_vm.changShow2}},[_vm._v(\"取消\")])]),_c('div',{staticClass:\"date-list\"},_vm._l((_vm.jobList[_vm.now_ind2].optionsArray1[_vm.now_inputIndex2].options),function(item2,index2){return _c('div',{key:index2,staticClass:\"date-item\",on:{\"click\":function($event){return _vm.change_answer2(item2)}}},[_vm._v(\" \"+_vm._s(item2.label)+\" - \"+_vm._s(item2.title)+\" \")])}),0)])])],1)}),0):_vm._e(),(item.type_id == 5)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.title),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"input-answer-box\"},[(!itemChild.isInput)?_c('span',[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(itemChild.text)}})]):_c('div',{staticClass:\"insert-div\",on:{\"click\":function($event){return _vm.select_question(item.id, itemChild.inputIndex, index)}}},[(!_vm.insertWordAnswers[item.id][itemChild.inputIndex])?_c('span',[_vm._v(\"请选择\")]):_c('span',[_vm._v(\" \"+_vm._s(_vm.insertWordAnswers[item.id][itemChild.inputIndex]))])])])}),0):_vm._e(),(item.type_id == 3 || item.type_id == 6)?_c('div',{staticClass:\"praxis-desc\"},[_c('div',{staticClass:\"wrap-text\",domProps:{\"innerHTML\":_vm._s(item.title)}})]):_vm._e(),(item.type_id == 1)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.optionsArray),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"answer\"},[_c('div',{staticClass:\"answer-title\",class:{ 'checked': itemChild.is_check == 1 },on:{\"click\":function($event){return _vm.check_answer(index, indexChild)}}},[_vm._v(_vm._s(itemChild.label))]),_c('div',{staticClass:\"answer-desc\"},[_vm._v(_vm._s(itemChild.title))])])}),0):_vm._e(),(item.type_id == 3 || item.type_id == 6)?_c('div',{staticClass:\"praxis-info\"},[_c('div',{staticClass:\"answer\"},[_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(item.user_answer),expression:\"item.user_answer\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(item.user_answer)},on:{\"blur\":function($event){return _vm.inputAnser(index)},\"input\":function($event){if($event.target.composing)return;_vm.$set(item, \"user_answer\", $event.target.value)}}})])]):_vm._e(),(item.type_id == 4)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.optionsArray),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"answer\"},[_c('div',{staticClass:\"answer-title\",class:{ 'checked': itemChild.is_check == 1 },on:{\"click\":function($event){return _vm.toggleAnswer(index, indexChild)}}},[_vm._v(_vm._s(itemChild.label))]),_c('div',{staticClass:\"answer-desc\"},[_vm._v(_vm._s(itemChild.title))])])}),0):_vm._e()])])}),_c('div',{staticClass:\"praxis-bottom\"},[_c('div',{staticClass:\"answer-has\"},[_c('div',{staticClass:\"btn-ok-cn\",on:{\"click\":_vm.change_card}},[_vm._v(\"提交\")])])]),_c('van-popup',{staticStyle:{\"border-radius\":\"30px 30px 0 0\",\"width\":\"100%\",\"height\":\"500px\",\"overflow-y\":\"scroll\",\"position\":\"fixed\",\"bottom\":\"0\"},attrs:{\"position\":\"bottom\"},model:{value:(_vm.card_show),callback:function ($$v) {_vm.card_show=$$v},expression:\"card_show\"}},[_c('div',{staticClass:\"card-title\"},[_vm._v(\"答题卡\")]),_vm._l((_vm.jobList),function(item,index){return _c('span',{key:index},[(item.type_id == 1 || item.type_id == 4 || item.type_id == 3 || item.type_id == 6)?_c('div',{staticClass:\"card-item\",class:{ 'card-item-empty': item.is_check == 0 }},[_vm._v(\" \"+_vm._s(index + 1)+\" \")]):_vm._l((item.title),function(itemChild,indexChild){return _c('span',{key:indexChild},[(itemChild.isInput)?_c('div',{staticClass:\"card-item\",class:{ 'card-item-empty': !_vm.insertWordAnswers[item.id][itemChild.inputIndex] }},[_vm._v(\" \"+_vm._s(index + 1)+\"-\"+_vm._s(itemChild.inputIndex1 + 1)+\" \")]):_vm._e()])})],2)}),_c('div',{staticClass:\"btn-cancel\",on:{\"click\":_vm.change_card}},[_vm._v(\"取消\")]),(_vm.can_submit)?_c('div',{staticClass:\"btn-ok\",on:{\"click\":_vm.to_submit}},[_vm._v(\"确定\")]):_c('div',{staticClass:\"btn-ok1\"},[_vm._v(\"确定\")])],2),_c('van-popup',{staticStyle:{\"border-radius\":\"40px 40px  0 0\",\"max-height\":\"70%\"},attrs:{\"position\":\"bottom\",\"z-index\":20000,\"get-container\":\"body\"},model:{value:(_vm.this_show),callback:function ($$v) {_vm.this_show=$$v},expression:\"this_show\"}},[_c('div',{staticClass:\"block\"},[_c('div',{staticClass:\"header\"},[_c('div',{staticClass:\"title\"},[_vm._v(\"请点击选择\")]),_c('div',{staticClass:\"btn btn--confirm\",attrs:{\"aria-role\":\"button\"},on:{\"click\":_vm.changShow}},[_vm._v(\"取消\")])]),_c('div',{staticClass:\"date-list\"},_vm._l((_vm.jobList[_vm.now_ind].optionsArray),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"date-item\",on:{\"click\":function($event){return _vm.change_answer(itemChild)}}},[_vm._v(\" \"+_vm._s(itemChild.label)+\" - \"+_vm._s(itemChild.title)+\" \")])}),0)])])],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- src/layouts/TabBarLayout.vue -->\r\n\r\n<template>\r\n    <div class=\"praxis-common\">\r\n        <div v-for=\"(item, index) in jobList\" :key=\"index\">\r\n            <div class=\"answer-desc\" v-if=\"item.directions != null || item.directions != ''\">\r\n                <div class=\"wrap-text\" style=\"padding-bottom: 0;\" v-html=\"item.directions\"></div>\r\n            </div>\r\n\r\n            <div class=\"praxis-item\">\r\n                <div class=\"praxis-title\">题{{ index + 1 }}</div>\r\n                <div class=\"praxis-desc\" v-if=\"item.type_id == 1\">\r\n                    <div class=\"wrap-text\" v-html=\"item.title\"></div>\r\n                </div>\r\n                <div class=\"praxis-desc\" v-if=\"item.type_id == 4\">\r\n                    <div class=\"wrap-text\" v-html=\"item.title\"></div>\r\n                </div>\r\n\r\n                <div class=\"praxis-info\" v-if=\"item.type_id == 2\">\r\n                    <!-- <div v-html=\"item.title\"></div> -->\r\n                    <block class=\"input-answer-box\" v-for=\"(itemChild, indexChild) in item.title\" :key=\"indexChild\">\r\n\r\n                        <span v-if=\"!itemChild.isInput\">\r\n                            <div style=\"display: inline;\" v-html=\"itemChild.text\"></div>\r\n                        </span>\r\n\r\n\r\n                        <input type=\"text\" class=\"input-answer\" v-else\r\n                            v-model=\"insertWordAnswers[item.id][itemChild.inputIndex]\"\r\n                            @input=\"adjustInputWidth(itemChild.inputIndex1, index, $event)\"\r\n                            :placeholder=\"'( ' + (itemChild.inputIndex1 + 1) + ' )'\" @blur=\"change_count\" />\r\n\r\n                    </block>\r\n                </div>\r\n\r\n                <div class=\"praxis-info\" v-if=\"item.type_id == 7\">\r\n                    <div class=\"input-answer-box\" v-for=\"(itemChild, indexChild) in item.title\" :key=\"indexChild\">\r\n                        <!-- 如果是文本块，直接显示 -->\r\n                        <span v-if=\"!itemChild.isInput\">\r\n                            <div style=\"display: inline;\" v-html=\"itemChild.text\"></div>\r\n                        </span>\r\n                        <!-- 如果是输入框，动态生成 -->\r\n                        <div v-else class=\"insert-div\" @click=\"select_question1(item.id, itemChild.inputIndex1, index)\">\r\n                            <span v-if=\"!insertWordAnswers[item.id][itemChild.inputIndex1]\">请选择</span>\r\n                            <span v-else> {{ insertWordAnswers[item.id][itemChild.inputIndex1] }}</span>\r\n                        </div>\r\n\r\n                        <van-popup v-model=\"this_show1\" position=\"bottom\"\r\n                            style=\"border-radius:40px 40px  0 0 ;max-height: 70%;\" :z-index=\"20000\"\r\n                            get-container=\"body\">\r\n                            <div class=\"block\">\r\n                                <div class=\"header\">\r\n                                    <div class=\"title\">请点击选择{{ itemChild.inputIndex1 }}</div>\r\n                                    <div class=\"btn btn--confirm\" aria-role=\"button\" @click=\"changShow1\">取消</div>\r\n                                </div>\r\n                                <div class=\"date-list\">\r\n                                    <div class=\"date-item\"\r\n                                        v-for=\"(item1, index1) in item.optionsArray1[now_inputIndex1].options\"\r\n                                        :key=\"index1\" @click=\"change_answer1(item1)\">\r\n                                        {{ item1.label }} - {{ item1.title }}\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </van-popup>\r\n\r\n                    </div>\r\n                </div>\r\n\r\n\r\n                <div class=\"praxis-info\" v-if=\"item.type_id == 8\">\r\n                    <div class=\"input-answer-box\" v-for=\"(itemChild, indexChild) in item.title\" :key=\"indexChild\">\r\n                        <!-- 如果是文本块，直接显示 -->\r\n                        <span v-if=\"!itemChild.isInput\">\r\n                            <div style=\"display: inline;\" v-html=\"itemChild.text\"></div>\r\n                        </span>\r\n                        <!-- 如果是输入框，动态生成 -->\r\n                        <div v-else class=\"insert-div\" @click=\"select_question2(item.id, itemChild.inputIndex1, index)\">\r\n                            <span v-if=\"!insertWordAnswers[item.id][itemChild.inputIndex1]\">请选择</span>\r\n                            <span v-else> {{ insertWordAnswers[item.id][itemChild.inputIndex1] }}</span>\r\n                        </div>\r\n                        <van-popup v-model=\"this_show2\" position=\"bottom\"\r\n                            style=\"border-radius:40px 40px  0 0 ;max-height: 70%;\" :z-index=\"20000\"\r\n                            get-container=\"body\">\r\n                            <div class=\"block\">\r\n                                <div class=\"header\">\r\n                                    <div class=\"title\">请点击选择</div>\r\n                                    <div class=\"btn btn--confirm\" aria-role=\"button\" @click=\"changShow2\">取消</div>\r\n                                </div>\r\n                                <div class=\"date-list\">\r\n                                    <!-- this.jobList[this.now_ind1].optionsArray1[this.now_inputIndex1].options -->\r\n                                    <div class=\"date-item\"\r\n                                        v-for=\"(item2, index2) in jobList[now_ind2].optionsArray1[now_inputIndex2].options\"\r\n                                        :key=\"index2\" @click=\"change_answer2(item2)\">\r\n                                        {{ item2.label }} - {{ item2.title }}\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </van-popup>\r\n                    </div>\r\n                </div>\r\n\r\n\r\n                <div class=\"praxis-info\" v-if=\"item.type_id == 5\">\r\n                    <div class=\"input-answer-box\" v-for=\"(itemChild, indexChild) in item.title\" :key=\"indexChild\">\r\n                        <!-- 如果是文本块，直接显示 -->\r\n                        <span v-if=\"!itemChild.isInput\">\r\n                            <div style=\"display: inline;\" v-html=\"itemChild.text\"></div>\r\n                        </span>\r\n                        <!-- 如果是输入框，动态生成 -->\r\n                        <div v-else class=\"insert-div\" @click=\"select_question(item.id, itemChild.inputIndex, index)\">\r\n                            <span v-if=\"!insertWordAnswers[item.id][itemChild.inputIndex]\">请选择</span>\r\n                            <span v-else> {{ insertWordAnswers[item.id][itemChild.inputIndex] }}</span>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                <div class=\"praxis-desc\" v-if=\"item.type_id == 3 || item.type_id == 6\">\r\n                    <div class=\"wrap-text\" v-html=\"item.title\"></div>\r\n                </div>\r\n                <div class=\"praxis-info\" v-if=\"item.type_id == 1\">\r\n                    <div class=\"answer\" v-for=\"(itemChild, indexChild) in item.optionsArray\" :key=\"indexChild\">\r\n                        <div :class=\"{ 'checked': itemChild.is_check == 1 }\" class=\"answer-title\"\r\n                            @click=\"check_answer(index, indexChild)\">{{ itemChild.label }}</div>\r\n                        <div class=\"answer-desc\">{{ itemChild.title }}</div>\r\n                    </div>\r\n                </div>\r\n                <div class=\"praxis-info\" v-if=\"item.type_id == 3 || item.type_id == 6\">\r\n                    <div class=\"answer\">\r\n                        <textarea type=\"text\" @blur=\"inputAnser(index)\" v-model=\"item.user_answer\"></textarea>\r\n                    </div>\r\n                </div>\r\n                <div class=\"praxis-info\" v-if=\"item.type_id == 4\">\r\n                    <div class=\"answer\" v-for=\"(itemChild, indexChild) in item.optionsArray\" :key=\"indexChild\">\r\n                        <div :class=\"{ 'checked': itemChild.is_check == 1 }\" class=\"answer-title\"\r\n                            @click=\"toggleAnswer(index, indexChild)\">{{ itemChild.label }}</div>\r\n                        <div class=\"answer-desc\">{{ itemChild.title }}</div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n\r\n        <div class=\"praxis-bottom\">\r\n            <div class=\"answer-has\">\r\n                <!-- <div class=\"jindu\"> 进度({{ has_answer }}/{{ total_num }})</div> -->\r\n                <div class=\"btn-ok-cn\" @click=\"change_card\">提交</div>\r\n            </div>\r\n        </div>\r\n        <van-popup v-model=\"card_show\" position=\"bottom\"\r\n            style=\"border-radius: 30px 30px 0 0;width:100px;height: 500px;overflow-y: scroll;position: fixed;bottom: 0;width: 100%;\">\r\n            <div class=\"card-title\">答题卡</div>\r\n            <span v-for=\"(item, index) in jobList\" :key=\"index\">\r\n                <div class=\"card-item\" :class=\"{ 'card-item-empty': item.is_check == 0 }\"\r\n                    v-if=\"item.type_id == 1 || item.type_id == 4 || item.type_id == 3 || item.type_id == 6\">\r\n                    {{ index + 1 }}\r\n                </div>\r\n                <span v-else v-for=\"(itemChild, indexChild) in item.title\" :key=\"indexChild\">\r\n                    <div class=\"card-item\"\r\n                        :class=\"{ 'card-item-empty': !insertWordAnswers[item.id][itemChild.inputIndex] }\"\r\n                        v-if=\"itemChild.isInput\">\r\n                        {{ index + 1 }}-{{ itemChild.inputIndex1 + 1 }}\r\n                    </div>\r\n                </span>\r\n\r\n            </span>\r\n\r\n            <div class=\"btn-cancel\" @click=\"change_card\">取消</div>\r\n            <div class=\"btn-ok\" v-if=\"can_submit\" @click=\"to_submit\">确定</div>\r\n            <div class=\"btn-ok1\" v-else>确定</div>\r\n        </van-popup>\r\n\r\n\r\n        <van-popup v-model=\"this_show\" position=\"bottom\"\r\n            style=\"border-radius:40px 40px  0 0 ;max-height: 70%;\" :z-index=\"20000\" get-container=\"body\">\r\n            <div class=\"block\">\r\n                <div class=\"header\">\r\n                    <div class=\"title\">请点击选择</div>\r\n                    <div class=\"btn btn--confirm\" aria-role=\"button\" @click=\"changShow\">取消</div>\r\n                </div>\r\n                <div class=\"date-list\">\r\n                    <div class=\"date-item\" v-for=\"(itemChild, indexChild) in jobList[now_ind].optionsArray\"\r\n                        :key=\"indexChild\" @click=\"change_answer(itemChild)\">\r\n                        {{ itemChild.label }} - {{ itemChild.title }}\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </van-popup>\r\n\r\n\r\n\r\n    </div>\r\n</template>\r\n\r\n<script>\r\nimport { submitData, updateUserStudy } from '@/api/listen'\r\n\r\n\r\nexport default {\r\n    name: 'Ai',\r\n    inject: ['getSharedData'],\r\n    computed: {\r\n        localData() {\r\n            // 动态获取共享数据\r\n            return this.getSharedData();\r\n        },\r\n    },\r\n    props: {\r\n        resources_id: {\r\n            type: [String, Number],\r\n            required: true\r\n        },\r\n        log_id: {\r\n            type: [String, Number],\r\n            required: true\r\n        },\r\n        fromtype: {\r\n            type: String,\r\n            required: true\r\n        },\r\n    },\r\n    data() {\r\n        return {\r\n            this_show: false,\r\n            this_show1: false,\r\n            this_show2: false,\r\n            autofocus: true,\r\n            show: false,\r\n            card_show: false,\r\n            can_submit: true,\r\n            resources: [],\r\n            jobList: [],\r\n            answerCard: [],\r\n            src: [],\r\n            percentage: 0,\r\n            has_answer: 0,\r\n            currentTime: '0:00',\r\n            praxis_show: true,\r\n            total_num: 0,\r\n            audio_status: 1,\r\n            insertWordAnswers: [],\r\n            caninput: false,\r\n            globalInputIndex: 0,\r\n            this_job_id: 0,\r\n            this_inputIndex: 0,\r\n            now_inputIndex: 0,\r\n            now_index: 0,\r\n            now_ind: 0,\r\n            this_job_id1: 0,\r\n            this_inputIndex1: 0,\r\n            now_inputIndex1: 0,\r\n            now_index1: 0,\r\n            now_ind1: 0,\r\n            this_job_id2: 0,\r\n            this_inputIndex2: 0,\r\n            now_inputIndex2: 0,\r\n            now_index2: 0,\r\n            now_ind2: 0,\r\n            loading: false\r\n        }\r\n    },\r\n\r\n    created() {\r\n        this.jobList = this.getSharedData();\r\n        // //console.log(\"获取到大值\")\r\n        // //console.log(this.jobList)\r\n        this.getJobList()\r\n    },\r\n    methods: {\r\n        /**\r\n * 计算两个字符串的相似度\r\n * @param {string} input 用户输入\r\n * @param {string} answer 标准答案\r\n * @returns {boolean} 是否正确\r\n */\r\n        isAnswerCorrect(input, answer) {\r\n            const maxLength = Math.max(input.length, answer.length);\r\n            const distance = leven(input.toLowerCase(), answer.toLowerCase());\r\n            const similarityLeven = (1 - distance / maxLength) * 100;\r\n\r\n            const similarityJw = jaroWinkler(input.toLowerCase(), answer.toLowerCase()) * 100;\r\n\r\n            if (similarityJw >= 90 && similarityLeven >= 90) {\r\n                return true\r\n            } else {\r\n                return false\r\n            }\r\n        },\r\n        changShow() {\r\n            this.this_show = !this.this_show\r\n        },\r\n        groupedQuestions(data, groupSize) {\r\n            // 根据 groupSize 动态分组\r\n            const groups = [];\r\n            for (let i = 0; i < data.length; i += groupSize) {\r\n                groups.push(data.slice(i, i + groupSize));\r\n            }\r\n            return groups;\r\n        },\r\n        select_question(index, inputIndex, ind) {\r\n            this.this_show = !this.this_show\r\n            this.now_index = index\r\n            this.now_ind = ind\r\n            this.now_inputIndex = inputIndex\r\n        },\r\n        change_answer(itemChild) {\r\n            // this.this_show = !this.this_show\r\n            this.insertWordAnswers[this.now_index][this.now_inputIndex] = itemChild.label + \"-\" + itemChild.title\r\n            this.jobList[this.now_ind].optionsArray1[this.now_inputIndex].is_check = 1;\r\n            ////console.log(this.now_ind)\r\n            ////console.log(this.jobList[this.now_ind].optionsArray1)\r\n            // return\r\n            var has_answer = 0\r\n            var jobList = this.jobList\r\n            jobList.forEach(val => {\r\n                val.is_check = 0\r\n                if (val.type_id == 5) {\r\n                    val.optionsArray1.forEach(item => {\r\n                        if (item.is_check == 1) {\r\n                            val.is_check = 1\r\n                            has_answer++\r\n                        } else {\r\n                            val.is_check = 0\r\n                        }\r\n                    })\r\n                }\r\n            })\r\n\r\n            this.this_show = !this.this_show\r\n            this.has_answer = has_answer\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n\r\n        changShow1() {\r\n            this.this_show1 = !this.this_show1\r\n        },\r\n        select_question1(index, inputIndex, ind) {\r\n            this.this_show1 = !this.this_show1\r\n            this.now_index1 = index\r\n            this.now_ind1 = ind\r\n            this.now_inputIndex1 = inputIndex\r\n\r\n        },\r\n        select_question2(index, inputIndex, ind) {\r\n\r\n            this.this_show2 = !this.this_show2\r\n            this.now_index2 = index\r\n            this.now_ind2 = ind\r\n            this.now_inputIndex2 = inputIndex\r\n            //console.log(this.jobList[this.now_ind2].optionsArray1[this.now_inputIndex2].options)\r\n        },\r\n        changShow2() {\r\n            this.this_show2 = !this.this_show2\r\n        },\r\n        change_answer1(itemChild) {\r\n            this.insertWordAnswers[this.now_index1][this.now_inputIndex1] = itemChild.label + \"-\" + itemChild.title\r\n            this.jobList[this.now_ind1].optionsArray1[this.now_inputIndex1].is_check = 1;\r\n            ////console.log(this.now_ind)\r\n            // //console.log(this.jobList[this.now_ind].optionsArray1)\r\n\r\n            var has_answer = 0\r\n            var jobList = this.jobList\r\n            jobList.forEach(val => {\r\n                val.is_check = 0\r\n                if (val.type_id == 7) {\r\n                    //console.log(val.optionsArray1)\r\n                    val.optionsArray1.forEach(item => {\r\n                        if (item.is_check == 1) {\r\n                            val.is_check = 1\r\n                            has_answer++\r\n                        } else {\r\n                            val.is_check = 0\r\n                        }\r\n                    })\r\n                }\r\n\r\n            })\r\n            this.this_show1 = !this.this_show1\r\n            this.has_answer = has_answer\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n        change_answer2(itemChild) {\r\n            this.insertWordAnswers[this.now_index2][this.now_inputIndex2] = itemChild.label + \"-\" + itemChild.title\r\n            this.jobList[this.now_ind2].optionsArray1[this.now_inputIndex2].is_check = 1;\r\n            //console.log(this.insertWordAnswers)\r\n            var has_answer = 0\r\n            var jobList = this.jobList\r\n            jobList.forEach(val => {\r\n                val.is_check = 0\r\n                if (val.type_id == 8) {\r\n                    //console.log(val.optionsArray1)\r\n                    val.optionsArray1.forEach(item => {\r\n                        if (item.is_check == 1) {\r\n                            val.is_check = 1\r\n                            has_answer++\r\n                        } else {\r\n                            val.is_check = 0\r\n                        }\r\n                    })\r\n                }\r\n\r\n            })\r\n            this.this_show2 = !this.this_show2\r\n            this.has_answer = has_answer\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n        async select() {\r\n            var has_answer = 0\r\n            var jobList = this.jobList\r\n            jobList.forEach(val => {\r\n                val.is_check = 0\r\n                val.optionsArray1.forEach(item => {\r\n                    if (item.is_check == 1) {\r\n                        val.is_check = 1\r\n                    } else {\r\n                        val.is_check = 0\r\n                    }\r\n                })\r\n                if (val.is_check == 1) {\r\n                    has_answer++\r\n                }\r\n            })\r\n            this.has_answer = has_answer\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n\r\n        async inputAnser(index) {\r\n            var str = this.jobList[index].user_answer\r\n            if (str.length > 0) {\r\n                this.jobList[index].is_check = 1\r\n            }\r\n            this.change_count()\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n        async toggleAnswer(itemIndex, indexChild) {\r\n            // 切换选中状态\r\n            var jobList = this.jobList\r\n            var has_answer = 0\r\n            jobList.forEach((val, key) => {\r\n                if (key == itemIndex) {\r\n                    val.is_check = 0;\r\n                    val.optionsArray.forEach((child, index) => {\r\n                        if (indexChild == index) {\r\n                            if (child.is_check == 1) {\r\n                                child.is_check = 0\r\n                            } else {\r\n                                child.is_check = 1\r\n                            }\r\n                        }\r\n                    });\r\n                }\r\n            })\r\n            this.jobList = jobList\r\n            ////console.log(jobList)\r\n            // var answerCard = this.answerCard\r\n\r\n            jobList.forEach(val => {\r\n                if (val.is_check == 1) {\r\n                    has_answer++\r\n                }\r\n            })\r\n            this.jobList = jobList\r\n            this.has_answer = has_answer\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n\r\n        },\r\n        async getJobList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    // const response = await getJobList({ sid: user.sid, resource_id: this.resources_id })\r\n                    // const data = response.data\r\n                    var jobList = this.jobList;\r\n                    // jobList = JSON.parse(decrypt(jobList))\r\n                    // console.log(jobList)\r\n                    var total_num = 0;\r\n                    var answerCard = []\r\n                    jobList.forEach(item => {\r\n                        //console.log(item.options_answer)\r\n                        // if(item.options_answer !== null){\r\n                        //     item.options_answer = decrypt(item.options_answer)\r\n                        // }\r\n                        \r\n                        if (item.type_id !== 3 || item.type_id !== 6) {\r\n                            item.is_check = 0;\r\n                            \r\n                            if (item.optionsArray == null && item.type_id != 3 && item.type_id != 4) {\r\n                                \r\n                               \r\n                                if (item.type_id == 2) {\r\n                                    item.optionsArray = JSON.parse(item.options)\r\n                                    item.optionsArray.forEach(child => {\r\n                                        child.is_check = 0;\r\n                                        total_num++\r\n                                        answerCard.push({ is_check: 0 })\r\n                                    });\r\n                                }\r\n\r\n                                if (item.type_id == 5) {\r\n                                    item.optionsArray1 = JSON.parse(item.options_answer)\r\n                                    item.optionsArray1.forEach(child => {\r\n                                        child.is_check = 0;\r\n                                        total_num++\r\n                                        answerCard.push({ is_check: 0 })\r\n                                    });\r\n                                    item.optionsArray = JSON.parse(item.options)\r\n                                }\r\n                                if (item.type_id == 7 || item.type_id == 8) {\r\n                                    item.optionsArray1 = JSON.parse(item.options_answer)\r\n\r\n                                    item.optionsArray1.forEach(child => {\r\n                                        child.is_check = 0;\r\n                                        total_num++\r\n                                        answerCard.push({ is_check: 0 })\r\n                                    });\r\n                                    ////console.log(item.optionsArray1)\r\n                                }\r\n                            } else {\r\n                                total_num++\r\n                                answerCard.push({ is_check: 0 })\r\n                            }\r\n                            if (item.type_id == 4) {\r\n                                item.optionsArray = JSON.parse(item.options)\r\n                            }\r\n                            if (item.type_id == 2) {\r\n                                item.title = this.parsedContent(item.title, item.id)\r\n                                // ////console.log(item.title)\r\n                            }\r\n                            if (item.type_id == 5) {\r\n                                item.title = this.parsedContent(item.title, item.id)\r\n                                // ////console.log(item.title)\r\n                            }\r\n                            if (item.type_id == 7) {\r\n                                item.title = this.parsedContent(item.title, item.id)\r\n                                // ////console.log(item.title)\r\n                            }\r\n                            if (item.type_id == 8) {\r\n                                item.title = this.parsedContent(item.title, item.id)\r\n                                // ////console.log(item.title)\r\n                            }\r\n                        }\r\n                        item.user_answer = ''\r\n                    });\r\n                    // this.resources = data\r\n                    this.total_num = total_num\r\n                    // //console.log(\"答案解密\")\r\n                    // //console.log(jobList)\r\n                    this.jobList = jobList\r\n                    // this.src = data.resources.file_path\r\n                    this.answerCard = answerCard\r\n                    // 确保更新视图\r\n                    this.$forceUpdate();\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async check_answer(itemIndex, indexChild) {\r\n            var jobList = this.jobList\r\n            // ////console.log(itemIndex)\r\n            // ////console.log(indexChild)\r\n            jobList.forEach((val, key) => {\r\n                if (key == itemIndex) {\r\n                    val.is_check = 1;\r\n                    val.optionsArray.forEach((child, index) => {\r\n                        if (indexChild == index) {\r\n                            child.is_check = 1\r\n                        } else {\r\n                            child.is_check = 0\r\n                        }\r\n                    });\r\n                }\r\n            })\r\n            var has_answer = 0\r\n            jobList.forEach(val => {\r\n                val.optionsArray.forEach(child => {\r\n                    if (child.is_check == 1) {\r\n                        has_answer++\r\n                    }\r\n                });\r\n\r\n            })\r\n            this.jobList = jobList\r\n            this.has_answer = has_answer\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n\r\n        async change_card() {\r\n            this.card_show = !this.card_show;\r\n            var jobList = this.jobList\r\n            // var answerCard = this.answerCard\r\n             console.log(jobList)\r\n            var has_answer = 0\r\n            jobList.forEach(val => {\r\n                val.optionsArray.forEach(child => {\r\n                    if (child.is_check == 1) {\r\n                        has_answer++\r\n                    }\r\n                   \r\n                });\r\n\r\n            })\r\n            this.jobList = jobList\r\n            this.has_answer = has_answer\r\n            // 确保更新视图\r\n            // this.$forceUpdate();\r\n        },\r\n\r\n        async change_count() {\r\n            var jobList = this.jobList\r\n            // var answerCard = this.answerCard\r\n            var has_answer = 0\r\n            jobList.forEach(val => {\r\n                if (val.type_id != 3) {\r\n                    val.optionsArray.forEach(child => {\r\n                        if (child.is_check == 1) {\r\n                            has_answer++\r\n                        }\r\n                        ////console.log(child)\r\n                    });\r\n                } else {\r\n                    if (val.is_check == 1) {\r\n                        has_answer++\r\n                    }\r\n                }\r\n            })\r\n            this.jobList = jobList\r\n            this.has_answer = has_answer\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n        removePunctuation(str) {\r\n            // return str.replace(/[.,\\/#!$%\\^&\\*;:{}=\\-_`~()]/g, \"\"); // 去掉标点符号\r\n            // return str.replace(/[.,\\/#!$%\\^&\\*;:{}=\\-_`~()]/g, \"\"); // 去掉标点符号\r\n            return str.replace(/[.,\\/#!$%\\^&\\*;:{}=\\-_`~()]/g, \"\"); // 去掉标点符号\r\n        },\r\n        async to_submit() {\r\n            var JobList = this.jobList;\r\n            var submit_data = [];\r\n            const user = JSON.parse(localStorage.getItem('user'))\r\n            var total_jindu = 0\r\n            var total_jindu1 = 0\r\n            var total_jindu2 = 0\r\n            this.can_submit = false\r\n            JobList.forEach((item) => {\r\n                //单选题\r\n                if (item.type_id == 1) {\r\n                    var singleAnswerAdded = false; // 标记单选题是否已添加到提交数据中\r\n                    var user_answer = ''; // 默认用户选择的答案为空字符串\r\n\r\n                    item.optionsArray.forEach((child) => {\r\n                        if (child.is_check == 1 && !singleAnswerAdded) {\r\n                            user_answer = child.label || child.stu_answer; // 保存用户选择的答案\r\n\r\n                            var is_right = 0; // 默认设置为错误\r\n                            if (item.options_answer === child.label) {\r\n                                is_right = 1; // 设置正确答案标记\r\n                            }\r\n\r\n                            submit_data.push({\r\n                                user_id: user.sid,\r\n                                job_id: item.id,\r\n                                type_id: item.type_id,\r\n                                lable: child.label,\r\n                                answer: user_answer, // 使用用户选择的答案\r\n                                is_right: is_right,\r\n                                resource_id: item.resource_id\r\n                            });\r\n\r\n                            singleAnswerAdded = true;\r\n                        }\r\n                    });\r\n\r\n                    // 即使用户未选择选项，也要添加一条错误答案\r\n                    if (!singleAnswerAdded) {\r\n                        submit_data.push({\r\n                            user_id: user.sid,\r\n                            job_id: item.id,\r\n                            type_id: item.type_id,\r\n                            lable: '',\r\n                            answer: '', // 答案为空\r\n                            is_right: 0, // 设置为错误\r\n                            resource_id: item.resource_id\r\n                        });\r\n                    }\r\n                } else if (item.type_id == 2) {//填空题\r\n                    is_right = 0\r\n                    item.optionsArray.forEach((child, childindex) => {\r\n                        // const answer = child.title.split(/[\\s，,]+|&/).map(val => val.trim().toLowerCase()); // 标准答案，如 \"July 26 1956\", \"July twenty six nineteen fifty six\", etc.\r\n                        // 初步根据&和空格切割\r\n                        let answer = ''\r\n                        child.title = child.title.trim()\r\n                        if (/^\\d+$/.test(child.title.trim())) {\r\n                            // 如果是纯数字，直接使用\r\n                            answer = [child.title.trim().toLowerCase()]; // 使用 trim() 去掉空格并转为小写\r\n                        } else {\r\n                            answer = child.title.split(/\\s*&\\s*|\\s+/).map(val => val.trim().toLowerCase()); // 根据&和空格切割标准答案\r\n                            //console.log(answer)\r\n                            // // 检查是否每个元素的长度都大于1\r\n                            // if (answer.every(val => val.length > 1)) {\r\n                            //     // 如果是，则仅根据&符切割\r\n                            //     answer = child.title.split(/\\s*&\\s*/).map(val => val.trim().toLowerCase());\r\n                            //     //console.log(answer)\r\n                            // }\r\n\r\n                            // 检查是否有任意一个元素的长度大于1\r\n                            if (answer.some(val => val.length > 1)) {\r\n                                // 如果是，则仅根据&符切割\r\n                                answer = child.title.split(/\\s*&\\s*/).map(val => val.trim().toLowerCase());\r\n                                //console.log(answer);\r\n                            }\r\n\r\n\r\n                        }\r\n                        //console.log(answer)\r\n                        if (!this.insertWordAnswers[item.id][total_jindu]) {\r\n                            this.insertWordAnswers[item.id][total_jindu] = '';\r\n                        }\r\n\r\n                        const user_answer_old = this.insertWordAnswers[item.id][total_jindu];\r\n                        const trim_str = user_answer_old.trim().toLowerCase();\r\n                        const userDefinedPhrase = child.title || \"\"; // 用户定义的短语（单词或短语）\r\n\r\n                        // 处理用户答案，只在第一种情况下替换中英文逗号为空格\r\n                        const userAnswers = trim_str\r\n                            .replace(/[,，]+/g, ',') // 将中英文逗号替换为空格\r\n                            .replace(/[.。]+/g, '.') // 将中英文逗号替换为空格\r\n                            .replace(/[,，]+/g, ' ') // 将中英文逗号替换为空格\r\n                            .replace(/[.。]+/g, '') // 将中英文逗号替换为空格\r\n                            .split(/\\s+/) // 按空格分割\r\n                            .filter(Boolean) // 去掉空白元素\r\n                            .map(val => val.trim().toLowerCase()); // 去掉空格并转为小写\r\n                        //console.log(\"\" + userAnswers)\r\n                        let is_right;\r\n\r\n                        // 第一种情况：填选项（每个答案元素长度大于1，允许顺序打乱）\r\n                        if (answer.length > 1 && answer.every(val => val.length < 2)) {\r\n                            const answerSet = new Set(answer);\r\n                            //console.log(\"用户答案11:\", userAnswers);\r\n                            //console.log(\"用户答案12:\", answer);\r\n                            //console.log(\"用户答案14:\", answerSet);\r\n\r\n                            is_right = userAnswers.length > 0 && userAnswers.every(userAnswer => answerSet.has(userAnswer)) ? 1 : 0;\r\n                        } else {\r\n                            // 第二种情况：填入一个单词或短语，必须全量对比\r\n                            //console.log(\"用户答案21:\", userAnswers);\r\n                            //console.log(answer);\r\n                            // 检查用户答案是否都是数字\r\n                            const areAllNumbers = answer.every(val => /^\\d+$/.test(val));\r\n                            let userAnswerString = '';\r\n                            const normalizedUserInput = userAnswers.join(' '); // 将用户答案转换为字符串\r\n                            //console.log(\"用户答案22:\", normalizedUserInput);\r\n\r\n                            // 将每个标准答案转换为字符串并进行比较\r\n                            if (areAllNumbers) {\r\n                                // 如果每一个元素都是数字，则拼接为字符串\r\n                                answer = answer.join(' ');\r\n                                is_right = answer.trim() == normalizedUserInput.trim() ? 1 : 0;\r\n                            } else {\r\n                                answer = answer; // 否则保留原来的数组形式\r\n                                answer.forEach((val, index) => {\r\n                                    answer[index] = val.replace(/[,，]+/g, '').trim()\r\n                                    //console.log(val)\r\n                                })\r\n\r\n                                //console.log(\"用户答案23:\", answer);\r\n                                var is_right1 = answer.some(ans => normalizedUserInput === ans) ? 1 : 0; // 检查用户答案是否与任何一个标准答案匹配\r\n                                if ((answer == normalizedUserInput) || is_right1 == 1) {\r\n                                    is_right = 1\r\n                                } else {\r\n                                    is_right = 0\r\n                                }\r\n\r\n                                // 清理用户输入，去除多余的逗号和空格\r\n                                // const cleanUserInput = userAnswerString.replace(/[,，]+/g, '').replace(/\\s+/g, ' ').trim();\r\n\r\n                                // // 将每个标准答案转换为字符串并进行比较\r\n                                // is_right = answer.some(ans => cleanUserInput === ans.replace(/[,，]+/g, ' ').trim()) ? 1 : 0; // 检查用户答案是否与任何一个标准答案匹配\r\n                            }\r\n                            // 检查用户答案是否与任何一个标准答案匹配\r\n\r\n\r\n                        }\r\n\r\n                        submit_data.push({\r\n                            user_id: user.sid,\r\n                            job_id: item.id,\r\n                            type_id: item.type_id,\r\n                            lable: childindex + 1,\r\n                            answer: this.insertWordAnswers[item.id][total_jindu],\r\n                            is_right: is_right,\r\n                            resource_id: item.resource_id\r\n                        });\r\n\r\n                        total_jindu += 1;\r\n                    });\r\n\r\n\r\n\r\n                } else if (item.type_id == 5) {//选词填空\r\n                    is_right = 0\r\n                    item.optionsArray1.forEach((child, childindex) => {\r\n                        if (!this.insertWordAnswers[item.id][total_jindu]) {\r\n                            this.insertWordAnswers[item.id][total_jindu] = ''\r\n                        }\r\n                        // var answer = child.title.split('&'); // 将标准答案分割成数组\r\n                        if (this.insertWordAnswers[item.id][total_jindu] != '') {\r\n                            var my_answer = this.insertWordAnswers[item.id][total_jindu].split('-'); // 将标准答案分割成数组\r\n\r\n                        } else {\r\n                            my_answer = []\r\n                        }\r\n                        var answer = child.title; // 将标准答案分割成数组\r\n\r\n                        // var check_res =; // 检查用户答案是否在标准答案数组中\r\n                        if (answer === my_answer[0]) {\r\n                            is_right = 1; // 设置正确答案标记\r\n                            ////console.log(\"答案\" + child.title)\r\n                            ////console.log(\"我的选择\" + my_answer[0])\r\n\r\n                        } else {\r\n                            is_right = 0; // 设置正确答案标记\r\n                        }\r\n\r\n                        submit_data.push({\r\n                            user_id: user.sid,\r\n                            job_id: item.id,\r\n                            type_id: item.type_id,\r\n                            lable: childindex + 1,\r\n                            answer: this.insertWordAnswers[item.id][total_jindu], // 使用用户填写的答案\r\n                            is_right: is_right,\r\n                            resource_id: item.resource_id\r\n                        });\r\n                        total_jindu = total_jindu + 1\r\n                    })\r\n\r\n                } else if (item.type_id == 7) {//选词填空\r\n                    is_right = 0\r\n                    item.optionsArray1.forEach((child, childindex) => {\r\n                        if (!this.insertWordAnswers[item.id][total_jindu1]) {\r\n                            this.insertWordAnswers[item.id][total_jindu1] = ''\r\n                        }\r\n                        // var answer = child.title.split('&'); // 将标准答案分割成数组\r\n                        if (this.insertWordAnswers[item.id][total_jindu1] != '') {\r\n                            var my_answer = this.insertWordAnswers[item.id][total_jindu1].split('-'); // 将标准答案分割成数组\r\n\r\n                        } else {\r\n                            my_answer = []\r\n                        }\r\n                        var answer = child.title; // 将标准答案分割成数组\r\n\r\n                        // var check_res =; // 检查用户答案是否在标准答案数组中\r\n                        if (answer === my_answer[0]) {\r\n                            is_right = 1; // 设置正确答案标记\r\n                            ////console.log(\"答案\" + child.title)\r\n                            ////console.log(\"我的选择\" + my_answer[0])\r\n\r\n                        } else {\r\n                            is_right = 0; // 设置正确答案标记\r\n                        }\r\n\r\n                        submit_data.push({\r\n                            user_id: user.sid,\r\n                            job_id: item.id,\r\n                            type_id: item.type_id,\r\n                            lable: childindex + 1,\r\n                            answer: this.insertWordAnswers[item.id][total_jindu1], // 使用用户填写的答案\r\n                            is_right: is_right,\r\n                            resource_id: item.resource_id\r\n                        });\r\n                        total_jindu1 = total_jindu1 + 1\r\n                    })\r\n\r\n                } else if (item.type_id == 8) {//选词填空\r\n\r\n                    is_right = 0\r\n                    item.optionsArray1.forEach((child, childindex) => {\r\n                        if (!this.insertWordAnswers[item.id][total_jindu2]) {\r\n                            this.insertWordAnswers[item.id][total_jindu2] = ''\r\n                        }\r\n                        // var answer = child.title.split('&'); // 将标准答案分割成数组\r\n                        if (this.insertWordAnswers[item.id][total_jindu2] != '') {\r\n                            var my_answer = this.insertWordAnswers[item.id][total_jindu2].split('-'); // 将标准答案分割成数组\r\n\r\n                        } else {\r\n                            my_answer = []\r\n                        }\r\n                        var answer = child.title; // 将标准答案分割成数组\r\n\r\n                        // var check_res =; // 检查用户答案是否在标准答案数组中\r\n                        if (answer === my_answer[0]) {\r\n                            is_right = 1; // 设置正确答案标记\r\n                            ////console.log(\"答案\" + child.title)\r\n                            ////console.log(\"我的选择\" + my_answer[0])\r\n\r\n                        } else {\r\n                            is_right = 0; // 设置正确答案标记\r\n                        }\r\n\r\n                        submit_data.push({\r\n                            user_id: user.sid,\r\n                            job_id: item.id,\r\n                            type_id: item.type_id,\r\n                            lable: childindex + 1,\r\n                            answer: this.insertWordAnswers[item.id][total_jindu2], // 使用用户填写的答案\r\n                            is_right: is_right,\r\n                            resource_id: item.resource_id\r\n                        });\r\n                        total_jindu2 = total_jindu2 + 1\r\n                        //console.log(total_jindu2)\r\n                    })\r\n\r\n                } else if (item.type_id == 4) {//多选\r\n                    var user_answerA = ''\r\n                    item.optionsArray.forEach((child) => {\r\n                        // ////console.log(child.label)\r\n                        if (child.is_check == 1) {\r\n                            user_answerA += child.label + ','; // 保存用户选择的答案\r\n                        }\r\n                    });\r\n                    // ////console.log(item.options_answer)\r\n                    var new_answer = user_answerA.slice(0, -1)\r\n                    var is_right = 0; // 默认设置为错误\r\n                    if (item.options_answer === new_answer) {\r\n                        is_right = 1; // 设置正确答案标记\r\n                    } else {\r\n                        is_right = 0;\r\n                    }\r\n                    submit_data.push({\r\n                        user_id: user.sid,\r\n                        job_id: item.id,\r\n                        type_id: item.type_id,\r\n                        answer: new_answer, // 使用用户选择的答案\r\n                        is_right: is_right,\r\n                        resource_id: item.resource_id\r\n                    });\r\n                    // ////console.log(\"data\" + new_answer)\r\n                } else if (item.type_id == 3) {//简答\r\n                    {\r\n                        if (item.user_answer == null) {\r\n                            item.user_answer = ''\r\n                        }\r\n                        submit_data.push({\r\n                            user_id: user.sid,\r\n                            job_id: item.id,\r\n                            type_id: item.type_id,\r\n                            answer: item.user_answer, // 使用用户选择的答案\r\n                            is_right: 0,\r\n                            resource_id: item.resource_id\r\n                        });\r\n                    }\r\n                } else if (item.type_id == 6) {//简答\r\n                    {\r\n                        if (item.user_answer == null) {\r\n                            item.user_answer = ''\r\n                        }\r\n                        item.options = JSON.parse(item.options)\r\n                        var right_answer = item.options[0].title\r\n                        var userAnswers = item.user_answer\r\n                        var check_right = this.compareStringsIgnoreCaseAndSymbols(right_answer, userAnswers)\r\n                        if (check_right == true) {\r\n                            submit_data.push({\r\n                                user_id: user.sid,\r\n                                job_id: item.id,\r\n                                type_id: item.type_id,\r\n                                answer: item.user_answer, // 使用用户选择的答案\r\n                                is_right: 1,\r\n                                resource_id: item.resource_id\r\n                            });\r\n                        } else {\r\n                            submit_data.push({\r\n                                user_id: user.sid,\r\n                                job_id: item.id,\r\n                                type_id: item.type_id,\r\n                                answer: item.user_answer, // 使用用户选择的答案\r\n                                is_right: 0,\r\n                                resource_id: item.resource_id\r\n                            });\r\n                        }\r\n                        //console.log(item)\r\n                    }\r\n                }\r\n            });\r\n\r\n            // //console.log(submit_data);\r\n            // return\r\n            submit_data = JSON.stringify(submit_data)\r\n            const response = await submitData({\r\n                params: submit_data\r\n            })\r\n            if (response.code == 100) {\r\n                const resp = await updateUserStudy({ id: this.log_id })\r\n                if (resp.code == 100) {\r\n                    if (this.fromtype == 'listen') {\r\n                        this.$router.push({ name: 'Detail', query: { resource_id: this.resources_id } })\r\n                    } else {\r\n                        this.$router.push({ name: 'ReadDetail', query: { resource_id: this.resources_id } })\r\n                    }\r\n\r\n                }\r\n            }\r\n        },\r\n        compareStringsIgnoreCaseAndSymbols(str1, str2) {\r\n            // 转换为小写并去除空格和标点符号\r\n            const normalizedStr1 = str1.toLowerCase().replace(/[\\s.,!?]/g, '');\r\n            const normalizedStr2 = str2.toLowerCase().replace(/[\\s.,!?]/g, '');\r\n\r\n            // 比较去除标点和空格后的字符串\r\n            return normalizedStr1 === normalizedStr2;\r\n        },\r\n        adjustInputWidth(inputIndex, index, event) {\r\n\r\n            const input = event.target;\r\n            // 创建一个临时的 span 来计算输入文本的宽度\r\n            const tempSpan = document.createElement('span');\r\n            tempSpan.style.visibility = 'hidden';\r\n            tempSpan.style.position = 'absolute';\r\n            tempSpan.style.fontSize = window.getComputedStyle(input).fontSize;\r\n            tempSpan.style.fontFamily = window.getComputedStyle(input).fontFamily;\r\n            tempSpan.innerText = input.value || input.placeholder;\r\n\r\n            // 将 span 添加到 body 中以便浏览器计算宽度\r\n            document.body.appendChild(tempSpan);\r\n            // 根据 span 的宽度来设置 input 的宽度\r\n            input.style.width = (tempSpan.offsetWidth + 40) + 'px'; // 适当增加一些 padding\r\n\r\n            // 移除临时 span\r\n            document.body.removeChild(tempSpan);\r\n            this.jobList[index].optionsArray[inputIndex].is_check = 1;\r\n            //console.log('dgfvfhnujbdgfh')\r\n            //console.log(inputIndex)\r\n            //console.log(this.jobList[index].optionsArray[inputIndex])\r\n            var has_answer = 0\r\n            var jobList = this.jobList\r\n            jobList.forEach(val => {\r\n                val.is_check = 1\r\n                val.optionsArray.forEach(child => {\r\n                    if (this.insertWordAnswers[val.id][inputIndex]) {\r\n                        has_answer++\r\n                        val.is_check = 1\r\n                    } else {\r\n                        val.is_check = 0\r\n                    }\r\n                });\r\n\r\n            })\r\n\r\n            // //console.log(index)\r\n            // //console.log(inputIndex)\r\n            this.jobList = jobList\r\n            this.has_answer = has_answer\r\n            // // 确保更新视图\r\n            //console.log(jobList)\r\n            this.$forceUpdate();\r\n        },\r\n        // // 解析字符串，生成文本和输入框的块数组\r\n        // parsedContent(str, index_id) {\r\n        //     const chunks = [];\r\n        //     let lastIndex = 0;\r\n\r\n        //     // 替换特定格式的占位符\r\n        //     str = str.replace(/__（/g, '_(');\r\n        //     str = str.replace(/）__/g, ')_');\r\n\r\n        //     // 匹配占位符\r\n        //     const regex = /_\\((\\d+)\\)_+/g;\r\n        //     let match;\r\n\r\n        //     // // // 移除 HTML 标签，但保留 <br>\r\n        //     str = str.replace(/<\\/?[^>]+(>|$)/g, (match) => {\r\n        //         if (match.startsWith('<br')) return '<br>';\r\n        //         if (match.startsWith('<em')) return '<em>';\r\n        //         if (match.startsWith('</em')) return '</em>';\r\n        //         if (match.startsWith('</strong')) return '</strong>';\r\n        //         if (match.startsWith('<strong')) return '<strong>';\r\n        //         if (match.startsWith('<table')) return '<table>';\r\n        //         if (match.startsWith('</table')) return '</table>';\r\n        //         if (match.startsWith('<tbody')) return '<tbody>';\r\n        //         if (match.startsWith('</tbody')) return '</tbody>';\r\n        //         if (match.startsWith('<th')) return '<th>';\r\n        //         if (match.startsWith('</th')) return '</th>';\r\n        //         if (match.startsWith('<tr')) return '<tr>';\r\n        //         if (match.startsWith('</tr')) return '</tr>';\r\n        //         if (match.startsWith('<td')) return '<td>';\r\n        //         if (match.startsWith('</td')) return '</td>';\r\n        //         // if (match.startsWith('<p')) return '<p>';\r\n        //         if (match.startsWith('</p')) return '</p>';\r\n        //         if (match.startsWith('<img')) return match.replace(/<img/, '<img style=\"width: 120%;\"');\r\n        //         return '';\r\n        //     });\r\n        //     ////console.log(str)\r\n        //     // 逐个匹配字符串中的填空占位符\r\n        //     var inputIndex1 = 0\r\n        //     while ((match = regex.exec(str)) !== null) {\r\n        //         const inputIndex = this.globalInputIndex;\r\n\r\n        //         // 处理占位符之前的文本部分\r\n        //         if (match.index > lastIndex) {\r\n        //             const textChunk = str.slice(lastIndex, match.index);\r\n        //             chunks.push({ isInput: false, text: textChunk });\r\n        //         }\r\n\r\n        //         // 添加输入框\r\n        //         chunks.push({ isInput: true, inputIndex, inputIndex1 });\r\n        //         inputIndex1++\r\n        //         lastIndex = regex.lastIndex;\r\n        //         this.globalInputIndex++; // 累加 inputIndex\r\n        //     }\r\n        //     // 处理末尾的文本部分\r\n        //     if (lastIndex < str.length) {\r\n        //         const textChunk = str.slice(lastIndex);\r\n        //         chunks.push({ isInput: false, text: textChunk });\r\n        //     }\r\n\r\n        //     // 初始化对应的 insertWordAnswers 数组\r\n        //     if (!this.insertWordAnswers[index_id]) {\r\n        //         this.$set(this.insertWordAnswers, index_id, []);\r\n        //     }\r\n\r\n        //     //console.log(chunks)\r\n        //     return chunks;\r\n        // }\r\n        replacePTagsWithBr(html) {\r\n            return html.replace(/<p[^>]*>/gi, '<br>').replace(/<\\/p>/gi, '');\r\n        },\r\n\r\n        parsedContent(str, index_id) {\r\n            const chunks = [];\r\n            let lastIndex = 0;\r\n\r\n            // 替换特定格式的占位符\r\n            // str = str.replace(/__（/g, '_(').replace(/）__/g, ')_');\r\n\r\n            str = str.replace(/__（/g, '_(').replace(/）__/g, ')_');\r\n            str = this.replacePTagsWithBr(str);\r\n            //console.log(str)\r\n            // 匹配填空占位符\r\n            const regex = /_\\((\\d+)\\)_+/g;\r\n            let match;\r\n\r\n            // // 移除 HTML 标签，但保留 <br>、<em>、<strong> 等\r\n            str = str.replace(/<\\/?[^>]+(>|$)/g, (match) => {\r\n                if (/^<(br|em|strong|table|tbody|th|tr|td|img)/.test(match)) {\r\n                    return match.replace(/<img/, '<img style=\"width: 120%;\"');\r\n                }\r\n                return ''; // 删除其他标签\r\n            });\r\n\r\n\r\n\r\n            let inputIndex1 = 0;\r\n            while ((match = regex.exec(str)) !== null) {\r\n                const inputIndex = this.globalInputIndex;\r\n\r\n                // 处理占位符之前的文本部分\r\n                if (match.index > lastIndex) {\r\n                    const textChunk = str.slice(lastIndex, match.index);\r\n                    chunks.push({ isInput: false, text: textChunk });\r\n                }\r\n\r\n                // 添加输入框\r\n                chunks.push({ isInput: true, inputIndex, inputIndex1 });\r\n                inputIndex1++;\r\n                lastIndex = regex.lastIndex;\r\n                this.globalInputIndex++; // 累加 inputIndex\r\n            }\r\n\r\n            // 处理末尾的文本部分\r\n            if (lastIndex < str.length) {\r\n                const textChunk = str.slice(lastIndex);\r\n                chunks.push({ isInput: false, text: textChunk });\r\n            }\r\n\r\n            // 初始化对应的 insertWordAnswers 数组\r\n            if (!this.insertWordAnswers[index_id]) {\r\n                this.$set(this.insertWordAnswers, index_id, []);\r\n            }\r\n\r\n            //console.log(chunks);\r\n            return chunks;\r\n        }\r\n\r\n\r\n\r\n\r\n    },\r\n\r\n}\r\n</script>\r\n\r\n\r\n<style scoped>\r\n.praxis-common,\r\n.van-popup {\r\n    /* 弹窗会挂到 body，需单独指定字号，避免依赖父级继承。 */\r\n    font-size: 14px;\r\n}\r\n\r\n.van-overlay {\r\n    background-color: rgba(0, 0, 0, 0.1) !important\r\n}\r\n\r\n.answer-desc {\r\n    padding-left: 10px;\r\n    font-size: 14px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 100%;\r\n    box-sizing: border-box;\r\n    overflow-wrap: break-word;\r\n}\r\n\r\n.wrap-text {\r\n    width: 90%;\r\n    height: auto;\r\n    margin: 0 auto;\r\n    text-align: left;\r\n    padding: 10px 0;\r\n}\r\n\r\n.praxis-item {\r\n    width: 90%;\r\n    height: auto;\r\n    margin: 0 auto;\r\n    text-align: left;\r\n    padding-bottom: 10px;\r\n    text-align: justify;\r\n}\r\n\r\n.praxis-title {\r\n    font-size: 14px;\r\n    color: #030303;\r\n    padding: 35px 0 10px 0;\r\n    /* width: 50px; */\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.praxis-desc {\r\n    font-size: 14px;\r\n    width: 90%;\r\n    height: auto;\r\n    padding: 10px 0;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    font-weight: normal;\r\n\r\n}\r\n\r\n.directions {\r\n    font-size: 14px;\r\n    width: 90%;\r\n    height: auto;\r\n    padding: 10px 0;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    font-weight: normal;\r\n}\r\n\r\n.praxis-info {\r\n    /* width: 90%; */\r\n    height: auto;\r\n    background: #FFFFFF;\r\n    font-size: 14px;\r\n    overflow-wrap: break-word;\r\n}\r\n\r\n.answer {\r\n    width: 100%;\r\n    height: auto;\r\n    display: flex;\r\n    justify-content: center;\r\n    align-items: center;\r\n    padding: 15px 0;\r\n}\r\n\r\n.answer>textarea {\r\n    width: 100%;\r\n    height: 100%;\r\n    border-radius: 25px;\r\n    padding: 10px;\r\n    border: 1px solid lightgray;\r\n    ;\r\n}\r\n\r\n.answer-title {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 45px;\r\n    flex-shrink: 0;\r\n    height: 35px;\r\n    background-color: lightgray;\r\n    border-radius: 35px;\r\n    line-height: 35px;\r\n    text-align: center;\r\n}\r\n\r\n.checked {\r\n    background: linear-gradient(180deg, #4499EE 0%, #9CE4FF 100%);\r\n}\r\n\r\n.answer > .answer-desc {\r\n    flex: 1;\r\n    min-width: 0;\r\n    width: auto;\r\n}\r\n\r\n.input-answer,\r\n.answer > textarea {\r\n    font-size: 14px;\r\n    max-width: 100%;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.input-answer-box {\r\n    width: auto;\r\n    vertical-align: top;\r\n    display: inline;\r\n    line-height: 30px;\r\n    text-align: justify;\r\n}\r\n\r\n.input_new {\r\n    width: 80%;\r\n    height: 200px;\r\n    padding-left: 20px;\r\n}\r\n\r\n.input_new>input {\r\n    width: 50%;\r\n    margin: 50px 20px;\r\n    padding: 10px 20px;\r\n}\r\n\r\n\r\n.praxis-bottom {\r\n    width: 100%;\r\n    height: 60px;\r\n    background: #FFFFFF;\r\n    box-shadow: 0px -2px 6px 1px rgba(80, 143, 206, 0.1);\r\n    border-radius: 0px;\r\n    position: fixed;\r\n    bottom: 0;\r\n}\r\n\r\n.new-audio {\r\n    width: 50px;\r\n    height: 50px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-left: 15px;\r\n}\r\n\r\n.start-img {\r\n    width: 50px;\r\n    height: 50px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n\r\n}\r\n\r\n.audio-info {\r\n    width: 300px;\r\n    height: 50px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 50px;\r\n    text-align: left;\r\n    color: #979797;\r\n    font-size: 12px;\r\n}\r\n\r\n.progress {\r\n    width: 225px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-top: 22px;\r\n}\r\n\r\n.now-time {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 50px;\r\n}\r\n\r\n.answer-has {\r\n    /* width: 325px; */\r\n    height: 60px;\r\n    padding-left: 25x;\r\n}\r\n\r\n.jindu {\r\n    width: 165px;\r\n    /* vertical-align: top;\r\n    display: inline-block; */\r\n    line-height: 60px;\r\n    font-size: 14px;\r\n    color: #979797;\r\n    padding-left: 10px;\r\n    /* text-align: left; */\r\n    float: left;\r\n\r\n}\r\n\r\n.btn-ok-cn {\r\n    font-size: 14px;\r\n    margin-top: 12px;\r\n    width: 118px;\r\n    height: 36px;\r\n    line-height: 36px;\r\n    background: #003F88;\r\n    border-radius: 23px;\r\n    /* margin: 0 auto; */\r\n    text-align: center;\r\n    color: #FFF;\r\n    float: right;\r\n    margin-right: 20px;\r\n}\r\n\r\n.card-title {\r\n    width: 100vw;\r\n    height: 75px;\r\n    text-align: center;\r\n    line-height: 75px;\r\n    border-bottom: #E4E4E4 1px solid;\r\n    margin: 0 auto;\r\n    color: #000000;\r\n    font-weight: bold;\r\n    font-size: 16px;\r\n}\r\n\r\n.main-answer-card {\r\n    padding: 30px 40px 80px 40px;\r\n    text-align: left;\r\n}\r\n\r\n.card-item {\r\n    width: 34px;\r\n    height: 34px;\r\n    background: linear-gradient(180deg, #4499EE 0%, #9CE4FF 100%);\r\n    border-radius: 34px;\r\n    line-height: 34px;\r\n    text-align: center;\r\n    color: #FFF;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin: 10px 5px;\r\n    font-size: 12px;\r\n}\r\n\r\n.card-item-empty {\r\n    background: #CBCBCB;\r\n}\r\n\r\n.btn-cancel {\r\n    position: absolute;\r\n    top: 26px;\r\n    right: 25px;\r\n}\r\n\r\n.btn-ok {\r\n    width: 288px;\r\n    height: 45px;\r\n    background: #003F88;\r\n    border-radius: 23px;\r\n    margin: 0 auto;\r\n    line-height: 45px;\r\n    text-align: center;\r\n    color: #FFF;\r\n    position: fixed;\r\n    bottom: 0;\r\n    left: 40px;\r\n}\r\n\r\n.btn-ok1 {\r\n    width: 288px;\r\n    height: 45px;\r\n    background: #e5e7e9;\r\n    border-radius: 23px;\r\n    margin: 0 auto;\r\n    line-height: 45px;\r\n    text-align: center;\r\n    color: #FFF;\r\n    position: fixed;\r\n    bottom: 0;\r\n    left: 40px;\r\n}\r\n\r\n.answer-btn {\r\n    position: fixed;\r\n    bottom: 30%;\r\n    right: 10px;\r\n    width: 20px;\r\n    /* height: 80px; */\r\n    line-height: 20px;\r\n    text-align: center;\r\n    background-color: #96cbf7;\r\n    padding: 10px 0;\r\n    border-radius: 15px;\r\n    color: #FFF;\r\n    font-size: 12px;\r\n}\r\n\r\n.close-btn {\r\n    position: fixed;\r\n    bottom: 56vh;\r\n    left: 40vw;\r\n    width: 20vw;\r\n    height: 55px;\r\n    line-height: 25px;\r\n    text-align: center;\r\n    background-color: #FFF;\r\n    border-radius: 15px 15px 0 0;\r\n    color: #8F8F8F;\r\n    font-size: 12px;\r\n}\r\n\r\n\r\nselect {\r\n    width: 60px;\r\n    max-width: 300px;\r\n    height: 30px;\r\n    border: #96cbf7 1px solid;\r\n}\r\n\r\n\r\n\r\n.header {\r\n    display: flex;\r\n    align-items: center;\r\n    height: 58px;\r\n}\r\n\r\n.title {\r\n    flex: 1;\r\n    text-align: center;\r\n    font-weight: 600;\r\n    font-size: 18px;\r\n    color: var(--td-text-color-primary);\r\n    padding-left: 80px;\r\n}\r\n\r\n.btn {\r\n    font-size: 16px;\r\n    padding: 16px;\r\n}\r\n\r\n.btn--cancel {\r\n    color: var(--td-text-color-secondary);\r\n}\r\n\r\n.btn--confirm {\r\n    color: #0052d9;\r\n}\r\n\r\n.date-list {\r\n    width: 100%;\r\n    height: auto;\r\n}\r\n\r\n.date-item {\r\n    width: auto;\r\n    overflow-wrap: break-word;\r\n    /* height: 25px; */\r\n    margin: 10px 12px;\r\n    text-align: left;\r\n    background-color: #F4F8FB;\r\n    border-radius: 9px;\r\n    line-height: 25px;\r\n    padding: 10px;\r\n}\r\n\r\n.insert-div {\r\n    max-width: 100%;\r\n    box-sizing: border-box;\r\n    font-size: 14px;\r\n    border: 1px solid #6FDBFF;\r\n    margin: 0 5px 5px 5px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding: 5px 10px;\r\n}\r\n\r\n.van-overlay {\r\n    background-color: rgba(0, 0, 0, 1%) !important\r\n}\r\n\r\n.van-popup {\r\n    z-index: 99999 !important;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PaxisCommon.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PaxisCommon.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PaxisCommon.vue?vue&type=template&id=11a60f80&scoped=true\"\nimport script from \"./PaxisCommon.vue?vue&type=script&lang=js\"\nexport * from \"./PaxisCommon.vue?vue&type=script&lang=js\"\nimport style0 from \"./PaxisCommon.vue?vue&type=style&index=0&id=11a60f80&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"11a60f80\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{ref:\"articleContainer\",staticClass:\"article-container\"},[_c('div',{staticClass:\"article-content\",domProps:{\"innerHTML\":_vm._s(_vm.processedContent)},on:{\"click\":_vm.handleWordClick}})])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * Normalize HTML entities that were encoded once too many times by the API.\n *\n * Content is rendered with v-html, so a value such as `&amp;nbsp;` otherwise\n * becomes the visible text `&nbsp;` instead of a non-breaking space.\n */\nexport function normalizeHtmlEntities(html) {\n  return String(html || '')\n    .replace(/&(?:amp;)+nbsp;/gi, '&nbsp;')\n    .replace(/&(?:amp;)+#160;/gi, '&#160;')\n    .replace(/&(?:amp;)+#x0*a0;/gi, '&#xA0;')\n}\n","<!-- src/components/ArticleParser.vue -->\r\n<template>\r\n  <div class=\"article-container\" ref=\"articleContainer\">\r\n    <div \r\n      class=\"article-content\" \r\n      v-html=\"processedContent\" \r\n      @click=\"handleWordClick\"\r\n    ></div>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport { normalizeHtmlEntities } from '@/utils/html'\r\n\r\nexport default {\r\n  props: {\r\n    content: {\r\n      type: String,\r\n      required: true\r\n    }\r\n  },\r\n  data() {\r\n    return {\r\n      processedContent: ''\r\n    };\r\n  },\r\n  watch: {\r\n    content: {\r\n      immediate: true,\r\n      handler(newVal) {\r\n        this.processContent(newVal);\r\n      }\r\n    }\r\n  },\r\n  methods: {\r\n    processContent(content) {\r\n      // 保留所有HTML标签，只处理文本内容\r\n      this.processedContent = this.wrapWords(normalizeHtmlEntities(content));\r\n    },\r\n    \r\n    wrapWords(html) {\r\n      // 保留HTML标签和实体，避免将 &nbsp; 中的 nbsp 当作单词包裹\r\n      return html.replace(/(<[^>]+>|&(?:[a-zA-Z][a-zA-Z0-9]*|#\\d+|#x[\\da-fA-F]+);)|([a-zA-ZÀ-ÿ]+(?:'[a-zA-ZÀ-ÿ]+)?)/g, (match, tag, word) => {\r\n        if (tag) {\r\n          // 保留HTML标签不变\r\n          return tag;\r\n        }\r\n        if (word) {\r\n          // 包裹单词\r\n          return `<span class=\"word\" data-word=\"${word}\">${word}</span>`;\r\n        }\r\n        return match;\r\n      });\r\n    },\r\n    \r\n    handleWordClick(event) {\r\n      const target = event.target;\r\n      if (target.classList.contains('word')) {\r\n        const word = target.dataset.word;\r\n        this.$emit('word-click', word);\r\n      }\r\n    }\r\n  }\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.article-container {\r\n  width: 100%;\r\n  height: 70vh;\r\n  overflow: auto;\r\n}\r\n\r\n.article-content {\r\n  width: 80vw;\r\n  height: auto;\r\n  margin: 8px auto;\r\n  padding-bottom: 60px;\r\n  margin-top: 40px;\r\n  font-size: 16px;\r\n  text-align: justify;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ArticleParser.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ArticleParser.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ArticleParser.vue?vue&type=template&id=401741ca&scoped=true\"\nimport script from \"./ArticleParser.vue?vue&type=script&lang=js\"\nexport * from \"./ArticleParser.vue?vue&type=script&lang=js\"\nimport style0 from \"./ArticleParser.vue?vue&type=style&index=0&id=401741ca&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"401741ca\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pdf-viewer\"},[(_vm.loading)?_c('div',{staticClass:\"pdf-state\"},[_vm._v(\"正在加载原文...\")]):(_vm.error)?_c('div',{staticClass:\"pdf-state pdf-error\"},[_c('p',[_vm._v(\"原文预览失败\")]),(_vm.errorMessage)?_c('small',[_vm._v(_vm._s(_vm.errorMessage))]):_vm._e(),_c('a',{attrs:{\"href\":_vm.src,\"target\":\"_blank\",\"rel\":\"noopener\"}},[_vm._v(\"打开 PDF\")])]):[_c('div',{staticClass:\"pdf-toolbar\",attrs:{\"role\":\"toolbar\",\"aria-label\":\"PDF 缩放\"}},[_c('button',{attrs:{\"type\":\"button\",\"aria-label\":\"缩小\",\"disabled\":_vm.zoom <= _vm.minZoom},on:{\"click\":function($event){return _vm.changeZoom(-_vm.zoomStep)}}},[_vm._v(\"−\")]),_c('span',[_vm._v(_vm._s(Math.round(_vm.zoom * 100))+\"%\")]),_c('button',{attrs:{\"type\":\"button\",\"aria-label\":\"放大\",\"disabled\":_vm.zoom >= _vm.maxZoom},on:{\"click\":function($event){return _vm.changeZoom(_vm.zoomStep)}}},[_vm._v(\"+\")]),_c('button',{staticClass:\"reset-zoom\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.resetZoom}},[_vm._v(\"适应屏幕\")])]),_c('div',{ref:\"pages\",staticClass:\"pdf-pages\"})]],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pdf-viewer\">\n    <div v-if=\"loading\" class=\"pdf-state\">正在加载原文...</div>\n    <div v-else-if=\"error\" class=\"pdf-state pdf-error\">\n      <p>原文预览失败</p>\n      <small v-if=\"errorMessage\">{{ errorMessage }}</small>\n      <a :href=\"src\" target=\"_blank\" rel=\"noopener\">打开 PDF</a>\n    </div>\n    <template v-else>\n      <div class=\"pdf-toolbar\" role=\"toolbar\" aria-label=\"PDF 缩放\">\n        <button type=\"button\" aria-label=\"缩小\" :disabled=\"zoom <= minZoom\" @click=\"changeZoom(-zoomStep)\">−</button>\n        <span>{{ Math.round(zoom * 100) }}%</span>\n        <button type=\"button\" aria-label=\"放大\" :disabled=\"zoom >= maxZoom\" @click=\"changeZoom(zoomStep)\">+</button>\n        <button type=\"button\" class=\"reset-zoom\" @click=\"resetZoom\">适应屏幕</button>\n      </div>\n      <div ref=\"pages\" class=\"pdf-pages\"></div>\n    </template>\n  </div>\n</template>\n\n<script>\nimport * as pdfjsLib from 'pdfjs-dist/legacy/build/pdf'\nimport PdfWorker from 'pdfjs-dist/build/pdf.worker.js'\nimport { getAuthorizationToken } from '@/utils/auth'\n\n// worker-loader exports a Worker constructor. Passing the instance directly\n// prevents PDF.js from trying to create a fake worker from the bundle URL.\ntry {\n  pdfjsLib.GlobalWorkerOptions.workerPort = new PdfWorker()\n} catch (error) {\n  // Keep workerSrc as a fallback for browsers that do not support workerPort.\n  pdfjsLib.GlobalWorkerOptions.workerSrc = PdfWorker\n}\n\nexport default {\n  name: 'PdfViewer',\n  props: { src: { type: String, default: '' } },\n  data() {\n    return { loading: true, error: false, errorMessage: '', pdf: null, loadToken: 0, renderToken: 0, rendering: false, zoom: 1.2, minZoom: 0.8, maxZoom: 2.4, zoomStep: 0.2 }\n  },\n  watch: {\n    src: {\n      immediate: true,\n      handler() { this.renderDocument() }\n    }\n  },\n  mounted() {\n    window.addEventListener('resize', this.renderPages)\n  },\n  beforeDestroy() {\n    this.loadToken += 1\n    this.renderToken += 1\n    window.removeEventListener('resize', this.renderPages)\n    if (this.pdf) this.pdf.destroy()\n  },\n  methods: {\n    async renderDocument() {\n      const token = ++this.loadToken\n      this.loading = true\n      this.error = false\n      this.errorMessage = ''\n      if (this.pdf) this.pdf.destroy()\n      this.pdf = null\n      if (this.$refs.pages) this.$refs.pages.innerHTML = ''\n      if (!this.src) { this.loading = false; this.error = true; return }\n      try {\n        const headers = {}\n        const tokenValue = getAuthorizationToken()\n        const apiHost = new URL(process.env.VUE_APP_BASE_API).hostname\n        const fileHost = new URL(this.src, window.location.href).hostname\n        if (tokenValue && apiHost === fileHost) headers.authorization = tokenValue\n        const fileUrl = this.normalizeUrl(this.src)\n        // OSS 返回 Access-Control-Allow-Origin: *，必须使用匿名 CORS 请求，不能携带 credentials。\n        const response = await fetch(fileUrl, { headers, credentials: 'omit', mode: 'cors' })\n        if (!response.ok) throw new Error(`文件请求失败（${response.status}）`)\n        const buffer = await response.arrayBuffer()\n        if (!buffer.byteLength) throw new Error('文件内容为空')\n        const contentType = response.headers.get('content-type') || ''\n        if (/text\\/html|application\\/json/i.test(contentType)) throw new Error('文件地址返回了网页内容，请检查登录态或文件权限')\n        const pdfDocument = await pdfjsLib.getDocument({ data: buffer }).promise\n        if (token !== this.loadToken) { pdfDocument.destroy(); return }\n        this.pdf = pdfDocument\n        this.loading = false\n        await this.$nextTick()\n        await this.renderPages()\n      } catch (error) {\n        if (token !== this.loadToken) return\n        this.loading = false\n        this.error = true\n        this.errorMessage = this.describeError(error)\n        this.$emit('error', error)\n      }\n    },\n    async renderPages() {\n      if (!this.pdf || !this.$refs.pages || this.rendering) return\n      this.rendering = true\n      const renderToken = ++this.renderToken\n      try {\n        const container = this.$refs.pages\n        const width = container.clientWidth || window.innerWidth\n        container.innerHTML = ''\n        for (let pageNumber = 1; pageNumber <= this.pdf.numPages; pageNumber += 1) {\n          const page = await this.pdf.getPage(pageNumber)\n          const baseViewport = page.getViewport({ scale: 1 })\n          const scale = Math.max(0.5, Math.min(3, (width - 16) / baseViewport.width * this.zoom))\n          const viewport = page.getViewport({ scale })\n          const canvas = document.createElement('canvas')\n          canvas.className = 'pdf-page'\n          canvas.width = viewport.width\n          canvas.height = viewport.height\n          canvas.setAttribute('aria-label', `第${pageNumber}页`)\n          container.appendChild(canvas)\n          await page.render({ canvasContext: canvas.getContext('2d'), viewport }).promise\n          if (renderToken !== this.renderToken) return\n        }\n      } catch (error) {\n        this.error = true\n        this.errorMessage = this.describeError(error)\n        this.$emit('error', error)\n      } finally {\n        this.rendering = false\n      }\n    },\n    changeZoom(delta) {\n      const nextZoom = Math.max(this.minZoom, Math.min(this.maxZoom, Number((this.zoom + delta).toFixed(1))))\n      if (nextZoom === this.zoom) return\n      this.zoom = nextZoom\n      this.renderPages()\n    },\n    resetZoom() {\n      this.zoom = 1.2\n      this.renderPages()\n    },\n    describeError(error) {\n      const message = error && (error.message || error.name)\n      if (/cors|network|fetch|failed to fetch/i.test(message || '')) return '文件地址无法跨域读取，请检查文件服务器的 CORS 配置'\n      if (/password/i.test(message || '')) return 'PDF 文件需要密码'\n      return message || '请稍后重试'\n    },\n    normalizeUrl(value) {\n      const source = String(value || '')\n      if (/^http:\\/\\//i.test(source) && window.location.protocol === 'https:') {\n        return source.replace(/^http:\\/\\//i, 'https://')\n      }\n      return source\n    }\n  }\n}\n</script>\n\n<style scoped>\n.pdf-viewer { width: 100%; min-height: 240px; background: #f4f6f8; }\n.pdf-toolbar { position: sticky; top: 0; z-index: 2; display: flex; align-items: center; justify-content: center; gap: 12px; min-height: 42px; padding: 4px 8px; box-sizing: border-box; background: rgba(255, 255, 255, 0.96); border-bottom: 1px solid #e5ebf0; color: #526579; font-size: 13px; }\n.pdf-toolbar button { width: 28px; height: 28px; padding: 0; border: 1px solid #c7d5e2; border-radius: 4px; background: #fff; color: #167eae; font-size: 20px; line-height: 24px; }\n.pdf-toolbar button:disabled { color: #b9c3cc; background: #f5f7f9; }\n.pdf-toolbar .reset-zoom { width: auto; padding: 0 9px; font-size: 12px; }\n.pdf-pages { width: 100%; max-height: calc(85vh - 48px); overflow: auto; -webkit-overflow-scrolling: touch; overscroll-behavior: contain; touch-action: pan-y pan-x; padding: 8px 0 20px; box-sizing: border-box; }\n.pdf-page { display: block; width: auto; max-width: none; height: auto; margin: 0 auto 10px; background: #fff; box-shadow: 0 1px 5px rgba(26, 45, 70, 0.16); }\n.pdf-state { min-height: 180px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; color: #7c8998; font-size: 14px; }\n.pdf-state p { margin: 0; }\n.pdf-state small { max-width: 90%; color: #a1aab5; text-align: center; word-break: break-word; }\n.pdf-error a { color: #198dcc; text-decoration: none; }\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PdfViewer.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PdfViewer.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PdfViewer.vue?vue&type=template&id=1d7a8339&scoped=true\"\nimport script from \"./PdfViewer.vue?vue&type=script&lang=js\"\nexport * from \"./PdfViewer.vue?vue&type=script&lang=js\"\nimport style0 from \"./PdfViewer.vue?vue&type=style&index=0&id=1d7a8339&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"1d7a8339\",\n  null\n  \n)\n\nexport default component.exports","<template>\r\n  <div class=\"praxis\">\r\n    <div class=\"Verify-box\" v-if=\"dialog_show == false\">\r\n      <img :src=\"imageBase64\" alt=\"\" @click=\"checkCaptcha\">\r\n      <div class=\"input-box\">\r\n        <span>请输入验证码：</span>\r\n        <input type=\"text\" v-model=\"Verify\" />\r\n      </div>\r\n      <div class=\"btn-Verify\" @click=\"checkCaptcha\">提交</div>\r\n    </div>\r\n    <div v-else>\r\n      <van-nav-bar :title=\"resources.resources.name\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n      <div class=\"empty\" style=\" width:100%;height: 80px;text-align: center;\"\r\n        v-if=\"!loading || resources.resources.name == '加载中'\">\r\n        <van-loading size=\"24px\">加载中...</van-loading>\r\n      </div>\r\n      <div class=\"last-box\" v-if=\"HistoryList.length > 0 && resources.resources.name != '加载中'\">\r\n        <div class=\"last-title\" @click=\"to_detail(HistoryList[0])\">答题<br>记录</div>\r\n        <div class=\"last-count\">\r\n          <span style=\"font-size: 20px;font-weight: bold;\">{{ HistoryList[0].right_count }}</span>/{{\r\n            HistoryList[0].total_count }}(第{{ HistoryList.length }}次)<br>\r\n          正确率：{{ ((HistoryList[0].right_count / HistoryList[0].total_count) * 100).toFixed(2) }}%\r\n        </div>\r\n        <div class=\"last-right\">\r\n          <div class=\"all-last\" @click=\"to_HistoryList\">全部</div>\r\n          <div class=\"last-time\">提交时间：{{ HistoryList[0].create_time }}</div>\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"video-box\" v-if=\"type_id == 'video'\">\r\n        <video :src=\"src\" object-fit=\"contain\" ref=\"videoPlayer\" @play=\"playVideo\" @pause=\"pauseVideo\" controls />\r\n      </div>\r\n      <div class=\"main-box\" v-if=\"resources.resources.name != '加载中'\">\r\n        <van-tabs v-model=\"activeTitle\" color=\"#6FDBFF\">\r\n          <van-tab>\r\n            <template #title>做题 </template>\r\n\r\n            <PaxisCommon :resources_id=\"resources_id\" :log_id=\"log_id\" fromtype=\"listen\" v-if=\"jobList.length > 0\"\r\n              allow=\"microphone\" />\r\n            <van-empty v-if=\"jobList.length == 0 && resources.resources.name != '加载中'\" class=\"custom-image\"\r\n              image=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/menu_tab/empty.png\"\r\n              description=\"此资源无作业，建议先听听力，再看原文~\" />\r\n            <div class=\"wall\"></div>\r\n\r\n            <van-popup v-model=\"show\" position=\"bottom\" style=\"border-radius: 30px 30px 0 0;\"\r\n              v-if=\"answerCard.length > 0\">\r\n              <div class=\"card-title\">答题卡</div>\r\n              <div class=\"main-answer-card\">\r\n                <div :class=\"{ 'card-item-empty': item.is_check == 0 }\" class=\"card-item\"\r\n                  v-for=\"(item, index) in answerCard\" :key=\"index\">\r\n                  {{ index + 1 }}\r\n                </div>\r\n              </div>\r\n              <div class=\"btn-cancel\" @click=\"change_card\">取消</div>\r\n              <div class=\"btn-ok\" @click=\"to_submit\">确定</div>\r\n            </van-popup>\r\n          </van-tab>\r\n          <van-tab>\r\n            <template #title>原文 </template>\r\n\r\n            <div v-if=\"canread == true\" class=\"wrap-text\">\r\n\r\n              <!--  <ArticleParser :content=\"resources.resources.content\" @word-click=\"onWordClick\" /> -->\r\n              <PdfViewer v-if=\"resources.resources?.file_type === 'pdf'\" :src=\"resources.resources?.file_path\" />\n              <ArticleParser v-else :content=\"resources.resources?.content\" @word-click=\"onWordClick\" />\r\n\r\n            </div>\r\n\r\n            <div v-else class=\"wrap-text\" style=\"color: red;\">\r\n              <span v-if=\"jobList.length > 0\">请先完成听力练习</span>\r\n              <span v-else>查看原文前，请先听完听力材料</span>\r\n            </div>\r\n          </van-tab>\r\n        </van-tabs>\r\n        <van-popup v-model=\"caninput\" position=\"bottom\" @opened=\"focusInput\" style=\"position: fixed;\"\r\n          :close-on-click-overlay=\"false\">\r\n          <div class=\"input_new\">\r\n            题{{ now_index + 1 }}-{{ this_inputIndex + 1 }}<input type=\"text\" ref=\"myInput\" @input=\"my_insert\"\r\n              :autofocus=\"autofocus\" v-model=\"my_insert_word\">\r\n          </div>\r\n          <div>\r\n            <div class=\"btn-cancel\" @click=\"cancel_caninput\">取消</div>\r\n            <div class=\"btn-ok\" @click=\"change_caninput\">确定</div>\r\n          </div>\r\n        </van-popup>\r\n        <div class=\"praxis-bottom\" v-if=\"type_id == 'audio'\">\r\n          <div class=\"new-audio\">\r\n            <audio ref=\"audioPlayer\" @timeupdate=\"updateTime\" @ended=\"onAudioEnded\" @loadedmetadata=\"loadMetadata\"\r\n              @canplay=\"canPlay\" :src=\"src\">\r\n            </audio>\r\n            <img v-if=\"audio_status == 1\"\r\n              src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/start.png\" @click=\"audioPlay\"\r\n              mode=\"\" class=\"start-img\" />\r\n            <img v-if=\"audio_status == 2\"\r\n              src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/zanting.png\" @click=\"audioPause\"\r\n              mode=\"\" class=\"start-img\" />\r\n          </div>\r\n          <div class=\"audio-info\">\r\n            <div class=\"progress\">\r\n              <van-progress :percentage=\"percentage\" track-color=\"#E3E3E3\" color=\"#6EE6FF\" :show-pivot=\"false\" />\r\n            </div>\r\n            <div class=\"now-time\">{{ currentTime }}</div>\r\n\r\n            <div class=\"btn-ok\" @click=\"to_submit\" v-if=\"canread == true && jobList.length == 0\">完成听力</div>\r\n            <div class=\"btn-ok-no\" @click=\"to_submit\" v-if=\"canread == false && jobList.length == 0\">完成听力</div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n\r\n\r\n      <ListenPraxisAi :resources_id=\"resources_id\" allow=\"microphone\" />\r\n    </div>\r\n    <van-action-sheet style=\"min-height: 300px;background-color: aliceblue;z-index: 9999;\" v-model=\"word_show\"\r\n      title=\"单词释义\" @close=\"change_praxis_show\" @click-overlay=\"change_praxis_show\">\r\n      <div class=\"collect\">\r\n        <div\r\n          style=\"text-align: left;display: inline-block;vertical-align: top;width: 40%;padding-left: 10px;font-size: 24px;font-weight: 500;\">\r\n          {{ word }}</div>\r\n        <div class=\"collect-icon\" style=\"text-align: right;display: inline-block;vertical-align: top;width: 50%;\">\r\n          <van-icon name=\"star\" size=\"30\" color=\"#D9DCE3\" v-if=\"scColor == false\" @click=\"add_word\" />\r\n          <van-icon name=\"star\" size=\"30\" color=\"orange\" v-else />\r\n        </div>\r\n      </div>\r\n      <div class=\"word-box\">\r\n        <div class=\"word-item\" v-for=\"(item, index) in wordDetail\" :key=\"index\">\r\n          <div class=\"item-meaning_CH\">{{ item.type }}&nbsp;&nbsp;:&nbsp;&nbsp;{{ item.meaning_CH }}</div>\r\n        </div>\r\n      </div>\r\n    </van-action-sheet>\r\n  </div>\r\n</template>\r\n<script>\r\nimport { getJobList, submitData, updateUserStudy, getHistoryList, saveAccessLog, checkCaptcha, createCaptcha } from '@/api/listen'\r\nimport { getListByWord, AddWord } from '@/api/home'\r\nimport ListenPraxisAi from \"@/components/ListenPraxisAi\";\r\nimport PaxisCommon from \"@/components/PaxisCommon\";\r\nimport ArticleParser from '@/components/ArticleParser';\nimport PdfViewer from '@/components/PdfViewer';\nimport { decrypt } from '@/api/aes'\r\nexport default {\r\n  components: { ListenPraxisAi, PaxisCommon, ArticleParser, PdfViewer },\n  name: 'Praxis',\r\n  data() {\r\n    return {\r\n      autofocus: true,\r\n      show: false,\r\n      dialog_show: true,\r\n      imageBase64: '',\r\n      activeTitle: 0,\r\n      active: 0,\r\n      resources: {\r\n        resources: {\r\n          \"name\": \"加载中\"\r\n        }\r\n      },\r\n      jobList: [],\r\n      answerCard: [],\r\n      src: [],\r\n      log_id: 0,\r\n      resources_id: 0,\r\n      percentage: 0,\r\n      has_answer: 0,\r\n      currentTime: '0:00',\r\n      audio_status: 1,\r\n      insertWordAnswers: [],\r\n      HistoryList: [],\r\n      caninput: false,\r\n      this_job_id: 0,\r\n      this_inputIndex: 0,\r\n      canread: false,\r\n      cansubmit: false,\r\n      total_num: 0,\r\n      time: '120',\r\n      countdown: '0',\r\n      type_id: 'audio',\r\n      loading: false,\r\n      word_show: false,\r\n      wordDetail: [],\r\n      word: '',\r\n    }\r\n  },\r\n  provide() {\r\n    // 提供一个方法供子组件动态获取数据\r\n    return {\r\n      getSharedData: () => this.jobList, // 使用箭头函数绑定 this\r\n    };\r\n  },\r\n  methods: {\r\n    async onWordClick(word) {\r\n      console.log('点击了单词：', word);\r\n\r\n      const response = await getListByWord({ word: word })\r\n      if (response.code == 100) {\r\n        if (response.data.length == 0) {\r\n          this.$message({\r\n            message: '暂未收录',\r\n            center: true\r\n          })\r\n          return\r\n        }\r\n        this.scColor = false\r\n        this.word_show = true\r\n        this.praxis_show = false\r\n        this.wordDetail = response.data\r\n        this.word = word\r\n      }\r\n    },\r\n    async add_word() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await AddWord({ uid: user.sid, word: this.word })\r\n          if (response.code == 100) {\r\n            this.$message({\r\n              message: '已添加到生词本',\r\n              center: true\r\n            })\r\n          }\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    sendCode() {\r\n      // 开启定时\r\n      this.clearTimer();\r\n      this.timer = setInterval(() => {\r\n        this.countdown++;\r\n        //console.log(this.countdown)\r\n        // 停止定时器\r\n        if (this.countdown == 120) {\r\n          this.countdown = 0\r\n          this.cansubmit = true\r\n          this.$forceUpdate();\r\n          this.clearTimer();\r\n          this.close();\r\n\r\n        }\r\n      }, 1000)\r\n    },\r\n    playVideo() {\r\n      this.$refs.videoPlayer.play();\r\n    },\r\n    pauseVideo() {\r\n      this.$refs.videoPlayer.pause();\r\n    },\r\n    clearTimer() {\r\n      //清除定时器\r\n      clearInterval(this.timer);\r\n      this.timer = null;\r\n    },\r\n    // 弹窗打开后自动聚焦输入框\r\n    focusInput() {\r\n      this.$nextTick(() => {\r\n        // 使用 ref 获取 input 元素并聚焦\r\n        this.$refs.myInput.focus();\r\n      });\r\n    },\r\n    to_detail(item) {\r\n      this.$router.push({ name: 'DetailHis', query: { resource_id: this.resources_id, his_id: item.id } })\r\n    },\r\n    async onClickLeft() {\r\n      history.back()\r\n    },\r\n    async to_HistoryList() {\r\n      this.$router.push({ name: 'LHistoryList', query: { resources_id: this.resources_id } })\r\n    },\r\n    async getJobList() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await getJobList({ sid: user.sid, resource_id: this.resources_id })\r\n          if (response.code == 100) {\r\n\r\n            this.loading = true\r\n\r\n            const data = response.data\r\n            // var jobList = response.data.jobList;\r\n            // //console.log(jobList)\r\n            var jobList = JSON.parse(decrypt(response.data.jobList))\r\n            this.resources = data\r\n            // //console.log(jobList)\r\n            this.jobList = jobList\r\n\r\n            this.src = data.resources.file_path\r\n            this.type_id = data.resources.type_id\r\n\r\n            // 确保更新视图\r\n            //console.log(this.answerCard)\r\n            this.$forceUpdate();\r\n          }\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async getHistoryList() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await getHistoryList({ sid: user.sid, resource_id: this.resources_id })\r\n          if (response.code == 100) {\r\n            this.loading = true\r\n            const data = response.data\r\n            this.HistoryList = data.reverse()\r\n          } else {\r\n            this.HistoryList = []\r\n          }\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async check_answer(itemIndex, indexChild) {\r\n      var jobList = this.jobList\r\n      //console.log(itemIndex)\r\n      jobList.forEach((val, key) => {\r\n        if (key == itemIndex) {\r\n          val.is_check = 1;\r\n          val.optionsArray.forEach((child, index) => {\r\n            if (indexChild == index) {\r\n              child.is_check = 1\r\n            } else {\r\n              child.is_check = 0\r\n            }\r\n          });\r\n        }\r\n      })\r\n      var has_answer = 0\r\n      jobList.forEach(val => {\r\n        val.optionsArray.forEach(child => {\r\n          if (child.is_check == 1) {\r\n            has_answer++\r\n          }\r\n        });\r\n\r\n      })\r\n      this.jobList = jobList\r\n      this.has_answer = has_answer\r\n    },\r\n    async change_card() {\r\n      this.show = !this.show\r\n      // //console.log(this.jobList)\r\n    },\r\n    async test() {\r\n      var JobList = this.jobList;\r\n      var submit_data = [];\r\n      const user = JSON.parse(localStorage.getItem('user'))\r\n      JobList.forEach((item) => {\r\n        var user_answer = ''; // 用户选择的答案\r\n        var is_right = 0;\r\n        if (item.type_id == 1) {\r\n          item.optionsArray.forEach((child) => {\r\n            if (child.is_check == 1) {\r\n              user_answer = child.label; // 保存用户选择的答案\r\n              if (item.options_answer === child.label) {\r\n                is_right = 1; // 设置正确答案标记\r\n              }\r\n            }\r\n          });\r\n          submit_data.push({\r\n            user_id: user.sid,\r\n            job_id: item.id,\r\n            answer: user_answer, // 使用用户选择的答案\r\n            is_right: is_right,\r\n            resource_id: item.resource_id\r\n          });\r\n        } else if (item.type_id == 2) {\r\n          item.optionsArray.forEach((child, childindex) => {\r\n            var answer = child.title.split('&'); // 将标准答案分割成数组\r\n            var check_res = answer.includes(this.insertWordAnswers[item.id][childindex]); // 检查用户答案是否在标准答案数组中\r\n            if (check_res) {\r\n              is_right = 1; // 设置正确答案标记\r\n            }\r\n\r\n            submit_data.push({\r\n              user_id: user.sid,\r\n              job_id: item.id,\r\n              type_id: item.type_id,\r\n              lable: childindex + 1,\r\n              answer: this.insertWordAnswers[item.id][childindex], // 使用用户填写的答案\r\n              is_right: is_right,\r\n              resource_id: item.resource_id\r\n            });\r\n          })\r\n\r\n        }\r\n\r\n      });\r\n\r\n      //console.log(submit_data);\r\n    },\r\n    async input_answer(job_id, inputIndex, index) {\r\n      //console.log(job_id)\r\n      //console.log(inputIndex)\r\n      this.caninput = true\r\n      this.this_job_id = job_id\r\n      this.this_inputIndex = inputIndex\r\n      this.my_insert_word = ''\r\n      this.now_index = index\r\n      // 确保更新视图\r\n      this.$forceUpdate();\r\n    },\r\n    async cancel_caninput() {\r\n      this.insertWordAnswers[this.this_job_id][this.this_inputIndex] = ''\r\n      this.caninput = false\r\n    },\r\n    async change_caninput() {\r\n      this.caninput = false\r\n      this.jobList[this.now_index].is_check = 1\r\n      this.has_answer = this.has_answer + 1\r\n      // 确保更新视图\r\n      this.$forceUpdate();\r\n    },\r\n    async select(index) {\r\n      this.jobList[index].is_check = 1\r\n      this.has_answer = this.has_answer + 1\r\n    },\r\n    async my_insert() {\r\n      this.insertWordAnswers[this.this_job_id][this.this_inputIndex] = this.my_insert_word\r\n    },\r\n    async to_submit() {\r\n\r\n\r\n      var submit_data = [];\r\n      const user = JSON.parse(localStorage.getItem('user'))\r\n      submit_data.push({\r\n        user_id: user.sid,\r\n        job_id: 0,\r\n        type_id: 999,\r\n        answer: '', // 使用用户选择的答案\r\n        is_right: 1,\r\n        resource_id: this.resources_id\r\n      });\r\n\r\n      submit_data = JSON.stringify(submit_data)\r\n      const response = await submitData({\r\n        params: submit_data\r\n      })\r\n      if (response.code == 100) {\r\n        const resp = await updateUserStudy({ id: this.log_id })\r\n        if (resp.code == 100) {\r\n          this.$message({\r\n            message: '学习完成',\r\n            center: true\r\n          })\r\n          history.back()\r\n        }\r\n      }\r\n    },\r\n    async audioPlay() {\r\n      this.audio_status = 2\r\n      this.$refs.audioPlayer.play();\r\n    },\r\n    async audioPause() {\r\n      this.$refs.audioPlayer.pause();\r\n      this.audio_status = 1\r\n    },\r\n    async onAudioEnded() {\r\n      if (this.jobList.length == 0) {\r\n        this.canread = true\r\n        // this.sendCode()\r\n      }\r\n      //  this.canread = true\r\n    },\r\n    updateTime(event) {\r\n      const audio = event.target;\r\n      this.currentTime = this.formatTime(audio.currentTime);\r\n      //console.log(audio.currentTime)\r\n      //console.log(audio.duration)\r\n      this.percentage = Math.floor((audio.currentTime / audio.duration) * 100);\r\n    },\r\n    loadMetadata(event) {\r\n      const audio = event.target;\r\n      this.duration = this.formatTime(audio.duration);\r\n    },\r\n    canPlay() {\r\n      //console.log('Audio can play through.');\r\n    },\r\n    formatTime(seconds) {\r\n      const m = Math.floor(seconds / 60) % 60;\r\n      const s = Math.floor(seconds) % 60;\r\n      return `${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;\r\n    },\r\n\r\n    // 解析字符串，生成文本和输入框的块数组\r\n    parsedContent(str, index_id) {\r\n      const chunks = [];\r\n      let lastIndex = 0;\r\n      // str = 'ize the eggs, reproduction is left not to nature but to the process of artificial insemination._(1)__(2)__(3)__(4)__(5)__(6)__(7)_</p >'\r\n      // const regex1 = /__（(\\d+)）__/g;\r\n      str = str.replace(/__（/g, '_(');\r\n      str = str.replace(/）__/g, ')_');\r\n      // const regex = /_\\((\\d+)\\)_+/g;\r\n      const regex = /_\\((\\d+)\\)_+/g;\r\n      let match;\r\n\r\n      // 移除 HTML 标签\r\n      str = str.replace(/<\\/?[^>]+(>|$)/g, \"\"); // 去除 HTML 标签\r\n      // 逐个匹配字符串中的填空占位符\r\n      while ((match = regex.exec(str)) !== null) {\r\n        const inputIndex = parseInt(match[1], 10) - 1;\r\n\r\n        // 处理占位符之前的文本部分\r\n        if (match.index > lastIndex) {\r\n          const textChunk = str.slice(lastIndex, match.index);\r\n          chunks.push({ isInput: false, text: textChunk });\r\n        }\r\n\r\n        // 添加输入框\r\n        chunks.push({ isInput: true, inputIndex });\r\n\r\n        lastIndex = regex.lastIndex;\r\n      }\r\n\r\n      // 处理末尾的文本部分\r\n      if (lastIndex < str.length) {\r\n        const textChunk = str.slice(lastIndex);\r\n        chunks.push({ isInput: false, text: textChunk });\r\n      }\r\n\r\n      // 初始化对应的 insertWordAnswers 数组\r\n      if (!this.insertWordAnswers[index_id]) {\r\n        this.$set(this.insertWordAnswers, index_id, []);\r\n      }\r\n      // 确保更新视图\r\n      this.$forceUpdate();\r\n      return chunks;\r\n    },\r\n    async saveAccessLog() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await saveAccessLog({ sid: user.sid, res_id: this.resources_id })\r\n          if (response.code == 100) {\r\n            // this.getJobList()\r\n            // this.getHistoryList()\r\n            // this.dialog_show = true\r\n            if (response.data == 2) {\r\n              const res1 = await getHistoryList({ sid: user.sid, resource_id: this.resources_id })\r\n              if (res1.data.length != []) {\r\n                this.dialog_show = true\r\n                this.getJobList()\r\n                this.getHistoryList()\r\n                return\r\n              }\r\n              this.dialog_show = false\r\n              const res = await createCaptcha({ sid: user.sid })\r\n              if (res.code == 100) {\r\n                this.imageBase64 = 'data:image/png;base64,' + res.data.imageBase64\r\n              }\r\n            } else {\r\n              this.dialog_show = true\r\n              this.getJobList()\r\n              this.getHistoryList()\r\n            }\r\n          }\r\n          this.$forceUpdate();\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async checkCaptcha() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await checkCaptcha({ sid: user.sid, captchaCode: this.Verify })\r\n          if (response.code == 100) {\r\n            if (response.data == 1) {\r\n              this.dialog_show = true\r\n              this.getJobList()\r\n              this.getHistoryList()\r\n            } else {\r\n              const res = await createCaptcha({ sid: user.sid })\r\n              if (res.code == 100) {\r\n                this.imageBase64 = 'data:image/png;base64,' + res.data.imageBase64\r\n              }\r\n              this.$forceUpdate();\r\n            }\r\n          }\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n  },\r\n  mounted() {\r\n    // 在组件挂载后立即获取任务数据\r\n    // 在组件挂载后立即获取任务数据\r\n    this.log_id = this.$route.query.log_id;\r\n    this.resources_id = this.$route.query.resources_id;\r\n    this.saveAccessLog()\r\n  }\r\n}\r\n</script>\r\n<style scoped>\r\n.video-box {\r\n  width: 100vw;\r\n  height: 251px;\r\n  /* padding-top: 39px; */\r\n  background-color: #000;\r\n  position: sticky;\r\n\r\n}\r\n\r\n.video-box>video {\r\n  width: 100vw;\r\n  height: 251px;\r\n}\r\n\r\n\r\n.last-box {\r\n  width: 330px;\r\n  height: 68px;\r\n  background: #F2F2F4;\r\n  border-radius: 10px 10px 10px 10px;\r\n  margin: 0 auto;\r\n}\r\n\r\n.last-title {\r\n  width: 40px;\r\n  height: 20px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin: 13px 9px 13px 17px;\r\n  padding-right: 9px;\r\n  border-right: 1px solid #B8B8B8;\r\n  font-size: 16px;\r\n}\r\n\r\n.last-count {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin: 13px 9px 13px 0px;\r\n  font-size: 12px;\r\n  color: #656565;\r\n}\r\n\r\n.last-right {\r\n  /* width: 130px; */\r\n  vertical-align: top;\r\n  margin: 13px 9px 13px 0px;\r\n  display: inline-block;\r\n  font-size: 12px;\r\n  color: #656565;\r\n  text-align: right;\r\n}\r\n\r\n.all-last {\r\n  width: 120px;\r\n  height: 20px;\r\n  margin-bottom: 6px;\r\n}\r\n\r\n/* .last-time {} */\r\n\r\n.praxis-item {\r\n  width: 90%;\r\n  height: auto;\r\n  margin: 0 auto;\r\n  text-align: left;\r\n}\r\n\r\n.praxis {\r\n  padding-bottom: 200px;\r\n  text-align: left;\r\n}\r\n\r\n.praxis-title {\r\n  font-size: 14px;\r\n  color: #030303;\r\n  padding: 35px 0 10px 0;\r\n  /* width: 50px; */\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.custom-image .van-empty__image {\r\n  width: 90px;\r\n  height: 90px;\r\n}\r\n\r\n.praxis-desc {\r\n  font-size: 14px;\r\n  width: 90%;\r\n  height: auto;\r\n  padding: 10px 0;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  font-weight: normal;\r\n}\r\n\r\n.praxis-info {\r\n  width: 90%;\r\n  height: auto;\r\n  background: #FFFFFF;\r\n  white-space: normal;\r\n  /* 正常的空白处理，允许换行 */\r\n  word-break: keep-all;\r\n  /* 确保单词不被截断 */\r\n  overflow-wrap: anywhere;\r\n  /* 单词太长时允许换行，不会强制截断 */\r\n}\r\n\r\n.answer {\r\n  width: 100%;\r\n  height: 55px;\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n}\r\n\r\n.answer-title {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 50px;\r\n  height: 35px;\r\n  background-color: lightgray;\r\n  border-radius: 35px;\r\n  line-height: 35px;\r\n  text-align: center;\r\n}\r\n\r\n.checked {\r\n  background: linear-gradient(180deg, #4499EE 0%, #9CE4FF 100%);\r\n}\r\n\r\n.answer-desc {\r\n  margin-left: 10px;\r\n  font-size: 14px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 380px;\r\n}\r\n\r\n.wrap-text {\r\n  width: 90%;\r\n  height: auto;\r\n  margin: 0 auto;\r\n  text-align: left;\r\n  padding: 10px 0;\r\n}\r\n\r\n.praxis-bottom {\r\n  width: 100%;\r\n  height: 66px;\r\n  background: #FFFFFF;\r\n  box-shadow: 0px -2px 6px 1px rgba(80, 143, 206, 0.1);\r\n  border-radius: 0px;\r\n  position: fixed;\r\n  bottom: 60px;\r\n}\r\n\r\n.new-audio {\r\n  width: 50px;\r\n  height: 50px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  padding-left: 15px;\r\n}\r\n\r\n.start-img {\r\n  width: 50px;\r\n  height: 50px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n\r\n}\r\n\r\n.audio-info {\r\n  width: 80%;\r\n  height: 50px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  line-height: 50px;\r\n  text-align: left;\r\n  color: #979797;\r\n  font-size: 12px;\r\n}\r\n\r\n.progress {\r\n  width: 70%;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  padding-top: 22px;\r\n}\r\n\r\n.now-time {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  line-height: 50px;\r\n}\r\n\r\n.answer-has {\r\n  width: 325px;\r\n  height: 60px;\r\n  padding-left: 25x;\r\n}\r\n\r\n.jindu {\r\n  width: 185px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  line-height: 60px;\r\n  font-size: 14px;\r\n  color: #979797;\r\n  padding-left: 10px;\r\n  /* text-align: left; */\r\n  /* margin-right: 100px; */\r\n\r\n}\r\n\r\n.btn-ok-cn {\r\n  margin-top: 12px;\r\n  width: 108px;\r\n  height: 36px;\r\n  line-height: 36px;\r\n  background: #003F88;\r\n  border-radius: 23px;\r\n  /* margin: 0 auto; */\r\n  text-align: center;\r\n  color: #FFF;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.card-title {\r\n  width: 100vw;\r\n  height: 75px;\r\n  text-align: center;\r\n  line-height: 75px;\r\n  border-bottom: #E4E4E4 1px solid;\r\n  margin: 0 auto;\r\n  color: #000000;\r\n  font-weight: bold;\r\n  font-size: 16px;\r\n}\r\n\r\n.main-answer-card {\r\n  padding: 30px 40px 80px 40px;\r\n  text-align: left;\r\n}\r\n\r\n.card-item {\r\n  width: 34px;\r\n  height: 34px;\r\n  background: linear-gradient(180deg, #4499EE 0%, #9CE4FF 100%);\r\n  border-radius: 34px;\r\n  line-height: 34px;\r\n  text-align: center;\r\n  color: #FFF;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin: 10px 5px;\r\n}\r\n\r\n.card-item-empty {\r\n  background: #CBCBCB;\r\n}\r\n\r\n.btn-cancel {\r\n  position: absolute;\r\n  top: 26px;\r\n  right: 25px;\r\n}\r\n\r\n.btn-ok {\r\n  width: 288px;\r\n  height: 45px;\r\n  background: #003F88;\r\n  border-radius: 23px;\r\n  margin: 0 auto;\r\n  line-height: 45px;\r\n  text-align: center;\r\n  color: #FFF;\r\n  margin: 0 auto;\r\n}\r\n\r\n.btn-ok-no {\r\n  width: 288px;\r\n  height: 45px;\r\n  background: lightgrey;\r\n  border-radius: 23px;\r\n  margin: 0 auto;\r\n  line-height: 45px;\r\n  text-align: center;\r\n  color: #FFF;\r\n  margin: 0 auto;\r\n}\r\n\r\n.input-answer {\r\n  border: none;\r\n  border-bottom: 1px solid gray;\r\n  font-size: 14px;\r\n}\r\n\r\n.input-answer-box {\r\n  width: auto;\r\n  display: inline;\r\n  line-height: 30px;\r\n  text-align: left;\r\n}\r\n\r\n.input_new {\r\n  width: 80%;\r\n  height: 200px;\r\n  padding-left: 20px;\r\n}\r\n\r\n.input_new>input {\r\n  width: 50%;\r\n  margin: 50px 20px;\r\n  padding: 10px 20px;\r\n}\r\n\r\n.Verify-box {\r\n  /* width: 300px; */\r\n  margin: 20px auto;\r\n  text-align: center;\r\n}\r\n\r\n.input-box {\r\n  width: 300px;\r\n  margin: 20px auto;\r\n  /* padding-left: 6px; */\r\n}\r\n\r\n.input-box>input {\r\n  height: 30px;\r\n  padding: 5px;\r\n}\r\n\r\n.btn-Verify {\r\n  width: 288px;\r\n  height: 45px;\r\n  background: #003F88;\r\n  border-radius: 23px;\r\n  color: #FFF;\r\n  margin: 32px auto 19px auto;\r\n  font-size: 14px;\r\n  text-align: center;\r\n  line-height: 45px;\r\n}\r\n\r\n.word-popup {\r\n  width: 100vw;\r\n  height: 300px;\r\n  background-size: cover;\r\n  position: fixed;\r\n  bottom: 0;\r\n}\r\n\r\n.collect {\r\n  width: 85vw;\r\n  margin-bottom: 20px;\r\n}\r\n\r\n.word-box {\r\n  width: 90%;\r\n  margin: 0 auto;\r\n}\r\n\r\n.word-item {\r\n  width: 100%;\r\n  border-bottom: 1px solid #E4E4E4;\r\n  padding-bottom: 10px;\r\n}\r\n\r\n.van-overlay {\r\n  background-color: rgba(0, 0, 0, 20%) !important\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Praxis.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Praxis.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Praxis.vue?vue&type=template&id=0beee7c4&scoped=true\"\nimport script from \"./Praxis.vue?vue&type=script&lang=js\"\nexport * from \"./Praxis.vue?vue&type=script&lang=js\"\nimport style0 from \"./Praxis.vue?vue&type=style&index=0&id=0beee7c4&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"0beee7c4\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"praxis\"},[_c('van-nav-bar',{attrs:{\"title\":_vm.resources.resources.name,\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('van-tabs',{attrs:{\"color\":\"#6FDBFF\"},model:{value:(_vm.activeTitle),callback:function ($$v) {_vm.activeTitle=$$v},expression:\"activeTitle\"}},[_c('van-tab',{scopedSlots:_vm._u([{key:\"title\",fn:function(){return [_vm._v(\"做题 \")]},proxy:true}])},[_vm._l((_vm.jobList),function(item,index){return _c('div',{key:index},[_c('div',{staticClass:\"praxis-item\"},[_c('div',{staticClass:\"praxis-title\"},[_vm._v(\"题\"+_vm._s(index + 1))]),(item.type_id == 1 || item.type_id == 4)?_c('div',{staticClass:\"praxis-desc\"},[_c('div',{staticClass:\"wrap-text\",domProps:{\"innerHTML\":_vm._s(item.title)}})]):_vm._e(),(item.type_id == 1)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.optionsArray),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"answer\"},[_c('div',{staticClass:\"answer-title\",class:{\n                                'answer-title': true,\n                                'checked': item.user_answer == itemChild.label,\n                                'right-checked': item.options_answer == itemChild.label\n                            },on:{\"click\":function($event){return _vm.check_answer(index, indexChild)}}},[_vm._v(_vm._s(itemChild.label))]),_c('div',{staticClass:\"answer-desc\"},[_vm._v(_vm._s(itemChild.title))])])}),0):_vm._e(),(item.type_id == 3 || item.type_id == 6)?_c('div',{staticClass:\"praxis-info\"},[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(item.title)}}),_c('div',{staticStyle:{\"display\":\"inline\"}},[_vm._v(\"你的答案是：\"+_vm._s(item.user_answer))])]):_vm._e(),(item.type_id == 4)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.optionsArray),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"answer\"},[_c('div',{staticClass:\"answer-title\",class:{\n                                'answer-title': true,\n                                'checked': !_vm.arrayContains(itemChild.label, item.options_answer),\n                                'right-checked': _vm.arrayContains(itemChild.label, item.options_answer)\n                            },on:{\"click\":function($event){return _vm.check_answer(index, indexChild)}}},[_vm._v(_vm._s(itemChild.label))]),_c('div',{staticClass:\"answer-desc\"},[_vm._v(_vm._s(itemChild.title))])])}),0):_vm._e(),(item.type_id == 2)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.title),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"input-answer-box\"},[(!itemChild.isInput)?_c('span',[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(itemChild.text)}})]):_c('span',{staticStyle:{\"border-bottom\":\"1px solid #54a4ee\",\"padding\":\"0 10px 0 0\"}},[(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 1)?_c('span',{staticStyle:{\"color\":\"#3CC57C\"}},[_vm._v(\" \"+_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer)+\" \")]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer)?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" \"+_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer)+\" \")]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer == '')?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" 未作 \")]):_vm._e()])])}),0):_vm._e(),(item.type_id == 5)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.title),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"input-answer-box\"},[(!itemChild.isInput)?_c('span',[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(itemChild.text)}})]):_c('span',{staticStyle:{\"border-bottom\":\"1px solid #54a4ee\",\"padding\":\"0 10px 0 0\"}},[(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 1)?_c('span',{staticStyle:{\"color\":\"#3CC57C\"}},[_vm._v(_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer))]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer)?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" \"+_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer)+\" \")]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer == '')?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" 未作 \")]):_vm._e()])])}),0):_vm._e(),(item.type_id == 7 || item.type_id == 8)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.title),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"input-answer-box\"},[(!itemChild.isInput)?_c('span',[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(itemChild.text)}})]):_c('span',{staticStyle:{\"border-bottom\":\"1px solid #54a4ee\",\"padding\":\"0 10px 0 0\"}},[(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 1)?_c('span',{staticStyle:{\"color\":\"#3CC57C\"}},[_vm._v(_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer))]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer)?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" \"+_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer)+\" \")]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer == '')?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" 未作 \")]):_vm._e()])])}),0):_vm._e(),(item.type_id == 1)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是：\"+_vm._s(item.options_answer)+\" \"),_c('br'),_vm._v(\" 你的答案是：\"+_vm._s(item.user_answer)+\" \")]):_vm._e(),(item.type_id == 2)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是： \"),_c('br'),_vm._l((item.right_answer),function(a,b){return _c('span',{key:b,staticClass:\"answer-item\"},[_vm._v(\"(\"+_vm._s(b + 1)+\")  \"+_vm._s(a)+\"   \")])}),_c('br'),_vm._v(\" 你的答案是：\"),_c('br'),_vm._l((item.user_answer),function(ua,ub){return _c('span',{key:ub,staticClass:\"answer-item\"},[_vm._v(\" (\"+_vm._s(ub + 1)+\")  \"+_vm._s(ua)+\"   \")])})],2):_vm._e(),(item.type_id == 4)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是：\"),_c('br'),_c('span',[_vm._v(\" \"+_vm._s(item.options_answer)+\" \")]),_c('br'),_vm._v(\"你的答案是：\"),_c('br'),_c('span',[_vm._v(_vm._s(item.user_answer)+\" \")])]):_vm._e(),(item.type_id == 5)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是：\"),_c('br'),_vm._l((item.options_answer),function(a,b){return _c('span',{key:b,staticClass:\"answer-item\"},[_vm._v(\" (\"+_vm._s(b + 1)+\")  \"+_vm._s(a.title)+\"   \")])}),_c('br'),_vm._v(\"你的答案是：\"),_c('br'),_vm._l((item.user_answer),function(ua,ub){return _c('span',{key:ub,staticClass:\"answer-item\"},[_vm._v(\"(\"+_vm._s(ub + 1)+\")  \"+_vm._s(ua)+\"   \")])})],2):_vm._e(),(item.type_id == 7 || item.type_id == 8)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是：\"),_c('br'),_vm._l((item.options_answer),function(a,b){return _c('span',{key:b,staticClass:\"answer-item\"},[_vm._v(\" (\"+_vm._s(b + 1)+\")  \"+_vm._s(a.title)+\"   \")])}),_c('br'),_vm._v(\"你的答案是：\"),_c('br'),_vm._l((item.user_answer),function(ua,ub){return _c('span',{key:ub,staticClass:\"answer-item\"},[_vm._v(\"(\"+_vm._s(ub + 1)+\")  \"+_vm._s(ua)+\"   \")])})],2):_vm._e()])])}),_c('div',{staticClass:\"wall\"})],2),_c('van-tab',{scopedSlots:_vm._u([{key:\"title\",fn:function(){return [_vm._v(\"原文 \")]},proxy:true}])},[_c('div',{staticClass:\"wrap-text\"},[_c('ArticleParser',{attrs:{\"content\":_vm.resources.resources.content},on:{\"word-click\":_vm.onWordClick}})],1)])],1),_c('div',{staticClass:\"wall-report\"},[_vm._v(\"答题报告\")]),_c('div',{staticClass:\"answer-box\"},[_c('div',{staticClass:\"box-top\"},[_c('div',{staticClass:\"right-num\"},[_vm._v(_vm._s(_vm.answer_info.rightCountTotal))]),_c('div',{staticClass:\"total-num\"},[_vm._v(\"/\"+_vm._s(_vm.answer_info.countTotal))]),_c('div',{staticClass:\"report-desc\"},[_vm._v(\"共\"+_vm._s(_vm.answer_info.countTotal)+\"题，答对\"+_vm._s(_vm.answer_info.rightCountTotal)+\"题\")])]),_c('div',{staticClass:\"bottom-line\"}),_c('div',{staticClass:\"second-box\"},[_c('div',{staticClass:\"submit-time\"},[_vm._v(\"交卷时间：\"+_vm._s(_vm.jobAnswerList1[0].create_time))]),_c('div',{staticClass:\"result\"},[_vm._v(\"正确率：\"+_vm._s(_vm.right_bfb)+\"%\")])])]),_c('RelList',{attrs:{\"resource_id\":_vm.resources_id}}),_c('div',{staticClass:\"praxis-bottom\"},[_c('div',{staticClass:\"new-audio\"},[_c('audio',{ref:\"audioPlayer\",attrs:{\"src\":_vm.src},on:{\"timeupdate\":_vm.updateTime,\"loadedmetadata\":_vm.loadMetadata,\"canplay\":_vm.canPlay}}),(_vm.audio_status == 1)?_c('img',{staticClass:\"start-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/start.png\",\"mode\":\"\"},on:{\"click\":_vm.audioPlay}}):_vm._e(),(_vm.audio_status == 2)?_c('img',{staticClass:\"start-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/zanting.png\",\"mode\":\"\"},on:{\"click\":_vm.audioPause}}):_vm._e()]),_c('div',{staticClass:\"audio-info\"},[_c('div',{staticClass:\"progress\"},[_c('van-progress',{attrs:{\"percentage\":_vm.percentage,\"track-color\":\"#E3E3E3\",\"color\":\"#6EE6FF\",\"show-pivot\":false}})],1),_c('div',{staticClass:\"now-time\"},[_vm._v(_vm._s(_vm.currentTime))])])]),_c('van-action-sheet',{staticStyle:{\"min-height\":\"300px\",\"background-color\":\"aliceblue\",\"z-index\":\"9999\"},attrs:{\"title\":\"单词释义\"},on:{\"close\":_vm.change_praxis_show,\"click-overlay\":_vm.change_praxis_show},model:{value:(_vm.word_show),callback:function ($$v) {_vm.word_show=$$v},expression:\"word_show\"}},[_c('div',{staticClass:\"collect\"},[_c('div',{staticStyle:{\"text-align\":\"left\",\"display\":\"inline-block\",\"vertical-align\":\"top\",\"width\":\"40%\",\"padding-left\":\"10px\",\"font-size\":\"24px\",\"font-weight\":\"500\"}},[_vm._v(\" \"+_vm._s(_vm.word))]),_c('div',{staticClass:\"collect-icon\",staticStyle:{\"text-align\":\"right\",\"display\":\"inline-block\",\"vertical-align\":\"top\",\"width\":\"50%\"}},[(_vm.scColor == false)?_c('van-icon',{attrs:{\"name\":\"star\",\"size\":\"30\",\"color\":\"#D9DCE3\"},on:{\"click\":_vm.add_word}}):_c('van-icon',{attrs:{\"name\":\"star\",\"size\":\"30\",\"color\":\"orange\"}})],1)]),_c('div',{staticClass:\"word-box\"},_vm._l((_vm.wordDetail),function(item,index){return _c('div',{key:index,staticClass:\"word-item\"},[_c('div',{staticClass:\"item-meaning_CH\"},[_vm._v(_vm._s(item.type)+\"  :  \"+_vm._s(item.meaning_CH))])])}),0)])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"about-send\"},[_c('div',{staticClass:\"model-title\"},[_vm._v(\"相关推荐\")]),_vm._l((_vm.RelList),function(item,index){return _c('div',{key:index,staticClass:\"about-item\",on:{\"click\":function($event){return _vm.to_praxis(item)}}},[_c('img',{staticClass:\"item-cover\",attrs:{\"src\":item.cover,\"mode\":\"aspectFill\"}}),_c('div',{staticClass:\"item-info\"},[_c('div',{staticClass:\"info-title\"},[(item.category_id == 1)?_c('span',[_vm._v(\"[听力]\")]):_vm._e(),(item.category_id == 2)?_c('span',[_vm._v(\"[阅读]\")]):_vm._e(),(item.category_id == 4)?_c('span',[_vm._v(\"[写作]\")]):_vm._e(),_vm._v(\" \"+_vm._s(item.name)+\" \")]),_c('div',{staticClass:\"info-time\"},[_vm._v(_vm._s(item.create_time))])]),(item.status == 1)?_c('div',{staticClass:\"con-to-study\"},[_vm._v(\"继续学习\")]):_vm._e(),(item.status == 2)?_c('div',{staticClass:\"con-to-study\"},[_vm._v(\"已完成\")]):_vm._e(),(item.status == 0)?_c('div',{staticClass:\"con-to-study\"},[_vm._v(\"进入学习\")]):_vm._e()])})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- src/layouts/TabBarLayout.vue -->\r\n\r\n<template>\r\n    <div class=\"about-send\">\r\n        <div class=\"model-title\">相关推荐</div>\r\n        <!-- <div class=\"model-more\" bind:tap=\"to_study_list\" data-index=\"1\">全部</div> -->\r\n        <!-- <div class=\"model-icon\" bind:tap=\"to_study_list\" data-index=\"1\"><van-icon name=\"arrow\" color=\"#606060\" /></div> -->\r\n        <div class=\"about-item\" v-for=\"(item, index) in RelList\" :key=\"index\" @click=\"to_praxis(item)\">\r\n            <img :src=\"item.cover\" mode=\"aspectFill\" class=\"item-cover\" />\r\n            <div class=\"item-info\">\r\n                <div class=\"info-title\">\r\n                    <span v-if=\"item.category_id == 1\">[听力]</span>\r\n                    <span v-if=\"item.category_id == 2\">[阅读]</span>\r\n                    <span v-if=\"item.category_id == 4\">[写作]</span>\r\n                    {{ item.name }}\r\n                </div>\r\n                <div class=\"info-time\">{{ item.create_time }}</div>\r\n            </div>\r\n            <div class=\"con-to-study\" v-if=\"item.status == 1\">继续学习</div>\r\n            <div class=\"con-to-study\" v-if=\"item.status == 2\">已完成</div>\r\n            <div class=\"con-to-study\" v-if=\"item.status == 0\">进入学习</div>\r\n        </div>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\nimport { getRelList, saveUserStudyResource } from '@/api/user'\r\nexport default {\r\n    name: 'RelList',\r\n    props: {\r\n        resource_id: {\r\n            type: String,\r\n            reqired: true\r\n        }\r\n    },\r\n    data() {\r\n        return {\r\n            RelList: [],\r\n            active: this.$route.path, // 基于当前路径设置激活的路由,\r\n        }\r\n    },\r\n    watch: {\r\n        '$route.path': function (newPath) {\r\n            this.active = newPath; // 路由变化时更新激活的路由\r\n        }\r\n    },\r\n    methods: {\r\n        async to_study_list(index) {\r\n            this.$router.push({ name: 'StudyList', query: { now_status: index } })\r\n        },\r\n        async getRelList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getRelList({ sid: user.sid, resource_id: this.resource_id })\r\n                    const data = response.data\r\n                    this.RelList = data\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async to_praxis(item) {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await saveUserStudyResource({ sid: user.sid, resource_id: item.id })\r\n                    if (response.code == 100) {\r\n                        if (item.category_id == 1) {\r\n                            this.$router.push({ name: 'Praxis', query: { log_id: response.data, resources_id: item.id } })\r\n                        }\r\n                        if (item.category_id == 2) {\r\n                            this.$router.push({ name: 'ReadPraxis', query: { log_id: response.data, resources_id: item.id } })\r\n                        }\r\n                        if (item.category_id == 4) {\r\n                            this.$router.push({ name: 'WritePraxis', query: { log_id: response.data, resources_id: item.id } })\r\n                        }\r\n                    }\r\n\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        }\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        this.getRelList()\r\n    }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.tab-bar-layout {\r\n    position: relative;\r\n    height: 100%;\r\n}\r\n\r\n.about-send {\r\n    width: 330px;\r\n    height: auto;\r\n    margin: 28px auto 0 auto;\r\n    text-align: left;\r\n}\r\n\r\n.title {\r\n    font-size: 16px;\r\n    padding-bottom: 7px;\r\n}\r\n\r\n.about-item {\r\n    width: 100%;\r\n    height: 80px;\r\n    background: #FFFFFF;\r\n    box-shadow: 0px 2px 10px 1px rgba(80, 143, 206, 0.1);\r\n    border-radius: 20px;\r\n    margin: 10px 0;\r\n}\r\n\r\n.item-cover {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 58px;\r\n    height: 58px;\r\n    border-radius: 10px;\r\n    margin: 10px 6px 0 12px;\r\n}\r\n\r\n.item-info {\r\n    width: 180px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-top: 21px;\r\n}\r\n\r\n.info-title {\r\n    font-size: 12px;\r\n    font-weight: bold;\r\n    line-height: 20px;\r\n    overflow: hidden;\r\n    text-overflow: ellipsis;\r\n    white-space: nowrap;\r\n}\r\n\r\n.info-time {\r\n    color: #979797;\r\n    font-size: 12px;\r\n    padding-top: 15px;\r\n}\r\n\r\n.con-to-study {\r\n    width: 60px;\r\n    height: 85px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 85px;\r\n    font-size: 12px;\r\n    color: #003F88;\r\n    text-align: center;\r\n}\r\n\r\n.model-more {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 200px;\r\n    text-align: right;\r\n    font-size: 12px;\r\n}\r\n\r\n.model-icon {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.model-title {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 110px;\r\n    text-align: left;\r\n    font-size: 16px;\r\n}\r\n\r\n/* 可以在这里添加 TabBar 的样式 */\r\n/* 可以在这里添加 TabBar 的样式 */\r\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RelList.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RelList.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./RelList.vue?vue&type=template&id=35e50637&scoped=true\"\nimport script from \"./RelList.vue?vue&type=script&lang=js\"\nexport * from \"./RelList.vue?vue&type=script&lang=js\"\nimport style0 from \"./RelList.vue?vue&type=style&index=0&id=35e50637&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"35e50637\",\n  null\n  \n)\n\nexport default component.exports","<template>\r\n    <div class=\"praxis\">\r\n        <van-nav-bar :title=\"resources.resources.name\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <van-tabs v-model=\"activeTitle\" color=\"#6FDBFF\">\r\n            <van-tab>\r\n                <template #title>做题 </template>\r\n                <div v-for=\"(item, index) in jobList\" :key=\"index\">\r\n                    <div class=\"praxis-item\">\r\n                        <div class=\"praxis-title\">题{{ index + 1 }}</div>\r\n                        <div class=\"praxis-desc\" v-if=\"item.type_id == 1 || item.type_id == 4\">\r\n                            <div class=\"wrap-text\" v-html=\"item.title\"></div>\r\n                        </div>\r\n                        <div class=\"praxis-info\" v-if=\"item.type_id == 1\">\r\n                            <div class=\"answer\" v-for=\"(itemChild, indexChild) in item.optionsArray\" :key=\"indexChild\">\r\n                                <div :class=\"{\r\n                                    'answer-title': true,\r\n                                    'checked': item.user_answer == itemChild.label,\r\n                                    'right-checked': item.options_answer == itemChild.label\r\n                                }\" class=\"answer-title\" @click=\"check_answer(index, indexChild)\">{{ itemChild.label\r\n                                    }}</div>\r\n                                <div class=\"answer-desc\">{{ itemChild.title }}</div>\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"praxis-info\" v-if=\"item.type_id == 3 || item.type_id == 6\">\r\n                            <div style=\"display: inline;\" v-html=\"item.title\"></div>\r\n                            <div style=\"display: inline;\">你的答案是：{{ item.user_answer }}</div>\r\n                        </div>\r\n                        <div class=\"praxis-info\" v-if=\"item.type_id == 4\">\r\n                            <div class=\"answer\" v-for=\"(itemChild, indexChild) in item.optionsArray\" :key=\"indexChild\">\r\n                                <div :class=\"{\r\n                                    'answer-title': true,\r\n                                    'checked': !arrayContains(itemChild.label, item.options_answer),\r\n                                    'right-checked': arrayContains(itemChild.label, item.options_answer)\r\n                                }\" class=\"answer-title\" @click=\"check_answer(index, indexChild)\">{{ itemChild.label\r\n                                    }}</div>\r\n                                <div class=\"answer-desc\">{{ itemChild.title }}</div>\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"praxis-info\" v-if=\"item.type_id == 2\">\r\n                            <div class=\"input-answer-box\" v-for=\"(itemChild, indexChild) in item.title\"\r\n                                :key=\"indexChild\">\r\n                                <!-- 如果是文本块，直接显示 -->\r\n                                <span v-if=\"!itemChild.isInput\">\r\n                                    <div style=\"display: inline;\" v-html=\"itemChild.text\"></div>\r\n                                </span>\r\n                                <span v-else style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\">\r\n                                    <span style=\"color: #3CC57C;\"\r\n                                        v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 1\">\r\n                                        {{ jobAnswerList[index][itemChild.inputIndex1].answer }}\r\n                                    </span>\r\n                                    <span\r\n                                        v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer\"\r\n                                        style=\"color: red;\">\r\n                                        {{ jobAnswerList[index][itemChild.inputIndex1].answer }}\r\n                                    </span>\r\n                                    <span\r\n                                        v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer == ''\"\r\n                                        style=\"color: red;\">\r\n                                        未作\r\n                                    </span>\r\n                                </span>\r\n                                <!-- 如果是输入框，动态生成\r\n                                <span style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\"\r\n                                    v-if=\"item.user_answer[itemChild.inputIndex] != ''\">\r\n                                    <span\r\n                                        :style=\"{ color: itemChild.inputIndex < jobAnswerList[index].length && jobAnswerList[index][itemChild.inputIndex].is_right == 1 ? '#3CC57C' : '#FF0000' }\">{{\r\n                                            item.user_answer[itemChild.inputIndex] }}</span>\r\n                                </span>\r\n                                <span style=\"border-bottom: 1px solid #54a4ee;color: #F85353;padding: 0 10px 0 0;\"\r\n                                    v-else>\r\n                                    未做\r\n                                </span> -->\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"praxis-info\" v-if=\"item.type_id == 5\">\r\n                            <div class=\"input-answer-box\" v-for=\"(itemChild, indexChild) in item.title\"\r\n                                :key=\"indexChild\">\r\n                                <!-- 如果是文本块，直接显示 -->\r\n                                <span v-if=\"!itemChild.isInput\">\r\n                                    <div style=\"display: inline;\" v-html=\"itemChild.text\"></div>\r\n                                </span>\r\n                                <span v-else style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\">\r\n                                    <span style=\"color: #3CC57C;\"\r\n                                        v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 1\">{{\r\n                                            jobAnswerList[index][itemChild.inputIndex1].answer }}</span>\r\n                                    <span\r\n                                        v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer\"\r\n                                        style=\"color: red;\">\r\n                                        {{ jobAnswerList[index][itemChild.inputIndex1].answer }}\r\n                                    </span>\r\n                                    <span\r\n                                        v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer == ''\"\r\n                                        style=\"color: red;\">\r\n                                        未作\r\n                                    </span>\r\n                                </span>\r\n                                <!-- 如果是输入框，动态生成\r\n                                <span style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\"\r\n                                    v-if=\"item.user_answer[itemChild.inputIndex] != ''\">\r\n                                    <span\r\n                                        :style=\"{ color: itemChild.inputIndex < jobAnswerList[index].length && jobAnswerList[index][itemChild.inputIndex].is_right ? '#3CC57C' : '#FF0000' }\">\r\n                                        {{ item.user_answer[itemChild.inputIndex] }}\r\n                                    </span>\r\n                                </span>\r\n                                <span style=\"border-bottom: 1px solid #54a4ee;color: #F85353;padding: 0 10px 0 0;\"\r\n                                    v-else>\r\n                                    未做\r\n                                </span> -->\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"praxis-info\" v-if=\"item.type_id == 7 || item.type_id == 8\">\r\n                            <div class=\"input-answer-box\" v-for=\"(itemChild, indexChild) in item.title\"\r\n                                :key=\"indexChild\">\r\n                                <!-- 如果是文本块，直接显示 -->\r\n                                <span v-if=\"!itemChild.isInput\">\r\n                                    <div style=\"display: inline;\" v-html=\"itemChild.text\"></div>\r\n                                </span>\r\n                                <span v-else style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\">\r\n                                    <span style=\"color: #3CC57C;\"\r\n                                        v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 1\">{{\r\n                                            jobAnswerList[index][itemChild.inputIndex1].answer }}</span>\r\n                                    <span\r\n                                        v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer\"\r\n                                        style=\"color: red;\">\r\n                                        {{ jobAnswerList[index][itemChild.inputIndex1].answer }}\r\n                                    </span>\r\n                                    <span\r\n                                        v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer == ''\"\r\n                                        style=\"color: red;\">\r\n                                        未作\r\n                                    </span>\r\n                                </span>\r\n                                <!-- 如果是输入框，动态生成\r\n                                <span style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\"\r\n                                    v-if=\"item.user_answer[itemChild.inputIndex] != ''\">\r\n                                    <span\r\n                                        :style=\"{ color: itemChild.inputIndex < jobAnswerList[index].length && jobAnswerList[index][itemChild.inputIndex].is_right ? '#3CC57C' : '#FF0000' }\">\r\n                                        {{ item.user_answer[itemChild.inputIndex] }}\r\n                                    </span>\r\n                                </span>\r\n                                <span style=\"border-bottom: 1px solid #54a4ee;color: orange;padding: 0 10px 0 0;\"\r\n                                    v-else>\r\n                                    未做\r\n                                </span> -->\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"answer-option\" v-if=\"item.type_id == 1\">正确答案是：{{ item.options_answer }} <br>\r\n                            你的答案是：{{\r\n                                item.user_answer }}\r\n                        </div>\r\n                        <div class=\"answer-option\" v-if=\"item.type_id == 2\">正确答案是：\r\n                            <br>\r\n                            <span v-for=\"(a, b) in item.right_answer\" :key=\"b\" class=\"answer-item\">({{\r\n                                b + 1 }})&nbsp;&nbsp;{{\r\n                                    a }}&nbsp;&nbsp;\r\n                            </span>\r\n                            <br>\r\n                            你的答案是：<br>\r\n                            <span v-for=\"(ua, ub) in item.user_answer\" :key=\"ub\" class=\"answer-item\">\r\n                                ({{ ub\r\n                                    + 1 }})&nbsp;&nbsp;{{ ua\r\n                                }}&nbsp;&nbsp;\r\n                            </span>\r\n                        </div>\r\n                        <div class=\"answer-option\" v-if=\"item.type_id == 4\">正确答案是：<br>\r\n                            <span>\r\n                                {{ item.options_answer }}\r\n                            </span>\r\n                            <br>你的答案是：<br>\r\n                            <span>{{\r\n                                item.user_answer }}\r\n                            </span>\r\n                        </div>\r\n                        <div class=\"answer-option\" v-if=\"item.type_id == 5\">正确答案是：<br>\r\n                            <span v-for=\"(a, b) in item.options_answer\" :key=\"b\" class=\"answer-item\">\r\n                                ({{ b + 1 }})&nbsp;&nbsp;{{\r\n                                    a.title }}&nbsp;&nbsp;\r\n                            </span><br>你的答案是：<br>\r\n                            <span v-for=\"(ua, ub) in item.user_answer\" :key=\"ub\" class=\"answer-item\">({{ ub + 1\r\n                                }})&nbsp;&nbsp;{{\r\n                                    ua }}&nbsp;&nbsp;\r\n                            </span>\r\n                        </div>\r\n                        <div class=\"answer-option\" v-if=\"item.type_id == 7 || item.type_id == 8\">正确答案是：<br>\r\n                            <span v-for=\"(a, b) in item.options_answer\" :key=\"b\" class=\"answer-item\">\r\n                                ({{ b + 1 }})&nbsp;&nbsp;{{\r\n                                    a.title }}&nbsp;&nbsp;\r\n                            </span><br>你的答案是：<br>\r\n                            <span v-for=\"(ua, ub) in item.user_answer\" :key=\"ub\" class=\"answer-item\">({{ ub + 1\r\n                                }})&nbsp;&nbsp;{{\r\n                                    ua }}&nbsp;&nbsp;\r\n                            </span>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                <div class=\"wall\"></div>\r\n\r\n            </van-tab>\r\n            <van-tab>\r\n                <template #title>原文 </template>\r\n                <div class=\"wrap-text\">\r\n                    <ArticleParser :content=\"resources.resources.content\" @word-click=\"onWordClick\" />\r\n                </div>\r\n            </van-tab>\r\n        </van-tabs>\r\n\r\n        <div class=\"wall-report\">答题报告</div>\r\n        <div class=\"answer-box\">\r\n            <div class=\"box-top\">\r\n                <div class=\"right-num\">{{ answer_info.rightCountTotal }}</div>\r\n                <div class=\"total-num\">/{{ answer_info.countTotal }}</div>\r\n                <div class=\"report-desc\">共{{ answer_info.countTotal }}题，答对{{ answer_info.rightCountTotal\r\n                    }}题</div>\r\n            </div>\r\n            <div class=\"bottom-line\"></div>\r\n            <div class=\"second-box\">\r\n                <div class=\"submit-time\">交卷时间：{{ jobAnswerList1[0].create_time }}</div>\r\n                <div class=\"result\">正确率：{{ right_bfb }}%</div>\r\n            </div>\r\n        </div>\r\n        <RelList :resource_id=\"resources_id\" />\r\n        <div class=\"praxis-bottom\">\r\n            <div class=\"new-audio\">\r\n                <audio ref=\"audioPlayer\" @timeupdate=\"updateTime\" @loadedmetadata=\"loadMetadata\" @canplay=\"canPlay\"\r\n                    :src=\"src\">\r\n                </audio>\r\n                <img v-if=\"audio_status == 1\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/start.png\"\r\n                    @click=\"audioPlay\" mode=\"\" class=\"start-img\" />\r\n                <img v-if=\"audio_status == 2\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/zanting.png\"\r\n                    @click=\"audioPause\" mode=\"\" class=\"start-img\" />\r\n            </div>\r\n            <div class=\"audio-info\">\r\n                <div class=\"progress\">\r\n                    <van-progress :percentage=\"percentage\" track-color=\"#E3E3E3\" color=\"#6EE6FF\" :show-pivot=\"false\" />\r\n                </div>\r\n                <div class=\"now-time\">{{ currentTime }}</div>\r\n            </div>\r\n        </div>\r\n\r\n        <van-action-sheet style=\"min-height: 300px;background-color: aliceblue;z-index: 9999;\" v-model=\"word_show\"\r\n            title=\"单词释义\" @close=\"change_praxis_show\" @click-overlay=\"change_praxis_show\">\r\n            <div class=\"collect\">\r\n                <div\r\n                    style=\"text-align: left;display: inline-block;vertical-align: top;width: 40%;padding-left: 10px;font-size: 24px;font-weight: 500;\">\r\n                    {{ word }}</div>\r\n                <div class=\"collect-icon\"\r\n                    style=\"text-align: right;display: inline-block;vertical-align: top;width: 50%;\">\r\n                    <van-icon name=\"star\" size=\"30\" color=\"#D9DCE3\" v-if=\"scColor == false\" @click=\"add_word\" />\r\n                    <van-icon name=\"star\" size=\"30\" color=\"orange\" v-else />\r\n                </div>\r\n            </div>\r\n            <div class=\"word-box\">\r\n                <div class=\"word-item\" v-for=\"(item, index) in wordDetail\" :key=\"index\">\r\n                    <div class=\"item-meaning_CH\">{{ item.type }}&nbsp;&nbsp;:&nbsp;&nbsp;{{ item.meaning_CH }}</div>\r\n                </div>\r\n            </div>\r\n        </van-action-sheet>\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getJobList, jobAnswer } from '@/api/listen'\r\nimport { getListByWord, AddWord } from '@/api/home'\r\nimport RelList from \"../../components/RelList\";\r\nimport { decrypt } from '@/api/aes'\r\nimport ArticleParser from '@/components/ArticleParser';\r\nexport default {\r\n    components: { RelList, ArticleParser },\r\n    name: 'Detail',\r\n    data() {\r\n        return {\r\n            praxis_show: false,\r\n            show: false,\r\n            activeTitle: 0,\r\n            active: 0,\r\n            resources: [],\r\n            jobList: [],\r\n            src: [],\r\n            log_id: 0,\r\n            resources_id: 0,\r\n            percentage: 0,\r\n            has_answer: 0,\r\n            currentTime: '0:00',\r\n            audio_status: 1,\r\n            insertWordAnswers: [],\r\n            caninput: false,\r\n            this_job_id: 0,\r\n            this_inputIndex: 0,\r\n            ListAnswer: [],\r\n            answer_info: [],\r\n            jobAnswerList: [],\r\n            RelList: [],\r\n            right_bfb: 0,\r\n            globalInputIndex: 0,\r\n            resource_id: 0,\r\n            word_show: false,\r\n            wordDetail: [],\r\n            word: '',\r\n            scColor: false,\r\n        }\r\n    },\r\n    methods: {\r\n        async onWordClick(word) {\r\n            console.log('点击了单词：', word);\r\n\r\n            const response = await getListByWord({ word: word })\r\n            if (response.code == 100) {\r\n                if (response.data.length == 0) {\r\n                    this.$message({\r\n                        message: '暂未收录',\r\n                        center: true\r\n                    })\r\n                    return\r\n                }\r\n                this.scColor = false\r\n                this.word_show = true\r\n                this.praxis_show = false\r\n                this.wordDetail = response.data\r\n                this.word = word\r\n            }\r\n        },\r\n        async add_word() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await AddWord({ uid: user.sid, word: this.word })\r\n                    if (response.code == 100) {\r\n                        this.scColor = true\r\n                        this.$message({\r\n                            message: '已添加到生词本',\r\n                            center: true\r\n                        })\r\n                    }\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        arrayContains(value, array) {\r\n            return array.includes(value);\r\n        },\r\n        // async getJobList() {\r\n        //     try {\r\n        //         const user = JSON.parse(localStorage.getItem('user'))\r\n        //         if (user && user.sid) {\r\n        //             const response = await getJobList({ sid: user.sid, resource_id: this.resources_id })\r\n        //             const data = response.data\r\n        //             var jobList = response.data.jobList;\r\n        //             jobList = JSON.parse(decrypt(jobList))\r\n        //             jobList.forEach(item => {\r\n        //                 if (item.type_id !== 3 || item.type_id !== 6) {\r\n        //                     item.is_check = 0;\r\n        //                     item.user_answer = item.user_answer.replace(/\\|$/, '');\r\n        //                     if (item.optionsArray == null) {\r\n        //                         item.optionsArray = JSON.parse(item.options)\r\n        //                         if (item.type_id == 7 || item.type_id == 8) {\r\n        //                             item.optionsArray = JSON.parse(item.options_answer)\r\n        //                         }\r\n        //                         item.right_answer = ''\r\n        //                         item.optionsArray.forEach(child => {\r\n        //                             child.is_check = 0;\r\n        //                             item.right_answer += child.title + '|'\r\n\r\n        //                         });\r\n\r\n        //                     }\r\n        //                     if (item.type_id == 5 || item.type_id == 7 || item.type_id == 8) {\r\n        //                         item.options_answer = JSON.parse(item.options_answer)\r\n        //                     }\r\n        //                     item.optionsArray.forEach(child => {\r\n        //                         child.is_check = 0;\r\n        //                     });\r\n        //                     if (item.type_id == 2) {\r\n        //                         item.right_answer = item.right_answer.replace(/\\|$/, '');\r\n        //                         item.title = this.parsedContent(item.title, item.id)\r\n        //                         item.user_answer = item.user_answer.split(/[|]/)\r\n        //                         item.right_answer = item.right_answer.split(/[|]/)\r\n        //                         //console.log(\"1111111\" + item.right_answer)\r\n        //                     }\r\n        //                     if (item.type_id == 5) {\r\n        //                         item.right_answer = item.right_answer.replace(/\\|$/, '');\r\n        //                         item.title = this.parsedContent(item.title, item.id)\r\n        //                         item.user_answer = item.user_answer.split(/[|]/)\r\n        //                         item.right_answer = item.right_answer.split(/[|]/)\r\n        //                         //console.log(item.right_answer)\r\n        //                     }\r\n        //                     if (item.type_id == 7 || item.type_id == 8) {\r\n        //                         item.right_answer = item.right_answer.replace(/\\|$/, '');\r\n        //                         item.title = this.parsedContent(item.title, item.id)\r\n        //                         item.user_answer = item.user_answer.split(/[|]/)\r\n        //                         item.right_answer = item.right_answer.split(/[|]/)\r\n        //                         //console.log(item)\r\n        //                     }\r\n        //                     if (item.type_id == 4) {\r\n        //                         item.right_answer = item.right_answer.replace(/\\|$/, '');\r\n        //                     }\r\n        //                 }\r\n        //             });\r\n        //             this.resources = data\r\n        //             //console.log(this.resources)\r\n        //             this.jobList = jobList\r\n        //             this.src = data.resources.file_path\r\n        //             this.getJobAnswer()\r\n        //         } else {\r\n        //             console.error('用户未登录或没有找到sid')\r\n        //         }\r\n        //     } catch (error) {\r\n        //         console.error('Login Failed:', error)\r\n        //     }\r\n        // },\r\n        async getJobList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getJobList({ sid: user.sid, resource_id: this.resources_id })\r\n                    const data = response.data\r\n                    const jobList = response.data.jobList\r\n\r\n                    // 先解密并解析\r\n                    let jobList1 = JSON.parse(decrypt(jobList))\r\n\r\n                    // 工具函数：只解析一次 JSON\r\n                    function parseIfJson(str) {\r\n                        if (typeof str === 'string') {\r\n                            try {\r\n                                return JSON.parse(str)\r\n                            } catch (e) {\r\n                                console.warn(\"不是合法 JSON:\", str)\r\n                                return str\r\n                            }\r\n                        }\r\n                        return str\r\n                    }\r\n\r\n                    // 遍历处理 jobList1\r\n                    jobList1.forEach(item => {\r\n                        // 统一解析 options_answer 和 options\r\n                        item.options_answer = parseIfJson(item.options_answer)\r\n                        item.optionsArray = parseIfJson(item.options)\r\n\r\n                        // 公共字段处理\r\n                        if (item.type_id !== 3 && item.type_id !== 6) {\r\n                            item.is_check = 0\r\n                            item.user_answer = item.user_answer.replace(/\\|$/, '')\r\n\r\n                            // 初始化 right_answer\r\n                            item.right_answer = ''\r\n                            if (Array.isArray(item.optionsArray)) {\r\n                                item.optionsArray.forEach(child => {\r\n                                    child.is_check = 0\r\n                                    item.right_answer += child.title + '|'\r\n                                })\r\n                            }\r\n\r\n                            // 按题型处理\r\n                            if ([2, 5, 7].includes(item.type_id)) {\r\n                                item.right_answer = item.right_answer.replace(/\\|$/, '')\r\n                                item.title = this.parsedContent(item.title, item.id)\r\n                                item.user_answer = item.user_answer.split(/[|]/)\r\n                                item.right_answer = item.right_answer.split(/[|]/)\r\n                            }\r\n\r\n                            if (item.type_id === 4) {\r\n                                item.right_answer = item.right_answer.replace(/\\|$/, '')\r\n                            }\r\n                        }\r\n                    })\r\n\r\n                    // ✅ 最终赋值用 jobList1，而不是 jobList\r\n                    this.resources = data\r\n                    this.jobList = jobList1\r\n                    this.src = data.resources.file_path\r\n\r\n                    // 调用下一个方法\r\n                    this.getJobAnswer()\r\n\r\n                    // 调试输出（可展开查看）\r\n                    console.log(\"用户答案解析后:\", jobList1)\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async getJobAnswer() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'));\r\n                if (user && user.sid) {\r\n                    const response = await jobAnswer({ sid: user.sid, resource_id: this.resources_id });\r\n                    const data = response.data;\r\n                    var countTotal = data.countTotal\r\n                    var rightCountTotal = data.rightCountTotal\r\n                    var right_bfb = (rightCountTotal / countTotal) * 100\r\n                    this.answer_info = data\r\n                    this.right_bfb = right_bfb.toFixed(2)\r\n                    //console.log('API 返回数据:', data.jobAnswerList);\r\n\r\n                    const jobAnswerList = data.jobAnswerList;\r\n                    const jobList = this.jobList;\r\n\r\n                    //console.log('工作列表:', jobList);\r\n                    //console.log('答案列表:', jobAnswerList);\r\n\r\n                    const answerMap = new Map();\r\n                    jobAnswerList.forEach(v => {\r\n                        if (!answerMap.has(v.job_id)) {\r\n                            answerMap.set(v.job_id, []);\r\n                        }\r\n                        answerMap.get(v.job_id).push(v);\r\n                    });\r\n\r\n                    const new_answer = jobList.map(job => {\r\n                        const answers = answerMap.get(job.id);\r\n                        //console.log(`job.id=${job.id}, 对应的答案:`, answers);\r\n                        return answers || [];\r\n                    });\r\n\r\n                    //console.log('匹配后的答案:', new_answer);\r\n\r\n                    this.jobAnswerList = new_answer;\r\n                    this.jobAnswerList1 = data.jobAnswerList;\r\n                    // 确保更新视图\r\n                    this.$forceUpdate();\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid');\r\n                }\r\n            } catch (error) {\r\n                console.error('获取答案失败:', error);\r\n            }\r\n        },\r\n        async check_answer(itemIndex, indexChild) {\r\n            var jobList = this.jobList\r\n            //console.log(itemIndex)\r\n            jobList.forEach((val, key) => {\r\n                if (key == itemIndex) {\r\n                    val.is_check = 1;\r\n                    val.optionsArray.forEach((child, index) => {\r\n                        if (indexChild == index) {\r\n                            child.is_check = 1\r\n                        } else {\r\n                            child.is_check = 0\r\n                        }\r\n                    });\r\n                }\r\n            })\r\n            var has_answer = 0\r\n            jobList.forEach(val => {\r\n                val.optionsArray.forEach(child => {\r\n                    if (child.is_check == 1) {\r\n                        has_answer++\r\n                    }\r\n                });\r\n\r\n            })\r\n            this.jobList = jobList\r\n            this.has_answer = has_answer\r\n        },\r\n        async change_card() {\r\n            this.show = !this.show\r\n            //console.log(this.jobList)\r\n        },\r\n        // async audioPlay() {\r\n        //     this.$refs.audioPlayer.play();\r\n        // },\r\n        // async audioPause() {\r\n        //     this.$refs.audioPlayer.pause();\r\n        //     this.audio_status = 1\r\n        // },\r\n\r\n        async audioPlay() {\r\n            this.audio_status = 2\r\n            this.$refs.audioPlayer.play();\r\n        },\r\n        async audioPause() {\r\n            this.$refs.audioPlayer.pause();\r\n            this.audio_status = 1\r\n        },\r\n\r\n        updateTime(event) {\r\n            const audio = event.target;\r\n            this.currentTime = this.formatTime(audio.currentTime);\r\n            //console.log(audio.currentTime)\r\n            //console.log(audio.duration)\r\n            this.percentage = Math.floor((audio.currentTime / audio.duration) * 100);\r\n        },\r\n        loadMetadata(event) {\r\n            const audio = event.target;\r\n            this.duration = this.formatTime(audio.duration);\r\n        },\r\n        canPlay() {\r\n            //console.log('Audio can play through.');\r\n        },\r\n        formatTime(seconds) {\r\n            const m = Math.floor(seconds / 60) % 60;\r\n            const s = Math.floor(seconds) % 60;\r\n            return `${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;\r\n        },\r\n        // 解析字符串，生成文本和输入框的块数组\r\n        // 解析字符串，生成文本和输入框的块数组\r\n        parsedContent(str, index_id) {\r\n            const chunks = [];\r\n            let lastIndex = 0;\r\n\r\n            // 替换特定格式的占位符\r\n            str = str.replace(/__（/g, '_(');\r\n            str = str.replace(/）__/g, ')_');\r\n\r\n            // 匹配占位符\r\n            const regex = /_\\((\\d+)\\)_+/g;\r\n            let match;\r\n\r\n            // // // 移除 HTML 标签，但保留 <br>\r\n            str = str.replace(/<\\/?[^>]+(>|$)/g, (match) => {\r\n                if (match.startsWith('<br')) return '<br>';\r\n                if (match.startsWith('<em')) return '<em>';\r\n                if (match.startsWith('</em')) return '</em>';\r\n                if (match.startsWith('</strong')) return '</strong>';\r\n                if (match.startsWith('<strong')) return '<strong>';\r\n                if (match.startsWith('<table')) return '<table>';\r\n                if (match.startsWith('</table')) return '</table>';\r\n                if (match.startsWith('<tbody')) return '<tbody>';\r\n                if (match.startsWith('</tbody')) return '</tbody>';\r\n                if (match.startsWith('<th')) return '<th>';\r\n                if (match.startsWith('</th')) return '</th>';\r\n                if (match.startsWith('<tr')) return '<tr>';\r\n                if (match.startsWith('</tr')) return '</tr>';\r\n                if (match.startsWith('<td')) return '<td>';\r\n                if (match.startsWith('</td')) return '</td>';\r\n                // if (match.startsWith('<p')) return '<p>';\r\n                if (match.startsWith('</p')) return '</p>';\r\n                if (match.startsWith('<img')) return match.replace(/<img/, '<img style=\"width: 120%;\"');\r\n                return '';\r\n            });\r\n            ////console.log(str)\r\n            // 逐个匹配字符串中的填空占位符\r\n            var inputIndex1 = 0\r\n            while ((match = regex.exec(str)) !== null) {\r\n                const inputIndex = this.globalInputIndex;\r\n\r\n                // 处理占位符之前的文本部分\r\n                if (match.index > lastIndex) {\r\n                    const textChunk = str.slice(lastIndex, match.index);\r\n                    chunks.push({ isInput: false, text: textChunk });\r\n                }\r\n\r\n                // 添加输入框\r\n                chunks.push({ isInput: true, inputIndex, inputIndex1 });\r\n                inputIndex1++\r\n                lastIndex = regex.lastIndex;\r\n                this.globalInputIndex++; // 累加 inputIndex\r\n            }\r\n\r\n            // 处理末尾的文本部分\r\n            if (lastIndex < str.length) {\r\n                const textChunk = str.slice(lastIndex);\r\n                chunks.push({ isInput: false, text: textChunk });\r\n            }\r\n\r\n            // 初始化对应的 insertWordAnswers 数组\r\n            if (!this.insertWordAnswers[index_id]) {\r\n                this.$set(this.insertWordAnswers, index_id, []);\r\n            }\r\n            //console.log(\"2wryuu\")\r\n            //console.log(chunks)\r\n            return chunks;\r\n        },\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        // 在组件挂载后立即获取任务数据\r\n        this.log_id = this.$route.query.log_id;\r\n        this.resources_id = this.$route.query.resource_id;\r\n        this.getJobList()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n.praxis-item {\r\n    width: 90%;\r\n    height: auto;\r\n    margin: 0 auto;\r\n    text-align: left;\r\n}\r\n\r\n.article {\r\n    width: 80vw;\r\n    height: auto;\r\n    margin: 8px auto;\r\n    padding-bottom: 60px;\r\n    margin-top: 40px;\r\n    text-align: justify;\r\n}\r\n\r\n.praxis {\r\n    padding-bottom: 200px;\r\n    text-align: justify\r\n}\r\n\r\n.praxis-title {\r\n    font-size: 14px;\r\n    color: #030303;\r\n    padding: 35px 0 10px 0;\r\n    /* width: 50px; */\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: left;\r\n}\r\n\r\n.praxis-desc {\r\n    font-size: 14px;\r\n    width: 90%;\r\n    height: auto;\r\n    padding: 10px 0;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    font-weight: normal;\r\n}\r\n\r\n.praxis-info {\r\n    width: 90%;\r\n    height: auto;\r\n    background: #FFFFFF;\r\n    white-space: normal;\r\n    /* 正常的空白处理，允许换行 */\r\n    word-break: keep-all;\r\n    /* 确保单词不被截断 */\r\n    overflow-wrap: anywhere;\r\n    word-spacing: 5px;\r\n    /* 单词太长时允许换行，不会强制截断 */\r\n}\r\n\r\n.answer-option {\r\n    width: 90%;\r\n    height: auto;\r\n    background: #FFFFFF;\r\n    white-space: normal;\r\n    /* 正常的空白处理，允许换行 */\r\n    word-break: keep-all;\r\n    /* 确保单词不被截断 */\r\n    overflow-wrap: anywhere;\r\n    /* 单词太长时允许换行，不会强制截断 */\r\n}\r\n\r\n.answer {\r\n    width: 100%;\r\n    /* height: 55px; */\r\n    height: auto;\r\n    margin: 20px 0;\r\n    display: flex;\r\n    justify-content: center;\r\n    align-items: center;\r\n}\r\n\r\n.answer-title {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 35px;\r\n    height: 35px;\r\n    background-color: lightgray;\r\n    border-radius: 35px;\r\n    line-height: 35px;\r\n    text-align: center;\r\n}\r\n\r\n/* .checked {\r\n    background: linear-gradient(180deg, #4499EE 0%, #9CE4FF 100%);\r\n} */\r\n\r\n.checked {\r\n    background: #F85353;\r\n}\r\n\r\n.right-checked {\r\n    background: #3CC57C;\r\n}\r\n\r\n.answer-desc {\r\n    padding-left: 10px;\r\n    font-size: 14px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 300px;\r\n}\r\n\r\n.wrap-text {\r\n    width: 90%;\r\n    height: auto;\r\n    margin: 0 auto;\r\n    text-align: left;\r\n    padding: 10px 0;\r\n}\r\n\r\n.praxis-bottom {\r\n    width: 100%;\r\n    height: 56px;\r\n    background: #FFFFFF;\r\n    box-shadow: 0px -2px 6px 1px rgba(80, 143, 206, 0.1);\r\n    border-radius: 0px;\r\n    position: fixed;\r\n    bottom: 0;\r\n}\r\n\r\n.new-audio {\r\n    width: 50px;\r\n    height: 50px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-left: 15px;\r\n}\r\n\r\n.start-img {\r\n    width: 50px;\r\n    height: 50px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n\r\n}\r\n\r\n.audio-info {\r\n    width: 300px;\r\n    height: 50px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 50px;\r\n    text-align: left;\r\n    color: #979797;\r\n    font-size: 12px;\r\n}\r\n\r\n.progress {\r\n    width: 225px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-top: 22px;\r\n}\r\n\r\n.now-time {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 50px;\r\n}\r\n\r\n.answer-has {\r\n    width: 325px;\r\n    height: 60px;\r\n    padding-left: 25x;\r\n}\r\n\r\n.jindu {\r\n    width: 205px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 60px;\r\n    font-size: 14px;\r\n    color: #979797;\r\n    /* text-align: left; */\r\n\r\n}\r\n\r\n.btn-ok-cn {\r\n    margin-top: 12px;\r\n    width: 118px;\r\n    height: 36px;\r\n    line-height: 36px;\r\n    background: #003F88;\r\n    border-radius: 23px;\r\n    /* margin: 0 auto; */\r\n    text-align: center;\r\n    color: #FFF;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.card-title {\r\n    width: 100vw;\r\n    height: 75px;\r\n    text-align: center;\r\n    line-height: 75px;\r\n    border-bottom: #E4E4E4 1px solid;\r\n    margin: 0 auto;\r\n    color: #000000;\r\n    font-weight: bold;\r\n    font-size: 16px;\r\n}\r\n\r\n.main-answer-card {\r\n    padding: 30px 40px 80px 40px;\r\n    text-align: left;\r\n}\r\n\r\n.card-item {\r\n    width: 34px;\r\n    height: 34px;\r\n    background: linear-gradient(180deg, #4499EE 0%, #9CE4FF 100%);\r\n    border-radius: 34px;\r\n    line-height: 34px;\r\n    text-align: center;\r\n    color: #FFF;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin: 10px 5px;\r\n}\r\n\r\n.card-item-empty {\r\n    background: #CBCBCB;\r\n}\r\n\r\n.btn-cancel {\r\n    position: absolute;\r\n    top: 26px;\r\n    right: 25px;\r\n}\r\n\r\n.btn-ok {\r\n    width: 288px;\r\n    height: 45px;\r\n    background: #003F88;\r\n    border-radius: 23px;\r\n    margin: 0 auto;\r\n    line-height: 45px;\r\n    text-align: center;\r\n    color: #FFF;\r\n    margin: 0 auto;\r\n}\r\n\r\n\r\n.input-answer-box {\r\n    width: auto;\r\n    display: inline;\r\n    line-height: 30px;\r\n    text-align: left;\r\n}\r\n\r\n.input_new {\r\n    width: 80%;\r\n    height: 200px;\r\n    padding-left: 20px;\r\n}\r\n\r\n.input_new>input {\r\n    width: 50%;\r\n    margin: 50px 20px;\r\n    padding: 10px 20px;\r\n}\r\n\r\n\r\n.answer-btn {\r\n    position: fixed;\r\n    bottom: 30%;\r\n    right: 10px;\r\n    width: 20px;\r\n    /* height: 80px; */\r\n    line-height: 20px;\r\n    text-align: center;\r\n    background-color: #96cbf7;\r\n    padding: 10px 0;\r\n    border-radius: 15px;\r\n    color: #FFF;\r\n    font-size: 12px;\r\n}\r\n\r\n\r\n\r\n.box-top {\r\n    width: 90vw;\r\n    height: 50px;\r\n    text-align: left;\r\n}\r\n\r\n.right-num {\r\n    padding: 11px 0 0 30px;\r\n    font-size: 30px;\r\n    font-weight: bold;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.total-num,\r\n.report-desc {\r\n    padding: 29px 0 0 0px;\r\n    font-size: 12px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.report-desc {\r\n    padding-left: 28px;\r\n}\r\n\r\n.bottom-line {\r\n    width: 340px;\r\n    height: 1px;\r\n    margin: 13px auto;\r\n    background-color: #E4E4E4;\r\n}\r\n\r\n.second-box {\r\n    width: 320px;\r\n    height: 25px;\r\n    margin: 0 auto;\r\n    font-size: 12px;\r\n    color: #656565;\r\n}\r\n\r\n.submit-time {\r\n    width: 240px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: left;\r\n}\r\n\r\n.result {\r\n    width: 80px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: right;\r\n}\r\n\r\n.result-box {\r\n    width: 320px;\r\n    height: auto;\r\n    margin: 0 auto;\r\n    font-size: 12px;\r\n    color: #656565;\r\n    text-align: left;\r\n}\r\n\r\n.wall-report {\r\n    width: 90%;\r\n    padding-left: 10%;\r\n    height: 60px;\r\n    line-height: 60px;\r\n    border-top: 1px solid #96cbf7;\r\n    border-bottom: 1px solid #96cbf7;\r\n    margin-top: 20px;\r\n    font-weight: bold;\r\n}\r\n\r\n.answer-item {\r\n    display: block;\r\n    width: auto;\r\n    /* height: 40px; */\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.word-popup {\r\n    width: 100vw;\r\n    height: 300px;\r\n    background-size: cover;\r\n    position: fixed;\r\n    bottom: 0;\r\n}\r\n\r\n.collect {\r\n    width: 85vw;\r\n    margin-bottom: 20px;\r\n}\r\n\r\n.word-box {\r\n    width: 90%;\r\n    margin: 0 auto;\r\n}\r\n\r\n.word-item {\r\n    width: 100%;\r\n    border-bottom: 1px solid #E4E4E4;\r\n    padding-bottom: 10px;\r\n}\r\n\r\n.van-overlay {\r\n    background-color: rgba(0, 0, 0, 20%) !important\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Detail.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Detail.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Detail.vue?vue&type=template&id=7beaca4e&scoped=true\"\nimport script from \"./Detail.vue?vue&type=script&lang=js\"\nexport * from \"./Detail.vue?vue&type=script&lang=js\"\nimport style0 from \"./Detail.vue?vue&type=style&index=0&id=7beaca4e&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"7beaca4e\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"main\"},[_c('van-nav-bar',{attrs:{\"title\":\"我的收藏\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticClass:\"item-box\",on:{\"click\":_vm.to_new_words}},[_c('div',{staticClass:\"item-title-cn\"},[_vm._v(\"生词本\")]),_c('div',{staticClass:\"item-title-en\"},[_vm._v(\"Vocabulary book\")])])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"main\">\r\n        <van-nav-bar title=\"我的收藏\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <div class=\"item-box\" @click=\"to_new_words\">\r\n            <div class=\"item-title-cn\">生词本</div>\r\n            <div class=\"item-title-en\">Vocabulary book</div>\r\n        </div>\r\n        <!-- <div class=\"item-box1\" bind:tap=\"to_correction_notebook\">\r\n            <div class=\"item-title-cn\">错题本</div>\r\n            <div class=\"item-title-en\">Error book</div>\r\n        </div> -->\r\n    </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n    data() {\r\n        return {\r\n\r\n        }\r\n    },\r\n    created() {\r\n\r\n    },\r\n    methods: {\r\n        to_new_words(){\r\n            this.$router.push({ name: 'NewWords' })\r\n        }\r\n    }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.item-box {\r\n    width: 330px;\r\n    height: 100px;\r\n    background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/public/img/collect/1.png');\r\n    background-size: cover;\r\n    margin: 16px auto;\r\n    color: #FFF;\r\n\r\n}\r\n\r\n.item-box1 {\r\n    width: 330px;\r\n    height: 100px;\r\n    background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/public/img/collect/2.png');\r\n    background-size: cover;\r\n    margin: 16px auto;\r\n    color: #FFF;\r\n}\r\n\r\n.item-title-cn {\r\n    padding: 29px 0 0 36px;\r\n    font-size: 16px;\r\n    font-weight: bold;\r\n}\r\n\r\n.item-title-en {\r\n    padding: 7px 0 0 36px;\r\n    font-size: 12px;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./index.vue?vue&type=template&id=3d5a6266&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=js\"\nexport * from \"./index.vue?vue&type=script&lang=js\"\nimport style0 from \"./index.vue?vue&type=style&index=0&id=3d5a6266&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"3d5a6266\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"main\"},[_c('van-nav-bar',{attrs:{\"title\":\"生词本\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticClass:\"tea-search\"},[_c('van-search',{attrs:{\"placeholder\":\"请输入搜索关键词\"},on:{\"input\":_vm.changeGetMyByWord},model:{value:(_vm.keyword),callback:function ($$v) {_vm.keyword=$$v},expression:\"keyword\"}})],1),_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"content-title\"},[_vm._v(\"已收藏\"+_vm._s(_vm.totalWord)+\"词\")]),_c('div',{staticClass:\"words-list\"},_vm._l((_vm.wordList),function(item,index){return _c('div',{key:index,staticClass:\"words-item\"},[_c('div',{staticClass:\"words-box\"},[_c('div',{staticClass:\"words\"},[_vm._v(_vm._s(item.word)+\" \"),_c('text',{staticClass:\"words-yinbiao\"})]),_vm._l((item.wordList),function(item2,index2){return _c('div',{key:index2,staticClass:\"words-lable\"},[_vm._v(\" \"+_vm._s(item2.type)+\":\"+_vm._s(item2.meaning_CH)+\" \")])})],2)])}),0),(_vm.totalWord > _vm.wordList.length)?_c('div',{staticClass:\"more\",on:{\"click\":_vm.addLoad}},[_vm._v(\"点击加载\")]):_vm._e(),(_vm.totalWord == _vm.wordList.length)?_c('div',{staticClass:\"more-no\"},[_vm._v(\"没有了\")]):_vm._e()])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <!--otherPage/pages/other/new_words.wxml-->\r\n    <div class=\"main\">\r\n        <van-nav-bar title=\"生词本\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <div class=\"tea-search\">\r\n            <van-search v-model=\"keyword\" @input=\"changeGetMyByWord\" placeholder=\"请输入搜索关键词\" />\r\n        </div>\r\n\r\n        <div class=\"content\">\r\n            <div class=\"content-title\">已收藏{{ totalWord }}词</div>\r\n            <div class=\"words-list\">\r\n                <div class=\"words-item\" v-for=\"(item, index) in wordList\" :key=\"index\">\r\n                    <div class=\"words-box\">\r\n                        <div class=\"words\">{{ item.word }} <text class=\"words-yinbiao\"></text></div>\r\n                        <div class=\"words-lable\" v-for=\"(item2, index2) in item.wordList\" :key=\"index2\">\r\n                            \r\n                            {{ item2.type }}:{{ item2.meaning_CH }}\r\n                            \r\n                        </div>\r\n                    </div>\r\n                    <!-- <div class=\"sound-icon\" bind:tap=\"to_sound\">\r\n                        <t-icon name=\"sound\" size=\"18\" data-name=\"chevron-right\" bind:click=\"onIconTap\" />\r\n                    </div> -->\r\n                </div>\r\n            </div>\r\n            <div class=\"more\" v-if=\"totalWord > wordList.length\" @click=\"addLoad\">点击加载</div>\r\n            <div class=\"more-no\" v-if=\"totalWord == wordList.length\">没有了</div>\r\n        </div>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\nimport { getListMyByWord } from '@/api/home'\r\nexport default {\r\n    data() {\r\n        return {\r\n            pageSize: 1,\r\n            pageLimit: 10,\r\n            keyword:'',\r\n            wordList: []\r\n        }\r\n    },\r\n    created() {\r\n\r\n    },\r\n    methods: {\r\n        async changeGetMyByWord(){\r\n            this.wordList = [];\r\n            this.getMyByWord()\r\n        },\r\n        async getMyByWord() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getListMyByWord({ uid: user.sid, page: this.pageSize, size: this.pageLimit,keyword:this.keyword })\r\n                    if (response.code == 100) {\r\n                        this.wordList =this.wordList.concat(response.data.lst)\r\n\r\n                        this.totalWord = response.data.total\r\n                        console.log(this.wordList)\r\n                    }\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async addLoad() {\r\n            this.pageSize++\r\n            this.getMyByWord()\r\n        }\r\n    },\r\n    mounted() {\r\n        this.getMyByWord()\r\n    },\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n/* otherPage/pages/other/new_words.wxss */\r\n\r\n\r\n.tea-search {\r\n    width: 360px;\r\n    height: 36px;\r\n    background: #000000;\r\n    border-radius: 25px;\r\n    /* opacity: 0.26; */\r\n    margin: 11px auto;\r\n}\r\n\r\n.content {\r\n    width: 100vw;\r\n    height: auto;\r\n    background: #FFFFFF;\r\n    border-radius: 32px 32px 0px 0px;\r\n    margin-top: 25px;\r\n    margin: 20px auto;\r\n    padding-bottom: 100px;\r\n}\r\n\r\n.content-title {\r\n    width: 375px;\r\n    height: 42px;\r\n    font-size: 16px;\r\n    color: #030303;\r\n    line-height: 42px;\r\n    text-align: center;\r\n}\r\n\r\n.words-list {\r\n    width: 347px;\r\n    height: auto;\r\n    padding: 10px 14px;\r\n}\r\n\r\n.words-item {\r\n    width: 330px;\r\n    height: auto;\r\n    padding: 10px 9px;\r\n    border-bottom: 1px solid #DCDCDC;\r\n}\r\n\r\n.words-box {\r\n    width: 320px;\r\n    height: auto;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.words {\r\n    font-size: 14px;\r\n}\r\n\r\n.words-yinbiao {\r\n    color: #979797;\r\n}\r\n\r\n.words-lable {\r\n    color: #979797;\r\n    font-size: 24rpx;\r\n    /* border-bottom: #DCDCDC 1px solid; */\r\n    padding: 2px 0;\r\n}\r\n\r\n.sound-icon {\r\n    width: 30px;\r\n    height: 30px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n\r\n}\r\n\r\n.more,\r\n.more-no {\r\n    width: 100%;\r\n    height: 60px;\r\n    text-align: center;\r\n    color: #8d8a8a;\r\n    position: fixed;\r\n    bottom: 0px;\r\n    background-color: #FFFFFF;\r\n    line-height: 60px;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./new_words.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./new_words.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./new_words.vue?vue&type=template&id=2b4c00d6&scoped=true\"\nimport script from \"./new_words.vue?vue&type=script&lang=js\"\nexport * from \"./new_words.vue?vue&type=script&lang=js\"\nimport style0 from \"./new_words.vue?vue&type=style&index=0&id=2b4c00d6&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"2b4c00d6\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"praxis\"},[_c('van-nav-bar',{attrs:{\"title\":_vm.resources.resources.name,\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('van-tabs',{attrs:{\"color\":\"#6FDBFF\"},model:{value:(_vm.activeTitle),callback:function ($$v) {_vm.activeTitle=$$v},expression:\"activeTitle\"}},[_c('van-tab',{scopedSlots:_vm._u([{key:\"title\",fn:function(){return [_vm._v(\"做题 \")]},proxy:true}])},[_vm._l((_vm.jobList),function(item,index){return _c('div',{key:index},[_c('div',{staticClass:\"praxis-item\"},[_c('div',{staticClass:\"praxis-title\"},[_vm._v(\"题\"+_vm._s(index + 1))]),(item.type_id == 1 || item.type_id == 4)?_c('div',{staticClass:\"praxis-desc\"},[_c('div',{staticClass:\"wrap-text\",domProps:{\"innerHTML\":_vm._s(item.title)}})]):_vm._e(),(item.type_id == 1)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.optionsArray),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"answer\"},[_c('div',{staticClass:\"answer-title\",class:{\n                                'answer-title': true,\n                                'checked': item.user_answer == itemChild.label,\n                                'right-checked': item.options_answer == itemChild.label\n                            },on:{\"click\":function($event){return _vm.check_answer(index, indexChild)}}},[_vm._v(_vm._s(itemChild.label))]),_c('div',{staticClass:\"answer-desc\"},[_vm._v(_vm._s(itemChild.title))])])}),0):_vm._e(),(item.type_id == 3 || item.type_id == 6)?_c('div',{staticClass:\"praxis-info\"},[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(item.title)}}),_c('div',{staticStyle:{\"display\":\"inline\"}},[_vm._v(\"你的答案是：\"+_vm._s(item.user_answer))])]):_vm._e(),(item.type_id == 4)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.optionsArray),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"answer\"},[_c('div',{staticClass:\"answer-title\",class:{\n                                'answer-title': true,\n                                'checked': !_vm.arrayContains(itemChild.label, item.options_answer),\n                                'right-checked': _vm.arrayContains(itemChild.label, item.options_answer)\n                            },on:{\"click\":function($event){return _vm.check_answer(index, indexChild)}}},[_vm._v(_vm._s(itemChild.label))]),_c('div',{staticClass:\"answer-desc\"},[_vm._v(_vm._s(itemChild.title))])])}),0):_vm._e(),(item.type_id == 2)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.title),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"input-answer-box\"},[(!itemChild.isInput)?_c('span',[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(itemChild.text)}})]):_c('span',{staticStyle:{\"border-bottom\":\"1px solid #54a4ee\",\"padding\":\"0 10px 0 0\"}},[(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 1)?_c('span',{staticStyle:{\"color\":\"#3CC57C\"}},[_vm._v(\" \"+_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer)+\" \")]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer)?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" \"+_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer)+\" \")]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer == '')?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" 未作 \")]):_vm._e()])])}),0):_vm._e(),(item.type_id == 5)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.title),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"input-answer-box\"},[(!itemChild.isInput)?_c('span',[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(itemChild.text)}})]):_c('span',{staticStyle:{\"border-bottom\":\"1px solid #54a4ee\",\"padding\":\"0 10px 0 0\"}},[(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 1)?_c('span',{staticStyle:{\"color\":\"#3CC57C\"}},[_vm._v(_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer))]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer)?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" \"+_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer)+\" \")]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer == '')?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" 未作 \")]):_vm._e()])])}),0):_vm._e(),(item.type_id == 7)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.title),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"input-answer-box\"},[(!itemChild.isInput)?_c('span',[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(itemChild.text)}})]):_c('span',{staticStyle:{\"border-bottom\":\"1px solid #54a4ee\",\"padding\":\"0 10px 0 0\"}},[(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 1)?_c('span',{staticStyle:{\"color\":\"#3CC57C\"}},[_vm._v(_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer))]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer)?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" \"+_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer)+\" \")]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer == '')?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" 未作 \")]):_vm._e()])])}),0):_vm._e(),(item.type_id == 1)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是：\"+_vm._s(item.options_answer)+\" \"),_c('br'),_vm._v(\" 你的答案是：\"+_vm._s(item.user_answer)+\" \")]):_vm._e(),(item.type_id == 2)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是： \"),_c('br'),_vm._l((item.right_answer),function(a,b){return _c('span',{key:b,staticClass:\"answer-item\"},[_vm._v(\"(\"+_vm._s(b + 1)+\")  \"+_vm._s(a)+\"   \")])}),_c('br'),_vm._v(\" 你的答案是：\"),_c('br'),_vm._l((item.user_answer),function(ua,ub){return _c('span',{key:ub,staticClass:\"answer-item\"},[_vm._v(\" (\"+_vm._s(ub + 1)+\")  \"+_vm._s(ua)+\"   \")])})],2):_vm._e(),(item.type_id == 4)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是：\"),_c('br'),_c('span',[_vm._v(\" \"+_vm._s(item.options_answer)+\" \")]),_c('br'),_vm._v(\"你的答案是：\"),_c('br'),_c('span',[_vm._v(_vm._s(item.user_answer)+\" \")])]):_vm._e(),(item.type_id == 5)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是：\"),_c('br'),_vm._l((item.options_answer),function(a,b){return _c('span',{key:b,staticClass:\"answer-item\"},[_vm._v(\" (\"+_vm._s(b + 1)+\")  \"+_vm._s(a.title)+\"   \")])}),_c('br'),_vm._v(\"你的答案是：\"),_c('br'),_vm._l((item.user_answer),function(ua,ub){return _c('span',{key:ub,staticClass:\"answer-item\"},[_vm._v(\"(\"+_vm._s(ub + 1)+\")  \"+_vm._s(ua)+\"   \")])})],2):_vm._e(),(item.type_id == 7)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是：\"),_c('br'),_vm._l((item.options_answer),function(a,b){return _c('span',{key:b,staticClass:\"answer-item\"},[_vm._v(\" (\"+_vm._s(b + 1)+\")  \"+_vm._s(a.title)+\"   \")])}),_c('br'),_vm._v(\"你的答案是：\"),_c('br'),_vm._l((item.user_answer),function(ua,ub){return _c('span',{key:ub,staticClass:\"answer-item\"},[_vm._v(\"(\"+_vm._s(ub + 1)+\")  \"+_vm._s(ua)+\"   \")])})],2):_vm._e()])])}),_c('div',{staticClass:\"wall\"})],2),_c('van-tab',{scopedSlots:_vm._u([{key:\"title\",fn:function(){return [_vm._v(\"原文 \")]},proxy:true}])},[_c('div',{staticClass:\"wrap-text\",domProps:{\"innerHTML\":_vm._s(_vm.normalizeContent(_vm.resources.resources.content))}})])],1),_c('div',{staticClass:\"wall-report\"},[_vm._v(\"答题报告\")]),_c('div',{staticClass:\"answer-box\"},[_c('div',{staticClass:\"box-top\"},[_c('div',{staticClass:\"right-num\"},[_vm._v(_vm._s(_vm.answer_info.row.right_count))]),_c('div',{staticClass:\"total-num\"},[_vm._v(\"/\"+_vm._s(_vm.answer_info.row.total_count))]),_c('div',{staticClass:\"report-desc\"},[_vm._v(\"共\"+_vm._s(_vm.answer_info.row.total_count)+\"题，答对\"+_vm._s(_vm.answer_info.row.right_count)+\"题\")])]),_c('div',{staticClass:\"bottom-line\"}),_c('div',{staticClass:\"second-box\"},[_c('div',{staticClass:\"submit-time\"},[_vm._v(\"交卷时间：\"+_vm._s(_vm.jobAnswerList1[0].create_time))]),_c('div',{staticClass:\"result\"},[_vm._v(\"正确率：\"+_vm._s(((_vm.answer_info.row.right_count / _vm.answer_info.row.total_count) * 100).toFixed(2))+\"% \")])])]),_c('RelList',{attrs:{\"resource_id\":_vm.resources_id}}),_c('div',{staticClass:\"praxis-bottom\"},[_c('div',{staticClass:\"new-audio\"},[_c('audio',{ref:\"audioPlayer\",attrs:{\"src\":_vm.src},on:{\"timeupdate\":_vm.updateTime,\"loadedmetadata\":_vm.loadMetadata,\"canplay\":_vm.canPlay}}),(_vm.audio_status == 1)?_c('img',{staticClass:\"start-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/start.png\",\"mode\":\"\"},on:{\"click\":_vm.audioPlay}}):_vm._e(),(_vm.audio_status == 2)?_c('img',{staticClass:\"start-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/zanting.png\",\"mode\":\"\"},on:{\"click\":_vm.audioPause}}):_vm._e()]),_c('div',{staticClass:\"audio-info\"},[_c('div',{staticClass:\"progress\"},[_c('van-progress',{attrs:{\"percentage\":_vm.percentage,\"track-color\":\"#E3E3E3\",\"color\":\"#6EE6FF\",\"show-pivot\":false}})],1),_c('div',{staticClass:\"now-time\"},[_vm._v(_vm._s(_vm.currentTime))])])])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"praxis\">\r\n        <van-nav-bar :title=\"resources.resources.name\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <van-tabs v-model=\"activeTitle\" color=\"#6FDBFF\">\r\n            <van-tab>\r\n                <template #title>做题 </template>\r\n                <div v-for=\"(item, index) in jobList\" :key=\"index\">\r\n                    <div class=\"praxis-item\">\r\n                        <div class=\"praxis-title\">题{{ index + 1 }}</div>\r\n                        <div class=\"praxis-desc\" v-if=\"item.type_id == 1 || item.type_id == 4\">\r\n                            <div class=\"wrap-text\" v-html=\"item.title\"></div>\r\n                        </div>\r\n                        <div class=\"praxis-info\" v-if=\"item.type_id == 1\">\r\n                            <div class=\"answer\" v-for=\"(itemChild, indexChild) in item.optionsArray\" :key=\"indexChild\">\r\n                                <div :class=\"{\r\n                                    'answer-title': true,\r\n                                    'checked': item.user_answer == itemChild.label,\r\n                                    'right-checked': item.options_answer == itemChild.label\r\n                                }\" class=\"answer-title\" @click=\"check_answer(index, indexChild)\">{{ itemChild.label\r\n                                    }}</div>\r\n                                <div class=\"answer-desc\">{{ itemChild.title }}</div>\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"praxis-info\" v-if=\"item.type_id == 3 || item.type_id == 6\">\r\n                            <div style=\"display: inline;\" v-html=\"item.title\"></div>\r\n                            <div style=\"display: inline;\">你的答案是：{{ item.user_answer }}</div>\r\n                        </div>\r\n                        <div class=\"praxis-info\" v-if=\"item.type_id == 4\">\r\n                            <div class=\"answer\" v-for=\"(itemChild, indexChild) in item.optionsArray\" :key=\"indexChild\">\r\n                                <div :class=\"{\r\n                                    'answer-title': true,\r\n                                    'checked': !arrayContains(itemChild.label, item.options_answer),\r\n                                    'right-checked': arrayContains(itemChild.label, item.options_answer)\r\n                                }\" class=\"answer-title\" @click=\"check_answer(index, indexChild)\">{{ itemChild.label\r\n                                    }}</div>\r\n                                <div class=\"answer-desc\">{{ itemChild.title }}</div>\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"praxis-info\" v-if=\"item.type_id == 2\">\r\n                            <div class=\"input-answer-box\" v-for=\"(itemChild, indexChild) in item.title\"\r\n                                :key=\"indexChild\">\r\n                                <!-- 如果是文本块，直接显示 -->\r\n                                <span v-if=\"!itemChild.isInput\">\r\n                                    <div style=\"display: inline;\" v-html=\"itemChild.text\"></div>\r\n                                </span>\r\n                                <span v-else style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\">\r\n                                    <span style=\"color: #3CC57C;\"\r\n                                        v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 1\">\r\n                                        {{ jobAnswerList[index][itemChild.inputIndex1].answer }}\r\n                                    </span>\r\n                                    <span\r\n                                        v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer\"\r\n                                        style=\"color: red;\">\r\n                                        {{ jobAnswerList[index][itemChild.inputIndex1].answer }}\r\n                                    </span>\r\n                                    <span\r\n                                        v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer == ''\"\r\n                                        style=\"color: red;\">\r\n                                        未作\r\n                                    </span>\r\n                                </span>\r\n                                <!-- 如果是输入框，动态生成\r\n                                <span style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\"\r\n                                    v-if=\"item.user_answer[itemChild.inputIndex] != ''\">\r\n                                    <span <span\r\n                                        :style=\"{ color: itemChild.inputIndex < jobAnswerList[index].length && jobAnswerList[index][itemChild.inputIndex].is_right == 1 ? '#3CC57C' : '#FF0000' }\">{{\r\n                                            item.user_answer[itemChild.inputIndex] }}</span>\r\n                                </span>\r\n                                <span style=\"border-bottom: 1px solid #54a4ee;color: #F85353;padding: 0 10px 0 0;\"\r\n                                    v-else>\r\n                                    未做\r\n                                </span> -->\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"praxis-info\" v-if=\"item.type_id == 5\">\r\n                            <div class=\"input-answer-box\" v-for=\"(itemChild, indexChild) in item.title\"\r\n                                :key=\"indexChild\">\r\n                                <!-- 如果是文本块，直接显示 -->\r\n                                <span v-if=\"!itemChild.isInput\">\r\n                                    <div style=\"display: inline;\" v-html=\"itemChild.text\"></div>\r\n                                </span>\r\n                                <span v-else style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\">\r\n                                    <span style=\"color: #3CC57C;\"\r\n                                        v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 1\">{{\r\n                                            jobAnswerList[index][itemChild.inputIndex1].answer }}</span>\r\n                                    <span\r\n                                        v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer\"\r\n                                        style=\"color: red;\">\r\n                                        {{ jobAnswerList[index][itemChild.inputIndex1].answer }}\r\n                                    </span>\r\n                                    <span\r\n                                        v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer == ''\"\r\n                                        style=\"color: red;\">\r\n                                        未作\r\n                                    </span>\r\n                                </span>\r\n                                <!-- 如果是输入框，动态生成\r\n                                <span style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\"\r\n                                    v-if=\"item.user_answer[itemChild.inputIndex] != ''\">\r\n                                    <span\r\n                                        :style=\"{ color: itemChild.inputIndex < jobAnswerList[index].length && jobAnswerList[index][itemChild.inputIndex].is_right ? '#3CC57C' : '#FF0000' }\">\r\n                                        {{ item.user_answer[itemChild.inputIndex] }}\r\n                                    </span>\r\n                                </span>\r\n                                <span style=\"border-bottom: 1px solid #54a4ee;color: #F85353;padding: 0 10px 0 0;\"\r\n                                    v-else>\r\n                                    未做\r\n                                </span> -->\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"praxis-info\" v-if=\"item.type_id == 7\">\r\n                            <div class=\"input-answer-box\" v-for=\"(itemChild, indexChild) in item.title\"\r\n                                :key=\"indexChild\">\r\n                                <!-- 如果是文本块，直接显示 -->\r\n                                <span v-if=\"!itemChild.isInput\">\r\n                                    <div style=\"display: inline;\" v-html=\"itemChild.text\"></div>\r\n                                </span>\r\n\r\n                                <span v-else style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\">\r\n                                    <span style=\"color: #3CC57C;\"\r\n                                        v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 1\">{{\r\n                                            jobAnswerList[index][itemChild.inputIndex1].answer }}</span>\r\n                                    <span\r\n                                        v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer\"\r\n                                        style=\"color: red;\">\r\n                                        {{ jobAnswerList[index][itemChild.inputIndex1].answer }}\r\n                                    </span>\r\n                                    <span\r\n                                        v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer == ''\"\r\n                                        style=\"color: red;\">\r\n                                        未作\r\n                                    </span>\r\n                                </span>\r\n                                <!-- 如果是输入框，动态生成\r\n                                <span style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\"\r\n                                    v-if=\"item.user_answer[itemChild.inputIndex] != ''\">\r\n                                    <span\r\n                                        :style=\"{ color: itemChild.inputIndex < jobAnswerList[index].length && jobAnswerList[index][itemChild.inputIndex].is_right ? '#3CC57C' : '#FF0000' }\">\r\n                                        {{ item.user_answer[itemChild.inputIndex] }}\r\n                                    </span>\r\n                                </span>\r\n                                <span style=\"border-bottom: 1px solid #54a4ee;color: orange;padding: 0 10px 0 0;\"\r\n                                    v-else>\r\n                                    未做\r\n                                </span> -->\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"answer-option\" v-if=\"item.type_id == 1\">正确答案是：{{ item.options_answer }} <br>\r\n                            你的答案是：{{\r\n                                item.user_answer }}\r\n                        </div>\r\n                        <div class=\"answer-option\" v-if=\"item.type_id == 2\">正确答案是：\r\n                            <br>\r\n                            <span v-for=\"(a, b) in item.right_answer\" :key=\"b\" class=\"answer-item\">({{\r\n                                b + 1 }})&nbsp;&nbsp;{{\r\n                                    a }}&nbsp;&nbsp;\r\n                            </span>\r\n                            <br>\r\n                            你的答案是：<br>\r\n                            <span v-for=\"(ua, ub) in item.user_answer\" :key=\"ub\" class=\"answer-item\">\r\n                                ({{ ub\r\n                                    + 1 }})&nbsp;&nbsp;{{ ua\r\n                                }}&nbsp;&nbsp;\r\n                            </span>\r\n                        </div>\r\n                        <div class=\"answer-option\" v-if=\"item.type_id == 4\">正确答案是：<br>\r\n                            <span>\r\n                                {{ item.options_answer }}\r\n                            </span>\r\n                            <br>你的答案是：<br>\r\n                            <span>{{\r\n                                item.user_answer }}\r\n                            </span>\r\n                        </div>\r\n                        <div class=\"answer-option\" v-if=\"item.type_id == 5\">正确答案是：<br>\r\n                            <span v-for=\"(a, b) in item.options_answer\" :key=\"b\" class=\"answer-item\">\r\n                                ({{ b + 1 }})&nbsp;&nbsp;{{\r\n                                    a.title }}&nbsp;&nbsp;\r\n                            </span><br>你的答案是：<br>\r\n                            <span v-for=\"(ua, ub) in item.user_answer\" :key=\"ub\" class=\"answer-item\">({{ ub + 1\r\n                                }})&nbsp;&nbsp;{{\r\n                                    ua }}&nbsp;&nbsp;\r\n                            </span>\r\n                        </div>\r\n                        <div class=\"answer-option\" v-if=\"item.type_id == 7\">正确答案是：<br>\r\n                            <span v-for=\"(a, b) in item.options_answer\" :key=\"b\" class=\"answer-item\">\r\n                                ({{ b + 1 }})&nbsp;&nbsp;{{\r\n                                    a.title }}&nbsp;&nbsp;\r\n                            </span><br>你的答案是：<br>\r\n                            <span v-for=\"(ua, ub) in item.user_answer\" :key=\"ub\" class=\"answer-item\">({{ ub + 1\r\n                                }})&nbsp;&nbsp;{{\r\n                                    ua }}&nbsp;&nbsp;\r\n                            </span>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                <div class=\"wall\"></div>\r\n\r\n            </van-tab>\r\n            <van-tab>\r\n                <template #title>原文 </template>\r\n                <div class=\"wrap-text\" v-html=\"normalizeContent(resources.resources.content)\"></div>\r\n            </van-tab>\r\n        </van-tabs>\r\n\r\n        <div class=\"wall-report\">答题报告</div>\r\n        <div class=\"answer-box\">\r\n            <div class=\"box-top\">\r\n                <div class=\"right-num\">{{ answer_info.row.right_count }}</div>\r\n                <div class=\"total-num\">/{{ answer_info.row.total_count }}</div>\r\n                <div class=\"report-desc\">共{{ answer_info.row.total_count }}题，答对{{ answer_info.row.right_count\r\n                    }}题</div>\r\n            </div>\r\n            <div class=\"bottom-line\"></div>\r\n            <div class=\"second-box\">\r\n                <div class=\"submit-time\">交卷时间：{{ jobAnswerList1[0].create_time }}</div>\r\n                <div class=\"result\">正确率：{{ ((answer_info.row.right_count / answer_info.row.total_count) *\r\n                    100).toFixed(2) }}%\r\n                </div>\r\n            </div>\r\n        </div>\r\n        <RelList :resource_id=\"resources_id\" />\r\n        <div class=\"praxis-bottom\">\r\n            <div class=\"new-audio\">\r\n                <audio ref=\"audioPlayer\" @timeupdate=\"updateTime\" @loadedmetadata=\"loadMetadata\" @canplay=\"canPlay\"\r\n                    :src=\"src\">\r\n                </audio>\r\n                <img v-if=\"audio_status == 1\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/start.png\"\r\n                    @click=\"audioPlay\" mode=\"\" class=\"start-img\" />\r\n                <img v-if=\"audio_status == 2\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/zanting.png\"\r\n                    @click=\"audioPause\" mode=\"\" class=\"start-img\" />\r\n            </div>\r\n            <div class=\"audio-info\">\r\n                <div class=\"progress\">\r\n                    <van-progress :percentage=\"percentage\" track-color=\"#E3E3E3\" color=\"#6EE6FF\" :show-pivot=\"false\" />\r\n                </div>\r\n                <div class=\"now-time\">{{ currentTime }}</div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getsHistory, getHistoryInfo } from '@/api/listen'\r\nimport RelList from \"../../components/RelList\";\r\nimport { normalizeHtmlEntities } from '@/utils/html'\r\nexport default {\r\n    components: { RelList },\r\n    name: 'Detail',\r\n    data() {\r\n        return {\r\n            praxis_show: false,\r\n            show: false,\r\n            activeTitle: 0,\r\n            active: 0,\r\n            resources: [],\r\n            jobList: [],\r\n            src: [],\r\n            his_id: 0,\r\n            resources_id: 0,\r\n            percentage: 0,\r\n            has_answer: 0,\r\n            currentTime: '0:00',\r\n            audio_status: 1,\r\n            insertWordAnswers: [],\r\n            caninput: false,\r\n            this_job_id: 0,\r\n            this_inputIndex: 0,\r\n            ListAnswer: [],\r\n            answer_info: [],\r\n            jobAnswerList: [],\r\n            RelList: [],\r\n            right_bfb: 0,\r\n            globalInputIndex: 0,\r\n            resource_id: 0\r\n        }\r\n    },\r\n    methods: {\r\n        normalizeContent(content) {\r\n            return normalizeHtmlEntities(content)\r\n        },\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        arrayContains(value, array) {\r\n            return array.includes(value);\r\n        },\r\n        async getsHistory() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getsHistory({ sid: user.sid, resource_id: this.resources_id, s_id: this.his_id })\r\n                    const data = response.data\r\n                    var jobList = response.data.jobList;\r\n                    jobList.forEach(item => {\r\n                        if (item.type_id !== 3 || item.type_id !== 6) {\r\n                            item.is_check = 0;\r\n                            if (item.user_answer != null) {\r\n                                item.user_answer = item.user_answer.replace(/\\|$/, '');\r\n                            }\r\n                            if (item.optionsArray == null) {\r\n                                item.optionsArray = JSON.parse(item.options)\r\n                                if (item.type_id == 7) {\r\n                                    item.optionsArray = JSON.parse(item.options_answer)\r\n                                }\r\n                                item.right_answer = ''\r\n                                item.optionsArray.forEach(child => {\r\n                                    child.is_check = 0;\r\n                                    item.right_answer += child.title + '|'\r\n\r\n                                });\r\n\r\n                            }\r\n                            if (item.type_id == 5 || item.type_id == 7) {\r\n                                item.options_answer = JSON.parse(item.options_answer)\r\n                            }\r\n                            item.optionsArray.forEach(child => {\r\n                                child.is_check = 0;\r\n                            });\r\n                            if (item.type_id == 2) {\r\n                                item.right_answer = item.right_answer.replace(/\\|$/, '');\r\n                                item.title = this.parsedContent(item.title, item.id)\r\n                                item.user_answer = item.user_answer.split(/[|]/)\r\n                                item.right_answer = item.right_answer.split(/[|]/)\r\n                                console.log(item.right_answer)\r\n                            }\r\n                            if (item.type_id == 5) {\r\n                                item.right_answer = item.right_answer.replace(/\\|$/, '');\r\n                                item.title = this.parsedContent(item.title, item.id)\r\n                                item.user_answer = item.user_answer.split(/[|]/)\r\n                                item.right_answer = item.right_answer.split(/[|]/)\r\n                                console.log(item.right_answer)\r\n                            }\r\n                            if (item.type_id == 7) {\r\n                                item.right_answer = item.right_answer.replace(/\\|$/, '');\r\n                                item.title = this.parsedContent(item.title, item.id)\r\n                                item.user_answer = item.user_answer.split(/[|]/)\r\n                                item.right_answer = item.right_answer.split(/[|]/)\r\n                                console.log(item)\r\n                            }\r\n                            if (item.type_id == 4) {\r\n                                item.right_answer = item.right_answer.replace(/\\|$/, '');\r\n\r\n                            }\r\n                        }\r\n                    });\r\n                    this.resources = data\r\n                    console.log(this.resources)\r\n                    this.jobList = jobList\r\n                    this.src = data.resources.file_path\r\n                    this.getHistoryInfo()\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n\r\n        async getHistoryInfo() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getHistoryInfo({ sid: user.sid, resource_id: this.resources_id, s_id: this.his_id })\r\n                    const data = response.data\r\n                    this.answer_info = data\r\n                    const jobList = this.jobList;\r\n                    const jobAnswerList = data.array;\r\n                    // 使用 Map 来存储 jobAnswerList\r\n\r\n                    console.log('工作列表:', jobList);\r\n                    console.log('答案列表:', jobAnswerList);\r\n\r\n                    const answerMap = new Map();\r\n                    jobAnswerList.forEach(v => {\r\n                        if (!answerMap.has(v.job_id)) {\r\n                            answerMap.set(v.job_id, []);\r\n                        }\r\n                        answerMap.get(v.job_id).push(v);\r\n                    });\r\n\r\n                    const new_answer = jobList.map(job => {\r\n                        const answers = answerMap.get(job.id);\r\n                        console.log(`job.id=${job.id}, 对应的答案:`, answers);\r\n                        return answers || [];\r\n                    });\r\n\r\n                    console.log('匹配后的答案:', new_answer);\r\n\r\n                    this.jobAnswerList = new_answer;\r\n                    this.jobAnswerList1 = data.array;\r\n                    // 确保更新视图\r\n                    this.$forceUpdate();\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async check_answer(itemIndex, indexChild) {\r\n            var jobList = this.jobList\r\n            console.log(itemIndex)\r\n            jobList.forEach((val, key) => {\r\n                if (key == itemIndex) {\r\n                    val.is_check = 1;\r\n                    val.optionsArray.forEach((child, index) => {\r\n                        if (indexChild == index) {\r\n                            child.is_check = 1\r\n                        } else {\r\n                            child.is_check = 0\r\n                        }\r\n                    });\r\n                }\r\n            })\r\n            var has_answer = 0\r\n            jobList.forEach(val => {\r\n                val.optionsArray.forEach(child => {\r\n                    if (child.is_check == 1) {\r\n                        has_answer++\r\n                    }\r\n                });\r\n\r\n            })\r\n            this.jobList = jobList\r\n            this.has_answer = has_answer\r\n        },\r\n        async change_card() {\r\n            this.show = !this.show\r\n            console.log(this.jobList)\r\n        },\r\n        // async audioPlay() {\r\n        //     this.$refs.audioPlayer.play();\r\n        // },\r\n        // async audioPause() {\r\n        //     this.$refs.audioPlayer.pause();\r\n        //     this.audio_status = 1\r\n        // },\r\n\r\n        async audioPlay() {\r\n            this.audio_status = 2\r\n            this.$refs.audioPlayer.play();\r\n        },\r\n        async audioPause() {\r\n            this.$refs.audioPlayer.pause();\r\n            this.audio_status = 1\r\n        },\r\n\r\n        updateTime(event) {\r\n            const audio = event.target;\r\n            this.currentTime = this.formatTime(audio.currentTime);\r\n            console.log(audio.currentTime)\r\n            console.log(audio.duration)\r\n            this.percentage = Math.floor((audio.currentTime / audio.duration) * 100);\r\n        },\r\n        loadMetadata(event) {\r\n            const audio = event.target;\r\n            this.duration = this.formatTime(audio.duration);\r\n        },\r\n        canPlay() {\r\n            console.log('Audio can play through.');\r\n        },\r\n        formatTime(seconds) {\r\n            const m = Math.floor(seconds / 60) % 60;\r\n            const s = Math.floor(seconds) % 60;\r\n            return `${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;\r\n        },\r\n        // 解析字符串，生成文本和输入框的块数组\r\n        // 解析字符串，生成文本和输入框的块数组\r\n        parsedContent(str, index_id) {\r\n            const chunks = [];\r\n            let lastIndex = 0;\r\n\r\n            // 替换特定格式的占位符\r\n            str = str.replace(/__（/g, '_(');\r\n            str = str.replace(/）__/g, ')_');\r\n\r\n            // 匹配占位符\r\n            const regex = /_\\((\\d+)\\)_+/g;\r\n            let match;\r\n\r\n            // // // 移除 HTML 标签，但保留 <br>\r\n            str = str.replace(/<\\/?[^>]+(>|$)/g, (match) => {\r\n                if (match.startsWith('<br')) return '<br>';\r\n                if (match.startsWith('<em')) return '<em>';\r\n                if (match.startsWith('</em')) return '</em>';\r\n                if (match.startsWith('</strong')) return '</strong>';\r\n                if (match.startsWith('<strong')) return '<strong>';\r\n                if (match.startsWith('<table')) return '<table>';\r\n                if (match.startsWith('</table')) return '</table>';\r\n                if (match.startsWith('<tbody')) return '<tbody>';\r\n                if (match.startsWith('</tbody')) return '</tbody>';\r\n                if (match.startsWith('<th')) return '<th>';\r\n                if (match.startsWith('</th')) return '</th>';\r\n                if (match.startsWith('<tr')) return '<tr>';\r\n                if (match.startsWith('</tr')) return '</tr>';\r\n                if (match.startsWith('<td')) return '<td>';\r\n                if (match.startsWith('</td')) return '</td>';\r\n                // if (match.startsWith('<p')) return '<p>';\r\n                if (match.startsWith('</p')) return '</p>';\r\n                if (match.startsWith('<img')) return match.replace(/<img/, '<img style=\"width: 120%;\"');\r\n                return '';\r\n            });\r\n            //console.log(str)\r\n            // 逐个匹配字符串中的填空占位符\r\n            var inputIndex1 = 0\r\n            while ((match = regex.exec(str)) !== null) {\r\n                const inputIndex = this.globalInputIndex;\r\n\r\n                // 处理占位符之前的文本部分\r\n                if (match.index > lastIndex) {\r\n                    const textChunk = str.slice(lastIndex, match.index);\r\n                    chunks.push({ isInput: false, text: textChunk });\r\n                }\r\n\r\n                // 添加输入框\r\n                chunks.push({ isInput: true, inputIndex, inputIndex1 });\r\n                inputIndex1++\r\n                lastIndex = regex.lastIndex;\r\n                this.globalInputIndex++; // 累加 inputIndex\r\n            }\r\n\r\n            // 处理末尾的文本部分\r\n            if (lastIndex < str.length) {\r\n                const textChunk = str.slice(lastIndex);\r\n                chunks.push({ isInput: false, text: textChunk });\r\n            }\r\n\r\n            // 初始化对应的 insertWordAnswers 数组\r\n            if (!this.insertWordAnswers[index_id]) {\r\n                this.$set(this.insertWordAnswers, index_id, []);\r\n            }\r\n            console.log(\"2wryuu\")\r\n            console.log(chunks)\r\n            return chunks;\r\n        },\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        // 在组件挂载后立即获取任务数据\r\n        this.his_id = this.$route.query.his_id;\r\n        this.resources_id = this.$route.query.resource_id;\r\n\r\n        this.getsHistory()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n.praxis-item {\r\n    width: 90%;\r\n    height: auto;\r\n    margin: 0 auto;\r\n    text-align: left;\r\n}\r\n\r\n.article {\r\n    width: 80vw;\r\n    height: auto;\r\n    margin: 8px auto;\r\n    padding-bottom: 60px;\r\n    margin-top: 40px;\r\n    text-align: justify;\r\n}\r\n\r\n.praxis {\r\n    padding-bottom: 200px;\r\n    text-align: justify\r\n}\r\n\r\n.praxis-title {\r\n    font-size: 14px;\r\n    color: #030303;\r\n    padding: 35px 0 10px 0;\r\n    /* width: 50px; */\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: left;\r\n}\r\n\r\n.praxis-desc {\r\n    font-size: 14px;\r\n    width: 90%;\r\n    height: auto;\r\n    padding: 10px 0;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    font-weight: normal;\r\n}\r\n\r\n.praxis-info {\r\n    width: 90%;\r\n    height: auto;\r\n    background: #FFFFFF;\r\n    white-space: normal;\r\n    /* 正常的空白处理，允许换行 */\r\n    word-break: keep-all;\r\n    /* 确保单词不被截断 */\r\n    overflow-wrap: anywhere;\r\n    word-spacing: 5px;\r\n    /* 单词太长时允许换行，不会强制截断 */\r\n}\r\n\r\n.answer-option {\r\n    width: 90%;\r\n    height: auto;\r\n    background: #FFFFFF;\r\n    white-space: normal;\r\n    /* 正常的空白处理，允许换行 */\r\n    word-break: keep-all;\r\n    /* 确保单词不被截断 */\r\n    overflow-wrap: anywhere;\r\n    /* 单词太长时允许换行，不会强制截断 */\r\n}\r\n\r\n.answer {\r\n    width: 100%;\r\n    /* height: 55px; */\r\n    height: auto;\r\n    margin: 20px 0;\r\n    display: flex;\r\n    justify-content: center;\r\n    align-items: center;\r\n}\r\n\r\n.answer-title {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 35px;\r\n    height: 35px;\r\n    background-color: lightgray;\r\n    border-radius: 35px;\r\n    line-height: 35px;\r\n    text-align: center;\r\n}\r\n\r\n/* .checked {\r\n    background: linear-gradient(180deg, #4499EE 0%, #9CE4FF 100%);\r\n} */\r\n\r\n.checked {\r\n    background: #F85353;\r\n}\r\n\r\n.right-checked {\r\n    background: #3CC57C;\r\n}\r\n\r\n.answer-desc {\r\n    padding-left: 10px;\r\n    font-size: 14px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 300px;\r\n}\r\n\r\n.wrap-text {\r\n    width: 90%;\r\n    height: auto;\r\n    margin: 0 auto;\r\n    text-align: left;\r\n    padding: 10px 0;\r\n}\r\n\r\n.praxis-bottom {\r\n    width: 100%;\r\n    height: 56px;\r\n    background: #FFFFFF;\r\n    box-shadow: 0px -2px 6px 1px rgba(80, 143, 206, 0.1);\r\n    border-radius: 0px;\r\n    position: fixed;\r\n    bottom: 0;\r\n}\r\n\r\n.new-audio {\r\n    width: 50px;\r\n    height: 50px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-left: 15px;\r\n}\r\n\r\n.start-img {\r\n    width: 50px;\r\n    height: 50px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n\r\n}\r\n\r\n.audio-info {\r\n    width: 300px;\r\n    height: 50px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 50px;\r\n    text-align: left;\r\n    color: #979797;\r\n    font-size: 12px;\r\n}\r\n\r\n.progress {\r\n    width: 225px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-top: 22px;\r\n}\r\n\r\n.now-time {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 50px;\r\n}\r\n\r\n.answer-has {\r\n    width: 325px;\r\n    height: 60px;\r\n    padding-left: 25x;\r\n}\r\n\r\n.jindu {\r\n    width: 205px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 60px;\r\n    font-size: 14px;\r\n    color: #979797;\r\n    /* text-align: left; */\r\n\r\n}\r\n\r\n.btn-ok-cn {\r\n    margin-top: 12px;\r\n    width: 118px;\r\n    height: 36px;\r\n    line-height: 36px;\r\n    background: #003F88;\r\n    border-radius: 23px;\r\n    /* margin: 0 auto; */\r\n    text-align: center;\r\n    color: #FFF;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.card-title {\r\n    width: 100vw;\r\n    height: 75px;\r\n    text-align: center;\r\n    line-height: 75px;\r\n    border-bottom: #E4E4E4 1px solid;\r\n    margin: 0 auto;\r\n    color: #000000;\r\n    font-weight: bold;\r\n    font-size: 16px;\r\n}\r\n\r\n.main-answer-card {\r\n    padding: 30px 40px 80px 40px;\r\n    text-align: left;\r\n}\r\n\r\n.card-item {\r\n    width: 34px;\r\n    height: 34px;\r\n    background: linear-gradient(180deg, #4499EE 0%, #9CE4FF 100%);\r\n    border-radius: 34px;\r\n    line-height: 34px;\r\n    text-align: center;\r\n    color: #FFF;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin: 10px 5px;\r\n}\r\n\r\n.card-item-empty {\r\n    background: #CBCBCB;\r\n}\r\n\r\n.btn-cancel {\r\n    position: absolute;\r\n    top: 26px;\r\n    right: 25px;\r\n}\r\n\r\n.btn-ok {\r\n    width: 288px;\r\n    height: 45px;\r\n    background: #003F88;\r\n    border-radius: 23px;\r\n    margin: 0 auto;\r\n    line-height: 45px;\r\n    text-align: center;\r\n    color: #FFF;\r\n    margin: 0 auto;\r\n}\r\n\r\n\r\n.input-answer-box {\r\n    width: auto;\r\n    display: inline;\r\n    line-height: 30px;\r\n    text-align: left;\r\n}\r\n\r\n.input_new {\r\n    width: 80%;\r\n    height: 200px;\r\n    padding-left: 20px;\r\n}\r\n\r\n.input_new>input {\r\n    width: 50%;\r\n    margin: 50px 20px;\r\n    padding: 10px 20px;\r\n}\r\n\r\n\r\n.answer-btn {\r\n    position: fixed;\r\n    bottom: 30%;\r\n    right: 10px;\r\n    width: 20px;\r\n    /* height: 80px; */\r\n    line-height: 20px;\r\n    text-align: center;\r\n    background-color: #96cbf7;\r\n    padding: 10px 0;\r\n    border-radius: 15px;\r\n    color: #FFF;\r\n    font-size: 12px;\r\n}\r\n\r\n\r\n\r\n.box-top {\r\n    width: 90vw;\r\n    height: 50px;\r\n    text-align: left;\r\n}\r\n\r\n.right-num {\r\n    padding: 11px 0 0 30px;\r\n    font-size: 30px;\r\n    font-weight: bold;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.total-num,\r\n.report-desc {\r\n    padding: 29px 0 0 0px;\r\n    font-size: 12px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.report-desc {\r\n    padding-left: 28px;\r\n}\r\n\r\n.bottom-line {\r\n    width: 340px;\r\n    height: 1px;\r\n    margin: 13px auto;\r\n    background-color: #E4E4E4;\r\n}\r\n\r\n.second-box {\r\n    width: 320px;\r\n    height: 25px;\r\n    margin: 0 auto;\r\n    font-size: 12px;\r\n    color: #656565;\r\n}\r\n\r\n.submit-time {\r\n    width: 200px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: left;\r\n}\r\n\r\n.result {\r\n    width: 120px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: right;\r\n}\r\n\r\n.result-box {\r\n    width: 320px;\r\n    height: auto;\r\n    margin: 0 auto;\r\n    font-size: 12px;\r\n    color: #656565;\r\n    text-align: left;\r\n}\r\n\r\n.wall-report {\r\n    width: 90%;\r\n    padding-left: 10%;\r\n    height: 60px;\r\n    line-height: 60px;\r\n    border-top: 1px solid #96cbf7;\r\n    border-bottom: 1px solid #96cbf7;\r\n    margin-top: 20px;\r\n    font-weight: bold;\r\n}\r\n\r\n.answer-item {\r\n    display: block;\r\n    width: auto;\r\n    /* height: 40px; */\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DetailHis.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DetailHis.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./DetailHis.vue?vue&type=template&id=69516ee4&scoped=true\"\nimport script from \"./DetailHis.vue?vue&type=script&lang=js\"\nexport * from \"./DetailHis.vue?vue&type=script&lang=js\"\nimport style0 from \"./DetailHis.vue?vue&type=style&index=0&id=69516ee4&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"69516ee4\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"praxis\"},[_c('van-nav-bar',{attrs:{\"title\":_vm.resources.resources.name,\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('van-tabs',{attrs:{\"color\":\"#6FDBFF\"},model:{value:(_vm.activeTitle),callback:function ($$v) {_vm.activeTitle=$$v},expression:\"activeTitle\"}},[_c('van-tab',{scopedSlots:_vm._u([{key:\"title\",fn:function(){return [_vm._v(\"做题 \")]},proxy:true}])},[_vm._l((_vm.jobList),function(item,index){return _c('div',{key:index},[_c('div',{staticClass:\"praxis-item\"},[_c('div',{staticClass:\"praxis-title\"},[_vm._v(\"题\"+_vm._s(index + 1))]),(item.type_id == 1 || item.type_id == 4)?_c('div',{staticClass:\"praxis-desc\"},[_c('div',{staticClass:\"wrap-text\",domProps:{\"innerHTML\":_vm._s(item.title)}})]):_vm._e(),(item.type_id == 1)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.optionsArray),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"answer\"},[_c('div',{staticClass:\"answer-title\",class:{\n                                'answer-title': true,\n                                'checked': item.user_answer == itemChild.label,\n                                'right-checked': item.options_answer == itemChild.label\n                            },on:{\"click\":function($event){return _vm.check_answer(index, indexChild)}}},[_vm._v(_vm._s(itemChild.label))]),_c('div',{staticClass:\"answer-desc\"},[_vm._v(_vm._s(itemChild.title))])])}),0):_vm._e(),(item.type_id == 3 || item.type_id == 6)?_c('div',{staticClass:\"praxis-info\"},[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(item.title)}}),_c('div',{staticStyle:{\"display\":\"inline\"}},[_vm._v(\"你的答案是：\"+_vm._s(item.user_answer))])]):_vm._e(),(item.type_id == 4)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.optionsArray),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"answer\"},[_c('div',{staticClass:\"answer-title\",class:{\n                                'answer-title': true,\n                                'checked': !_vm.arrayContains(itemChild.label, item.options_answer),\n                                'right-checked': _vm.arrayContains(itemChild.label, item.options_answer)\n                            },on:{\"click\":function($event){return _vm.check_answer(index, indexChild)}}},[_vm._v(_vm._s(itemChild.label))]),_c('div',{staticClass:\"answer-desc\"},[_vm._v(_vm._s(itemChild.title))])])}),0):_vm._e(),(item.type_id == 2)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.title),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"input-answer-box\"},[(!itemChild.isInput)?_c('span',[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(itemChild.text)}})]):_c('span',{staticStyle:{\"border-bottom\":\"1px solid #54a4ee\",\"padding\":\"0 10px 0 0\"}},[(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 1)?_c('span',{staticStyle:{\"color\":\"#3CC57C\"}},[_vm._v(\" \"+_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer)+\" \")]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer)?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" \"+_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer)+\" \")]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer == '')?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" 未作 \")]):_vm._e()])])}),0):_vm._e(),(item.type_id == 5)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.title),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"input-answer-box\"},[(!itemChild.isInput)?_c('span',[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(itemChild.text)}})]):_c('span',{staticStyle:{\"border-bottom\":\"1px solid #54a4ee\",\"padding\":\"0 10px 0 0\"}},[(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 1)?_c('span',{staticStyle:{\"color\":\"#3CC57C\"}},[_vm._v(_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer))]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer)?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" \"+_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer)+\" \")]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer == '')?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" 未作 \")]):_vm._e()])])}),0):_vm._e(),(item.type_id == 7)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.title),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"input-answer-box\"},[(!itemChild.isInput)?_c('span',[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(itemChild.text)}})]):_c('span',{staticStyle:{\"border-bottom\":\"1px solid #54a4ee\",\"padding\":\"0 10px 0 0\"}},[(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 1)?_c('span',{staticStyle:{\"color\":\"#3CC57C\"}},[_vm._v(_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer))]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer)?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" \"+_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer)+\" \")]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer == '')?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" 未作 \")]):_vm._e()])])}),0):_vm._e(),(item.type_id == 1)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是：\"+_vm._s(item.options_answer)+\" \"),_c('br'),_vm._v(\" 你的答案是：\"+_vm._s(item.user_answer)+\" \")]):_vm._e(),(item.type_id == 2)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是： \"),_c('br'),_vm._l((item.right_answer),function(a,b){return _c('span',{key:b,staticClass:\"answer-item\"},[_vm._v(\"(\"+_vm._s(b + 1)+\")  \"+_vm._s(a)+\"   \")])}),_c('br'),_vm._v(\" 你的答案是：\"),_c('br'),_vm._l((item.user_answer),function(ua,ub){return _c('span',{key:ub,staticClass:\"answer-item\"},[_vm._v(\" (\"+_vm._s(ub + 1)+\")  \"+_vm._s(ua)+\"   \")])})],2):_vm._e(),(item.type_id == 4)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是：\"),_c('br'),_c('span',[_vm._v(\" \"+_vm._s(item.options_answer)+\" \")]),_c('br'),_vm._v(\"你的答案是：\"),_c('br'),_c('span',[_vm._v(_vm._s(item.user_answer)+\" \")])]):_vm._e(),(item.type_id == 5)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是：\"),_c('br'),_vm._l((item.options_answer),function(a,b){return _c('span',{key:b,staticClass:\"answer-item\"},[_vm._v(\" (\"+_vm._s(b + 1)+\")  \"+_vm._s(a.title)+\"   \")])}),_c('br'),_vm._v(\"你的答案是：\"),_c('br'),_vm._l((item.user_answer),function(ua,ub){return _c('span',{key:ub,staticClass:\"answer-item\"},[_vm._v(\"(\"+_vm._s(ub + 1)+\")  \"+_vm._s(ua)+\"   \")])})],2):_vm._e(),(item.type_id == 7)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是：\"),_c('br'),_vm._l((item.options_answer),function(a,b){return _c('span',{key:b,staticClass:\"answer-item\"},[_vm._v(\" (\"+_vm._s(b + 1)+\")  \"+_vm._s(a.title)+\"   \")])}),_c('br'),_vm._v(\"你的答案是：\"),_c('br'),_vm._l((item.user_answer),function(ua,ub){return _c('span',{key:ub,staticClass:\"answer-item\"},[_vm._v(\"(\"+_vm._s(ub + 1)+\")  \"+_vm._s(ua)+\"   \")])})],2):_vm._e()])])}),_c('div',{staticClass:\"wall\"})],2),_c('van-tab',{scopedSlots:_vm._u([{key:\"title\",fn:function(){return [_vm._v(\"原文 \")]},proxy:true}])},[_c('div',{staticClass:\"wrap-text\",domProps:{\"innerHTML\":_vm._s(_vm.normalizeContent(_vm.resources.resources.content))}})])],1),_c('div',{staticClass:\"wall-report\"},[_vm._v(\"答题报告\")]),_c('div',{staticClass:\"answer-box\"},[_c('div',{staticClass:\"box-top\"},[_c('div',{staticClass:\"right-num\"},[_vm._v(_vm._s(_vm.answer_info.row.right_count))]),_c('div',{staticClass:\"total-num\"},[_vm._v(\"/\"+_vm._s(_vm.answer_info.row.total_count))]),_c('div',{staticClass:\"report-desc\"},[_vm._v(\"共\"+_vm._s(_vm.answer_info.row.total_count)+\"题，答对\"+_vm._s(_vm.answer_info.row.right_count)+\"题\")])]),_c('div',{staticClass:\"bottom-line\"}),_c('div',{staticClass:\"second-box\"},[_c('div',{staticClass:\"submit-time\"},[_vm._v(\"交卷时间：\"+_vm._s(_vm.jobAnswerList[0].create_time))]),_c('div',{staticClass:\"result\"},[_vm._v(\"正确率：\"+_vm._s(((_vm.answer_info.row.right_count / _vm.answer_info.row.total_count) * 100).toFixed(2))+\"% \")])])]),_c('div',{staticClass:\"praxis-bottom\"},[_c('div',{staticClass:\"new-audio\"},[_c('audio',{ref:\"audioPlayer\",attrs:{\"src\":_vm.src},on:{\"timeupdate\":_vm.updateTime,\"loadedmetadata\":_vm.loadMetadata,\"canplay\":_vm.canPlay}}),(_vm.audio_status == 1)?_c('img',{staticClass:\"start-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/start.png\",\"mode\":\"\"},on:{\"click\":_vm.audioPlay}}):_vm._e(),(_vm.audio_status == 2)?_c('img',{staticClass:\"start-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/zanting.png\",\"mode\":\"\"},on:{\"click\":_vm.audioPause}}):_vm._e()]),_c('div',{staticClass:\"audio-info\"},[_c('div',{staticClass:\"progress\"},[_c('van-progress',{attrs:{\"percentage\":_vm.percentage,\"track-color\":\"#E3E3E3\",\"color\":\"#6EE6FF\",\"show-pivot\":false}})],1),_c('div',{staticClass:\"now-time\"},[_vm._v(_vm._s(_vm.currentTime))])])])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"praxis\">\r\n        <van-nav-bar :title=\"resources.resources.name\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <van-tabs v-model=\"activeTitle\" color=\"#6FDBFF\">\r\n            <van-tab>\r\n                <template #title>做题 </template>\r\n                <div v-for=\"(item, index) in jobList\" :key=\"index\">\r\n                    <div class=\"praxis-item\">\r\n                        <div class=\"praxis-title\">题{{ index + 1 }}</div>\r\n                        <div class=\"praxis-desc\" v-if=\"item.type_id == 1 || item.type_id == 4\">\r\n                            <div class=\"wrap-text\" v-html=\"item.title\"></div>\r\n                        </div>\r\n                        <div class=\"praxis-info\" v-if=\"item.type_id == 1\">\r\n                            <div class=\"answer\" v-for=\"(itemChild, indexChild) in item.optionsArray\" :key=\"indexChild\">\r\n                                <div :class=\"{\r\n                                    'answer-title': true,\r\n                                    'checked': item.user_answer == itemChild.label,\r\n                                    'right-checked': item.options_answer == itemChild.label\r\n                                }\" class=\"answer-title\" @click=\"check_answer(index, indexChild)\">{{ itemChild.label\r\n                                    }}</div>\r\n                                <div class=\"answer-desc\">{{ itemChild.title }}</div>\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"praxis-info\" v-if=\"item.type_id == 3 || item.type_id == 6\">\r\n                            <div style=\"display: inline;\" v-html=\"item.title\"></div>\r\n                            <div style=\"display: inline;\">你的答案是：{{ item.user_answer }}</div>\r\n                        </div>\r\n                        <div class=\"praxis-info\" v-if=\"item.type_id == 4\">\r\n                            <div class=\"answer\" v-for=\"(itemChild, indexChild) in item.optionsArray\" :key=\"indexChild\">\r\n                                <div :class=\"{\r\n                                    'answer-title': true,\r\n                                    'checked': !arrayContains(itemChild.label, item.options_answer),\r\n                                    'right-checked': arrayContains(itemChild.label, item.options_answer)\r\n                                }\" class=\"answer-title\" @click=\"check_answer(index, indexChild)\">{{ itemChild.label\r\n                                    }}</div>\r\n                                <div class=\"answer-desc\">{{ itemChild.title }}</div>\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"praxis-info\" v-if=\"item.type_id == 2\">\r\n                            <div class=\"input-answer-box\" v-for=\"(itemChild, indexChild) in item.title\"\r\n                                :key=\"indexChild\">\r\n                                <!-- 如果是文本块，直接显示 -->\r\n                                <span v-if=\"!itemChild.isInput\">\r\n                                    <div style=\"display: inline;\" v-html=\"itemChild.text\"></div>\r\n                                </span>\r\n                                <span v-else style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\">\r\n                                    <span style=\"color: #3CC57C;\"\r\n                                        v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 1\">\r\n                                        {{ jobAnswerList[index][itemChild.inputIndex1].answer }}\r\n                                    </span>\r\n                                    <span\r\n                                        v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer\"\r\n                                        style=\"color: red;\">\r\n                                        {{ jobAnswerList[index][itemChild.inputIndex1].answer }}\r\n                                    </span>\r\n                                    <span\r\n                                        v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer == ''\"\r\n                                        style=\"color: red;\">\r\n                                        未作\r\n                                    </span>\r\n                                </span>\r\n                                <!-- 如果是输入框，动态生成\r\n                                <span style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\"\r\n                                    v-if=\"item.user_answer[itemChild.inputIndex] != ''\">\r\n                                    <span <span\r\n                                        :style=\"{ color: itemChild.inputIndex < jobAnswerList[index].length && jobAnswerList[index][itemChild.inputIndex].is_right == 1 ? '#3CC57C' : '#FF0000' }\">{{\r\n                                            item.user_answer[itemChild.inputIndex] }}</span>\r\n                                </span>\r\n                                <span style=\"border-bottom: 1px solid #54a4ee;color: #F85353;padding: 0 10px 0 0;\"\r\n                                    v-else>\r\n                                    未做\r\n                                </span> -->\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"praxis-info\" v-if=\"item.type_id == 5\">\r\n                            <div class=\"input-answer-box\" v-for=\"(itemChild, indexChild) in item.title\"\r\n                                :key=\"indexChild\">\r\n                                <!-- 如果是文本块，直接显示 -->\r\n                                <span v-if=\"!itemChild.isInput\">\r\n                                    <div style=\"display: inline;\" v-html=\"itemChild.text\"></div>\r\n                                </span>\r\n                                <span v-else style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\">\r\n                                    <span style=\"color: #3CC57C;\"\r\n                                        v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 1\">{{\r\n                                            jobAnswerList[index][itemChild.inputIndex1].answer }}</span>\r\n                                    <span\r\n                                        v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer\"\r\n                                        style=\"color: red;\">\r\n                                        {{ jobAnswerList[index][itemChild.inputIndex1].answer }}\r\n                                    </span>\r\n                                    <span\r\n                                        v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer == ''\"\r\n                                        style=\"color: red;\">\r\n                                        未作\r\n                                    </span>\r\n                                </span>\r\n                                <!-- 如果是输入框，动态生成\r\n                                <span style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\"\r\n                                    v-if=\"item.user_answer[itemChild.inputIndex] != ''\">\r\n                                    <span\r\n                                        :style=\"{ color: itemChild.inputIndex < jobAnswerList[index].length && jobAnswerList[index][itemChild.inputIndex].is_right ? '#3CC57C' : '#FF0000' }\">\r\n                                        {{ item.user_answer[itemChild.inputIndex] }}\r\n                                    </span>\r\n                                </span>\r\n                                <span style=\"border-bottom: 1px solid #54a4ee;color: #F85353;padding: 0 10px 0 0;\"\r\n                                    v-else>\r\n                                    未做\r\n                                </span> -->\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"praxis-info\" v-if=\"item.type_id == 7\">\r\n                            <div class=\"input-answer-box\" v-for=\"(itemChild, indexChild) in item.title\"\r\n                                :key=\"indexChild\">\r\n                                <!-- 如果是文本块，直接显示 -->\r\n                                <span v-if=\"!itemChild.isInput\">\r\n                                    <div style=\"display: inline;\" v-html=\"itemChild.text\"></div>\r\n                                </span>\r\n\r\n                                <span v-else style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\">\r\n                                    <span style=\"color: #3CC57C;\"\r\n                                        v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 1\">{{\r\n                                            jobAnswerList[index][itemChild.inputIndex1].answer }}</span>\r\n                                    <span\r\n                                        v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer\"\r\n                                        style=\"color: red;\">\r\n                                        {{ jobAnswerList[index][itemChild.inputIndex1].answer }}\r\n                                    </span>\r\n                                    <span\r\n                                        v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer == ''\"\r\n                                        style=\"color: red;\">\r\n                                        未作\r\n                                    </span>\r\n                                </span>\r\n                                <!-- 如果是输入框，动态生成\r\n                                <span style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\"\r\n                                    v-if=\"item.user_answer[itemChild.inputIndex] != ''\">\r\n                                    <span\r\n                                        :style=\"{ color: itemChild.inputIndex < jobAnswerList[index].length && jobAnswerList[index][itemChild.inputIndex].is_right ? '#3CC57C' : '#FF0000' }\">\r\n                                        {{ item.user_answer[itemChild.inputIndex] }}\r\n                                    </span>\r\n                                </span>\r\n                                <span style=\"border-bottom: 1px solid #54a4ee;color: orange;padding: 0 10px 0 0;\"\r\n                                    v-else>\r\n                                    未做\r\n                                </span> -->\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"answer-option\" v-if=\"item.type_id == 1\">正确答案是：{{ item.options_answer }} <br>\r\n                            你的答案是：{{\r\n                                item.user_answer }}\r\n                        </div>\r\n                        <div class=\"answer-option\" v-if=\"item.type_id == 2\">正确答案是：\r\n                            <br>\r\n                            <span v-for=\"(a, b) in item.right_answer\" :key=\"b\" class=\"answer-item\">({{\r\n                                b + 1 }})&nbsp;&nbsp;{{\r\n                                    a }}&nbsp;&nbsp;\r\n                            </span>\r\n                            <br>\r\n                            你的答案是：<br>\r\n                            <span v-for=\"(ua, ub) in item.user_answer\" :key=\"ub\" class=\"answer-item\">\r\n                                ({{ ub\r\n                                    + 1 }})&nbsp;&nbsp;{{ ua\r\n                                }}&nbsp;&nbsp;\r\n                            </span>\r\n                        </div>\r\n                        <div class=\"answer-option\" v-if=\"item.type_id == 4\">正确答案是：<br>\r\n                            <span>\r\n                                {{ item.options_answer }}\r\n                            </span>\r\n                            <br>你的答案是：<br>\r\n                            <span>{{\r\n                                item.user_answer }}\r\n                            </span>\r\n                        </div>\r\n                        <div class=\"answer-option\" v-if=\"item.type_id == 5\">正确答案是：<br>\r\n                            <span v-for=\"(a, b) in item.options_answer\" :key=\"b\" class=\"answer-item\">\r\n                                ({{ b + 1 }})&nbsp;&nbsp;{{\r\n                                    a.title }}&nbsp;&nbsp;\r\n                            </span><br>你的答案是：<br>\r\n                            <span v-for=\"(ua, ub) in item.user_answer\" :key=\"ub\" class=\"answer-item\">({{ ub + 1\r\n                                }})&nbsp;&nbsp;{{\r\n                                    ua }}&nbsp;&nbsp;\r\n                            </span>\r\n                        </div>\r\n                        <div class=\"answer-option\" v-if=\"item.type_id == 7\">正确答案是：<br>\r\n                            <span v-for=\"(a, b) in item.options_answer\" :key=\"b\" class=\"answer-item\">\r\n                                ({{ b + 1 }})&nbsp;&nbsp;{{\r\n                                    a.title }}&nbsp;&nbsp;\r\n                            </span><br>你的答案是：<br>\r\n                            <span v-for=\"(ua, ub) in item.user_answer\" :key=\"ub\" class=\"answer-item\">({{ ub + 1\r\n                                }})&nbsp;&nbsp;{{\r\n                                    ua }}&nbsp;&nbsp;\r\n                            </span>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                <div class=\"wall\"></div>\r\n\r\n            </van-tab>\r\n            <van-tab>\r\n                <template #title>原文 </template>\r\n                <div class=\"wrap-text\" v-html=\"normalizeContent(resources.resources.content)\"></div>\r\n            </van-tab>\r\n        </van-tabs>\r\n\r\n        <div class=\"wall-report\">答题报告</div>\r\n        <div class=\"answer-box\">\r\n            <div class=\"box-top\">\r\n                <div class=\"right-num\">{{ answer_info.row.right_count }}</div>\r\n                <div class=\"total-num\">/{{ answer_info.row.total_count }}</div>\r\n                <div class=\"report-desc\">共{{ answer_info.row.total_count }}题，答对{{ answer_info.row.right_count\r\n                    }}题</div>\r\n            </div>\r\n            <div class=\"bottom-line\"></div>\r\n            <div class=\"second-box\">\r\n                <div class=\"submit-time\">交卷时间：{{ jobAnswerList[0].create_time }}</div>\r\n                <div class=\"result\">正确率：{{ ((answer_info.row.right_count / answer_info.row.total_count) *\r\n                    100).toFixed(2) }}%\r\n                </div>\r\n            </div>\r\n        </div>\r\n\r\n        <div class=\"praxis-bottom\">\r\n            <div class=\"new-audio\">\r\n                <audio ref=\"audioPlayer\" @timeupdate=\"updateTime\" @loadedmetadata=\"loadMetadata\" @canplay=\"canPlay\"\r\n                    :src=\"src\">\r\n                </audio>\r\n                <img v-if=\"audio_status == 1\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/start.png\"\r\n                    @click=\"audioPlay\" mode=\"\" class=\"start-img\" />\r\n                <img v-if=\"audio_status == 2\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/zanting.png\"\r\n                    @click=\"audioPause\" mode=\"\" class=\"start-img\" />\r\n            </div>\r\n            <div class=\"audio-info\">\r\n                <div class=\"progress\">\r\n                    <van-progress :percentage=\"percentage\" track-color=\"#E3E3E3\" color=\"#6EE6FF\" :show-pivot=\"false\" />\r\n                </div>\r\n                <div class=\"now-time\">{{ currentTime }}</div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getsHistory, getHistoryInfo } from '@/api/listen'\r\nimport RelList from \"../../components/RelList\";\r\nimport { normalizeHtmlEntities } from '@/utils/html'\r\nexport default {\r\n    components: { RelList },\r\n    name: 'Detail',\r\n    data() {\r\n        return {\r\n            praxis_show: false,\r\n            show: false,\r\n            activeTitle: 0,\r\n            active: 0,\r\n            resources: [],\r\n            jobList: [],\r\n            src: [],\r\n            his_id: 0,\r\n            resources_id: 0,\r\n            percentage: 0,\r\n            has_answer: 0,\r\n            currentTime: '0:00',\r\n            audio_status: 1,\r\n            insertWordAnswers: [],\r\n            caninput: false,\r\n            this_job_id: 0,\r\n            this_inputIndex: 0,\r\n            ListAnswer: [],\r\n            answer_info: [],\r\n            jobAnswerList: [],\r\n            RelList: [],\r\n            right_bfb: 0,\r\n            globalInputIndex: 0,\r\n            resource_id: 0\r\n        }\r\n    },\r\n    methods: {\r\n        normalizeContent(content) {\r\n            return normalizeHtmlEntities(content)\r\n        },\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        arrayContains(value, array) {\r\n            return array.includes(value);\r\n        },\r\n        async getsHistory() {\r\n            try {\r\n\r\n                const response = await getsHistory({ sid: this.user_id, resource_id: this.resources_id, s_id: this.his_id })\r\n                const data = response.data\r\n                var jobList = response.data.jobList;\r\n                jobList.forEach(item => {\r\n                    if (item.type_id !== 3 || item.type_id !== 6) {\r\n                        item.is_check = 0;\r\n                        if (item.user_answer != null) {\r\n                            item.user_answer = item.user_answer.replace(/\\|$/, '');\r\n                        }\r\n                        if (item.optionsArray == null) {\r\n                            item.optionsArray = JSON.parse(item.options)\r\n                            if (item.type_id == 7) {\r\n                                item.optionsArray = JSON.parse(item.options_answer)\r\n                            }\r\n                            item.right_answer = ''\r\n                            item.optionsArray.forEach(child => {\r\n                                child.is_check = 0;\r\n                                item.right_answer += child.title + '|'\r\n\r\n                            });\r\n\r\n                        }\r\n                        if (item.type_id == 5 || item.type_id == 7) {\r\n                            item.options_answer = JSON.parse(item.options_answer)\r\n                        }\r\n                        item.optionsArray.forEach(child => {\r\n                            child.is_check = 0;\r\n                        });\r\n                        if (item.type_id == 2) {\r\n                            item.right_answer = item.right_answer.replace(/\\|$/, '');\r\n                            item.title = this.parsedContent(item.title, item.id)\r\n                            item.user_answer = item.user_answer.split(/[|]/)\r\n                            item.right_answer = item.right_answer.split(/[|]/)\r\n                            console.log(item.right_answer)\r\n                        }\r\n                        if (item.type_id == 5) {\r\n                            item.right_answer = item.right_answer.replace(/\\|$/, '');\r\n                            item.title = this.parsedContent(item.title, item.id)\r\n                            item.user_answer = item.user_answer.split(/[|]/)\r\n                            item.right_answer = item.right_answer.split(/[|]/)\r\n                            console.log(item.right_answer)\r\n                        }\r\n                        if (item.type_id == 7) {\r\n                            item.right_answer = item.right_answer.replace(/\\|$/, '');\r\n                            item.title = this.parsedContent(item.title, item.id)\r\n                            item.user_answer = item.user_answer.split(/[|]/)\r\n                            item.right_answer = item.right_answer.split(/[|]/)\r\n                            console.log(item)\r\n                        }\r\n                        if (item.type_id == 4) {\r\n                            item.right_answer = item.right_answer.replace(/\\|$/, '');\r\n\r\n                        }\r\n                    }\r\n                });\r\n                this.resources = data\r\n                console.log(this.resources)\r\n                this.jobList = jobList\r\n                this.src = data.resources.file_path\r\n                this.getHistoryInfo()\r\n\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n\r\n        async getHistoryInfo() {\r\n            try {\r\n                const response = await getHistoryInfo({ sid: this.user_id, resource_id: this.resources_id, s_id: this.his_id })\r\n                const data = response.data\r\n                this.answer_info = data\r\n                const jobList = this.jobList;\r\n                const jobAnswerList = data.array;\r\n                // 使用 Map 来存储 jobAnswerList\r\n\r\n                console.log('工作列表:', jobList);\r\n                console.log('答案列表:', jobAnswerList);\r\n\r\n                const answerMap = new Map();\r\n                jobAnswerList.forEach(v => {\r\n                    if (!answerMap.has(v.job_id)) {\r\n                        answerMap.set(v.job_id, []);\r\n                    }\r\n                    answerMap.get(v.job_id).push(v);\r\n                });\r\n\r\n                const new_answer = jobList.map(job => {\r\n                    const answers = answerMap.get(job.id);\r\n                    console.log(`job.id=${job.id}, 对应的答案:`, answers);\r\n                    return answers || [];\r\n                });\r\n\r\n                console.log('匹配后的答案:', new_answer);\r\n\r\n                this.jobAnswerList = new_answer;\r\n                this.jobAnswerList1 = data.array;\r\n                // 确保更新视图\r\n                this.$forceUpdate();\r\n\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async check_answer(itemIndex, indexChild) {\r\n            var jobList = this.jobList\r\n            console.log(itemIndex)\r\n            jobList.forEach((val, key) => {\r\n                if (key == itemIndex) {\r\n                    val.is_check = 1;\r\n                    val.optionsArray.forEach((child, index) => {\r\n                        if (indexChild == index) {\r\n                            child.is_check = 1\r\n                        } else {\r\n                            child.is_check = 0\r\n                        }\r\n                    });\r\n                }\r\n            })\r\n            var has_answer = 0\r\n            jobList.forEach(val => {\r\n                val.optionsArray.forEach(child => {\r\n                    if (child.is_check == 1) {\r\n                        has_answer++\r\n                    }\r\n                });\r\n\r\n            })\r\n            this.jobList = jobList\r\n            this.has_answer = has_answer\r\n        },\r\n        async change_card() {\r\n            this.show = !this.show\r\n            console.log(this.jobList)\r\n        },\r\n        // async audioPlay() {\r\n        //     this.$refs.audioPlayer.play();\r\n        // },\r\n        // async audioPause() {\r\n        //     this.$refs.audioPlayer.pause();\r\n        //     this.audio_status = 1\r\n        // },\r\n\r\n        async audioPlay() {\r\n            this.audio_status = 2\r\n            this.$refs.audioPlayer.play();\r\n        },\r\n        async audioPause() {\r\n            this.$refs.audioPlayer.pause();\r\n            this.audio_status = 1\r\n        },\r\n\r\n        updateTime(event) {\r\n            const audio = event.target;\r\n            this.currentTime = this.formatTime(audio.currentTime);\r\n            console.log(audio.currentTime)\r\n            console.log(audio.duration)\r\n            this.percentage = Math.floor((audio.currentTime / audio.duration) * 100);\r\n        },\r\n        loadMetadata(event) {\r\n            const audio = event.target;\r\n            this.duration = this.formatTime(audio.duration);\r\n        },\r\n        canPlay() {\r\n            console.log('Audio can play through.');\r\n        },\r\n        formatTime(seconds) {\r\n            const m = Math.floor(seconds / 60) % 60;\r\n            const s = Math.floor(seconds) % 60;\r\n            return `${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;\r\n        },\r\n        // 解析字符串，生成文本和输入框的块数组\r\n        // 解析字符串，生成文本和输入框的块数组\r\n        parsedContent(str, index_id) {\r\n            const chunks = [];\r\n            let lastIndex = 0;\r\n\r\n            // 替换特定格式的占位符\r\n            str = str.replace(/__（/g, '_(');\r\n            str = str.replace(/）__/g, ')_');\r\n\r\n            // 匹配占位符\r\n            const regex = /_\\((\\d+)\\)_+/g;\r\n            let match;\r\n\r\n            // // // 移除 HTML 标签，但保留 <br>\r\n            str = str.replace(/<\\/?[^>]+(>|$)/g, (match) => {\r\n                if (match.startsWith('<br')) return '<br>';\r\n                if (match.startsWith('<em')) return '<em>';\r\n                if (match.startsWith('</em')) return '</em>';\r\n                if (match.startsWith('</strong')) return '</strong>';\r\n                if (match.startsWith('<strong')) return '<strong>';\r\n                if (match.startsWith('<table')) return '<table>';\r\n                if (match.startsWith('</table')) return '</table>';\r\n                if (match.startsWith('<tbody')) return '<tbody>';\r\n                if (match.startsWith('</tbody')) return '</tbody>';\r\n                if (match.startsWith('<th')) return '<th>';\r\n                if (match.startsWith('</th')) return '</th>';\r\n                if (match.startsWith('<tr')) return '<tr>';\r\n                if (match.startsWith('</tr')) return '</tr>';\r\n                if (match.startsWith('<td')) return '<td>';\r\n                if (match.startsWith('</td')) return '</td>';\r\n                // if (match.startsWith('<p')) return '<p>';\r\n                if (match.startsWith('</p')) return '</p>';\r\n                if (match.startsWith('<img')) return match.replace(/<img/, '<img style=\"width: 120%;\"');\r\n                return '';\r\n            });\r\n            //console.log(str)\r\n            // 逐个匹配字符串中的填空占位符\r\n            var inputIndex1 = 0\r\n            while ((match = regex.exec(str)) !== null) {\r\n                const inputIndex = this.globalInputIndex;\r\n\r\n                // 处理占位符之前的文本部分\r\n                if (match.index > lastIndex) {\r\n                    const textChunk = str.slice(lastIndex, match.index);\r\n                    chunks.push({ isInput: false, text: textChunk });\r\n                }\r\n\r\n                // 添加输入框\r\n                chunks.push({ isInput: true, inputIndex, inputIndex1 });\r\n                inputIndex1++\r\n                lastIndex = regex.lastIndex;\r\n                this.globalInputIndex++; // 累加 inputIndex\r\n            }\r\n\r\n            // 处理末尾的文本部分\r\n            if (lastIndex < str.length) {\r\n                const textChunk = str.slice(lastIndex);\r\n                chunks.push({ isInput: false, text: textChunk });\r\n            }\r\n\r\n            // 初始化对应的 insertWordAnswers 数组\r\n            if (!this.insertWordAnswers[index_id]) {\r\n                this.$set(this.insertWordAnswers, index_id, []);\r\n            }\r\n            console.log(\"2wryuu\")\r\n            console.log(chunks)\r\n            return chunks;\r\n        },\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        // 在组件挂载后立即获取任务数据\r\n        this.his_id = this.$route.query.his_id;\r\n        this.resources_id = this.$route.query.resource_id;\r\n        this.user_id = this.$route.query.user_id;\r\n\r\n        this.getsHistory()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n.praxis-item {\r\n    width: 90%;\r\n    height: auto;\r\n    margin: 0 auto;\r\n    text-align: left;\r\n}\r\n\r\n.article {\r\n    width: 80vw;\r\n    height: auto;\r\n    margin: 8px auto;\r\n    padding-bottom: 60px;\r\n    margin-top: 40px;\r\n    text-align: justify;\r\n}\r\n\r\n.praxis {\r\n    padding-bottom: 200px;\r\n    text-align: justify\r\n}\r\n\r\n.praxis-title {\r\n    font-size: 14px;\r\n    color: #030303;\r\n    padding: 35px 0 10px 0;\r\n    /* width: 50px; */\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: left;\r\n}\r\n\r\n.praxis-desc {\r\n    font-size: 14px;\r\n    width: 90%;\r\n    height: auto;\r\n    padding: 10px 0;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    font-weight: normal;\r\n}\r\n\r\n.praxis-info {\r\n    width: 90%;\r\n    height: auto;\r\n    background: #FFFFFF;\r\n    white-space: normal;\r\n    /* 正常的空白处理，允许换行 */\r\n    word-break: keep-all;\r\n    /* 确保单词不被截断 */\r\n    overflow-wrap: anywhere;\r\n    word-spacing: 5px;\r\n    /* 单词太长时允许换行，不会强制截断 */\r\n}\r\n\r\n.answer-option {\r\n    width: 90%;\r\n    height: auto;\r\n    background: #FFFFFF;\r\n    white-space: normal;\r\n    /* 正常的空白处理，允许换行 */\r\n    word-break: keep-all;\r\n    /* 确保单词不被截断 */\r\n    overflow-wrap: anywhere;\r\n    /* 单词太长时允许换行，不会强制截断 */\r\n}\r\n\r\n.answer {\r\n    width: 100%;\r\n    /* height: 55px; */\r\n    height: auto;\r\n    margin: 20px 0;\r\n    display: flex;\r\n    justify-content: center;\r\n    align-items: center;\r\n}\r\n\r\n.answer-title {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 35px;\r\n    height: 35px;\r\n    background-color: lightgray;\r\n    border-radius: 35px;\r\n    line-height: 35px;\r\n    text-align: center;\r\n}\r\n\r\n/* .checked {\r\n    background: linear-gradient(180deg, #4499EE 0%, #9CE4FF 100%);\r\n} */\r\n\r\n.checked {\r\n    background: #F85353;\r\n}\r\n\r\n.right-checked {\r\n    background: #3CC57C;\r\n}\r\n\r\n.answer-desc {\r\n    padding-left: 10px;\r\n    font-size: 14px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 300px;\r\n}\r\n\r\n.wrap-text {\r\n    width: 90%;\r\n    height: auto;\r\n    margin: 0 auto;\r\n    text-align: left;\r\n    padding: 10px 0;\r\n}\r\n\r\n.praxis-bottom {\r\n    width: 100%;\r\n    height: 56px;\r\n    background: #FFFFFF;\r\n    box-shadow: 0px -2px 6px 1px rgba(80, 143, 206, 0.1);\r\n    border-radius: 0px;\r\n    position: fixed;\r\n    bottom: 0;\r\n}\r\n\r\n.new-audio {\r\n    width: 50px;\r\n    height: 50px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-left: 15px;\r\n}\r\n\r\n.start-img {\r\n    width: 50px;\r\n    height: 50px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n\r\n}\r\n\r\n.audio-info {\r\n    width: 300px;\r\n    height: 50px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 50px;\r\n    text-align: left;\r\n    color: #979797;\r\n    font-size: 12px;\r\n}\r\n\r\n.progress {\r\n    width: 225px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-top: 22px;\r\n}\r\n\r\n.now-time {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 50px;\r\n}\r\n\r\n.answer-has {\r\n    width: 325px;\r\n    height: 60px;\r\n    padding-left: 25x;\r\n}\r\n\r\n.jindu {\r\n    width: 205px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 60px;\r\n    font-size: 14px;\r\n    color: #979797;\r\n    /* text-align: left; */\r\n\r\n}\r\n\r\n.btn-ok-cn {\r\n    margin-top: 12px;\r\n    width: 118px;\r\n    height: 36px;\r\n    line-height: 36px;\r\n    background: #003F88;\r\n    border-radius: 23px;\r\n    /* margin: 0 auto; */\r\n    text-align: center;\r\n    color: #FFF;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.card-title {\r\n    width: 100vw;\r\n    height: 75px;\r\n    text-align: center;\r\n    line-height: 75px;\r\n    border-bottom: #E4E4E4 1px solid;\r\n    margin: 0 auto;\r\n    color: #000000;\r\n    font-weight: bold;\r\n    font-size: 16px;\r\n}\r\n\r\n.main-answer-card {\r\n    padding: 30px 40px 80px 40px;\r\n    text-align: left;\r\n}\r\n\r\n.card-item {\r\n    width: 34px;\r\n    height: 34px;\r\n    background: linear-gradient(180deg, #4499EE 0%, #9CE4FF 100%);\r\n    border-radius: 34px;\r\n    line-height: 34px;\r\n    text-align: center;\r\n    color: #FFF;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin: 10px 5px;\r\n}\r\n\r\n.card-item-empty {\r\n    background: #CBCBCB;\r\n}\r\n\r\n.btn-cancel {\r\n    position: absolute;\r\n    top: 26px;\r\n    right: 25px;\r\n}\r\n\r\n.btn-ok {\r\n    width: 288px;\r\n    height: 45px;\r\n    background: #003F88;\r\n    border-radius: 23px;\r\n    margin: 0 auto;\r\n    line-height: 45px;\r\n    text-align: center;\r\n    color: #FFF;\r\n    margin: 0 auto;\r\n}\r\n\r\n\r\n.input-answer-box {\r\n    width: auto;\r\n    display: inline;\r\n    line-height: 30px;\r\n    text-align: left;\r\n}\r\n\r\n.input_new {\r\n    width: 80%;\r\n    height: 200px;\r\n    padding-left: 20px;\r\n}\r\n\r\n.input_new>input {\r\n    width: 50%;\r\n    margin: 50px 20px;\r\n    padding: 10px 20px;\r\n}\r\n\r\n\r\n.answer-btn {\r\n    position: fixed;\r\n    bottom: 30%;\r\n    right: 10px;\r\n    width: 20px;\r\n    /* height: 80px; */\r\n    line-height: 20px;\r\n    text-align: center;\r\n    background-color: #96cbf7;\r\n    padding: 10px 0;\r\n    border-radius: 15px;\r\n    color: #FFF;\r\n    font-size: 12px;\r\n}\r\n\r\n\r\n\r\n.box-top {\r\n    width: 90vw;\r\n    height: 50px;\r\n    text-align: left;\r\n}\r\n\r\n.right-num {\r\n    padding: 11px 0 0 30px;\r\n    font-size: 30px;\r\n    font-weight: bold;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.total-num,\r\n.report-desc {\r\n    padding: 29px 0 0 0px;\r\n    font-size: 12px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.report-desc {\r\n    padding-left: 28px;\r\n}\r\n\r\n.bottom-line {\r\n    width: 340px;\r\n    height: 1px;\r\n    margin: 13px auto;\r\n    background-color: #E4E4E4;\r\n}\r\n\r\n.second-box {\r\n    width: 320px;\r\n    height: 25px;\r\n    margin: 0 auto;\r\n    font-size: 12px;\r\n    color: #656565;\r\n}\r\n\r\n.submit-time {\r\n    width: 200px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: left;\r\n}\r\n\r\n.result {\r\n    width: 120px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: right;\r\n}\r\n\r\n.result-box {\r\n    width: 320px;\r\n    height: auto;\r\n    margin: 0 auto;\r\n    font-size: 12px;\r\n    color: #656565;\r\n    text-align: left;\r\n}\r\n\r\n.wall-report {\r\n    width: 90%;\r\n    padding-left: 10%;\r\n    height: 60px;\r\n    line-height: 60px;\r\n    border-top: 1px solid #96cbf7;\r\n    border-bottom: 1px solid #96cbf7;\r\n    margin-top: 20px;\r\n    font-weight: bold;\r\n}\r\n\r\n.answer-item {\r\n    display: block;\r\n    width: auto;\r\n    /* height: 40px; */\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DetailHis_pre.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DetailHis_pre.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./DetailHis_pre.vue?vue&type=template&id=5d88674c&scoped=true\"\nimport script from \"./DetailHis_pre.vue?vue&type=script&lang=js\"\nexport * from \"./DetailHis_pre.vue?vue&type=script&lang=js\"\nimport style0 from \"./DetailHis_pre.vue?vue&type=style&index=0&id=5d88674c&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"5d88674c\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"report\"},[_c('div',{staticClass:\"main-top\"},[_c('van-nav-bar',{attrs:{\"title\":\"听力报告\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}})],1),_c('div',{staticClass:\"answer-box\"},[_c('div',{staticClass:\"box-top\"},[_c('div',{staticClass:\"right-num\"},[_vm._v(_vm._s(_vm.answer_info.rightCountTotal))]),_c('div',{staticClass:\"total-num\"},[_vm._v(\"/\"+_vm._s(_vm.answer_info.countTotal))]),_c('div',{staticClass:\"report-desc\"},[_vm._v(\"共\"+_vm._s(_vm.answer_info.countTotal)+\"题，答对\"+_vm._s(_vm.answer_info.rightCountTotal)+\"题\")])]),_c('div',{staticClass:\"bottom-line\"}),_c('div',{staticClass:\"second-box\"},[_c('div',{staticClass:\"submit-time\"},[_vm._v(\"交卷时间：\"+_vm._s(_vm.jobAnswerList[0].create_time))]),_c('div',{staticClass:\"result\"},[_vm._v(\"正确率：\"+_vm._s(_vm.right_bfb)+\"%\")])]),_c('div',{staticClass:\"result-box\"},_vm._l((_vm.jobAnswerList),function(item,index){return _c('div',{key:index,staticClass:\"result-item\",class:{ 'result-item-wrong': item.is_right == 0 },attrs:{\"data-index\":item},on:{\"click\":function($event){return _vm.to_detail(item, index)}}},[_vm._v(\" \"+_vm._s(index + 1)+\" \")])}),0),_vm._m(0)]),_c('RelList',{attrs:{\"resource_id\":_vm.resource_id}})],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"box-bottom\"},[_c('div',{staticClass:\"wrong-desc\"},[_vm._v(\"点击题目去看解析\")]),_c('div',{staticClass:\"lable-desc\"},[_c('div',{staticClass:\"cicle\"}),_c('div',{staticClass:\"desc\"},[_vm._v(\"未答\")])]),_c('div',{staticClass:\"lable-desc\"},[_c('div',{staticClass:\"cicle\",staticStyle:{\"background-color\":\"#3CC57C\"}}),_c('div',{staticClass:\"desc\"},[_vm._v(\"答对\")])]),_c('div',{staticClass:\"lable-desc\"},[_c('div',{staticClass:\"cicle\",staticStyle:{\"background-color\":\"#F85353\"}}),_c('div',{staticClass:\"desc\"},[_vm._v(\"答错\")])])])\n}]\n\nexport { render, staticRenderFns }","<template>\r\n  <div class=\"report\">\r\n    <div class=\"main-top\">\r\n      <van-nav-bar title=\"听力报告\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n    </div>\r\n\r\n    <div class=\"answer-box\">\r\n      <div class=\"box-top\">\r\n        <div class=\"right-num\">{{ answer_info.rightCountTotal }}</div>\r\n        <div class=\"total-num\">/{{ answer_info.countTotal }}</div>\r\n        <div class=\"report-desc\">共{{ answer_info.countTotal }}题，答对{{ answer_info.rightCountTotal\r\n          }}题</div>\r\n      </div>\r\n      <div class=\"bottom-line\"></div>\r\n      <div class=\"second-box\">\r\n        <div class=\"submit-time\">交卷时间：{{ jobAnswerList[0].create_time }}</div>\r\n        <div class=\"result\">正确率：{{ right_bfb }}%</div>\r\n      </div>\r\n      <div class=\"result-box\">\r\n        <div :class=\"{ 'result-item-wrong': item.is_right == 0 }\" class=\"result-item\"\r\n          v-for=\"(item, index) in jobAnswerList\" :key=\"index\" :data-index=\"item\" @click=\"to_detail(item, index)\">\r\n          {{ index + 1 }}\r\n        </div>\r\n      </div>\r\n      <div class=\"box-bottom\">\r\n        <div class=\"wrong-desc\">点击题目去看解析</div>\r\n        <div class=\"lable-desc\">\r\n          <div class=\"cicle\"></div>\r\n          <div class=\"desc\">未答</div>\r\n        </div>\r\n        <div class=\"lable-desc\">\r\n          <div class=\"cicle\" style=\"background-color: #3CC57C;\"></div>\r\n          <div class=\"desc\">答对</div>\r\n        </div>\r\n        <div class=\"lable-desc\">\r\n          <div class=\"cicle\" style=\"background-color: #F85353;\"></div>\r\n          <div class=\"desc\">答错</div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n    <RelList :resource_id=\"resource_id\" />\r\n  </div>\r\n</template>\r\n<script>\r\nimport { jobAnswer } from '@/api/listen'\r\nimport RelList from \"../../components/RelList\";\r\n\r\nexport default {\r\n  components: { RelList },\r\n  name: 'Report',\r\n  data() {\r\n    return {\r\n      answer_info: [],\r\n      jobAnswerList: [],\r\n      right_bfb: 0,\r\n      resource_id: 0\r\n    }\r\n  },\r\n  methods: {\r\n    async onClickLeft() {\r\n      history.back()\r\n    },\r\n    async getJobAnswer() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await jobAnswer({ sid: user.sid, resource_id: this.resource_id })\r\n          const data = response.data\r\n          var countTotal = data.countTotal\r\n          var rightCountTotal = data.rightCountTotal\r\n          var right_bfb = (rightCountTotal / countTotal) * 100\r\n          right_bfb = right_bfb.toFixed(0)\r\n          this.answer_info = data\r\n          this.jobAnswerList = data.jobAnswerList\r\n          this.right_bfb = right_bfb\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n\r\n    async to_detail(item, index) {\r\n      this.$router.push({ name: 'Detail', query: { resource_id: item.resource_id, job_id: index } })\r\n    }\r\n  },\r\n  mounted() {\r\n    // 在组件挂载后立即获取任务数据\r\n    this.resource_id = this.$route.query.resource_id;\r\n\r\n    this.getJobAnswer()\r\n  }\r\n}\r\n</script>\r\n<style scoped>\r\n.report {\r\n  width: 100vw;\r\n  height: auto;\r\n  background: linear-gradient(to bottom, #E2F2FF, #FFF);\r\n}\r\n\r\n.main-top {\r\n  width: 100vw;\r\n  height: auto;\r\n  text-align: left;\r\n}\r\n\r\n.reback {\r\n  padding: 20px 0 0 12px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.pagetitle {\r\n  padding: 20px 0 0 150px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  font-size: 16px;\r\n  color: #030303;\r\n}\r\n\r\n.answer-box {\r\n  width: 90vw;\r\n  height: auto;\r\n  background: #FFFFFF;\r\n  box-shadow: 0 3px 6px 1px rgba(0, 0, 0, 0.05);\r\n  border-radius: 20px;\r\n  margin: 30px auto;\r\n  padding: 20px 0;\r\n}\r\n\r\n.box-top {\r\n  width: 90vw;\r\n  height: 50px;\r\n  text-align: left;\r\n}\r\n\r\n.right-num {\r\n  padding: 11px 0 0 30px;\r\n  font-size: 30px;\r\n  font-weight: bold;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.total-num,\r\n.report-desc {\r\n  padding: 29px 0 0 0px;\r\n  font-size: 12px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.report-desc {\r\n  padding-left: 28px;\r\n}\r\n\r\n.bottom-line {\r\n  width: 340px;\r\n  height: 1px;\r\n  margin: 13px auto;\r\n  background-color: #E4E4E4;\r\n}\r\n\r\n.second-box {\r\n  width: 320px;\r\n  height: 25px;\r\n  margin: 0 auto;\r\n  font-size: 12px;\r\n  color: #656565;\r\n}\r\n\r\n.submit-time {\r\n  width: 240px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  text-align: left;\r\n}\r\n\r\n.result {\r\n  width: 80px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  text-align: right;\r\n}\r\n\r\n.result-box {\r\n  width: 320px;\r\n  height: auto;\r\n  margin: 0 auto;\r\n  font-size: 12px;\r\n  color: #656565;\r\n  text-align: left;\r\n}\r\n\r\n.result-item,\r\n.result-item-wrong {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 34px;\r\n  height: 34px;\r\n  border-radius: 34px;\r\n  margin: 5px;\r\n  background-color: #3CC57C;\r\n  line-height: 34px;\r\n  text-align: center;\r\n  font-size: 14px;\r\n  color: #FFF;\r\n  font-weight: 400;\r\n}\r\n\r\n.result-item-wrong {\r\n  background-color: #F85353;\r\n}\r\n\r\n.box-bottom {\r\n  width: 320px;\r\n  height: auto;\r\n  margin: 12px auto;\r\n  font-size: 12px;\r\n  color: #656565;\r\n  padding-bottom: 40rpx;\r\n  text-align: left;\r\n}\r\n\r\n.wrong-desc {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  padding-right: 30px;\r\n}\r\n\r\n.lable-desc {\r\n  width: 60px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.cicle {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 12px;\r\n  height: 12px;\r\n  background-color: #CBCBCB;\r\n  border-radius: 12px;\r\n}\r\n\r\n.desc {\r\n  /* width: 12px; */\r\n  color: #656565;\r\n  font-size: 10px;\r\n  line-height: 15px;\r\n  padding: 0 15px 0 5px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Report.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Report.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Report.vue?vue&type=template&id=41ea048e&scoped=true\"\nimport script from \"./Report.vue?vue&type=script&lang=js\"\nexport * from \"./Report.vue?vue&type=script&lang=js\"\nimport style0 from \"./Report.vue?vue&type=style&index=0&id=41ea048e&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"41ea048e\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('van-nav-bar',{attrs:{\"title\":\"练习记录\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_vm._l((_vm.HistoryList),function(item,index){return _c('div',{key:index,staticClass:\"last-box\",on:{\"click\":function($event){return _vm.to_detail(item)}}},[_vm._m(0,true),_c('div',{staticClass:\"last-count\"},[_c('span',{staticStyle:{\"font-size\":\"20px\",\"font-weight\":\"bold\"}},[_vm._v(_vm._s(item.right_count))]),_vm._v(\"/\"+_vm._s(item.total_count)+\"(第\"+_vm._s(index+1)+\"次)\"),_c('br'),_vm._v(\" 正确率：\"+_vm._s(((item.right_count / item.total_count) * 100).toFixed(2))+\"% \")]),_c('div',{staticClass:\"last-right\"},[_c('div',{staticClass:\"all-last\"}),_c('div',{staticClass:\"last-time\"},[_vm._v(\"提交时间：\"+_vm._s(item.create_time))])])])})],2)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"last-title\"},[_vm._v(\"答题\"),_c('br'),_vm._v(\"记录\")])\n}]\n\nexport { render, staticRenderFns }","<template>\r\n    <div>\r\n        <van-nav-bar title=\"练习记录\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <div class=\"last-box\" @click=\"to_detail(item)\" v-for=\"(item, index) in HistoryList\" :key=\"index\">\r\n            <div class=\"last-title\">答题<br>记录</div>\r\n            <div class=\"last-count\">\r\n                <span style=\"font-size: 20px;font-weight: bold;\">{{ item.right_count }}</span>/{{\r\n                    item.total_count }}(第{{ index+1 }}次)<br>\r\n                正确率：{{ ((item.right_count / item.total_count) * 100).toFixed(2) }}%\r\n            </div>\r\n            <div class=\"last-right\">\r\n                <div class=\"all-last\">  </div>\r\n                <div class=\"last-time\">提交时间：{{ item.create_time }}</div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getHistoryList } from '@/api/listen'\r\nexport default {\r\n    name: 'HistoryList',\r\n    data() {\r\n        return {\r\n\r\n            HistoryList: [],\r\n\r\n        }\r\n    },\r\n\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        to_detail(item){\r\n            this.$router.push({ name: 'DetailHis', query: { resource_id: this.resources_id, his_id:item.id } })\r\n        },\r\n        async getHistoryList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getHistoryList({ sid: user.sid, resource_id: this.resources_id })\r\n                    if (response.code == 100) {\r\n                        const data = response.data\r\n                        this.HistoryList = data\r\n                    }\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n\r\n    },\r\n    mounted() {\r\n        this.resources_id = this.$route.query.resources_id;\r\n        this.getHistoryList()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n.last-box {\r\n    width: 330px;\r\n    height: 68px;\r\n    background: #F2F2F4;\r\n    border-radius: 10px 10px 10px 10px;\r\n    margin: 20px auto;\r\n}\r\n\r\n.last-title {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin: 13px 9px 13px 17px;\r\n    padding-right: 9px;\r\n    border-right: 1px solid #B8B8B8;\r\n    font-size: 16px;\r\n}\r\n\r\n.last-count {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin: 13px 9px 13px 0px;\r\n    font-size: 12px;\r\n    color: #656565;\r\n}\r\n\r\n.last-right {\r\n    /* width: 120px; */\r\n    vertical-align: top;\r\n    margin: 13px 9px 13px 0px;\r\n    display: inline-block;\r\n    font-size: 12px;\r\n    color: #656565;\r\n    text-align: right;\r\n}\r\n\r\n.all-last {\r\n    margin-bottom: 6px;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./History.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./History.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./History.vue?vue&type=template&id=02a8c4b2&scoped=true\"\nimport script from \"./History.vue?vue&type=script&lang=js\"\nexport * from \"./History.vue?vue&type=script&lang=js\"\nimport style0 from \"./History.vue?vue&type=style&index=0&id=02a8c4b2&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"02a8c4b2\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('van-nav-bar',{attrs:{\"title\":\"练习记录\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_vm._l((_vm.HistoryList),function(item,index){return _c('div',{key:index,staticClass:\"last-box\",on:{\"click\":function($event){return _vm.to_detail(item)}}},[_vm._m(0,true),_c('div',{staticClass:\"last-count\"},[_c('span',{staticStyle:{\"font-size\":\"20px\",\"font-weight\":\"bold\"}},[_vm._v(_vm._s(item.right_count))]),_vm._v(\"/\"+_vm._s(item.total_count)+\"(第\"+_vm._s(index+1)+\"次)\"),_c('br'),_vm._v(\" 正确率：\"+_vm._s(((item.right_count / item.total_count) * 100).toFixed(2))+\"% \")]),_c('div',{staticClass:\"last-right\"},[_c('div',{staticClass:\"all-last\"}),_c('div',{staticClass:\"last-time\"},[_vm._v(\"提交时间：\"+_vm._s(item.create_time))])])])})],2)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"last-title\"},[_vm._v(\"答题\"),_c('br'),_vm._v(\"记录\")])\n}]\n\nexport { render, staticRenderFns }","<template>\r\n    <div>\r\n        <van-nav-bar title=\"练习记录\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <div class=\"last-box\" @click=\"to_detail(item)\" v-for=\"(item, index) in HistoryList\" :key=\"index\">\r\n            <div class=\"last-title\">答题<br>记录</div>\r\n            <div class=\"last-count\">\r\n                <span style=\"font-size: 20px;font-weight: bold;\">{{ item.right_count }}</span>/{{\r\n                    item.total_count }}(第{{ index+1 }}次)<br>\r\n                正确率：{{ ((item.right_count / item.total_count) * 100).toFixed(2) }}%\r\n            </div>\r\n            <div class=\"last-right\">\r\n                <div class=\"all-last\">  </div>\r\n                <div class=\"last-time\">提交时间：{{ item.create_time }}</div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getHistoryList } from '@/api/listen'\r\nexport default {\r\n    name: 'HistoryList',\r\n    data() {\r\n        return {\r\n\r\n            HistoryList: [],\r\n\r\n        }\r\n    },\r\n\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        to_detail(item){\r\n            this.$router.push({ name: 'ReadDetailHis', query: { resource_id: this.resources_id, his_id:item.id } })\r\n        },\r\n        async getHistoryList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getHistoryList({ sid: user.sid, resource_id: this.resources_id })\r\n                    if (response.code == 100) {\r\n                        const data = response.data\r\n                        this.HistoryList = data\r\n                    }\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n\r\n    },\r\n    mounted() {\r\n        this.resources_id = this.$route.query.resources_id;\r\n        this.getHistoryList()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n.last-box {\r\n    width: 330px;\r\n    height: 68px;\r\n    background: #F2F2F4;\r\n    border-radius: 10px 10px 10px 10px;\r\n    margin: 20px auto;\r\n}\r\n\r\n.last-title {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin: 13px 9px 13px 17px;\r\n    padding-right: 9px;\r\n    border-right: 1px solid #B8B8B8;\r\n    font-size: 16px;\r\n}\r\n\r\n.last-count {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin: 13px 9px 13px 0px;\r\n    font-size: 12px;\r\n    color: #656565;\r\n}\r\n\r\n.last-right {\r\n    /* width: 120px; */\r\n    vertical-align: top;\r\n    margin: 13px 9px 13px 0px;\r\n    display: inline-block;\r\n    font-size: 12px;\r\n    color: #656565;\r\n    text-align: right;\r\n}\r\n\r\n.all-last {\r\n    margin-bottom: 6px;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./History.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./History.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./History.vue?vue&type=template&id=737200f7&scoped=true\"\nimport script from \"./History.vue?vue&type=script&lang=js\"\nexport * from \"./History.vue?vue&type=script&lang=js\"\nimport style0 from \"./History.vue?vue&type=style&index=0&id=737200f7&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"737200f7\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"index\"},[_c('van-nav-bar',{attrs:{\"title\":\"书海遨游\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),(_vm.NewUserResource != [] && _vm.NewUserResource != null)?_c('div',{staticClass:\"head\"},[_c('div',{staticClass:\"model-title\"},[_vm._v(\"上次学习\")]),_c('div',{staticClass:\"last-learn\",on:{\"click\":function($event){return _vm.to_praxis(_vm.NewUserResource)}}},[_c('img',{staticClass:\"lesson-cover-img\",attrs:{\"src\":_vm.NewUserResource.cover,\"mode\":\"aspectFill\"}}),_c('div',{staticClass:\"lesson-info\"},[_c('div',{staticClass:\"lesson-name\"},[_vm._v(\"[阅读]\"+_vm._s(_vm.NewUserResource.name))])]),(_vm.NewUserResource.status == 1)?_c('div',{staticClass:\"con-to-study\",attrs:{\"data-index\":_vm.NewUserResource.id}},[_vm._v(\"继续学习\")]):_vm._e(),(_vm.NewUserResource.status == 2)?_c('div',{staticClass:\"con-to-study\",attrs:{\"data-index\":_vm.NewUserResource.id}},[_vm._v(\"已学\")]):_vm._e()])]):_vm._e(),_c('div',{staticClass:\"theme-listening\"},[_c('div',{staticClass:\"listening-top\"},[_c('div',{staticClass:\"listening-title\"},[_vm._v(\"主题列表\")]),_c('div',{staticClass:\"model-check\",on:{\"click\":_vm.changShow}},[_vm._v(\" 筛选 \"),_c('van-icon',{attrs:{\"name\":\"list-switch\",\"color\":\"#FFF\"}})],1)]),(_vm.listData.length == 0 || _vm.listData == [])?_c('div',{staticClass:\"empty\",staticStyle:{\"width\":\"100%\",\"height\":\"80px\",\"text-align\":\"center\"}},[_c('van-loading',{attrs:{\"size\":\"24px\"}},[_vm._v(\"加载中...\")])],1):_vm._e(),_vm._l((_vm.listData),function(item,index){return _c('div',{key:index,on:{\"click\":function($event){return _vm.to_learn(item)}}},[(item.resource_num > 0)?_c('div',{staticClass:\"listen-item\"},[_c('img',{staticClass:\"listen-cover\",attrs:{\"src\":item.cover,\"mode\":\"aspectFill\"}}),_c('div',{staticClass:\"listen-name\"},[_vm._v(\"[阅读]\"+_vm._s(item.name))]),_c('div',{staticClass:\"listen-desc\"},[_vm._v(\"共\"+_vm._s(item.resource_num)+\"个资源包\")]),_c('div',{staticClass:\"listen-count\"},[_c('div',{staticClass:\"listening-now\"},[_c('div',{staticClass:\"count-detail\"},[_vm._v(_vm._s(item.read_num)+\"人正在学\")])]),(item.study_num > 0)?_c('div',{staticClass:\"listening-svg\"},[_vm._v(\"已学\"+_vm._s(item.study_num))]):_vm._e(),(item.study_num == 0)?_c('div',{staticClass:\"listening-svg can-check\"},[_vm._v(\"进入学习\")]):_vm._e()])]):_vm._e()])})],2),_c('van-popup',{staticStyle:{\"border-radius\":\"0 0 40px 40px\"},attrs:{\"position\":\"top\"},model:{value:(_vm.show),callback:function ($$v) {_vm.show=$$v},expression:\"show\"}},[_c('div',{staticClass:\"check-main\"},[_c('div',{staticClass:\"tea-search\"},[_c('van-search',{attrs:{\"placeholder\":\"请输入搜索关键词\"},model:{value:(_vm.keyword),callback:function ($$v) {_vm.keyword=$$v},expression:\"keyword\"}})],1),_c('div',{staticClass:\"check-item\"},[_c('div',{staticClass:\"check-item-lables\"},_vm._l((_vm.listData),function(item,index){return _c('div',{key:index,class:['lable-item', _vm.keyword === item.name ? 'lable-item-check' : ''],attrs:{\"data-index\":item.id},on:{\"click\":function($event){return _vm.check_subject_cate_id(item)}}},[_vm._v(_vm._s(item.name))])}),0)]),_c('div',{staticClass:\"btn-cancel\",on:{\"click\":_vm.changShow}},[_vm._v(\"取消\")]),_c('div',{staticClass:\"btn-ok\",on:{\"click\":_vm.to_share}},[_vm._v(\"确定\")])])]),_c('ReadAi',{attrs:{\"allow\":\"microphone\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import request from './index'\r\nimport MD5 from 'crypto-js/md5'\r\n\r\nconst SECRET_KEY = 'zjuEnglish'\r\nfunction buildSign(data) {\r\n    const keys = Object.keys(data).sort()\r\n    const signStr = keys\r\n        .filter(k => data[k] !== undefined && data[k] !== null)\r\n       .map(k => `${k}=${String(data[k])}`)\r\n        .join('')\r\n        console.log('signStr', signStr + SECRET_KEY)\r\n    return MD5(signStr + SECRET_KEY).toString()\r\n}\r\n\r\nfunction getParamNames(data) {\r\n\r\n    var checkParams = Object.keys(data)\r\n        .sort()\r\n        .join(',')\r\n    return checkParams\r\n}\r\n// 获取上次学习\nexport function UserResource(data) {\r\n    return request({\r\n        url: '/resources/getNewUserResource',\r\n        method: 'get',\r\n        params: data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n// 获取听力主题\nexport function getList(data) {\r\n    return request({\r\n        url: '/subject/gets',\r\n        method: 'get',\r\n        params: data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n// 获取资源包\nexport function getResources(data) {\r\n    return request({\r\n        url: '/resources/gets',\r\n        method: 'get',\r\n        params: data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n\r\n// 记录学习资源插入学习日志\nexport function saveUserStudyResource(data) {\r\n    return request({\r\n        url: '/resources/saveUserStudyResource',\r\n        method: 'post',\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n// 获取练习题内容\nexport function getJobList(params) {\r\n    return request({\r\n        url: '/job/gets',\r\n        method: 'get',\r\n        params: params,\r\n        checkParams: getParamNames(params),\r\n        checkSign: buildSign(params)\r\n    })\r\n}\r\n\r\n// 提交练习答案\nexport function submitData(data) {\r\n    return request({\r\n        url: '/jobAnswer/save',\r\n        method: 'post',\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n// 修改记录学习时间\nexport function updateUserStudy(data) {\r\n    return request({\r\n        url: '/resources/updateUserStudy',\r\n        method: 'post',\r\n        data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n\r\n// 修改记录学习时间\nexport function jobAnswer(data) {\r\n    return request({\r\n        url: '/jobAnswer/gets',\r\n        method: 'get',\r\n        params: data,\r\n        checkParams: getParamNames(data),\r\n        checkSign: buildSign(data)\r\n    })\r\n}\r\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('span',{staticClass:\"reback\",on:{\"click\":_vm.to_dingtalk}},[_vm._v(\"问题反馈\")]),(!_vm.is_show_ai)?_c('img',{staticClass:\"wyt\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\",\"mode\":\"widthFix\"},on:{\"click\":_vm.change_show_ai}}):_vm._e(),(_vm.is_show_ai)?_c('div',{staticClass:\"check-main-ai\"},[_c('div',{staticClass:\"guanbi\",on:{\"click\":_vm.change_show_ai}},[_c('van-icon',{attrs:{\"name\":\"cross\",\"color\":\"#606060\"}})],1),_c('img',{staticClass:\"wyt-say\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\",\"mode\":\"widthFix\"}}),_c('div',{staticClass:\"say-text\"},[_vm._v(\"嗨，你好，一起开启外语学习吧\")]),_c('div',{staticClass:\"fast-parent\"},[_c('div',{staticClass:\"fast-box\",on:{\"click\":function($event){_vm.chat('Generate a reading passage (within 120 words) suitable for me and ask a question based on this passage to help me better understand the main idea. ')}}},[_c('span',[_vm._v(\" 生成一篇适合我的阅读练习篇章 \")])]),_c('div',{staticClass:\"fast-box\",on:{\"click\":function($event){_vm.chat('Briefly introduce methods to improve reading comprehension skills (within 60 words).')}}},[_c('span',[_vm._v(\" 介绍提升阅读理解能力的方法 \")])]),_c('div',{staticClass:\"fast-box\",on:{\"click\":function($event){_vm.chat('Briefly introduce how to grasp the main idea in reading practice (within 60 words).')}}},[_c('span',[_vm._v(\" 如何在阅读练习中抓住主旨大意 \")])])]),_c('div',{staticClass:\"input-box\"},[_c('button',{staticClass:\"button-default\",style:(_vm.speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''),on:{\"click\":_vm.to_chat}},[_vm._v(\"去对话\")])])]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- src/layouts/TabBarLayout.vue -->\r\n\r\n<template>\r\n    <div>\r\n        <!-- 初始状态下显示的图片，点击可切换显示 -->\r\n        <span class=\"reback\" @click=\"to_dingtalk\">问题反馈</span>\r\n        <img v-if=\"!is_show_ai\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\"\r\n            mode=\"widthFix\" @click=\"change_show_ai\" class=\"wyt\" />\r\n        <!-- 显示 AI 伴学功能的主要界面 -->\r\n        <div class=\"check-main-ai\" v-if=\"is_show_ai\">\r\n            <div class=\"guanbi\" @click=\"change_show_ai\">\r\n                <van-icon name=\"cross\" color=\"#606060\" />\r\n            </div>\r\n            <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\" mode=\"widthFix\"\r\n                class=\"wyt-say\" />\r\n            <div class=\"say-text\">嗨，你好，一起开启外语学习吧</div>\r\n            <!-- 功能选项按钮 -->\r\n            <div class=\"fast-parent\">\r\n                <div class=\"fast-box\"\r\n                    @click=\"chat('Generate a reading passage (within 120 words) suitable for me and ask a question based on this passage to help me better understand the main idea. ')\">\r\n                    <span>\r\n                        生成一篇适合我的阅读练习篇章\r\n                    </span>\r\n                </div>\r\n                <div class=\"fast-box\"\r\n                    @click=\"chat('Briefly introduce methods to improve reading comprehension skills (within 60 words).')\">\r\n                    <span>\r\n                        介绍提升阅读理解能力的方法\r\n                    </span>\r\n                </div>\r\n                <div class=\"fast-box\"\r\n                    @click=\"chat('Briefly introduce how to grasp the main idea in reading practice (within 60 words).')\">\r\n                    <span>\r\n                        如何在阅读练习中抓住主旨大意\r\n                    </span>\r\n                </div>\r\n            </div>\r\n            <div class=\"input-box\">\r\n                <button class=\"button-default\"\r\n                    :style=\"speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''\"\r\n                    @click=\"to_chat\">去对话</button>\r\n            </div>\r\n            <!-- 输入框和录音按钮 -->\r\n            <!-- <div class=\"input-box\" v-show=\"is_speak == 1\">\r\n                <input class=\"question\" maxlength=\"-1\" v-model=\"stu_content\" @input=\"inputText\"\r\n                    placeholder-class=\"placeholder\" :placeholder=\"stu_placeholder\" type=\"text\" />\r\n            </div>\r\n            <div class=\"input-box\" v-show=\"is_speak != 1\">\r\n                <button class=\"button-default\"\r\n                    :style=\"speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''\"\r\n                    @touchstart=\"recStart\" @touchend=\"recStop\">{{ stu_placeholder }}</button>\r\n            </div> -->\r\n            <!-- 发送信息和切换语音输入的按钮 -->\r\n            <!-- <div class=\"say-box\" id=\"end\" v-if=\"speaking === false\">\r\n                <img v-if=\"stu_content !== '' && is_speak === 1\" @click=\"to_chat\" class=\"send-img\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/send_msg.png\" mode=\"aspectFill\" />\r\n                <img v-if=\"stu_content === '' && is_speak === 1\" @click=\"chang_speak\" data-is-speak=\"0\"\r\n                    class=\"other-img\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/audio.png\"\r\n                    mode=\"scaleToFill\" />\r\n                <img v-if=\"stu_content === '' && is_speak === 0 && speaking === false\" @click=\"chang_hand\"\r\n                    data-is-speak=\"1\" class=\"other-img\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/hand.png\" mode=\"scaleToFill\" />\r\n            </div> -->\r\n        </div>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\nimport { getList } from '@/api/listen'\r\n//必须引入的核心\r\nimport Recorder from 'recorder-core'\r\n\r\n//引入mp3格式支持文件；如果需要多个格式支持，把这些格式的编码引擎js文件放到后面统统引入进来即可\r\nimport 'recorder-core/src/engine/mp3'\r\nimport 'recorder-core/src/engine/mp3-engine'\r\n//录制wav格式的用这一句就行\r\nimport 'recorder-core/src/engine/wav'\r\n\r\n//可选的插件支持项，这个是波形可视化插件\r\nimport 'recorder-core/src/extensions/waveview'\r\n//ts import 提示：npm包内已自带了.d.ts声明文件（不过是any类型）\r\nexport default {\r\n    name: 'ListenAi',\r\n    data() {\r\n        return {\r\n            listData: [],\r\n            is_show_ai: false,\r\n            stu_placeholder: '请输入你的疑问...',\r\n            stu_content: '',\r\n            res_id: '',\r\n            is_speak: 1,\r\n            canuse: 1,\r\n            type: 0,\r\n            lang_time: 0,\r\n            speaking: false,\r\n            recorder: null,\r\n            mediaStream: null,\r\n            audioChunks: [],\r\n            audioDetails: null // 新增用于存储音频文件详细信息的状态\r\n        }\r\n    },\r\n    watch: {\r\n        '$route.path': function (newPath) {\r\n            this.active = newPath // 路由变化时更新激活的路由\r\n        }\r\n    },\r\n    methods: {\r\n        async getList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getList({ sid: user.sid, category_id: 2, level: this.level, subject_cate_id: this.subject_cate_id, keyword: this.keyword })\r\n                    const data = response.data\r\n\r\n                    this.getRandomThree(data)\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async to_dingtalk() {\r\n            window.location.href = 'https://qr.dingtalk.com/action/joingroup?code=v1,k1,IhOSmROFTSw+3pBELANkfbCOdwZd2JiTcd6YyE+gR7k=&_dt_no_comment=1&origin=11';\r\n        },\r\n        async getRandomThree(arr) {\r\n            let result = [];\r\n            let clone = arr.slice(); // 创建原数组的副本，避免修改原数组\r\n            console.log(clone)\r\n            // 循环三次，每次选取一个随机元素\r\n            for (let i = 0; i < 3; i++) {\r\n                if (clone.length === 0) break; // 如果数组为空，则退出循环\r\n                let randomIndex = Math.floor(Math.random() * clone.length); // 获取随机索引\r\n                result.push(clone[randomIndex]); // 将随机选取的元素添加到结果数组中\r\n                clone.splice(randomIndex, 1); // 将已选取的元素从原数组中移除\r\n            }\r\n\r\n            this.listData = result\r\n            console.log(this.listData)\r\n        },\r\n        async inputText() {\r\n            console.log(this.stu_content)\r\n            this.type = 0\r\n        },\r\n        async chat(item) {\r\n            this.$router.push({\r\n                name: 'NewChat', query: {\r\n                    project_id: 0,\r\n                    is_history: 0,\r\n                    lang_time: this.lang_time,\r\n                    filePath: this.filePath,\r\n                    type: 0,\r\n                    stype: 'read',\r\n                    from: 'read',\r\n                    chat_title: 'E-Read',\r\n                    content: item,\r\n                    res_id: ''\r\n                }\r\n            })\r\n        },\r\n        async to_chat() {\r\n            this.$router.push({\r\n                name: 'NewChat', query: {\r\n                    project_id: 0,\r\n                    is_history: 0,\r\n                    lang_time: this.lang_time,\r\n                    filePath: this.filePath,\r\n                    type: this.type,\r\n                    stype: 'read',\r\n                    from: 'read',\r\n                    chat_title: 'E-Read',\r\n                    content: this.stu_content,\r\n                    res_id: ''\r\n                }\r\n            })\r\n        },\r\n        async chang_speak() {\r\n            await this.recOpen();\r\n            this.is_speak = 0;\r\n            this.stu_placeholder = \"按住说话...\";\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n\r\n        async chang_hand() {\r\n            this.is_speak = 1;\r\n            this.stu_placeholder = \"请输入你的疑问...\";\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n\r\n        change_show_ai() {\r\n            this.is_show_ai = !this.is_show_ai\r\n        },\r\n        async recOpen() {\r\n            //创建录音对象\r\n            this.rec = Recorder({\r\n                type: \"mp3\" //录音格式，可以换成wav等其他格式\r\n                , sampleRate: 16000 //录音的采样率，越大细节越丰富越细腻\r\n                , bitRate: 16 //录音的比特率，越大音质越好\r\n                , onProcess: (buffers, powerLevel, bufferSampleRate) => {\r\n                    //录音实时回调，大约1秒调用12次本回调\r\n                    //可实时绘制波形，实时上传（发送）数据\r\n                    if (this.wave) this.wave.input(buffers[buffers.length - 1], powerLevel, bufferSampleRate);\r\n                }\r\n            });\r\n\r\n            //打开录音，获得权限\r\n            this.rec.open(() => {\r\n                console.log(\"录音已打开\");\r\n                if (this.$refs.recwave) {//创建音频可视化图形绘制对象\r\n                    this.wave = Recorder.WaveDiv({ elem: this.$refs.recwave });\r\n                }\r\n            }, (msg, isUserNotAllow) => {\r\n                //用户拒绝了录音权限，或者浏览器不支持录音\r\n                console.log((isUserNotAllow ? \"UserNotAllow，\" : \"\") + \"无法录音:\" + msg);\r\n            });\r\n            // this.startRecognition(); // 启动语音识别\r\n        },\r\n        async recStart() {\r\n            if (!this.rec) { console.error(\"未打开录音\"); return }\r\n            this.rec.start();\r\n            this.stu_placeholder = '正在说话';\r\n            this.speaking = true;\r\n            console.log(\"已开始录音\");\r\n            if (this.recognition) {\r\n                this.recognition.start(); // 启动语音识别\r\n            }\r\n        },\r\n        async recStop() {\r\n            if (!this.rec) { console.error(\"未打开录音\"); return }\r\n            this.rec.stop((blob, duration) => {\r\n                //blob就是我们要的录音文件对象，可以上传，或者本地播放\r\n                this.recBlob = blob;\r\n                //简单利用URL生成本地文件地址，此地址只能本地使用，比如赋值给audio.src进行播放，赋值给a.href然后a.click()进行下载（a需提供download=\"xxx.mp3\"属性）\r\n                var localUrl = (window.URL).createObjectURL(blob);\r\n                console.log(\"录音成功\", blob, localUrl, \"时长:\" + duration + \"ms\");\r\n                this.stu_placeholder = '按住说话';\r\n                this.lang_time = (duration / 1000).toFixed()\r\n                this.type = 1\r\n                this.speaking = false;\r\n                this.upload(blob);//把blob文件上传到服务器\r\n                if (this.recognition) {\r\n                    this.recognition.stop(); // 停止语音识别\r\n                }\r\n                // this.rec.close();//关闭录音，释放录音资源，当然可以不释放，后面可以连续调用start\r\n                // this.rec = null;\r\n            }, (err) => {\r\n                console.error(\"结束录音出错：\" + err);\r\n                // this.rec.close();//关闭录音，释放录音资源，当然可以不释放，后面可以连续调用start\r\n                // this.rec = null;\r\n            });\r\n        },\r\n        startRecognition() {\r\n            const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;\r\n            if (SpeechRecognition) {\r\n                this.recognition = new SpeechRecognition();\r\n                // 配置和使用 recognition 对象\r\n            } else {\r\n                console.error('该浏览器不支持语音识别');\r\n            }\r\n\r\n            this.recognition.continuous = true;\r\n            this.recognition.interimResults = true;\r\n            this.recognition.lang = 'en-US';\r\n\r\n            this.recognition.onresult = (event) => {\r\n                let interimTranscript = '';\r\n                let finalTranscript = '';\r\n\r\n                for (let i = event.resultIndex; i < event.results.length; i++) {\r\n                    if (event.results[i].isFinal) {\r\n                        finalTranscript += event.results[i][0].transcript;\r\n                    } else {\r\n                        interimTranscript += event.results[i][0].transcript;\r\n                    }\r\n                }\r\n\r\n                this.content = finalTranscript || interimTranscript;\r\n            };\r\n\r\n            this.recognition.onerror = (event) => {\r\n                console.error('识别错误: ', event.error);\r\n            };\r\n\r\n            this.recognition.onend = () => {\r\n                console.log('识别结束' + this.content);\r\n            };\r\n        },\r\n        async upload(blob) {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    var form = new FormData();\r\n                    form.append(\"file\", blob, user.sid + \"-\" + new Date().getTime() + \".mp3\"); //和普通form表单并无二致，后端接收到upfile参数的文件，文件名为recorder.mp3\r\n                    form.append(\"key\", \"value\"); //其他参数\r\n\r\n                    var xhr = new XMLHttpRequest();\r\n                    xhr.open(\"POST\", \"https://elang.zju.edu.cn:8082/mobileupload/upload\");\r\n                    // xhr.open(\"POST\", \"https://zju.3dease.com/fcapi/mobileupload/upload\");\r\n                    xhr.onreadystatechange = () => {\r\n                        if (xhr.readyState === 4) {\r\n                            if (xhr.status === 200) {\r\n                                // 请求成功，解析响应\r\n                                var response = JSON.parse(xhr.responseText);\r\n                                console.log(\"上传成功，服务器返回的数据:\", response);\r\n                                this.filePath = response.data.url\r\n                                // 在这里处理服务器返回的数据\r\n                                // this.startRecognition()\r\n                                this.type = 1; //消息类型\r\n                                this.to_chat()\r\n                            } else {\r\n                                // 请求失败，处理错误\r\n                                console.error(\"上传失败，状态码:\", xhr.status);\r\n                                console.error(\"错误信息:\", xhr.statusText);\r\n                            }\r\n                        }\r\n                    };\r\n                    xhr.send(form);\r\n\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async recPlay() {\r\n            //本地播放录音试听，可以直接用URL把blob转换成本地播放地址，用audio进行播放\r\n            var localUrl = URL.createObjectURL(this.recBlob);\r\n            var audio = document.createElement(\"audio\");\r\n            audio.controls = true;\r\n            document.body.appendChild(audio);\r\n            audio.src = localUrl;\r\n            audio.play(); //这样就能播放了\r\n\r\n            //注意不用了时需要revokeObjectURL，否则霸占内存\r\n            setTimeout(function () { URL.revokeObjectURL(audio.src) }, 5000);\r\n        },\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        this.getList()\r\n    }\r\n}\r\n</script>\r\n\r\n\r\n<style scoped>\r\n.check-main-ai {\r\n    width: 100vw;\r\n    height: auto;\r\n    max-height: 400px;\r\n    overflow-y: auto;\r\n    background: linear-gradient(134deg, #eff7fe, #e3f3ff);\r\n    padding-bottom: 25px;\r\n    position: fixed;\r\n    bottom: 0px;\r\n    border-radius: 40px 40px 0 0;\r\n    z-index: 200;\r\n}\r\n\r\n.guanbi {\r\n    width: auto;\r\n    height: auto;\r\n    position: fixed;\r\n    right: 10px;\r\n    text-align: center;\r\n    padding: 8px 15px;\r\n    font-weight: bold;\r\n    /* background-color: rgba(236, 221, 10, 0.3); */\r\n    border-radius: 40px;\r\n}\r\n\r\n.wyt-say {\r\n    width: 75px;\r\n    height: 75px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.say-text {\r\n    width: 300px;\r\n    height: 75px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 60px;\r\n    font-size: 14px;\r\n}\r\n\r\n.fast-parent {\r\n    padding-left: 10vw;\r\n}\r\n\r\n.fast-box {\r\n    width: 80px;\r\n    height: 55px;\r\n    background: #ffffff;\r\n    border-radius: 0px 20px 0px 20px;\r\n    border: 1px solid #acc5ff;\r\n    margin-left: 5px;\r\n    color: #686868;\r\n    font-size: 12px;\r\n    text-align: center;\r\n    padding: 8px 9px;\r\n    text-align: center;\r\n    margin-bottom: 110px;\r\n    align-items: center;\r\n    display: flex;\r\n    float: left;\r\n}\r\n\r\n.fast-box:last-child {\r\n    margin-right: 0;\r\n}\r\n\r\n.input-box {\r\n    width: 80vw;\r\n    height: 42px;\r\n    background: #ffffff;\r\n    border-radius: 16px;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border: none;\r\n}\r\n\r\n.question {\r\n    padding: 10px 60px 10px 15px;\r\n    font-size: 14px;\r\n    color: #000;\r\n    border: none;\r\n}\r\n\r\n.placeholder {\r\n    font-size: 14px;\r\n    color: #989898;\r\n    padding: 3px 15px;\r\n}\r\n\r\n.say-box {\r\n    width: 60px;\r\n    height: 42px;\r\n    background: #ffffff;\r\n    border-radius: 15px;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 293px;\r\n}\r\n\r\n.say-img {\r\n    width: 10px;\r\n    height: 15px;\r\n    padding: 7px 25px;\r\n}\r\n\r\n.send-img {\r\n    width: 53px;\r\n    height: 30px;\r\n    position: fixed;\r\n    bottom: 50px;\r\n    left: 293px;\r\n}\r\n\r\n.other-img {\r\n    width: 25px;\r\n    height: 25px;\r\n    position: fixed;\r\n    bottom: 53px;\r\n    left: 326px;\r\n}\r\n\r\n.button-default {\r\n    background: #fff;\r\n    /* color: #000000; */\r\n    height: 42px;\r\n    width: 323px;\r\n    line-height: 25px;\r\n    text-align: center;\r\n    border-radius: 21;\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n    border: none;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border-radius: 16px;\r\n}\r\n\r\n.button-speaking {\r\n    background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);\r\n    color: #fff;\r\n    height: 42px;\r\n    width: 333px;\r\n    line-height: 25px;\r\n    /* text-align: center; */\r\n    border-radius: 21px;\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n    z-index: 100;\r\n    border: none;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border-radius: 16px;\r\n}\r\n\r\n.reback {\r\n    position: fixed;\r\n    bottom: 160px;\r\n    right: 5px;\r\n    font-size: 16px;\r\n    width: 20px;\r\n    padding: 10px 5px;\r\n    background: rgba(2, 208, 245, 0.5);\r\n    border-radius: 10px;\r\n}\r\n\r\n.wyt {\r\n    position: fixed;\r\n    bottom: 60px;\r\n    right: 5px;\r\n    width: 75px;\r\n    height: 75px;\r\n}\r\n\r\n.btn-test {\r\n    position: absolute;\r\n    top: 0;\r\n}\r\n\r\n.btn-test2 {\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReadAi.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReadAi.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ReadAi.vue?vue&type=template&id=1e0e0dd0&scoped=true\"\nimport script from \"./ReadAi.vue?vue&type=script&lang=js\"\nexport * from \"./ReadAi.vue?vue&type=script&lang=js\"\nimport style0 from \"./ReadAi.vue?vue&type=style&index=0&id=1e0e0dd0&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"1e0e0dd0\",\n  null\n  \n)\n\nexport default component.exports","<template>\r\n  <div class=\"index\">\r\n    <van-nav-bar title=\"书海遨游\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n    <div class=\"head\" v-if=\"NewUserResource != [] && NewUserResource != null\">\r\n      <div class=\"model-title\">上次学习</div>\r\n      <div class=\"last-learn\" @click=\"to_praxis(NewUserResource)\">\r\n        <img :src=\"NewUserResource.cover\" mode=\"aspectFill\" class=\"lesson-cover-img\" />\r\n        <div class=\"lesson-info\">\r\n          <div class=\"lesson-name\">[阅读]{{ NewUserResource.name }}</div>\r\n        </div>\r\n        <div class=\"con-to-study\" :data-index=\"NewUserResource.id\" v-if=\"NewUserResource.status == 1\">继续学习</div>\r\n        <div class=\"con-to-study\" :data-index=\"NewUserResource.id\" v-if=\"NewUserResource.status == 2\">已学</div>\r\n      </div>\r\n    </div>\r\n    <div class=\"theme-listening\">\r\n      <div class=\"listening-top\">\r\n        <div class=\"listening-title\">主题列表</div>\r\n        <div class=\"model-check\" @click=\"changShow\">\r\n          筛选\r\n          <van-icon name=\"list-switch\" color=\"#FFF\" />\r\n        </div>\r\n      </div>\r\n      <div class=\"empty\" style=\" width:100%;height: 80px;text-align: center;\"\r\n        v-if=\"listData.length == 0 || listData == []\">\r\n        <van-loading size=\"24px\">加载中...</van-loading>\r\n      </div>\r\n      <div v-for=\"(item, index) in listData\" :key=\"index\" @click=\"to_learn(item)\">\r\n        <div class=\"listen-item\" v-if=\"item.resource_num > 0\">\r\n          <img :src=\"item.cover\" mode=\"aspectFill\" class=\"listen-cover\" />\r\n          <div class=\"listen-name\">[阅读]{{ item.name }}</div>\r\n          <div class=\"listen-desc\">共{{ item.resource_num }}个资源包</div>\n          <div class=\"listen-count\">\r\n            <div class=\"listening-now\">\r\n              <div class=\"count-detail\">{{ item.read_num }}人正在学</div>\r\n            </div>\r\n            <div class=\"listening-svg\" v-if=\"item.study_num > 0\">已学{{ item.study_num }}</div>\r\n            <div class=\"listening-svg can-check\" v-if=\"item.study_num == 0\">进入学习</div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n    <van-popup v-model=\"show\" position=\"top\" style=\"border-radius: 0 0 40px 40px\">\r\n      <div class=\"check-main\">\r\n        <div class=\"tea-search\">\r\n          <van-search v-model=\"keyword\" placeholder=\"请输入搜索关键词\" />\r\n        </div>\r\n        <!-- <div class=\"check-item\">\r\n          <div class=\"check-item-title\">难易度</div>\r\n          <div class=\"check-item-lables\">\r\n            <div @click=\"check_level(0)\" :class=\"['lable-item', level === 0 ? 'lable-item-check' : '']\" :data-index=\"0\">\r\n              全部\r\n            </div>\r\n            <div @click=\"check_level(1)\" :class=\"['lable-item', level === 1 ? 'lable-item-check' : '']\" :data-index=\"1\">\r\n              初级\r\n            </div>\r\n            <div @click=\"check_level(2)\" :class=\"['lable-item', level === 2 ? 'lable-item-check' : '']\" :data-index=\"2\">\r\n              中级\r\n            </div>\r\n            <div @click=\"check_level(3)\" :class=\"['lable-item', level === 3 ? 'lable-item-check' : '']\" :data-index=\"3\">\r\n              高级\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"check-item\">\r\n          <div class=\"check-item-title\">发布时间</div>\r\n          <div class=\"check-item-lables\">\r\n            <div @click=\"check_time_level(0)\" :class=\"['lable-item', time_level === 0 ? 'lable-item-check' : '']\"\r\n              :data-index=\"0\">全部</div>\r\n            <div @click=\"check_time_level(1)\" :class=\"['lable-item', time_level === 1 ? 'lable-item-check' : '']\"\r\n              :data-index=\"1\">一天内</div>\r\n            <div @click=\"check_time_level(2)\" :class=\"['lable-item', time_level === 2 ? 'lable-item-check' : '']\"\r\n              :data-index=\"2\">一周内</div>\r\n            <div @click=\"check_time_level(3)\" :class=\"['lable-item', time_level === 3 ? 'lable-item-check' : '']\"\r\n              :data-index=\"3\">一月内</div>\r\n          </div>\r\n        </div> -->\r\n\r\n        <div class=\"check-item\">\r\n          <!-- <div class=\"check-item-title\">主题</div> -->\r\n          <div class=\"check-item-lables\">\r\n            <div @click=\"check_subject_cate_id(item)\"\r\n              :class=\"['lable-item', keyword === item.name ? 'lable-item-check' : '']\" :data-index=\"item.id\"\r\n              v-for=\"(item, index) in listData\" :key=\"index\">{{ item.name }}</div>\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"btn-cancel\" @click=\"changShow\">取消</div>\r\n        <div class=\"btn-ok\" @click=\"to_share\">确定</div>\r\n      </div>\r\n    </van-popup>\r\n    <ReadAi allow=\"microphone\" />\r\n  </div>\r\n</template>\r\n<script>\r\nimport { UserResource, getList } from '@/api/read'\r\nimport { getCateList } from '@/api/listen'\r\n\r\nimport { saveUserStudyResource } from '@/api/user'\r\nimport ReadAi from \"@/components/ReadAi\";\r\nexport default {\r\n  components: { ReadAi },\r\n  name: 'Index',\r\n  data() {\r\n    return {\r\n      NewUserResource: [],\r\n      listData: [],\r\n      show: false,\r\n      level: '',\r\n      time_level: '',\r\n      subject_cate_id: '',\r\n      keyword: '',\r\n    }\r\n  },\r\n  methods: {\r\n    async check_level(e) {\r\n      this.level = e\r\n    },\r\n    async to_share() {\r\n      this.$router.push({ name: 'Serch', query: { category_id: 2, keyword: this.keyword } })\r\n    },\r\n    async check_time_level(e) {\r\n      this.time_level = e\r\n    },\r\n    async check_subject_cate_id(item) {\r\n      this.keyword = item.name\r\n    },\r\n    async to_praxis(item) {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          console.log(item)\r\n          const response = await saveUserStudyResource({ sid: user.sid, resource_id: item.id })\r\n          if (response.code == 100) {\r\n\r\n            this.$router.push({ name: 'ReadPraxis', query: { log_id: response.data, resources_id: item.id } })\r\n\r\n          }\r\n\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async onClickLeft() {\r\n      history.back()\r\n    },\r\n    async UserResource() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await UserResource({ sid: user.sid, category_id: 2 })\r\n          const data = response.data\r\n          data.cover = data.cover.replace('a-news.oss-cn-hangzhou.aliyuncs.com', 'a-news.oss-accelerate.aliyuncs.com');\r\n          this.NewUserResource = data\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async getList() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          if (this.level == 0) { this.level = '' }\r\n          if (this.subject_cate_id == 0) { this.subject_cate_id = '' }\r\n          const response = await getList({ sid: user.sid, category_id: 2, level: this.level, subject_cate_id: this.subject_cate_id, keyword: this.keyword })\r\n          const data = response.data\r\n          data.forEach(element => {\r\n            element.cover = element.cover.replace('a-news.oss-cn-hangzhou.aliyuncs.com', 'a-news.oss-accelerate.aliyuncs.com');\r\n          });\r\n          this.listData = data\r\n          this.show = false;\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async getCateList() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await getCateList()\r\n          const data = response.data\r\n          data.forEach(element => {\r\n            element.cover = element.cover.replace('a-news.oss-cn-hangzhou.aliyuncs.com', 'a-news.oss-accelerate.aliyuncs.com');\r\n          });\r\n          this.subjectCate = data\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async changShow() {\r\n      this.show = !this.show;\r\n    },\r\n    async to_learn(item) {\r\n      this.$router.push({ name: 'ReadLearn', query: { subject_id: item.id, subject_name: item.name } })\r\n    }\r\n  },\r\n  mounted() {\r\n    // 在组件挂载后立即获取任务数据\r\n    this.UserResource()\r\n    this.getList()\r\n    this.getCateList()\r\n  }\r\n}\r\n</script>\r\n<style scoped>\r\n.head {\r\n  width: 100vw;\r\n  height: 150px;\r\n  background: linear-gradient(to bottom, #E2F2FF, #FFF);\r\n}\r\n\r\n.model-title {\r\n  padding: 13px 0 11px 24px;\r\n  font-size: 16px;\r\n  text-align: left;\r\n}\r\n\r\n.last-learn {\r\n  width: 90vw;\r\n  height: 85px;\r\n  background: #FFFFFF;\r\n  box-shadow: 0px 2px 10px 1px rgba(80, 143, 206, 0.1);\r\n  border-radius: 20px 20px 20px 20px;\r\n  margin: 0 auto;\r\n}\r\n\r\n.lesson-cover-img {\r\n  width: 58px;\r\n  height: 58px;\r\n  padding: 14px 10px 0 13px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  border-radius: 5px;\r\n}\r\n\r\n.lesson-info {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 185px;\r\n  height: 44px;\r\n  padding: 10px 5px 20px 0;\r\n  text-align: left;\r\n}\r\n\r\n.lesson-name {\r\n  font-size: 14px;\r\n  font-weight: bold;\r\n  padding-bottom: 9px;\r\n  overflow: hidden;\r\n  text-overflow: ellipsis;\r\n  white-space: nowrap;\r\n}\r\n\r\n.con-to-study {\r\n  width: 60px;\r\n  height: 85px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  line-height: 85px;\r\n  font-size: 12px;\r\n  color: #003F88;\r\n}\r\n\r\n.theme-listening {\r\n  width: 100vw;\r\n  height: auto;\r\n  text-align: left;\r\n  /* margin: 0 auto; */\r\n}\r\n\r\n.listening-title {\r\n  padding: 13px 0 11px 24px;\r\n  font-size: 16px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.model-check {\r\n  width: 59px;\r\n  height: 24px;\r\n  background: #000000;\r\n  border-radius: 25px;\r\n  opacity: 0.26;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin-left: 183px;\r\n  margin-top: 15px;\r\n  color: #FFF;\r\n  line-height: 24px;\r\n  padding-left: 21px;\r\n  font-size: 14px;\r\n}\r\n\r\n.listen-item {\r\n  width: 90vw;\r\n  height: auto;\r\n  margin: 18px auto;\r\n  border-bottom: 1px #E4E4E4 solid;\r\n  padding-bottom: 20px;\r\n}\r\n\r\n.listen-cover {\r\n  width: 90vw;\r\n  height: 150px;\r\n  border-radius: 10px;\r\n}\r\n\r\n.listen-name {\r\n  font-size: 14px;\r\n  font-weight: bold;\r\n  padding-top: 10px;\r\n}\r\n\r\n.listen-desc {\r\n  font-size: 12px;\r\n  color: #979797;\r\n  padding: 5px 23px 0px 0;\r\n}\r\n\r\n.listening-now {\r\n  /* width: 250px; */\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  padding-right: 10px;\r\n}\r\n\r\n.count-detail {\r\n  vertical-align: top;\r\n  padding: 5px 5px 0rpx 0rpx;\r\n  font-size: 12px;\r\n  display: inline-block;\r\n  vertical-align: top;\r\n  color: #979797;\r\n}\r\n\r\n.listening-svg {\r\n  width: 70px;\r\n  height: 29px;\r\n  font-size: 12px;\r\n  line-height: 29px;\r\n  border: #003F88 solid 1px;\r\n  border-radius: 14px;\r\n  text-align: center;\r\n  margin-top: -12px;\r\n  float: right;\r\n}\r\n\r\n.can-check {\r\n  background-color: #003F88;\r\n  color: #FFF;\r\n}\r\n\r\n.check-main {\r\n  width: 100%;\r\n  height: auto;\r\n  max-height: 600px;\r\n  overflow-y: scroll;\r\n  border-radius: 0 0 40px 40px;\r\n  background-color: #FFF;\r\n  padding-bottom: 25px;\r\n}\r\n\r\n.tea-search {\r\n  width: 360px;\r\n  height: 36px;\r\n  background: #000000;\r\n  border-radius: 25px;\r\n  /* opacity: 0.26; */\r\n  margin: 11px auto;\r\n}\r\n\r\n.check-item {\r\n  width: 339px;\r\n  margin: 11px auto;\r\n  height: auto;\r\n  text-align: left;\r\n}\r\n\r\n.check-item-title {\r\n  font-size: 12px;\r\n  font-weight: bold;\r\n  text-align: left;\r\n}\r\n\r\n.check-item-lables {\r\n  margin-top: 15px;\r\n}\r\n\r\n.lable-item {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin-right: 12px;\r\n  margin-bottom: 12px;\r\n  border: solid 1px #F4F8FB;\r\n  background-color: #F4F8FB;\r\n  padding: 2px 5px;\r\n  border-radius: 20rpx;\r\n  font-size: 12px;\r\n  color: #989898;\r\n}\r\n\r\n.lable-item-check {\r\n  border: #699FDE solid 1px;\r\n  background-color: #E2F9FF;\r\n  color: #579ACE;\r\n}\r\n\r\n.btn-cancel {\r\n  width: 152px;\r\n  height: 39px;\r\n  border-radius: 20px;\r\n  border: 1px solid #828282;\r\n  text-align: center;\r\n  line-height: 39px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin-left: 22px;\r\n}\r\n\r\n.btn-ok {\r\n  width: 152px;\r\n  height: 39px;\r\n  border-radius: 20px;\r\n  color: #FFF;\r\n  background-color: #003F88;\r\n  border: 1px solid #828282;\r\n  text-align: center;\r\n  line-height: 39px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin-left: 22px;\r\n}\r\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Index.vue?vue&type=template&id=a3df8fc4&scoped=true\"\nimport script from \"./Index.vue?vue&type=script&lang=js\"\nexport * from \"./Index.vue?vue&type=script&lang=js\"\nimport style0 from \"./Index.vue?vue&type=style&index=0&id=a3df8fc4&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"a3df8fc4\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"learn\"},[_c('van-nav-bar',{attrs:{\"title\":\"书海遨游\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('img',{staticClass:\"top-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/2.png\",\"mode\":\"\"}}),_c('div',{staticClass:\"main-top\"},[_c('div',{staticClass:\"reback\",attrs:{\"bind:tap\":\"go_back\"}},[_c('van-icon',{attrs:{\"name\":\"arrow-left\",\"color\":\"#606060\"}})],1),_c('div',{staticClass:\"pagetitle\"},[_vm._v(\"主题阅读\")])]),_c('div',{staticClass:\"main-content\"},[_c('div',{staticClass:\"content-mian\"},[_c('div',{staticClass:\"listen-title\"},[_vm._v(\"[阅读]\"+_vm._s(_vm.subject_name))]),(_vm.resources.length == 0 || _vm.resources == [] || _vm.loading == true)?_c('div',{staticClass:\"empty\",staticStyle:{\"width\":\"100%\",\"height\":\"80px\",\"text-align\":\"center\",\"line-height\":\"80px\"}},[_c('van-loading',{attrs:{\"size\":\"24px\"}},[_vm._v(\"加载中...\")])],1):_vm._e(),_vm._l((_vm.resources),function(item,index){return _c('div',{key:index,staticClass:\"listen-item\",on:{\"click\":function($event){return _vm.to_praxis(item)}}},[_c('div',{staticClass:\"listen-left\"},[_c('div',{staticClass:\"listen-name\"},[_vm._v(_vm._s(item.name))])]),_c('div',{staticClass:\"listen-right\"},[(item.status == 0)?_c('div',{staticClass:\"listen-status\"},[_vm._v(\"未完成\")]):_vm._e(),(item.status == 1)?_c('div',{staticClass:\"listen-status listen-status3\"},[_vm._v(\"上次未学完\")]):_vm._e(),(item.status == 2)?_c('div',{staticClass:\"listen-status listen-status3\"},[_vm._v(\"已学\")]):_vm._e(),(item.hisLabel == 1)?_c('div',{staticClass:\"listen-status listen-status3\",staticStyle:{\"color\":\"red\"}},[_vm._v(\"历史已做\")]):_vm._e()])])})],2)]),_c('ReadLearnAi',{attrs:{\"allow\":\"microphone\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('span',{staticClass:\"reback\",on:{\"click\":_vm.to_dingtalk}},[_vm._v(\"问题反馈\")]),(!_vm.is_show_ai)?_c('img',{staticClass:\"wyt\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\",\"mode\":\"widthFix\"},on:{\"click\":_vm.change_show_ai}}):_vm._e(),(_vm.is_show_ai)?_c('div',{staticClass:\"check-main-ai\"},[_c('div',{staticClass:\"guanbi\",on:{\"click\":_vm.change_show_ai}},[_c('van-icon',{attrs:{\"name\":\"cross\",\"color\":\"#606060\"}})],1),_c('img',{staticClass:\"wyt-say\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\",\"mode\":\"widthFix\"}}),_c('div',{staticClass:\"say-text\"},[_vm._v(\"嗨，你好，一起开启外语学习吧\")]),_c('div',{staticClass:\"fast-parent\"},[_c('div',{staticClass:\"fast-box\",on:{\"click\":function($event){_vm.chat('Generate a reading passage (within 120 words) suitable for me and ask a question based on this passage to help me better understand the main idea.')}}},[_c('span',[_vm._v(\" 生成一篇适合我的阅读练习篇章 \")])]),_c('div',{staticClass:\"fast-box\",on:{\"click\":function($event){_vm.chat('Briefly introduce methods to improve reading comprehension skills (within 60 words).')}}},[_c('span',[_vm._v(\" 介绍提升阅读理解能力的方法 \")])]),_c('div',{staticClass:\"fast-box\",on:{\"click\":function($event){_vm.chat('Briefly introduce how to grasp the main idea in reading practice (within 60 words).')}}},[_c('span',[_vm._v(\" 如何在阅读练习中抓住主旨大意 \")])])]),_c('div',{staticClass:\"input-box\"},[_c('button',{staticClass:\"button-default\",style:(_vm.speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''),on:{\"click\":_vm.to_chat}},[_vm._v(\"去对话\")])])]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- src/layouts/TabBarLayout.vue -->\r\n\r\n<template>\r\n    <div>\r\n        <!-- 初始状态下显示的图片，点击可切换显示 -->\r\n        <span class=\"reback\" @click=\"to_dingtalk\">问题反馈</span>\r\n        <img v-if=\"!is_show_ai\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\"\r\n            mode=\"widthFix\" @click=\"change_show_ai\" class=\"wyt\" />\r\n        <!-- 显示 AI 伴学功能的主要界面 -->\r\n        <div class=\"check-main-ai\" v-if=\"is_show_ai\">\r\n            <div class=\"guanbi\" @click=\"change_show_ai\">\r\n                <van-icon name=\"cross\" color=\"#606060\" />\r\n            </div>\r\n            <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\" mode=\"widthFix\"\r\n                class=\"wyt-say\" />\r\n            <div class=\"say-text\">嗨，你好，一起开启外语学习吧</div>\r\n            <!-- 功能选项按钮 -->\r\n            <div class=\"fast-parent\">\r\n                <div class=\"fast-box\"\r\n                    @click=\"chat('Generate a reading passage (within 120 words) suitable for me and ask a question based on this passage to help me better understand the main idea.')\">\r\n                    <span>\r\n                        生成一篇适合我的阅读练习篇章\r\n                    </span>\r\n                </div>\r\n                <div class=\"fast-box\"\r\n                    @click=\"chat('Briefly introduce methods to improve reading comprehension skills (within 60 words).')\">\r\n                    <span>\r\n                        介绍提升阅读理解能力的方法\r\n                    </span>\r\n                </div>\r\n                <div class=\"fast-box\"\r\n                    @click=\"chat('Briefly introduce how to grasp the main idea in reading practice (within 60 words).')\">\r\n                    <span>\r\n                        如何在阅读练习中抓住主旨大意\r\n                    </span>\r\n                </div>\r\n            </div>\r\n            <div class=\"input-box\">\r\n                <button class=\"button-default\"\r\n                    :style=\"speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''\"\r\n                    @click=\"to_chat\">去对话</button>\r\n            </div>\r\n            <!-- 输入框和录音按钮 -->\r\n            <!-- <div class=\"input-box\" v-show=\"is_speak == 1\">\r\n                <input class=\"question\" maxlength=\"-1\" v-model=\"stu_content\" @input=\"inputText\"\r\n                    placeholder-class=\"placeholder\" :placeholder=\"stu_placeholder\" type=\"text\" />\r\n            </div>\r\n            <div class=\"input-box\" v-show=\"is_speak != 1\">\r\n                <button class=\"button-default\"\r\n                    :style=\"speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''\"\r\n                    @touchstart=\"recStart\" @touchend=\"recStop\">{{ stu_placeholder }}</button>\r\n            </div> -->\r\n            <!-- 发送信息和切换语音输入的按钮 -->\r\n            <!-- <div class=\"say-box\" id=\"end\" v-if=\"speaking === false\">\r\n                <img v-if=\"stu_content !== '' && is_speak === 1\" @click=\"to_chat\" class=\"send-img\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/send_msg.png\" mode=\"aspectFill\" />\r\n                <img v-if=\"stu_content === '' && is_speak === 1\" @click=\"chang_speak\" data-is-speak=\"0\"\r\n                    class=\"other-img\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/audio.png\"\r\n                    mode=\"scaleToFill\" />\r\n                <img v-if=\"stu_content === '' && is_speak === 0 && speaking === false\" @click=\"chang_hand\"\r\n                    data-is-speak=\"1\" class=\"other-img\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/hand.png\" mode=\"scaleToFill\" />\r\n            </div> -->\r\n        </div>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\n//必须引入的核心\r\nimport Recorder from 'recorder-core'\r\n\r\n//引入mp3格式支持文件；如果需要多个格式支持，把这些格式的编码引擎js文件放到后面统统引入进来即可\r\nimport 'recorder-core/src/engine/mp3'\r\nimport 'recorder-core/src/engine/mp3-engine'\r\n//录制wav格式的用这一句就行\r\nimport 'recorder-core/src/engine/wav'\r\n\r\n//可选的插件支持项，这个是波形可视化插件\r\nimport 'recorder-core/src/extensions/waveview'\r\n//ts import 提示：npm包内已自带了.d.ts声明文件（不过是any类型）\r\nexport default {\r\n    name: 'ReadAi',\r\n    props: {\r\n        subject_name: {\r\n            type: String,\r\n            reqired: true\r\n        }\r\n    },\r\n    data() {\r\n        return {\r\n            listData: [],\r\n            is_show_ai: false,\r\n            stu_placeholder: '请输入你的疑问...',\r\n            stu_content: '',\r\n            is_speak: 1,\r\n            canuse: 1,\r\n            res_id: '',\r\n            type: 0,\r\n            lang_time: 0,\r\n            speaking: false,\r\n            recorder: null,\r\n            mediaStream: null,\r\n            audioChunks: [],\r\n            audioDetails: null // 新增用于存储音频文件详细信息的状态\r\n        }\r\n    },\r\n    watch: {\r\n        '$route.path': function (newPath) {\r\n            this.active = newPath // 路由变化时更新激活的路由\r\n        }\r\n    },\r\n    methods: {\r\n        async to_dingtalk() {\r\n            window.location.href = 'https://qr.dingtalk.com/action/joingroup?code=v1,k1,IhOSmROFTSw+3pBELANkfbCOdwZd2JiTcd6YyE+gR7k=&_dt_no_comment=1&origin=11';\r\n        },\r\n        async inputText() {\r\n            console.log(this.stu_content)\r\n            this.type = 0\r\n        },\r\n        async chat(item) {\r\n            this.$router.push({\r\n                name: 'NewChat', query: {\r\n                    project_id: 0,\r\n                    is_history: 0,\r\n                    lang_time: this.lang_time,\r\n                    filePath: this.filePath,\r\n                    type: 0,\r\n                    stype: 'read',\r\n                    from: 'read',\r\n                    chat_title: 'E-Read',\r\n                    system: this.subject_name,\r\n                    content: item,\r\n                    res_id: this.res_id\r\n                }\r\n            })\r\n        },\r\n        async to_chat() {\r\n            this.$router.push({\r\n                name: 'NewChat', query: {\r\n                    project_id: 0,\r\n                    is_history: 0,\r\n                    lang_time: this.lang_time,\r\n                    filePath: this.filePath,\r\n                    type: this.type,\r\n                    stype: 'read',\r\n                    from: 'read',\r\n                    chat_title: 'E-Read',\r\n                    system: this.subject_name,\r\n                    content: this.stu_content,\r\n                    res_id: this.res_id\r\n                }\r\n            })\r\n        },\r\n        async chang_speak() {\r\n            await this.recOpen();\r\n            this.is_speak = 0;\r\n            this.stu_placeholder = \"按住说话...\";\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n\r\n        async chang_hand() {\r\n            this.is_speak = 1;\r\n            this.stu_placeholder = \"请输入你的疑问...\";\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n\r\n        change_show_ai() {\r\n            this.is_show_ai = !this.is_show_ai\r\n        },\r\n        async recOpen() {\r\n            //创建录音对象\r\n            this.rec = Recorder({\r\n                type: \"mp3\" //录音格式，可以换成wav等其他格式\r\n                , sampleRate: 16000 //录音的采样率，越大细节越丰富越细腻\r\n                , bitRate: 16 //录音的比特率，越大音质越好\r\n                , onProcess: (buffers, powerLevel, bufferSampleRate) => {\r\n                    //录音实时回调，大约1秒调用12次本回调\r\n                    //可实时绘制波形，实时上传（发送）数据\r\n                    if (this.wave) this.wave.input(buffers[buffers.length - 1], powerLevel, bufferSampleRate);\r\n                }\r\n            });\r\n\r\n            //打开录音，获得权限\r\n            this.rec.open(() => {\r\n                console.log(\"录音已打开\");\r\n                if (this.$refs.recwave) {//创建音频可视化图形绘制对象\r\n                    this.wave = Recorder.WaveDiv({ elem: this.$refs.recwave });\r\n                }\r\n            }, (msg, isUserNotAllow) => {\r\n                //用户拒绝了录音权限，或者浏览器不支持录音\r\n                console.log((isUserNotAllow ? \"UserNotAllow，\" : \"\") + \"无法录音:\" + msg);\r\n            });\r\n            // this.startRecognition(); // 启动语音识别\r\n        },\r\n        async recStart() {\r\n            if (!this.rec) { console.error(\"未打开录音\"); return }\r\n            this.rec.start();\r\n            this.stu_placeholder = '正在说话';\r\n            this.speaking = true;\r\n            console.log(\"已开始录音\");\r\n            if (this.recognition) {\r\n                this.recognition.start(); // 启动语音识别\r\n            }\r\n        },\r\n        async recStop() {\r\n            if (!this.rec) { console.error(\"未打开录音\"); return }\r\n            this.rec.stop((blob, duration) => {\r\n                //blob就是我们要的录音文件对象，可以上传，或者本地播放\r\n                this.recBlob = blob;\r\n                //简单利用URL生成本地文件地址，此地址只能本地使用，比如赋值给audio.src进行播放，赋值给a.href然后a.click()进行下载（a需提供download=\"xxx.mp3\"属性）\r\n                var localUrl = (window.URL).createObjectURL(blob);\r\n                console.log(\"录音成功\", blob, localUrl, \"时长:\" + duration + \"ms\");\r\n                this.stu_placeholder = '按住说话';\r\n                this.lang_time = (duration / 1000).toFixed()\r\n                this.type = 1\r\n                this.speaking = false;\r\n                this.upload(blob);//把blob文件上传到服务器\r\n                if (this.recognition) {\r\n                    this.recognition.stop(); // 停止语音识别\r\n                }\r\n                // this.rec.close();//关闭录音，释放录音资源，当然可以不释放，后面可以连续调用start\r\n                // this.rec = null;\r\n            }, (err) => {\r\n                console.error(\"结束录音出错：\" + err);\r\n                // this.rec.close();//关闭录音，释放录音资源，当然可以不释放，后面可以连续调用start\r\n                // this.rec = null;\r\n            });\r\n        },\r\n        startRecognition() {\r\n            const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;\r\n            if (SpeechRecognition) {\r\n                this.recognition = new SpeechRecognition();\r\n                // 配置和使用 recognition 对象\r\n            } else {\r\n                console.error('该浏览器不支持语音识别');\r\n            }\r\n\r\n            this.recognition.continuous = true;\r\n            this.recognition.interimResults = true;\r\n            this.recognition.lang = 'en-US';\r\n\r\n            this.recognition.onresult = (event) => {\r\n                let interimTranscript = '';\r\n                let finalTranscript = '';\r\n\r\n                for (let i = event.resultIndex; i < event.results.length; i++) {\r\n                    if (event.results[i].isFinal) {\r\n                        finalTranscript += event.results[i][0].transcript;\r\n                    } else {\r\n                        interimTranscript += event.results[i][0].transcript;\r\n                    }\r\n                }\r\n\r\n                this.content = finalTranscript || interimTranscript;\r\n            };\r\n\r\n            this.recognition.onerror = (event) => {\r\n                console.error('识别错误: ', event.error);\r\n            };\r\n\r\n            this.recognition.onend = () => {\r\n                console.log('识别结束' + this.content);\r\n            };\r\n        },\r\n        async upload(blob) {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    var form = new FormData();\r\n                    form.append(\"file\", blob, user.sid + \"-\" + new Date().getTime() + \".mp3\"); //和普通form表单并无二致，后端接收到upfile参数的文件，文件名为recorder.mp3\r\n                    form.append(\"key\", \"value\"); //其他参数\r\n\r\n                    var xhr = new XMLHttpRequest();\r\n                    xhr.open(\"POST\", \"https://elang.zju.edu.cn:8082/mobileupload/upload\");\r\n                    // xhr.open(\"POST\", \"https://zju.3dease.com/fcapi/mobileupload/upload\");\r\n                    xhr.onreadystatechange = () => {\r\n                        if (xhr.readyState === 4) {\r\n                            if (xhr.status === 200) {\r\n                                // 请求成功，解析响应\r\n                                var response = JSON.parse(xhr.responseText);\r\n                                console.log(\"上传成功，服务器返回的数据:\", response);\r\n                                this.filePath = response.data.url\r\n                                // 在这里处理服务器返回的数据\r\n                                // this.startRecognition()\r\n                                this.type = 1; //消息类型\r\n                                this.to_chat()\r\n                            } else {\r\n                                // 请求失败，处理错误\r\n                                console.error(\"上传失败，状态码:\", xhr.status);\r\n                                console.error(\"错误信息:\", xhr.statusText);\r\n                            }\r\n                        }\r\n                    };\r\n                    xhr.send(form);\r\n\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async recPlay() {\r\n            //本地播放录音试听，可以直接用URL把blob转换成本地播放地址，用audio进行播放\r\n            var localUrl = URL.createObjectURL(this.recBlob);\r\n            var audio = document.createElement(\"audio\");\r\n            audio.controls = true;\r\n            document.body.appendChild(audio);\r\n            audio.src = localUrl;\r\n            audio.play(); //这样就能播放了\r\n\r\n            //注意不用了时需要revokeObjectURL，否则霸占内存\r\n            setTimeout(function () { URL.revokeObjectURL(audio.src) }, 5000);\r\n        },\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n\r\n    }\r\n}\r\n</script>\r\n\r\n\r\n<style scoped>\r\n.check-main-ai {\r\n    width: 100vw;\r\n    height: auto;\r\n    max-height: 400px;\r\n    overflow-y: auto;\r\n    background: linear-gradient(134deg, #eff7fe, #e3f3ff);\r\n    padding-bottom: 25px;\r\n    position: fixed;\r\n    bottom: 0px;\r\n    border-radius: 40px 40px 0 0;\r\n    z-index: 200;\r\n}\r\n\r\n.guanbi {\r\n    width: auto;\r\n    height: auto;\r\n    position: fixed;\r\n    right: 10px;\r\n    text-align: center;\r\n    padding: 8px 15px;\r\n    font-weight: bold;\r\n    /* background-color: rgba(236, 221, 10, 0.3); */\r\n    border-radius: 40px;\r\n}\r\n\r\n.wyt-say {\r\n    width: 75px;\r\n    height: 75px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.say-text {\r\n    width: 300px;\r\n    height: 75px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 60px;\r\n    font-size: 14px;\r\n}\r\n\r\n.fast-parent {\r\n    padding-left: 10vw;\r\n}\r\n\r\n.fast-box {\r\n    width: 80px;\r\n    height: 55px;\r\n    background: #ffffff;\r\n    border-radius: 0px 20px 0px 20px;\r\n    border: 1px solid #acc5ff;\r\n    margin-left: 5px;\r\n    color: #686868;\r\n    font-size: 12px;\r\n    text-align: center;\r\n    padding: 8px 9px;\r\n    text-align: center;\r\n    margin-bottom: 110px;\r\n    align-items: center;\r\n    display: flex;\r\n    float: left;\r\n}\r\n\r\n.fast-box:last-child {\r\n    margin-right: 0;\r\n}\r\n\r\n.input-box {\r\n    width: 80vw;\r\n    height: 42px;\r\n    background: #ffffff;\r\n    border-radius: 16px;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border: none;\r\n}\r\n\r\n.question {\r\n    padding: 10px 60px 10px 15px;\r\n    font-size: 14px;\r\n    color: #000;\r\n    border: none;\r\n}\r\n\r\n.placeholder {\r\n    font-size: 14px;\r\n    color: #989898;\r\n    padding: 3px 15px;\r\n}\r\n\r\n.say-box {\r\n    width: 60px;\r\n    height: 42px;\r\n    background: #ffffff;\r\n    border-radius: 15px;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 293px;\r\n}\r\n\r\n.say-img {\r\n    width: 10px;\r\n    height: 15px;\r\n    padding: 7px 25px;\r\n}\r\n\r\n.send-img {\r\n    width: 53px;\r\n    height: 30px;\r\n    position: fixed;\r\n    bottom: 50px;\r\n    left: 293px;\r\n}\r\n\r\n.other-img {\r\n    width: 25px;\r\n    height: 25px;\r\n    position: fixed;\r\n    bottom: 53px;\r\n    left: 326px;\r\n}\r\n\r\n.button-default {\r\n    background: #fff;\r\n    /* color: #000000; */\r\n    height: 42px;\r\n    width: 323px;\r\n    line-height: 25px;\r\n    text-align: center;\r\n    border-radius: 21;\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n    border: none;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border-radius: 16px;\r\n}\r\n\r\n.button-speaking {\r\n    background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);\r\n    color: #fff;\r\n    height: 42px;\r\n    width: 333px;\r\n    line-height: 25px;\r\n    /* text-align: center; */\r\n    border-radius: 21px;\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n    z-index: 100;\r\n    border: none;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border-radius: 16px;\r\n}\r\n\r\n.reback {\r\n    position: fixed;\r\n    bottom: 160px;\r\n    right: 5px;\r\n    font-size: 16px;\r\n    width: 20px;\r\n    padding: 10px 5px;\r\n    background: rgba(2, 208, 245, 0.5);\r\n    border-radius: 10px;\r\n}\r\n\r\n.wyt {\r\n    position: fixed;\r\n    bottom: 60px;\r\n    right: 5px;\r\n    width: 75px;\r\n    height: 75px;\r\n}\r\n\r\n.btn-test {\r\n    position: absolute;\r\n    top: 0;\r\n}\r\n\r\n.btn-test2 {\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReadLearnAi.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReadLearnAi.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ReadLearnAi.vue?vue&type=template&id=a3debdbc&scoped=true\"\nimport script from \"./ReadLearnAi.vue?vue&type=script&lang=js\"\nexport * from \"./ReadLearnAi.vue?vue&type=script&lang=js\"\nimport style0 from \"./ReadLearnAi.vue?vue&type=style&index=0&id=a3debdbc&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"a3debdbc\",\n  null\n  \n)\n\nexport default component.exports","<template>\r\n    <div class=\"learn\">\r\n        <van-nav-bar title=\"书海遨游\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <img class=\"top-img\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/2.png\" mode=\"\" />\r\n        <div class=\"main-top\">\r\n            <div class=\"reback\" bind:tap=\"go_back\">\r\n                <van-icon name=\"arrow-left\" color=\"#606060\" />\r\n            </div>\r\n            <div class=\"pagetitle\">主题阅读</div>\r\n        </div>\r\n        <div class=\"main-content\">\r\n            <div class=\"content-mian\">\r\n                <div class=\"listen-title\">[阅读]{{ subject_name }}</div>\r\n                <div class=\"empty\" style=\" width:100%;height: 80px;text-align: center;line-height: 80px;\"\r\n                    v-if=\"resources.length == 0 || resources == [] || loading == true\">\r\n                    <van-loading size=\"24px\">加载中...</van-loading>\r\n                </div>\r\n                <div class=\"listen-item\" v-for=\"(item, index) in resources\" :key=\"index\" @click=\"to_praxis(item)\">\r\n                    <div class=\"listen-left\">\r\n                        <div class=\"listen-name\">{{ item.name }}</div>\r\n                    </div>\r\n                    <div class=\"listen-right\">\r\n                        <div class=\"listen-status\" v-if=\"item.status == 0\">未完成</div>\r\n                        <div class=\"listen-status listen-status3\" v-if=\"item.status == 1\">上次未学完</div>\r\n                        <div class=\"listen-status listen-status3\" v-if=\"item.status == 2\">已学</div>\r\n                        <div class=\"listen-status listen-status3\" style=\"color: red;\" v-if=\"item.hisLabel == 1\">历史已做</div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n        <ReadLearnAi allow=\"microphone\" />\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getResources, saveUserStudyResource } from '@/api/listen'\r\nimport ReadLearnAi from \"@/components/ReadLearnAi\";\r\nexport default {\r\n    components: { ReadLearnAi },\r\n    name: 'Learn',\r\n    data() {\r\n        return {\r\n            subject_id: 0,\r\n            subject_name: '',\r\n            resources: [],\r\n            loading:false\r\n        }\r\n    },\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        async getList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getResources({ sid: user.sid, subject_id: this.subject_id })\r\n                    const data = response.data\r\n                    this.resources = data\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async to_praxis(item) {\r\n            try {\r\n                this.loading = true\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await saveUserStudyResource({ sid: user.sid, resource_id: item.id })\r\n                    const data = response.data\r\n                    this.$router.push({ name: 'ReadPraxis', query: { log_id: data, resources_id: item.id } })\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        }\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        this.subject_id = this.$route.query.subject_id;\r\n        this.subject_name = this.$route.query.subject_name;\r\n        this.getList()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n.top-img {\r\n    width: 100vw;\r\n    height: 425px;\r\n    position: absolute;\r\n    top: 0;\r\n    left: 0;\r\n}\r\n\r\n.main-top {\r\n    width: 100vw;\r\n    height: 425px;\r\n    position: absolute;\r\n    top: 0;\r\n    left: 0;\r\n    text-align: left;\r\n}\r\n\r\n.reback {\r\n    padding: 20px 0 0 12px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.pagetitle {\r\n    padding: 20px 0 0 150px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    font-size: 16px;\r\n    color: #030303;\r\n}\r\n\r\n.main-content {\r\n    width: 100vw;\r\n    height: 532px;\r\n    background: #FFFFFF;\r\n    border-radius: 32px;\r\n    position: relative;\r\n    top: 252px;\r\n}\r\n\r\n.content-mian {\r\n    width: 90vw;\r\n    height: 532px;\r\n    margin: 0 auto;\r\n}\r\n\r\n.listen-title {\r\n    color: #000000;\r\n    font-size: 16px;\r\n    font-weight: bold;\r\n    padding-top: 23px;\r\n    text-align: center;\r\n}\r\n\r\n.listen-item {\r\n    width: 100%;\r\n    border-bottom: solid 1px #E4E4E4;\r\n    padding: 10px 0;\r\n}\r\n\r\n.listen-left {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 210px;\r\n}\r\n\r\n.listen-name {\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n    margin: 16px 0 8px 0;\r\n}\r\n\r\n.listen-right {\r\n    width: 100px;\r\n    text-align: right;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.listen-status {\r\n    padding-top: 16px;\r\n    font-size: 14px;\r\n    color: #919191;\r\n}\r\n\r\n.listen-status3 {\r\n    color: #51BF23;\r\n}\r\n\r\n.listen-status1,\r\n.listen-status2,\r\n.listen-status0 {\r\n    color: #919191;\r\n}\r\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Learn.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Learn.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Learn.vue?vue&type=template&id=5c0e3ff6&scoped=true\"\nimport script from \"./Learn.vue?vue&type=script&lang=js\"\nexport * from \"./Learn.vue?vue&type=script&lang=js\"\nimport style0 from \"./Learn.vue?vue&type=style&index=0&id=5c0e3ff6&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"5c0e3ff6\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"praxis\"},[(_vm.dialog_show == false)?_c('div',{staticClass:\"Verify-box\"},[_c('img',{attrs:{\"src\":_vm.imageBase64}}),_c('div',{staticClass:\"input-box\"},[_c('span',[_vm._v(\"请输入验证码：\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.Verify),expression:\"Verify\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.Verify)},on:{\"input\":function($event){if($event.target.composing)return;_vm.Verify=$event.target.value}}})]),_c('div',{staticClass:\"btn-Verify\",on:{\"click\":_vm.checkCaptcha}},[_vm._v(\"提交\")])]):_c('div',[_c('van-nav-bar',{attrs:{\"title\":_vm.resources.resources?.name,\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),(!_vm.loading)?_c('div',{staticClass:\"empty\",staticStyle:{\"width\":\"100%\",\"height\":\"80px\",\"text-align\":\"center\"}},[_c('van-loading',{attrs:{\"size\":\"24px\"}},[_vm._v(\"加载中...\")])],1):_vm._e(),(_vm.HistoryList.length > 0 && _vm.resources.resources.name != '加载中')?_c('div',{staticClass:\"last-box\"},[_c('div',{staticClass:\"last-title\",on:{\"click\":function($event){return _vm.to_detail(_vm.HistoryList[0])}}},[_vm._v(\"答题\"),_c('br'),_vm._v(\"记录\")]),_c('div',{staticClass:\"last-count\"},[_c('span',{staticStyle:{\"font-size\":\"20px\",\"font-weight\":\"bold\"}},[_vm._v(_vm._s(_vm.HistoryList[0].right_count))]),_vm._v(\"/\"+_vm._s(_vm.HistoryList[0].total_count)+\"(第\"+_vm._s(_vm.HistoryList.length)+\"次)\"),_c('br'),_vm._v(\" 正确率：\"+_vm._s(_vm.correctRate)+\"% \")]),_c('div',{staticClass:\"last-right\"},[_c('div',{staticClass:\"all-last\",on:{\"click\":_vm.to_HistoryList}},[_vm._v(\"全部\")]),_c('div',{staticClass:\"last-time\"},[_vm._v(\"提交时间：\"+_vm._s(_vm.HistoryList[0].create_time))])])]):_vm._e(),(_vm.jobList.length > 0 && _vm.resources.resources?.name != '加载中')?_c('PaxisCommon',{attrs:{\"resources_id\":_vm.resources_id,\"log_id\":_vm.log_id,\"fromtype\":\"read\",\"allow\":\"microphone\"}}):_vm._e(),_c('div',{staticClass:\"wall\"}),(_vm.jobList.length > 0)?_c('div',{staticClass:\"answer-box\"},[_c('div',{staticClass:\"answer-btn\",on:{\"click\":_vm.change_praxis_show}},[_vm._v(\"查看原文\")])]):_vm._e(),(_vm.jobList.length > 0)?_c('van-action-sheet',{staticStyle:{\"background-color\":\"aliceblue\"},attrs:{\"title\":\"原文\"},model:{value:(_vm.praxis_show),callback:function ($$v) {_vm.praxis_show=$$v},expression:\"praxis_show\"}},[(_vm.isPdfResource)?_c('PdfViewer',{attrs:{\"src\":_vm.resources.resources?.file_path}}):_c('ArticleParser',{attrs:{\"content\":_vm.resources.resources?.content},on:{\"word-click\":_vm.onWordClick}})],1):_c('div',{staticClass:\"article\"},[(_vm.isPdfResource)?_c('PdfViewer',{attrs:{\"src\":_vm.resources.resources?.file_path}}):_c('ArticleParser',{attrs:{\"content\":_vm.resources.resources?.content},on:{\"word-click\":_vm.onWordClick}})],1),(_vm.cansubmit == true && _vm.jobList.length == 0)?_c('div',{staticClass:\"btn-ok\",on:{\"click\":_vm.to_submit}},[_vm._v(\"完成阅读\")]):_vm._e(),(_vm.cansubmit == false && _vm.jobList.length == 0 && _vm.resources.resources.name != '加载中')?_c('div',{staticClass:\"btn-ok-no\"},[_vm._v(\"完成阅读(\"+_vm._s(_vm.countdown)+\"s) \")]):_vm._e(),_c('ReadPraxisAi',{attrs:{\"resources_id\":_vm.resources_id,\"allow\":\"microphone\"}})],1),_c('van-action-sheet',{staticStyle:{\"min-height\":\"300px\",\"background-color\":\"aliceblue\",\"z-index\":\"9999\"},attrs:{\"title\":\"单词释义\"},on:{\"close\":_vm.change_praxis_show,\"click-overlay\":_vm.change_praxis_show},model:{value:(_vm.word_show),callback:function ($$v) {_vm.word_show=$$v},expression:\"word_show\"}},[_c('div',{staticClass:\"collect\"},[_c('div',{staticStyle:{\"text-align\":\"left\",\"display\":\"inline-block\",\"vertical-align\":\"top\",\"width\":\"40%\",\"padding-left\":\"10px\",\"font-size\":\"24px\",\"font-weight\":\"500\"}},[_vm._v(\" \"+_vm._s(_vm.word))]),_c('div',{staticClass:\"collect-icon\",staticStyle:{\"text-align\":\"right\",\"display\":\"inline-block\",\"vertical-align\":\"top\",\"width\":\"50%\"}},[(_vm.scColor == false)?_c('van-icon',{attrs:{\"name\":\"star\",\"size\":\"30\",\"color\":\"#D9DCE3\"},on:{\"click\":_vm.add_word}}):_c('van-icon',{attrs:{\"name\":\"star\",\"size\":\"30\",\"color\":\"orange\"}})],1)]),_c('div',{staticClass:\"word-box\"},_vm._l((_vm.wordDetail),function(item,index){return _c('div',{key:index,staticClass:\"word-item\"},[_c('div',{staticClass:\"item-meaning_CH\"},[_vm._v(_vm._s(item.type)+\"  :  \"+_vm._s(item.meaning_CH))])])}),0)])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[(!_vm.is_show_ai)?_c('img',{staticClass:\"wyt\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\",\"mode\":\"widthFix\"},on:{\"click\":_vm.change_show_ai}}):_vm._e(),(_vm.is_show_ai)?_c('div',{staticClass:\"check-main-ai\"},[_c('div',{staticClass:\"guanbi\",on:{\"click\":_vm.change_show_ai}},[_c('van-icon',{attrs:{\"name\":\"cross\",\"color\":\"#606060\"}})],1),_c('img',{staticClass:\"wyt-say\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\",\"mode\":\"widthFix\"}}),_c('div',{staticClass:\"say-text\"},[_vm._v(\"嗨，你好，一起开启外语学习吧\")]),_c('div',{staticClass:\"fast-parent\"},[_c('div',{staticClass:\"fast-box\",on:{\"click\":function($event){_vm.chat('read_gist', 'Briefly summarize the main idea of the article (within 60 words). ')}}},[_c('span',[_vm._v(\" 概括文章主旨大意 \")])]),_c('div',{staticClass:\"fast-box\",on:{\"click\":function($event){_vm.chat('read_structure', 'Briefly analyze the structure of the article (within 80 words).')}}},[_c('span',[_vm._v(\" 分析文章逻辑结构 \")])]),_c('div',{staticClass:\"fast-box\",on:{\"click\":_vm.translate}},[_c('span',[_vm._v(\" 翻译本篇练习材料 \")])])]),_c('div',{staticClass:\"input-box\"},[_c('button',{staticClass:\"button-default\",style:(_vm.speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''),on:{\"click\":_vm.to_chat}},[_vm._v(\"去对话\")])])]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- src/layouts/TabBarLayout.vue -->\r\n\r\n<template>\r\n    <div>\r\n        <!-- 初始状态下显示的图片，点击可切换显示 -->\r\n        <img v-if=\"!is_show_ai\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\"\r\n            mode=\"widthFix\" @click=\"change_show_ai\" class=\"wyt\" />\r\n        <!-- 显示 AI 伴学功能的主要界面 -->\r\n        <div class=\"check-main-ai\" v-if=\"is_show_ai\">\r\n            <div class=\"guanbi\" @click=\"change_show_ai\">\r\n                <van-icon name=\"cross\" color=\"#606060\" />\r\n            </div>\r\n            <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\" mode=\"widthFix\"\r\n                class=\"wyt-say\" />\r\n            <div class=\"say-text\">嗨，你好，一起开启外语学习吧</div>\r\n            <!-- 功能选项按钮 -->\r\n            <div class=\"fast-parent\">\r\n                <div class=\"fast-box\" @click=\"chat('read_gist', 'Briefly summarize the main idea of the article (within 60 words). ')\">\r\n                    <span>\r\n                        概括文章主旨大意\r\n                    </span>\r\n                </div>\r\n                <div class=\"fast-box\" @click=\"chat('read_structure', 'Briefly analyze the structure of the article (within 80 words).')\">\r\n                    <span>\r\n                        分析文章逻辑结构\r\n                    </span>\r\n                </div>\r\n                <div class=\"fast-box\" @click=\"translate\">\r\n                    <span>\r\n                        翻译本篇练习材料\r\n                    </span>\r\n                </div>\r\n                <!-- <div class=\"fast-box\" @click=\"chat('read_details', 'Give a brief analysis of the complex long sentences (sentences with more than three clauses) in this article (within 120 words).')\">\r\n                    <span>\r\n                        分析文章复杂句子\r\n                    </span>\r\n                </div> -->\r\n            </div>\r\n            <div class=\"input-box\">\r\n                <button class=\"button-default\"\r\n                    :style=\"speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''\"\r\n                    @click=\"to_chat\">去对话</button>\r\n            </div>\r\n            <!-- 输入框和录音按钮 -->\r\n            <!-- <div class=\"input-box\" v-show=\"is_speak == 1\">\r\n                <input class=\"question\" maxlength=\"-1\" v-model=\"stu_content\" @input=\"inputText\"\r\n                    placeholder-class=\"placeholder\" :placeholder=\"stu_placeholder\" type=\"text\" />\r\n            </div>\r\n            <div class=\"input-box\" v-show=\"is_speak != 1\">\r\n                <button class=\"button-default\"\r\n                    :style=\"speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''\"\r\n                    @touchstart=\"recStart\" @touchend=\"recStop\">{{ stu_placeholder }}</button>\r\n            </div> -->\r\n            <!-- 发送信息和切换语音输入的按钮 -->\r\n            <!-- <div class=\"say-box\" id=\"end\" v-if=\"speaking === false\">\r\n                <img v-if=\"stu_content !== '' && is_speak === 1\" @click=\"to_chat\" class=\"send-img\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/send_msg.png\" mode=\"aspectFill\" />\r\n                <img v-if=\"stu_content === '' && is_speak === 1\" @click=\"chang_speak\" data-is-speak=\"0\"\r\n                    class=\"other-img\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/audio.png\"\r\n                    mode=\"scaleToFill\" />\r\n                <img v-if=\"stu_content === '' && is_speak === 0 && speaking === false\" @click=\"chang_hand\"\r\n                    data-is-speak=\"1\" class=\"other-img\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/hand.png\" mode=\"scaleToFill\" />\r\n            </div> -->\r\n        </div>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\n//必须引入的核心\r\nimport Recorder from 'recorder-core'\r\n\r\n//引入mp3格式支持文件；如果需要多个格式支持，把这些格式的编码引擎js文件放到后面统统引入进来即可\r\nimport 'recorder-core/src/engine/mp3'\r\nimport 'recorder-core/src/engine/mp3-engine'\r\n//录制wav格式的用这一句就行\r\nimport 'recorder-core/src/engine/wav'\r\n\r\n//可选的插件支持项，这个是波形可视化插件\r\nimport 'recorder-core/src/extensions/waveview'\r\n//ts import 提示：npm包内已自带了.d.ts声明文件（不过是any类型）\r\nexport default {\r\n    name: 'ReadAi',\r\n    props: {\r\n        resources_id: {\r\n            type: [String, Number],\r\n            reqired: true\r\n        }\r\n    },\r\n    data() {\r\n        return {\r\n            listData: [],\r\n            is_show_ai: false,\r\n            stu_placeholder: '请输入你的疑问...',\r\n            stu_content: '',\r\n            is_speak: 1,\r\n            res_id: '',\r\n            canuse: 1,\r\n            type: 0,\r\n            lang_time: 0,\r\n            speaking: false,\r\n            recorder: null,\r\n            mediaStream: null,\r\n            audioChunks: [],\r\n            audioDetails: null // 新增用于存储音频文件详细信息的状态\r\n        }\r\n    },\r\n    watch: {\r\n        '$route.path': function (newPath) {\r\n            this.active = newPath // 路由变化时更新激活的路由\r\n        }\r\n    },\r\n    methods: {\r\n        async inputText() {\r\n            console.log(this.stu_content)\r\n            this.type = 0\r\n        },\r\n        async translate() {\r\n            this.$router.push({\r\n                name: 'NewChat', query: {\r\n                    project_id: 0,\r\n                    is_history: 0,\r\n                    res_id: this.resources_id,\r\n                    lang_time: this.lang_time,\r\n                    filePath: this.filePath,\r\n                    type: 0,\r\n                    stype: 'translate',\r\n                    from: 'read',\r\n                    chat_title: 'E-Read',\r\n                    system: this.subject_name,\r\n                    content: '翻译本篇练习材料'\r\n                }\r\n            })\r\n        },\r\n        async chat(item, content) {\r\n            this.$router.push({\r\n                name: 'NewChat', query: {\r\n                    project_id: 0,\r\n                    is_history: 0,\r\n                    res_id: this.resources_id,\r\n                    lang_time: this.lang_time,\r\n                    filePath: this.filePath,\r\n                    type: 0,\r\n                    stype: item,\r\n                    from: 'read',\r\n                    chat_title: 'E-Read',\r\n                    system: this.subject_name,\r\n                    content: content\r\n                }\r\n            })\r\n        },\r\n        async to_chat() {\r\n            this.$router.push({\r\n                name: 'NewChat', query: {\r\n                    project_id: 0,\r\n                    is_history: 0,\r\n                    res_id: this.resources_id,\r\n                    lang_time: this.lang_time,\r\n                    filePath: this.filePath,\r\n                    type: this.type,\r\n                    stype: 'read',\r\n                    from: 'read',\r\n                    chat_title: 'E-Read',\r\n                    system: this.subject_name,\r\n                    content: this.stu_content\r\n                }\r\n            })\r\n        },\r\n        async chang_speak() {\r\n            await this.recOpen();\r\n            this.is_speak = 0;\r\n            this.stu_placeholder = \"按住说话...\";\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n\r\n        async chang_hand() {\r\n            this.is_speak = 1;\r\n            this.stu_placeholder = \"请输入你的疑问...\";\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n\r\n        change_show_ai() {\r\n            this.is_show_ai = !this.is_show_ai\r\n        },\r\n        async recOpen() {\r\n            //创建录音对象\r\n            this.rec = Recorder({\r\n                type: \"mp3\" //录音格式，可以换成wav等其他格式\r\n                , sampleRate: 16000 //录音的采样率，越大细节越丰富越细腻\r\n                , bitRate: 16 //录音的比特率，越大音质越好\r\n                , onProcess: (buffers, powerLevel, bufferSampleRate) => {\r\n                    //录音实时回调，大约1秒调用12次本回调\r\n                    //可实时绘制波形，实时上传（发送）数据\r\n                    if (this.wave) this.wave.input(buffers[buffers.length - 1], powerLevel, bufferSampleRate);\r\n                }\r\n            });\r\n\r\n            //打开录音，获得权限\r\n            this.rec.open(() => {\r\n                console.log(\"录音已打开\");\r\n                if (this.$refs.recwave) {//创建音频可视化图形绘制对象\r\n                    this.wave = Recorder.WaveDiv({ elem: this.$refs.recwave });\r\n                }\r\n            }, (msg, isUserNotAllow) => {\r\n                //用户拒绝了录音权限，或者浏览器不支持录音\r\n                console.log((isUserNotAllow ? \"UserNotAllow，\" : \"\") + \"无法录音:\" + msg);\r\n            });\r\n            // this.startRecognition(); // 启动语音识别\r\n        },\r\n        async recStart() {\r\n            if (!this.rec) { console.error(\"未打开录音\"); return }\r\n            this.rec.start();\r\n            this.stu_placeholder = '正在说话';\r\n            this.speaking = true;\r\n            console.log(\"已开始录音\");\r\n            if (this.recognition) {\r\n                this.recognition.start(); // 启动语音识别\r\n            }\r\n        },\r\n        async recStop() {\r\n            if (!this.rec) { console.error(\"未打开录音\"); return }\r\n            this.rec.stop((blob, duration) => {\r\n                //blob就是我们要的录音文件对象，可以上传，或者本地播放\r\n                this.recBlob = blob;\r\n                //简单利用URL生成本地文件地址，此地址只能本地使用，比如赋值给audio.src进行播放，赋值给a.href然后a.click()进行下载（a需提供download=\"xxx.mp3\"属性）\r\n                var localUrl = (window.URL).createObjectURL(blob);\r\n                console.log(\"录音成功\", blob, localUrl, \"时长:\" + duration + \"ms\");\r\n                this.stu_placeholder = '按住说话';\r\n                this.lang_time = (duration / 1000).toFixed()\r\n                this.type = 1\r\n                this.speaking = false;\r\n                this.upload(blob);//把blob文件上传到服务器\r\n                if (this.recognition) {\r\n                    this.recognition.stop(); // 停止语音识别\r\n                }\r\n                // this.rec.close();//关闭录音，释放录音资源，当然可以不释放，后面可以连续调用start\r\n                // this.rec = null;\r\n            }, (err) => {\r\n                console.error(\"结束录音出错：\" + err);\r\n                // this.rec.close();//关闭录音，释放录音资源，当然可以不释放，后面可以连续调用start\r\n                // this.rec = null;\r\n            });\r\n        },\r\n        startRecognition() {\r\n            const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;\r\n            if (SpeechRecognition) {\r\n                this.recognition = new SpeechRecognition();\r\n                // 配置和使用 recognition 对象\r\n            } else {\r\n                console.error('该浏览器不支持语音识别');\r\n            }\r\n\r\n            this.recognition.continuous = true;\r\n            this.recognition.interimResults = true;\r\n            this.recognition.lang = 'en-US';\r\n\r\n            this.recognition.onresult = (event) => {\r\n                let interimTranscript = '';\r\n                let finalTranscript = '';\r\n\r\n                for (let i = event.resultIndex; i < event.results.length; i++) {\r\n                    if (event.results[i].isFinal) {\r\n                        finalTranscript += event.results[i][0].transcript;\r\n                    } else {\r\n                        interimTranscript += event.results[i][0].transcript;\r\n                    }\r\n                }\r\n\r\n                this.content = finalTranscript || interimTranscript;\r\n            };\r\n\r\n            this.recognition.onerror = (event) => {\r\n                console.error('识别错误: ', event.error);\r\n            };\r\n\r\n            this.recognition.onend = () => {\r\n                console.log('识别结束' + this.content);\r\n            };\r\n        },\r\n        async upload(blob) {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    var form = new FormData();\r\n                    form.append(\"file\", blob, user.sid + \"-\" + new Date().getTime() + \".mp3\"); //和普通form表单并无二致，后端接收到upfile参数的文件，文件名为recorder.mp3\r\n                    form.append(\"key\", \"value\"); //其他参数\r\n\r\n                    var xhr = new XMLHttpRequest();\r\n                    xhr.open(\"POST\", \"https://elang.zju.edu.cn:8082/mobileupload/upload\");\r\n                    // xhr.open(\"POST\", \"https://zju.3dease.com/fcapi/mobileupload/upload\");\r\n                    xhr.onreadystatechange = () => {\r\n                        if (xhr.readyState === 4) {\r\n                            if (xhr.status === 200) {\r\n                                // 请求成功，解析响应\r\n                                var response = JSON.parse(xhr.responseText);\r\n                                console.log(\"上传成功，服务器返回的数据:\", response);\r\n                                this.filePath = response.data.url\r\n                                // 在这里处理服务器返回的数据\r\n                                // this.startRecognition()\r\n                                this.type = 1; //消息类型\r\n                                this.to_chat()\r\n                            } else {\r\n                                // 请求失败，处理错误\r\n                                console.error(\"上传失败，状态码:\", xhr.status);\r\n                                console.error(\"错误信息:\", xhr.statusText);\r\n                            }\r\n                        }\r\n                    };\r\n                    xhr.send(form);\r\n\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async recPlay() {\r\n            //本地播放录音试听，可以直接用URL把blob转换成本地播放地址，用audio进行播放\r\n            var localUrl = URL.createObjectURL(this.recBlob);\r\n            var audio = document.createElement(\"audio\");\r\n            audio.controls = true;\r\n            document.body.appendChild(audio);\r\n            audio.src = localUrl;\r\n            audio.play(); //这样就能播放了\r\n\r\n            //注意不用了时需要revokeObjectURL，否则霸占内存\r\n            setTimeout(function () { URL.revokeObjectURL(audio.src) }, 5000);\r\n        },\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n    }\r\n}\r\n</script>\r\n\r\n\r\n<style scoped>\r\n.check-main-ai {\r\n    width: 100vw;\r\n    height: auto;\r\n    max-height: 400px;\r\n    overflow-y: auto;\r\n    background: linear-gradient(134deg, #eff7fe, #e3f3ff);\r\n    padding-bottom: 25px;\r\n    position: fixed;\r\n    bottom: 0px;\r\n    border-radius: 40px 40px 0 0;\r\n    z-index: 200;\r\n}\r\n\r\n.guanbi {\r\n    width: auto;\r\n    height: auto;\r\n    position: fixed;\r\n    right: 10px;\r\n    text-align: center;\r\n    padding: 8px 15px;\r\n    font-weight: bold;\r\n    /* background-color: rgba(236, 221, 10, 0.3); */\r\n    border-radius: 40px;\r\n}\r\n\r\n.wyt-say {\r\n    width: 75px;\r\n    height: 75px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.say-text {\r\n    width: 300px;\r\n    height: 75px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 60px;\r\n    font-size: 14px;\r\n}\r\n\r\n.fast-parent {\r\n    padding-left: 10vw;\r\n}\r\n\r\n.fast-box {\r\n    width: 80px;\r\n    height: 55px;\r\n    background: #ffffff;\r\n    border-radius: 0px 20px 0px 20px;\r\n    border: 1px solid #acc5ff;\r\n    margin-left: 5px;\r\n    color: #686868;\r\n    font-size: 12px;\r\n    text-align: center;\r\n    padding: 8px 9px;\r\n    text-align: center;\r\n    margin-bottom: 110px;\r\n    align-items: center;\r\n    display: flex;\r\n    float: left;\r\n}\r\n\r\n.fast-box:last-child {\r\n    margin-right: 0;\r\n}\r\n\r\n.input-box {\r\n    width: 80vw;\r\n    height: 42px;\r\n    background: #ffffff;\r\n    border-radius: 16px;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border: none;\r\n}\r\n\r\n.question {\r\n    padding: 10px 60px 10px 15px;\r\n    font-size: 14px;\r\n    color: #000;\r\n    border: none;\r\n}\r\n\r\n.placeholder {\r\n    font-size: 14px;\r\n    color: #989898;\r\n    padding: 3px 15px;\r\n}\r\n\r\n.say-box {\r\n    width: 60px;\r\n    height: 42px;\r\n    background: #ffffff;\r\n    border-radius: 15px;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 293px;\r\n}\r\n\r\n.say-img {\r\n    width: 10px;\r\n    height: 15px;\r\n    padding: 7px 25px;\r\n}\r\n\r\n.send-img {\r\n    width: 53px;\r\n    height: 30px;\r\n    position: fixed;\r\n    bottom: 50px;\r\n    left: 293px;\r\n}\r\n\r\n.other-img {\r\n    width: 25px;\r\n    height: 25px;\r\n    position: fixed;\r\n    bottom: 53px;\r\n    left: 326px;\r\n}\r\n\r\n.button-default {\r\n    background: #fff;\r\n    /* color: #000000; */\r\n    height: 42px;\r\n    width: 323px;\r\n    line-height: 25px;\r\n    text-align: center;\r\n    border-radius: 21;\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n    border: none;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border-radius: 16px;\r\n}\r\n\r\n.button-speaking {\r\n    background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);\r\n    color: #fff;\r\n    height: 42px;\r\n    width: 333px;\r\n    line-height: 25px;\r\n    /* text-align: center; */\r\n    border-radius: 21px;\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n    z-index: 100;\r\n    border: none;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border-radius: 16px;\r\n}\r\n\r\n.wyt {\r\n    position: fixed;\r\n    bottom: 60px;\r\n    right: 5px;\r\n    width: 75px;\r\n    height: 75px;\r\n}\r\n\r\n.btn-test {\r\n    position: absolute;\r\n    top: 0;\r\n}\r\n\r\n.btn-test2 {\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReadPraxisAi.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReadPraxisAi.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ReadPraxisAi.vue?vue&type=template&id=01339094&scoped=true\"\nimport script from \"./ReadPraxisAi.vue?vue&type=script&lang=js\"\nexport * from \"./ReadPraxisAi.vue?vue&type=script&lang=js\"\nimport style0 from \"./ReadPraxisAi.vue?vue&type=style&index=0&id=01339094&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"01339094\",\n  null\n  \n)\n\nexport default component.exports","<template>\r\n  <div class=\"praxis\">\r\n    <div class=\"Verify-box\" v-if=\"dialog_show == false\">\r\n      <img :src=\"imageBase64\">\r\n      <div class=\"input-box\">\r\n        <span>请输入验证码：</span>\r\n        <input type=\"text\" v-model=\"Verify\" />\r\n      </div>\r\n      <div class=\"btn-Verify\" @click=\"checkCaptcha\">提交</div>\r\n    </div>\r\n    <div v-else>\r\n      <van-nav-bar :title=\"resources.resources?.name\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n      <div class=\"empty\" style=\" width:100%;height: 80px;text-align: center;\" v-if=\"!loading\">\r\n        <van-loading size=\"24px\">加载中...</van-loading>\r\n      </div>\r\n      <div class=\"last-box\" v-if=\"HistoryList.length > 0 && resources.resources.name != '加载中'\">\r\n        <div class=\"last-title\" @click=\"to_detail(HistoryList[0])\">答题<br>记录</div>\r\n        <div class=\"last-count\">\r\n          <span style=\"font-size: 20px;font-weight: bold;\">{{ HistoryList[0].right_count }}</span>/{{\r\n            HistoryList[0].total_count }}(第{{ HistoryList.length }}次)<br>\r\n          正确率：{{ correctRate }}%\r\n        </div>\r\n        <div class=\"last-right\">\r\n          <div class=\"all-last\" @click=\"to_HistoryList\">全部</div>\r\n          <div class=\"last-time\">提交时间：{{ HistoryList[0].create_time }}</div>\r\n        </div>\r\n      </div>\r\n\r\n      <PaxisCommon :resources_id=\"resources_id\" :log_id=\"log_id\" fromtype=\"read\"\r\n        v-if=\"jobList.length > 0 && resources.resources?.name != '加载中'\" allow=\"microphone\" />\r\n\r\n      <div class=\"wall\"></div>\r\n      <div class=\"answer-box\" v-if=\"jobList.length > 0\">\r\n        <div class=\"answer-btn\" @click=\"change_praxis_show\">查看原文</div>\r\n      </div>\r\n      <!-- <van-action-sheet style=\"background-color: aliceblue;\" v-model=\"praxis_show\" title=\"原文\" v-if=\"jobList.length > 0\">\r\n        <div class=\"article\" v-html=\"resources.resources.content\" v-wordify=\"onWordClick\">\r\n        </div>\r\n \r\n      </van-action-sheet> -->\r\n      <van-action-sheet style=\"background-color: aliceblue;\" v-model=\"praxis_show\" title=\"原文\" v-if=\"jobList.length > 0\">\r\n        <!-- <ArticleParser :content=\"resources.resources?.content\" @word-click=\"onWordClick\"  /> -->\r\n        <PdfViewer v-if=\"isPdfResource\" :src=\"resources.resources?.file_path\" />\r\n        <ArticleParser v-else :content=\"resources.resources?.content\" @word-click=\"onWordClick\" />\r\n      </van-action-sheet>\r\n      <div class=\"article\" v-else>\r\n        <PdfViewer v-if=\"isPdfResource\" :src=\"resources.resources?.file_path\" />\r\n        <ArticleParser v-else :content=\"resources.resources?.content\" @word-click=\"onWordClick\" />\r\n      </div>\r\n      <!-- <div v-else class=\"article\" v-html=\"resources.resources.content\">\r\n      </div> -->\r\n      <div class=\"btn-ok\" @click=\"to_submit\" v-if=\"cansubmit == true && jobList.length == 0\">完成阅读</div>\r\n      <div class=\"btn-ok-no\"\r\n        v-if=\"cansubmit == false && jobList.length == 0 && resources.resources.name != '加载中'\">完成阅读({{ countdown }}s)\r\n      </div>\r\n      <ReadPraxisAi :resources_id=\"resources_id\" allow=\"microphone\" />\r\n    </div>\r\n\r\n\r\n    <van-action-sheet style=\"min-height: 300px;background-color: aliceblue;z-index: 9999;\" v-model=\"word_show\"\r\n      title=\"单词释义\" @close=\"change_praxis_show\" @click-overlay=\"change_praxis_show\">\r\n      <div class=\"collect\">\r\n        <div\r\n          style=\"text-align: left;display: inline-block;vertical-align: top;width: 40%;padding-left: 10px;font-size: 24px;font-weight: 500;\">\r\n          {{ word }}</div>\r\n        <div class=\"collect-icon\" style=\"text-align: right;display: inline-block;vertical-align: top;width: 50%;\">\r\n          <van-icon name=\"star\" size=\"30\" color=\"#D9DCE3\" v-if=\"scColor == false\" @click=\"add_word\" />\r\n          <van-icon name=\"star\" size=\"30\" color=\"orange\" v-else />\r\n        </div>\r\n      </div>\r\n      <div class=\"word-box\">\r\n        <div class=\"word-item\" v-for=\"(item, index) in wordDetail\" :key=\"index\">\r\n          <div class=\"item-meaning_CH\">{{ item.type }}&nbsp;&nbsp;:&nbsp;&nbsp;{{ item.meaning_CH }}</div>\r\n        </div>\r\n      </div>\r\n    </van-action-sheet>\r\n\r\n  </div>\r\n</template>\r\n<script>\r\nimport { getJobList, submitData, updateUserStudy, getHistoryList, saveAccessLog, checkCaptcha, createCaptcha } from '@/api/listen'\r\nimport { getListByWord, AddWord } from '@/api/home'\r\nimport ReadPraxisAi from \"@/components/ReadPraxisAi\";\r\nimport PaxisCommon from \"@/components/PaxisCommon\";\r\nimport ArticleParser from '@/components/ArticleParser';\r\nimport PdfViewer from '@/components/PdfViewer';\r\nimport { decrypt } from '@/api/aes'\r\nexport default {\r\n  components: { ReadPraxisAi, PaxisCommon, ArticleParser, PdfViewer },\r\n  name: 'Praxis',\r\n  data() {\r\n    return {\r\n      autofocus: true,\r\n      show: false,\r\n      dialog_show: true,\r\n      imageBase64: '',\r\n      activeTitle: 0,\r\n      active: 0,\r\n      resources: {\r\n        resources: {\r\n          \"name\": \"加载中\"\r\n        }\r\n      },\r\n      jobList: [],\r\n      HistoryList: [],\r\n      src: [],\r\n      log_id: 0,\r\n      resources_id: 0,\r\n      percentage: 0,\r\n      has_answer: 0,\r\n      currentTime: '0:00',\r\n      audio_status: 1,\r\n      insertWordAnswers: [],\r\n      caninput: false,\r\n      this_job_id: 0,\r\n      this_inputIndex: 0,\r\n      praxis_show: true,\r\n      cansubmit: false,\r\n      countdown: '180',\r\n      total_num: 0,\r\n      new_article: [],\r\n      loading: false,\r\n      word_show: false,\r\n      wordDetail: [],\r\n      word: '',\r\n      scColor: false,\r\n      Verify: []\r\n    }\r\n  },\r\n  provide() {\r\n    // 提供一个方法供子组件动态获取数据\r\n    return {\r\n      getSharedData: () => this.jobList, // 使用箭头函数绑定 this\r\n    };\r\n  },\r\n  computed: {\r\n    isPdfResource() {\r\n      const resource = this.resources && this.resources.resources\r\n        ? this.resources.resources\r\n        : {}\r\n      const fileType = String(resource.file_type || '').toLowerCase()\r\n      const filePath = String(resource.file_path || '').toLowerCase().split('?')[0]\r\n      return fileType.includes('pdf') || filePath.endsWith('.pdf')\r\n    },\r\n\r\n    // 计算属性优化模板中的复杂计算\r\n    showHistory() {\r\n      return this.HistoryList.length > 0 && this.resources.resources.name !== '加载中';\r\n    },\r\n\r\n    showPaxisCommon() {\r\n      return this.jobList.length > 0 && this.resources.resources.name !== '加载中';\r\n    },\r\n\r\n    correctRate() {\r\n      if (this.HistoryList.length > 0) {\r\n        const item = this.HistoryList[0];\r\n        return ((item.right_count / item.total_count) * 100).toFixed(2);\r\n      }\r\n      return '0.00';\r\n    },\r\n  },\r\n  methods: {\r\n    async onWordClick(word) {\r\n      console.log('点击了单词：', word);\r\n\r\n      const response = await getListByWord({ word: word })\r\n      if (response.code == 100) {\r\n        if (response.data.length == 0) {\r\n          this.$message({\r\n            message: '暂未收录',\r\n            center: true\r\n          })\r\n          return\r\n        }\r\n        this.scColor = false\r\n        this.word_show = true\r\n        this.praxis_show = false\r\n        this.wordDetail = response.data\r\n        this.word = word\r\n      }\r\n    },\r\n    async add_word() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await AddWord({ uid: user.sid, word: this.word })\r\n          if (response.code == 100) {\r\n            this.scColor = true\r\n            this.$message({\r\n              message: '已添加到生词本',\r\n              center: true\r\n            })\r\n          }\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    sendCode() {\r\n      // 开启定时\r\n      this.clearTimer();\r\n      this.timer = setInterval(() => {\r\n        this.countdown--;\r\n        //////////console.log(this.countdown)\r\n        // 停止定时器\r\n        if (this.countdown == 0) {\r\n          this.countdown = 180\r\n          this.cansubmit = true\r\n          // this.$forceUpdate();\r\n          this.clearTimer();\r\n          this.close();\r\n\r\n        }\r\n      }, 1000)\r\n    },\r\n    clearTimer() {\r\n      //清除定时器\r\n      clearInterval(this.timer);\r\n      this.timer = null;\r\n    },\r\n    // 弹窗打开后自动聚焦输入框\r\n    focusInput() {\r\n      this.$nextTick(() => {\r\n        // 使用 ref 获取 input 元素并聚焦\r\n        this.$refs.myInput.focus();\r\n      });\r\n    },\r\n    async onClickLeft() {\r\n      history.back()\r\n    },\r\n    to_detail(item) {\r\n      this.$router.push({ name: 'ReadDetailHis', query: { resource_id: this.resources_id, his_id: item.id } })\r\n    },\r\n    async to_HistoryList() {\r\n      this.$router.push({ name: 'RHistoryList', query: { resources_id: this.resources_id } })\r\n    },\r\n    async getJobList() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await getJobList({ sid: user.sid, resource_id: this.resources_id })\r\n          if (response.code == 100) {\r\n            // this.loading = true\r\n            const data = response.data\r\n            // var jobList = response.data.jobList;\r\n            var jobList = JSON.parse(decrypt(response.data.jobList))\r\n            this.resources = data\r\n            var article = data.resources.content.replace(/<\\/?[^>]+(>|$)/g, \"\");\r\n            let words = article.split(\" \");\r\n\r\n            this.new_article = words\r\n            console.log(jobList)\r\n            this.jobList = jobList\r\n            this.src = data.resources.file_path\r\n          }\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      } finally {\r\n        this.loading = true; // 数据加载完成后切换状态\r\n      }\r\n    },\r\n    async check_answer(itemIndex, indexChild) {\r\n      var jobList = this.jobList\r\n      //////////console.log(itemIndex)\r\n      jobList.forEach((val, key) => {\r\n        if (key == itemIndex) {\r\n          val.is_check = 1;\r\n          val.optionsArray.forEach((child, index) => {\r\n            if (indexChild == index) {\r\n              child.is_check = 1\r\n            } else {\r\n              child.is_check = 0\r\n            }\r\n          });\r\n        }\r\n      })\r\n      var has_answer = 0\r\n      jobList.forEach(val => {\r\n        val.optionsArray.forEach(child => {\r\n          if (child.is_check == 1) {\r\n            has_answer++\r\n          }\r\n        });\r\n\r\n      })\r\n      this.jobList = jobList\r\n      this.has_answer = has_answer\r\n    },\r\n    async change_card() {\r\n      this.show = !this.show\r\n      //////////console.log(this.jobList)\r\n    },\r\n    async test() {\r\n      var JobList = this.jobList;\r\n      var submit_data = [];\r\n      const user = JSON.parse(localStorage.getItem('user'))\r\n      JobList.forEach((item) => {\r\n        var user_answer = ''; // 用户选择的答案\r\n        var is_right = 0;\r\n        if (item.type_id == 1) {\r\n          item.optionsArray.forEach((child) => {\r\n            if (child.is_check == 1) {\r\n              user_answer = child.label; // 保存用户选择的答案\r\n              if (item.options_answer === child.label) {\r\n                is_right = 1; // 设置正确答案标记\r\n              }\r\n            }\r\n          });\r\n          submit_data.push({\r\n            user_id: user.sid,\r\n            job_id: item.id,\r\n            answer: user_answer, // 使用用户选择的答案\r\n            is_right: is_right,\r\n            resource_id: item.resource_id\r\n          });\r\n        } else if (item.type_id == 2) {\r\n          item.optionsArray.forEach((child, childindex) => {\r\n            var answer = child.title.split('&'); // 将标准答案分割成数组\r\n            var check_res = answer.includes(this.insertWordAnswers[item.id][childindex]); // 检查用户答案是否在标准答案数组中\r\n            if (check_res) {\r\n              is_right = 1; // 设置正确答案标记\r\n            }\r\n\r\n            submit_data.push({\r\n              user_id: user.sid,\r\n              job_id: item.id,\r\n              type_id: item.type_id,\r\n              lable: childindex + 1,\r\n              answer: this.insertWordAnswers[item.id][childindex], // 使用用户填写的答案\r\n              is_right: is_right,\r\n              resource_id: item.resource_id\r\n            });\r\n          })\r\n\r\n        }\r\n\r\n      });\r\n\r\n      //////////console.log(submit_data);\r\n    },\r\n    async input_answer(job_id, inputIndex, index) {\r\n      //////////console.log(job_id)\r\n      //////////console.log(inputIndex)\r\n      this.caninput = true\r\n      this.this_job_id = job_id\r\n      this.this_inputIndex = inputIndex\r\n      this.my_insert_word = ''\r\n      this.now_index = index\r\n      // 确保更新视图\r\n      // this.$forceUpdate();\r\n    },\r\n    async cancel_caninput() {\r\n      this.insertWordAnswers[this.this_job_id][this.this_inputIndex] = ''\r\n      this.caninput = false\r\n    },\r\n    async change_caninput() {\r\n      this.caninput = false\r\n      this.jobList[this.now_index].is_check = 1\r\n      this.has_answer = this.has_answer + 1\r\n      // 确保更新视图\r\n      // this.$forceUpdate();\r\n    },\r\n    async select(index) {\r\n      this.jobList[index].is_check = 1\r\n      this.has_answer = this.has_answer + 1\r\n    },\r\n    async my_insert() {\r\n      this.insertWordAnswers[this.this_job_id][this.this_inputIndex] = this.my_insert_word\r\n    },\r\n    async to_submit() {\r\n      if (!this.cansubmit) {\r\n        this.$message({\r\n          message: `请等待倒计时结束（${this.countdown}s）`,\r\n          center: true\r\n        })\r\n        return\r\n      }\r\n\r\n      var submit_data = [];\r\n      const user = JSON.parse(localStorage.getItem('user'))\r\n      submit_data.push({\r\n        user_id: user.sid,\r\n        job_id: 0,\r\n        type_id: 999,\r\n        answer: '', // 使用用户选择的答案\r\n        is_right: 1,\r\n        resource_id: this.resources_id\r\n      });\r\n\r\n      submit_data = JSON.stringify(submit_data)\r\n      const response = await submitData({\r\n        params: submit_data\r\n      })\r\n      if (response.code == 100) {\r\n        const resp = await updateUserStudy({ id: this.log_id })\r\n        if (resp.code == 100) {\r\n          this.$message({\r\n            message: '学习完成',\r\n            center: true\r\n          })\r\n          history.back()\r\n        }\r\n      }\r\n    },\r\n    async audioPlay() {\r\n      this.audio_status = 2\r\n      this.$refs.audioPlayer.play();\r\n    },\r\n    async audioPause() {\r\n      this.$refs.audioPlayer.pause();\r\n      this.audio_status = 1\r\n    },\r\n\r\n    updateTime(event) {\r\n      const audio = event.target;\r\n      this.currentTime = this.formatTime(audio.currentTime);\r\n      //////////console.log(audio.currentTime)\r\n      //////////console.log(audio.duration)\r\n      this.percentage = Math.floor((audio.currentTime / audio.duration) * 100);\r\n    },\r\n    loadMetadata(event) {\r\n      const audio = event.target;\r\n      this.duration = this.formatTime(audio.duration);\r\n    },\r\n    canPlay() {\r\n      //////////console.log('Audio can play through.');\r\n    },\r\n    formatTime(seconds) {\r\n      const m = Math.floor(seconds / 60) % 60;\r\n      const s = Math.floor(seconds) % 60;\r\n      return `${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;\r\n    },\r\n    async change_praxis_show() {\r\n      this.praxis_show = !this.praxis_show;\r\n    },\r\n    // 解析字符串，生成文本和输入框的块数组\r\n    parsedContent(str, index_id) {\r\n      const chunks = [];\r\n      let lastIndex = 0;\r\n      // str = 'ize the eggs, reproduction is left not to nature but to the process of artificial insemination._(1)__(2)__(3)__(4)__(5)__(6)__(7)_</p >'\r\n      // const regex1 = /__（(\\d+)）__/g;\r\n      str = str.replace(/__（/g, '_(');\r\n      str = str.replace(/）__/g, ')_');\r\n      // const regex = /_\\((\\d+)\\)_+/g;\r\n      const regex = /_\\((\\d+)\\)_+/g;\r\n      let match;\r\n\r\n      // 移除 HTML 标签\r\n      str = str.replace(/<\\/?[^>]+(>|$)/g, \"\"); // 去除 HTML 标签\r\n      // 逐个匹配字符串中的填空占位符\r\n      while ((match = regex.exec(str)) !== null) {\r\n        const inputIndex = parseInt(match[1], 10) - 1;\r\n\r\n        // 处理占位符之前的文本部分\r\n        if (match.index > lastIndex) {\r\n          const textChunk = str.slice(lastIndex, match.index);\r\n          chunks.push({ isInput: false, text: textChunk });\r\n        }\r\n\r\n        // 添加输入框\r\n        chunks.push({ isInput: true, inputIndex });\r\n\r\n        lastIndex = regex.lastIndex;\r\n      }\r\n\r\n      // 处理末尾的文本部分\r\n      if (lastIndex < str.length) {\r\n        const textChunk = str.slice(lastIndex);\r\n        chunks.push({ isInput: false, text: textChunk });\r\n      }\r\n\r\n      // 初始化对应的 insertWordAnswers 数组\r\n      if (!this.insertWordAnswers[index_id]) {\r\n        this.$set(this.insertWordAnswers, index_id, []);\r\n      }\r\n      // 确保更新视图\r\n      // this.$forceUpdate();\r\n      return chunks;\r\n    },\r\n    async getHistoryList() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await getHistoryList({ sid: user.sid, resource_id: this.resources_id })\r\n          if (response.code == 100) {\r\n            const data = response.data\r\n            this.HistoryList = data.reverse()\r\n          } else {\r\n            this.HistoryList = []\r\n          }\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n\r\n    },\r\n    async saveAccessLog() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await saveAccessLog({ sid: user.sid, res_id: this.resources_id })\r\n          if (response.code == 100) {\r\n            if (response.data == 2) {\r\n              const res1 = await getHistoryList({ sid: user.sid, resource_id: this.resources_id })\r\n              if (res1.data.length != []) {\r\n                this.dialog_show = true\r\n                this.getJobList()\r\n                this.getHistoryList()\r\n                return\r\n              }\r\n              this.dialog_show = false\r\n              const res = await createCaptcha({ sid: user.sid })\r\n              if (res.code == 100) {\r\n                this.imageBase64 = 'data:image/png;base64,' + res.data.imageBase64\r\n              }\r\n            } else {\r\n              this.dialog_show = true\r\n              this.getJobList()\r\n              this.getHistoryList()\r\n              this.sendCode()\r\n            }\r\n          }\r\n\r\n          // this.$forceUpdate();\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async checkCaptcha() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await checkCaptcha({ sid: user.sid, captchaCode: this.Verify })\r\n          if (response.code == 100) {\r\n            if (response.data == 1) {\r\n              this.dialog_show = true\r\n              this.getJobList()\r\n              this.getHistoryList()\r\n              this.sendCode()\r\n            } else {\r\n              const res = await createCaptcha({ sid: user.sid })\r\n              if (res.code == 100) {\r\n                this.imageBase64 = 'data:image/png;base64,' + res.data.imageBase64\r\n              }\r\n              // this.$forceUpdate();\r\n            }\r\n          }\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n  },\r\n  mounted() {\r\n    // 在组件挂载后立即获取任务数据\r\n    // 在组件挂载后立即获取任务数据\r\n    this.log_id = this.$route.query.log_id;\r\n    this.resources_id = this.$route.query.resources_id;\r\n    this.saveAccessLog()\r\n\r\n  },\r\n  created() {\r\n    this.sendCode();\r\n    window.addEventListener('blur', this.clearTimer);\r\n    window.addEventListener('focus', this.sendCode);\r\n  },\r\n  beforeDestroy() {\r\n    this.clearTimer();\r\n    window.removeEventListener('blur', this.clearTimer);\r\n    window.removeEventListener('focus', this.sendCode);\r\n  },\r\n}\r\n</script>\r\n<style scoped>\r\n.last-box {\r\n  width: 330px;\r\n  height: 68px;\r\n  background: #F2F2F4;\r\n  border-radius: 10px 10px 10px 10px;\r\n  margin: 0 auto;\r\n}\r\n\r\n.last-title {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin: 13px 9px 13px 17px;\r\n  padding-right: 9px;\r\n  border-right: 1px solid #B8B8B8;\r\n  font-size: 16px;\r\n}\r\n\r\n.last-count {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin: 13px 9px 13px 0px;\r\n  font-size: 12px;\r\n  color: #656565;\r\n}\r\n\r\n.last-right {\r\n  /* width: 120px; */\r\n  vertical-align: top;\r\n  margin: 13px 9px 13px 0px;\r\n  display: inline-block;\r\n  font-size: 12px;\r\n  color: #656565;\r\n  text-align: right;\r\n}\r\n\r\n.all-last {\r\n  margin-bottom: 6px;\r\n}\r\n\r\n/* .last-time {} */\r\n\r\n.praxis-item {\r\n  width: 90%;\r\n  height: auto;\r\n  margin: 0 auto;\r\n  text-align: left;\r\n}\r\n\r\n.praxis {\r\n  padding-bottom: 200px;\r\n  /* text-align: left; */\r\n}\r\n\r\n.praxis-title {\r\n  font-size: 14px;\r\n  color: #030303;\r\n  padding: 35px 0 10px 0;\r\n  /* width: 50px; */\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.answer-btn {\r\n  position: fixed;\r\n  bottom: 30%;\r\n  right: 10px;\r\n  width: 20px;\r\n  /* height: 80px; */\r\n  line-height: 20px;\r\n  text-align: center;\r\n  background-color: #96cbf7;\r\n  padding: 10px 0;\r\n  border-radius: 15px;\r\n  color: #FFF;\r\n  font-size: 12px;\r\n}\r\n\r\n.praxis-desc {\r\n  font-size: 14px;\r\n  width: 90%;\r\n  height: auto;\r\n  padding: 10px 0;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  font-weight: normal;\r\n}\r\n\r\n.praxis-info {\r\n  width: 90%;\r\n  height: auto;\r\n  background: #FFFFFF;\r\n  white-space: normal;\r\n  /* 正常的空白处理，允许换行 */\r\n  word-break: keep-all;\r\n  /* 确保单词不被截断 */\r\n  overflow-wrap: anywhere;\r\n  /* 单词太长时允许换行，不会强制截断 */\r\n}\r\n\r\n.answer {\r\n  width: 100%;\r\n  height: 55px;\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n}\r\n\r\n.answer-title {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 50px;\r\n  height: 35px;\r\n  background-color: lightgray;\r\n  border-radius: 35px;\r\n  line-height: 35px;\r\n  text-align: center;\r\n}\r\n\r\n.checked {\r\n  background: linear-gradient(180deg, #4499EE 0%, #9CE4FF 100%);\r\n}\r\n\r\n.answer-desc {\r\n  margin-left: 10px;\r\n  font-size: 14px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 380px;\r\n}\r\n\r\n.wrap-text {\r\n  width: 90%;\r\n  height: auto;\r\n  margin: 0 auto;\r\n  text-align: left;\r\n  padding: 10px 0;\r\n}\r\n\r\n.praxis-bottom {\r\n  width: 100%;\r\n  height: 66px;\r\n  background: #FFFFFF;\r\n  box-shadow: 0px -2px 6px 1px rgba(80, 143, 206, 0.1);\r\n  border-radius: 0px;\r\n  position: fixed;\r\n  bottom: 60px;\r\n}\r\n\r\n.new-audio {\r\n  width: 50px;\r\n  height: 50px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  padding-left: 15px;\r\n}\r\n\r\n.start-img {\r\n  width: 50px;\r\n  height: 50px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n\r\n}\r\n\r\n.audio-info {\r\n  width: 300px;\r\n  height: 50px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  line-height: 50px;\r\n  text-align: left;\r\n  color: #979797;\r\n  font-size: 12px;\r\n}\r\n\r\n.progress {\r\n  width: 225px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  padding-top: 22px;\r\n}\r\n\r\n.now-time {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  line-height: 50px;\r\n}\r\n\r\n.answer-has {\r\n  width: 325px;\r\n  height: 60px;\r\n  padding-left: 25x;\r\n}\r\n\r\n.jindu {\r\n  width: 185px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  line-height: 60px;\r\n  font-size: 14px;\r\n  color: #979797;\r\n  padding-left: 10px;\r\n  /* text-align: left; */\r\n  /* margin-right: 100px; */\r\n\r\n}\r\n\r\n.btn-ok-cn {\r\n  margin-top: 12px;\r\n  width: 108px;\r\n  height: 36px;\r\n  line-height: 36px;\r\n  background: #003F88;\r\n  border-radius: 23px;\r\n  /* margin: 0 auto; */\r\n  text-align: center;\r\n  color: #FFF;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.card-title {\r\n  width: 100vw;\r\n  height: 75px;\r\n  text-align: center;\r\n  line-height: 75px;\r\n  border-bottom: #E4E4E4 1px solid;\r\n  margin: 0 auto;\r\n  color: #000000;\r\n  font-weight: bold;\r\n  font-size: 16px;\r\n}\r\n\r\n.main-answer-card {\r\n  padding: 30px 40px 80px 40px;\r\n  text-align: left;\r\n}\r\n\r\n.card-item {\r\n  width: 34px;\r\n  height: 34px;\r\n  background: linear-gradient(180deg, #4499EE 0%, #9CE4FF 100%);\r\n  border-radius: 34px;\r\n  line-height: 34px;\r\n  text-align: center;\r\n  color: #FFF;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin: 10px 5px;\r\n}\r\n\r\n.card-item-empty {\r\n  background: #CBCBCB;\r\n}\r\n\r\n.btn-cancel {\r\n  position: absolute;\r\n  top: 26px;\r\n  right: 25px;\r\n}\r\n\r\n.btn-ok {\r\n  width: 288px;\r\n  height: 45px;\r\n  background: #003F88;\r\n  border-radius: 23px;\r\n  margin: 0 auto;\r\n  line-height: 45px;\r\n  text-align: center;\r\n  color: #FFF;\r\n  margin: 0 auto;\r\n}\r\n\r\n.btn-ok-no {\r\n  width: 288px;\r\n  height: 45px;\r\n  background: lightgrey;\r\n  border-radius: 23px;\r\n  margin: 0 auto;\r\n  line-height: 45px;\r\n  text-align: center;\r\n  color: #FFF;\r\n  margin: 0 auto;\r\n}\r\n\r\n.input-answer {\r\n  border: none;\r\n  border-bottom: 1px solid gray;\r\n  font-size: 14px;\r\n}\r\n\r\n.input-answer-box {\r\n  width: auto;\r\n  display: inline;\r\n  line-height: 30px;\r\n  text-align: left;\r\n}\r\n\r\n.input_new {\r\n  width: 80%;\r\n  height: 200px;\r\n  padding-left: 20px;\r\n}\r\n\r\n.input_new>input {\r\n  width: 50%;\r\n  margin: 50px 20px;\r\n  padding: 10px 20px;\r\n}\r\n\r\n.article {\r\n  width: 80vw;\r\n  height: auto;\r\n  margin: 8px auto;\r\n  padding-bottom: 60px;\r\n  margin-top: 40px;\r\n  text-align: justify;\r\n  /* display: flex; justify-content: center; */\r\n}\r\n\r\n\r\n.Verify-box {\r\n  /* width: 300px; */\r\n  margin: 20px auto;\r\n  text-align: center;\r\n}\r\n\r\n.input-box {\r\n  width: 300px;\r\n  margin: 20px auto;\r\n  /* padding-left: 6px; */\r\n}\r\n\r\n.input-box>input {\r\n  height: 30px;\r\n  padding: 5px;\r\n}\r\n\r\n.btn-Verify {\r\n  width: 288px;\r\n  height: 45px;\r\n  background: #003F88;\r\n  border-radius: 23px;\r\n  color: #FFF;\r\n  margin: 32px auto 19px auto;\r\n  font-size: 14px;\r\n  text-align: center;\r\n  line-height: 45px;\r\n}\r\n\r\n.word-popup {\r\n  width: 100vw;\r\n  height: 300px;\r\n  background-size: cover;\r\n  position: fixed;\r\n  bottom: 0;\r\n}\r\n\r\n.collect {\r\n  width: 85vw;\r\n  margin-bottom: 20px;\r\n}\r\n\r\n.word-box {\r\n  width: 90%;\r\n  margin: 0 auto;\r\n}\r\n\r\n.word-item {\r\n  width: 100%;\r\n  /* border-bottom: 1px solid #E4E4E4; */\r\n  padding-bottom: 10px;\r\n}\r\n\r\n.van-overlay {\r\n  background-color: rgba(0, 0, 0, 20%) !important\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Praxis.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Praxis.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Praxis.vue?vue&type=template&id=1cd69f45&scoped=true\"\nimport script from \"./Praxis.vue?vue&type=script&lang=js\"\nexport * from \"./Praxis.vue?vue&type=script&lang=js\"\nimport style0 from \"./Praxis.vue?vue&type=style&index=0&id=1cd69f45&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"1cd69f45\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"praxis\"},[_c('van-nav-bar',{attrs:{\"title\":_vm.resources.resources?.name,\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_vm._l((_vm.jobList),function(item,index){return _c('div',{key:index},[_c('div',{staticClass:\"praxis-item\"},[_c('div',{staticClass:\"praxis-title\"},[_vm._v(\"题\"+_vm._s(index + 1))]),(item.type_id == 1 || item.type_id == 4)?_c('div',{staticClass:\"praxis-desc\"},[_c('div',{staticClass:\"wrap-text\",domProps:{\"innerHTML\":_vm._s(item.title)}})]):_vm._e(),(item.type_id == 1)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.optionsArray),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"answer\"},[_c('div',{staticClass:\"answer-title\",class:{\n                        'answer-title': true,\n                        'checked': item.user_answer == itemChild.label,\n                        'right-checked': item.options_answer == itemChild.label\n                    },on:{\"click\":function($event){return _vm.check_answer(index, indexChild)}}},[_vm._v(_vm._s(itemChild.label))]),_c('div',{staticClass:\"answer-desc\"},[_vm._v(_vm._s(itemChild.title))])])}),0):_vm._e(),(item.type_id == 3 || item.type_id == 6)?_c('div',{staticClass:\"praxis-info\"},[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(item.title)}}),_c('div',{staticStyle:{\"display\":\"inline\"}},[_vm._v(\"你的答案是：\"+_vm._s(item.user_answer))])]):_vm._e(),(item.type_id == 4)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.optionsArray),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"answer\"},[_c('div',{staticClass:\"answer-title\",class:{\n                        'answer-title': true,\n                        'checked': !_vm.arrayContains(itemChild.label, item.options_answer),\n                        'right-checked': _vm.arrayContains(itemChild.label, item.options_answer)\n                    },on:{\"click\":function($event){return _vm.check_answer(index, indexChild)}}},[_vm._v(_vm._s(itemChild.label))]),_c('div',{staticClass:\"answer-desc\"},[_vm._v(_vm._s(itemChild.title))])])}),0):_vm._e(),(item.type_id == 2)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.title),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"input-answer-box\"},[(!itemChild.isInput)?_c('span',[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(itemChild.text)}})]):_c('span',{staticStyle:{\"border-bottom\":\"1px solid #54a4ee\",\"padding\":\"0 10px 0 0\"}},[(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 1)?_c('span',{staticStyle:{\"color\":\"#3CC57C\"}},[_vm._v(\" \"+_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer)+\" \")]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer)?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" \"+_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer)+\" \")]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer == '')?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" 未作 \")]):_vm._e()])])}),0):_vm._e(),(item.type_id == 5)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.title),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"input-answer-box\"},[(!itemChild.isInput)?_c('span',[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(itemChild.text)}})]):_c('span',{staticStyle:{\"border-bottom\":\"1px solid #54a4ee\",\"padding\":\"0 10px 0 0\"}},[(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 1)?_c('span',{staticStyle:{\"color\":\"#3CC57C\"}},[_vm._v(_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer))]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer)?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" \"+_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer)+\" \")]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer == '')?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" 未作 \")]):_vm._e()])])}),0):_vm._e(),(item.type_id == 7)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.title),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"input-answer-box\"},[(!itemChild.isInput)?_c('span',[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(itemChild.text)}})]):_c('span',{staticStyle:{\"border-bottom\":\"1px solid #54a4ee\",\"padding\":\"0 10px 0 0\"}},[(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 1)?_c('span',{staticStyle:{\"color\":\"#3CC57C\"}},[_vm._v(_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer))]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer)?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" \"+_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer)+\" \")]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer == '')?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" 未作 \")]):_vm._e()])])}),0):_vm._e(),(item.type_id == 1)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是：\"+_vm._s(item.options_answer)+\" \"),_c('br'),_vm._v(\" 你的答案是：\"+_vm._s(item.user_answer)+\" \")]):_vm._e(),(item.type_id == 2)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是： \"),_c('br'),_vm._l((item.right_answer),function(a,b){return _c('span',{key:b,staticClass:\"answer-item\"},[_vm._v(\"(\"+_vm._s(b + 1)+\")  \"+_vm._s(a)+\"   \")])}),_c('br'),_vm._v(\" 你的答案是：\"),_c('br'),_vm._l((item.user_answer),function(ua,ub){return _c('span',{key:ub,staticClass:\"answer-item\"},[_vm._v(\" (\"+_vm._s(ub + 1)+\")  \"+_vm._s(ua)+\"   \")])})],2):_vm._e(),(item.type_id == 4)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是：\"),_c('br'),_c('span',[_vm._v(\" \"+_vm._s(item.options_answer)+\" \")]),_c('br'),_vm._v(\"你的答案是：\"),_c('br'),_c('span',[_vm._v(_vm._s(item.user_answer)+\" \")])]):_vm._e(),(item.type_id == 5)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是：\"),_c('br'),_vm._l((item.options_answer),function(a,b){return _c('span',{key:b,staticClass:\"answer-item\"},[_vm._v(\" (\"+_vm._s(b + 1)+\")  \"+_vm._s(a.title)+\"   \")])}),_c('br'),_vm._v(\"你的答案是：\"),_c('br'),_vm._l((item.user_answer),function(ua,ub){return _c('span',{key:ub,staticClass:\"answer-item\"},[_vm._v(\"(\"+_vm._s(ub + 1)+\")  \"+_vm._s(ua)+\"   \")])})],2):_vm._e(),(item.type_id == 7)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是：\"),_c('br'),_vm._l((item.options_answer),function(a,b){return _c('span',{key:b,staticClass:\"answer-item\"},[_vm._v(\" (\"+_vm._s(b + 1)+\")  \"+_vm._s(a.title)+\"   \")])}),_c('br'),_vm._v(\"你的答案是：\"),_c('br'),_vm._l((item.user_answer),function(ua,ub){return _c('span',{key:ub,staticClass:\"answer-item\"},[_vm._v(\"(\"+_vm._s(ub + 1)+\")  \"+_vm._s(ua)+\"   \")])})],2):_vm._e()])])}),_c('div',{staticClass:\"wall\"}),_c('div',{staticClass:\"answer-box\"},[_c('div',{staticClass:\"answer-btn\",on:{\"click\":_vm.change_praxis_show}},[_vm._v(\"查看原文\")])]),_c('van-action-sheet',{staticStyle:{\"background-color\":\"aliceblue\"},attrs:{\"title\":\"原文\"},model:{value:(_vm.praxis_show),callback:function ($$v) {_vm.praxis_show=$$v},expression:\"praxis_show\"}},[_c('div',{staticClass:\"article\",domProps:{\"innerHTML\":_vm._s(_vm.normalizeContent(_vm.resources.resources?.content))}})]),_c('div',{staticClass:\"wall-report\"},[_vm._v(\"答题报告\")]),_c('div',{staticClass:\"answer-box\"},[_c('div',{staticClass:\"box-top\"},[_c('div',{staticClass:\"right-num\"},[_vm._v(_vm._s(_vm.answer_info.rightCountTotal))]),_c('div',{staticClass:\"total-num\"},[_vm._v(\"/\"+_vm._s(_vm.answer_info.countTotal))]),_c('div',{staticClass:\"report-desc\"},[_vm._v(\"共\"+_vm._s(_vm.answer_info.countTotal)+\"题，答对\"+_vm._s(_vm.answer_info.rightCountTotal)+\"题\")])]),_c('div',{staticClass:\"bottom-line\"}),_c('div',{staticClass:\"second-box\"},[_c('div',{staticClass:\"submit-time\"},[_vm._v(\"交卷时间：\"+_vm._s(_vm.jobAnswerList1[0]?.create_time))]),_c('div',{staticClass:\"result\"},[_vm._v(\"正确率：\"+_vm._s(_vm.right_bfb)+\"%\")])])]),_c('RelList',{attrs:{\"resource_id\":_vm.resources_id}})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"praxis\">\r\n        <van-nav-bar :title=\"resources.resources?.name\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n\r\n        <div v-for=\"(item, index) in jobList\" :key=\"index\">\r\n\r\n            <div class=\"praxis-item\">\r\n                <div class=\"praxis-title\">题{{ index + 1 }}</div>\r\n                <div class=\"praxis-desc\" v-if=\"item.type_id == 1 || item.type_id == 4\">\r\n                    <div class=\"wrap-text\" v-html=\"item.title\"></div>\r\n                </div>\r\n                <div class=\"praxis-info\" v-if=\"item.type_id == 1\">\r\n                    <div class=\"answer\" v-for=\"(itemChild, indexChild) in item.optionsArray\" :key=\"indexChild\">\r\n                        <div :class=\"{\r\n                            'answer-title': true,\r\n                            'checked': item.user_answer == itemChild.label,\r\n                            'right-checked': item.options_answer == itemChild.label\r\n                        }\" class=\"answer-title\" @click=\"check_answer(index, indexChild)\">{{ itemChild.label\r\n                        }}</div>\r\n                        <div class=\"answer-desc\">{{ itemChild.title }}</div>\r\n                    </div>\r\n                </div>\r\n                <div class=\"praxis-info\" v-if=\"item.type_id == 3 || item.type_id == 6\">\r\n                    <div style=\"display: inline;\" v-html=\"item.title\"></div>\r\n                    <div style=\"display: inline;\">你的答案是：{{ item.user_answer }}</div>\r\n                </div>\r\n                <div class=\"praxis-info\" v-if=\"item.type_id == 4\">\r\n                    <div class=\"answer\" v-for=\"(itemChild, indexChild) in item.optionsArray\" :key=\"indexChild\">\r\n                        <div :class=\"{\r\n                            'answer-title': true,\r\n                            'checked': !arrayContains(itemChild.label, item.options_answer),\r\n                            'right-checked': arrayContains(itemChild.label, item.options_answer)\r\n                        }\" class=\"answer-title\" @click=\"check_answer(index, indexChild)\">{{ itemChild.label\r\n                        }}</div>\r\n                        <div class=\"answer-desc\">{{ itemChild.title }}</div>\r\n                    </div>\r\n                </div>\r\n                <div class=\"praxis-info\" v-if=\"item.type_id == 2\">\r\n                    <div class=\"input-answer-box\" v-for=\"(itemChild, indexChild) in item.title\" :key=\"indexChild\">\r\n                        <!-- 如果是文本块，直接显示 -->\r\n                        <span v-if=\"!itemChild.isInput\">\r\n                            <div style=\"display: inline;\" v-html=\"itemChild.text\"></div>\r\n                        </span>\r\n\r\n                        <!-- <input type=\"text\" class=\"input-answer\" v-else\r\n                            v-model=\"item.user_answer[indexChild]\"\r\n                            @input=\"adjustInputWidth(itemChild.inputIndex, index, $event)\" @blur=\"change_count\" /> -->\r\n                        <span v-else style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\">\r\n                            <span style=\"color: #3CC57C;\"\r\n                                v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 1\">\r\n                                {{ jobAnswerList[index][itemChild.inputIndex1].answer }}\r\n                            </span>\r\n                            <span\r\n                                v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer\"\r\n                                style=\"color: red;\">\r\n                                {{ jobAnswerList[index][itemChild.inputIndex1].answer }}\r\n                            </span>\r\n                            <span\r\n                                v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer == ''\"\r\n                                style=\"color: red;\">\r\n                                未作\r\n                            </span>\r\n                        </span>\r\n                        <!-- 如果是输入框，动态生成 -->\r\n                        <!-- <span style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\"\r\n                            v-if=\"item.user_answer[itemChild.inputIndex] != ''\">\r\n                            <span\r\n                                :style=\"{ color: itemChild.inputIndex < jobAnswerList[index].length && jobAnswerList[index][itemChild.inputIndex].is_right == 1 ? '#3CC57C' : '#FF0000' }\">{{\r\n                                    item.user_answer[indexChild] }}</span>\r\n                        </span>\r\n                        <span style=\"border-bottom: 1px solid #54a4ee;color: #F85353;padding: 0 10px 0 0;\" v-else>\r\n                            未做\r\n                        </span> -->\r\n                    </div>\r\n                </div>\r\n                <div class=\"praxis-info\" v-if=\"item.type_id == 5\">\r\n                    <div class=\"input-answer-box\" v-for=\"(itemChild, indexChild) in item.title\" :key=\"indexChild\">\r\n                        <!-- 如果是文本块，直接显示 -->\r\n                        <span v-if=\"!itemChild.isInput\">\r\n                            <div style=\"display: inline;\" v-html=\"itemChild.text\"></div>\r\n                        </span>\r\n                        <span v-else style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\">\r\n                            <span style=\"color: #3CC57C;\"\r\n                                v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 1\">{{\r\n                                    jobAnswerList[index][itemChild.inputIndex1].answer }}</span>\r\n                            <span\r\n                                v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer\"\r\n                                style=\"color: red;\">\r\n                                {{ jobAnswerList[index][itemChild.inputIndex1].answer }}\r\n                            </span>\r\n                            <span\r\n                                v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer == ''\"\r\n                                style=\"color: red;\">\r\n                                未作\r\n                            </span>\r\n                        </span>\r\n                        <!-- 如果是输入框，动态生成\r\n                        <span style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\"\r\n                            v-if=\"item.user_answer[itemChild.inputIndex] != ''\">\r\n                            <span\r\n                                :style=\"{ color: itemChild.inputIndex < jobAnswerList[index].length && jobAnswerList[index][itemChild.inputIndex].is_right ? '#3CC57C' : '#FF0000' }\">\r\n                                {{ item.user_answer[itemChild.inputIndex] }}\r\n                            </span>\r\n                        </span>\r\n                        <span style=\"border-bottom: 1px solid #54a4ee;color: orange;padding: 0 10px 0 0;\" v-else>\r\n                            未做\r\n                        </span> -->\r\n                    </div>\r\n                </div>\r\n                <div class=\"praxis-info\" v-if=\"item.type_id == 7\">\r\n                    <div class=\"input-answer-box\" v-for=\"(itemChild, indexChild) in item.title\" :key=\"indexChild\">\r\n                        <!-- 如果是文本块，直接显示 -->\r\n                        <span v-if=\"!itemChild.isInput\">\r\n                            <div style=\"display: inline;\" v-html=\"itemChild.text\"></div>\r\n                        </span>\r\n                        <span v-else style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\">\r\n                            <span style=\"color: #3CC57C;\"\r\n                                v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 1\">{{\r\n                                    jobAnswerList[index][itemChild.inputIndex1].answer }}</span>\r\n                            <span\r\n                                v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer\"\r\n                                style=\"color: red;\">\r\n                                {{ jobAnswerList[index][itemChild.inputIndex1].answer }}\r\n                            </span>\r\n                            <span\r\n                                v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer == ''\"\r\n                                style=\"color: red;\">\r\n                                未作\r\n                            </span>\r\n                        </span>\r\n                        <!-- 如果是输入框，动态生成\r\n                        <span style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\"\r\n                            v-if=\"item.user_answer[itemChild.inputIndex] != ''\">\r\n                            <span\r\n                                :style=\"{ color: itemChild.inputIndex < jobAnswerList[index].length && jobAnswerList[index][itemChild.inputIndex].is_right ? '#3CC57C' : '#FF0000' }\">\r\n                                {{ item.user_answer[itemChild.inputIndex] }}\r\n                            </span>\r\n                        </span>\r\n                        <span style=\"border-bottom: 1px solid #54a4ee;color: orange;padding: 0 10px 0 0;\" v-else>\r\n                            未做\r\n                        </span> -->\r\n                    </div>\r\n                </div>\r\n                <div class=\"answer-option\" v-if=\"item.type_id == 1\">正确答案是：{{ item.options_answer }} <br>\r\n                    你的答案是：{{\r\n                        item.user_answer }}\r\n                </div>\r\n                <div class=\"answer-option\" v-if=\"item.type_id == 2\">正确答案是：\r\n                    <br>\r\n                    <span v-for=\"(a, b) in item.right_answer\" :key=\"b\" class=\"answer-item\">({{\r\n                        b + 1 }})&nbsp;&nbsp;{{\r\n                            a }}&nbsp;&nbsp;\r\n                    </span>\r\n                    <br>\r\n                    你的答案是：<br>\r\n                    <span v-for=\"(ua, ub) in item.user_answer\" :key=\"ub\" class=\"answer-item\">\r\n                        ({{ ub\r\n                            + 1 }})&nbsp;&nbsp;{{ ua\r\n                        }}&nbsp;&nbsp;\r\n                    </span>\r\n                </div>\r\n                <div class=\"answer-option\" v-if=\"item.type_id == 4\">正确答案是：<br>\r\n                    <span>\r\n                        {{ item.options_answer }}\r\n                    </span>\r\n                    <br>你的答案是：<br>\r\n                    <span>{{\r\n                        item.user_answer }}\r\n                    </span>\r\n                </div>\r\n                <div class=\"answer-option\" v-if=\"item.type_id == 5\">正确答案是：<br>\r\n                    <span v-for=\"(a, b) in item.options_answer\" :key=\"b\" class=\"answer-item\">\r\n                        ({{ b + 1 }})&nbsp;&nbsp;{{\r\n                            a.title }}&nbsp;&nbsp;\r\n                    </span><br>你的答案是：<br>\r\n                    <span v-for=\"(ua, ub) in item.user_answer\" :key=\"ub\" class=\"answer-item\">({{ ub + 1\r\n                    }})&nbsp;&nbsp;{{\r\n                            ua }}&nbsp;&nbsp;\r\n                    </span>\r\n                </div>\r\n                <div class=\"answer-option\" v-if=\"item.type_id == 7\">正确答案是：<br>\r\n                    <span v-for=\"(a, b) in item.options_answer\" :key=\"b\" class=\"answer-item\">\r\n                        ({{ b + 1 }})&nbsp;&nbsp;{{\r\n                            a.title }}&nbsp;&nbsp;\r\n                    </span><br>你的答案是：<br>\r\n                    <span v-for=\"(ua, ub) in item.user_answer\" :key=\"ub\" class=\"answer-item\">({{ ub + 1\r\n                    }})&nbsp;&nbsp;{{\r\n                            ua }}&nbsp;&nbsp;\r\n                    </span>\r\n                </div>\r\n            </div>\r\n        </div>\r\n        <div class=\"wall\"></div>\r\n        <div class=\"answer-box\">\r\n            <div class=\"answer-btn\" @click=\"change_praxis_show\">查看原文</div>\r\n        </div>\r\n        <van-action-sheet style=\"background-color: aliceblue;\" v-model=\"praxis_show\" title=\"原文\">\r\n            <div class=\"article\" v-html=\"normalizeContent(resources.resources?.content)\">\r\n            </div>\r\n\r\n        </van-action-sheet>\r\n\r\n        <div class=\"wall-report\">答题报告</div>\r\n        <div class=\"answer-box\">\r\n            <div class=\"box-top\">\r\n                <div class=\"right-num\">{{ answer_info.rightCountTotal }}</div>\r\n                <div class=\"total-num\">/{{ answer_info.countTotal }}</div>\r\n                <div class=\"report-desc\">共{{ answer_info.countTotal }}题，答对{{ answer_info.rightCountTotal\r\n                }}题</div>\r\n            </div>\r\n            <div class=\"bottom-line\"></div>\r\n            <div class=\"second-box\">\r\n                <div class=\"submit-time\">交卷时间：{{ jobAnswerList1[0]?.create_time }}</div>\r\n                <div class=\"result\">正确率：{{ right_bfb }}%</div>\r\n            </div>\r\n        </div>\r\n        <RelList :resource_id=\"resources_id\" />\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getJobList, jobAnswer } from '@/api/listen'\r\nimport RelList from \"../../components/RelList\";\r\nimport { decrypt } from '@/api/aes'\r\nimport { normalizeHtmlEntities } from '@/utils/html'\r\nexport default {\r\n    components: { RelList },\r\n    name: 'Detail',\r\n    data() {\r\n        return {\r\n            praxis_show: false,\r\n            show: false,\r\n            activeTitle: 0,\r\n            active: 0,\r\n            resources: [],\r\n            jobList: [],\r\n            src: [],\r\n            log_id: 0,\r\n            resources_id: this.$route.query.resource_id,\r\n            percentage: 0,\r\n            has_answer: 0,\r\n            currentTime: '0:00',\r\n            audio_status: 1,\r\n            insertWordAnswers: [],\r\n            caninput: false,\r\n            this_job_id: 0,\r\n            this_inputIndex: 0,\r\n            ListAnswer: [],\r\n            answer_info: [],\r\n            jobAnswerList: [],\r\n            jobAnswerList1: [],\r\n            RelList: [],\r\n            right_bfb: 0,\r\n            globalInputIndex: 0,\r\n            resource_id: 0\r\n        }\r\n    },\r\n    methods: {\r\n        normalizeContent(content) {\r\n            return normalizeHtmlEntities(content)\r\n        },\r\n        arrayContains(value, array) {\r\n            return array.includes(value);\r\n        },\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        // async getJobList() {\r\n        //     try {\r\n        //         const user = JSON.parse(localStorage.getItem('user'))\r\n        //         if (user && user.sid) {\r\n        //             const response = await getJobList({ sid: user.sid, resource_id: this.resources_id })\r\n        //             const data = response.data\r\n        //             var jobList = response.data.jobList;\r\n        //             console.log('用户答案' + decrypt(jobList))\r\n\r\n        //             jobList = JSON.parse(decrypt(jobList))\r\n        //             jobList.forEach(item => {\r\n        //                 if (item.type_id !== 3 || item.type_id !== 6) {\r\n        //                     item.is_check = 0;\r\n        //                     item.user_answer = item.user_answer.replace(/\\|$/, '');\r\n        //                     if (item.optionsArray == null) {\r\n        //                         item.optionsArray = JSON.parse(item.options)\r\n        //                         if (item.type_id == 7) {\r\n        //                             item.optionsArray = JSON.parse(item.options_answer)\r\n        //                         }\r\n        //                         item.right_answer = ''\r\n        //                         item.optionsArray.forEach(child => {\r\n        //                             child.is_check = 0;\r\n        //                             item.right_answer += child.title + '|'\r\n\r\n        //                         });\r\n\r\n        //                     }\r\n        //                     if (item.type_id == 5 || item.type_id == 7) {\r\n        //                         item.options_answer = JSON.parse(item.options_answer)\r\n        //                     }\r\n        //                     item.optionsArray.forEach(child => {\r\n        //                         child.is_check = 0;\r\n        //                     });\r\n        //                     if (item.type_id == 2) {\r\n        //                         item.right_answer = item.right_answer.replace(/\\|$/, '');\r\n        //                         item.title = this.parsedContent(item.title, item.id)\r\n        //                         item.user_answer = item.user_answer.split(/[|]/)\r\n        //                         item.right_answer = item.right_answer.split(/[|]/)\r\n\r\n        //                     }\r\n        //                     if (item.type_id == 5) {\r\n        //                         item.right_answer = item.right_answer.replace(/\\|$/, '');\r\n        //                         item.title = this.parsedContent(item.title, item.id)\r\n        //                         item.user_answer = item.user_answer.split(/[|]/)\r\n        //                         item.right_answer = item.right_answer.split(/[|]/)\r\n\r\n        //                     }\r\n        //                     if (item.type_id == 7) {\r\n        //                         item.right_answer = item.right_answer.replace(/\\|$/, '');\r\n        //                         item.title = this.parsedContent(item.title, item.id)\r\n        //                         item.user_answer = item.user_answer.split(/[|]/)\r\n        //                         item.right_answer = item.right_answer.split(/[|]/)\r\n\r\n        //                     }\r\n        //                     if (item.type_id == 4) {\r\n        //                         item.right_answer = item.right_answer.replace(/\\|$/, '');\r\n        //                     }\r\n        //                 }\r\n        //             });\r\n        //             this.resources = data\r\n\r\n        //             this.jobList = jobList\r\n        //             this.src = data.resources.file_path\r\n        //             this.getJobAnswer()\r\n        //         } else {\r\n        //             console.error('用户未登录或没有找到sid')\r\n        //         }\r\n        //     } catch (error) {\r\n        //         console.error('Login Failed:', error)\r\n        //     }\r\n        // },\r\n\r\n        async getJobList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getJobList({ sid: user.sid, resource_id: this.resources_id })\r\n                    const data = response.data\r\n                    const jobList = response.data.jobList\r\n\r\n                    // 先解密并解析\r\n                    let jobList1 = JSON.parse(decrypt(jobList))\r\n\r\n                    // 工具函数：只解析一次 JSON\r\n                    function parseIfJson(str) {\r\n                        if (typeof str === 'string') {\r\n                            try {\r\n                                return JSON.parse(str)\r\n                            } catch (e) {\r\n                                console.warn(\"不是合法 JSON:\", str)\r\n                                return str\r\n                            }\r\n                        }\r\n                        return str\r\n                    }\r\n\r\n                    // 遍历处理 jobList1\r\n                    jobList1.forEach(item => {\r\n                        // 统一解析 options_answer 和 options\r\n                        item.options_answer = parseIfJson(item.options_answer)\r\n                        item.optionsArray = parseIfJson(item.options)\r\n\r\n                        // 公共字段处理\r\n                        if (item.type_id !== 3 && item.type_id !== 6) {\r\n                            item.is_check = 0\r\n                            item.user_answer = item.user_answer.replace(/\\|$/, '')\r\n\r\n                            // 初始化 right_answer\r\n                            item.right_answer = ''\r\n                            if (Array.isArray(item.optionsArray)) {\r\n                                item.optionsArray.forEach(child => {\r\n                                    child.is_check = 0\r\n                                    item.right_answer += child.title + '|'\r\n                                })\r\n                            }\r\n\r\n                            // 按题型处理\r\n                            if ([2, 5, 7].includes(item.type_id)) {\r\n                                item.right_answer = item.right_answer.replace(/\\|$/, '')\r\n                                item.title = this.parsedContent(item.title, item.id)\r\n                                item.user_answer = item.user_answer.split(/[|]/)\r\n                                item.right_answer = item.right_answer.split(/[|]/)\r\n                            }\r\n\r\n                            if (item.type_id === 4) {\r\n                                item.right_answer = item.right_answer.replace(/\\|$/, '')\r\n                            }\r\n                        }\r\n                    })\r\n\r\n                    // ✅ 最终赋值用 jobList1，而不是 jobList\r\n                    this.resources = data\r\n                    this.jobList = jobList1\r\n                    this.src = data.resources.file_path\r\n\r\n                    // 调用下一个方法\r\n                    this.getJobAnswer()\r\n\r\n                    // 调试输出（可展开查看）\r\n                    console.log(\"用户答案解析后:\", jobList1)\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async getJobAnswer() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'));\r\n                if (user && user.sid) {\r\n                    const response = await jobAnswer({ sid: user.sid, resource_id: this.resources_id });\r\n                    const data = response.data;\r\n                    var countTotal = data.countTotal\r\n                    var rightCountTotal = data.rightCountTotal\r\n                    var right_bfb = (rightCountTotal / countTotal) * 100\r\n                    this.answer_info = data\r\n                    this.right_bfb = right_bfb.toFixed(2)\r\n                    console.log('API 返回数据:', data.jobAnswerList);\r\n\r\n                    const jobAnswerList = data.jobAnswerList;\r\n                    const jobList = this.jobList;\r\n\r\n                    console.log('工作列表:', jobList);\r\n                    console.log('答案列表:', jobAnswerList);\r\n\r\n                    const answerMap = new Map();\r\n                    jobAnswerList.forEach(v => {\r\n                        if (!answerMap.has(v.job_id)) {\r\n                            answerMap.set(v.job_id, []);\r\n                        }\r\n                        answerMap.get(v.job_id).push(v);\r\n                    });\r\n\r\n                    const new_answer = jobList.map(job => {\r\n                        const answers = answerMap.get(job.id);\r\n                        console.log(`job.id=${job.id}, 对应的答案:`, answers);\r\n                        return answers || [];\r\n                    });\r\n\r\n                    console.log('匹配后的答案:', new_answer);\r\n\r\n                    this.jobAnswerList = new_answer;\r\n                    this.jobAnswerList1 = data.jobAnswerList;\r\n                    // 确保更新视图\r\n                    this.$forceUpdate();\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid');\r\n                }\r\n            } catch (error) {\r\n                console.error('获取答案失败:', error);\r\n            }\r\n        },\r\n\r\n\r\n        async check_answer(itemIndex, indexChild) {\r\n            var jobList = this.jobList\r\n            console.log(itemIndex)\r\n            jobList.forEach((val, key) => {\r\n                if (key == itemIndex) {\r\n                    val.is_check = 1;\r\n                    val.optionsArray.forEach((child, index) => {\r\n                        if (indexChild == index) {\r\n                            child.is_check = 1\r\n                        } else {\r\n                            child.is_check = 0\r\n                        }\r\n                    });\r\n                }\r\n            })\r\n            var has_answer = 0\r\n            jobList.forEach(val => {\r\n                val.optionsArray.forEach(child => {\r\n                    if (child.is_check == 1) {\r\n                        has_answer++\r\n                    }\r\n                });\r\n\r\n            })\r\n            this.jobList = jobList\r\n            this.has_answer = has_answer\r\n        },\r\n        async change_card() {\r\n            this.show = !this.show\r\n            console.log(this.jobList)\r\n        },\r\n        async audioPlay() {\r\n            this.$refs.audioPlayer.play();\r\n        },\r\n        async audioPause() {\r\n            this.$refs.audioPlayer.pause();\r\n            this.audio_status = 1\r\n        },\r\n        updateTime(event) {\r\n            const audio = event.target;\r\n            this.currentTime = this.formatTime(audio.currentTime);\r\n            console.log(audio.currentTime)\r\n            console.log(audio.duration)\r\n            this.percentage = Math.floor((audio.currentTime / audio.duration) * 100);\r\n        },\r\n        loadMetadata(event) {\r\n            const audio = event.target;\r\n            this.duration = this.formatTime(audio.duration);\r\n        },\r\n        canPlay() {\r\n            console.log('Audio can play through.');\r\n        },\r\n        formatTime(seconds) {\r\n            const m = Math.floor(seconds / 60) % 60;\r\n            const s = Math.floor(seconds) % 60;\r\n            return `${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;\r\n        },\r\n        // 解析字符串，生成文本和输入框的块数组\r\n        parsedContent(str, index_id) {\r\n            const chunks = [];\r\n            let lastIndex = 0;\r\n\r\n            // 替换特定格式的占位符\r\n            str = str.replace(/__（/g, '_(');\r\n            str = str.replace(/）__/g, ')_');\r\n\r\n            // 匹配占位符\r\n            const regex = /_\\((\\d+)\\)_+/g;\r\n            let match;\r\n\r\n            // // // 移除 HTML 标签，但保留 <br>\r\n            str = str.replace(/<\\/?[^>]+(>|$)/g, (match) => {\r\n                if (match.startsWith('<br')) return '<br>';\r\n                if (match.startsWith('<em')) return '<em>';\r\n                if (match.startsWith('</em')) return '</em>';\r\n                if (match.startsWith('</strong')) return '</strong>';\r\n                if (match.startsWith('<strong')) return '<strong>';\r\n                if (match.startsWith('<table')) return '<table>';\r\n                if (match.startsWith('</table')) return '</table>';\r\n                if (match.startsWith('<tbody')) return '<tbody>';\r\n                if (match.startsWith('</tbody')) return '</tbody>';\r\n                if (match.startsWith('<th')) return '<th>';\r\n                if (match.startsWith('</th')) return '</th>';\r\n                if (match.startsWith('<tr')) return '<tr>';\r\n                if (match.startsWith('</tr')) return '</tr>';\r\n                if (match.startsWith('<td')) return '<td>';\r\n                if (match.startsWith('</td')) return '</td>';\r\n                // if (match.startsWith('<p')) return '<p>';\r\n                if (match.startsWith('</p')) return '</p>';\r\n                if (match.startsWith('<img')) return match.replace(/<img/, '<img style=\"width: 120%;\"');\r\n                return '';\r\n            });\r\n            //console.log(str)\r\n            // 逐个匹配字符串中的填空占位符\r\n            var inputIndex1 = 0\r\n            while ((match = regex.exec(str)) !== null) {\r\n                const inputIndex = this.globalInputIndex;\r\n\r\n                // 处理占位符之前的文本部分\r\n                if (match.index > lastIndex) {\r\n                    const textChunk = str.slice(lastIndex, match.index);\r\n                    chunks.push({ isInput: false, text: textChunk });\r\n                }\r\n\r\n                // 添加输入框\r\n                chunks.push({ isInput: true, inputIndex, inputIndex1 });\r\n                inputIndex1++\r\n                lastIndex = regex.lastIndex;\r\n                this.globalInputIndex++; // 累加 inputIndex\r\n            }\r\n\r\n            // 处理末尾的文本部分\r\n            if (lastIndex < str.length) {\r\n                const textChunk = str.slice(lastIndex);\r\n                chunks.push({ isInput: false, text: textChunk });\r\n            }\r\n\r\n            // 初始化对应的 insertWordAnswers 数组\r\n            if (!this.insertWordAnswers[index_id]) {\r\n                this.$set(this.insertWordAnswers, index_id, []);\r\n            }\r\n            console.log(\"2wryuu\")\r\n            console.log(chunks)\r\n            return chunks;\r\n        },\r\n        async change_praxis_show() {\r\n            this.praxis_show = !this.praxis_show;\r\n        },\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        // 在组件挂载后立即获取任务数据\r\n        this.log_id = this.$route.query.log_id;\r\n        this.resources_id = this.$route.query.resource_id;\r\n        this.getJobList()\r\n\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n.praxis-item {\r\n    width: 90%;\r\n    height: auto;\r\n    margin: 0 auto;\r\n    text-align: left;\r\n}\r\n\r\n.article {\r\n    width: 80vw;\r\n    height: auto;\r\n    margin: 8px auto;\r\n    padding-bottom: 60px;\r\n    margin-top: 40px;\r\n    text-align: justify;\r\n}\r\n\r\n.praxis {\r\n    padding-bottom: 200px;\r\n    text-align: justify;\r\n}\r\n\r\n.praxis-title {\r\n    font-size: 14px;\r\n    color: #030303;\r\n    padding: 35px 0 10px 0;\r\n    /* width: 50px; */\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: justify;\r\n}\r\n\r\n.praxis-desc {\r\n    font-size: 14px;\r\n    width: 90%;\r\n    height: auto;\r\n    padding: 10px 0;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    font-weight: normal;\r\n}\r\n\r\n.praxis-info {\r\n    width: 90%;\r\n    height: auto;\r\n    background: #FFFFFF;\r\n    white-space: normal;\r\n    /* 正常的空白处理，允许换行 */\r\n    word-break: keep-all;\r\n    /* 确保单词不被截断 */\r\n    overflow-wrap: anywhere;\r\n    /* 单词太长时允许换行，不会强制截断 */\r\n    text-align: justify;\r\n}\r\n\r\n.answer-option {\r\n    width: 90%;\r\n    height: auto;\r\n    background: #FFFFFF;\r\n    white-space: normal;\r\n    /* 正常的空白处理，允许换行 */\r\n    word-break: keep-all;\r\n    /* 确保单词不被截断 */\r\n    overflow-wrap: anywhere;\r\n    /* 单词太长时允许换行，不会强制截断 */\r\n}\r\n\r\n.answer {\r\n    width: 100%;\r\n    /* height: 55px; */\r\n    height: auto;\r\n    margin: 20px 0;\r\n    display: flex;\r\n    justify-content: center;\r\n    align-items: center;\r\n}\r\n\r\n.answer-title {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 35px;\r\n    height: 35px;\r\n    background-color: lightgray;\r\n    border-radius: 35px;\r\n    line-height: 35px;\r\n    text-align: center;\r\n}\r\n\r\n/* .checked {\r\n    background: linear-gradient(180deg, #4499EE 0%, #9CE4FF 100%);\r\n} */\r\n\r\n.checked {\r\n    background: #F85353;\r\n}\r\n\r\n.right-checked {\r\n    background: #3CC57C;\r\n}\r\n\r\n.answer-desc {\r\n    padding-left: 10px;\r\n    font-size: 14px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 300px;\r\n}\r\n\r\n.wrap-text {\r\n    width: 90%;\r\n    height: auto;\r\n    margin: 0 auto;\r\n    text-align: left;\r\n    padding: 10px 0;\r\n}\r\n\r\n.praxis-bottom {\r\n    width: 100%;\r\n    height: 56px;\r\n    background: #FFFFFF;\r\n    box-shadow: 0px -2px 6px 1px rgba(80, 143, 206, 0.1);\r\n    border-radius: 0px;\r\n    position: fixed;\r\n    bottom: 0;\r\n}\r\n\r\n.new-audio {\r\n    width: 50px;\r\n    height: 50px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-left: 15px;\r\n}\r\n\r\n.start-img {\r\n    width: 50px;\r\n    height: 50px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n\r\n}\r\n\r\n.audio-info {\r\n    width: 300px;\r\n    height: 50px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 50px;\r\n    text-align: left;\r\n    color: #979797;\r\n    font-size: 12px;\r\n}\r\n\r\n.progress {\r\n    width: 225px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-top: 22px;\r\n}\r\n\r\n.now-time {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 50px;\r\n}\r\n\r\n.answer-has {\r\n    width: 325px;\r\n    height: 60px;\r\n    padding-left: 25x;\r\n}\r\n\r\n.jindu {\r\n    width: 205px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 60px;\r\n    font-size: 14px;\r\n    color: #979797;\r\n    /* text-align: left; */\r\n\r\n}\r\n\r\n.btn-ok-cn {\r\n    margin-top: 12px;\r\n    width: 118px;\r\n    height: 36px;\r\n    line-height: 36px;\r\n    background: #003F88;\r\n    border-radius: 23px;\r\n    /* margin: 0 auto; */\r\n    text-align: center;\r\n    color: #FFF;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.card-title {\r\n    width: 100vw;\r\n    height: 75px;\r\n    text-align: center;\r\n    line-height: 75px;\r\n    border-bottom: #E4E4E4 1px solid;\r\n    margin: 0 auto;\r\n    color: #000000;\r\n    font-weight: bold;\r\n    font-size: 16px;\r\n}\r\n\r\n.main-answer-card {\r\n    padding: 30px 40px 80px 40px;\r\n    text-align: left;\r\n}\r\n\r\n.card-item {\r\n    width: 34px;\r\n    height: 34px;\r\n    background: linear-gradient(180deg, #4499EE 0%, #9CE4FF 100%);\r\n    border-radius: 34px;\r\n    line-height: 34px;\r\n    text-align: center;\r\n    color: #FFF;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin: 10px 5px;\r\n}\r\n\r\n.card-item-empty {\r\n    background: #CBCBCB;\r\n}\r\n\r\n.btn-cancel {\r\n    position: absolute;\r\n    top: 26px;\r\n    right: 25px;\r\n}\r\n\r\n.btn-ok {\r\n    width: 288px;\r\n    height: 45px;\r\n    background: #003F88;\r\n    border-radius: 23px;\r\n    margin: 0 auto;\r\n    line-height: 45px;\r\n    text-align: center;\r\n    color: #FFF;\r\n    margin: 0 auto;\r\n}\r\n\r\n\r\n.input-answer-box {\r\n    width: auto;\r\n    display: inline;\r\n    line-height: 30px;\r\n    text-align: left;\r\n}\r\n\r\n.input_new {\r\n    width: 80%;\r\n    height: 200px;\r\n    padding-left: 20px;\r\n}\r\n\r\n.input_new>input {\r\n    width: 50%;\r\n    margin: 50px 20px;\r\n    padding: 10px 20px;\r\n}\r\n\r\n\r\n.answer-btn {\r\n    position: fixed;\r\n    bottom: 30%;\r\n    right: 20px;\r\n    width: 20px;\r\n    /* height: 80px; */\r\n    line-height: 20px;\r\n    text-align: center;\r\n    background-color: #96cbf7;\r\n    padding: 10px 0;\r\n    border-radius: 15px;\r\n    color: #FFF;\r\n    font-size: 12px;\r\n}\r\n\r\n\r\n\r\n.box-top {\r\n    width: 90vw;\r\n    height: 50px;\r\n    text-align: left;\r\n}\r\n\r\n.right-num {\r\n    padding: 11px 0 0 30px;\r\n    font-size: 30px;\r\n    font-weight: bold;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.total-num,\r\n.report-desc {\r\n    padding: 29px 0 0 0px;\r\n    font-size: 12px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.report-desc {\r\n    padding-left: 28px;\r\n}\r\n\r\n.bottom-line {\r\n    width: 340px;\r\n    height: 1px;\r\n    margin: 13px auto;\r\n    background-color: #E4E4E4;\r\n}\r\n\r\n.second-box {\r\n    width: 320px;\r\n    height: 25px;\r\n    margin: 0 auto;\r\n    font-size: 12px;\r\n    color: #656565;\r\n}\r\n\r\n.submit-time {\r\n    width: 240px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: left;\r\n}\r\n\r\n.result {\r\n    width: 80px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: right;\r\n}\r\n\r\n.result-box {\r\n    width: 320px;\r\n    height: auto;\r\n    margin: 0 auto;\r\n    font-size: 12px;\r\n    color: #656565;\r\n    text-align: left;\r\n}\r\n\r\n.wall-report {\r\n    width: 90%;\r\n    padding-left: 10%;\r\n    height: 60px;\r\n    line-height: 60px;\r\n    border-top: 1px solid #96cbf7;\r\n    border-bottom: 1px solid #96cbf7;\r\n    margin-top: 20px;\r\n    font-weight: bold;\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Detail.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Detail.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Detail.vue?vue&type=template&id=5a132944&scoped=true\"\nimport script from \"./Detail.vue?vue&type=script&lang=js\"\nexport * from \"./Detail.vue?vue&type=script&lang=js\"\nimport style0 from \"./Detail.vue?vue&type=style&index=0&id=5a132944&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"5a132944\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"praxis\"},[_c('van-nav-bar',{attrs:{\"title\":_vm.resources.resources.name,\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_vm._l((_vm.jobList),function(item,index){return _c('div',{key:index},[_c('div',{staticClass:\"praxis-item\"},[_c('div',{staticClass:\"praxis-title\"},[_vm._v(\"题\"+_vm._s(index + 1))]),(item.type_id == 1 || item.type_id == 4)?_c('div',{staticClass:\"praxis-desc\"},[_c('div',{staticClass:\"wrap-text\",domProps:{\"innerHTML\":_vm._s(item.title)}})]):_vm._e(),(item.type_id == 1)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.optionsArray),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"answer\"},[_c('div',{staticClass:\"answer-title\",class:{\n                        'answer-title': true,\n                        'checked': item.user_answer == itemChild.label,\n                        'right-checked': item.options_answer == itemChild.label\n                    },on:{\"click\":function($event){return _vm.check_answer(index, indexChild)}}},[_vm._v(_vm._s(itemChild.label))]),_c('div',{staticClass:\"answer-desc\"},[_vm._v(_vm._s(itemChild.title))])])}),0):_vm._e(),(item.type_id == 3 || item.type_id == 6)?_c('div',{staticClass:\"praxis-info\"},[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(item.title)}}),_c('div',{staticStyle:{\"display\":\"inline\"}},[_vm._v(\"你的答案是：\"+_vm._s(item.user_answer))])]):_vm._e(),(item.type_id == 4)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.optionsArray),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"answer\"},[_c('div',{staticClass:\"answer-title\",class:{\n                        'answer-title': true,\n                        'checked': !_vm.arrayContains(itemChild.label, item.options_answer),\n                        'right-checked': _vm.arrayContains(itemChild.label, item.options_answer)\n                    },on:{\"click\":function($event){return _vm.check_answer(index, indexChild)}}},[_vm._v(_vm._s(itemChild.label))]),_c('div',{staticClass:\"answer-desc\"},[_vm._v(_vm._s(itemChild.title))])])}),0):_vm._e(),(item.type_id == 2)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.title),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"input-answer-box\"},[(!itemChild.isInput)?_c('span',[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(itemChild.text)}})]):_c('span',{staticStyle:{\"border-bottom\":\"1px solid #54a4ee\",\"padding\":\"0 10px 0 0\"}},[(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 1)?_c('span',{staticStyle:{\"color\":\"#3CC57C\"}},[_vm._v(\" \"+_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer)+\" \")]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer)?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" \"+_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer)+\" \")]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer == '')?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" 未作 \")]):_vm._e()])])}),0):_vm._e(),(item.type_id == 5)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.title),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"input-answer-box\"},[(!itemChild.isInput)?_c('span',[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(itemChild.text)}})]):_c('span',{staticStyle:{\"border-bottom\":\"1px solid #54a4ee\",\"padding\":\"0 10px 0 0\"}},[(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 1)?_c('span',{staticStyle:{\"color\":\"#3CC57C\"}},[_vm._v(_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer))]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer)?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" \"+_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer)+\" \")]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer == '')?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" 未作 \")]):_vm._e()])])}),0):_vm._e(),(item.type_id == 7)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.title),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"input-answer-box\"},[(!itemChild.isInput)?_c('span',[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(itemChild.text)}})]):_c('span',{staticStyle:{\"border-bottom\":\"1px solid #54a4ee\",\"padding\":\"0 10px 0 0\"}},[(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 1)?_c('span',{staticStyle:{\"color\":\"#3CC57C\"}},[_vm._v(_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer))]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer)?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" \"+_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer)+\" \")]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer == '')?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" 未作 \")]):_vm._e()])])}),0):_vm._e(),(item.type_id == 1)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是：\"+_vm._s(item.options_answer)+\" \"),_c('br'),_vm._v(\" 你的答案是：\"+_vm._s(item.user_answer)+\" \")]):_vm._e(),(item.type_id == 2)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是： \"),_c('br'),_vm._l((item.right_answer),function(a,b){return _c('span',{key:b,staticClass:\"answer-item\"},[_vm._v(\"(\"+_vm._s(b + 1)+\")  \"+_vm._s(a)+\"   \")])}),_c('br'),_vm._v(\" 你的答案是：\"),_c('br'),_vm._l((item.user_answer),function(ua,ub){return _c('span',{key:ub,staticClass:\"answer-item\"},[_vm._v(\" (\"+_vm._s(ub + 1)+\")  \"+_vm._s(ua)+\"   \")])})],2):_vm._e(),(item.type_id == 4)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是：\"),_c('br'),_c('span',[_vm._v(\" \"+_vm._s(item.options_answer)+\" \")]),_c('br'),_vm._v(\"你的答案是：\"),_c('br'),_c('span',[_vm._v(_vm._s(item.user_answer)+\" \")])]):_vm._e(),(item.type_id == 5)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是：\"),_c('br'),_vm._l((item.options_answer),function(a,b){return _c('span',{key:b,staticClass:\"answer-item\"},[_vm._v(\" (\"+_vm._s(b + 1)+\")  \"+_vm._s(a.title)+\"   \")])}),_c('br'),_vm._v(\"你的答案是：\"),_c('br'),_vm._l((item.user_answer),function(ua,ub){return _c('span',{key:ub,staticClass:\"answer-item\"},[_vm._v(\"(\"+_vm._s(ub + 1)+\")  \"+_vm._s(ua)+\"   \")])})],2):_vm._e(),(item.type_id == 7)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是：\"),_c('br'),_vm._l((item.options_answer),function(a,b){return _c('span',{key:b,staticClass:\"answer-item\"},[_vm._v(\" (\"+_vm._s(b + 1)+\")  \"+_vm._s(a.title)+\"   \")])}),_c('br'),_vm._v(\"你的答案是：\"),_c('br'),_vm._l((item.user_answer),function(ua,ub){return _c('span',{key:ub,staticClass:\"answer-item\"},[_vm._v(\"(\"+_vm._s(ub + 1)+\")  \"+_vm._s(ua)+\"   \")])})],2):_vm._e()])])}),_c('div',{staticClass:\"wall\"}),_c('div',{staticClass:\"answer-box\"},[_c('div',{staticClass:\"answer-btn\",on:{\"click\":_vm.change_praxis_show}},[_vm._v(\"查看原文\")])]),_c('van-action-sheet',{staticStyle:{\"background-color\":\"aliceblue\",\"max-height\":\"90vh\",\"overflow\":\"hidden\"},attrs:{\"title\":\"原文\"},model:{value:(_vm.praxis_show),callback:function ($$v) {_vm.praxis_show=$$v},expression:\"praxis_show\"}},[(_vm.isPdfResource)?_c('PdfViewer',{attrs:{\"src\":_vm.resources.resources.file_path}}):_c('div',{staticClass:\"article\",domProps:{\"innerHTML\":_vm._s(_vm.normalizeContent(_vm.resources.resources.content))}})],1),_c('div',{staticClass:\"wall-report\"},[_vm._v(\"答题报告\")]),_c('div',{staticClass:\"answer-box\"},[_c('div',{staticClass:\"box-top\"},[_c('div',{staticClass:\"right-num\"},[_vm._v(_vm._s(_vm.answer_info.row.right_count))]),_c('div',{staticClass:\"total-num\"},[_vm._v(\"/\"+_vm._s(_vm.answer_info.row.total_count))]),_c('div',{staticClass:\"report-desc\"},[_vm._v(\"共\"+_vm._s(_vm.answer_info.row.total_count)+\"题，答对\"+_vm._s(_vm.answer_info.row.right_count)+\"题\")])]),_c('div',{staticClass:\"bottom-line\"}),_c('div',{staticClass:\"second-box\"},[_c('div',{staticClass:\"submit-time\"},[_vm._v(\"交卷时间：\"+_vm._s(_vm.jobAnswerList1[0].create_time))]),_c('div',{staticClass:\"result\"},[_vm._v(\"正确率：\"+_vm._s(((_vm.answer_info.row.right_count / _vm.answer_info.row.total_count) * 100).toFixed(2))+\"% \")])])]),_c('RelList',{attrs:{\"resource_id\":_vm.resources_id}})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"praxis\">\r\n        <van-nav-bar :title=\"resources.resources.name\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n\r\n        <div v-for=\"(item, index) in jobList\" :key=\"index\">\r\n\r\n            <div class=\"praxis-item\">\r\n                <div class=\"praxis-title\">题{{ index + 1 }}</div>\r\n                <div class=\"praxis-desc\" v-if=\"item.type_id == 1 || item.type_id == 4\">\r\n                    <div class=\"wrap-text\" v-html=\"item.title\"></div>\r\n                </div>\r\n                <div class=\"praxis-info\" v-if=\"item.type_id == 1\">\r\n                    <div class=\"answer\" v-for=\"(itemChild, indexChild) in item.optionsArray\" :key=\"indexChild\">\r\n                        <div :class=\"{\r\n                            'answer-title': true,\r\n                            'checked': item.user_answer == itemChild.label,\r\n                            'right-checked': item.options_answer == itemChild.label\r\n                        }\" class=\"answer-title\" @click=\"check_answer(index, indexChild)\">{{ itemChild.label\r\n                            }}</div>\r\n                        <div class=\"answer-desc\">{{ itemChild.title }}</div>\r\n                    </div>\r\n                </div>\r\n                <div class=\"praxis-info\" v-if=\"item.type_id == 3 || item.type_id == 6\">\r\n                    <div style=\"display: inline;\" v-html=\"item.title\"></div>\r\n                    <div style=\"display: inline;\">你的答案是：{{ item.user_answer }}</div>\r\n                </div>\r\n                <div class=\"praxis-info\" v-if=\"item.type_id == 4\">\r\n                    <div class=\"answer\" v-for=\"(itemChild, indexChild) in item.optionsArray\" :key=\"indexChild\">\r\n                        <div :class=\"{\r\n                            'answer-title': true,\r\n                            'checked': !arrayContains(itemChild.label, item.options_answer),\r\n                            'right-checked': arrayContains(itemChild.label, item.options_answer)\r\n                        }\" class=\"answer-title\" @click=\"check_answer(index, indexChild)\">{{ itemChild.label\r\n                            }}</div>\r\n                        <div class=\"answer-desc\">{{ itemChild.title }}</div>\r\n                    </div>\r\n                </div>\r\n                <div class=\"praxis-info\" v-if=\"item.type_id == 2\">\r\n                    <div class=\"input-answer-box\" v-for=\"(itemChild, indexChild) in item.title\" :key=\"indexChild\">\r\n                        <!-- 如果是文本块，直接显示 -->\r\n                        <span v-if=\"!itemChild.isInput\">\r\n                            <div style=\"display: inline;\" v-html=\"itemChild.text\"></div>\r\n                        </span>\r\n                       <!-- <span style=\"color: gold;\">{{ index }}</span>\r\n                       <span style=\"color: red;\">{{ itemChild.inputIndex1 }}</span> -->\r\n                        <span v-else style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\">\r\n                            <span style=\"color: #3CC57C;\"\r\n                                v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 1\">\r\n                                {{ jobAnswerList[index][itemChild.inputIndex1].answer }}\r\n                            </span>\r\n                            <span\r\n                                v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer\"\r\n                                style=\"color: red;\">\r\n                                {{ jobAnswerList[index][itemChild.inputIndex1].answer }}\r\n                            </span>\r\n                            <span\r\n                                v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer == ''\"\r\n                                style=\"color: red;\">\r\n                                未作\r\n                            </span>\r\n                        </span>\r\n                        <!-- 如果是输入框，动态生成\r\n                        <span style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\"\r\n                            v-if=\"item.user_answer[itemChild.inputIndex] != ''\">\r\n                            <span <span\r\n                                :style=\"{ color: itemChild.inputIndex < jobAnswerList[index].length && jobAnswerList[index][itemChild.inputIndex].is_right == 1 ? '#3CC57C' : '#FF0000' }\">{{\r\n                                    item.user_answer[itemChild.inputIndex] }}</span>\r\n                        </span>\r\n                        <span style=\"border-bottom: 1px solid #54a4ee;color: #F85353;padding: 0 10px 0 0;\" v-else>\r\n                            未做\r\n                        </span> -->\r\n                    </div>\r\n                </div>\r\n                <div class=\"praxis-info\" v-if=\"item.type_id == 5\">\r\n                    <div class=\"input-answer-box\" v-for=\"(itemChild, indexChild) in item.title\" :key=\"indexChild\">\r\n                        <!-- 如果是文本块，直接显示 -->\r\n                        <span v-if=\"!itemChild.isInput\">\r\n                            <div style=\"display: inline;\" v-html=\"itemChild.text\"></div>\r\n                        </span>\r\n                        <span v-else style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\">\r\n                            <span style=\"color: #3CC57C;\"\r\n                                v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 1\">{{\r\n                                    jobAnswerList[index][itemChild.inputIndex1].answer }}</span>\r\n                            <span\r\n                                v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer\"\r\n                                style=\"color: red;\">\r\n                                {{ jobAnswerList[index][itemChild.inputIndex1].answer }}\r\n                            </span>\r\n                            <span\r\n                                v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer == ''\"\r\n                                style=\"color: red;\">\r\n                                未作\r\n                            </span>\r\n                        </span>\r\n                        <!-- 如果是输入框，动态生成\r\n                        <span style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\"\r\n                            v-if=\"item.user_answer[itemChild.inputIndex] != ''\">\r\n                            <span\r\n                                        :style=\"{ color: itemChild.inputIndex < jobAnswerList[index].length && jobAnswerList[index][itemChild.inputIndex].is_right ? '#3CC57C' : '#FF0000' }\">\r\n                                        {{ item.user_answer[itemChild.inputIndex] }}\r\n                                    </span>\r\n                        </span>\r\n                        <span style=\"border-bottom: 1px solid #54a4ee;color: orange;padding: 0 10px 0 0;\" v-else>\r\n                            未做\r\n                        </span> -->\r\n                    </div>\r\n                </div>\r\n                <div class=\"praxis-info\" v-if=\"item.type_id == 7\">\r\n                    <div class=\"input-answer-box\" v-for=\"(itemChild, indexChild) in item.title\" :key=\"indexChild\">\r\n                        <!-- 如果是文本块，直接显示 -->\r\n                        <span v-if=\"!itemChild.isInput\">\r\n                            <div style=\"display: inline;\" v-html=\"itemChild.text\"></div>\r\n                        </span>\r\n                        <span v-else style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\">\r\n                            <span style=\"color: #3CC57C;\"\r\n                                v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 1\">{{\r\n                                    jobAnswerList[index][itemChild.inputIndex1].answer }}</span>\r\n                            <span\r\n                                v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer\"\r\n                                style=\"color: red;\">\r\n                                {{ jobAnswerList[index][itemChild.inputIndex1].answer }}\r\n                            </span>\r\n                            <span\r\n                                v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer == ''\"\r\n                                style=\"color: red;\">\r\n                                未作\r\n                            </span>\r\n                        </span>\r\n                        <!-- 如果是输入框，动态生成\r\n                        <span style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\"\r\n                            v-if=\"item.user_answer[itemChild.inputIndex] != ''\">\r\n                            <span\r\n                                :style=\"{ color: itemChild.inputIndex < jobAnswerList[index].length && jobAnswerList[index][itemChild.inputIndex].is_right ? '#3CC57C' : '#FF0000' }\">\r\n                                {{ item.user_answer[itemChild.inputIndex] }}\r\n                            </span>\r\n                        </span>\r\n                        <span style=\"border-bottom: 1px solid #54a4ee;color: orange;padding: 0 10px 0 0;\" v-else>\r\n                            未做\r\n                        </span> -->\r\n                    </div>\r\n                </div>\r\n                <div class=\"answer-option\" v-if=\"item.type_id == 1\">正确答案是：{{ item.options_answer }} <br>\r\n                    你的答案是：{{\r\n                        item.user_answer }}\r\n                </div>\r\n                <div class=\"answer-option\" v-if=\"item.type_id == 2\">正确答案是：\r\n                    <br>\r\n                    <span v-for=\"(a, b) in item.right_answer\" :key=\"b\" class=\"answer-item\">({{\r\n                        b + 1 }})&nbsp;&nbsp;{{\r\n                            a }}&nbsp;&nbsp;\r\n                    </span>\r\n                    <br>\r\n                    你的答案是：<br>\r\n                    <span v-for=\"(ua, ub) in item.user_answer\" :key=\"ub\" class=\"answer-item\">\r\n                        ({{ ub\r\n                            + 1 }})&nbsp;&nbsp;{{ ua\r\n                        }}&nbsp;&nbsp;\r\n                    </span>\r\n                </div>\r\n                <div class=\"answer-option\" v-if=\"item.type_id == 4\">正确答案是：<br>\r\n                    <span>\r\n                        {{ item.options_answer }}\r\n                    </span>\r\n                    <br>你的答案是：<br>\r\n                    <span>{{\r\n                        item.user_answer }}\r\n                    </span>\r\n                </div>\r\n                <div class=\"answer-option\" v-if=\"item.type_id == 5\">正确答案是：<br>\r\n                    <span v-for=\"(a, b) in item.options_answer\" :key=\"b\" class=\"answer-item\">\r\n                        ({{ b + 1 }})&nbsp;&nbsp;{{\r\n                            a.title }}&nbsp;&nbsp;\r\n                    </span><br>你的答案是：<br>\r\n                    <span v-for=\"(ua, ub) in item.user_answer\" :key=\"ub\" class=\"answer-item\">({{ ub + 1\r\n                        }})&nbsp;&nbsp;{{\r\n                            ua }}&nbsp;&nbsp;\r\n                    </span>\r\n                </div>\r\n                <div class=\"answer-option\" v-if=\"item.type_id == 7\">正确答案是：<br>\r\n                    <span v-for=\"(a, b) in item.options_answer\" :key=\"b\" class=\"answer-item\">\r\n                        ({{ b + 1 }})&nbsp;&nbsp;{{\r\n                            a.title }}&nbsp;&nbsp;\r\n                    </span><br>你的答案是：<br>\r\n                    <span v-for=\"(ua, ub) in item.user_answer\" :key=\"ub\" class=\"answer-item\">({{ ub + 1\r\n                        }})&nbsp;&nbsp;{{\r\n                            ua }}&nbsp;&nbsp;\r\n                    </span>\r\n                </div>\r\n            </div>\r\n        </div>\r\n        <div class=\"wall\"></div>\r\n        <div class=\"answer-box\">\r\n            <div class=\"answer-btn\" @click=\"change_praxis_show\">查看原文</div>\r\n        </div>\r\n        <van-action-sheet style=\"background-color: aliceblue; max-height: 90vh; overflow: hidden;\" v-model=\"praxis_show\" title=\"原文\">\n            <PdfViewer v-if=\"isPdfResource\" :src=\"resources.resources.file_path\" />\n            <div v-else class=\"article\" v-html=\"normalizeContent(resources.resources.content)\"></div>\r\n\r\n        </van-action-sheet>\r\n\r\n        <div class=\"wall-report\">答题报告</div>\r\n        <div class=\"answer-box\">\r\n            <div class=\"box-top\">\r\n                <div class=\"right-num\">{{ answer_info.row.right_count }}</div>\r\n                <div class=\"total-num\">/{{ answer_info.row.total_count }}</div>\r\n                <div class=\"report-desc\">共{{ answer_info.row.total_count }}题，答对{{ answer_info.row.right_count\r\n                    }}题</div>\r\n            </div>\r\n            <div class=\"bottom-line\"></div>\r\n            <div class=\"second-box\">\r\n                <div class=\"submit-time\">交卷时间：{{ jobAnswerList1[0].create_time }}</div>\r\n                <div class=\"result\">正确率：{{ ((answer_info.row.right_count / answer_info.row.total_count) *\r\n                    100).toFixed(2) }}%\r\n                </div>\r\n            </div>\r\n        </div>\r\n        <RelList :resource_id=\"resources_id\" />\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getsHistory, getHistoryInfo } from '@/api/listen'\r\nimport RelList from \"../../components/RelList\";\nimport PdfViewer from '@/components/PdfViewer';\nimport { normalizeHtmlEntities } from '@/utils/html'\r\nexport default {\n    components: { RelList, PdfViewer },\n    name: 'Detail',\n    computed: {\n        isPdfResource() {\n            const resource = this.resources && this.resources.resources ? this.resources.resources : {}\n            const fileType = String(resource.file_type || '').toLowerCase()\n            const filePath = String(resource.file_path || '').toLowerCase().split('?')[0]\n            return fileType.includes('pdf') || filePath.endsWith('.pdf')\n        }\n    },\n    data() {\r\n        return {\r\n            praxis_show: false,\r\n            show: false,\r\n            activeTitle: 0,\r\n            active: 0,\r\n            resources: [],\r\n            jobList: [],\r\n            src: [],\r\n            log_id: 0,\r\n            resources_id: 0,\r\n            percentage: 0,\r\n            has_answer: 0,\r\n            currentTime: '0:00',\r\n            audio_status: 1,\r\n            insertWordAnswers: [],\r\n            caninput: false,\r\n            this_job_id: 0,\r\n            this_inputIndex: 0,\r\n            ListAnswer: [],\r\n            answer_info: [],\r\n            jobAnswerList: [],\r\n            RelList: [],\r\n            right_bfb: 0,\r\n            globalInputIndex: 0,\r\n            resource_id: 0\r\n        }\r\n    },\r\n    methods: {\r\n        normalizeContent(content) {\r\n            return normalizeHtmlEntities(content)\r\n        },\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        arrayContains(value, array) {\r\n            return array.includes(value);\r\n        },\r\n        async getsHistory() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getsHistory({ sid: user.sid, resource_id: this.resources_id, s_id: this.his_id })\r\n                    const data = response.data\r\n                    var jobList = response.data.jobList;\r\n                   \r\n                    jobList.forEach(item => {\r\n                        if (item.type_id !== 3 || item.type_id !== 6) {\r\n                            item.is_check = 0;\r\n                           \r\n                            if(item.user_answer != null){\r\n                                item.user_answer = item.user_answer.replace(/\\|$/, '');\r\n                            }\r\n                            console.log(jobList)\r\n                            if (item.optionsArray == null && item.type_id != 3) {\r\n                                item.optionsArray = JSON.parse(item.options)\r\n                                if (item.type_id == 7) {\r\n                                    item.optionsArray = JSON.parse(item.options_answer)\r\n                                }\r\n                                item.right_answer = ''\r\n                                item.optionsArray.forEach(child => {\r\n                                    child.is_check = 0;\r\n                                    item.right_answer += child.title + '|'\r\n\r\n                                });\r\n\r\n                            }\r\n                            if (item.type_id == 5 || item.type_id == 7) {\r\n                                item.options_answer = JSON.parse(item.options_answer)\r\n                            }\r\n                            item.optionsArray.forEach(child => {\r\n                                child.is_check = 0;\r\n                            });\r\n                            if (item.type_id == 2) {\r\n                                item.right_answer = item.right_answer.replace(/\\|$/, '');\r\n                                item.title = this.parsedContent(item.title, item.id)\r\n                                item.user_answer = item.user_answer.split(/[|]/)\r\n                                item.right_answer = item.right_answer.split(/[|]/)\r\n                                console.log(item.right_answer)\r\n                            }\r\n                            if (item.type_id == 5) {\r\n                                item.right_answer = item.right_answer.replace(/\\|$/, '');\r\n                                item.title = this.parsedContent(item.title, item.id)\r\n                                item.user_answer = item.user_answer.split(/[|]/)\r\n                                item.right_answer = item.right_answer.split(/[|]/)\r\n                                console.log(item.right_answer)\r\n                            }\r\n                            if (item.type_id == 7) {\r\n                                // item.right_answer = item.right_answer.replace(/\\|$/, '');\r\n                                // item.title = this.parsedContent(item.title, item.id)\r\n                                // item.user_answer = item.user_answer.split(/[|]/)\r\n                                // item.right_answer = item.right_answer.split(/[|]/)\r\n                                // console.log(item)\r\n                            }\r\n                            if (item.type_id == 4) {\r\n                                item.right_answer = item.right_answer.replace(/\\|$/, '');\r\n\r\n                            }\r\n                        }\r\n                    });\r\n\r\n                    this.resources = data\r\n                    console.log(jobList)\r\n                    this.jobList = jobList\r\n                    this.src = data.resources.file_path\r\n                    this.getHistoryInfo()\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n\r\n        async getHistoryInfo() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getHistoryInfo({ sid: user.sid, resource_id: this.resources_id, s_id: this.his_id })\r\n                    const data = response.data\r\n                    this.answer_info = data\r\n                    const jobList = this.jobList;\r\n                    const jobAnswerList = data.array;\r\n                    // 使用 Map 来存储 jobAnswerList\r\n\r\n                    console.log('工作列表:', jobList);\r\n                    console.log('答案列表:', jobAnswerList);\r\n\r\n                    const answerMap = new Map();\r\n                    jobAnswerList.forEach(v => {\r\n                        if (!answerMap.has(v.job_id)) {\r\n                            answerMap.set(v.job_id, []);\r\n                        }\r\n                        answerMap.get(v.job_id).push(v);\r\n                    });\r\n\r\n                    const new_answer = jobList.map(job => {\r\n                        const answers = answerMap.get(job.id);\r\n                        console.log(`job.id=${job.id}, 对应的答案:`, answers);\r\n                        return answers || [];\r\n                    });\r\n\r\n                    console.log('匹配后的答案:', new_answer);\r\n\r\n                    this.jobAnswerList = new_answer;\r\n                    this.jobAnswerList1 = data.array;\r\n                    // 确保更新视图\r\n                    this.$forceUpdate();\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async check_answer(itemIndex, indexChild) {\r\n            var jobList = this.jobList\r\n            console.log(itemIndex)\r\n            jobList.forEach((val, key) => {\r\n                if (key == itemIndex) {\r\n                    val.is_check = 1;\r\n                    val.optionsArray.forEach((child, index) => {\r\n                        if (indexChild == index) {\r\n                            child.is_check = 1\r\n                        } else {\r\n                            child.is_check = 0\r\n                        }\r\n                    });\r\n                }\r\n            })\r\n            var has_answer = 0\r\n            jobList.forEach(val => {\r\n                val.optionsArray.forEach(child => {\r\n                    if (child.is_check == 1) {\r\n                        has_answer++\r\n                    }\r\n                });\r\n\r\n            })\r\n            this.jobList = jobList\r\n            this.has_answer = has_answer\r\n        },\r\n        async change_card() {\r\n            this.show = !this.show\r\n            console.log(this.jobList)\r\n        },\r\n        async audioPlay() {\r\n            this.$refs.audioPlayer.play();\r\n        },\r\n        async audioPause() {\r\n            this.$refs.audioPlayer.pause();\r\n            this.audio_status = 1\r\n        },\r\n        updateTime(event) {\r\n            const audio = event.target;\r\n            this.currentTime = this.formatTime(audio.currentTime);\r\n            console.log(audio.currentTime)\r\n            console.log(audio.duration)\r\n            this.percentage = Math.floor((audio.currentTime / audio.duration) * 100);\r\n        },\r\n        loadMetadata(event) {\r\n            const audio = event.target;\r\n            this.duration = this.formatTime(audio.duration);\r\n        },\r\n        canPlay() {\r\n            console.log('Audio can play through.');\r\n        },\r\n        formatTime(seconds) {\r\n            const m = Math.floor(seconds / 60) % 60;\r\n            const s = Math.floor(seconds) % 60;\r\n            return `${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;\r\n        },\r\n        // 解析字符串，生成文本和输入框的块数组\r\n        // 解析字符串，生成文本和输入框的块数组\r\n        parsedContent(str, index_id) {\r\n            const chunks = [];\r\n            let lastIndex = 0;\r\n\r\n            // 替换特定格式的占位符\r\n            str = str.replace(/__（/g, '_(');\r\n            str = str.replace(/）__/g, ')_');\r\n\r\n            // 匹配占位符\r\n            const regex = /_\\((\\d+)\\)_+/g;\r\n            let match;\r\n\r\n            // // // 移除 HTML 标签，但保留 <br>\r\n            str = str.replace(/<\\/?[^>]+(>|$)/g, (match) => {\r\n                if (match.startsWith('<br')) return '<br>';\r\n                if (match.startsWith('<em')) return '<em>';\r\n                if (match.startsWith('</em')) return '</em>';\r\n                if (match.startsWith('</strong')) return '</strong>';\r\n                if (match.startsWith('<strong')) return '<strong>';\r\n                if (match.startsWith('<table')) return '<table>';\r\n                if (match.startsWith('</table')) return '</table>';\r\n                if (match.startsWith('<tbody')) return '<tbody>';\r\n                if (match.startsWith('</tbody')) return '</tbody>';\r\n                if (match.startsWith('<th')) return '<th>';\r\n                if (match.startsWith('</th')) return '</th>';\r\n                if (match.startsWith('<tr')) return '<tr>';\r\n                if (match.startsWith('</tr')) return '</tr>';\r\n                if (match.startsWith('<td')) return '<td>';\r\n                if (match.startsWith('</td')) return '</td>';\r\n                // if (match.startsWith('<p')) return '<p>';\r\n                if (match.startsWith('</p')) return '</p>';\r\n                if (match.startsWith('<img')) return match.replace(/<img/, '<img style=\"width: 120%;\"');\r\n                return '';\r\n            });\r\n            //console.log(str)\r\n            // 逐个匹配字符串中的填空占位符\r\n            var inputIndex1 = 0\r\n            while ((match = regex.exec(str)) !== null) {\r\n                const inputIndex = this.globalInputIndex;\r\n\r\n                // 处理占位符之前的文本部分\r\n                if (match.index > lastIndex) {\r\n                    const textChunk = str.slice(lastIndex, match.index);\r\n                    chunks.push({ isInput: false, text: textChunk });\r\n                }\r\n\r\n                // 添加输入框\r\n                chunks.push({ isInput: true, inputIndex, inputIndex1 });\r\n                inputIndex1++\r\n                lastIndex = regex.lastIndex;\r\n                this.globalInputIndex++; // 累加 inputIndex\r\n            }\r\n\r\n            // 处理末尾的文本部分\r\n            if (lastIndex < str.length) {\r\n                const textChunk = str.slice(lastIndex);\r\n                chunks.push({ isInput: false, text: textChunk });\r\n            }\r\n\r\n            // 初始化对应的 insertWordAnswers 数组\r\n            if (!this.insertWordAnswers[index_id]) {\r\n                this.$set(this.insertWordAnswers, index_id, []);\r\n            }\r\n            console.log(\"处理过的字符\")\r\n            console.log(chunks)\r\n            return chunks;\r\n        },\r\n        async change_praxis_show() {\r\n            this.praxis_show = !this.praxis_show;\r\n        },\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        // 在组件挂载后立即获取任务数据\r\n        this.his_id = this.$route.query.his_id;\r\n        this.resources_id = this.$route.query.resource_id;\r\n        this.getsHistory()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n.praxis-item {\r\n    width: 90%;\r\n    height: auto;\r\n    margin: 0 auto;\r\n    text-align: left;\r\n}\r\n\r\n.article {\r\n    width: 80vw;\r\n    height: auto;\r\n    margin: 8px auto;\r\n    padding-bottom: 60px;\r\n    margin-top: 40px;\r\n    text-align: justify;\r\n}\r\n\r\n.praxis {\r\n    padding-bottom: 200px;\r\n    text-align: justify;\r\n}\r\n\r\n.praxis-title {\r\n    font-size: 14px;\r\n    color: #030303;\r\n    padding: 35px 0 10px 0;\r\n    /* width: 50px; */\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: justify;\r\n}\r\n\r\n.praxis-desc {\r\n    font-size: 14px;\r\n    width: 90%;\r\n    height: auto;\r\n    padding: 10px 0;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    font-weight: normal;\r\n}\r\n\r\n.praxis-info {\r\n    width: 90%;\r\n    height: auto;\r\n    background: #FFFFFF;\r\n    white-space: normal;\r\n    /* 正常的空白处理，允许换行 */\r\n    word-break: keep-all;\r\n    /* 确保单词不被截断 */\r\n    overflow-wrap: anywhere;\r\n    /* 单词太长时允许换行，不会强制截断 */\r\n    text-align: justify;\r\n}\r\n\r\n.answer-option {\r\n    width: 90%;\r\n    height: auto;\r\n    background: #FFFFFF;\r\n    white-space: normal;\r\n    /* 正常的空白处理，允许换行 */\r\n    word-break: keep-all;\r\n    /* 确保单词不被截断 */\r\n    overflow-wrap: anywhere;\r\n    /* 单词太长时允许换行，不会强制截断 */\r\n}\r\n\r\n.answer {\r\n    width: 100%;\r\n    /* height: 55px; */\r\n    height: auto;\r\n    margin: 20px 0;\r\n    display: flex;\r\n    justify-content: center;\r\n    align-items: center;\r\n}\r\n\r\n.answer-title {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 35px;\r\n    height: 35px;\r\n    background-color: lightgray;\r\n    border-radius: 35px;\r\n    line-height: 35px;\r\n    text-align: center;\r\n}\r\n\r\n/* .checked {\r\n    background: linear-gradient(180deg, #4499EE 0%, #9CE4FF 100%);\r\n} */\r\n\r\n.checked {\r\n    background: #F85353;\r\n}\r\n\r\n.right-checked {\r\n    background: #3CC57C;\r\n}\r\n\r\n.answer-desc {\r\n    padding-left: 10px;\r\n    font-size: 14px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 300px;\r\n}\r\n\r\n.wrap-text {\r\n    width: 90%;\r\n    height: auto;\r\n    margin: 0 auto;\r\n    text-align: left;\r\n    padding: 10px 0;\r\n}\r\n\r\n.praxis-bottom {\r\n    width: 100%;\r\n    height: 56px;\r\n    background: #FFFFFF;\r\n    box-shadow: 0px -2px 6px 1px rgba(80, 143, 206, 0.1);\r\n    border-radius: 0px;\r\n    position: fixed;\r\n    bottom: 0;\r\n}\r\n\r\n.new-audio {\r\n    width: 50px;\r\n    height: 50px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-left: 15px;\r\n}\r\n\r\n.start-img {\r\n    width: 50px;\r\n    height: 50px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n\r\n}\r\n\r\n.audio-info {\r\n    width: 300px;\r\n    height: 50px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 50px;\r\n    text-align: left;\r\n    color: #979797;\r\n    font-size: 12px;\r\n}\r\n\r\n.progress {\r\n    width: 225px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-top: 22px;\r\n}\r\n\r\n.now-time {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 50px;\r\n}\r\n\r\n.answer-has {\r\n    width: 325px;\r\n    height: 60px;\r\n    padding-left: 25x;\r\n}\r\n\r\n.jindu {\r\n    width: 205px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 60px;\r\n    font-size: 14px;\r\n    color: #979797;\r\n    /* text-align: left; */\r\n\r\n}\r\n\r\n.btn-ok-cn {\r\n    margin-top: 12px;\r\n    width: 118px;\r\n    height: 36px;\r\n    line-height: 36px;\r\n    background: #003F88;\r\n    border-radius: 23px;\r\n    /* margin: 0 auto; */\r\n    text-align: center;\r\n    color: #FFF;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.card-title {\r\n    width: 100vw;\r\n    height: 75px;\r\n    text-align: center;\r\n    line-height: 75px;\r\n    border-bottom: #E4E4E4 1px solid;\r\n    margin: 0 auto;\r\n    color: #000000;\r\n    font-weight: bold;\r\n    font-size: 16px;\r\n}\r\n\r\n.main-answer-card {\r\n    padding: 30px 40px 80px 40px;\r\n    text-align: left;\r\n}\r\n\r\n.card-item {\r\n    width: 34px;\r\n    height: 34px;\r\n    background: linear-gradient(180deg, #4499EE 0%, #9CE4FF 100%);\r\n    border-radius: 34px;\r\n    line-height: 34px;\r\n    text-align: center;\r\n    color: #FFF;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin: 10px 5px;\r\n}\r\n\r\n.card-item-empty {\r\n    background: #CBCBCB;\r\n}\r\n\r\n.btn-cancel {\r\n    position: absolute;\r\n    top: 26px;\r\n    right: 25px;\r\n}\r\n\r\n.btn-ok {\r\n    width: 288px;\r\n    height: 45px;\r\n    background: #003F88;\r\n    border-radius: 23px;\r\n    margin: 0 auto;\r\n    line-height: 45px;\r\n    text-align: center;\r\n    color: #FFF;\r\n    margin: 0 auto;\r\n}\r\n\r\n\r\n.input-answer-box {\r\n    width: auto;\r\n    display: inline;\r\n    line-height: 30px;\r\n    text-align: left;\r\n}\r\n\r\n.input_new {\r\n    width: 80%;\r\n    height: 200px;\r\n    padding-left: 20px;\r\n}\r\n\r\n.input_new>input {\r\n    width: 50%;\r\n    margin: 50px 20px;\r\n    padding: 10px 20px;\r\n}\r\n\r\n\r\n.answer-btn {\r\n    position: fixed;\r\n    bottom: 30%;\r\n    right: 20px;\r\n    width: 20px;\r\n    /* height: 80px; */\r\n    line-height: 20px;\r\n    text-align: center;\r\n    background-color: #96cbf7;\r\n    padding: 10px 0;\r\n    border-radius: 15px;\r\n    color: #FFF;\r\n    font-size: 12px;\r\n}\r\n\r\n\r\n\r\n.box-top {\r\n    width: 90vw;\r\n    height: 50px;\r\n    text-align: left;\r\n}\r\n\r\n.right-num {\r\n    padding: 11px 0 0 30px;\r\n    font-size: 30px;\r\n    font-weight: bold;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.total-num,\r\n.report-desc {\r\n    padding: 29px 0 0 0px;\r\n    font-size: 12px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.report-desc {\r\n    padding-left: 28px;\r\n}\r\n\r\n.bottom-line {\r\n    width: 340px;\r\n    height: 1px;\r\n    margin: 13px auto;\r\n    background-color: #E4E4E4;\r\n}\r\n\r\n.second-box {\r\n    width: 320px;\r\n    height: 25px;\r\n    margin: 0 auto;\r\n    font-size: 12px;\r\n    color: #656565;\r\n}\r\n\r\n.submit-time {\r\n    width: 240px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: left;\r\n}\r\n\r\n.result {\r\n    width: 80px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: right;\r\n}\r\n\r\n.result-box {\r\n    width: 320px;\r\n    height: auto;\r\n    margin: 0 auto;\r\n    font-size: 12px;\r\n    color: #656565;\r\n    text-align: left;\r\n}\r\n\r\n.wall-report {\r\n    width: 90%;\r\n    padding-left: 10%;\r\n    height: 60px;\r\n    line-height: 60px;\r\n    border-top: 1px solid #96cbf7;\r\n    border-bottom: 1px solid #96cbf7;\r\n    margin-top: 20px;\r\n    font-weight: bold;\r\n}\r\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DetailHis.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DetailHis.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./DetailHis.vue?vue&type=template&id=19268f88&scoped=true\"\nimport script from \"./DetailHis.vue?vue&type=script&lang=js\"\nexport * from \"./DetailHis.vue?vue&type=script&lang=js\"\nimport style0 from \"./DetailHis.vue?vue&type=style&index=0&id=19268f88&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"19268f88\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"praxis\"},[_c('van-nav-bar',{attrs:{\"title\":_vm.resources.resources.name,\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_vm._l((_vm.jobList),function(item,index){return _c('div',{key:index},[_c('div',{staticClass:\"praxis-item\"},[_c('div',{staticClass:\"praxis-title\"},[_vm._v(\"题\"+_vm._s(index + 1))]),(item.type_id == 1 || item.type_id == 4)?_c('div',{staticClass:\"praxis-desc\"},[_c('div',{staticClass:\"wrap-text\",domProps:{\"innerHTML\":_vm._s(item.title)}})]):_vm._e(),(item.type_id == 1)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.optionsArray),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"answer\"},[_c('div',{staticClass:\"answer-title\",class:{\n                        'answer-title': true,\n                        'checked': item.user_answer == itemChild.label,\n                        'right-checked': item.options_answer == itemChild.label\n                    },on:{\"click\":function($event){return _vm.check_answer(index, indexChild)}}},[_vm._v(_vm._s(itemChild.label))]),_c('div',{staticClass:\"answer-desc\"},[_vm._v(_vm._s(itemChild.title))])])}),0):_vm._e(),(item.type_id == 3 || item.type_id == 6)?_c('div',{staticClass:\"praxis-info\"},[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(item.title)}}),_c('div',{staticStyle:{\"display\":\"inline\"}},[_vm._v(\"你的答案是：\"+_vm._s(item.user_answer))])]):_vm._e(),(item.type_id == 4)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.optionsArray),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"answer\"},[_c('div',{staticClass:\"answer-title\",class:{\n                        'answer-title': true,\n                        'checked': !_vm.arrayContains(itemChild.label, item.options_answer),\n                        'right-checked': _vm.arrayContains(itemChild.label, item.options_answer)\n                    },on:{\"click\":function($event){return _vm.check_answer(index, indexChild)}}},[_vm._v(_vm._s(itemChild.label))]),_c('div',{staticClass:\"answer-desc\"},[_vm._v(_vm._s(itemChild.title))])])}),0):_vm._e(),(item.type_id == 2)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.title),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"input-answer-box\"},[(!itemChild.isInput)?_c('span',[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(itemChild.text)}})]):_c('span',{staticStyle:{\"border-bottom\":\"1px solid #54a4ee\",\"padding\":\"0 10px 0 0\"}},[(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 1)?_c('span',{staticStyle:{\"color\":\"#3CC57C\"}},[_vm._v(\" \"+_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer)+\" \")]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer)?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" \"+_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer)+\" \")]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer == '')?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" 未作 \")]):_vm._e()])])}),0):_vm._e(),(item.type_id == 5)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.title),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"input-answer-box\"},[(!itemChild.isInput)?_c('span',[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(itemChild.text)}})]):_c('span',{staticStyle:{\"border-bottom\":\"1px solid #54a4ee\",\"padding\":\"0 10px 0 0\"}},[(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 1)?_c('span',{staticStyle:{\"color\":\"#3CC57C\"}},[_vm._v(_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer))]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer)?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" \"+_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer)+\" \")]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer == '')?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" 未作 \")]):_vm._e()])])}),0):_vm._e(),(item.type_id == 7)?_c('div',{staticClass:\"praxis-info\"},_vm._l((item.title),function(itemChild,indexChild){return _c('div',{key:indexChild,staticClass:\"input-answer-box\"},[(!itemChild.isInput)?_c('span',[_c('div',{staticStyle:{\"display\":\"inline\"},domProps:{\"innerHTML\":_vm._s(itemChild.text)}})]):_c('span',{staticStyle:{\"border-bottom\":\"1px solid #54a4ee\",\"padding\":\"0 10px 0 0\"}},[(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 1)?_c('span',{staticStyle:{\"color\":\"#3CC57C\"}},[_vm._v(_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer))]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer)?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" \"+_vm._s(_vm.jobAnswerList[index][itemChild.inputIndex1].answer)+\" \")]):_vm._e(),(_vm.jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && _vm.jobAnswerList[index][itemChild.inputIndex1].answer == '')?_c('span',{staticStyle:{\"color\":\"red\"}},[_vm._v(\" 未作 \")]):_vm._e()])])}),0):_vm._e(),(item.type_id == 1)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是：\"+_vm._s(item.options_answer)+\" \"),_c('br'),_vm._v(\" 你的答案是：\"+_vm._s(item.user_answer)+\" \")]):_vm._e(),(item.type_id == 2)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是： \"),_c('br'),_vm._l((item.right_answer),function(a,b){return _c('span',{key:b,staticClass:\"answer-item\"},[_vm._v(\"(\"+_vm._s(b + 1)+\")  \"+_vm._s(a)+\"   \")])}),_c('br'),_vm._v(\" 你的答案是：\"),_c('br'),_vm._l((item.user_answer),function(ua,ub){return _c('span',{key:ub,staticClass:\"answer-item\"},[_vm._v(\" (\"+_vm._s(ub + 1)+\")  \"+_vm._s(ua)+\"   \")])})],2):_vm._e(),(item.type_id == 4)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是：\"),_c('br'),_c('span',[_vm._v(\" \"+_vm._s(item.options_answer)+\" \")]),_c('br'),_vm._v(\"你的答案是：\"),_c('br'),_c('span',[_vm._v(_vm._s(item.user_answer)+\" \")])]):_vm._e(),(item.type_id == 5)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是：\"),_c('br'),_vm._l((item.options_answer),function(a,b){return _c('span',{key:b,staticClass:\"answer-item\"},[_vm._v(\" (\"+_vm._s(b + 1)+\")  \"+_vm._s(a.title)+\"   \")])}),_c('br'),_vm._v(\"你的答案是：\"),_c('br'),_vm._l((item.user_answer),function(ua,ub){return _c('span',{key:ub,staticClass:\"answer-item\"},[_vm._v(\"(\"+_vm._s(ub + 1)+\")  \"+_vm._s(ua)+\"   \")])})],2):_vm._e(),(item.type_id == 7)?_c('div',{staticClass:\"answer-option\"},[_vm._v(\"正确答案是：\"),_c('br'),_vm._l((item.options_answer),function(a,b){return _c('span',{key:b,staticClass:\"answer-item\"},[_vm._v(\" (\"+_vm._s(b + 1)+\")  \"+_vm._s(a.title)+\"   \")])}),_c('br'),_vm._v(\"你的答案是：\"),_c('br'),_vm._l((item.user_answer),function(ua,ub){return _c('span',{key:ub,staticClass:\"answer-item\"},[_vm._v(\"(\"+_vm._s(ub + 1)+\")  \"+_vm._s(ua)+\"   \")])})],2):_vm._e()])])}),_c('div',{staticClass:\"wall\"}),_c('div',{staticClass:\"answer-box\"},[_c('div',{staticClass:\"answer-btn\",on:{\"click\":_vm.change_praxis_show}},[_vm._v(\"查看原文\")])]),_c('van-action-sheet',{staticStyle:{\"background-color\":\"aliceblue\"},attrs:{\"title\":\"原文\"},model:{value:(_vm.praxis_show),callback:function ($$v) {_vm.praxis_show=$$v},expression:\"praxis_show\"}},[_c('div',{staticClass:\"article\",domProps:{\"innerHTML\":_vm._s(_vm.normalizeContent(_vm.resources.resources.content))}})]),_c('div',{staticClass:\"wall-report\"},[_vm._v(\"答题报告\")]),_c('div',{staticClass:\"answer-box\"},[_c('div',{staticClass:\"box-top\"},[_c('div',{staticClass:\"right-num\"},[_vm._v(_vm._s(_vm.answer_info.row.right_count))]),_c('div',{staticClass:\"total-num\"},[_vm._v(\"/\"+_vm._s(_vm.answer_info.row.total_count))]),_c('div',{staticClass:\"report-desc\"},[_vm._v(\"共\"+_vm._s(_vm.answer_info.row.total_count)+\"题，答对\"+_vm._s(_vm.answer_info.row.right_count)+\"题\")])]),_c('div',{staticClass:\"bottom-line\"}),_c('div',{staticClass:\"second-box\"},[_c('div',{staticClass:\"submit-time\"},[_vm._v(\"交卷时间：\"+_vm._s(_vm.jobAnswerList[0].create_time))]),_c('div',{staticClass:\"result\"},[_vm._v(\"正确率：\"+_vm._s(((_vm.answer_info.row.right_count / _vm.answer_info.row.total_count) * 100).toFixed(2))+\"% \")])])])],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"praxis\">\r\n        <van-nav-bar :title=\"resources.resources.name\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n\r\n        <div v-for=\"(item, index) in jobList\" :key=\"index\">\r\n\r\n            <div class=\"praxis-item\">\r\n                <div class=\"praxis-title\">题{{ index + 1 }}</div>\r\n                <div class=\"praxis-desc\" v-if=\"item.type_id == 1 || item.type_id == 4\">\r\n                    <div class=\"wrap-text\" v-html=\"item.title\"></div>\r\n                </div>\r\n                <div class=\"praxis-info\" v-if=\"item.type_id == 1\">\r\n                    <div class=\"answer\" v-for=\"(itemChild, indexChild) in item.optionsArray\" :key=\"indexChild\">\r\n                        <div :class=\"{\r\n                            'answer-title': true,\r\n                            'checked': item.user_answer == itemChild.label,\r\n                            'right-checked': item.options_answer == itemChild.label\r\n                        }\" class=\"answer-title\" @click=\"check_answer(index, indexChild)\">{{ itemChild.label\r\n                            }}</div>\r\n                        <div class=\"answer-desc\">{{ itemChild.title }}</div>\r\n                    </div>\r\n                </div>\r\n                <div class=\"praxis-info\" v-if=\"item.type_id == 3 || item.type_id == 6\">\r\n                    <div style=\"display: inline;\" v-html=\"item.title\"></div>\r\n                    <div style=\"display: inline;\">你的答案是：{{ item.user_answer }}</div>\r\n                </div>\r\n                <div class=\"praxis-info\" v-if=\"item.type_id == 4\">\r\n                    <div class=\"answer\" v-for=\"(itemChild, indexChild) in item.optionsArray\" :key=\"indexChild\">\r\n                        <div :class=\"{\r\n                            'answer-title': true,\r\n                            'checked': !arrayContains(itemChild.label, item.options_answer),\r\n                            'right-checked': arrayContains(itemChild.label, item.options_answer)\r\n                        }\" class=\"answer-title\" @click=\"check_answer(index, indexChild)\">{{ itemChild.label\r\n                            }}</div>\r\n                        <div class=\"answer-desc\">{{ itemChild.title }}</div>\r\n                    </div>\r\n                </div>\r\n                <div class=\"praxis-info\" v-if=\"item.type_id == 2\">\r\n                    <div class=\"input-answer-box\" v-for=\"(itemChild, indexChild) in item.title\" :key=\"indexChild\">\r\n                        <!-- 如果是文本块，直接显示 -->\r\n                        <span v-if=\"!itemChild.isInput\">\r\n                            <div style=\"display: inline;\" v-html=\"itemChild.text\"></div>\r\n                        </span>\r\n                        <!-- <span style=\"color: gold;\">{{ index }}</span>\r\n                       <span style=\"color: red;\">{{ itemChild.inputIndex1 }}</span> -->\r\n                        <span v-else style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\">\r\n                            <span style=\"color: #3CC57C;\"\r\n                                v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 1\">\r\n                                {{ jobAnswerList[index][itemChild.inputIndex1].answer }}\r\n                            </span>\r\n                            <span\r\n                                v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer\"\r\n                                style=\"color: red;\">\r\n                                {{ jobAnswerList[index][itemChild.inputIndex1].answer }}\r\n                            </span>\r\n                            <span\r\n                                v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer == ''\"\r\n                                style=\"color: red;\">\r\n                                未作\r\n                            </span>\r\n                        </span>\r\n                        <!-- 如果是输入框，动态生成\r\n                        <span style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\"\r\n                            v-if=\"item.user_answer[itemChild.inputIndex] != ''\">\r\n                            <span <span\r\n                                :style=\"{ color: itemChild.inputIndex < jobAnswerList[index].length && jobAnswerList[index][itemChild.inputIndex].is_right == 1 ? '#3CC57C' : '#FF0000' }\">{{\r\n                                    item.user_answer[itemChild.inputIndex] }}</span>\r\n                        </span>\r\n                        <span style=\"border-bottom: 1px solid #54a4ee;color: #F85353;padding: 0 10px 0 0;\" v-else>\r\n                            未做\r\n                        </span> -->\r\n                    </div>\r\n                </div>\r\n                <div class=\"praxis-info\" v-if=\"item.type_id == 5\">\r\n                    <div class=\"input-answer-box\" v-for=\"(itemChild, indexChild) in item.title\" :key=\"indexChild\">\r\n                        <!-- 如果是文本块，直接显示 -->\r\n                        <span v-if=\"!itemChild.isInput\">\r\n                            <div style=\"display: inline;\" v-html=\"itemChild.text\"></div>\r\n                        </span>\r\n                        <span v-else style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\">\r\n                            <span style=\"color: #3CC57C;\"\r\n                                v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 1\">{{\r\n                                    jobAnswerList[index][itemChild.inputIndex1].answer }}</span>\r\n                            <span\r\n                                v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer\"\r\n                                style=\"color: red;\">\r\n                                {{ jobAnswerList[index][itemChild.inputIndex1].answer }}\r\n                            </span>\r\n                            <span\r\n                                v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer == ''\"\r\n                                style=\"color: red;\">\r\n                                未作\r\n                            </span>\r\n                        </span>\r\n                        <!-- 如果是输入框，动态生成\r\n                        <span style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\"\r\n                            v-if=\"item.user_answer[itemChild.inputIndex] != ''\">\r\n                            <span\r\n                                        :style=\"{ color: itemChild.inputIndex < jobAnswerList[index].length && jobAnswerList[index][itemChild.inputIndex].is_right ? '#3CC57C' : '#FF0000' }\">\r\n                                        {{ item.user_answer[itemChild.inputIndex] }}\r\n                                    </span>\r\n                        </span>\r\n                        <span style=\"border-bottom: 1px solid #54a4ee;color: orange;padding: 0 10px 0 0;\" v-else>\r\n                            未做\r\n                        </span> -->\r\n                    </div>\r\n                </div>\r\n                <div class=\"praxis-info\" v-if=\"item.type_id == 7\">\r\n                    <div class=\"input-answer-box\" v-for=\"(itemChild, indexChild) in item.title\" :key=\"indexChild\">\r\n                        <!-- 如果是文本块，直接显示 -->\r\n                        <span v-if=\"!itemChild.isInput\">\r\n                            <div style=\"display: inline;\" v-html=\"itemChild.text\"></div>\r\n                        </span>\r\n                        <span v-else style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\">\r\n                            <span style=\"color: #3CC57C;\"\r\n                                v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 1\">{{\r\n                                    jobAnswerList[index][itemChild.inputIndex1].answer }}</span>\r\n                            <span\r\n                                v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer\"\r\n                                style=\"color: red;\">\r\n                                {{ jobAnswerList[index][itemChild.inputIndex1].answer }}\r\n                            </span>\r\n                            <span\r\n                                v-if=\"jobAnswerList[index][itemChild.inputIndex1].is_right == 0 && jobAnswerList[index][itemChild.inputIndex1].answer == ''\"\r\n                                style=\"color: red;\">\r\n                                未作\r\n                            </span>\r\n                        </span>\r\n                        <!-- 如果是输入框，动态生成\r\n                        <span style=\"border-bottom: 1px solid #54a4ee;padding: 0 10px 0 0;\"\r\n                            v-if=\"item.user_answer[itemChild.inputIndex] != ''\">\r\n                            <span\r\n                                :style=\"{ color: itemChild.inputIndex < jobAnswerList[index].length && jobAnswerList[index][itemChild.inputIndex].is_right ? '#3CC57C' : '#FF0000' }\">\r\n                                {{ item.user_answer[itemChild.inputIndex] }}\r\n                            </span>\r\n                        </span>\r\n                        <span style=\"border-bottom: 1px solid #54a4ee;color: orange;padding: 0 10px 0 0;\" v-else>\r\n                            未做\r\n                        </span> -->\r\n                    </div>\r\n                </div>\r\n                <div class=\"answer-option\" v-if=\"item.type_id == 1\">正确答案是：{{ item.options_answer }} <br>\r\n                    你的答案是：{{\r\n                        item.user_answer }}\r\n                </div>\r\n                <div class=\"answer-option\" v-if=\"item.type_id == 2\">正确答案是：\r\n                    <br>\r\n                    <span v-for=\"(a, b) in item.right_answer\" :key=\"b\" class=\"answer-item\">({{\r\n                        b + 1 }})&nbsp;&nbsp;{{\r\n                            a }}&nbsp;&nbsp;\r\n                    </span>\r\n                    <br>\r\n                    你的答案是：<br>\r\n                    <span v-for=\"(ua, ub) in item.user_answer\" :key=\"ub\" class=\"answer-item\">\r\n                        ({{ ub\r\n                            + 1 }})&nbsp;&nbsp;{{ ua\r\n                        }}&nbsp;&nbsp;\r\n                    </span>\r\n                </div>\r\n                <div class=\"answer-option\" v-if=\"item.type_id == 4\">正确答案是：<br>\r\n                    <span>\r\n                        {{ item.options_answer }}\r\n                    </span>\r\n                    <br>你的答案是：<br>\r\n                    <span>{{\r\n                        item.user_answer }}\r\n                    </span>\r\n                </div>\r\n                <div class=\"answer-option\" v-if=\"item.type_id == 5\">正确答案是：<br>\r\n                    <span v-for=\"(a, b) in item.options_answer\" :key=\"b\" class=\"answer-item\">\r\n                        ({{ b + 1 }})&nbsp;&nbsp;{{\r\n                            a.title }}&nbsp;&nbsp;\r\n                    </span><br>你的答案是：<br>\r\n                    <span v-for=\"(ua, ub) in item.user_answer\" :key=\"ub\" class=\"answer-item\">({{ ub + 1\r\n                        }})&nbsp;&nbsp;{{\r\n                            ua }}&nbsp;&nbsp;\r\n                    </span>\r\n                </div>\r\n                <div class=\"answer-option\" v-if=\"item.type_id == 7\">正确答案是：<br>\r\n                    <span v-for=\"(a, b) in item.options_answer\" :key=\"b\" class=\"answer-item\">\r\n                        ({{ b + 1 }})&nbsp;&nbsp;{{\r\n                            a.title }}&nbsp;&nbsp;\r\n                    </span><br>你的答案是：<br>\r\n                    <span v-for=\"(ua, ub) in item.user_answer\" :key=\"ub\" class=\"answer-item\">({{ ub + 1\r\n                        }})&nbsp;&nbsp;{{\r\n                            ua }}&nbsp;&nbsp;\r\n                    </span>\r\n                </div>\r\n            </div>\r\n        </div>\r\n        <div class=\"wall\"></div>\r\n        <div class=\"answer-box\">\r\n            <div class=\"answer-btn\" @click=\"change_praxis_show\">查看原文</div>\r\n        </div>\r\n        <van-action-sheet style=\"background-color: aliceblue;\" v-model=\"praxis_show\" title=\"原文\">\r\n            <div class=\"article\" v-html=\"normalizeContent(resources.resources.content)\">\r\n            </div>\r\n\r\n        </van-action-sheet>\r\n\r\n        <div class=\"wall-report\">答题报告</div>\r\n        <div class=\"answer-box\">\r\n            <div class=\"box-top\">\r\n                <div class=\"right-num\">{{ answer_info.row.right_count }}</div>\r\n                <div class=\"total-num\">/{{ answer_info.row.total_count }}</div>\r\n                <div class=\"report-desc\">共{{ answer_info.row.total_count }}题，答对{{ answer_info.row.right_count\r\n                    }}题</div>\r\n            </div>\r\n            <div class=\"bottom-line\"></div>\r\n            <div class=\"second-box\">\r\n                <div class=\"submit-time\">交卷时间：{{ jobAnswerList[0].create_time }}</div>\r\n                <div class=\"result\">正确率：{{ ((answer_info.row.right_count / answer_info.row.total_count) *\r\n                    100).toFixed(2) }}%\r\n                </div>\r\n            </div>\r\n        </div>\r\n\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getsHistory, getHistoryInfo } from '@/api/listen'\r\nimport RelList from \"../../components/RelList\";\r\nimport { decrypt } from '@/api/aes'\r\nimport { normalizeHtmlEntities } from '@/utils/html'\r\nexport default {\r\n    components: { RelList },\r\n    name: 'Detail',\r\n    data() {\r\n        return {\r\n            praxis_show: false,\r\n            show: false,\r\n            activeTitle: 0,\r\n            active: 0,\r\n            resources: [],\r\n            jobList: [],\r\n            src: [],\r\n            log_id: 0,\r\n            resources_id: 0,\r\n            percentage: 0,\r\n            has_answer: 0,\r\n            currentTime: '0:00',\r\n            audio_status: 1,\r\n            insertWordAnswers: [],\r\n            caninput: false,\r\n            this_job_id: 0,\r\n            this_inputIndex: 0,\r\n            ListAnswer: [],\r\n            answer_info: [],\r\n            jobAnswerList: [],\r\n            RelList: [],\r\n            right_bfb: 0,\r\n            globalInputIndex: 0,\r\n            resource_id: 0\r\n        }\r\n    },\r\n    methods: {\r\n        normalizeContent(content) {\r\n            return normalizeHtmlEntities(content)\r\n        },\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        arrayContains(value, array) {\r\n            return array.includes(value);\r\n        },\r\n        async getsHistory() {\r\n            try {\r\n\r\n                const response = await getsHistory({ sid: this.user_id, resource_id: this.resources_id, s_id: this.his_id })\r\n                const data = response.data\r\n                var jobList = response.data.jobList;\r\n                jobList = JSON.parse(decrypt(jobList))\r\n                jobList.forEach(item => {\r\n                    if (item.type_id !== 3 || item.type_id !== 6) {\r\n                        item.is_check = 0;\r\n                        // item.user_answer = item.user_answer.replace(/\\|$/, '');\r\n                        if (item.user_answer != null) {\r\n                            item.user_answer = item.user_answer.replace(/\\|$/, '');\r\n                        }\r\n                        if (item.optionsArray == null && item.type_id != 3) {\r\n                            item.optionsArray = JSON.parse(item.options)\r\n                            if (item.type_id == 7) {\r\n                                item.optionsArray = JSON.parse(item.options_answer)\r\n                            }\r\n                            item.right_answer = ''\r\n                            item.optionsArray.forEach(child => {\r\n                                child.is_check = 0;\r\n                                item.right_answer += child.title + '|'\r\n\r\n                            });\r\n\r\n                        }\r\n                        if (item.type_id == 5 || item.type_id == 7) {\r\n                            item.options_answer = JSON.parse(item.options_answer)\r\n                        }\r\n                        item.optionsArray.forEach(child => {\r\n                            child.is_check = 0;\r\n                        });\r\n                        if (item.type_id == 2) {\r\n                            item.right_answer = item.right_answer.replace(/\\|$/, '');\r\n                            item.title = this.parsedContent(item.title, item.id)\r\n                            item.user_answer = item.user_answer.split(/[|]/)\r\n                            item.right_answer = item.right_answer.split(/[|]/)\r\n                            //console.log(item.right_answer)\r\n                        }\r\n                        if (item.type_id == 5) {\r\n                            item.right_answer = item.right_answer.replace(/\\|$/, '');\r\n                            item.title = this.parsedContent(item.title, item.id)\r\n                            item.user_answer = item.user_answer.split(/[|]/)\r\n                            item.right_answer = item.right_answer.split(/[|]/)\r\n                            //console.log(item.right_answer)\r\n                        }\r\n                        if (item.type_id == 7) {\r\n                            item.right_answer = item.right_answer.replace(/\\|$/, '');\r\n                            item.title = this.parsedContent(item.title, item.id)\r\n                            item.user_answer = item.user_answer.split(/[|]/)\r\n                            item.right_answer = item.right_answer.split(/[|]/)\r\n                            //console.log(item)\r\n                        }\r\n                        if (item.type_id == 4) {\r\n                            item.right_answer = item.right_answer.replace(/\\|$/, '');\r\n\r\n                        }\r\n                    }\r\n                });\r\n\r\n                this.resources = data\r\n                //console.log(this.resources)\r\n                this.jobList = jobList\r\n                this.src = data.resources.file_path\r\n                this.getHistoryInfo()\r\n\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n\r\n        async getHistoryInfo() {\r\n            try {\r\n\r\n                const response = await getHistoryInfo({ sid: this.user_id, resource_id: this.resources_id, s_id: this.his_id })\r\n                const data = response.data\r\n                this.answer_info = data\r\n                const jobList = this.jobList;\r\n                const jobAnswerList = data.array;\r\n                // 使用 Map 来存储 jobAnswerList\r\n\r\n                //console.log('工作列表:', jobList);\r\n                //console.log('答案列表:', jobAnswerList);\r\n\r\n                const answerMap = new Map();\r\n                jobAnswerList.forEach(v => {\r\n                    if (!answerMap.has(v.job_id)) {\r\n                        answerMap.set(v.job_id, []);\r\n                    }\r\n                    answerMap.get(v.job_id).push(v);\r\n                });\r\n\r\n                const new_answer = jobList.map(job => {\r\n                    const answers = answerMap.get(job.id);\r\n                    //console.log(`job.id=${job.id}, 对应的答案:`, answers);\r\n                    return answers || [];\r\n                });\r\n\r\n                //console.log('匹配后的答案:', new_answer);\r\n\r\n                this.jobAnswerList = new_answer;\r\n                this.jobAnswerList1 = data.array;\r\n                // 确保更新视图\r\n                this.$forceUpdate();\r\n\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async check_answer(itemIndex, indexChild) {\r\n            var jobList = this.jobList\r\n            //console.log(itemIndex)\r\n            jobList.forEach((val, key) => {\r\n                if (key == itemIndex) {\r\n                    val.is_check = 1;\r\n                    val.optionsArray.forEach((child, index) => {\r\n                        if (indexChild == index) {\r\n                            child.is_check = 1\r\n                        } else {\r\n                            child.is_check = 0\r\n                        }\r\n                    });\r\n                }\r\n            })\r\n            var has_answer = 0\r\n            jobList.forEach(val => {\r\n                val.optionsArray.forEach(child => {\r\n                    if (child.is_check == 1) {\r\n                        has_answer++\r\n                    }\r\n                });\r\n\r\n            })\r\n            this.jobList = jobList\r\n            this.has_answer = has_answer\r\n        },\r\n        async change_card() {\r\n            this.show = !this.show\r\n            //console.log(this.jobList)\r\n        },\r\n        async audioPlay() {\r\n            this.$refs.audioPlayer.play();\r\n        },\r\n        async audioPause() {\r\n            this.$refs.audioPlayer.pause();\r\n            this.audio_status = 1\r\n        },\r\n        updateTime(event) {\r\n            const audio = event.target;\r\n            this.currentTime = this.formatTime(audio.currentTime);\r\n            //console.log(audio.currentTime)\r\n            //console.log(audio.duration)\r\n            this.percentage = Math.floor((audio.currentTime / audio.duration) * 100);\r\n        },\r\n        loadMetadata(event) {\r\n            const audio = event.target;\r\n            this.duration = this.formatTime(audio.duration);\r\n        },\r\n        canPlay() {\r\n            //console.log('Audio can play through.');\r\n        },\r\n        formatTime(seconds) {\r\n            const m = Math.floor(seconds / 60) % 60;\r\n            const s = Math.floor(seconds) % 60;\r\n            return `${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;\r\n        },\r\n        // 解析字符串，生成文本和输入框的块数组\r\n        // 解析字符串，生成文本和输入框的块数组\r\n        parsedContent(str, index_id) {\r\n            const chunks = [];\r\n            let lastIndex = 0;\r\n\r\n            // 替换特定格式的占位符\r\n            str = str.replace(/__（/g, '_(');\r\n            str = str.replace(/）__/g, ')_');\r\n\r\n            // 匹配占位符\r\n            const regex = /_\\((\\d+)\\)_+/g;\r\n            let match;\r\n\r\n            // // // 移除 HTML 标签，但保留 <br>\r\n            str = str.replace(/<\\/?[^>]+(>|$)/g, (match) => {\r\n                if (match.startsWith('<br')) return '<br>';\r\n                if (match.startsWith('<em')) return '<em>';\r\n                if (match.startsWith('</em')) return '</em>';\r\n                if (match.startsWith('</strong')) return '</strong>';\r\n                if (match.startsWith('<strong')) return '<strong>';\r\n                if (match.startsWith('<table')) return '<table>';\r\n                if (match.startsWith('</table')) return '</table>';\r\n                if (match.startsWith('<tbody')) return '<tbody>';\r\n                if (match.startsWith('</tbody')) return '</tbody>';\r\n                if (match.startsWith('<th')) return '<th>';\r\n                if (match.startsWith('</th')) return '</th>';\r\n                if (match.startsWith('<tr')) return '<tr>';\r\n                if (match.startsWith('</tr')) return '</tr>';\r\n                if (match.startsWith('<td')) return '<td>';\r\n                if (match.startsWith('</td')) return '</td>';\r\n                // if (match.startsWith('<p')) return '<p>';\r\n                if (match.startsWith('</p')) return '</p>';\r\n                if (match.startsWith('<img')) return match.replace(/<img/, '<img style=\"width: 120%;\"');\r\n                return '';\r\n            });\r\n            ////console.log(str)\r\n            // 逐个匹配字符串中的填空占位符\r\n            var inputIndex1 = 0\r\n            while ((match = regex.exec(str)) !== null) {\r\n                const inputIndex = this.globalInputIndex;\r\n\r\n                // 处理占位符之前的文本部分\r\n                if (match.index > lastIndex) {\r\n                    const textChunk = str.slice(lastIndex, match.index);\r\n                    chunks.push({ isInput: false, text: textChunk });\r\n                }\r\n\r\n                // 添加输入框\r\n                chunks.push({ isInput: true, inputIndex, inputIndex1 });\r\n                inputIndex1++\r\n                lastIndex = regex.lastIndex;\r\n                this.globalInputIndex++; // 累加 inputIndex\r\n            }\r\n\r\n            // 处理末尾的文本部分\r\n            if (lastIndex < str.length) {\r\n                const textChunk = str.slice(lastIndex);\r\n                chunks.push({ isInput: false, text: textChunk });\r\n            }\r\n\r\n            // 初始化对应的 insertWordAnswers 数组\r\n            if (!this.insertWordAnswers[index_id]) {\r\n                this.$set(this.insertWordAnswers, index_id, []);\r\n            }\r\n            //console.log(\"处理过的字符\")\r\n            //console.log(chunks)\r\n            return chunks;\r\n        },\r\n        async change_praxis_show() {\r\n            this.praxis_show = !this.praxis_show;\r\n        },\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        // 在组件挂载后立即获取任务数据\r\n        this.his_id = this.$route.query.his_id;\r\n        this.resources_id = this.$route.query.resource_id;\r\n        this.user_id = this.$route.query.user_id;\r\n        this.getsHistory()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n.praxis-item {\r\n    width: 90%;\r\n    height: auto;\r\n    margin: 0 auto;\r\n    text-align: left;\r\n}\r\n\r\n.article {\r\n    width: 80vw;\r\n    height: auto;\r\n    margin: 8px auto;\r\n    padding-bottom: 60px;\r\n    margin-top: 40px;\r\n    text-align: justify;\r\n}\r\n\r\n.praxis {\r\n    padding-bottom: 200px;\r\n    text-align: justify;\r\n}\r\n\r\n.praxis-title {\r\n    font-size: 14px;\r\n    color: #030303;\r\n    padding: 35px 0 10px 0;\r\n    /* width: 50px; */\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: justify;\r\n}\r\n\r\n.praxis-desc {\r\n    font-size: 14px;\r\n    width: 90%;\r\n    height: auto;\r\n    padding: 10px 0;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    font-weight: normal;\r\n}\r\n\r\n.praxis-info {\r\n    width: 90%;\r\n    height: auto;\r\n    background: #FFFFFF;\r\n    white-space: normal;\r\n    /* 正常的空白处理，允许换行 */\r\n    word-break: keep-all;\r\n    /* 确保单词不被截断 */\r\n    overflow-wrap: anywhere;\r\n    /* 单词太长时允许换行，不会强制截断 */\r\n    text-align: justify;\r\n}\r\n\r\n.answer-option {\r\n    width: 90%;\r\n    height: auto;\r\n    background: #FFFFFF;\r\n    white-space: normal;\r\n    /* 正常的空白处理，允许换行 */\r\n    word-break: keep-all;\r\n    /* 确保单词不被截断 */\r\n    overflow-wrap: anywhere;\r\n    /* 单词太长时允许换行，不会强制截断 */\r\n}\r\n\r\n.answer {\r\n    width: 100%;\r\n    /* height: 55px; */\r\n    height: auto;\r\n    margin: 20px 0;\r\n    display: flex;\r\n    justify-content: center;\r\n    align-items: center;\r\n}\r\n\r\n.answer-title {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 35px;\r\n    height: 35px;\r\n    background-color: lightgray;\r\n    border-radius: 35px;\r\n    line-height: 35px;\r\n    text-align: center;\r\n}\r\n\r\n/* .checked {\r\n    background: linear-gradient(180deg, #4499EE 0%, #9CE4FF 100%);\r\n} */\r\n\r\n.checked {\r\n    background: #F85353;\r\n}\r\n\r\n.right-checked {\r\n    background: #3CC57C;\r\n}\r\n\r\n.answer-desc {\r\n    padding-left: 10px;\r\n    font-size: 14px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 300px;\r\n}\r\n\r\n.wrap-text {\r\n    width: 90%;\r\n    height: auto;\r\n    margin: 0 auto;\r\n    text-align: left;\r\n    padding: 10px 0;\r\n}\r\n\r\n.praxis-bottom {\r\n    width: 100%;\r\n    height: 56px;\r\n    background: #FFFFFF;\r\n    box-shadow: 0px -2px 6px 1px rgba(80, 143, 206, 0.1);\r\n    border-radius: 0px;\r\n    position: fixed;\r\n    bottom: 0;\r\n}\r\n\r\n.new-audio {\r\n    width: 50px;\r\n    height: 50px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-left: 15px;\r\n}\r\n\r\n.start-img {\r\n    width: 50px;\r\n    height: 50px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n\r\n}\r\n\r\n.audio-info {\r\n    width: 300px;\r\n    height: 50px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 50px;\r\n    text-align: left;\r\n    color: #979797;\r\n    font-size: 12px;\r\n}\r\n\r\n.progress {\r\n    width: 225px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-top: 22px;\r\n}\r\n\r\n.now-time {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 50px;\r\n}\r\n\r\n.answer-has {\r\n    width: 325px;\r\n    height: 60px;\r\n    padding-left: 25x;\r\n}\r\n\r\n.jindu {\r\n    width: 205px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 60px;\r\n    font-size: 14px;\r\n    color: #979797;\r\n    /* text-align: left; */\r\n\r\n}\r\n\r\n.btn-ok-cn {\r\n    margin-top: 12px;\r\n    width: 118px;\r\n    height: 36px;\r\n    line-height: 36px;\r\n    background: #003F88;\r\n    border-radius: 23px;\r\n    /* margin: 0 auto; */\r\n    text-align: center;\r\n    color: #FFF;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.card-title {\r\n    width: 100vw;\r\n    height: 75px;\r\n    text-align: center;\r\n    line-height: 75px;\r\n    border-bottom: #E4E4E4 1px solid;\r\n    margin: 0 auto;\r\n    color: #000000;\r\n    font-weight: bold;\r\n    font-size: 16px;\r\n}\r\n\r\n.main-answer-card {\r\n    padding: 30px 40px 80px 40px;\r\n    text-align: left;\r\n}\r\n\r\n.card-item {\r\n    width: 34px;\r\n    height: 34px;\r\n    background: linear-gradient(180deg, #4499EE 0%, #9CE4FF 100%);\r\n    border-radius: 34px;\r\n    line-height: 34px;\r\n    text-align: center;\r\n    color: #FFF;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin: 10px 5px;\r\n}\r\n\r\n.card-item-empty {\r\n    background: #CBCBCB;\r\n}\r\n\r\n.btn-cancel {\r\n    position: absolute;\r\n    top: 26px;\r\n    right: 25px;\r\n}\r\n\r\n.btn-ok {\r\n    width: 288px;\r\n    height: 45px;\r\n    background: #003F88;\r\n    border-radius: 23px;\r\n    margin: 0 auto;\r\n    line-height: 45px;\r\n    text-align: center;\r\n    color: #FFF;\r\n    margin: 0 auto;\r\n}\r\n\r\n\r\n.input-answer-box {\r\n    width: auto;\r\n    display: inline;\r\n    line-height: 30px;\r\n    text-align: left;\r\n}\r\n\r\n.input_new {\r\n    width: 80%;\r\n    height: 200px;\r\n    padding-left: 20px;\r\n}\r\n\r\n.input_new>input {\r\n    width: 50%;\r\n    margin: 50px 20px;\r\n    padding: 10px 20px;\r\n}\r\n\r\n\r\n.answer-btn {\r\n    position: fixed;\r\n    bottom: 30%;\r\n    right: 20px;\r\n    width: 20px;\r\n    /* height: 80px; */\r\n    line-height: 20px;\r\n    text-align: center;\r\n    background-color: #96cbf7;\r\n    padding: 10px 0;\r\n    border-radius: 15px;\r\n    color: #FFF;\r\n    font-size: 12px;\r\n}\r\n\r\n\r\n\r\n.box-top {\r\n    width: 90vw;\r\n    height: 50px;\r\n    text-align: left;\r\n}\r\n\r\n.right-num {\r\n    padding: 11px 0 0 30px;\r\n    font-size: 30px;\r\n    font-weight: bold;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.total-num,\r\n.report-desc {\r\n    padding: 29px 0 0 0px;\r\n    font-size: 12px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.report-desc {\r\n    padding-left: 28px;\r\n}\r\n\r\n.bottom-line {\r\n    width: 340px;\r\n    height: 1px;\r\n    margin: 13px auto;\r\n    background-color: #E4E4E4;\r\n}\r\n\r\n.second-box {\r\n    width: 320px;\r\n    height: 25px;\r\n    margin: 0 auto;\r\n    font-size: 12px;\r\n    color: #656565;\r\n}\r\n\r\n.submit-time {\r\n    width: 240px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: left;\r\n}\r\n\r\n.result {\r\n    width: 80px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: right;\r\n}\r\n\r\n.result-box {\r\n    width: 320px;\r\n    height: auto;\r\n    margin: 0 auto;\r\n    font-size: 12px;\r\n    color: #656565;\r\n    text-align: left;\r\n}\r\n\r\n.wall-report {\r\n    width: 90%;\r\n    padding-left: 10%;\r\n    height: 60px;\r\n    line-height: 60px;\r\n    border-top: 1px solid #96cbf7;\r\n    border-bottom: 1px solid #96cbf7;\r\n    margin-top: 20px;\r\n    font-weight: bold;\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DetailHisPre.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DetailHisPre.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./DetailHisPre.vue?vue&type=template&id=cbb2caae&scoped=true\"\nimport script from \"./DetailHisPre.vue?vue&type=script&lang=js\"\nexport * from \"./DetailHisPre.vue?vue&type=script&lang=js\"\nimport style0 from \"./DetailHisPre.vue?vue&type=style&index=0&id=cbb2caae&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"cbb2caae\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"report\"},[_c('div',{staticClass:\"main-top\"},[_c('van-nav-bar',{attrs:{\"title\":\"书海遨游\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}})],1),_c('div',{staticClass:\"answer-box\"},[_c('div',{staticClass:\"box-top\"},[_c('div',{staticClass:\"right-num\"},[_vm._v(_vm._s(_vm.answer_info.rightCountTotal))]),_c('div',{staticClass:\"total-num\"},[_vm._v(\"/\"+_vm._s(_vm.answer_info.countTotal))]),_c('div',{staticClass:\"report-desc\"},[_vm._v(\"共\"+_vm._s(_vm.answer_info.countTotal)+\"题，答对\"+_vm._s(_vm.answer_info.rightCountTotal)+\"题\")])]),_c('div',{staticClass:\"bottom-line\"}),_c('div',{staticClass:\"second-box\"},[_c('div',{staticClass:\"submit-time\"},[_vm._v(\"交卷时间：\"+_vm._s(_vm.jobAnswerList[0].create_time))]),_c('div',{staticClass:\"result\"},[_vm._v(\"正确率：\"+_vm._s(_vm.right_bfb)+\"%\")])]),_c('div',{staticClass:\"result-box\"},_vm._l((_vm.jobAnswerList),function(item,index){return _c('div',{key:index,staticClass:\"result-item\",class:{ 'result-item-wrong': item.is_right == 0 },attrs:{\"data-index\":item},on:{\"click\":function($event){return _vm.to_detail(item, index)}}},[_vm._v(\" \"+_vm._s(index + 1)+\" \")])}),0),_vm._m(0)]),_c('RelList',{attrs:{\"resource_id\":_vm.resource_id}})],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"box-bottom\"},[_c('div',{staticClass:\"wrong-desc\"},[_vm._v(\"点击题目去看解析\")]),_c('div',{staticClass:\"lable-desc\"},[_c('div',{staticClass:\"cicle\"}),_c('div',{staticClass:\"desc\"},[_vm._v(\"未答\")])]),_c('div',{staticClass:\"lable-desc\"},[_c('div',{staticClass:\"cicle\",staticStyle:{\"background-color\":\"#3CC57C\"}}),_c('div',{staticClass:\"desc\"},[_vm._v(\"答对\")])]),_c('div',{staticClass:\"lable-desc\"},[_c('div',{staticClass:\"cicle\",staticStyle:{\"background-color\":\"#F85353\"}}),_c('div',{staticClass:\"desc\"},[_vm._v(\"答错\")])])])\n}]\n\nexport { render, staticRenderFns }","<template>\r\n  <div class=\"report\">\r\n    <div class=\"main-top\">\r\n      <van-nav-bar title=\"书海遨游\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n    </div>\r\n\r\n    <div class=\"answer-box\">\r\n      <div class=\"box-top\">\r\n        <div class=\"right-num\">{{ answer_info.rightCountTotal }}</div>\r\n        <div class=\"total-num\">/{{ answer_info.countTotal }}</div>\r\n        <div class=\"report-desc\">共{{ answer_info.countTotal }}题，答对{{ answer_info.rightCountTotal\r\n          }}题</div>\r\n      </div>\r\n      <div class=\"bottom-line\"></div>\r\n      <div class=\"second-box\">\r\n        <div class=\"submit-time\">交卷时间：{{ jobAnswerList[0].create_time }}</div>\r\n        <div class=\"result\">正确率：{{ right_bfb }}%</div>\r\n      </div>\r\n      <div class=\"result-box\">\r\n        <div :class=\"{ 'result-item-wrong': item.is_right == 0 }\" class=\"result-item\"\r\n          v-for=\"(item, index) in jobAnswerList\" :key=\"index\" :data-index=\"item\" @click=\"to_detail(item, index)\">\r\n          {{ index + 1 }}\r\n        </div>\r\n      </div>\r\n      <div class=\"box-bottom\">\r\n        <div class=\"wrong-desc\">点击题目去看解析</div>\r\n        <div class=\"lable-desc\">\r\n          <div class=\"cicle\"></div>\r\n          <div class=\"desc\">未答</div>\r\n        </div>\r\n        <div class=\"lable-desc\">\r\n          <div class=\"cicle\" style=\"background-color: #3CC57C;\"></div>\r\n          <div class=\"desc\">答对</div>\r\n        </div>\r\n        <div class=\"lable-desc\">\r\n          <div class=\"cicle\" style=\"background-color: #F85353;\"></div>\r\n          <div class=\"desc\">答错</div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n    <RelList :resource_id=\"resource_id\" />\r\n  </div>\r\n</template>\r\n<script>\r\nimport { jobAnswer } from '@/api/listen'\r\nimport RelList from \"../../components/RelList\";\r\nexport default {\r\n  components: { RelList },\r\n  name: 'Report',\r\n  data() {\r\n    return {\r\n      answer_info: [],\r\n      jobAnswerList: [],\r\n      RelList: [],\r\n      right_bfb: 0,\r\n      resource_id: 0\r\n    }\r\n  },\r\n  methods: {\r\n    async onClickLeft() {\r\n      history.back()\r\n    },\r\n    async getJobAnswer() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await jobAnswer({ sid: user.sid, resource_id: this.resource_id })\r\n          const data = response.data\r\n          var countTotal = data.countTotal\r\n          var rightCountTotal = data.rightCountTotal\r\n          var right_bfb = (rightCountTotal / countTotal) * 100\r\n          right_bfb = right_bfb.toFixed(0)\r\n          this.answer_info = data\r\n          this.jobAnswerList = data.jobAnswerList\r\n          this.right_bfb = right_bfb\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n\r\n    async to_detail(item, index) {\r\n      this.$router.push({ name: 'ReadDetail', query: { resource_id: item.resource_id, job_id: index } })\r\n    }\r\n  },\r\n  mounted() {\r\n    // 在组件挂载后立即获取任务数据\r\n    this.resource_id = this.$route.query.resource_id;\r\n    this.getJobAnswer()\r\n  }\r\n}\r\n</script>\r\n<style scoped>\r\n.report {\r\n  width: 100vw;\r\n  height: auto;\r\n  background: linear-gradient(to bottom, #E2F2FF, #FFF);\r\n}\r\n\r\n.main-top {\r\n  width: 100vw;\r\n  height: auto;\r\n  text-align: left;\r\n}\r\n\r\n.reback {\r\n  padding: 20px 0 0 12px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.pagetitle {\r\n  padding: 20px 0 0 150px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  font-size: 16px;\r\n  color: #030303;\r\n}\r\n\r\n.answer-box {\r\n  width: 90vw;\r\n  height: auto;\r\n  background: #FFFFFF;\r\n  box-shadow: 0 3px 6px 1px rgba(0, 0, 0, 0.05);\r\n  border-radius: 20px;\r\n  margin: 30px auto;\r\n  padding: 20px 0;\r\n}\r\n\r\n.box-top {\r\n  width: 90vw;\r\n  height: 50px;\r\n  text-align: left;\r\n}\r\n\r\n.right-num {\r\n  padding: 11px 0 0 30px;\r\n  font-size: 30px;\r\n  font-weight: bold;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.total-num,\r\n.report-desc {\r\n  padding: 29px 0 0 0px;\r\n  font-size: 12px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.report-desc {\r\n  padding-left: 28px;\r\n}\r\n\r\n.bottom-line {\r\n  width: 340px;\r\n  height: 1px;\r\n  margin: 13px auto;\r\n  background-color: #E4E4E4;\r\n}\r\n\r\n.second-box {\r\n  width: 320px;\r\n  height: 25px;\r\n  margin: 0 auto;\r\n  font-size: 12px;\r\n  color: #656565;\r\n}\r\n\r\n.submit-time {\r\n  width: 240px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  text-align: left;\r\n}\r\n\r\n.result {\r\n  width: 80px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  text-align: right;\r\n}\r\n\r\n.result-box {\r\n  width: 320px;\r\n  height: auto;\r\n  margin: 0 auto;\r\n  font-size: 12px;\r\n  color: #656565;\r\n  text-align: left;\r\n}\r\n\r\n.result-item,\r\n.result-item-wrong {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 34px;\r\n  height: 34px;\r\n  border-radius: 34px;\r\n  margin: 5px;\r\n  background-color: #3CC57C;\r\n  line-height: 34px;\r\n  text-align: center;\r\n  font-size: 14px;\r\n  color: #FFF;\r\n  font-weight: 400;\r\n}\r\n\r\n.result-item-wrong {\r\n  background-color: #F85353;\r\n}\r\n\r\n.box-bottom {\r\n  width: 320px;\r\n  height: auto;\r\n  margin: 12px auto;\r\n  font-size: 12px;\r\n  color: #656565;\r\n  padding-bottom: 40rpx;\r\n  text-align: left;\r\n}\r\n\r\n.wrong-desc {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  padding-right: 30px;\r\n}\r\n\r\n.lable-desc {\r\n  width: 60px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.cicle {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 12px;\r\n  height: 12px;\r\n  background-color: #CBCBCB;\r\n  border-radius: 12px;\r\n}\r\n\r\n.desc {\r\n  /* width: 12px; */\r\n  color: #656565;\r\n  font-size: 10px;\r\n  line-height: 15px;\r\n  padding: 0 15px 0 5px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.about-send {\r\n  width: 90vw;\r\n  height: auto;\r\n  margin: 28px auto 0 auto;\r\n  text-align: left;\r\n}\r\n\r\n.title {\r\n  font-size: 16px;\r\n  padding-bottom: 7px;\r\n}\r\n\r\n.about-item {\r\n  width: 100%;\r\n  height: 85px;\r\n  background: #FFFFFF;\r\n  box-shadow: 0px 2px 10px 1px rgba(80, 143, 206, 0.1);\r\n  border-radius: 20px;\r\n  margin-bottom: 10px;\r\n}\r\n\r\n.item-cover {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 58px;\r\n  height: 58px;\r\n  border-radius: 10px;\r\n  margin: 14px 6px 0 12px;\r\n}\r\n\r\n.item-info {\r\n  width: 200px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  padding-top: 21px;\r\n}\r\n\r\n.info-title {\r\n  font-size: 14px;\r\n  font-weight: bold;\r\n  height: 20px;\r\n  overflow: hidden;\r\n  text-overflow: ellipsis;\r\n  white-space: nowrap;\r\n}\r\n\r\n.info-time {\r\n  color: #979797;\r\n  font-size: 12px;\r\n  padding-top: 15px;\r\n}\r\n\r\n.con-to-study {\r\n  width: 60px;\r\n  height: 85px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  line-height: 85px;\r\n  font-size: 12px;\r\n  color: #003F88;\r\n  text-align: center;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Report.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Report.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Report.vue?vue&type=template&id=440823f6&scoped=true\"\nimport script from \"./Report.vue?vue&type=script&lang=js\"\nexport * from \"./Report.vue?vue&type=script&lang=js\"\nimport style0 from \"./Report.vue?vue&type=style&index=0&id=440823f6&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"440823f6\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"index\"},[_c('van-nav-bar',{attrs:{\"title\":\"笔下生花\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticClass:\"notice\"},[_c('img',{staticClass:\"notice-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/notice.png\",\"mode\":\"widthFix\"}}),_c('div',{staticClass:\"notice-title\"},[_c('van-notice-bar',{key:_vm.noticeTitle,attrs:{\"background\":\"#FFF\",\"color\":\"#000\",\"scrollable\":true,\"text\":_vm.noticeTitle}})],1),_c('div',{staticClass:\"more-info\",on:{\"click\":_vm.toHomeNoticeList}},[_vm._v(\" 全部 \")]),_c('div',{staticClass:\"more-icon\"},[_c('van-icon',{attrs:{\"name\":\"arrow\",\"color\":\"#606060\"}})],1)]),(_vm.writeTeacherList.length > 0)?_c('div',{staticClass:\"head\"},[_c('div',{staticClass:\"content-item\"},[_c('div',{staticClass:\"item-top\"},[_c('div',{staticClass:\"item-title\"},[_vm._v(\"写作指导\")]),_c('div',{staticClass:\"item-all\",on:{\"click\":_vm.to_list}},[_vm._v(\" 全部 \"),_c('van-icon',{attrs:{\"name\":\"arrow\",\"color\":\"#606060\"}})],1)]),_c('div',{staticClass:\"xzzd\"},[_c('scroll-div',{staticClass:\"scroll-div\",staticStyle:{\"width\":\"100%\"},attrs:{\"scroll-x\":\"true\",\"bindscroll\":\"scroll\"}},[_c('van-swipe',{attrs:{\"loop\":false,\"show-indicators\":false,\"width\":130}},_vm._l((_vm.writeTeacherList),function(item,index){return _c('van-swipe-item',{key:index},[_c('div',{staticClass:\"scroll-div-item\"},[_c('div',{staticClass:\"user-pic\"},[_c('img',{staticClass:\"tea-img\",attrs:{\"src\":item.avatar || 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png'}})]),_c('div',{staticClass:\"tea-name\",attrs:{\"data-item\":index}},[_vm._v(\" \"+_vm._s(item.name)+\" \")]),_c('div',{staticClass:\"tea-lable\"},_vm._l((item.labels),function(val,key){return _c('span',{key:key},[(key < 3)?_c('div',{staticClass:\"lable-item1\"},[_vm._v(\" \"+_vm._s(val)+\" \")]):_vm._e(),(key == 3)?_c('br'):_vm._e(),(key > 2)?_c('div',{staticClass:\"lable-item1\"},[_vm._v(\" \"+_vm._s(val)+\" \")]):_vm._e()])}),0),(item.orderNumTotal>0)?_c('div',{staticClass:\"yuyue\",on:{\"click\":function($event){return _vm.to_submit(item)}}},[_vm._v(\" 预约 \")]):_c('div',{staticClass:\"yuyue yuyue-no\",on:{\"click\":function($event){return _vm.to_submit(item)}}},[_vm._v(\" 预约已满 \")])])])}),1)],1)],1)])]):_vm._e(),(_vm.MyNewFeedBack.length > 0)?_c('div',{staticClass:\"content-item\"},[_c('div',{staticClass:\"item-top\"},[_c('div',{staticClass:\"item-title\"},[_vm._v(\"最新留言\")]),_c('div',{staticClass:\"item-all\",on:{\"click\":_vm.to_notice_list}},[_vm._v(\" 全部 \"),_c('van-icon',{attrs:{\"name\":\"arrow\",\"color\":\"#606060\"}})],1)]),_c('div',{staticClass:\"callback-tea\"},[(_vm.MyNewFeedBack.reply_row != null)?_c('image',{staticClass:\"callback-tea-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png\",\"mode\":\"widthFix\"}}):_vm._e(),(_vm.MyNewFeedBack.reply_row != null)?_c('div',{staticClass:\"parent-box\"},[_c('div',{staticClass:\"callback-tea-name\"},[_vm._v(_vm._s(_vm.MyNewFeedBack.reply_row.name))]),_c('div',{staticClass:\"callback-tea-content\"},[_vm._v(\"回复了你的留言 \"+_vm._s(_vm.MyNewFeedBack.reply_row.create_time)+\" \"),_c('text',{staticStyle:{\"color\":\"#000\"}},[_vm._v(\"回复\")])]),_c('div',{staticClass:\"callback-msg\"},[_vm._v(_vm._s(_vm.MyNewFeedBack.reply_row.content))])]):_vm._e(),_c('div',{staticClass:\"stu-info\"},[_c('div',{staticClass:\"stu-lable\"}),_c('div',{staticClass:\"stu-ques\"},[_vm._v(_vm._s(_vm.MyNewFeedBack.row.content))])])])]):_vm._e(),_c('div',{staticClass:\"content-item\"},[_vm._m(0),_c('div',{staticClass:\"ai-item\",on:{\"click\":_vm.toNewIndex}},[_c('div',{staticClass:\"ai-item-lable\"},[_vm._v(\"分主题，等级匹配\")]),_c('div',{staticClass:\"ai-item-title\"},[_vm._v(\"主题写作\")]),_c('div',{staticClass:\"ai-item-update\"},[_vm._v(\"03月30日更新\")])]),_c('div',{staticClass:\"ai-item1\",on:{\"click\":_vm.InterActive}},[_c('div',{staticClass:\"ai-item-lable\"},[_vm._v(\"AI辩题，互动性强\")]),_c('div',{staticClass:\"ai-item-title\"},[_vm._v(\"互动式议论文\")]),_c('div',{staticClass:\"ai-item-update\"},[_vm._v(\"暂无更新\")])]),_c('div',{staticClass:\"ai-item2\",on:{\"click\":_vm.InteractiveDiscussion}},[_c('div',{staticClass:\"ai-item-lable\"},[_vm._v(\"AI互动，趣味性强\")]),_c('div',{staticClass:\"ai-item-title\"},[_vm._v(\"互动式记叙文\")]),_c('div',{staticClass:\"ai-item-update\"},[_vm._v(\"暂无更新\")])])]),_c('WriteAi',{attrs:{\"allow\":\"microphone\"}}),_c('div',{staticClass:\"answer-box\"},[_c('div',{staticClass:\"answer-btn\",on:{\"click\":_vm.toAiHistory}},[_vm._v(\"AI写作历史\")])])],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"item-top\"},[_c('div',{staticClass:\"item-title\"},[_vm._v(\"AI写作辅导\")])])\n}]\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('span',{staticClass:\"reback\",on:{\"click\":_vm.to_dingtalk}},[_vm._v(\"问题反馈\")]),(!_vm.is_show_ai)?_c('img',{staticClass:\"wyt\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\",\"mode\":\"widthFix\"},on:{\"click\":_vm.change_show_ai}}):_vm._e(),(_vm.is_show_ai)?_c('div',{staticClass:\"check-main-ai\"},[_c('div',{staticClass:\"guanbi\",on:{\"click\":_vm.change_show_ai}},[_c('van-icon',{attrs:{\"name\":\"cross\",\"color\":\"#606060\"}})],1),_c('img',{staticClass:\"wyt-say\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\",\"mode\":\"widthFix\"}}),_c('div',{staticClass:\"say-text\"},[_vm._v(\"嗨，你好，试试慧学外语这些写作主题\")]),_c('div',{staticClass:\"fast-parent\"},_vm._l((_vm.listData),function(item,index){return _c('div',{key:index,staticClass:\"fast-box\",on:{\"click\":function($event){return _vm.chat(item)}}},[_c('span',[_vm._v(\" \"+_vm._s(item.name)+\" \")])])}),0),_c('div',{staticClass:\"input-box\"},[_c('button',{staticClass:\"button-default\",style:(_vm.speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''),on:{\"click\":_vm.to_chat}},[_vm._v(\"去对话\")])])]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- src/layouts/TabBarLayout.vue -->\r\n\r\n<template>\r\n    <div>\r\n        <!-- 初始状态下显示的图片，点击可切换显示 -->\r\n        <span class=\"reback\" @click=\"to_dingtalk\">问题反馈</span>\r\n        <img v-if=\"!is_show_ai\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\"\r\n            mode=\"widthFix\" @click=\"change_show_ai\" class=\"wyt\" />\r\n        <!-- 显示 AI 伴学功能的主要界面 -->\r\n        <div class=\"check-main-ai\" v-if=\"is_show_ai\">\r\n            <div class=\"guanbi\" @click=\"change_show_ai\">\r\n                <van-icon name=\"cross\" color=\"#606060\" />\r\n            </div>\r\n            <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\" mode=\"widthFix\"\r\n                class=\"wyt-say\" />\r\n            <div class=\"say-text\">嗨，你好，试试慧学外语这些写作主题</div>\r\n            <!-- 功能选项按钮 -->\r\n            <div class=\"fast-parent\">\r\n                <div class=\"fast-box\" v-for=\"(item, index) in listData\" :key=\"index\" @click=\"chat(item)\">\r\n                    <span>\r\n                        {{ item.name }}\r\n                    </span>\r\n                </div>\r\n            </div>\r\n            <div class=\"input-box\">\r\n                <button class=\"button-default\"\r\n                    :style=\"speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''\"\r\n                    @click=\"to_chat\">去对话</button>\r\n            </div>\r\n            <!-- 输入框和录音按钮 -->\r\n            <!-- <div class=\"input-box\" v-show=\"is_speak == 1\">\r\n                <input class=\"question\" maxlength=\"-1\" v-model=\"stu_content\" @input=\"inputText\"\r\n                    placeholder-class=\"placeholder\" :placeholder=\"stu_placeholder\" type=\"text\" />\r\n            </div>\r\n            <div class=\"input-box\" v-show=\"is_speak != 1\">\r\n                <button class=\"button-default\"\r\n                    :style=\"speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''\"\r\n                    @touchstart=\"recStart\" @touchend=\"recStop\">{{ stu_placeholder }}</button>\r\n            </div> -->\r\n            <!-- 发送信息和切换语音输入的按钮 -->\r\n            <!-- <div class=\"say-box\" id=\"end\" v-if=\"speaking === false\">\r\n                <img v-if=\"stu_content !== '' && is_speak === 1\" @click=\"to_chat\" class=\"send-img\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/send_msg.png\" mode=\"aspectFill\" />\r\n                <img v-if=\"stu_content === '' && is_speak === 1\" @click=\"chang_speak\" data-is-speak=\"0\"\r\n                    class=\"other-img\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/audio.png\"\r\n                    mode=\"scaleToFill\" />\r\n                <img v-if=\"stu_content === '' && is_speak === 0 && speaking === false\" @click=\"chang_hand\"\r\n                    data-is-speak=\"1\" class=\"other-img\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/hand.png\" mode=\"scaleToFill\" />\r\n            </div> -->\r\n        </div>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\nimport { getEtalkCateList } from '@/api/user'\r\n//必须引入的核心\r\nimport Recorder from 'recorder-core'\r\n\r\n//引入mp3格式支持文件；如果需要多个格式支持，把这些格式的编码引擎js文件放到后面统统引入进来即可\r\nimport 'recorder-core/src/engine/mp3'\r\nimport 'recorder-core/src/engine/mp3-engine'\r\n//录制wav格式的用这一句就行\r\nimport 'recorder-core/src/engine/wav'\r\n\r\n//可选的插件支持项，这个是波形可视化插件\r\nimport 'recorder-core/src/extensions/waveview'\r\n//ts import 提示：npm包内已自带了.d.ts声明文件（不过是any类型）\r\nexport default {\r\n    name: 'WriteAi',\r\n    data() {\r\n        return {\r\n            listData: [],\r\n            EtalkCateList: [],\r\n            is_show_ai: false,\r\n            stu_placeholder: '请输入你的疑问...',\r\n            stu_content: '',\r\n            is_speak: 1,\r\n            canuse: 1,\r\n            res_id: '',\r\n            type: 0,\r\n            lang_time: 0,\r\n            speaking: false,\r\n            recorder: null,\r\n            mediaStream: null,\r\n            audioChunks: [],\r\n            audioDetails: null // 新增用于存储音频文件详细信息的状态\r\n        }\r\n    },\r\n    watch: {\r\n        '$route.path': function (newPath) {\r\n            this.active = newPath // 路由变化时更新激活的路由\r\n        }\r\n    },\r\n    methods: {\r\n        async getEtalkCateList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getEtalkCateList({ sid: user.sid })\r\n                    const data = response.data\r\n                    this.getRandomThree(data)\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async to_dingtalk() {\r\n            window.location.href = 'https://qr.dingtalk.com/action/joingroup?code=v1,k1,IhOSmROFTSw+3pBELANkfbCOdwZd2JiTcd6YyE+gR7k=&_dt_no_comment=1&origin=11';\r\n        },\r\n        async getRandomThree(arr) {\r\n            let result = [];\r\n            let clone = arr.slice(); // 创建原数组的副本，避免修改原数组\r\n            console.log(clone)\r\n            // 循环三次，每次选取一个随机元素\r\n            for (let i = 0; i < 3; i++) {\r\n                if (clone.length === 0) break; // 如果数组为空，则退出循环\r\n                let randomIndex = Math.floor(Math.random() * clone.length); // 获取随机索引\r\n                result.push(clone[randomIndex]); // 将随机选取的元素添加到结果数组中\r\n                clone.splice(randomIndex, 1); // 将已选取的元素从原数组中移除\r\n            }\r\n\r\n            this.listData = result\r\n            console.log(this.listData)\r\n        },\r\n        async inputText() {\r\n            console.log(this.stu_content)\r\n            this.type = 0\r\n        },\r\n        async chat(item) {\r\n            this.$router.push({\r\n                name: 'NewChat', query: {\r\n                    project_id: 0,\r\n                    is_history: 0,\r\n                    lang_time: this.lang_time,\r\n                    filePath: this.filePath,\r\n                    type: 0,\r\n                    stype: 'write_subject',\r\n                    from: 'write',\r\n                    chat_title: 'E-Write',\r\n                    content: item.content,\r\n                    res_id: this.res_id\r\n                }\r\n            })\r\n        },\r\n        async to_chat() {\r\n            this.$router.push({\r\n                name: 'NewChat', query: {\r\n                    project_id: 0,\r\n                    is_history: 0,\r\n                    lang_time: this.lang_time,\r\n                    filePath: this.filePath,\r\n                    type: this.type,\r\n                    stype: 'write_guide',\r\n                    from: 'write',\r\n                    chat_title: 'E-Write',\r\n                    content: this.stu_content,\r\n                    res_id: this.res_id\r\n                }\r\n            })\r\n        },\r\n        async chang_speak() {\r\n            await this.recOpen();\r\n            this.is_speak = 0;\r\n            this.stu_placeholder = \"按住说话...\";\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n\r\n        async chang_hand() {\r\n            this.is_speak = 1;\r\n            this.stu_placeholder = \"请输入你的疑问...\";\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n\r\n        change_show_ai() {\r\n            this.is_show_ai = !this.is_show_ai\r\n        },\r\n        async recOpen() {\r\n            //创建录音对象\r\n            this.rec = Recorder({\r\n                type: \"mp3\" //录音格式，可以换成wav等其他格式\r\n                , sampleRate: 16000 //录音的采样率，越大细节越丰富越细腻\r\n                , bitRate: 16 //录音的比特率，越大音质越好\r\n                , onProcess: (buffers, powerLevel, bufferSampleRate) => {\r\n                    //录音实时回调，大约1秒调用12次本回调\r\n                    //可实时绘制波形，实时上传（发送）数据\r\n                    if (this.wave) this.wave.input(buffers[buffers.length - 1], powerLevel, bufferSampleRate);\r\n                }\r\n            });\r\n\r\n            //打开录音，获得权限\r\n            this.rec.open(() => {\r\n                console.log(\"录音已打开\");\r\n                if (this.$refs.recwave) {//创建音频可视化图形绘制对象\r\n                    this.wave = Recorder.WaveDiv({ elem: this.$refs.recwave });\r\n                }\r\n            }, (msg, isUserNotAllow) => {\r\n                //用户拒绝了录音权限，或者浏览器不支持录音\r\n                console.log((isUserNotAllow ? \"UserNotAllow，\" : \"\") + \"无法录音:\" + msg);\r\n            });\r\n            // this.startRecognition(); // 启动语音识别\r\n        },\r\n        async recStart() {\r\n            if (!this.rec) { console.error(\"未打开录音\"); return }\r\n            this.rec.start();\r\n            this.stu_placeholder = '正在说话';\r\n            this.speaking = true;\r\n            console.log(\"已开始录音\");\r\n            if (this.recognition) {\r\n                this.recognition.start(); // 启动语音识别\r\n            }\r\n        },\r\n        async recStop() {\r\n            if (!this.rec) { console.error(\"未打开录音\"); return }\r\n            this.rec.stop((blob, duration) => {\r\n                //blob就是我们要的录音文件对象，可以上传，或者本地播放\r\n                this.recBlob = blob;\r\n                //简单利用URL生成本地文件地址，此地址只能本地使用，比如赋值给audio.src进行播放，赋值给a.href然后a.click()进行下载（a需提供download=\"xxx.mp3\"属性）\r\n                var localUrl = (window.URL).createObjectURL(blob);\r\n                console.log(\"录音成功\", blob, localUrl, \"时长:\" + duration + \"ms\");\r\n                this.stu_placeholder = '按住说话';\r\n                this.lang_time = (duration / 1000).toFixed()\r\n                this.type = 1\r\n                this.speaking = false;\r\n                this.upload(blob);//把blob文件上传到服务器\r\n                if (this.recognition) {\r\n                    this.recognition.stop(); // 停止语音识别\r\n                }\r\n                // this.rec.close();//关闭录音，释放录音资源，当然可以不释放，后面可以连续调用start\r\n                // this.rec = null;\r\n            }, (err) => {\r\n                console.error(\"结束录音出错：\" + err);\r\n                // this.rec.close();//关闭录音，释放录音资源，当然可以不释放，后面可以连续调用start\r\n                // this.rec = null;\r\n            });\r\n        },\r\n        startRecognition() {\r\n            const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;\r\n            if (SpeechRecognition) {\r\n                this.recognition = new SpeechRecognition();\r\n                // 配置和使用 recognition 对象\r\n            } else {\r\n                console.error('该浏览器不支持语音识别');\r\n            }\r\n\r\n            this.recognition.continuous = true;\r\n            this.recognition.interimResults = true;\r\n            this.recognition.lang = 'en-US';\r\n\r\n            this.recognition.onresult = (event) => {\r\n                let interimTranscript = '';\r\n                let finalTranscript = '';\r\n\r\n                for (let i = event.resultIndex; i < event.results.length; i++) {\r\n                    if (event.results[i].isFinal) {\r\n                        finalTranscript += event.results[i][0].transcript;\r\n                    } else {\r\n                        interimTranscript += event.results[i][0].transcript;\r\n                    }\r\n                }\r\n\r\n                this.content = finalTranscript || interimTranscript;\r\n            };\r\n\r\n            this.recognition.onerror = (event) => {\r\n                console.error('识别错误: ', event.error);\r\n            };\r\n\r\n            this.recognition.onend = () => {\r\n                console.log('识别结束' + this.content);\r\n            };\r\n        },\r\n        async upload(blob) {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    var form = new FormData();\r\n                    form.append(\"file\", blob, user.sid + \"-\" + new Date().getTime() + \".mp3\"); //和普通form表单并无二致，后端接收到upfile参数的文件，文件名为recorder.mp3\r\n                    form.append(\"key\", \"value\"); //其他参数\r\n\r\n                    var xhr = new XMLHttpRequest();\r\n                    xhr.open(\"POST\", \"https://elang.zju.edu.cn:8082/mobileupload/upload\");\r\n                    // xhr.open(\"POST\", \"https://zju.3dease.com/fcapi/mobileupload/upload\");\r\n                    xhr.onreadystatechange = () => {\r\n                        if (xhr.readyState === 4) {\r\n                            if (xhr.status === 200) {\r\n                                // 请求成功，解析响应\r\n                                var response = JSON.parse(xhr.responseText);\r\n                                console.log(\"上传成功，服务器返回的数据:\", response);\r\n                                this.filePath = response.data.url\r\n                                // 在这里处理服务器返回的数据\r\n                                // this.startRecognition()\r\n                                this.type = 1; //消息类型\r\n                                this.to_chat()\r\n                            } else {\r\n                                // 请求失败，处理错误\r\n                                console.error(\"上传失败，状态码:\", xhr.status);\r\n                                console.error(\"错误信息:\", xhr.statusText);\r\n                            }\r\n                        }\r\n                    };\r\n                    xhr.send(form);\r\n\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async recPlay() {\r\n            //本地播放录音试听，可以直接用URL把blob转换成本地播放地址，用audio进行播放\r\n            var localUrl = URL.createObjectURL(this.recBlob);\r\n            var audio = document.createElement(\"audio\");\r\n            audio.controls = true;\r\n            document.body.appendChild(audio);\r\n            audio.src = localUrl;\r\n            audio.play(); //这样就能播放了\r\n\r\n            //注意不用了时需要revokeObjectURL，否则霸占内存\r\n            setTimeout(function () { URL.revokeObjectURL(audio.src) }, 5000);\r\n        },\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数\r\n        this.getEtalkCateList()\r\n    }\r\n}\r\n</script>\r\n\r\n\r\n<style scoped>\r\n.check-main-ai {\r\n    width: 100vw;\r\n    height: auto;\r\n    max-height: 400px;\r\n    overflow-y: auto;\r\n    background: linear-gradient(134deg, #eff7fe, #e3f3ff);\r\n    padding-bottom: 25px;\r\n    position: fixed;\r\n    bottom: 0px;\r\n    border-radius: 40px 40px 0 0;\r\n    z-index: 200;\r\n}\r\n\r\n.guanbi {\r\n    width: auto;\r\n    height: auto;\r\n    position: fixed;\r\n    right: 10px;\r\n    text-align: center;\r\n    padding: 8px 15px;\r\n    font-weight: bold;\r\n    /* background-color: rgba(236, 221, 10, 0.3); */\r\n    border-radius: 40px;\r\n}\r\n\r\n.wyt-say {\r\n    width: 75px;\r\n    height: 75px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.say-text {\r\n    width: 300px;\r\n    height: 75px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 60px;\r\n    font-size: 14px;\r\n}\r\n\r\n.fast-parent {\r\n    padding-left: 10vw;\r\n}\r\n\r\n.fast-box {\r\n    width: 80px;\r\n    height: 55px;\r\n    background: #ffffff;\r\n    border-radius: 0px 20px 0px 20px;\r\n    border: 1px solid #acc5ff;\r\n    margin-left: 5px;\r\n    color: #686868;\r\n    font-size: 12px;\r\n    text-align: center;\r\n    padding: 8px 9px;\r\n    text-align: center;\r\n    margin-bottom: 110px;\r\n    align-items: center;\r\n    display: flex;\r\n    float: left;\r\n}\r\n\r\n.fast-box:last-child {\r\n    margin-right: 0;\r\n}\r\n\r\n.input-box {\r\n    width: 80vw;\r\n    height: 42px;\r\n    background: #ffffff;\r\n    border-radius: 16px;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border: none;\r\n}\r\n\r\n.question {\r\n    padding: 10px 60px 10px 15px;\r\n    font-size: 14px;\r\n    color: #000;\r\n    border: none;\r\n}\r\n\r\n.placeholder {\r\n    font-size: 14px;\r\n    color: #989898;\r\n    padding: 3px 15px;\r\n}\r\n\r\n.say-box {\r\n    width: 60px;\r\n    height: 42px;\r\n    background: #ffffff;\r\n    border-radius: 15px;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 293px;\r\n}\r\n\r\n.say-img {\r\n    width: 10px;\r\n    height: 15px;\r\n    padding: 7px 25px;\r\n}\r\n\r\n.send-img {\r\n    width: 53px;\r\n    height: 30px;\r\n    position: fixed;\r\n    bottom: 50px;\r\n    left: 293px;\r\n}\r\n\r\n.other-img {\r\n    width: 25px;\r\n    height: 25px;\r\n    position: fixed;\r\n    bottom: 53px;\r\n    left: 326px;\r\n}\r\n\r\n.button-default {\r\n    background: #fff;\r\n    /* color: #000000; */\r\n    height: 42px;\r\n    width: 323px;\r\n    line-height: 25px;\r\n    text-align: center;\r\n    border-radius: 21;\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n    border: none;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border-radius: 16px;\r\n}\r\n\r\n.button-speaking {\r\n    background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);\r\n    color: #fff;\r\n    height: 42px;\r\n    width: 333px;\r\n    line-height: 25px;\r\n    /* text-align: center; */\r\n    border-radius: 21px;\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n    z-index: 100;\r\n    border: none;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border-radius: 16px;\r\n}\r\n\r\n.reback {\r\n    position: fixed;\r\n    bottom: 40%;\r\n    right: 5px;\r\n    font-size: 16px;\r\n    width: 20px;\r\n    padding: 10px 5px;\r\n    background: rgba(2, 208, 245, 0.5);\r\n    border-radius: 10px;\r\n}\r\n\r\n.wyt {\r\n    position: fixed;\r\n    bottom: 60px;\r\n    right: 5px;\r\n    width: 75px;\r\n    height: 75px;\r\n}\r\n\r\n.btn-test {\r\n    position: absolute;\r\n    top: 0;\r\n}\r\n\r\n.btn-test2 {\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WriteAi.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WriteAi.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./WriteAi.vue?vue&type=template&id=6574514e&scoped=true\"\nimport script from \"./WriteAi.vue?vue&type=script&lang=js\"\nexport * from \"./WriteAi.vue?vue&type=script&lang=js\"\nimport style0 from \"./WriteAi.vue?vue&type=style&index=0&id=6574514e&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"6574514e\",\n  null\n  \n)\n\nexport default component.exports","<template>\r\n  <div class=\"index\">\r\n    <van-nav-bar title=\"笔下生花\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n\r\n    <div class=\"notice\">\r\n      <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/notice.png\" mode=\"widthFix\"\r\n        class=\"notice-img\" />\r\n      <div class=\"notice-title\">\r\n        <van-notice-bar :key=\"noticeTitle\" background=\"#FFF\" color=\"#000\" :scrollable=\"true\" :text=\"noticeTitle\" />\r\n      </div>\r\n      <div class=\"more-info\" @click=\"toHomeNoticeList\">\r\n        全部\r\n      </div>\r\n      <div class=\"more-icon\">\r\n        <van-icon name=\"arrow\" color=\"#606060\" />\r\n      </div>\r\n    </div>\r\n\r\n    <div class=\"head\" v-if=\"writeTeacherList.length > 0\">\r\n      <div class=\"content-item\">\r\n        <div class=\"item-top\">\r\n          <div class=\"item-title\">写作指导</div>\r\n          <div class=\"item-all\" @click=\"to_list\">\r\n            全部\r\n            <van-icon name=\"arrow\" color=\"#606060\" />\r\n          </div>\r\n        </div>\r\n        <!-- 写作指导 -->\r\n        <div class=\"xzzd\">\r\n          <scroll-div class=\"scroll-div\" scroll-x=\"true\" bindscroll=\"scroll\" style=\"width: 100%\">\r\n            <van-swipe :loop=\"false\" :show-indicators=\"false\" :width=\"130\">\r\n              <van-swipe-item v-for=\"(item, index) in writeTeacherList\" v-bind:key=\"index\">\r\n                <div class=\"scroll-div-item\">\r\n                  <div class=\"user-pic\">\r\n                    <img :src=\"item.avatar || 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png'\"\n                      class=\"tea-img\" />\r\n                  </div>\r\n                  <div class=\"tea-name\" :data-item=\"index\">\r\n                    {{ item.name }}\r\n                  </div>\r\n                  <div class=\"tea-lable\">\r\n                    <span v-for=\"(val, key) in item.labels\" v-bind:key=\"key\">\r\n                      <div class=\"lable-item1\" v-if=\"key < 3\">\r\n                        {{ val }}\r\n                      </div>\r\n                      <br v-if=\"key == 3\">\r\n                      <div class=\"lable-item1\" v-if=\"key > 2\">\r\n                        {{ val }}\r\n                      </div>\r\n                    </span>\r\n                  </div>\r\n                  <div class=\"yuyue\" @click=\"to_submit(item)\" v-if=\"item.orderNumTotal>0\">\r\n                    预约\r\n                  </div>\r\n                  <div class=\"yuyue yuyue-no\" @click=\"to_submit(item)\"  v-else>\r\n                    预约已满\r\n                  </div>\r\n                </div>\r\n              </van-swipe-item>\r\n            </van-swipe>\r\n          </scroll-div>\r\n        </div>\r\n        <!-- 写作指导 -->\r\n      </div>\r\n    </div>\r\n\r\n    <div class=\"content-item\" v-if=\"MyNewFeedBack.length > 0\">\r\n      <div class=\"item-top\">\r\n        <div class=\"item-title\">最新留言</div>\r\n        <div class=\"item-all\" @click=\"to_notice_list\">\r\n          全部\r\n          <van-icon name=\"arrow\" color=\"#606060\" />\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"callback-tea\">\r\n        <image v-if=\"MyNewFeedBack.reply_row != null\"\r\n          src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png\"\r\n          class=\"callback-tea-img\" mode=\"widthFix\" />\r\n        <div class=\"parent-box\" v-if=\"MyNewFeedBack.reply_row != null\">\r\n          <div class=\"callback-tea-name\">{{ MyNewFeedBack.reply_row.name }}</div>\r\n          <div class=\"callback-tea-content\">回复了你的留言 {{ MyNewFeedBack.reply_row.create_time }} <text\r\n              style=\"color: #000;\">回复</text></div>\r\n          <div class=\"callback-msg\">{{ MyNewFeedBack.reply_row.content }}</div>\r\n        </div>\r\n        <div class=\"stu-info\">\r\n          <div class=\"stu-lable\"></div>\r\n          <div class=\"stu-ques\">{{ MyNewFeedBack.row.content }}</div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n    <div class=\"content-item\">\r\n      <div class=\"item-top\">\r\n        <div class=\"item-title\">AI写作辅导</div>\r\n      </div>\r\n      <div class=\"ai-item\" @click=\"toNewIndex\">\r\n        <div class=\"ai-item-lable\">分主题，等级匹配</div>\r\n        <div class=\"ai-item-title\">主题写作</div>\r\n        <div class=\"ai-item-update\">03月30日更新</div>\r\n      </div>\r\n      <div class=\"ai-item1\" @click=\"InterActive\">\r\n        <div class=\"ai-item-lable\">AI辩题，互动性强</div>\r\n        <div class=\"ai-item-title\">互动式议论文</div>\r\n        <div class=\"ai-item-update\">暂无更新</div>\r\n      </div>\r\n      <div class=\"ai-item2\" @click=\"InteractiveDiscussion\">\r\n        <div class=\"ai-item-lable\">AI互动，趣味性强</div>\r\n        <div class=\"ai-item-title\">互动式记叙文</div>\r\n        <div class=\"ai-item-update\">暂无更新</div>\r\n      </div>\r\n    </div>\r\n    <WriteAi allow=\"microphone\" />\r\n    <div class=\"answer-box\">\r\n      <div class=\"answer-btn\" @click=\"toAiHistory\">AI写作历史</div>\r\n    </div>\r\n  </div>\r\n</template>\r\n<script>\r\nimport { saveUserStudyResource, getMyNewFeedBack, writeTeacherList } from '@/api/user'\r\nimport { NoticeList } from '@/api/home'\r\nimport WriteAi from \"@/components/WriteAi\";\r\nexport default {\r\n  components: { WriteAi },\r\n  name: 'Index',\r\n  data() {\r\n    return {\r\n      show: false,\r\n      level: '',\r\n      time_level: '',\r\n      subject_cate_id: '',\r\n      keyword: '',\r\n      MyNewFeedBack: [],\r\n      writeTeacherList: [],\r\n      noticeInfo: null\r\n    }\r\n  },\r\n  computed: {\r\n    noticeTitle() {\r\n      return (this.noticeInfo && this.noticeInfo.title) || '暂无通知'\r\n    }\r\n  },\r\n  methods: {\r\n    async to_submit(item) {\r\n      this.$router.push({ name: 'WriteSubmit', query: { tea_id: item.id } })\r\n    },\r\n    async to_notice_list() {\r\n      this.$router.push({ name: 'WriteNotice' })\r\n\r\n    },\r\n    async toHomeNoticeList() {\r\n      this.$router.push({ name: 'NoticeList' })\r\n    },\r\n    async getNoticeList() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (!user || !user.sid) return\r\n        const response = await NoticeList({ sid: user.sid, page: 1, size: 1, type: 'common' })\r\n        const list = response.data && response.data.list ? response.data.list : response.data\r\n        this.noticeInfo = Array.isArray(list) && list.length > 0 ? list[0] : null\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async to_share() {\r\n      this.$router.push({ name: 'Serch', query: { category_id: 4, keyword: this.keyword } })\r\n    },\r\n    async getMyNewFeedBack() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await getMyNewFeedBack({ sid: user.sid })\r\n          if (response.code == 100) {\r\n            this.MyNewFeedBack = response.data\r\n          }\r\n\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async getWriteTeacherList() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await writeTeacherList()\r\n          var writeTeacher = response.data\r\n          writeTeacher.forEach(item => {\r\n            if (item.labels != null) {\r\n              item.labels = item.labels.split(/[,，]/)\r\n\r\n            }\r\n          })\r\n          this.writeTeacherList = writeTeacher\r\n\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async check_level(e) {\r\n      this.level = e\r\n    },\r\n    async check_time_level(e) {\r\n      this.time_level = e\r\n    },\r\n    async check_subject_cate_id(e) {\r\n      this.keyword = e.name\r\n    },\r\n    async onClickLeft() {\r\n      history.back()\r\n    },\r\n    async to_praxis(item) {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          console.log(item)\r\n          const response = await saveUserStudyResource({ sid: user.sid, resource_id: item.id })\r\n          if (response.code == 100) {\r\n\r\n            this.$router.push({ name: 'WritePraxis', query: { log_id: response.data, resources_id: item.id } })\r\n\r\n          }\r\n\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async changShow() {\r\n      this.show = !this.show;\r\n    },\r\n    async to_learn(item) {\r\n      this.$router.push({ name: 'WriteLearn', query: { subject_id: item.id, subject_name: item.name } })\r\n    },\r\n    async to_list() {\r\n      this.$router.push({ name: 'WriteTeaList' })\r\n    },\r\n    toNewIndex() {\r\n      this.$router.push({ name: 'WriteProject' })\r\n    },\r\n    InterActive() {\r\n      this.$router.push({ name: 'InterActive' })\r\n    },\r\n    InteractiveDiscussion() {\r\n      this.$router.push({ name: 'InteractiveDiscussion' })\r\n    },\r\n    toAiHistory(){\r\n      this.$router.push({ name: 'WriteList' })\r\n    }\r\n  },\r\n  mounted() {\r\n    // 在组件挂载后立即获取任务数据\r\n\r\n    this.getWriteTeacherList()\r\n    this.getMyNewFeedBack()\r\n    this.getNoticeList()\r\n  }\r\n}\r\n</script>\r\n<style scoped>\r\n.notice {\r\n  width: 325px;\r\n  height: 40px;\r\n  margin: 20px auto;\r\n  border-top: 1px solid #E4E4E4;\r\n  border-bottom: 1px solid #E4E4E4;\r\n  line-height: 40px;\r\n}\r\n\r\n.notice-img {\r\n  width: 22px;\r\n  height: 22px;\r\n  margin: 9px 12px 8px 7px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.notice-title {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 224px;\r\n  font-size: 12px;\r\n}\r\n\r\n.more-info {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 40px;\r\n  height: 22px;\r\n  font-size: 12px;\r\n  text-align: right;\r\n}\r\n\r\n.more-icon {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 20px;\r\n  height: 22px;\r\n}\r\n\r\n.item-top {\r\n  width: 100%;\r\n  height: 60px;\r\n}\r\n\r\n.item-title {\r\n  float: left;\r\n  padding: 22px 0 0 20px;\r\n  font-size: 16px;\r\n}\r\n\r\n.item-all {\r\n  padding-top: 25px;\r\n  color: #606060;\r\n  font-size: 12px;\r\n  float: right;\r\n}\r\n\r\n.stu-status-icon {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.xzzd {\r\n  width: 344px;\r\n  height: 170px;\r\n  padding: 18px 0 25px 31px;\r\n  text-align: left;\r\n}\r\n\r\n.scroll-div {\r\n  width: 344px;\r\n  height: 170px;\r\n  white-space: nowrap;\r\n}\r\n\r\n.scroll-div-item {\r\n  width: 114px;\r\n  height: 170px;\r\n  margin: 0 10px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  border-radius: 20px;\r\n}\r\n\r\n.scroll-div-item:nth-child(3n+1) {\r\n  background-color: #CBF2FE;\r\n}\r\n\r\n.scroll-div-item:nth-child(3n+2) {\r\n  background-color: #97DDFE;\r\n}\r\n\r\n.scroll-div-item:nth-child(3n+3) {\r\n  background-color: #81C5FF;\r\n}\r\n\r\n.user-pic {\r\n  width: 40px;\r\n  height: 40px;\r\n  padding: 19px 36px 5px 34px;\r\n}\r\n\r\n.tea-img {\r\n  width: 38px;\r\n  height: 38px;\r\n  border: 2px solid #FFF;\r\n  border-radius: 38px;\r\n}\r\n\r\n.tea-name {\r\n  color: #003F88;\r\n  font-size: 16px;\r\n  text-align: center;\r\n  margin-bottom: 2px;\r\n}\r\n\r\n.tea-lable {\r\n  color: #003F88;\r\n  font-size: 10px;\r\n  text-align: center;\r\n  width: 114px;\r\n  height: 30px;\r\n  overflow-wrap: break-word;\r\n}\r\n\r\n.lable-item1 {\r\n  height: 10px;\r\n  line-height: 10px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  border-right: 1px solid #003F88;\r\n  padding: 0 2px;\r\n}\r\n\r\n.lable-item1:last-child {\r\n  border: none;\r\n}\r\n\r\n.yuyue {\r\n  width: 76px;\r\n  height: 31px;\r\n  margin: 0 auto;\r\n  text-align: center;\r\n  border-radius: 16px;\r\n  margin-top: 15px;\r\n  line-height: 31px;\r\n  color: #FFF;\r\n  font-size: 12px;\r\n}\r\n.yuyue-no{\r\n  color: #000000;\r\n}\r\n.scroll-div-item:nth-child(3n+1)>.yuyue {\r\n  background-color: #84D7FD;\r\n}\r\n\r\n.scroll-div-item:nth-child(3n+2)>.yuyue {\r\n  background-color: #01A3F2;\r\n}\r\n\r\n.scroll-div-item:nth-child(3n+3)>.yuyue {\r\n  background-color: #017DE4;\r\n}\r\n\r\n.callback-tea-img {\r\n  width: 38px;\r\n  height: 38px;\r\n  padding: 18px 4px 0 0px;\r\n  border-radius: 38px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.callback-tea {\r\n  width: 350px;\r\n  padding-top: 26px;\r\n  margin: 0 auto;\r\n  text-align: left;\r\n}\r\n\r\n.parent-box {\r\n  padding-top: 26px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.callback-tea-name {\r\n  font-size: 12px;\r\n  font-weight: bold;\r\n\r\n}\r\n\r\n.callback-tea-content {\r\n  font-size: 12px;\r\n  color: #A1A1A1;\r\n  height: 14px;\r\n  line-height: 14px;\r\n  padding-top: 6px;\r\n  overflow: hidden;\r\n  width: 270px;\r\n}\r\n\r\n.callback-msg {\r\n  font-size: 14px;\r\n  height: auto;\r\n  line-height: 16px;\r\n  padding-top: 6px;\r\n  overflow: hidden;\r\n  width: 270px;\r\n}\r\n\r\n.stu-info {\r\n  width: 250px;\r\n  /* height: 40rpx; */\r\n  padding-left: 50px;\r\n  padding-top: 8px;\r\n}\r\n\r\n.stu-lable {\r\n  background-color: #C8C8C8;\r\n  width: 3px;\r\n  height: 10px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin-top: 6px;\r\n}\r\n\r\n.stu-ques {\r\n  width: 220px;\r\n  color: #A1A1A1;\r\n  font-size: 12px;\r\n  /*  */\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  line-height: 20px;\r\n  padding-left: 5px;\r\n}\r\n\r\n.head {\r\n  width: 100vw;\r\n  height: auto;\r\n  background: linear-gradient(to bottom, #E2F2FF, #FFF);\r\n  padding-bottom: 20px;\r\n}\r\n\r\n.model-title {\r\n  padding: 13px 0 11px 24px;\r\n  font-size: 16px;\r\n  text-align: left;\r\n}\r\n\r\n.last-learn {\r\n  width: 90vw;\r\n  height: 85px;\r\n  background: #FFFFFF;\r\n  box-shadow: 0px 2px 10px 1px rgba(80, 143, 206, 0.1);\r\n  border-radius: 20px 20px 20px 20px;\r\n  margin: 0 auto;\r\n}\r\n\r\n.lesson-cover-img {\r\n  width: 58px;\r\n  height: 58px;\r\n  padding: 14px 10px 0 13px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  border-radius: 5px;\r\n}\r\n\r\n.lesson-info {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 185px;\r\n  height: 44px;\r\n  padding: 10px 5px 20px 0;\r\n  text-align: left;\r\n}\r\n\r\n.lesson-name {\r\n  font-size: 14px;\r\n  font-weight: bold;\r\n  padding-bottom: 9px;\r\n  overflow: hidden;\r\n  text-overflow: ellipsis;\r\n  white-space: nowrap;\r\n}\r\n\r\n.lesson-time {\r\n  font-size: 12px;\r\n  color: #979797;\r\n}\r\n\r\n.con-to-study {\r\n  width: 60px;\r\n  height: 85px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  line-height: 85px;\r\n  font-size: 12px;\r\n  color: #003F88;\r\n}\r\n\r\n.theme-listening {\r\n  width: 100vw;\r\n  min-height: 30px;\r\n  height: auto;\r\n  text-align: left;\r\n  /* margin: 0 auto; */\r\n  margin-top: 30px;\r\n}\r\n\r\n.listening-title {\r\n  padding: 13px 0 11px 24px;\r\n  font-size: 16px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.model-check {\r\n  width: 59px;\r\n  height: 24px;\r\n  background: #000000;\r\n  border-radius: 25px;\r\n  opacity: 0.26;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin-left: 183px;\r\n  margin-top: 15px;\r\n  color: #FFF;\r\n  line-height: 24px;\r\n  padding-left: 21px;\r\n  font-size: 14px;\r\n}\r\n\r\n.listen-item {\r\n  width: 90vw;\r\n  height: auto;\r\n  margin: 18px auto;\r\n  border-bottom: 1px #E4E4E4 solid;\r\n  padding-bottom: 20px;\r\n}\r\n\r\n.listen-cover {\r\n  width: 90vw;\r\n  height: 150px;\r\n  border-radius: 10px;\r\n}\r\n\r\n.listen-name {\r\n  font-size: 14px;\r\n  font-weight: bold;\r\n  padding-top: 10px;\r\n}\r\n\r\n.listen-desc {\r\n  font-size: 12px;\r\n  color: #979797;\r\n  padding: 5px 23px 0px 0;\r\n}\r\n\r\n.listening-now {\r\n  /* width: 250px; */\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  padding-right: 10px;\r\n}\r\n\r\n.count-detail {\r\n  vertical-align: top;\r\n  padding: 5px 5px 0rpx 0rpx;\r\n  font-size: 12px;\r\n  display: inline-block;\r\n  vertical-align: top;\r\n  color: #979797;\r\n}\r\n\r\n.listening-svg {\r\n  width: 70px;\r\n  height: 29px;\r\n  float: right;\r\n  line-height: 29px;\r\n  border: #003F88 solid 1px;\r\n  border-radius: 14px;\r\n  text-align: center;\r\n  margin-top: -12px;\r\n  font-size: 12px;\r\n}\r\n\r\n.can-check {\r\n  background-color: #003F88;\r\n  color: #FFF;\r\n}\r\n\r\n.check-main {\r\n  width: 100%;\r\n  height: auto;\r\n  max-height: 600px;\r\n  overflow-y: scroll;\r\n  border-radius: 0 0 40px 40px;\r\n  background-color: #FFF;\r\n  padding-bottom: 25px;\r\n}\r\n\r\n.tea-search {\r\n  width: 360px;\r\n  height: 36px;\r\n  background: #000000;\r\n  border-radius: 25px;\r\n  /* opacity: 0.26; */\r\n  margin: 11px auto;\r\n}\r\n\r\n.check-item {\r\n  width: 339px;\r\n  margin: 11px auto;\r\n  height: auto;\r\n  text-align: left;\r\n}\r\n\r\n.check-item-title {\r\n  font-size: 12px;\r\n  font-weight: bold;\r\n  text-align: left;\r\n}\r\n\r\n.check-item-lables {\r\n  margin-top: 15px;\r\n}\r\n\r\n.lable-item {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin-right: 12px;\r\n  margin-bottom: 12px;\r\n  border: solid 1px #F4F8FB;\r\n  background-color: #F4F8FB;\r\n  padding: 2px 5px;\r\n  border-radius: 20rpx;\r\n  font-size: 12px;\r\n  color: #989898;\r\n}\r\n\r\n.lable-item-check {\r\n  border: #699FDE solid 1px;\r\n  background-color: #E2F9FF;\r\n  color: #579ACE;\r\n}\r\n\r\n.btn-cancel {\r\n  width: 152px;\r\n  height: 39px;\r\n  border-radius: 20px;\r\n  border: 1px solid #828282;\r\n  text-align: center;\r\n  line-height: 39px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin-left: 22px;\r\n}\r\n\r\n.btn-ok {\r\n  width: 152px;\r\n  height: 39px;\r\n  border-radius: 20px;\r\n  color: #FFF;\r\n  background-color: #003F88;\r\n  border: 1px solid #828282;\r\n  text-align: center;\r\n  line-height: 39px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin-left: 22px;\r\n}\r\n\r\n.ai-item,\r\n.ai-item1,\r\n.ai-item2 {\r\n  width: 86vw;\r\n  /* height: 100px; */\r\n  margin: 20px auto;\r\n  background-repeat: no-repeat;\r\n  background-size: cover;\r\n  padding: 15px 15px;\r\n}\r\n\r\n.ai-item>.ai-item-lable {\r\n  color: #003EAA;\r\n}\r\n\r\n.ai-item1>.ai-item-lable {\r\n  color: #75388E;\r\n}\r\n\r\n.ai-item2>.ai-item-lable {\r\n  color: #004E12;\r\n}\r\n\r\n.ai-item-lable {\r\n  font-family: Microsoft YaHei, Microsoft YaHei;\r\n  font-weight: 400;\r\n  font-size: 12px;\r\n  text-align: left;\r\n  font-style: normal;\r\n  text-transform: none;\r\n}\r\n\r\n.ai-item-title {\r\n  font-family: Microsoft YaHei, Microsoft YaHei;\r\n  font-weight: bold;\r\n  font-size: 16px;\r\n  color: #000000;\r\n  /* letter-spacing: 20px; */\r\n  text-align: left;\r\n  font-style: normal;\r\n  text-transform: none;\r\n  height: 60px;\r\n  line-height: 60px;\r\n  padding-left: 30px;\r\n}\r\n\r\n.ai-item-update {\r\n  font-family: Microsoft YaHei, Microsoft YaHei;\r\n  font-weight: 400;\r\n  font-size: 10px;\r\n  color: #878787;\r\n  text-align: left;\r\n  font-style: normal;\r\n  text-transform: none;\r\n  padding-left: 30px;\r\n}\r\n\r\n.ai-item {\r\n  background-image: url('./../../assets/img/project.png');\r\n}\r\n\r\n.ai-item1 {\r\n  background-image: url('./../../assets/img/inte_active.png');\r\n}\r\n\r\n.ai-item2 {\r\n  background-image: url('./../../assets/img/active_story.png');\r\n}\r\n\r\n.answer-btn {\r\n    position: fixed;\r\n    bottom: 20%;\r\n    right: 20px;\r\n    width: 20px;\r\n    /* height: 80px; */\r\n    line-height: 20px;\r\n    text-align: center;\r\n    background-color: #96cbf7;\r\n    padding: 10px 0;\r\n    border-radius: 15px;\r\n    color: #FFF;\r\n    font-size: 12px;\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Index.vue?vue&type=template&id=3063dc48&scoped=true\"\nimport script from \"./Index.vue?vue&type=script&lang=js\"\nexport * from \"./Index.vue?vue&type=script&lang=js\"\nimport style0 from \"./Index.vue?vue&type=style&index=0&id=3063dc48&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"3063dc48\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"praxis\",staticStyle:{\"text-align\":\"center\"}},[_c('van-nav-bar',{attrs:{\"title\":\"笔下生花\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticStyle:{\"color\":\"red\",\"text-align\":\"center\"}},[_vm._v(\"（本页面不能粘贴）\")]),_c('div',{staticStyle:{\"text-align\":\"left\",\"margin-left\":\"5vw\"}},[_vm._v(\"Word Count: \"+_vm._s(_vm.wordCount))]),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.writing),expression:\"writing\"}],attrs:{\"onpaste\":\"alert('禁止粘贴！'); return false;\",\"maxlength\":\"8000\",\"placeholder\":\"请输入写作内容\"},domProps:{\"value\":(_vm.writing)},on:{\"input\":[function($event){if($event.target.composing)return;_vm.writing=$event.target.value},_vm.countWords]}}),_vm._v(\" \"),_c('div',{staticClass:\"btn-box\"},[_c('div',{staticClass:\"clear-img\",attrs:{\"bind:tap\":\"clear_input\"}},[_c('image',{staticStyle:{\"width\":\"50rpx\"},attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/clear.png\",\"mode\":\"widthFix\"}})]),_c('span',{on:{\"click\":_vm.clear_input}},[_vm._v(\"一键清空\")]),_c('div',{staticClass:\"submit-btn\",on:{\"click\":_vm.reback}},[_vm._v(\"保存\")])])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"praxis\" style=\"text-align: center;\">\r\n        <van-nav-bar title=\"笔下生花\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <div style=\"color: red;text-align: center;\">（本页面不能粘贴）</div>\r\n        <div style=\"text-align: left;margin-left: 5vw;\">Word Count: {{ wordCount }}</div>\r\n        <textarea v-model=\"writing\" @input=\"countWords\" onpaste=\"alert('禁止粘贴！'); return false;\" maxlength=\"8000\"\r\n            placeholder=\"请输入写作内容\" />\r\n        <div class=\"btn-box\">\r\n            <!-- <div class=\"pc-img\">\r\n                <image style=\"width: 25rpx;\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/pc.png\"\r\n                    mode=\"widthFix\" />\r\n            </div>\r\n            <span>电脑端</span> -->\r\n            <div class=\"clear-img\" bind:tap=\"clear_input\">\r\n                <image style=\"width: 50rpx;\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/clear.png\"\r\n                    mode=\"widthFix\" />\r\n            </div>\r\n            <span @click=\"clear_input\">一键清空</span>\r\n            <div class=\"submit-btn\" @click=\"reback\">保存</div>\r\n        </div>\r\n    </div>\r\n</template>\r\n<script>\r\nexport default {\r\n    name: 'Praxis',\r\n    data() {\r\n        return {\r\n            wordCount: 0,\r\n            resources_id: 0,\r\n            writing: ''\r\n        }\r\n    },\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        async clear_input() {\r\n            this.wordCount = 0;\r\n            this.writing = ''\r\n        },\r\n        async reback() {\r\n            localStorage.setItem('userWriting' + this.resources_id, this.writing)\r\n            this.$router.push({ name: 'WritePraxis', query: { resources_id: this.resources_id, log_id: this.log_id, timestamp: Date.now() } })\r\n        },\r\n        async countWords() {\r\n            // 使用正则表达式将字符串分割为单词数组，并过滤掉空字符串\r\n            const words = this.writing.trim().split(/\\s+/).filter(Boolean);\r\n            this.wordCount = words.length;\r\n        },\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        // 在组件挂载后立即获取任务数据\r\n        this.log_id = this.$route.query.log_id;\r\n        this.resources_id = this.$route.query.resource_id;\r\n        this.writing = localStorage.getItem('userWriting' + this.resources_id)\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\ntextarea {\r\n    width: 86vw;\r\n    height: 600px;\r\n    margin: 2% auto;\r\n    font-size: 14px;\r\n    border: 1px solid lightgray;\r\n    padding: 10px 2vw;\r\n}\r\n\r\n.btn-box {\r\n    width: 90vw;\r\n    padding: 0 5vw;\r\n    height: 55px;\r\n    box-shadow: 0rpx -2px 6px 1px rgba(80, 143, 206, 0.1);\r\n    position: fixed;\r\n    bottom: 0;\r\n    padding-top: 27px;\r\n}\r\n\r\nspan {\r\n    padding: 30px 25px 0 7px;\r\n    font-size: 12px;\r\n    height: 25px;\r\n    line-height: 25px;\r\n    color: #A1A1A1;\r\n}\r\n\r\n.pc-img {\r\n    width: 25px;\r\n    height: 25px;\r\n    background: #B2D9FF;\r\n    border-radius: 25px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: center;\r\n    line-height: 25px;\r\n}\r\n\r\n.clear-img {\r\n    width: 25px;\r\n    height: 25px;\r\n    background: #FFEAA7;\r\n    border-radius: 25px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: center;\r\n    line-height: 25px;\r\n}\r\n\r\n.submit-btn {\r\n    width: 118px;\r\n    height: 36px;\r\n    background: #003F88;\r\n    border-radius: 20px;\r\n    color: #FFF;\r\n    text-align: center;\r\n    line-height: 36px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Write.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Write.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Write.vue?vue&type=template&id=a1177ed6&scoped=true\"\nimport script from \"./Write.vue?vue&type=script&lang=js\"\nexport * from \"./Write.vue?vue&type=script&lang=js\"\nimport style0 from \"./Write.vue?vue&type=style&index=0&id=a1177ed6&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"a1177ed6\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"learn\"},[_c('img',{staticClass:\"top-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/2.png\",\"mode\":\"\"}}),_c('div',{staticClass:\"main-top\"},[_c('van-nav-bar',{attrs:{\"title\":\"笔下生花\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}})],1),_c('div',{staticClass:\"main-content\"},[_c('div',{staticClass:\"content-mian\"},[_c('div',{staticClass:\"listen-title\"},[_vm._v(\"[写作]\"+_vm._s(_vm.subject_name))]),_vm._l((_vm.resources),function(item,index){return _c('div',{key:index,staticClass:\"listen-item\",on:{\"click\":function($event){return _vm.to_praxis(item)}}},[_c('div',{staticClass:\"listen-left\"},[_c('div',{staticClass:\"listen-name\"},[_vm._v(_vm._s(item.name))]),_c('div',{staticClass:\"listen-time\"},[_vm._v(_vm._s(item.create_time))])]),_c('div',{staticClass:\"listen-right\"},[(item.status == 0)?_c('div',{staticClass:\"listen-status\"},[_vm._v(\"未完成\")]):_vm._e(),(item.status == 1)?_c('div',{staticClass:\"listen-status listen-status3\"},[_vm._v(\"上次未学完\")]):_vm._e(),(item.status == 2)?_c('div',{staticClass:\"listen-status listen-status3\"},[_vm._v(\"已学\")]):_vm._e(),(item.hisLabel == 1)?_c('div',{staticClass:\"listen-status listen-status3\",staticStyle:{\"color\":\"red\"}},[_vm._v(\"历史已做\")]):_vm._e()])])})],2)]),_c('WriteLearnAi',{attrs:{\"allow\":\"microphone\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('span',{staticClass:\"reback\",on:{\"click\":_vm.to_dingtalk}},[_vm._v(\"问题反馈\")]),(!_vm.is_show_ai)?_c('img',{staticClass:\"wyt\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\",\"mode\":\"widthFix\"},on:{\"click\":_vm.change_show_ai}}):_vm._e(),(_vm.is_show_ai)?_c('div',{staticClass:\"check-main-ai\"},[_c('div',{staticClass:\"guanbi\",on:{\"click\":_vm.change_show_ai}},[_c('van-icon',{attrs:{\"name\":\"cross\",\"color\":\"#606060\"}})],1),_c('img',{staticClass:\"wyt-say\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\",\"mode\":\"widthFix\"}}),_c('div',{staticClass:\"say-text\"},[_vm._v(\"嗨，你好，一起开启外语学习吧\")]),_c('div',{staticClass:\"fast-parent\"},[_c('div',{staticClass:\"fast-box\",on:{\"click\":function($event){_vm.chat('Generate a suitable topic for writing (within 120 words)')}}},[_c('span',[_vm._v(\" 生成一个适合我的写作练习主题 \")])]),_c('div',{staticClass:\"fast-box\",on:{\"click\":function($event){_vm.chat('Introducing methods to improve writing skills (within 60 words).')}}},[_c('span',[_vm._v(\" 介绍提升写作能力的方法 \")])]),_c('div',{staticClass:\"fast-box\",on:{\"click\":function($event){_vm.chat('How to Improve Your Expression in Writing (within 60 words).')}}},[_c('span',[_vm._v(\" 如何在写作中完善表达 \")])])]),_c('div',{staticClass:\"input-box\"},[_c('button',{staticClass:\"button-default\",style:(_vm.speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''),on:{\"click\":_vm.to_chat}},[_vm._v(\"去对话\")])])]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- src/layouts/TabBarLayout.vue -->\r\n\r\n<template>\r\n    <div>\r\n        <!-- 初始状态下显示的图片，点击可切换显示 -->\r\n        <span class=\"reback\" @click=\"to_dingtalk\">问题反馈</span>\r\n        <img v-if=\"!is_show_ai\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\"\r\n            mode=\"widthFix\" @click=\"change_show_ai\" class=\"wyt\" />\r\n        <!-- 显示 AI 伴学功能的主要界面 -->\r\n        <div class=\"check-main-ai\" v-if=\"is_show_ai\">\r\n            <div class=\"guanbi\" @click=\"change_show_ai\">\r\n                <van-icon name=\"cross\" color=\"#606060\" />\r\n            </div>\r\n            <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\" mode=\"widthFix\"\r\n                class=\"wyt-say\" />\r\n            <div class=\"say-text\">嗨，你好，一起开启外语学习吧</div>\r\n            <!-- 功能选项按钮 -->\r\n            <div class=\"fast-parent\">\r\n                <div class=\"fast-box\" @click=\"chat('Generate a suitable topic for writing (within 120 words)')\">\r\n                    <span>\r\n                        生成一个适合我的写作练习主题\r\n                    </span>\r\n                </div>\r\n                <div class=\"fast-box\" @click=\"chat('Introducing methods to improve writing skills (within 60 words).')\">\r\n                    <span>\r\n                        介绍提升写作能力的方法\r\n                    </span>\r\n                </div>\r\n                <div class=\"fast-box\" @click=\"chat('How to Improve Your Expression in Writing (within 60 words).')\">\r\n                    <span>\r\n                        如何在写作中完善表达\r\n                    </span>\r\n                </div>\r\n            </div>\r\n            <div class=\"input-box\">\r\n                <button class=\"button-default\"\r\n                    :style=\"speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''\"\r\n                    @click=\"to_chat\">去对话</button>\r\n            </div>\r\n            <!-- 输入框和录音按钮 -->\r\n            <!-- <div class=\"input-box\" v-show=\"is_speak == 1\">\r\n                <input class=\"question\" maxlength=\"-1\" v-model=\"stu_content\" @input=\"inputText\"\r\n                    placeholder-class=\"placeholder\" :placeholder=\"stu_placeholder\" type=\"text\" />\r\n            </div>\r\n            <div class=\"input-box\" v-show=\"is_speak != 1\">\r\n                <button class=\"button-default\"\r\n                    :style=\"speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''\"\r\n                    @touchstart=\"recStart\" @touchend=\"recStop\">{{ stu_placeholder }}</button>\r\n            </div> -->\r\n            <!-- 发送信息和切换语音输入的按钮 -->\r\n            <!-- <div class=\"say-box\" id=\"end\" v-if=\"speaking === false\">\r\n                <img v-if=\"stu_content !== '' && is_speak === 1\" @click=\"to_chat\" class=\"send-img\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/send_msg.png\" mode=\"aspectFill\" />\r\n                <img v-if=\"stu_content === '' && is_speak === 1\" @click=\"chang_speak\" data-is-speak=\"0\"\r\n                    class=\"other-img\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/audio.png\"\r\n                    mode=\"scaleToFill\" />\r\n                <img v-if=\"stu_content === '' && is_speak === 0 && speaking === false\" @click=\"chang_hand\"\r\n                    data-is-speak=\"1\" class=\"other-img\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/hand.png\" mode=\"scaleToFill\" />\r\n            </div> -->\r\n        </div>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\n//必须引入的核心\r\nimport Recorder from 'recorder-core'\r\n\r\n//引入mp3格式支持文件；如果需要多个格式支持，把这些格式的编码引擎js文件放到后面统统引入进来即可\r\nimport 'recorder-core/src/engine/mp3'\r\nimport 'recorder-core/src/engine/mp3-engine'\r\n//录制wav格式的用这一句就行\r\nimport 'recorder-core/src/engine/wav'\r\n\r\n//可选的插件支持项，这个是波形可视化插件\r\nimport 'recorder-core/src/extensions/waveview'\r\n//ts import 提示：npm包内已自带了.d.ts声明文件（不过是any类型）\r\nexport default {\r\n    name: 'WriteAi',\r\n    props: {\r\n        subject_name: {\r\n            type: String,\r\n            reqired: true\r\n        }\r\n    },\r\n    data() {\r\n        return {\r\n            listData: [],\r\n            is_show_ai: false,\r\n            stu_placeholder: '请输入你的疑问...',\r\n            stu_content: '',\r\n            is_speak: 1,\r\n            res_id: '',\r\n            canuse: 1,\r\n            type: 0,\r\n            lang_time: 0,\r\n            speaking: false,\r\n            recorder: null,\r\n            mediaStream: null,\r\n            audioChunks: [],\r\n            audioDetails: null // 新增用于存储音频文件详细信息的状态\r\n        }\r\n    },\r\n    watch: {\r\n        '$route.path': function (newPath) {\r\n            this.active = newPath // 路由变化时更新激活的路由\r\n        }\r\n    },\r\n    methods: {\r\n        async to_dingtalk() {\r\n            window.location.href = 'https://qr.dingtalk.com/action/joingroup?code=v1,k1,IhOSmROFTSw+3pBELANkfbCOdwZd2JiTcd6YyE+gR7k=&_dt_no_comment=1&origin=11';\r\n        },\r\n        async inputText() {\r\n            console.log(this.stu_content)\r\n            this.type = 0\r\n        },\r\n        async chat(item) {\r\n            this.$router.push({\r\n                name: 'NewChat', query: {\r\n                    project_id: 0,\r\n                    is_history: 0,\r\n                    lang_time: this.lang_time,\r\n                    filePath: this.filePath,\r\n                    type: 0,\r\n                    stype: 'write_guide',\r\n                    from: 'write',\r\n                    chat_title: 'E-Write',\r\n                    system: this.subject_name,\r\n                    content: item,\r\n                    res_id: this.res_id\r\n                }\r\n            })\r\n        },\r\n        async to_chat() {\r\n            this.$router.push({\r\n                name: 'NewChat', query: {\r\n                    project_id: 0,\r\n                    is_history: 0,\r\n                    lang_time: this.lang_time,\r\n                    filePath: this.filePath,\r\n                    type: this.type,\r\n                    stype: 'write_guide',\r\n                    from: 'write',\r\n                    chat_title: 'E-Write',\r\n                    system: this.subject_name,\r\n                    content: this.stu_content,\r\n                    res_id: this.res_id\r\n                }\r\n            })\r\n        },\r\n        async chang_speak() {\r\n            await this.recOpen();\r\n            this.is_speak = 0;\r\n            this.stu_placeholder = \"按住说话...\";\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n\r\n        async chang_hand() {\r\n            this.is_speak = 1;\r\n            this.stu_placeholder = \"请输入你的疑问...\";\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n\r\n        change_show_ai() {\r\n            this.is_show_ai = !this.is_show_ai\r\n        },\r\n        async recOpen() {\r\n            //创建录音对象\r\n            this.rec = Recorder({\r\n                type: \"mp3\" //录音格式，可以换成wav等其他格式\r\n                , sampleRate: 16000 //录音的采样率，越大细节越丰富越细腻\r\n                , bitRate: 16 //录音的比特率，越大音质越好\r\n                , onProcess: (buffers, powerLevel, bufferSampleRate) => {\r\n                    //录音实时回调，大约1秒调用12次本回调\r\n                    //可实时绘制波形，实时上传（发送）数据\r\n                    if (this.wave) this.wave.input(buffers[buffers.length - 1], powerLevel, bufferSampleRate);\r\n                }\r\n            });\r\n\r\n            //打开录音，获得权限\r\n            this.rec.open(() => {\r\n                console.log(\"录音已打开\");\r\n                if (this.$refs.recwave) {//创建音频可视化图形绘制对象\r\n                    this.wave = Recorder.WaveDiv({ elem: this.$refs.recwave });\r\n                }\r\n            }, (msg, isUserNotAllow) => {\r\n                //用户拒绝了录音权限，或者浏览器不支持录音\r\n                console.log((isUserNotAllow ? \"UserNotAllow，\" : \"\") + \"无法录音:\" + msg);\r\n            });\r\n            // this.startRecognition(); // 启动语音识别\r\n        },\r\n        async recStart() {\r\n            if (!this.rec) { console.error(\"未打开录音\"); return }\r\n            this.rec.start();\r\n            this.stu_placeholder = '正在说话';\r\n            this.speaking = true;\r\n            console.log(\"已开始录音\");\r\n            if (this.recognition) {\r\n                this.recognition.start(); // 启动语音识别\r\n            }\r\n        },\r\n        async recStop() {\r\n            if (!this.rec) { console.error(\"未打开录音\"); return }\r\n            this.rec.stop((blob, duration) => {\r\n                //blob就是我们要的录音文件对象，可以上传，或者本地播放\r\n                this.recBlob = blob;\r\n                //简单利用URL生成本地文件地址，此地址只能本地使用，比如赋值给audio.src进行播放，赋值给a.href然后a.click()进行下载（a需提供download=\"xxx.mp3\"属性）\r\n                var localUrl = (window.URL).createObjectURL(blob);\r\n                console.log(\"录音成功\", blob, localUrl, \"时长:\" + duration + \"ms\");\r\n                this.stu_placeholder = '按住说话';\r\n                this.lang_time = (duration / 1000).toFixed()\r\n                this.type = 1\r\n                this.speaking = false;\r\n                this.upload(blob);//把blob文件上传到服务器\r\n                if (this.recognition) {\r\n                    this.recognition.stop(); // 停止语音识别\r\n                }\r\n                // this.rec.close();//关闭录音，释放录音资源，当然可以不释放，后面可以连续调用start\r\n                // this.rec = null;\r\n            }, (err) => {\r\n                console.error(\"结束录音出错：\" + err);\r\n                // this.rec.close();//关闭录音，释放录音资源，当然可以不释放，后面可以连续调用start\r\n                // this.rec = null;\r\n            });\r\n        },\r\n        startRecognition() {\r\n            const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;\r\n            if (SpeechRecognition) {\r\n                this.recognition = new SpeechRecognition();\r\n                // 配置和使用 recognition 对象\r\n            } else {\r\n                console.error('该浏览器不支持语音识别');\r\n            }\r\n\r\n            this.recognition.continuous = true;\r\n            this.recognition.interimResults = true;\r\n            this.recognition.lang = 'en-US';\r\n\r\n            this.recognition.onresult = (event) => {\r\n                let interimTranscript = '';\r\n                let finalTranscript = '';\r\n\r\n                for (let i = event.resultIndex; i < event.results.length; i++) {\r\n                    if (event.results[i].isFinal) {\r\n                        finalTranscript += event.results[i][0].transcript;\r\n                    } else {\r\n                        interimTranscript += event.results[i][0].transcript;\r\n                    }\r\n                }\r\n\r\n                this.content = finalTranscript || interimTranscript;\r\n            };\r\n\r\n            this.recognition.onerror = (event) => {\r\n                console.error('识别错误: ', event.error);\r\n            };\r\n\r\n            this.recognition.onend = () => {\r\n                console.log('识别结束' + this.content);\r\n            };\r\n        },\r\n        async upload(blob) {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    var form = new FormData();\r\n                    form.append(\"file\", blob, user.sid + \"-\" + new Date().getTime() + \".mp3\"); //和普通form表单并无二致，后端接收到upfile参数的文件，文件名为recorder.mp3\r\n                    form.append(\"key\", \"value\"); //其他参数\r\n\r\n                    var xhr = new XMLHttpRequest();\r\n                    xhr.open(\"POST\", \"https://elang.zju.edu.cn:8082/mobileupload/upload\");\r\n                    // xhr.open(\"POST\", \"https://zju.3dease.com/fcapi/mobileupload/upload\");\r\n                    xhr.onreadystatechange = () => {\r\n                        if (xhr.readyState === 4) {\r\n                            if (xhr.status === 200) {\r\n                                // 请求成功，解析响应\r\n                                var response = JSON.parse(xhr.responseText);\r\n                                console.log(\"上传成功，服务器返回的数据:\", response);\r\n                                this.filePath = response.data.url\r\n                                // 在这里处理服务器返回的数据\r\n                                // this.startRecognition()\r\n                                this.type = 1; //消息类型\r\n                                this.to_chat()\r\n                            } else {\r\n                                // 请求失败，处理错误\r\n                                console.error(\"上传失败，状态码:\", xhr.status);\r\n                                console.error(\"错误信息:\", xhr.statusText);\r\n                            }\r\n                        }\r\n                    };\r\n                    xhr.send(form);\r\n\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async recPlay() {\r\n            //本地播放录音试听，可以直接用URL把blob转换成本地播放地址，用audio进行播放\r\n            var localUrl = URL.createObjectURL(this.recBlob);\r\n            var audio = document.createElement(\"audio\");\r\n            audio.controls = true;\r\n            document.body.appendChild(audio);\r\n            audio.src = localUrl;\r\n            audio.play(); //这样就能播放了\r\n\r\n            //注意不用了时需要revokeObjectURL，否则霸占内存\r\n            setTimeout(function () { URL.revokeObjectURL(audio.src) }, 5000);\r\n        },\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n\r\n    }\r\n}\r\n</script>\r\n\r\n\r\n<style scoped>\r\n.check-main-ai {\r\n    width: 100vw;\r\n    height: auto;\r\n    max-height: 400px;\r\n    overflow-y: auto;\r\n    background: linear-gradient(134deg, #eff7fe, #e3f3ff);\r\n    padding-bottom: 25px;\r\n    position: fixed;\r\n    bottom: 0px;\r\n    border-radius: 40px 40px 0 0;\r\n    z-index: 200;\r\n}\r\n\r\n.guanbi {\r\n    width: auto;\r\n    height: auto;\r\n    position: fixed;\r\n    right: 10px;\r\n    text-align: center;\r\n    padding: 8px 15px;\r\n    font-weight: bold;\r\n    /* background-color: rgba(236, 221, 10, 0.3); */\r\n    border-radius: 40px;\r\n}\r\n\r\n.wyt-say {\r\n    width: 75px;\r\n    height: 75px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.say-text {\r\n    width: 300px;\r\n    height: 75px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 60px;\r\n    font-size: 14px;\r\n}\r\n\r\n.fast-parent {\r\n    padding-left: 10vw;\r\n}\r\n\r\n.fast-box {\r\n    width: 80px;\r\n    height: 55px;\r\n    background: #ffffff;\r\n    border-radius: 0px 20px 0px 20px;\r\n    border: 1px solid #acc5ff;\r\n    margin-left: 5px;\r\n    color: #686868;\r\n    font-size: 12px;\r\n    text-align: center;\r\n    padding: 8px 9px;\r\n    text-align: center;\r\n    margin-bottom: 110px;\r\n    align-items: center;\r\n    display: flex;\r\n    float: left;\r\n}\r\n\r\n.fast-box:last-child {\r\n    margin-right: 0;\r\n}\r\n\r\n.input-box {\r\n    width: 80vw;\r\n    height: 42px;\r\n    background: #ffffff;\r\n    border-radius: 16px;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border: none;\r\n}\r\n\r\n.question {\r\n    padding: 10px 60px 10px 15px;\r\n    font-size: 14px;\r\n    color: #000;\r\n    border: none;\r\n}\r\n\r\n.placeholder {\r\n    font-size: 14px;\r\n    color: #989898;\r\n    padding: 3px 15px;\r\n}\r\n\r\n.say-box {\r\n    width: 60px;\r\n    height: 42px;\r\n    background: #ffffff;\r\n    border-radius: 15px;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 293px;\r\n}\r\n\r\n.say-img {\r\n    width: 10px;\r\n    height: 15px;\r\n    padding: 7px 25px;\r\n}\r\n\r\n.send-img {\r\n    width: 53px;\r\n    height: 30px;\r\n    position: fixed;\r\n    bottom: 50px;\r\n    left: 293px;\r\n}\r\n\r\n.other-img {\r\n    width: 25px;\r\n    height: 25px;\r\n    position: fixed;\r\n    bottom: 53px;\r\n    left: 326px;\r\n}\r\n\r\n.button-default {\r\n    background: #fff;\r\n    /* color: #000000; */\r\n    height: 42px;\r\n    width: 323px;\r\n    line-height: 25px;\r\n    text-align: center;\r\n    border-radius: 21;\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n    border: none;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border-radius: 16px;\r\n}\r\n\r\n.button-speaking {\r\n    background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);\r\n    color: #fff;\r\n    height: 42px;\r\n    width: 333px;\r\n    line-height: 25px;\r\n    /* text-align: center; */\r\n    border-radius: 21px;\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n    z-index: 100;\r\n    border: none;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border-radius: 16px;\r\n}\r\n\r\n.reback {\r\n    position: fixed;\r\n    bottom: 160px;\r\n    right: 5px;\r\n    font-size: 16px;\r\n    width: 20px;\r\n    padding: 10px 5px;\r\n    background: rgba(2, 208, 245, 0.5);\r\n    border-radius: 10px;\r\n}\r\n\r\n.wyt {\r\n    position: fixed;\r\n    bottom: 60px;\r\n    right: 5px;\r\n    width: 75px;\r\n    height: 75px;\r\n}\r\n\r\n.btn-test {\r\n    position: absolute;\r\n    top: 0;\r\n}\r\n\r\n.btn-test2 {\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WriteLearnAi.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WriteLearnAi.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./WriteLearnAi.vue?vue&type=template&id=e19c688c&scoped=true\"\nimport script from \"./WriteLearnAi.vue?vue&type=script&lang=js\"\nexport * from \"./WriteLearnAi.vue?vue&type=script&lang=js\"\nimport style0 from \"./WriteLearnAi.vue?vue&type=style&index=0&id=e19c688c&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"e19c688c\",\n  null\n  \n)\n\nexport default component.exports","<template>\r\n    <div class=\"learn\">\r\n        <img class=\"top-img\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/2.png\" mode=\"\" />\r\n        <div class=\"main-top\">\r\n            <van-nav-bar title=\"笔下生花\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        </div>\r\n        <div class=\"main-content\">\r\n            <div class=\"content-mian\">\r\n                <div class=\"listen-title\">[写作]{{ subject_name }}</div>\r\n                <div class=\"listen-item\" v-for=\"(item, index) in resources\" :key=\"index\" @click=\"to_praxis(item)\">\r\n                    <div class=\"listen-left\">\r\n                        <div class=\"listen-name\">{{ item.name }}</div>\r\n                        <div class=\"listen-time\">{{ item.create_time }}</div>\r\n                    </div>\r\n                    <div class=\"listen-right\">\r\n                        <div class=\"listen-status\" v-if=\"item.status == 0\">未完成</div>\r\n                        <div class=\"listen-status listen-status3\" v-if=\"item.status == 1\">上次未学完</div>\r\n                        <div class=\"listen-status listen-status3\" v-if=\"item.status == 2\">已学</div>\r\n                        <div class=\"listen-status listen-status3\" style=\"color: red;\" v-if=\"item.hisLabel == 1\">历史已做</div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n        <WriteLearnAi allow=\"microphone\" />\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getResources, saveUserStudyResource } from '@/api/listen'\r\nimport WriteLearnAi from \"@/components/WriteLearnAi\";\r\nexport default {\r\n    components: { WriteLearnAi },\r\n    name: 'Learn',\r\n    data() {\r\n        return {\r\n            subject_id: 0,\r\n            subject_name: '',\r\n            resources: []\r\n        }\r\n    },\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        async getList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getResources({ sid: user.sid, subject_id: this.subject_id })\r\n                    const data = response.data\r\n                    this.resources = data\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async to_praxis(item) {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await saveUserStudyResource({ sid: user.sid, resource_id: item.id })\r\n                    const data = response.data\r\n                    this.$router.push({ name: 'WritePraxis', query: { log_id: data, resources_id: item.id } })\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        }\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        this.subject_id = this.$route.query.subject_id;\r\n        this.subject_name = this.$route.query.subject_name;\r\n        this.getList()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n.top-img {\r\n    width: 100vw;\r\n    height: 425px;\r\n    position: absolute;\r\n    top: 0;\r\n    left: 0;\r\n}\r\n\r\n.main-top {\r\n    width: 100vw;\r\n    height: 425px;\r\n    position: absolute;\r\n    top: 0;\r\n    left: 0;\r\n    text-align: left;\r\n}\r\n\r\n.reback {\r\n    padding: 20px 0 0 12px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.pagetitle {\r\n    padding: 20px 0 0 150px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    font-size: 16px;\r\n    color: #030303;\r\n}\r\n\r\n.main-content {\r\n    width: 100vw;\r\n    height: 532px;\r\n    background: #FFFFFF;\r\n    border-radius: 32px;\r\n    position: relative;\r\n    top: 252px;\r\n}\r\n\r\n.content-mian {\r\n    width: 90vw;\r\n    height: 532px;\r\n    margin: 0 auto;\r\n}\r\n\r\n.listen-title {\r\n    color: #000000;\r\n    font-size: 16px;\r\n    font-weight: bold;\r\n    padding-top: 23px;\r\n    text-align: center;\r\n}\r\n\r\n.listen-item {\r\n    width: 100%;\r\n    border-bottom: solid 1px #E4E4E4;\r\n    padding: 10px 0;\r\n}\r\n\r\n.listen-left {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 210px;\r\n}\r\n\r\n.listen-name {\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n    margin: 16px 0 8px 0;\r\n}\r\n\r\n.listen-time {\r\n    font-size: 12px;\r\n}\r\n\r\n.listen-right {\r\n    width: 100px;\r\n    text-align: right;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.listen-status {\r\n    padding-top: 16px;\r\n    font-size: 14px;\r\n    color: #919191;\r\n}\r\n\r\n.listen-status3 {\r\n    color: #51BF23;\r\n}\r\n\r\n.listen-status1,\r\n.listen-status2,\r\n.listen-status0 {\r\n    color: #919191;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Learn.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Learn.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Learn.vue?vue&type=template&id=e20a067a&scoped=true\"\nimport script from \"./Learn.vue?vue&type=script&lang=js\"\nexport * from \"./Learn.vue?vue&type=script&lang=js\"\nimport style0 from \"./Learn.vue?vue&type=style&index=0&id=e20a067a&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"e20a067a\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"praxis\"},[_c('van-nav-bar',{attrs:{\"title\":\"笔下生花\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticClass:\"wrap-text\",domProps:{\"innerHTML\":_vm._s(_vm.resources.resources.content)}}),_c('div',{staticClass:\"wrap-text\",domProps:{\"innerHTML\":_vm._s(_vm.jobList[0].title)}}),_c('div',{staticClass:\"writing\"},[_vm._v(\" \"+_vm._s(_vm.writing)+\" \")]),_c('div',{staticClass:\"btn-other\",on:{\"click\":_vm.to_write}},[_vm._v(\"去写作\")]),_c('div',{staticClass:\"btn-ok\",on:{\"click\":_vm.submit_paper}},[_vm._v(\"交卷\")]),_c('WritePraxisAi',{attrs:{\"resources_id\":_vm.resources_id,\"allow\":\"microphone\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[(!_vm.is_show_ai)?_c('img',{staticClass:\"wyt\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\",\"mode\":\"widthFix\"},on:{\"click\":_vm.change_show_ai}}):_vm._e(),(_vm.is_show_ai)?_c('div',{staticClass:\"check-main-ai\"},[_c('div',{staticClass:\"guanbi\",on:{\"click\":_vm.change_show_ai}},[_c('van-icon',{attrs:{\"name\":\"cross\",\"color\":\"#606060\"}})],1),_c('img',{staticClass:\"wyt-say\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\",\"mode\":\"widthFix\"}}),_c('div',{staticClass:\"say-text\"},[_vm._v(\"嗨，你好，一起开启外语学习吧\")]),_c('div',{staticClass:\"fast-parent\"},[_c('div',{staticClass:\"fast-box\",on:{\"click\":function($event){return _vm.chat('Expression')}}},[_c('span',[_vm._v(\" Expression \")])]),_c('div',{staticClass:\"fast-box\",on:{\"click\":function($event){return _vm.chat('Content')}}},[_c('span',[_vm._v(\" Content \")])]),_c('div',{staticClass:\"fast-box\",on:{\"click\":function($event){return _vm.chat(' Text structure')}}},[_c('span',[_vm._v(\" Text structure \")])])]),_c('div',{staticClass:\"input-box\"},[_c('button',{staticClass:\"button-default\",style:(_vm.speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''),on:{\"click\":_vm.to_chat}},[_vm._v(\"去对话\")])])]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- src/layouts/TabBarLayout.vue -->\r\n\r\n<template>\r\n    <div>\r\n        <!-- 初始状态下显示的图片，点击可切换显示 -->\r\n        <img v-if=\"!is_show_ai\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\"\r\n            mode=\"widthFix\" @click=\"change_show_ai\" class=\"wyt\" />\r\n        <!-- 显示 AI 伴学功能的主要界面 -->\r\n        <div class=\"check-main-ai\" v-if=\"is_show_ai\">\r\n            <div class=\"guanbi\" @click=\"change_show_ai\">\r\n                <van-icon name=\"cross\" color=\"#606060\" />\r\n            </div>\r\n            <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif\" mode=\"widthFix\"\r\n                class=\"wyt-say\" />\r\n            <div class=\"say-text\">嗨，你好，一起开启外语学习吧</div>\r\n            <!-- 功能选项按钮 -->\r\n            <div class=\"fast-parent\">\r\n                <div class=\"fast-box\" @click=\"chat('Expression')\">\r\n                    <span>\r\n                        Expression\r\n                    </span>\r\n                </div>\r\n                <div class=\"fast-box\" @click=\"chat('Content')\">\r\n                    <span>\r\n                        Content\r\n                    </span>\r\n                </div>\r\n                <div class=\"fast-box\" @click=\"chat(' Text structure')\">\r\n                    <span>\r\n                        Text structure\r\n                    </span>\r\n                </div>\r\n            </div>\r\n            <div class=\"input-box\">\r\n                <button class=\"button-default\"\r\n                    :style=\"speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''\"\r\n                    @click=\"to_chat\">去对话</button>\r\n            </div>\r\n            <!-- 输入框和录音按钮 -->\r\n            <!-- <div class=\"input-box\" v-show=\"is_speak == 1\">\r\n                <input class=\"question\" maxlength=\"-1\" v-model=\"stu_content\" @input=\"inputText\"\r\n                    placeholder-class=\"placeholder\" :placeholder=\"stu_placeholder\" type=\"text\" />\r\n            </div>\r\n            <div class=\"input-box\" v-show=\"is_speak != 1\">\r\n                <button class=\"button-default\"\r\n                    :style=\"speaking == true ? 'background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);color: #fff;' : ''\"\r\n                    @touchstart=\"recStart\" @touchend=\"recStop\">{{ stu_placeholder }}</button>\r\n            </div> -->\r\n            <!-- 发送信息和切换语音输入的按钮 -->\r\n            <!-- <div class=\"say-box\" id=\"end\" v-if=\"speaking === false\">\r\n                <img v-if=\"stu_content !== '' && is_speak === 1\" @click=\"to_chat\" class=\"send-img\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/send_msg.png\" mode=\"aspectFill\" />\r\n                <img v-if=\"stu_content === '' && is_speak === 1\" @click=\"chang_speak\" data-is-speak=\"0\"\r\n                    class=\"other-img\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/audio.png\"\r\n                    mode=\"scaleToFill\" />\r\n                <img v-if=\"stu_content === '' && is_speak === 0 && speaking === false\" @click=\"chang_hand\"\r\n                    data-is-speak=\"1\" class=\"other-img\"\r\n                    src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/hand.png\" mode=\"scaleToFill\" />\r\n            </div> -->\r\n        </div>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\n//必须引入的核心\r\nimport Recorder from 'recorder-core'\r\n\r\n//引入mp3格式支持文件；如果需要多个格式支持，把这些格式的编码引擎js文件放到后面统统引入进来即可\r\nimport 'recorder-core/src/engine/mp3'\r\nimport 'recorder-core/src/engine/mp3-engine'\r\n//录制wav格式的用这一句就行\r\nimport 'recorder-core/src/engine/wav'\r\n\r\n//可选的插件支持项，这个是波形可视化插件\r\nimport 'recorder-core/src/extensions/waveview'\r\n//ts import 提示：npm包内已自带了.d.ts声明文件（不过是any类型）\r\nexport default {\r\n    name: 'WriteAi',\r\n    props: {\r\n        resources_id: {\r\n            type: String,\r\n            reqired: true\r\n        }\r\n    },\r\n    data() {\r\n        return {\r\n            listData: [],\r\n            is_show_ai: false,\r\n            stu_placeholder: '请输入你的疑问...',\r\n            stu_content: '',\r\n            is_speak: 1,\r\n            canuse: 1,\r\n            type: 0,\r\n            lang_time: 0,\r\n            speaking: false,\r\n            recorder: null,\r\n            mediaStream: null,\r\n            audioChunks: [],\r\n            audioDetails: null // 新增用于存储音频文件详细信息的状态\r\n        }\r\n    },\r\n    watch: {\r\n        '$route.path': function (newPath) {\r\n            this.active = newPath // 路由变化时更新激活的路由\r\n        }\r\n    },\r\n    methods: {\r\n        async inputText() {\r\n            console.log(this.stu_content)\r\n            this.type = 0\r\n        },\r\n        async chat(SysInputText) {\r\n            this.$router.push({\r\n                name: 'NewChat', query: {\r\n                    project_id: 0,\r\n                    is_history: 0,\r\n                    res_id: this.resources_id,\r\n                    lang_time: this.lang_time,\r\n                    filePath: this.filePath,\r\n                    type: 0,\r\n                    stype: 'write_subject',\r\n                    from: 'write',\r\n                    chat_title: 'E-Write',\r\n                    system: this.subject_name,\r\n                    content: SysInputText\r\n                }\r\n            })\r\n        },\r\n        async to_chat() {\r\n            this.$router.push({\r\n                name: 'NewChat', query: {\r\n                    project_id: 0,\r\n                    is_history: 0,\r\n                    res_id: this.resources_id,\r\n                    lang_time: this.lang_time,\r\n                    filePath: this.filePath,\r\n                    type: this.type,\r\n                    stype: 'write_subject',\r\n                    from: 'write',\r\n                    chat_title: 'E-Write',\r\n                    system: this.subject_name,\r\n                    content: this.stu_content\r\n                }\r\n            })\r\n        },\r\n        async chang_speak() {\r\n            await this.recOpen();\r\n            this.is_speak = 0;\r\n            this.stu_placeholder = \"按住说话...\";\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n\r\n        async chang_hand() {\r\n            this.is_speak = 1;\r\n            this.stu_placeholder = \"请输入你的疑问...\";\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n\r\n        change_show_ai() {\r\n            this.is_show_ai = !this.is_show_ai\r\n        },\r\n        async recOpen() {\r\n            //创建录音对象\r\n            this.rec = Recorder({\r\n                type: \"mp3\" //录音格式，可以换成wav等其他格式\r\n                , sampleRate: 16000 //录音的采样率，越大细节越丰富越细腻\r\n                , bitRate: 16 //录音的比特率，越大音质越好\r\n                , onProcess: (buffers, powerLevel, bufferSampleRate) => {\r\n                    //录音实时回调，大约1秒调用12次本回调\r\n                    //可实时绘制波形，实时上传（发送）数据\r\n                    if (this.wave) this.wave.input(buffers[buffers.length - 1], powerLevel, bufferSampleRate);\r\n                }\r\n            });\r\n\r\n            //打开录音，获得权限\r\n            this.rec.open(() => {\r\n                console.log(\"录音已打开\");\r\n                if (this.$refs.recwave) {//创建音频可视化图形绘制对象\r\n                    this.wave = Recorder.WaveDiv({ elem: this.$refs.recwave });\r\n                }\r\n            }, (msg, isUserNotAllow) => {\r\n                //用户拒绝了录音权限，或者浏览器不支持录音\r\n                console.log((isUserNotAllow ? \"UserNotAllow，\" : \"\") + \"无法录音:\" + msg);\r\n            });\r\n            // this.startRecognition(); // 启动语音识别\r\n        },\r\n        async recStart() {\r\n            if (!this.rec) { console.error(\"未打开录音\"); return }\r\n            this.rec.start();\r\n            this.stu_placeholder = '正在说话';\r\n            this.speaking = true;\r\n            console.log(\"已开始录音\");\r\n            if (this.recognition) {\r\n                this.recognition.start(); // 启动语音识别\r\n            }\r\n        },\r\n        async recStop() {\r\n            if (!this.rec) { console.error(\"未打开录音\"); return }\r\n            this.rec.stop((blob, duration) => {\r\n                //blob就是我们要的录音文件对象，可以上传，或者本地播放\r\n                this.recBlob = blob;\r\n                //简单利用URL生成本地文件地址，此地址只能本地使用，比如赋值给audio.src进行播放，赋值给a.href然后a.click()进行下载（a需提供download=\"xxx.mp3\"属性）\r\n                var localUrl = (window.URL).createObjectURL(blob);\r\n                console.log(\"录音成功\", blob, localUrl, \"时长:\" + duration + \"ms\");\r\n                this.stu_placeholder = '按住说话';\r\n                this.lang_time = (duration / 1000).toFixed()\r\n                this.type = 1\r\n                this.speaking = false;\r\n                this.upload(blob);//把blob文件上传到服务器\r\n                if (this.recognition) {\r\n                    this.recognition.stop(); // 停止语音识别\r\n                }\r\n                // this.rec.close();//关闭录音，释放录音资源，当然可以不释放，后面可以连续调用start\r\n                // this.rec = null;\r\n            }, (err) => {\r\n                console.error(\"结束录音出错：\" + err);\r\n                // this.rec.close();//关闭录音，释放录音资源，当然可以不释放，后面可以连续调用start\r\n                // this.rec = null;\r\n            });\r\n        },\r\n        startRecognition() {\r\n            const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;\r\n            if (SpeechRecognition) {\r\n                this.recognition = new SpeechRecognition();\r\n                // 配置和使用 recognition 对象\r\n            } else {\r\n                console.error('该浏览器不支持语音识别');\r\n            }\r\n\r\n            this.recognition.continuous = true;\r\n            this.recognition.interimResults = true;\r\n            this.recognition.lang = 'en-US';\r\n\r\n            this.recognition.onresult = (event) => {\r\n                let interimTranscript = '';\r\n                let finalTranscript = '';\r\n\r\n                for (let i = event.resultIndex; i < event.results.length; i++) {\r\n                    if (event.results[i].isFinal) {\r\n                        finalTranscript += event.results[i][0].transcript;\r\n                    } else {\r\n                        interimTranscript += event.results[i][0].transcript;\r\n                    }\r\n                }\r\n\r\n                this.content = finalTranscript || interimTranscript;\r\n            };\r\n\r\n            this.recognition.onerror = (event) => {\r\n                console.error('识别错误: ', event.error);\r\n            };\r\n\r\n            this.recognition.onend = () => {\r\n                console.log('识别结束' + this.content);\r\n            };\r\n        },\r\n        async upload(blob) {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    var form = new FormData();\r\n                    form.append(\"file\", blob, user.sid + \"-\" + new Date().getTime() + \".mp3\"); //和普通form表单并无二致，后端接收到upfile参数的文件，文件名为recorder.mp3\r\n                    form.append(\"key\", \"value\"); //其他参数\r\n\r\n                    var xhr = new XMLHttpRequest();\r\n                    xhr.open(\"POST\", \"https://elang.zju.edu.cn:8082/mobileupload/upload\");\r\n                    // xhr.open(\"POST\", \"https://zju.3dease.com/fcapi/mobileupload/upload\");\r\n                    xhr.onreadystatechange = () => {\r\n                        if (xhr.readyState === 4) {\r\n                            if (xhr.status === 200) {\r\n                                // 请求成功，解析响应\r\n                                var response = JSON.parse(xhr.responseText);\r\n                                console.log(\"上传成功，服务器返回的数据:\", response);\r\n                                this.filePath = response.data.url\r\n                                // 在这里处理服务器返回的数据\r\n                                // this.startRecognition()\r\n                                this.type = 1; //消息类型\r\n                                this.to_chat()\r\n                            } else {\r\n                                // 请求失败，处理错误\r\n                                console.error(\"上传失败，状态码:\", xhr.status);\r\n                                console.error(\"错误信息:\", xhr.statusText);\r\n                            }\r\n                        }\r\n                    };\r\n                    xhr.send(form);\r\n\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async recPlay() {\r\n            //本地播放录音试听，可以直接用URL把blob转换成本地播放地址，用audio进行播放\r\n            var localUrl = URL.createObjectURL(this.recBlob);\r\n            var audio = document.createElement(\"audio\");\r\n            audio.controls = true;\r\n            document.body.appendChild(audio);\r\n            audio.src = localUrl;\r\n            audio.play(); //这样就能播放了\r\n\r\n            //注意不用了时需要revokeObjectURL，否则霸占内存\r\n            setTimeout(function () { URL.revokeObjectURL(audio.src) }, 5000);\r\n        },\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n    }\r\n}\r\n</script>\r\n\r\n\r\n<style scoped>\r\n.check-main-ai {\r\n    width: 100vw;\r\n    height: auto;\r\n    max-height: 400px;\r\n    overflow-y: auto;\r\n    background: linear-gradient(134deg, #eff7fe, #e3f3ff);\r\n    padding-bottom: 25px;\r\n    position: fixed;\r\n    bottom: 0px;\r\n    border-radius: 40px 40px 0 0;\r\n    z-index: 200;\r\n}\r\n\r\n.guanbi {\r\n    width: auto;\r\n    height: auto;\r\n    position: fixed;\r\n    right: 10px;\r\n    text-align: center;\r\n    padding: 8px 15px;\r\n    font-weight: bold;\r\n    /* background-color: rgba(236, 221, 10, 0.3); */\r\n    border-radius: 40px;\r\n}\r\n\r\n.wyt-say {\r\n    width: 75px;\r\n    height: 75px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.say-text {\r\n    width: 300px;\r\n    height: 75px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 60px;\r\n    font-size: 14px;\r\n}\r\n\r\n.fast-parent {\r\n    padding-left: 10vw;\r\n}\r\n\r\n.fast-box {\r\n    width: 80px;\r\n    height: 55px;\r\n    background: #ffffff;\r\n    border-radius: 0px 20px 0px 20px;\r\n    border: 1px solid #acc5ff;\r\n    margin-left: 5px;\r\n    color: #686868;\r\n    font-size: 12px;\r\n    text-align: center;\r\n    padding: 8px 9px;\r\n    text-align: center;\r\n    margin-bottom: 110px;\r\n    align-items: center;\r\n    display: flex;\r\n    float: left;\r\n}\r\n\r\n.fast-box:last-child {\r\n    margin-right: 0;\r\n}\r\n\r\n.input-box {\r\n    width: 80vw;\r\n    height: 42px;\r\n    background: #ffffff;\r\n    border-radius: 16px;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border: none;\r\n}\r\n\r\n.question {\r\n    padding: 10px 60px 10px 15px;\r\n    font-size: 14px;\r\n    color: #000;\r\n    border: none;\r\n}\r\n\r\n.placeholder {\r\n    font-size: 14px;\r\n    color: #989898;\r\n    padding: 3px 15px;\r\n}\r\n\r\n.say-box {\r\n    width: 60px;\r\n    height: 42px;\r\n    background: #ffffff;\r\n    border-radius: 15px;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 293px;\r\n}\r\n\r\n.say-img {\r\n    width: 10px;\r\n    height: 15px;\r\n    padding: 7px 25px;\r\n}\r\n\r\n.send-img {\r\n    width: 53px;\r\n    height: 30px;\r\n    position: fixed;\r\n    bottom: 50px;\r\n    left: 293px;\r\n}\r\n\r\n.other-img {\r\n    width: 25px;\r\n    height: 25px;\r\n    position: fixed;\r\n    bottom: 53px;\r\n    left: 326px;\r\n}\r\n\r\n.button-default {\r\n    background: #fff;\r\n    /* color: #000000; */\r\n    height: 42px;\r\n    width: 323px;\r\n    line-height: 25px;\r\n    text-align: center;\r\n    border-radius: 21;\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n    border: none;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border-radius: 16px;\r\n}\r\n\r\n.button-speaking {\r\n    background: linear-gradient(134deg, #4499ee 0%, #9ce4ff 100%);\r\n    color: #fff;\r\n    height: 42px;\r\n    width: 333px;\r\n    line-height: 25px;\r\n    /* text-align: center; */\r\n    border-radius: 21px;\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n    z-index: 100;\r\n    border: none;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    left: 10vw;\r\n    border-radius: 16px;\r\n}\r\n\r\n.wyt {\r\n    position: fixed;\r\n    bottom: 60px;\r\n    right: 5px;\r\n    width: 75px;\r\n    height: 75px;\r\n}\r\n\r\n.btn-test {\r\n    position: absolute;\r\n    top: 0;\r\n}\r\n\r\n.btn-test2 {\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WritePraxisAi.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WritePraxisAi.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./WritePraxisAi.vue?vue&type=template&id=5447a879&scoped=true\"\nimport script from \"./WritePraxisAi.vue?vue&type=script&lang=js\"\nexport * from \"./WritePraxisAi.vue?vue&type=script&lang=js\"\nimport style0 from \"./WritePraxisAi.vue?vue&type=style&index=0&id=5447a879&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"5447a879\",\n  null\n  \n)\n\nexport default component.exports","<template>\r\n  <div class=\"praxis\">\r\n    <van-nav-bar title=\"笔下生花\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n    <div class=\"wrap-text\" v-html=\"resources.resources.content\"></div>\r\n    <div class=\"wrap-text\" v-html=\"jobList[0].title\"></div>\r\n\r\n    <div class=\"writing\">\r\n      <!-- <div class=\"stu-writing\" disabled> -->\r\n        <!-- <textarea v-model=\"writing\" maxlength=\"8000\" placeholder=\"请输入写作内容\" /> -->\r\n         {{ writing }}\r\n      <!-- </div> -->\r\n    </div>\r\n    <div class=\"btn-other\" @click=\"to_write\">去写作</div>\r\n    <!-- <div class=\"btn-other\" @click=\"to_write\" v-if=\"writing.length > 0\">重写</div> -->\r\n    <div class=\"btn-ok\" @click=\"submit_paper\">交卷</div>\r\n    <WritePraxisAi :resources_id=\"resources_id\" allow=\"microphone\" />\r\n  </div>\r\n</template>\r\n<script>\r\nimport { getJobList, updateUserStudy, jobAnswer } from '@/api/listen'\r\nimport { writeSubmit } from '@/api/user'\r\nimport WritePraxisAi from \"@/components/WritePraxisAi\";\r\nimport { decrypt } from '@/api/aes'\r\nexport default {\r\n  components: { WritePraxisAi },\r\n  name: 'Praxis',\r\n  data() {\r\n    return {\r\n      resources: [],\r\n      cur: {},\r\n      visible: false,\r\n      answer_show: false,\r\n      total_time: '',\r\n      currentTime: '0:00',\r\n      audio_status: 1,\r\n      checkValue: 0,\r\n      title_status: 1,\r\n      resources_id: 0,\r\n      writing: '',\r\n      src: \"\",\r\n      jobList: [],\r\n      stu_placeholder: \"请输入你的疑问...\",\r\n      stu_content: '',\r\n      is_speak: 1,\r\n      canuse: 1,\r\n      speaking: false,\r\n      writting_text: '去写作'\r\n    }\r\n  },\r\n  methods: {\r\n    async onClickLeft() {\r\n      history.back()\r\n    },\r\n    async getJobList() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await getJobList({ sid: user.sid, resource_id: this.resources_id })\r\n          const data = response.data\r\n          var jobList = response.data.jobList;\r\n          jobList = JSON.parse(decrypt(jobList))\r\n          data.jobList = jobList\r\n          console.log(jobList)\r\n          jobList.forEach(item => {\r\n            item.is_check = 0;\r\n            if (item.optionsArray == null) {\r\n              item.optionsArray = JSON.parse(item.options)\r\n              console.log(item.optionsArray)\r\n            }\r\n            item.optionsArray.forEach(child => {\r\n              child.is_check = 0;\r\n            });\r\n          });\r\n          this.resources = data\r\n          console.log(data)\r\n          this.jobList = jobList\r\n          this.src = data.resources.file_path\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n\r\n    async getJobAnswer() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await jobAnswer({ sid: user.sid, resource_id: this.resources_id })\r\n          const data = response.data\r\n        \r\n          var countTotal = data.countTotal\r\n          var rightCountTotal = data.rightCountTotal\r\n          var right_bfb = (rightCountTotal / countTotal) * 100\r\n          right_bfb = right_bfb.toFixed(0)\r\n          this.answer_info = data\r\n          var jobAnswerList = data.jobAnswerList.reverse()\r\n          var str = jobAnswerList[0].answer;\r\n          if (str != null) {\r\n            var str1 = str.replace('{\"writing\":\"', '');\r\n            var str2 = str1.replace('\"},', '');\r\n            var str3 = str2.replace('\"}', '');\r\n            jobAnswerList[0].answer = str3\r\n          }\r\n          this.jobAnswerList = jobAnswerList[0]\r\n          this.writing = localStorage.getItem('userWriting' + this.resources_id)\r\n          var writing = localStorage.getItem('userWriting' + this.resources_id)\r\n          if(writing){\r\n            console.log(111)\r\n          }else{\r\n            this.writing = ''\r\n          }\r\n          console.log(this.jobAnswerList)\r\n          this.right_bfb = right_bfb\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n\r\n    async change_card() {\r\n      this.show = !this.show\r\n      console.log(this.jobList)\r\n    },\r\n    async submit_paper() {\r\n      var data = {\r\n        writing: this.writing\r\n      }\r\n      var resource_id = this.resources_id\r\n      var log_id = this.log_id\r\n      const user = JSON.parse(localStorage.getItem('user'))\r\n      console.log(this.resources.jobList[0].id)\r\n      const response = await writeSubmit({\r\n        result: JSON.stringify(data),\r\n        sid: user.sid,\r\n        log_id: log_id,\r\n        job_id: this.resources.jobList[0].id,\r\n        resource_id: resource_id\r\n      })\r\n      if (response.code == 100) {\r\n        const resp = await updateUserStudy({ id: this.log_id })\r\n        if (resp.code == 100) {\r\n          this.$router.push({ name: 'WriteReport', query: { resource_id: this.resources_id } })\r\n        }\r\n      }\r\n    },\r\n    async to_write() {\r\n      this.$router.push({ name: 'Write', query: { resource_id: this.resources_id, log_id: this.log_id } })\r\n    },\r\n\r\n  },\r\n  mounted() {\r\n    // 在组件挂载后立即获取任务数据\r\n    // 在组件挂载后立即获取任务数据\r\n    this.log_id = this.$route.query.log_id;\r\n    this.resources_id = this.$route.query.resources_id;\r\n    this.writing = localStorage.getItem('userWriting' + this.resources_id)\r\n    this.getJobList()\r\n    this.getJobAnswer()\r\n  }\r\n}\r\n</script>\r\n<style scoped>\r\n.praxis-item {\r\n  width: 90%;\r\n  height: auto;\r\n  margin: 0 auto;\r\n  text-align: left;\r\n}\r\n\r\n.writing {\r\n  width: 350px;\r\n  height: 150px;\r\n  padding: 12px;\r\n  margin-top: 30px;\r\n  margin-bottom: 50px;\r\n}\r\n\r\n.stu-writing {\r\n  margin-top: 15px;\r\n  border: 1px solid #8B8B8B;\r\n  border-radius: 15px;\r\n  padding: 30px 15px;\r\n  height: 120px;\r\n}\r\n\r\n.stu-writing>textarea {\r\n  width: 100%;\r\n  height: 100%;\r\n  border: none;\r\n}\r\n\r\n.answer-desc {\r\n  padding-left: 10px;\r\n  font-size: 14px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 300px;\r\n}\r\n\r\n.wrap-text {\r\n  width: 90%;\r\n  height: auto;\r\n  margin: 0 auto;\r\n  text-align: left;\r\n  padding: 10px 0;\r\n}\r\n\r\n.btn-ok {\r\n  width: 144px;\r\n  height: 45px;\r\n  background: #003F88;\r\n  border-radius: 23px;\r\n  margin: 0 auto;\r\n  line-height: 45px;\r\n  text-align: center;\r\n  color: #FFF;\r\n  margin-top: 100px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.btn-other {\r\n  width: 144px;\r\n  height: 45px;\r\n  background: #b4b4b6;\r\n  border-radius: 23px;\r\n  margin: 0 25px;\r\n  line-height: 45px;\r\n  text-align: center;\r\n  color: #FFF;\r\n  margin-top: 100px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Praxis.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Praxis.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Praxis.vue?vue&type=template&id=b78df3dc&scoped=true\"\nimport script from \"./Praxis.vue?vue&type=script&lang=js\"\nexport * from \"./Praxis.vue?vue&type=script&lang=js\"\nimport style0 from \"./Praxis.vue?vue&type=style&index=0&id=b78df3dc&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"b78df3dc\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"praxis\"},[_c('van-nav-bar',{attrs:{\"title\":\"笔下生花\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticClass:\"wrap-text\",attrs:{\"v-html\":_vm.resources.content}}),_c('div',{staticClass:\"writing\"},[_c('div',{staticClass:\"stu-writing\"},[_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.writing),expression:\"writing\"}],attrs:{\"maxlength\":\"8000\",\"placeholder\":\"请输入写作内容\"},domProps:{\"value\":(_vm.writing)},on:{\"input\":function($event){if($event.target.composing)return;_vm.writing=$event.target.value}}})])]),_c('WritePraxisAi',{attrs:{\"resources_id\":_vm.resources_id,\"allow\":\"microphone\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"praxis\">\r\n        <van-nav-bar title=\"笔下生花\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <div class=\"wrap-text\" :v-html=\"resources.content\"></div>\r\n        <div class=\"writing\">\r\n            <div class=\"stu-writing\">\r\n                <textarea v-model=\"writing\" maxlength=\"8000\" placeholder=\"请输入写作内容\" />\r\n            </div>\r\n        </div>\r\n        \r\n        <WritePraxisAi :resources_id=\"resources_id\" allow=\"microphone\" />\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getJobList, updateUserStudy } from '@/api/listen'\r\nimport { writeSubmit } from '@/api/user'\r\nimport WritePraxisAi from \"@/components/WritePraxisAi\";\r\nexport default {\r\n    components: { WritePraxisAi },\r\n    name: 'Praxis',\r\n    data() {\r\n        return {\r\n            resources: [],\r\n            cur: {},\r\n            visible: false,\r\n            answer_show: false,\r\n            total_time: '',\r\n            currentTime: '0:00',\r\n            audio_status: 1,\r\n            checkValue: 0,\r\n            title_status: 1,\r\n            resource_id: 0,\r\n            writing: '',\r\n            src: \"\",\r\n            jobList: [],\r\n            stu_placeholder: \"请输入你的疑问...\",\r\n            stu_content: '',\r\n            is_speak: 1,\r\n            canuse: 1,\r\n            speaking: false,\r\n            writting_text: '去写作',\r\n            user_answer: ''\r\n        }\r\n    },\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        async get_resources() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getJobList({ sid: user.sid, resource_id: this.resource_id })\r\n                    console.log(response.data.resources)\r\n                    const data = response.data\r\n                    var jobList = response.data.jobList;\r\n                    var user_answer = jobList[jobList.length - 1].user_answer.split(/[}]/)\r\n                    \r\n                    this.resources = data.resources\r\n                    console.log(data)\r\n                    this.jobList = jobList\r\n                    this.user_answer = JSON.parse(user_answer[0] + \"}\"),\r\n                    this.writing = this.resources.jobList[0].title\r\n                    this.src = data.resources.file_path\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n\r\n        async change_card() {\r\n            this.show = !this.show\r\n            console.log(this.jobList)\r\n        },\r\n        async submit_paper() {\r\n            var data = {\r\n                writing: this.writing\r\n            }\r\n            var resource_id = this.resources_id\r\n            var log_id = this.log_id\r\n            const user = JSON.parse(localStorage.getItem('user'))\r\n            console.log(resource_id)\r\n            const response = await writeSubmit({\r\n                result: JSON.stringify(data),\r\n                sid: user.sid,\r\n                log_id: log_id,\r\n                job_id: this.resources.resources.id,\r\n                resource_id: resource_id\r\n            })\r\n            if (response.code == 100) {\r\n                const resp = await updateUserStudy({ id: this.log_id })\r\n                if (resp.code == 100) {\r\n                    this.$router.push({ name: 'WriteReport', query: { resource_id: this.resources_id } })\r\n                }\r\n            }\r\n        },\r\n        async to_write() {\r\n            this.$router.push({ name: 'Write', query: { resource_id: this.resources_id, log_id: this.log_id } })\r\n        },\r\n\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        // 在组件挂载后立即获取任务数据\r\n        this.job_id = this.$route.query.job_id;\r\n        this.resource_id = this.$route.query.resource_id;\r\n        this.writing = localStorage.getItem('userWriting')\r\n        this.get_resources()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n.praxis-item {\r\n    width: 90%;\r\n    height: auto;\r\n    margin: 0 auto;\r\n    text-align: left;\r\n}\r\n\r\n.writing {\r\n    width: 350px;\r\n    height: 150px;\r\n    padding: 12px;\r\n    margin-top: 30px;\r\n}\r\n\r\n.stu-writing {\r\n    margin-top: 15px;\r\n    border: 1px solid #8B8B8B;\r\n    border-radius: 15px;\r\n    padding: 30px 15px;\r\n    height: 120px;\r\n}\r\n\r\n.stu-writing>textarea {\r\n    width: 100%;\r\n    height: 100%;\r\n    border: none;\r\n}\r\n\r\n.answer-desc {\r\n    padding-left: 10px;\r\n    font-size: 14px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 300px;\r\n}\r\n\r\n.wrap-text {\r\n    width: 90%;\r\n    height: auto;\r\n    margin: 0 auto;\r\n    text-align: left;\r\n    padding: 10px 0;\r\n}\r\n\r\n.btn-ok {\r\n    width: 144px;\r\n    height: 45px;\r\n    background: #003F88;\r\n    border-radius: 23px;\r\n    margin: 0 auto;\r\n    line-height: 45px;\r\n    text-align: center;\r\n    color: #FFF;\r\n    margin-top: 100px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.btn-other {\r\n    width: 144px;\r\n    height: 45px;\r\n    background: #b4b4b6;\r\n    border-radius: 23px;\r\n    margin: 0 25px;\r\n    line-height: 45px;\r\n    text-align: center;\r\n    color: #FFF;\r\n    margin-top: 100px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Detail.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Detail.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Detail.vue?vue&type=template&id=22b74cae&scoped=true\"\nimport script from \"./Detail.vue?vue&type=script&lang=js\"\nexport * from \"./Detail.vue?vue&type=script&lang=js\"\nimport style0 from \"./Detail.vue?vue&type=style&index=0&id=22b74cae&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"22b74cae\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"report\"},[_c('van-nav-bar',{attrs:{\"title\":\"写作报告\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticClass:\"answer-box\"},[_c('div',{staticClass:\"box-top\"},[_c('div',{staticClass:\"right-num\"},[_vm._v(\"100\")]),_c('div',{staticClass:\"total-num\"},[_vm._v(\"/\"+_vm._s((_vm.jobAnswerList.score * 100).toFixed(2)))]),_c('div',{staticClass:\"report-desc\"},[_vm._v(\"共100分，获得\"+_vm._s((_vm.jobAnswerList.score * 100).toFixed(2)))])]),_c('div',{staticClass:\"bottom-line\"}),_c('div',{staticClass:\"second-box\"},[_c('div',{staticClass:\"submit-time\"},[_vm._v(\"交卷时间：\"+_vm._s(_vm.jobAnswerList.create_time))]),_c('div',{staticClass:\"result\"},[_vm._v(\"正确率：\"+_vm._s(_vm.right_bfb)+\"%\")])]),_c('div',{staticClass:\"bottom-line\"}),_c('div',{staticClass:\"second-box\",on:{\"click\":_vm.to_ai}},[_c('div',{staticClass:\"submit-time\",staticStyle:{\"color\":\"rgb(125, 177, 247)\"}},[_vm._v(\"查看AI修改意见\")])])]),_c('RelList',{attrs:{\"resource_id\":this.$route.query.resource_id}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n  <div class=\"report\">\r\n    <van-nav-bar title=\"写作报告\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n\r\n    <div class=\"answer-box\">\r\n      <div class=\"box-top\">\r\n        <div class=\"right-num\">100</div>\r\n        <div class=\"total-num\">/{{ (jobAnswerList.score * 100).toFixed(2) }}</div>\r\n        <div class=\"report-desc\">共100分，获得{{ (jobAnswerList.score * 100).toFixed(2) }}</div>\r\n      </div>\r\n      <div class=\"bottom-line\"></div>\r\n      <div class=\"second-box\">\r\n        <div class=\"submit-time\">交卷时间：{{ jobAnswerList.create_time }}</div>\r\n        <div class=\"result\">正确率：{{ right_bfb }}%</div>\r\n      </div>\r\n      <div class=\"bottom-line\"></div>\r\n      <div class=\"second-box\" @click=\"to_ai\">\r\n        <div class=\"submit-time\" style=\"color: rgb(125, 177, 247);\">查看AI修改意见</div>\r\n      </div>\r\n\r\n    </div>\r\n    <RelList :resource_id=\"this.$route.query.resource_id\" />\r\n  </div>\r\n</template>\r\n<script>\r\nimport { jobAnswer } from '@/api/listen'\r\nimport RelList from \"../../components/RelList\";\r\n\r\nexport default {\r\n  components: { RelList },\r\n  name: 'Report',\r\n  data() {\r\n    return {\r\n      answer_info: [],\r\n      jobAnswerList: [],\r\n      RelList: [],\r\n      right_bfb: 0\r\n    }\r\n  },\r\n  methods: {\r\n    async onClickLeft() {\r\n      history.back()\r\n    },\r\n    async getJobAnswer() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await jobAnswer({ sid: user.sid, resource_id: this.resource_id })\r\n          const data = response.data\r\n          var countTotal = data.countTotal\r\n          var rightCountTotal = data.rightCountTotal\r\n          var right_bfb = (rightCountTotal / countTotal) * 100\r\n          right_bfb = right_bfb.toFixed(0)\r\n          this.answer_info = data\r\n          var jobAnswerList = data.jobAnswerList.reverse()\r\n          var str = jobAnswerList[0].answer;\r\n          if (str != null) {\r\n            var str1 = str.replace('{\"writing\":\"', '');\r\n            var str2 = str1.replace('\"},', '');\r\n            var str3 = str2.replace('\"}', '');\r\n            jobAnswerList[0].answer = str3\r\n          }\r\n          var NewjobAnswerList = jobAnswerList[0]\r\n          if (NewjobAnswerList.score > 1) {\r\n            NewjobAnswerList.score = 1\r\n          }\r\n          this.jobAnswerList = NewjobAnswerList\r\n          console.log(this.jobAnswerList)\r\n          this.right_bfb = right_bfb\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n\r\n    async to_detail(index) {\r\n      this.$router.push({ name: 'WriteDetail', query: { resource_id: this.resource_id, job_id: index } })\r\n    },\r\n    async to_ai() {\r\n      this.$router.push({\r\n        name: 'NormalChat', query: {\r\n          project_id: 0,\r\n          is_history: 0,\r\n          lang_time: 0,\r\n          filePath: '',\r\n          type: 0,\r\n          stype: 'write',\r\n          from: 'write_rivew',\r\n          chat_title: '笔下生花',\r\n          content: \"Give a brief comment and revision suggestion on this essay(with in 120 words):    \" + this.jobAnswerList.answer,\r\n          res_id: ''\r\n        }\r\n      })\r\n    }\r\n\r\n  },\r\n  mounted() {\r\n    // 在组件挂载后立即获取任务数据\r\n\r\n    this.resource_id = this.$route.query.resource_id;\r\n    console.log(this.$route.query.resource_id)\r\n    this.getJobAnswer()\r\n  }\r\n}\r\n</script>\r\n<style scoped>\r\n.report {\r\n  width: 100vw;\r\n  height: auto;\r\n  background: linear-gradient(to bottom, #E2F2FF, #FFF);\r\n}\r\n\r\n.main-top {\r\n  width: 100vw;\r\n  height: auto;\r\n  text-align: left;\r\n}\r\n\r\n.reback {\r\n  padding: 20px 0 0 12px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.pagetitle {\r\n  padding: 20px 0 0 150px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  font-size: 16px;\r\n  color: #030303;\r\n}\r\n\r\n.answer-box {\r\n  width: 90vw;\r\n  height: auto;\r\n  background: #FFFFFF;\r\n  box-shadow: 0 3px 6px 1px rgba(0, 0, 0, 0.05);\r\n  border-radius: 20px;\r\n  margin: 30px auto;\r\n  padding: 20px 0;\r\n}\r\n\r\n.box-top {\r\n  width: 90vw;\r\n  height: 50px;\r\n  text-align: left;\r\n}\r\n\r\n.right-num {\r\n  padding: 11px 0 0 30px;\r\n  font-size: 30px;\r\n  font-weight: bold;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.total-num,\r\n.report-desc {\r\n  padding: 29px 0 0 0px;\r\n  font-size: 12px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.report-desc {\r\n  padding-left: 28px;\r\n}\r\n\r\n.bottom-line {\r\n  width: 340px;\r\n  height: 1px;\r\n  margin: 13px auto;\r\n  background-color: #E4E4E4;\r\n}\r\n\r\n.second-box {\r\n  width: 320px;\r\n  height: 25px;\r\n  margin: 0 auto;\r\n  font-size: 12px;\r\n  color: #656565;\r\n  text-align: left;\r\n}\r\n\r\n.submit-time {\r\n  width: 240px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  text-align: left;\r\n}\r\n\r\n.result {\r\n  width: 80px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  text-align: right;\r\n}\r\n\r\n.result-box {\r\n  width: 320px;\r\n  height: auto;\r\n  margin: 0 auto;\r\n  font-size: 12px;\r\n  color: #656565;\r\n  text-align: left;\r\n}\r\n\r\n.result-item,\r\n.result-item-wrong {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 34px;\r\n  height: 34px;\r\n  border-radius: 34px;\r\n  margin: 5px;\r\n  background-color: #3CC57C;\r\n  line-height: 34px;\r\n  text-align: center;\r\n  font-size: 14px;\r\n  color: #FFF;\r\n  font-weight: 400;\r\n}\r\n\r\n.result-item-wrong {\r\n  background-color: #F85353;\r\n}\r\n\r\n.box-bottom {\r\n  width: 320px;\r\n  height: auto;\r\n  margin: 12px auto;\r\n  font-size: 12px;\r\n  color: #656565;\r\n  padding-bottom: 40rpx;\r\n  text-align: left;\r\n}\r\n\r\n.wrong-desc {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  padding-right: 30px;\r\n}\r\n\r\n.lable-desc {\r\n  width: 60px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.cicle {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 12px;\r\n  height: 12px;\r\n  background-color: #CBCBCB;\r\n  border-radius: 12px;\r\n}\r\n\r\n.desc {\r\n  /* width: 12px; */\r\n  color: #656565;\r\n  font-size: 10px;\r\n  line-height: 15px;\r\n  padding: 0 15px 0 5px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.about-send {\r\n  width: 90vw;\r\n  height: auto;\r\n  margin: 28px auto 0 auto;\r\n  text-align: left;\r\n}\r\n\r\n.title {\r\n  font-size: 16px;\r\n  padding-bottom: 7px;\r\n}\r\n\r\n.about-item {\r\n  width: 100%;\r\n  height: 85px;\r\n  background: #FFFFFF;\r\n  box-shadow: 0px 2px 10px 1px rgba(80, 143, 206, 0.1);\r\n  border-radius: 20px;\r\n  margin-bottom: 10px;\r\n}\r\n\r\n.item-cover {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 58px;\r\n  height: 58px;\r\n  border-radius: 10px;\r\n  margin: 14px 6px 0 12px;\r\n}\r\n\r\n.item-info {\r\n  width: 220px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  padding-top: 21px;\r\n}\r\n\r\n.info-title {\r\n  font-size: 14px;\r\n  font-weight: bold;\r\n  height: 20px;\r\n  overflow: hidden;\r\n  text-overflow: ellipsis;\r\n  white-space: nowrap;\r\n}\r\n\r\n.info-time {\r\n  color: #979797;\r\n  font-size: 12px;\r\n  padding-top: 15px;\r\n}\r\n\r\n.con-to-study {\r\n  width: 60px;\r\n  height: 85px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  line-height: 85px;\r\n  font-size: 12px;\r\n  color: #003F88;\r\n  text-align: center;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Report.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Report.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Report.vue?vue&type=template&id=5d888191&scoped=true\"\nimport script from \"./Report.vue?vue&type=script&lang=js\"\nexport * from \"./Report.vue?vue&type=script&lang=js\"\nimport style0 from \"./Report.vue?vue&type=style&index=0&id=5d888191&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"5d888191\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"index\"},[_c('van-nav-bar',{attrs:{\"title\":\"笔下生花\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticClass:\"main\"},[_c('div',{staticClass:\"list\"},[_c('div',{staticClass:\"tea-search\"},[_c('van-search',{attrs:{\"placeholder\":\"请输入搜索关键词\"},on:{\"input\":_vm.chang_tea},model:{value:(_vm.keyword),callback:function ($$v) {_vm.keyword=$$v},expression:\"keyword\"}})],1),_c('div',{staticClass:\"list-title\"},[_c('div',{staticClass:\"title-item\",class:{ 'check-item': _vm.checkType == 1 },on:{\"click\":function($event){return _vm.change_lable(1)}}},[_vm._v(\"预约老师 \")]),_c('div',{staticClass:\"title-item\",class:{ 'check-item': _vm.checkType == 2 },on:{\"click\":function($event){return _vm.change_lable(2)}}},[_vm._v(\"我的预约 \")])]),(_vm.checkType == 1)?_c('div',{staticClass:\"list-main\"},_vm._l((_vm.writeTeacherList),function(item,index){return _c('div',{key:index,staticClass:\"list-item\",on:{\"click\":function($event){return _vm.to_submit(item)}}},[_c('div',{staticClass:\"item-top\"},[_c('img',{staticClass:\"tea-pic\",attrs:{\"src\":item.avatar || 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png',\"mode\":\"widthFix\"}}),_c('div',{staticClass:\"tea-name\"},[_vm._v(_vm._s(item.name))]),_c('div',{staticClass:\"school-name\"},[_vm._v(_vm._s(item.college_name))]),(!_vm.isReservationFull(item) && item.orderNumTotal > 0 && item.orderNumTotal < 5)?_c('div',{staticClass:\"yuyue\"},[_vm._v(\" 仅剩\"+_vm._s(item.orderNumTotal)+\"名额\")]):_vm._e(),(!_vm.isReservationFull(item) && item.orderNumTotal > 4)?_c('div',{staticClass:\"yuyue\"},[_vm._v(\"预约\")]):_vm._e(),(_vm.isReservationFull(item))?_c('div',{staticClass:\"yuyue-man\"},[_vm._v(\"已满\")]):_vm._e()]),(item.labels != null)?_c('div',{staticClass:\"item-lable\"},[(item.labels[0])?_c('div',{staticClass:\"lable-item lable-item0\"},[_vm._v(\" \"+_vm._s(item.labels[0])+\" \")]):_vm._e(),(item.labels[1])?_c('div',{staticClass:\"lable-item lable-item1\"},[_vm._v(\" \"+_vm._s(item.labels[1])+\" \")]):_vm._e(),(item.labels[2])?_c('div',{staticClass:\"lable-item lable-item2\"},[_vm._v(\" \"+_vm._s(item.labels[2])+\" \")]):_vm._e(),(item.labels[3])?_c('div',{staticClass:\"lable-item lable-item3\"},[_vm._v(\" \"+_vm._s(item.labels[3])+\" \")]):_vm._e()]):_c('div',{staticClass:\"item-lable\"}),_c('div',{staticClass:\"address\"},[_vm._v(\"预约地点：\"+_vm._s(item.writeTeacherLog.addr))]),_c('div',{staticClass:\"yuyue-time\"},[_vm._v(\"预约时间：\"+_vm._s(item.writeTeacherLog.dateline)+\" \"+_vm._s(item.writeTeacherLog.logTimeList[0].timeline))])])}),0):_vm._e(),(_vm.checkType == 2)?_c('div',{staticClass:\"list-main\"},_vm._l((_vm.mineWriteTeacher),function(item,index){return _c('div',{key:index,staticClass:\"list-item\",on:{\"click\":function($event){return _vm.to_detail(item)}}},[_c('div',{staticClass:\"item-top\"},[_c('img',{staticClass:\"tea-pic\",attrs:{\"src\":_vm.teacherAvatar(item.avatar),\"mode\":\"widthFix\"}}),_c('div',{staticClass:\"tea-name\"},[_vm._v(_vm._s(item.teacher_name))]),_c('div',{staticClass:\"school-name\"},[_vm._v(_vm._s(item.college_name))]),(item.state == 1 && item.end_time > _vm.currentTime)?_c('div',{staticClass:\"yuyue\",on:{\"click\":function($event){return _vm.cancel_order(item)}}},[_vm._v(\" 取消预约\")]):_vm._e(),(item.state == 0)?_c('div',{staticClass:\"yuyue-man\"},[_vm._v(\"已取消\")]):_vm._e(),(item.state == 2)?_c('div',{staticClass:\"yuyue-man\",staticStyle:{\"background\":\"linear-gradient(to right, #FFF, #FFD23E)\"}},[_vm._v(\"已完成\")]):_vm._e()]),(item.labels != null)?_c('div',{staticClass:\"item-lable\"},[(item.labels[0])?_c('div',{staticClass:\"lable-item lable-item0\"},[_vm._v(\" \"+_vm._s(item.labels[0])+\" \")]):_vm._e(),(item.labels[1])?_c('div',{staticClass:\"lable-item lable-item1\"},[_vm._v(\" \"+_vm._s(item.labels[1])+\" \")]):_vm._e(),(item.labels[2])?_c('div',{staticClass:\"lable-item lable-item2\"},[_vm._v(\" \"+_vm._s(item.labels[2])+\" \")]):_vm._e(),(item.labels[3])?_c('div',{staticClass:\"lable-item lable-item3\"},[_vm._v(\" \"+_vm._s(item.labels[3])+\" \")]):_vm._e()]):_c('div',{staticClass:\"item-lable\"}),_c('div',{staticClass:\"address\"},[_vm._v(\"预约地点：\"+_vm._s(item.addr))]),_c('div',{staticClass:\"yuyue-time\"},[_vm._v(\"预约时间：\"+_vm._s(item.dateline)+\" \"+_vm._s(item.timeline))])])}),0):_vm._e()])])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","function toTimestamp(value) {\n  if (value === null || value === undefined || value === '') return NaN\n\n  if (typeof value === 'number' || /^\\d+(?:\\.\\d+)?$/.test(String(value).trim())) {\n    const timestamp = Number(value)\n    return timestamp < 1e12 ? timestamp * 1000 : timestamp\n  }\n\n  const timestamp = Date.parse(value)\n  return Number.isNaN(timestamp) ? NaN : timestamp\n}\n\nexport function isReservationExpired(item, now = Date.now()) {\n  const log = item && item.writeTeacherLog\n  const values = [\n    item && item.end_time,\n    item && item.endTime,\n    log && log.end_time,\n    log && log.endTime\n  ]\n  const deadline = values.map(toTimestamp).find(Number.isFinite)\n  return Number.isFinite(deadline) && deadline < now\n}\n\nexport function isReservationFull(item, now = Date.now()) {\n  return Number(item && item.orderNumTotal) <= 0 || isReservationExpired(item, now)\n}\n","<template>\r\n    <div class=\"index\">\r\n        <van-nav-bar title=\"笔下生花\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <div class=\"main\">\r\n            <!-- <div class=\"last-zhidao\">上次指导：2024年1月2日 | anny老师（已取消） </div> -->\r\n\r\n\r\n            <div class=\"list\">\r\n                <div class=\"tea-search\">\r\n                    <van-search v-model=\"keyword\" @input=\"chang_tea\" placeholder=\"请输入搜索关键词\" />\r\n                </div>\r\n                <div class=\"list-title\">\r\n                    <div class=\"title-item\" :class=\"{ 'check-item': checkType == 1 }\" @click=\"change_lable(1)\">预约老师\r\n                    </div>\r\n                    <div class=\"title-item\" :class=\"{ 'check-item': checkType == 2 }\" @click=\"change_lable(2)\">我的预约\r\n                    </div>\r\n                </div>\r\n                <div class=\"list-main\" v-if=\"checkType == 1\">\r\n                    <div class=\"list-item\" v-for=\"(item, index) in writeTeacherList\" v-bind:key=\"index\"\r\n                        @click=\"to_submit(item)\">\r\n                        <div class=\"item-top\">\r\n                            <img class=\"tea-pic\"\r\n                                :src=\"item.avatar || 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png'\"\r\n                                mode=\"widthFix\" />\r\n                            <div class=\"tea-name\">{{ item.name }}</div>\r\n                            <div class=\"school-name\">{{ item.college_name }}</div>\r\n                            <div class=\"yuyue\" v-if=\"!isReservationFull(item) && item.orderNumTotal > 0 && item.orderNumTotal < 5\">\r\n                                仅剩{{ item.orderNumTotal }}名额</div>\r\n                            <div class=\"yuyue\" v-if=\"!isReservationFull(item) && item.orderNumTotal > 4\">预约</div>\r\n                            <div class=\"yuyue-man\" v-if=\"isReservationFull(item)\">已满</div>\r\n                        </div>\r\n                        <div class=\"item-lable\" v-if=\"item.labels != null\">\r\n                            <!-- <div class=\"lable-item\" :class=\"lable-item+{{ key} } v-for=\"(val, key) in item.labels\" v-bind:key=\"key\">\r\n                                {{ val }}\r\n                            </div> -->\r\n                            <div class=\"lable-item lable-item0\" v-if=\"item.labels[0]\">\r\n                                {{ item.labels[0] }}\r\n                            </div>\r\n                            <div class=\"lable-item lable-item1\" v-if=\"item.labels[1]\">\r\n                                {{ item.labels[1] }}\r\n                            </div>\r\n                            <div class=\"lable-item lable-item2\" v-if=\"item.labels[2]\">\r\n                                {{ item.labels[2] }}\r\n                            </div>\r\n                            <div class=\"lable-item lable-item3\" v-if=\"item.labels[3]\">\r\n                                {{ item.labels[3] }}\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"item-lable\" v-else></div>\r\n                        <div class=\"address\">预约地点：{{ item.writeTeacherLog.addr }}</div>\r\n                        <div class=\"yuyue-time\">预约时间：{{ item.writeTeacherLog.dateline }}\r\n                            {{ item.writeTeacherLog.logTimeList[0].timeline }}</div>\r\n                    </div>\r\n                </div>\r\n                <div class=\"list-main\" v-if=\"checkType == 2\">\r\n                    <div class=\"list-item\" v-for=\"(item, index) in mineWriteTeacher\" v-bind:key=\"index\"\r\n                        @click=\"to_detail(item)\">\r\n                        <div class=\"item-top\">\r\n                            <img class=\"tea-pic\"\r\n                                :src=\"teacherAvatar(item.avatar)\"\r\n                                mode=\"widthFix\" />\r\n                            <div class=\"tea-name\">{{ item.teacher_name }}</div>\r\n                            <div class=\"school-name\">{{ item.college_name }}</div>\r\n                            <div class=\"yuyue\" @click=\"cancel_order(item)\" v-if=\"item.state == 1 && item.end_time > currentTime\">\r\n                                取消预约</div>\r\n                            <div class=\"yuyue-man\" v-if=\"item.state == 0\">已取消</div>\r\n                            <div class=\"yuyue-man\" style=\"background: linear-gradient(to right, #FFF, #FFD23E);\"\r\n                                v-if=\"item.state == 2\">已完成</div>\r\n                        </div>\r\n                        <div class=\"item-lable\" v-if=\"item.labels != null\">\r\n                            <!-- <div class=\"lable-item\" :class=\"lable-item+{{ key} } v-for=\"(val, key) in item.labels\" v-bind:key=\"key\">\r\n                                {{ val }}\r\n                            </div> -->\r\n                            <div class=\"lable-item lable-item0\" v-if=\"item.labels[0]\">\r\n                                {{ item.labels[0] }}\r\n                            </div>\r\n                            <div class=\"lable-item lable-item1\" v-if=\"item.labels[1]\">\r\n                                {{ item.labels[1] }}\r\n                            </div>\r\n                            <div class=\"lable-item lable-item2\" v-if=\"item.labels[2]\">\r\n                                {{ item.labels[2] }}\r\n                            </div>\r\n                            <div class=\"lable-item lable-item3\" v-if=\"item.labels[3]\">\r\n                                {{ item.labels[3] }}\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"item-lable\" v-else></div>\r\n                        <div class=\"address\">预约地点：{{ item.addr }}</div>\r\n                        <div class=\"yuyue-time\">预约时间：{{ item.dateline }} {{ item.timeline }}</div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n        </div>\r\n    </div>\r\n</template>\r\n<script>\r\nimport { UserResource, getList, getCateList } from '@/api/listen'\r\nimport { saveUserStudyResource, getMyNewFeedBack, writeTeacherList, getMyList, cancelOrder } from '@/api/user'\r\nimport { isReservationFull } from '@/utils/reservation'\r\nexport default {\r\n    name: 'Index',\r\n    data() {\r\n        return {\r\n            current: 0,\r\n            interval: 3000,\r\n            duration: 500,\r\n            indicatorDots: true,\r\n            checkType: 1,\r\n            keyword: '',\r\n            mineWriteTeacher: [],\r\n            currentTime: '',\r\n            writeTeacherList: []\r\n        }\r\n    },\r\n    created() {\r\n        // 当Vue实例被创建后\r\n        this.updateTime(); // 更新一次时间\r\n        setInterval(this.updateTime, 1000); // 每秒更新一次时间\r\n    },\r\n    methods: {\r\n        teacherAvatar(avatar) {\r\n            const value = typeof avatar === 'string' ? avatar.trim() : avatar\r\n            return value || 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png'\r\n        },\r\n        updateTime() {\r\n            this.currentTime = Date.now() / 1000; // 格式化时间\r\n            // console.log(this.currentTime)\r\n        },\r\n        isReservationFull(item) {\r\n            return isReservationFull(item, this.currentTime * 1000)\r\n        },\r\n        async change_lable(index) {\r\n            this.checkType = index\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n        async chang_tea() {\r\n            this.getMyList()\r\n            this.getWriteTeacherList()\r\n        },\r\n        async getMyNewFeedBack() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getMyNewFeedBack({ sid: user.sid })\r\n                    this.MyNewFeedBack = response.data\r\n\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async getMyList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getMyList({ sid: user.sid, keywords: this.keyword })\r\n                    var writeTeacher = response.data\r\n                    writeTeacher.forEach(item => {\r\n                        if (item.labels != null) {\r\n                            item.labels = item.labels.split(/[,，]/)\r\n                            item.end_time = new Date(item.end_time).getTime() / 1000\r\n                        }\r\n                    })\r\n                    this.mineWriteTeacher = writeTeacher\r\n\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n\r\n        async getWriteTeacherList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await writeTeacherList({ keywords: this.keyword })\r\n                    var writeTeacher = response.data\r\n                    writeTeacher.forEach(item => {\r\n                        if (item.labels != null) {\r\n                            item.labels = item.labels.split(/[,，]/)\r\n\r\n                        }\r\n                    })\r\n                    this.writeTeacherList = writeTeacher\r\n                    console.log(this.writeTeacherList)\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async cancel_order(item) {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await cancelOrder({\r\n                        log_id: item.log_id,\r\n                        log_time_id: item.log_time_id,\r\n                        id: item.id,\r\n                    })\r\n                    if (response.code == 100) {\r\n                        this.$message({\r\n                            message: '取消成功',\r\n                            center: true\r\n                        })\r\n                        this.getMyList()\r\n                        // 确保更新视图\r\n                        this.$forceUpdate();\r\n                    }\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async check_level(e) {\r\n            this.level = e\r\n        },\r\n        async check_time_level(e) {\r\n            this.time_level = e\r\n        },\r\n        async check_subject_cate_id(e) {\r\n            this.subject_cate_id = e\r\n        },\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        async to_praxis(item) {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    console.log(item)\r\n                    const response = await saveUserStudyResource({ sid: user.sid, resource_id: item.id })\r\n                    if (response.code == 100) {\r\n\r\n                        this.$router.push({ name: 'WritePraxis', query: { log_id: response.data, resources_id: item.id } })\r\n\r\n                    }\r\n\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async UserResource() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await UserResource({ sid: user.sid, category_id: 4 })\r\n                    const data = response.data\r\n                    this.NewUserResource = data\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async getList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    if (this.level == 0) { this.level = '' }\r\n                    if (this.subject_cate_id == 0) { this.subject_cate_id = '' }\r\n                    const response = await getList({ sid: user.sid, category_id: 4, level: this.level, subject_cate_id: this.subject_cate_id, keyword: this.keyword })\r\n                    const data = response.data\r\n                    this.listData = data\r\n                    this.show = false;\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async getCateList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getCateList()\r\n                    const data = response.data\r\n                    this.subjectCate = data\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async changShow() {\r\n            this.show = !this.show;\r\n        },\r\n        async to_learn(item) {\r\n            this.$router.push({ name: 'WriteLearn', query: { subject_id: item.id, subject_name: item.name } })\r\n        },\r\n        async to_submit(item) {\r\n            if (!this.isReservationFull(item) && item.orderNumTotal > 0) {\r\n                this.$router.push({ name: 'WriteSubmit', query: { tea_id: item.id } })\r\n            }else{\r\n                this.$message({\r\n                    message: '预约已满',\r\n                    center: true\r\n                })\r\n            }\r\n        },\r\n        async to_detail(item) {\r\n            this.$router.push({ name: 'MySubmit', query: { y_id: item.id } })\r\n        }\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        this.UserResource()\r\n        this.getList()\r\n        this.getCateList()\r\n        this.getMyList()\r\n        this.getWriteTeacherList()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n/* pages/write/second/list.wxss */\r\n.index {\r\n    background-color: #E2F2FF;\r\n    width: 100vw;\r\n    height: auto;\r\n}\r\n\r\n.last-zhidao {\r\n    padding-left: 29px;\r\n    color: #707070;\r\n    font-size: 12px;\r\n    padding-top: 20px;\r\n    margin-bottom: 20px;\r\n}\r\n\r\n.tea-search {\r\n    width: 339px;\r\n    height: 36px;\r\n    background: #E2F2FF;\r\n    border-radius: 25px;\r\n    /* opacity: 0.26; */\r\n    margin: 20px 16px;\r\n}\r\n\r\n.list {\r\n    width: 100vw;\r\n    height: 650px;\r\n    background-color: #FFF;\r\n    /* border-radius: 32px 32px 0 0; */\r\n    padding-top: 10px;\r\n    /* margin-top: 20px; */\r\n}\r\n\r\n.list-title {\r\n    width: 272px;\r\n    height: 30px;\r\n    margin: 0 auto;\r\n    padding-top: 21px;\r\n}\r\n\r\n.title-item {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 81px;\r\n    height: 26px;\r\n    text-align: center;\r\n}\r\n\r\n.title-item:last-child {\r\n    text-align: center;\r\n    margin-left: 110px;\r\n}\r\n\r\n.check-item {\r\n    border-bottom: 4px solid #6FDBFF;\r\n}\r\n\r\n.list-main {\r\n    width: 330px;\r\n    margin: 0 auto;\r\n    text-align: left;\r\n}\r\n\r\n.list-item {\r\n    width: 330px;\r\n    border-bottom: 1px solid #E4E4E4;\r\n    padding-top: 19px;\r\n}\r\n\r\n.item-top {}\r\n\r\n.tea-pic {\r\n    width: 33px;\r\n    height: 33px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.tea-name {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding: 6px 0px 3px 11px;\r\n    font-size: 16px;\r\n    font-weight: bold;\r\n    width: 100px;\r\n}\r\n\r\n.school-name {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    font-size: 10px;\r\n    color: #A1A1A1;\r\n    padding: 9px 0px 6px 0;\r\n    width: 100px;\r\n    text-align: center;\r\n}\r\n\r\n.yuyue {\r\n\r\n    width: 80px;\r\n    height: 29px;\r\n    background-color: #003F88;\r\n    border-radius: 23px;\r\n    font-size: 12px;\r\n    color: #FFF;\r\n    line-height: 29px;\r\n    text-align: center;\r\n    position: relative;\r\n    float: right;\r\n}\r\n\r\n.yuyue-man {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 80px;\r\n    height: 29px;\r\n    background-color: #C1C1C1;\r\n    border-radius: 23px;\r\n    font-size: 12px;\r\n    color: #FFF;\r\n    line-height: 29px;\r\n    text-align: center;\r\n}\r\n\r\n.item-lable {\r\n    padding: 7px 0 12px 0px;\r\n}\r\n\r\n.lable-item {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin-right: 8px;\r\n    padding: 2px 5px;\r\n    border-radius: 4px;\r\n    font-size: 10px;\r\n    color: #FFF;\r\n}\r\n\r\n.lable-item0 {\r\n    background-color: #57CE53;\r\n}\r\n\r\n.lable-item1 {\r\n    background-color: #80A9E6;\r\n}\r\n\r\n.lable-item2 {\r\n    background-color: #E47ACE;\r\n}\r\n\r\n.lable-item3 {\r\n    background-color: #def705;\r\n}\r\n\r\n.address,\r\n.yuyue-time {\r\n    font-size: 10px;\r\n    color: #4A4A4A;\r\n}\r\n\r\n.yuyue-time {\r\n    padding: 7px 0 15px 0;\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./List.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./List.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./List.vue?vue&type=template&id=30062f3d&scoped=true\"\nimport script from \"./List.vue?vue&type=script&lang=js\"\nexport * from \"./List.vue?vue&type=script&lang=js\"\nimport style0 from \"./List.vue?vue&type=style&index=0&id=30062f3d&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"30062f3d\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"index\"},[_c('van-nav-bar',{attrs:{\"title\":\"笔下生花\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticClass:\"model-title\"},[_vm._v(\"上次学习\")]),_c('div',{staticClass:\"last-learn\",on:{\"click\":function($event){return _vm.to_praxis(_vm.NewUserResource)}}},[_c('img',{staticClass:\"lesson-cover-img\",attrs:{\"src\":_vm.NewUserResource.cover,\"mode\":\"aspectFill\"}}),_c('div',{staticClass:\"lesson-info\"},[_c('div',{staticClass:\"lesson-name\"},[_vm._v(\"[写作]\"+_vm._s(_vm.NewUserResource.name))]),_c('div',{staticClass:\"lesson-time\"},[_vm._v(_vm._s(_vm.NewUserResource.create_time)+\"更新\")])]),(_vm.NewUserResource.status == 1)?_c('div',{staticClass:\"con-to-study\",attrs:{\"data-index\":_vm.NewUserResource.id}},[_vm._v(\"继续学习\")]):_vm._e(),(_vm.NewUserResource.status == 2)?_c('div',{staticClass:\"con-to-study\",attrs:{\"data-index\":_vm.NewUserResource.id}},[_vm._v(\"已学习\")]):_vm._e()]),_c('div',{staticClass:\"theme-listening\"},[_c('div',{staticClass:\"listening-top\"},[_c('div',{staticClass:\"listening-title\"},[_vm._v(\"主题列表\")]),_c('div',{staticClass:\"model-check\",on:{\"click\":_vm.changShow}},[_vm._v(\" 筛选 \"),_c('van-icon',{attrs:{\"name\":\"list-switch\",\"color\":\"#FFF\"}})],1)]),_vm._l((_vm.listData),function(item,index){return _c('div',{key:index,on:{\"click\":function($event){return _vm.to_learn(item)}}},[(item.resource_num > 0)?_c('div',{staticClass:\"listen-item\"},[_c('img',{staticClass:\"listen-cover\",attrs:{\"src\":item.cover,\"mode\":\"aspectFill\"}}),_c('div',{staticClass:\"listen-name\"},[_vm._v(\"[写作]\"+_vm._s(item.name))]),_c('div',{staticClass:\"listen-desc\"},[_vm._v(_vm._s(item.create_time)+\"|共\"+_vm._s(item.resource_num)+\"个资源包\")]),_c('div',{staticClass:\"listen-count\"},[_c('div',{staticClass:\"listening-now\"},[_c('div',{staticClass:\"count-detail\"},[_vm._v(_vm._s(item.read_num)+\"人正在学\")])]),(item.study_num > 0)?_c('div',{staticClass:\"listening-svg\"},[_vm._v(\"已学\"+_vm._s(item.study_num))]):_vm._e(),(item.study_num == 0)?_c('div',{staticClass:\"listening-svg can-check\"},[_vm._v(\"进入学习\")]):_vm._e()])]):_vm._e()])})],2),_c('van-popup',{staticStyle:{\"border-radius\":\"0 0 40px 40px\"},attrs:{\"position\":\"top\"},model:{value:(_vm.show),callback:function ($$v) {_vm.show=$$v},expression:\"show\"}},[_c('div',{staticClass:\"check-main\"},[_c('div',{staticClass:\"tea-search\"},[_c('van-search',{attrs:{\"placeholder\":\"请输入搜索关键词\"},model:{value:(_vm.keyword),callback:function ($$v) {_vm.keyword=$$v},expression:\"keyword\"}})],1),_c('div',{staticClass:\"check-item\"},[_c('div',{staticClass:\"check-item-lables\"},_vm._l((_vm.subjectCate),function(item,index){return _c('div',{key:index,class:['lable-item', _vm.keyword === item.name ? 'lable-item-check' : ''],attrs:{\"data-index\":item.id},on:{\"click\":function($event){return _vm.check_subject_cate_id(item)}}},[_vm._v(_vm._s(item.name)+\" \")])}),0)]),_c('div',{staticClass:\"btn-cancel\",on:{\"click\":_vm.changShow}},[_vm._v(\"取消\")]),_c('div',{staticClass:\"btn-ok\",on:{\"click\":_vm.to_share}},[_vm._v(\"确定\")])])]),_c('WriteAi',{attrs:{\"allow\":\"microphone\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n  <div class=\"index\">\r\n    <van-nav-bar title=\"笔下生花\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n\r\n    <div class=\"model-title\">上次学习</div>\r\n    <div class=\"last-learn\" @click=\"to_praxis(NewUserResource)\">\r\n      <img :src=\"NewUserResource.cover\" mode=\"aspectFill\" class=\"lesson-cover-img\" />\r\n      <div class=\"lesson-info\">\r\n        <div class=\"lesson-name\">[写作]{{ NewUserResource.name }}</div>\r\n        <div class=\"lesson-time \">{{ NewUserResource.create_time }}更新</div>\r\n      </div>\r\n      <div class=\"con-to-study\" :data-index=\"NewUserResource.id\" v-if=\"NewUserResource.status == 1\">继续学习</div>\r\n      <div class=\"con-to-study\" :data-index=\"NewUserResource.id\" v-if=\"NewUserResource.status == 2\">已学习</div>\r\n    </div>\r\n    <div class=\"theme-listening\">\r\n      <div class=\"listening-top\">\r\n        <div class=\"listening-title\">主题列表</div>\r\n        <div class=\"model-check\" @click=\"changShow\">\r\n          筛选\r\n          <van-icon name=\"list-switch\" color=\"#FFF\" />\r\n        </div>\r\n      </div>\r\n      <div v-for=\"(item, index) in listData\" :key=\"index\" @click=\"to_learn(item)\">\r\n        <div class=\"listen-item\" v-if=\"item.resource_num > 0\">\r\n          <img :src=\"item.cover\" mode=\"aspectFill\" class=\"listen-cover\" />\r\n          <div class=\"listen-name\">[写作]{{ item.name }}</div>\r\n          <div class=\"listen-desc\">{{ item.create_time }}|共{{ item.resource_num }}个资源包</div>\r\n          <div class=\"listen-count\">\r\n            <div class=\"listening-now\">\r\n              <div class=\"count-detail\">{{ item.read_num }}人正在学</div>\r\n            </div>\r\n            <div class=\"listening-svg\" v-if=\"item.study_num > 0\">已学{{ item.study_num }}</div>\r\n            <div class=\"listening-svg can-check\" v-if=\"item.study_num == 0\">进入学习</div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n    <van-popup v-model=\"show\" position=\"top\" style=\"border-radius: 0 0 40px 40px\">\r\n      <div class=\"check-main\">\r\n        <div class=\"tea-search\">\r\n          <van-search v-model=\"keyword\" placeholder=\"请输入搜索关键词\" />\r\n        </div>\r\n\r\n\r\n        <div class=\"check-item\">\r\n          <!-- <div class=\"check-item-title\">主题</div> -->\r\n          <div class=\"check-item-lables\">\r\n            <div @click=\"check_subject_cate_id(item)\"\r\n              :class=\"['lable-item', keyword === item.name ? 'lable-item-check' : '']\" :data-index=\"item.id\"\r\n              v-for=\"(item, index) in subjectCate\" :key=\"index\">{{ item.name }}\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"btn-cancel\" @click=\"changShow\">取消</div>\r\n        <div class=\"btn-ok\" @click=\"to_share\">确定</div>\r\n      </div>\r\n    </van-popup>\r\n    <WriteAi allow=\"microphone\" />\r\n  </div>\r\n</template>\r\n<script>\r\nimport { UserResource, getList, getCateList } from '@/api/listen'\r\nimport { saveUserStudyResource } from '@/api/user'\r\nimport WriteAi from \"@/components/WriteAi\";\r\nexport default {\r\n  components: { WriteAi },\r\n  name: 'Index',\r\n  data() {\r\n    return {\r\n      subjectCate: [],\r\n      NewUserResource: [],\r\n      listData: [],\r\n      show: false,\r\n      level: '',\r\n      time_level: '',\r\n      subject_cate_id: '',\r\n      keyword: '',\r\n    }\r\n  },\r\n  methods: {\r\n    async to_submit(item) {\r\n      this.$router.push({ name: 'WriteSubmit', query: { tea_id: item.id } })\r\n    },\r\n    async to_notice_list() {\r\n      this.$router.push({ name: 'WriteNotice' })\r\n\r\n    },\r\n    async to_share() {\r\n      this.$router.push({ name: 'Serch', query: { category_id: 4, keyword: this.keyword } })\r\n    },\r\n\r\n    async check_level(e) {\r\n      this.level = e\r\n    },\r\n    async check_time_level(e) {\r\n      this.time_level = e\r\n    },\r\n    async check_subject_cate_id(e) {\r\n      this.keyword = e.name\r\n    },\r\n    async onClickLeft() {\r\n      history.back()\r\n    },\r\n    async to_praxis(item) {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          console.log(item)\r\n          const response = await saveUserStudyResource({ sid: user.sid, resource_id: item.id })\r\n          if (response.code == 100) {\r\n\r\n            this.$router.push({ name: 'WritePraxis', query: { log_id: response.data, resources_id: item.id } })\r\n\r\n          }\r\n\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async UserResource() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await UserResource({ sid: user.sid, category_id: 4 })\r\n          const data = response.data\r\n          if (response.code == 100) {\r\n            this.NewUserResource = data\r\n          }\r\n\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async getList() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          if (this.level == 0) { this.level = '' }\r\n          if (this.subject_cate_id == 0) { this.subject_cate_id = '' }\r\n          const response = await getList({ sid: user.sid, category_id: 4, level: this.level, subject_cate_id: this.subject_cate_id, keyword: this.keyword })\r\n          const data = response.data\r\n          this.listData = data\r\n          this.show = false;\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async getCateList() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await getCateList()\r\n          const data = response.data\r\n          if (response.code == 100) {\r\n            this.subjectCate = data\r\n          }\r\n\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n    },\r\n    async changShow() {\r\n      this.show = !this.show;\r\n    },\r\n    async to_learn(item) {\r\n      this.$router.push({ name: 'WriteLearn', query: { subject_id: item.id, subject_name: item.name } })\r\n    },\r\n    async to_list() {\r\n      this.$router.push({ name: 'WriteTeaList' })\r\n    }\r\n  },\r\n  mounted() {\r\n    // 在组件挂载后立即获取任务数据\r\n\r\n    this.getList()\r\n    // this.getWriteTeacherList()\r\n    this.getCateList()\r\n    // this.getMyNewFeedBack()\r\n    this.UserResource()\r\n\r\n  }\r\n}\r\n</script>\r\n<style scoped>\r\n.item-top {\r\n  width: 100%;\r\n  height: 60px;\r\n}\r\n\r\n.item-title {\r\n  float: left;\r\n  padding: 22px 0 0 20px;\r\n  font-size: 16px;\r\n}\r\n\r\n.item-all {\r\n  padding-top: 25px;\r\n  color: #606060;\r\n  font-size: 12px;\r\n  float: right;\r\n}\r\n\r\n.stu-status-icon {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.xzzd {\r\n  width: 344px;\r\n  height: 170px;\r\n  padding: 18px 0 25px 31px;\r\n  text-align: left;\r\n}\r\n\r\n.scroll-div {\r\n  width: 344px;\r\n  height: 170px;\r\n  white-space: nowrap;\r\n}\r\n\r\n.scroll-div-item {\r\n  width: 114px;\r\n  height: 170px;\r\n  margin: 0 10px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  border-radius: 20px;\r\n}\r\n\r\n.scroll-div-item:nth-child(3n+1) {\r\n  background-color: #CBF2FE;\r\n}\r\n\r\n.scroll-div-item:nth-child(3n+2) {\r\n  background-color: #97DDFE;\r\n}\r\n\r\n.scroll-div-item:nth-child(3n+3) {\r\n  background-color: #81C5FF;\r\n}\r\n\r\n.user-pic {\r\n  width: 40px;\r\n  height: 40px;\r\n  padding: 19px 36px 5px 34px;\r\n}\r\n\r\n.tea-img {\r\n  width: 38px;\r\n  height: 38px;\r\n  border: 2px solid #FFF;\r\n  border-radius: 38px;\r\n}\r\n\r\n.tea-name {\r\n  color: #003F88;\r\n  font-size: 16px;\r\n  text-align: center;\r\n  margin-bottom: 2px;\r\n}\r\n\r\n.tea-lable {\r\n  color: #003F88;\r\n  font-size: 10px;\r\n  text-align: center;\r\n  width: 114px;\r\n  height: 30px;\r\n  overflow-wrap: break-word;\r\n}\r\n\r\n.lable-item1 {\r\n  height: 10px;\r\n  line-height: 10px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  border-right: 1px solid #003F88;\r\n  padding: 0 2px;\r\n}\r\n\r\n.lable-item1:last-child {\r\n  border: none;\r\n}\r\n\r\n.yuyue {\r\n  width: 76px;\r\n  height: 31px;\r\n  margin: 0 auto;\r\n  text-align: center;\r\n  border-radius: 16px;\r\n  margin-top: 15px;\r\n  line-height: 31px;\r\n  color: #FFF;\r\n  font-size: 12px;\r\n}\r\n\r\n.scroll-div-item:nth-child(3n+1)>.yuyue {\r\n  background-color: #84D7FD;\r\n}\r\n\r\n.scroll-div-item:nth-child(3n+2)>.yuyue {\r\n  background-color: #01A3F2;\r\n}\r\n\r\n.scroll-div-item:nth-child(3n+3)>.yuyue {\r\n  background-color: #017DE4;\r\n}\r\n\r\n.callback-tea-img {\r\n  width: 38px;\r\n  height: 38px;\r\n  padding: 18px 4px 0 0px;\r\n  border-radius: 38px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.callback-tea {\r\n  width: 350px;\r\n  padding-top: 26px;\r\n  margin: 0 auto;\r\n  text-align: left;\r\n}\r\n\r\n.parent-box {\r\n  padding-top: 26px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.callback-tea-name {\r\n  font-size: 12px;\r\n  font-weight: bold;\r\n\r\n}\r\n\r\n.callback-tea-content {\r\n  font-size: 12px;\r\n  color: #A1A1A1;\r\n  height: 14px;\r\n  line-height: 14px;\r\n  padding-top: 6px;\r\n  overflow: hidden;\r\n  width: 270px;\r\n}\r\n\r\n.callback-msg {\r\n  font-size: 14px;\r\n  height: auto;\r\n  line-height: 16px;\r\n  padding-top: 6px;\r\n  overflow: hidden;\r\n  width: 270px;\r\n}\r\n\r\n.stu-info {\r\n  width: 250px;\r\n  /* height: 40rpx; */\r\n  padding-left: 50px;\r\n  padding-top: 8px;\r\n}\r\n\r\n.stu-lable {\r\n  background-color: #C8C8C8;\r\n  width: 3px;\r\n  height: 10px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin-top: 6px;\r\n}\r\n\r\n.stu-ques {\r\n  width: 220px;\r\n  color: #A1A1A1;\r\n  font-size: 12px;\r\n  /*  */\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  line-height: 20px;\r\n  padding-left: 5px;\r\n}\r\n\r\n.head {\r\n  width: 100vw;\r\n  height: auto;\r\n  background: linear-gradient(to bottom, #E2F2FF, #FFF);\r\n  padding-bottom: 20px;\r\n}\r\n\r\n.model-title {\r\n  padding: 13px 0 11px 24px;\r\n  font-size: 16px;\r\n  text-align: left;\r\n}\r\n\r\n.last-learn {\r\n  width: 90vw;\r\n  height: 85px;\r\n  background: #FFFFFF;\r\n  box-shadow: 0px 2px 10px 1px rgba(80, 143, 206, 0.1);\r\n  border-radius: 20px 20px 20px 20px;\r\n  margin: 0 auto;\r\n}\r\n\r\n.lesson-cover-img {\r\n  width: 58px;\r\n  height: 58px;\r\n  padding: 14px 10px 0 13px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  border-radius: 5px;\r\n}\r\n\r\n.lesson-info {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  width: 185px;\r\n  height: 44px;\r\n  padding: 10px 5px 20px 0;\r\n  text-align: left;\r\n}\r\n\r\n.lesson-name {\r\n  font-size: 14px;\r\n  font-weight: bold;\r\n  padding-bottom: 9px;\r\n  overflow: hidden;\r\n  text-overflow: ellipsis;\r\n  white-space: nowrap;\r\n}\r\n\r\n.lesson-time {\r\n  font-size: 12px;\r\n  color: #979797;\r\n}\r\n\r\n.con-to-study {\r\n  width: 60px;\r\n  height: 85px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  line-height: 85px;\r\n  font-size: 12px;\r\n  color: #003F88;\r\n}\r\n\r\n.theme-listening {\r\n  width: 100vw;\r\n  min-height: 30px;\r\n  height: auto;\r\n  text-align: left;\r\n  /* margin: 0 auto; */\r\n  margin-top: 30px;\r\n}\r\n\r\n.listening-title {\r\n  padding: 13px 0 11px 24px;\r\n  font-size: 16px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.model-check {\r\n  width: 59px;\r\n  height: 24px;\r\n  background: #000000;\r\n  border-radius: 25px;\r\n  opacity: 0.26;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin-left: 183px;\r\n  margin-top: 15px;\r\n  color: #FFF;\r\n  line-height: 24px;\r\n  padding-left: 21px;\r\n  font-size: 14px;\r\n}\r\n\r\n.listen-item {\r\n  width: 90vw;\r\n  height: auto;\r\n  margin: 18px auto;\r\n  border-bottom: 1px #E4E4E4 solid;\r\n  padding-bottom: 20px;\r\n}\r\n\r\n.listen-cover {\r\n  width: 90vw;\r\n  height: 150px;\r\n  border-radius: 10px;\r\n}\r\n\r\n.listen-name {\r\n  font-size: 14px;\r\n  font-weight: bold;\r\n  padding-top: 10px;\r\n}\r\n\r\n.listen-desc {\r\n  font-size: 12px;\r\n  color: #979797;\r\n  padding: 5px 23px 0px 0;\r\n}\r\n\r\n.listening-now {\r\n  /* width: 250px; */\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  padding-right: 10px;\r\n}\r\n\r\n.count-detail {\r\n  vertical-align: top;\r\n  padding: 5px 5px 0rpx 0rpx;\r\n  font-size: 12px;\r\n  display: inline-block;\r\n  vertical-align: top;\r\n  color: #979797;\r\n}\r\n\r\n.listening-svg {\r\n  width: 70px;\r\n  height: 29px;\r\n  float: right;\r\n  line-height: 29px;\r\n  border: #003F88 solid 1px;\r\n  border-radius: 14px;\r\n  text-align: center;\r\n  margin-top: -12px;\r\n  font-size: 12px;\r\n}\r\n\r\n.can-check {\r\n  background-color: #003F88;\r\n  color: #FFF;\r\n}\r\n\r\n.check-main {\r\n  width: 100%;\r\n  height: auto;\r\n  max-height: 600px;\r\n  overflow-y: scroll;\r\n  border-radius: 0 0 40px 40px;\r\n  background-color: #FFF;\r\n  padding-bottom: 25px;\r\n}\r\n\r\n.tea-search {\r\n  width: 360px;\r\n  height: 36px;\r\n  background: #000000;\r\n  border-radius: 25px;\r\n  /* opacity: 0.26; */\r\n  margin: 11px auto;\r\n}\r\n\r\n.check-item {\r\n  width: 339px;\r\n  margin: 11px auto;\r\n  height: auto;\r\n  text-align: left;\r\n}\r\n\r\n.check-item-title {\r\n  font-size: 12px;\r\n  font-weight: bold;\r\n  text-align: left;\r\n}\r\n\r\n.check-item-lables {\r\n  margin-top: 15px;\r\n}\r\n\r\n.lable-item {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin-right: 12px;\r\n  margin-bottom: 12px;\r\n  border: solid 1px #F4F8FB;\r\n  background-color: #F4F8FB;\r\n  padding: 2px 5px;\r\n  border-radius: 20rpx;\r\n  font-size: 12px;\r\n  color: #989898;\r\n}\r\n\r\n.lable-item-check {\r\n  border: #699FDE solid 1px;\r\n  background-color: #E2F9FF;\r\n  color: #579ACE;\r\n}\r\n\r\n.btn-cancel {\r\n  width: 152px;\r\n  height: 39px;\r\n  border-radius: 20px;\r\n  border: 1px solid #828282;\r\n  text-align: center;\r\n  line-height: 39px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin-left: 22px;\r\n}\r\n\r\n.btn-ok {\r\n  width: 152px;\r\n  height: 39px;\r\n  border-radius: 20px;\r\n  color: #FFF;\r\n  background-color: #003F88;\r\n  border: 1px solid #828282;\r\n  text-align: center;\r\n  line-height: 39px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin-left: 22px;\r\n}\r\n</style>","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Index.vue?vue&type=template&id=5ee38a8c&scoped=true\"\nimport script from \"./Index.vue?vue&type=script&lang=js\"\nexport * from \"./Index.vue?vue&type=script&lang=js\"\nimport style0 from \"./Index.vue?vue&type=style&index=0&id=5ee38a8c&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"5ee38a8c\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"InterActive\"},[_c('van-nav-bar',{attrs:{\"title\":\"互动式记叙文\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_vm._m(0),_c('div',{staticClass:\"active-box\"},[_c('van-swipe',{ref:\"mySwipe\",staticClass:\"custom-swipe\",attrs:{\"show-indicators\":false,\"width\":_vm.calcItemWidth},on:{\"change\":_vm.changeSwioer}},_vm._l((_vm.swipeItems),function(item,index){return _c('van-swipe-item',{key:index},[_c('div',{staticClass:\"scroll-div-item\",class:{ 'one-bg': index === 0, 'more-bg': index === 1 },on:{\"click\":function($event){return _vm.changeWrite(index)}}},[_c('div',{staticClass:\"item-title\"},[_vm._v(_vm._s(item.title))]),_c('div',{staticClass:\"item-content\"},_vm._l((item.content),function(paragraph,pIndex){return _c('span',{key:pIndex,attrs:{\"data-item\":paragraph}},[_vm._v(_vm._s(paragraph))])}),0)])])}),1)],1),_c('div',{staticClass:\"user-notice\"},[_vm._v(\"请仔细阅读AI提供的内容，并学习其行文与语言表达（如词 汇、结构等），并尝试应用于自己的写作中，期待你与AI共 同创作的精彩故事。\")]),_c('div',{staticClass:\"start-write\",on:{\"click\":_vm.to_write}},[_vm._v(\"开始写作\")])],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"top-box\"},[_c('div',{staticClass:\"top-box-title\"},[_vm._v(\" 欢迎来到\"),_c('br'),_vm._v(\" 互动式记叙文写作~ \")])])\n}]\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"InterActive\">\r\n        <van-nav-bar title=\"互动式记叙文\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <div class=\"top-box\">\r\n            <div class=\"top-box-title\">\r\n                欢迎来到<br>\r\n                互动式记叙文写作~\r\n            </div>\r\n        </div>\r\n\r\n        <div class=\"active-box\">\r\n            <van-swipe class=\"custom-swipe\" :show-indicators=\"false\" ref=\"mySwipe\" :width=\"calcItemWidth\"\r\n                @change=\"changeSwioer\">\r\n                <van-swipe-item v-for=\"(item, index) in swipeItems\" :key=\"index\">\r\n                    <div class=\"scroll-div-item\" :class=\"{ 'one-bg': index === 0, 'more-bg': index === 1 }\"\r\n                        @click=\"changeWrite(index)\">\r\n                        <div class=\"item-title\">{{ item.title }}</div>\r\n                        <div class=\"item-content\">\r\n                            <span v-for=\"(paragraph, pIndex) in item.content\" :key=\"pIndex\" :data-item=\"paragraph\">{{\r\n                                paragraph }}</span>\r\n                        </div>\r\n                    </div>\r\n                </van-swipe-item>\r\n            </van-swipe>\r\n        </div>\r\n        <div class=\"user-notice\">请仔细阅读AI提供的内容，并学习其行文与语言表达（如词\r\n            汇、结构等），并尝试应用于自己的写作中，期待你与AI共\r\n            同创作的精彩故事。</div>\r\n        <div class=\"start-write\" @click=\"to_write\">开始写作</div>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\n\r\n\r\nexport default {\r\n\r\n    name: 'InterActive',\r\n    data() {\r\n        return {\r\n            calcItemWidth: 230,\r\n            check_index: 0,\r\n            resources_id: \"\", // 根据实际情况设置\r\n            swipeItems: [\r\n                {\r\n                    title: \"单轮互动\",\r\n                    content: [\r\n                        \"首先，首先，AI将提供一篇被抹去后半部分的英文故事。\",\r\n                        \"其次，请仔细阅读AI提供的故事，并在此基础上完成故事续写，不少于400词，限时45分钟。\"\r\n                    ]\r\n                },\r\n                {\r\n                    title: \"多轮互动\",\r\n                    content: [\r\n                        \"首先，故事的开头已由AI提供，请阅读并完成续写，长度应与AI提供的内容相似。\",\r\n                        \"随后，AI将根据你所写的内容，续写新的内容，请阅读并续写，长度应与AI提供的内容相似。\",\r\n                        \"最后，你和AI将分别撰写自己观点的结论部分，约100词。总时长为45分钟。\"\r\n                    ]\r\n                }\r\n            ]\r\n        }\r\n    },\r\n    computed: {\r\n        // 计算轮播项目宽度，确保响应式\r\n        calcItemWidth() {\r\n            return window.innerWidth * 0.9 - 40; // 减去两侧间距\r\n        }\r\n    },\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        changeSwioer(index) {\r\n            this.check_index = index;\r\n            console.log(index)\r\n            console.log(this.check_index)\r\n            this.$refs.mySwipe.swipeTo(index)\r\n        },\r\n        changeWrite(index) {\r\n            this.check_index = index;\r\n            this.$refs.mySwipe.swipeTo(index)\r\n        },\r\n        handleResize() {\r\n            this.$forceUpdate(); // 强制更新计算属性\r\n        },\r\n        to_write() {\r\n            console.log(this.check_index)\r\n            var check_index = this.check_index\r\n            localStorage.setItem('AiContent', [])\r\n            localStorage.setItem('userWritingToAi', [])\r\n            localStorage.setItem('AIWrite', [])\r\n            if (check_index == 1) {\r\n                this.$router.push({ name: 'PraxisOneInD' })\r\n            } else {\r\n                this.$router.push({ name: 'PraxisOneInC' })\r\n            }\r\n\r\n        }\r\n    },\r\n    mounted() {\r\n        // 监听窗口变化更新宽度\r\n        window.addEventListener('resize', this.handleResize);\r\n    },\r\n    beforeDestroy() {\r\n        window.removeEventListener('resize', this.handleResize);\r\n    },\r\n}\r\n</script>\r\n<style scoped>\r\n.van-nav-bar {\r\n    background: none;\r\n}\r\n\r\n.top-box {\r\n    width: 100vw;\r\n    height: 400px;\r\n    background: url('../../../assets/img/inter_disc.png') no-repeat;\r\n    position: absolute;\r\n    background-size: contain;\r\n    top: 0;\r\n}\r\n\r\n.top-box-title {\r\n    position: relative;\r\n    top: 170px;\r\n    padding-left: 28px;\r\n    font-size: 20px;\r\n    line-height: 30px;\r\n    font-weight: bold;\r\n    color: #333;\r\n}\r\n\r\n.active-box {\r\n    width: 100vw;\r\n    height: auto;\r\n    position: absolute;\r\n    top: 280px;\r\n    padding: 0 5%;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.custom-swipe {\r\n    width: 100%;\r\n    height: 400px;\r\n    border-radius: 20px;\r\n}\r\n\r\n.van-swipe-item:first-child {\r\n    width: 212px !important;\r\n    height: 376px;\r\n    margin: 0 20px;\r\n}\r\n\r\n.scroll-div-item {\r\n    width: 212px;\r\n    height: 376px;\r\n    padding: 20px;\r\n    box-sizing: border-box;\r\n    border-radius: 20px;\r\n    background-size: cover;\r\n    display: flex;\r\n    flex-direction: column;\r\n    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.one-bg {\r\n    background: url('../../../assets/img/one.png') no-repeat center center;\r\n    background-size: cover;\r\n}\r\n\r\n.more-bg {\r\n    background: url('../../../assets/img/more.png') no-repeat center center;\r\n    background-size: cover;\r\n}\r\n\r\n.item-title {\r\n    font-size: 22px;\r\n    font-weight: bold;\r\n    color: #333;\r\n}\r\n\r\n.item-content {\r\n    /* background: rgba(255, 255, 255, 0.8); */\r\n    padding: 15px 10px;\r\n    border-radius: 12px;\r\n    flex: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n    justify-content: center;\r\n}\r\n\r\n.item-content span {\r\n    white-space: normal;\r\n    text-align: left;\r\n    line-height: 1.2;\r\n    margin-bottom: 6px;\r\n    font-size: 16px;\r\n    color: #555;\r\n    display: block;\r\n    text-indent: 2em;\r\n}\r\n\r\n.user-notice {\r\n    width: 90vw;\r\n    height: 60px;\r\n    text-align: left;\r\n    margin: 10px auto;\r\n    width: 90vw;\r\n    height: auto;\r\n    position: relative;\r\n    top: 680px;\r\n}\r\n\r\n.start-write {\r\n    width: 90vw;\r\n    height: 45px;\r\n    text-align: center;\r\n    margin: 10px auto;\r\n    position: relative;\r\n    top: 700px;\r\n    background: #003F88;\r\n    border-radius: 23px 23px 23px 23px;\r\n    color: #FFF;\r\n    line-height: 45px;\r\n}\r\n</style>","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InteractiveDiscussion.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InteractiveDiscussion.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./InteractiveDiscussion.vue?vue&type=template&id=6d48a21c&scoped=true\"\nimport script from \"./InteractiveDiscussion.vue?vue&type=script&lang=js\"\nexport * from \"./InteractiveDiscussion.vue?vue&type=script&lang=js\"\nimport style0 from \"./InteractiveDiscussion.vue?vue&type=style&index=0&id=6d48a21c&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"6d48a21c\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"InterActive\"},[_c('van-nav-bar',{attrs:{\"title\":\"互动式议论文\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_vm._m(0),_c('div',{staticClass:\"active-box\"},[_c('van-swipe',{ref:\"mySwipe\",staticClass:\"custom-swipe\",attrs:{\"show-indicators\":false,\"width\":_vm.calcItemWidth},on:{\"change\":_vm.changeSwioer}},_vm._l((_vm.swipeItems),function(item,index){return _c('van-swipe-item',{key:index},[_c('div',{staticClass:\"scroll-div-item\",class:{ 'one-bg': index === 0, 'more-bg': index === 1 },on:{\"click\":function($event){return _vm.changeWrite(index)}}},[_c('div',{staticClass:\"item-title\"},[_vm._v(_vm._s(item.title))]),_c('div',{staticClass:\"item-content\"},_vm._l((item.content),function(paragraph,pIndex){return _c('span',{key:pIndex,attrs:{\"data-item\":paragraph}},[_vm._v(_vm._s(paragraph))])}),0)])])}),1)],1),_c('div',{staticClass:\"user-notice\"},[_vm._v(\"请仔细阅读AI提供的内容，并学习其行文与语言表达（如词 汇、结构等），并尝试应用于自己的写作中。期待你与AI的 精彩辩论！\")]),_c('div',{staticClass:\"start-write\",on:{\"click\":_vm.to_write}},[_vm._v(\"开始写作\")])],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"top-box\"},[_c('div',{staticClass:\"top-box-title\"},[_vm._v(\" 欢迎来到\"),_c('br'),_vm._v(\" 互动式议论文写作~ \")])])\n}]\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"InterActive\">\r\n        <van-nav-bar title=\"互动式议论文\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <div class=\"top-box\">\r\n            <div class=\"top-box-title\">\r\n                欢迎来到<br>\r\n                互动式议论文写作~\r\n            </div>\r\n        </div>\r\n\r\n        <div class=\"active-box\">\r\n            <van-swipe class=\"custom-swipe\" :show-indicators=\"false\" ref=\"mySwipe\" :width=\"calcItemWidth\"\r\n                @change=\"changeSwioer\">\r\n                <van-swipe-item v-for=\"(item, index) in swipeItems\" :key=\"index\">\r\n                    <div class=\"scroll-div-item\" :class=\"{ 'one-bg': index === 0, 'more-bg': index === 1 }\"\r\n                        @click=\"changeWrite(index)\">\r\n                        <div class=\"item-title\">{{ item.title }}</div>\r\n                        <div class=\"item-content\">\r\n                            <span v-for=\"(paragraph, pIndex) in item.content\" :key=\"pIndex\" :data-item=\"paragraph\">{{\r\n                                paragraph }}</span>\r\n                        </div>\r\n                    </div>\r\n                </van-swipe-item>\r\n            </van-swipe>\r\n        </div>\r\n        <div class=\"user-notice\">请仔细阅读AI提供的内容，并学习其行文与语言表达（如词\r\n            汇、结构等），并尝试应用于自己的写作中。期待你与AI的\r\n            精彩辩论！</div>\r\n        <div class=\"start-write\" @click=\"to_write\">开始写作</div>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\n\r\n\r\nexport default {\r\n\r\n    name: 'InterActive',\r\n    data() {\r\n        return {\r\n            calcItemWidth: 230,\r\n            check_index: 0,\r\n            resources_id: \"\", // 根据实际情况设置\r\n            swipeItems: [\r\n                {\r\n                    title: \"单轮互动\",\r\n                    content: [\r\n                        \"首先，AI将提供一篇包括引言、论据以及总结的完整议论文。\",\r\n                        \"其次，请针对AI所写的议论文写一篇驳论，提出与AI相反的观点。\",\r\n                        \"文章的结构与长度应与AI提供的文章相似，不少于400词，限时45分钟。\"\r\n                    ]\r\n                },\r\n                {\r\n                    title: \"多轮互动\",\r\n                    content: [\r\n                        \"首先，AI将提供自己议论文的引言部分，请你以此为样例，撰写相反引言。\",\r\n                        \"其次，AI将提供支持其观点的第一条论点，请就此提出反驳论点，约100词。同理，将进行多轮辩论。\",\r\n                        \"最后，你和AI将分别撰写自己观点的结论部分，约100词。总时长为45分钟。\"\r\n                    ]\r\n                }\r\n            ]\r\n        }\r\n    },\r\n    computed: {\r\n        // 计算轮播项目宽度，确保响应式\r\n        calcItemWidth() {\r\n            return window.innerWidth * 0.9 - 40; // 减去两侧间距\r\n        }\r\n    },\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        changeSwioer(index) {\r\n            this.check_index = index;\r\n            console.log(index)\r\n            console.log(this.check_index)\r\n            this.$refs.mySwipe.swipeTo(index)\r\n        },\r\n        changeWrite(index) {\r\n            this.check_index = index;\r\n            this.$refs.mySwipe.swipeTo(index)\r\n        },\r\n        handleResize() {\r\n            this.$forceUpdate(); // 强制更新计算属性\r\n        },\r\n        to_write() {\r\n            console.log(this.check_index)\r\n            var check_index = this.check_index\r\n            localStorage.setItem('AiContent', [])\r\n            localStorage.setItem('userWritingToAi', [])\r\n            localStorage.setItem('AIWrite', [])\r\n            if (check_index == 1) {\r\n                this.$router.push({ name: 'PraxisOneInB' })\r\n            } else {\r\n                this.$router.push({ name: 'PraxisOneInA' })\r\n            }\r\n\r\n        }\r\n    },\r\n    mounted() {\r\n        // 监听窗口变化更新宽度\r\n        window.addEventListener('resize', this.handleResize);\r\n    },\r\n    beforeDestroy() {\r\n        window.removeEventListener('resize', this.handleResize);\r\n    },\r\n\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.van-nav-bar {\r\n    background: none;\r\n}\r\n\r\n.top-box {\r\n    width: 100vw;\r\n    height: 400px;\r\n    background: url('../../../assets/img/inter_disc.png') no-repeat;\r\n    position: absolute;\r\n    background-size: contain;\r\n    top: 0;\r\n}\r\n\r\n.top-box-title {\r\n    position: relative;\r\n    top: 170px;\r\n    padding-left: 28px;\r\n    font-size: 20px;\r\n    line-height: 30px;\r\n    font-weight: bold;\r\n    color: #333;\r\n}\r\n\r\n.active-box {\r\n    width: 100vw;\r\n    height: auto;\r\n    position: absolute;\r\n    top: 280px;\r\n    padding: 0 5%;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.custom-swipe {\r\n    width: 100%;\r\n    height: 400px;\r\n    border-radius: 20px;\r\n}\r\n\r\n.van-swipe-item:first-child {\r\n    width: 212px !important;\r\n    height: 376px;\r\n    margin: 0 20px;\r\n}\r\n\r\n.scroll-div-item {\r\n    width: 212px;\r\n    height: 376px;\r\n    padding: 20px;\r\n    box-sizing: border-box;\r\n    border-radius: 20px;\r\n    background-size: cover;\r\n    display: flex;\r\n    flex-direction: column;\r\n    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.one-bg {\r\n    background: url('../../../assets/img/one.png') no-repeat center center;\r\n    background-size: cover;\r\n}\r\n\r\n.more-bg {\r\n    background: url('../../../assets/img/more.png') no-repeat center center;\r\n    background-size: cover;\r\n}\r\n\r\n.item-title {\r\n    font-size: 22px;\r\n    font-weight: bold;\r\n    color: #333;\r\n}\r\n\r\n.item-content {\r\n    /* background: rgba(255, 255, 255, 0.8); */\r\n    padding: 15px 10px;\r\n    border-radius: 12px;\r\n    flex: 1;\r\n    display: flex;\r\n    flex-direction: column;\r\n    justify-content: center;\r\n}\r\n\r\n.item-content span {\r\n    white-space: normal;\r\n    text-align: left;\r\n    line-height: 1.2;\r\n    margin-bottom: 6px;\r\n    font-size: 16px;\r\n    color: #555;\r\n    display: block;\r\n    text-indent: 2em;\r\n}\r\n\r\n.user-notice {\r\n    width: 90vw;\r\n    height: 60px;\r\n    text-align: left;\r\n    margin: 10px auto;\r\n    width: 90vw;\r\n    height: auto;\r\n    position: relative;\r\n    top: 680px;\r\n}\r\n\r\n.start-write {\r\n    width: 90vw;\r\n    height: 45px;\r\n    text-align: center;\r\n    margin: 10px auto;\r\n    position: relative;\r\n    top: 700px;\r\n    background: #003F88;\r\n    border-radius: 23px 23px 23px 23px;\r\n    color: #FFF;\r\n    line-height: 45px;\r\n}\r\n</style>","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InterActive.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InterActive.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./InterActive.vue?vue&type=template&id=272fb0d8&scoped=true\"\nimport script from \"./InterActive.vue?vue&type=script&lang=js\"\nexport * from \"./InterActive.vue?vue&type=script&lang=js\"\nimport style0 from \"./InterActive.vue?vue&type=style&index=0&id=272fb0d8&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"272fb0d8\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"praxis\"},[_c('van-nav-bar',{attrs:{\"title\":\"单轮议论\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"discu-title\"},[_vm._v(\"辩题内容：\")]),_c('div',{staticClass:\"discu-content\"},[_vm._v(_vm._s(_vm.AiContent.content))]),_c('div',{staticClass:\"discu-title\"},[_vm._v(\"Al writing\")]),_c('div',{staticClass:\"discu-content\"},[_vm._v(\" \"+_vm._s(_vm.AIWrite)+\" \")]),_c('div',{staticClass:\"my-continuation\"},[_c('div',{staticClass:\"discu-title\"},[_vm._v(\"My continuation\")]),_c('div',{staticClass:\"continuation\"},[_vm._v(\" \"+_vm._s(_vm.writing)+\" \")])])]),_c('div',{staticClass:\"btn-other\",on:{\"click\":_vm.to_write}},[_vm._v(\"写驳论\")]),_c('div',{staticClass:\"btn-ok\",on:{\"click\":_vm.submit_paper}},[_vm._v(\"提交\")])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n  <div class=\"praxis\">\r\n    <van-nav-bar title=\"单轮议论\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n    <div class=\"content\">\r\n      <div class=\"discu-title\">辩题内容：</div>\r\n      <div class=\"discu-content\">{{ AiContent.content }}</div>\r\n      <div class=\"discu-title\">Al writing</div>\r\n      <div class=\"discu-content\">\r\n        {{ AIWrite }}\r\n      </div>\r\n      <div class=\"my-continuation\">\r\n        <div class=\"discu-title\">My continuation</div>\r\n        <div class=\"continuation\">\r\n          {{ writing }}\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n\r\n    <div class=\"btn-other\" @click=\"to_write\">写驳论</div>\r\n    <div class=\"btn-ok\" @click=\"submit_paper\">提交</div>\r\n\r\n  </div>\r\n</template>\r\n<script>\r\nimport { getSubject, writingAiFetch, historySave } from '@/api/user'\r\nexport default {\r\n  name: 'Praxis',\r\n  data() {\r\n    return {\r\n      resources: [],\r\n      cur: {},\r\n      visible: false,\r\n      answer_show: false,\r\n      total_time: '',\r\n      currentTime: '0:00',\r\n      audio_status: 1,\r\n      checkValue: 0,\r\n      title_status: 1,\r\n      resources_id: 0,\r\n      writing: '',\r\n      src: \"\",\r\n      jobList: [],\r\n      stu_placeholder: \"请输入你的疑问...\",\r\n      stu_content: '',\r\n      is_speak: 1,\r\n      canuse: 1,\r\n      speaking: false,\r\n      writting_text: '去写作',\r\n      AiContent: [],\r\n      AIWrite: ''\r\n    }\r\n  },\r\n  methods: {\r\n    async onClickLeft() {\r\n      history.back()\r\n    },\r\n    async submit_paper() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await historySave({\r\n            subject_title: \"(topic:\" +this.AiContent.topic +\")\" + this.AiContent.content, sid: user.sid, user_input: JSON.stringify({\r\n              index: 0,\r\n              answer: this.AIWrite,\r\n              question: this.writing\r\n            }),\r\n            type_id: 1,\r\n            class_id: 1,\r\n          })\r\n          console.log(response)\r\n          if (response.code == 100) {\r\n            this.$message({\r\n              message: '提交成功',\r\n              center: true\r\n            })\r\n            localStorage.setItem('AiContent', [])\r\n            localStorage.setItem('userWritingToAi', [])\r\n            localStorage.setItem('AIWrite', [])\r\n            this.$router.push({ name: 'HistoryDetail', query: { his_id: response.data } })\r\n          }\r\n\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n\r\n    },\r\n    async get_subject() {\r\n      const response = await getSubject({ type_id: 1 })\r\n      this.AiContent = response.data.content\r\n      localStorage.setItem('AiContent', JSON.stringify(response.data.content))\r\n      this.writingAiFetch()\r\n      console.log(response)\r\n    },\r\n    async writingAiFetch() {\r\n      const response = await writingAiFetch({\r\n        type_id: 1,\r\n        class_id: 1,\r\n        Level: 3,\r\n        userinput: this.AiContent.content,\r\n        // preuserinput: {}\r\n      })\r\n      this.AIWrite = response.data.content\r\n      localStorage.setItem('AIWrite', this.AIWrite)\r\n      console.log(response)\r\n    },\r\n    async to_write() {\r\n      this.$router.push({\r\n        path: '/write/writea',\r\n        query: { writeTitle: '单轮议论' }\r\n      }).catch(err => {\r\n        if (err.name !== 'NavigationDuplicated') {\r\n          console.error(\"Navigation error:\", err);\r\n        }\r\n      });\r\n    },\r\n\r\n  },\r\n  mounted() {\r\n    // localStorage.setItem('AiContent', [])\r\n    // localStorage.setItem('userWritingToAi', [])\r\n    const writing = localStorage.getItem('userWritingToAi')\r\n    if (writing) {\r\n      this.writing = writing\r\n      this.AiContent = JSON.parse(localStorage.getItem('AiContent'))\r\n      this.AIWrite = localStorage.getItem('AIWrite')\r\n    } else {\r\n      this.get_subject()\r\n    }\r\n  }\r\n\r\n}\r\n</script>\r\n<style scoped>\r\n.content {\r\n  width: 90vw;\r\n  padding: 0 5vw;\r\n}\r\n\r\n.discu-title {\r\n  font-family: Microsoft YaHei, Microsoft YaHei;\r\n  font-weight: bold;\r\n  font-size: 14px;\r\n  color: #000000;\r\n  text-align: left;\r\n  font-style: normal;\r\n  text-transform: none;\r\n}\r\n\r\n.discu-content {\r\n  font-family: Microsoft YaHei, Microsoft YaHei;\r\n  font-size: 14px;\r\n  color: #000000;\r\n  text-align: left;\r\n  font-style: normal;\r\n  text-transform: none;\r\n  margin: 20px 0;\r\n  word-wrap: break-word;\r\n  overflow-wrap: break-word;\r\n}\r\n\r\n.my-continuation {\r\n  background: #eaeaec;\r\n  min-height: 200px;\r\n  height: auto;\r\n  padding: 20px;\r\n  border-radius: 10px;\r\n}\r\n\r\n.continuation {\r\n  color: #000;\r\n  margin-top: 10px;\r\n  word-wrap: break-word;\r\n  overflow-wrap: break-word;\r\n}\r\n\r\n.btn-ok {\r\n  width: 144px;\r\n  height: 45px;\r\n  background: #003F88;\r\n  border-radius: 23px;\r\n  margin: 0 auto;\r\n  line-height: 45px;\r\n  text-align: center;\r\n  color: #FFF;\r\n  margin-top: 100px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.btn-other {\r\n  width: 144px;\r\n  height: 45px;\r\n  /* background: #b4b4b6; */\r\n  border-radius: 23px;\r\n  margin: 0 25px;\r\n  line-height: 45px;\r\n  text-align: center;\r\n  border: 1px solid #b4b4b6;\r\n  margin-top: 100px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n\r\n}\r\n</style>","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PraxisOneInA.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PraxisOneInA.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PraxisOneInA.vue?vue&type=template&id=12eb2483&scoped=true\"\nimport script from \"./PraxisOneInA.vue?vue&type=script&lang=js\"\nexport * from \"./PraxisOneInA.vue?vue&type=script&lang=js\"\nimport style0 from \"./PraxisOneInA.vue?vue&type=style&index=0&id=12eb2483&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"12eb2483\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"praxis\"},[_c('van-nav-bar',{attrs:{\"title\":\"多轮议论\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),(!_vm.idloading)?_c('div',{staticClass:\"loading-box\"},[_c('van-loading',{attrs:{\"size\":\"30px\",\"color\":\"red\"}},[_vm._v(\"对话生成中请耐心等待...\")])],1):_vm._e(),_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"discu-title\"},[_vm._v(\"辩题内容：\")]),_c('div',{staticClass:\"discu-content\"},[_vm._v(_vm._s(_vm.AiContent.content))]),_c('div',{staticClass:\"line\"}),_c('div',{staticClass:\"change-btn\"},[_c('div',{staticClass:\"btn-item\",class:{ 'btn-active': _vm.only_AI == true },on:{\"click\":_vm.only_AIFun}},[_vm._v(\"只看AI\")]),_c('div',{staticClass:\"btn-item\",class:{ 'btn-active': _vm.only_My == true },on:{\"click\":_vm.only_MyFun}},[_vm._v(\"只看我\")])]),_c('div',{ref:\"scrollContainer\",staticClass:\"content\"},_vm._l((_vm.msg_list),function(item,index){return _c('div',{key:index},[(_vm.only_My == false)?_c('div',{staticClass:\"discu-content1\",class:`discu-content1-${index}`},[_c('div',{staticClass:\"detail\"},[_vm._v(\" \"+_vm._s(item.answer)+\" \")])]):_vm._e(),(_vm.only_AI == false)?_c('div',{ref:el => _vm.setItemRef(el, index),refInFor:true,staticClass:\"discu-content2\",class:`discu-content2-${index}`},[_c('div',{staticClass:\"detail\"},[_vm._v(\" \"+_vm._s(item.question)+\" \")])]):_vm._e(),_c('div',{staticClass:\"all-line\"})])}),0)]),(_vm.idloading)?_c('div',{staticClass:\"bottom-btn\"},[_c('div',{staticClass:\"btn-other\",on:{\"click\":_vm.to_write}},[_vm._v(\"写驳论\")]),_c('div',{staticClass:\"btn-ok\",on:{\"click\":_vm.submit_paper}},[_vm._v(\"提交\")])]):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n  <div class=\"praxis\">\r\n    <van-nav-bar title=\"多轮议论\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n    <div class=\"loading-box\" v-if=\"!idloading\">\r\n      <van-loading size=\"30px\" color=\"red\">对话生成中请耐心等待...</van-loading>\r\n    </div>\r\n    <div class=\"content\">\r\n      <div class=\"discu-title\">辩题内容：</div>\r\n      <div class=\"discu-content\">{{ AiContent.content }}</div>\r\n      <div class=\"line\"></div>\r\n      <div class=\"change-btn\">\r\n        <div class=\"btn-item\" :class=\"{ 'btn-active': only_AI == true }\" @click=\"only_AIFun\">只看AI</div>\r\n        <div class=\"btn-item\" :class=\"{ 'btn-active': only_My == true }\" @click=\"only_MyFun\">只看我</div>\r\n      </div>\r\n      <div class=\"content\" ref=\"scrollContainer\">\r\n        <div v-for=\"(item, index) in msg_list\" v-bind:key=\"index\">\r\n          <div class=\"discu-content1\" :class=\"`discu-content1-${index}`\" v-if=\"only_My == false\">\r\n            <div class=\"detail\">\r\n              {{ item.answer }}\r\n            </div>\r\n          </div>\r\n          <div class=\"discu-content2\" :class=\"`discu-content2-${index}`\" v-if=\"only_AI == false\" :ref=\"el => setItemRef(el, index)\">\r\n            <div class=\"detail\">\r\n              {{ item.question }}\r\n            </div>\r\n          </div>\r\n          <div class=\"all-line\"></div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n\r\n    <div class=\"bottom-btn\" v-if=\"idloading\">\r\n      <div class=\"btn-other\" @click=\"to_write\">写驳论</div>\r\n      <div class=\"btn-ok\" @click=\"submit_paper\">提交</div>\r\n    </div>\r\n\r\n  </div>\r\n</template>\r\n<script>\r\nimport { getSubject, writingAiFetch, historySave } from '@/api/user'\r\nexport default {\r\n  name: 'Praxis',\r\n  data() {\r\n    return {\r\n      resources: [],\r\n      cur: {},\r\n      visible: false,\r\n      answer_show: false,\r\n      only_AI: false,\r\n      only_My: false,\r\n      total_time: '',\r\n      currentTime: '0:00',\r\n      audio_status: 1,\r\n      checkValue: 0,\r\n      title_status: 1,\r\n      resources_id: 0,\r\n      writing: '',\r\n      src: \"\",\r\n      jobList: [],\r\n      stu_placeholder: \"请输入你的疑问...\",\r\n      stu_content: '',\r\n      is_speak: 1,\r\n      canuse: 1,\r\n      speaking: false,\r\n      writting_text: '去写作',\r\n      AiContent: [],\r\n      AIWrite: '',\r\n      msg_list: [],\r\n      autoScrollEnabled: true, // 3. 自动滚动标志\r\n      itemRefs: [], // 4. 存储discu-content2元素引用\r\n      idloading:false\r\n    }\r\n  },\r\n  watch: {\r\n    // 7. 监听消息列表变化，自动滚动\r\n    msg_list: {\r\n      handler() {\r\n        this.scrollToLastMessage();\r\n      },\r\n      deep: true\r\n    }\r\n  },\r\n  methods: {\r\n    async onClickLeft() {\r\n      history.back()\r\n    },\r\n    async only_AIFun() {\r\n      this.only_AI = !this.only_AI\r\n      this.only_My = false\r\n    },\r\n    async only_MyFun() {\r\n      this.only_My = !this.only_My\r\n      this.only_AI = false\r\n    },\r\n    async get_subject() {\r\n      const response = await getSubject({ type_id: 1 })\r\n      this.AiContent = response.data.content\r\n      localStorage.setItem('AiContent', JSON.stringify(response.data.content))\r\n      this.writingAiFetch()\r\n      console.log(response)\r\n    },\r\n    async submit_paper() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await historySave({\r\n            subject_title: \"(topic:\" +this.AiContent.topic +\")\" + this.AiContent.content,\r\n            sid: user.sid,\r\n            user_input: JSON.stringify(this.msg_list),\r\n            type_id: 1,\r\n            class_id: 2,\r\n          })\r\n          console.log(response)\r\n          if (response.code == 100) {\r\n            this.$message({\r\n              message: '提交成功',\r\n              center: true\r\n            })\r\n            localStorage.setItem('AiContent', [])\r\n            localStorage.setItem('userWritingToAi', [])\r\n            localStorage.setItem('AIWrite', [])\r\n            this.$router.push({ name: 'HistoryDetail', query: { his_id: response.data } })\r\n          }\r\n\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n\r\n    },\r\n    async writingAiFetch() {\r\n      const response = await writingAiFetch({\r\n        type_id: 1,\r\n        class_id: 2,\r\n        Level: 3,\r\n        userinput: this.AiContent.content,\r\n        // preuserinput: {}\r\n      })\r\n      this.AIWrite = response.data.content\r\n      this.$set(this.msg_list, this.msg_list.length, {\r\n        index: this.msg_list.length,\r\n        answer: response.data.content,\r\n        question: ''\r\n      })\r\n      localStorage.setItem('AIWrite', JSON.stringify(this.msg_list))\r\n       this.scrollToLastMessage();\r\n       this.idloading = true\r\n      console.log(this.msg_list)\r\n    },\r\n    async to_write() {\r\n      this.$router.push({\r\n        path: '/write/writeb',\r\n        query: { writeTitle: '多轮议论' }\r\n      }).catch(err => {\r\n        if (err.name !== 'NavigationDuplicated') {\r\n          console.error(\"Navigation error:\", err);\r\n        }\r\n      });\r\n    },\r\n    setItemRef(el, index) {\r\n      // 5. 收集每个discu-content2元素的引用\r\n      if (el) {\r\n        this.itemRefs[index] = el;\r\n      }\r\n    },\r\n    scrollToLastMessage() {\r\n      if (!this.autoScrollEnabled) return; // 如果用户手动滚动了，则停止自动滚动\r\n\r\n      this.$nextTick(() => {\r\n        const container = this.$refs.scrollContainer;\r\n        const lastIndex = this.msg_list.length - 1;\r\n        const lastElement = this.itemRefs[lastIndex]; // 获取最后一个discu-content2元素\r\n\r\n        if (lastElement) {\r\n          // 6. 方式一：平滑滚动到该元素（推荐）\r\n          lastElement.scrollIntoView({\r\n            behavior: 'smooth',\r\n            block: 'nearest'\r\n          });\r\n          // 方式二：直接滚动到底部（替代方案）\r\n          // container.scrollTop = container.scrollHeight;\r\n        }\r\n      });\r\n    }\r\n  },\r\n  mounted() {\r\n    // this.get_subject()\r\n    // localStorage.setItem('AIWrite', [])\r\n    // localStorage.setItem('AiContent', [])\r\n\r\n    // 8. 初始滚动到底部\r\n    this.scrollToLastMessage();\r\n    \r\n    // 9. 监听容器的滚动事件，判断是否为用户手动操作\r\n    const container = this.$refs.scrollContainer;\r\n    if (container) {\r\n      container.addEventListener('scroll', () => {\r\n        // 简单判断：如果滚动条不在最底部，则认为是用户手动滚动\r\n        const threshold = 100; // 设置一个阈值，比如距离底部100px以内不算手动滚动\r\n        const isNearBottom = container.scrollHeight - container.scrollTop - container.clientHeight <= threshold;\r\n        \r\n        if (!isNearBottom) {\r\n          this.autoScrollEnabled = false;\r\n        } else {\r\n          this.autoScrollEnabled = true;\r\n        }\r\n      });\r\n    }\r\n    const writing = localStorage.getItem('AIWrite')\r\n\r\n    if (writing) {\r\n      console.log(\"检查\" + writing)\r\n      this.msg_list = JSON.parse(writing)\r\n      this.AiContent = JSON.parse(localStorage.getItem('AiContent'))\r\n      var last_ques = this.msg_list[this.msg_list.length - 1].question\r\n      if (last_ques != '' && this.msg_list.length < 5) {\r\n        this.writingAiFetch()\r\n      }else{\r\n        this.idloading = true\r\n      }\r\n    } else {\r\n      this.get_subject()\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style scoped>\r\n.loading-box{\r\n  width: 100vw;\r\n  height: 100vh;\r\n  background-color: rgba(0, 0, 0, 0.2);\r\n  position: fixed;\r\n  top: 0;\r\n  z-index: 99999;\r\n  /* display: flex; */\r\n  line-height: 100vh;\r\n  text-align: center;\r\n}\r\n.content {\r\n  width: 100vw;\r\n  padding-bottom: 100px;\r\n}\r\n\r\n.line {\r\n  width: 90vw;\r\n  height: 2px;\r\n  background: #E4E4E4;\r\n  margin: 0 auto;\r\n}\r\n\r\n.all-line {\r\n  width: 100vw;\r\n  height: 2px;\r\n  background: #E4E4E4;\r\n}\r\n\r\n.discu-title {\r\n  font-family: Microsoft YaHei, Microsoft YaHei;\r\n  font-weight: bold;\r\n  font-size: 14px;\r\n  color: #000000;\r\n  text-align: left;\r\n  font-style: normal;\r\n  text-transform: none;\r\n  padding: 0 5vw;\r\n}\r\n\r\n.discu-content {\r\n  font-family: Microsoft YaHei, Microsoft YaHei;\r\n  font-size: 14px;\r\n  color: #000000;\r\n  text-align: left;\r\n  font-style: normal;\r\n  text-transform: none;\r\n  margin: 20px 0;\r\n  padding: 0 5vw;\r\n  word-wrap: break-word;\r\n  overflow-wrap: break-word;\r\n}\r\n\r\n.discu-content1 {\r\n  font-family: Microsoft YaHei, Microsoft YaHei;\r\n  font-size: 14px;\r\n  color: #000000;\r\n  text-align: left;\r\n  font-style: normal;\r\n  text-transform: none;\r\n  margin: 20px auto;\r\n  width: 90vw;\r\n  border-left: 5px solid #FFB99E;\r\n  word-wrap: break-word;\r\n  overflow-wrap: break-word;\r\n}\r\n\r\n.discu-content1-0 {\r\n  border-left: 5px solid #FFB99E;\r\n}\r\n\r\n.discu-content1-1 {\r\n  border-left: 5px solid #F1DC58;\r\n}\r\n\r\n.discu-content1-2 {\r\n  border-left: 5px solid #90B8E6;\r\n}\r\n\r\n.discu-content1-3 {\r\n  border-left: 5px solid #74e08f;\r\n}\r\n\r\n.discu-content2 {\r\n  font-family: Microsoft YaHei, Microsoft YaHei;\r\n  font-size: 14px;\r\n  color: #000000;\r\n  text-align: left;\r\n  font-style: normal;\r\n  text-transform: none;\r\n  margin: 20px auto;\r\n  width: 90vw;\r\n  word-wrap: break-word;\r\n  overflow-wrap: break-word;\r\n  border-right: 5px solid #FFB99E;\r\n}\r\n\r\n.discu-content2-0 {\r\n  border-right: 5px solid #FFB99E;\r\n}\r\n\r\n.discu-content2-1 {\r\n  border-right: 5px solid #F1DC58;\r\n}\r\n\r\n.discu-content2-2 {\r\n  border-right: 5px solid #90B8E6;\r\n}\r\n\r\n.discu-content2-3 {\r\n  border-right: 5px solid #74e08f;\r\n}\r\n\r\n.detail {\r\n  margin: 0 10px;\r\n}\r\n\r\n.my-continuation {\r\n  background: #eaeaec;\r\n  min-height: 200px;\r\n  height: auto;\r\n  padding: 20px;\r\n  border-radius: 10px;\r\n}\r\n\r\n.continuation {\r\n  color: #000;\r\n  margin-top: 10px;\r\n}\r\n\r\n.bottom-btn {\r\n  position: fixed;\r\n  bottom: 10px;\r\n  width: 100vw;\r\n  background-color: #FFF;\r\n  height: 80px;\r\n}\r\n\r\n.btn-ok {\r\n  width: 144px;\r\n  height: 45px;\r\n  background: #003F88;\r\n  border-radius: 23px;\r\n  margin: 0 auto;\r\n  line-height: 45px;\r\n  text-align: center;\r\n  color: #FFF;\r\n  margin-top: 20px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.btn-other {\r\n  width: 144px;\r\n  height: 45px;\r\n  /* background: #b4b4b6; */\r\n  border-radius: 23px;\r\n  margin: 0 25px;\r\n  line-height: 45px;\r\n  text-align: center;\r\n  border: 1px solid #b4b4b6;\r\n  margin-top: 20px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n\r\n}\r\n\r\n.change-btn {\r\n  width: 100vw;\r\n  height: 50px;\r\n  text-align: end;\r\n}\r\n\r\n.btn-item {\r\n  border-radius: 12px 12px 12px 12px;\r\n  border: 1px solid #CCCCCC;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin: 20px;\r\n  text-align: center;\r\n  padding: 5px 10px;\r\n\r\n}\r\n\r\n.btn-active {\r\n  border: 1px solid #9deffd;\r\n  color: #9deffd;\r\n}\r\n\r\n.content {\r\n  width: 100vw;\r\n  padding-bottom: 100px;\r\n  height: 80vh; /* 设置固定高度 */\r\n  overflow-y: auto; /* 启用垂直滚动 */\r\n}\r\n</style>","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PraxisOneInB.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PraxisOneInB.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PraxisOneInB.vue?vue&type=template&id=5020c541&scoped=true\"\nimport script from \"./PraxisOneInB.vue?vue&type=script&lang=js\"\nexport * from \"./PraxisOneInB.vue?vue&type=script&lang=js\"\nimport style0 from \"./PraxisOneInB.vue?vue&type=style&index=0&id=5020c541&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"5020c541\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"praxis\"},[_c('van-nav-bar',{attrs:{\"title\":\"单轮记叙\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"discu-title\"},[_vm._v(\"辩题内容：\")]),_c('div',{staticClass:\"discu-content\"},[_vm._v(_vm._s(_vm.AiContent.content))]),_c('div',{staticClass:\"discu-title\"},[_vm._v(\"Al writing\")]),_c('div',{staticClass:\"discu-content\"},[_vm._v(\" \"+_vm._s(_vm.AIWrite)+\" \")]),_c('div',{staticClass:\"my-continuation\"},[_c('div',{staticClass:\"discu-title\"},[_vm._v(\"My continuation\")]),_c('div',{staticClass:\"continuation\"},[_vm._v(\" \"+_vm._s(_vm.writing)+\" \")])])]),_c('div',{staticClass:\"btn-other\",on:{\"click\":_vm.to_write}},[_vm._v(\"写驳论\")]),_c('div',{staticClass:\"btn-ok\",on:{\"click\":_vm.submit_paper}},[_vm._v(\"提交\")])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n  <div class=\"praxis\">\r\n    <van-nav-bar title=\"单轮记叙\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n    <div class=\"content\">\r\n      <div class=\"discu-title\">辩题内容：</div>\r\n      <div class=\"discu-content\">{{ AiContent.content }}</div>\r\n      <div class=\"discu-title\">Al writing</div>\r\n      <div class=\"discu-content\">\r\n        {{ AIWrite }}\r\n      </div>\r\n      <div class=\"my-continuation\">\r\n        <div class=\"discu-title\">My continuation</div>\r\n        <div class=\"continuation\">\r\n          {{ writing }}\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n\r\n    <div class=\"btn-other\" @click=\"to_write\">写驳论</div>\r\n    <div class=\"btn-ok\" @click=\"submit_paper\">提交</div>\r\n\r\n  </div>\r\n</template>\r\n<script>\r\nimport { getSubject, writingAiFetch, historySave } from '@/api/user'\r\nexport default {\r\n  name: 'Praxis',\r\n  data() {\r\n    return {\r\n      resources: [],\r\n      cur: {},\r\n      visible: false,\r\n      answer_show: false,\r\n      total_time: '',\r\n      currentTime: '0:00',\r\n      audio_status: 1,\r\n      checkValue: 0,\r\n      title_status: 1,\r\n      resources_id: 0,\r\n      writing: '',\r\n      src: \"\",\r\n      jobList: [],\r\n      stu_placeholder: \"请输入你的疑问...\",\r\n      stu_content: '',\r\n      is_speak: 1,\r\n      canuse: 1,\r\n      speaking: false,\r\n      writting_text: '去写作',\r\n      AiContent: [],\r\n      AIWrite: ''\r\n    }\r\n  },\r\n  methods: {\r\n    async onClickLeft() {\r\n      history.back()\r\n    },\r\n    async submit_paper() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await historySave({\r\n            subject_title: \"(topic:\" +this.AiContent.topic +\")\" + this.AiContent.content,\r\n            type_id: 2,\r\n            class_id: 1,\r\n            sid: user.sid,\r\n            user_input: JSON.stringify({\r\n              index: 0,\r\n              answer: this.AIWrite,\r\n              question: this.writing\r\n            })\r\n          })\r\n          console.log(response)\r\n          if (response.code == 100) {\r\n            this.$message({\r\n              message: '提交成功',\r\n              center: true\r\n            })\r\n            localStorage.setItem('AiContent', [])\r\n            localStorage.setItem('userWritingToAi', [])\r\n            localStorage.setItem('AIWrite', [])\r\n            this.$router.push({ name: 'HistoryDetail', query: { his_id: response.data } })\r\n          }\r\n\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n\r\n    },\r\n    async get_subject() {\r\n      const response = await getSubject({ type_id: 2 })\r\n      this.AiContent = response.data.content\r\n      localStorage.setItem('AiContent', JSON.stringify(response.data.content))\r\n      this.writingAiFetch()\r\n      console.log(response)\r\n    },\r\n    async writingAiFetch() {\r\n      const response = await writingAiFetch({\r\n        type_id: 2,\r\n        class_id: 1,\r\n        Level: 3,\r\n        userinput: this.AiContent.content,\r\n        // preuserinput: {}\r\n      })\r\n      this.AIWrite = response.data.content\r\n      localStorage.setItem('AIWrite', this.AIWrite)\r\n      console.log(response)\r\n    },\r\n    async to_write() {\r\n      this.$router.push({\r\n        path: '/write/writea',\r\n        query: { writeTitle: '单轮记叙' }\r\n      }).catch(err => {\r\n        if (err.name !== 'NavigationDuplicated') {\r\n          console.error(\"Navigation error:\", err);\r\n        }\r\n      });\r\n    },\r\n\r\n  },\r\n  mounted() {\r\n    // localStorage.setItem('AiContent', [])\r\n    // localStorage.setItem('userWritingToAi', [])\r\n    const writing = localStorage.getItem('userWritingToAi')\r\n    if (writing) {\r\n      this.writing = writing\r\n      this.AiContent = JSON.parse(localStorage.getItem('AiContent'))\r\n      this.AIWrite = localStorage.getItem('AIWrite')\r\n    } else {\r\n      this.get_subject()\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style scoped>\r\n.content {\r\n  width: 90vw;\r\n  padding: 0 5vw;\r\n}\r\n\r\n.discu-title {\r\n  font-family: Microsoft YaHei, Microsoft YaHei;\r\n  font-weight: bold;\r\n  font-size: 14px;\r\n  color: #000000;\r\n  text-align: left;\r\n  font-style: normal;\r\n  text-transform: none;\r\n}\r\n\r\n.discu-content {\r\n  font-family: Microsoft YaHei, Microsoft YaHei;\r\n  font-size: 14px;\r\n  color: #000000;\r\n  text-align: left;\r\n  font-style: normal;\r\n  text-transform: none;\r\n  margin: 20px 0;\r\n  word-wrap: break-word;\r\n  overflow-wrap: break-word;\r\n}\r\n\r\n.my-continuation {\r\n  background: #eaeaec;\r\n  min-height: 200px;\r\n  height: auto;\r\n  padding: 20px;\r\n  border-radius: 10px;\r\n  word-wrap: break-word;\r\n  overflow-wrap: break-word;\r\n}\r\n\r\n.continuation {\r\n  color: #000;\r\n  margin-top: 10px;\r\n}\r\n\r\n.btn-ok {\r\n  width: 144px;\r\n  height: 45px;\r\n  background: #003F88;\r\n  border-radius: 23px;\r\n  margin: 0 auto;\r\n  line-height: 45px;\r\n  text-align: center;\r\n  color: #FFF;\r\n  margin-top: 100px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.btn-other {\r\n  width: 144px;\r\n  height: 45px;\r\n  /* background: #b4b4b6; */\r\n  border-radius: 23px;\r\n  margin: 0 25px;\r\n  line-height: 45px;\r\n  text-align: center;\r\n  border: 1px solid #b4b4b6;\r\n  margin-top: 100px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n\r\n}\r\n</style>","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PraxisOneInC.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PraxisOneInC.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PraxisOneInC.vue?vue&type=template&id=5fb69cc8&scoped=true\"\nimport script from \"./PraxisOneInC.vue?vue&type=script&lang=js\"\nexport * from \"./PraxisOneInC.vue?vue&type=script&lang=js\"\nimport style0 from \"./PraxisOneInC.vue?vue&type=style&index=0&id=5fb69cc8&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"5fb69cc8\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"praxis\"},[(!_vm.idloading)?_c('div',{staticClass:\"loading-box\"},[_c('van-loading',{attrs:{\"size\":\"30px\",\"color\":\"red\"}},[_vm._v(\"对话生成中请耐心等待...\")])],1):_vm._e(),_c('van-nav-bar',{attrs:{\"title\":\"多轮记叙\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"discu-title\"},[_vm._v(\"辩题内容：\")]),_c('div',{staticClass:\"discu-content\"},[_vm._v(_vm._s(_vm.AiContent.content))]),_c('div',{staticClass:\"line\"}),_c('div',{staticClass:\"change-btn\"},[_c('div',{staticClass:\"btn-item\",class:{ 'btn-active': _vm.only_AI == true },on:{\"click\":_vm.only_AIFun}},[_vm._v(\"只看AI\")]),_c('div',{staticClass:\"btn-item\",class:{ 'btn-active': _vm.only_My == true },on:{\"click\":_vm.only_MyFun}},[_vm._v(\"只看我\")])]),_c('div',{ref:\"scrollContainer\",staticClass:\"content\"},_vm._l((_vm.msg_list),function(item,index){return _c('div',{key:index},[(_vm.only_My == false)?_c('div',{staticClass:\"discu-content1\",class:`discu-content1-${index}`},[_c('div',{staticClass:\"detail\"},[_vm._v(\" \"+_vm._s(item.answer)+\" \")])]):_vm._e(),(_vm.only_AI == false)?_c('div',{ref:el => _vm.setItemRef(el, index),refInFor:true,staticClass:\"discu-content2\",class:`discu-content2-${index}`},[_c('div',{staticClass:\"detail\"},[_vm._v(\" \"+_vm._s(item.question)+\" \")])]):_vm._e(),_c('div',{staticClass:\"all-line\"})])}),0)]),(_vm.idloading)?_c('div',{staticClass:\"bottom-btn\"},[_c('div',{staticClass:\"btn-other\",on:{\"click\":_vm.to_write}},[_vm._v(\"写驳论\")]),_c('div',{staticClass:\"btn-ok\",on:{\"click\":_vm.submit_paper}},[_vm._v(\"提交\")])]):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n  <div class=\"praxis\">\r\n    <div class=\"loading-box\" v-if=\"!idloading\">\r\n      <van-loading size=\"30px\" color=\"red\">对话生成中请耐心等待...</van-loading>\r\n    </div>\r\n    <van-nav-bar title=\"多轮记叙\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n    <div class=\"content\">\r\n      <div class=\"discu-title\">辩题内容：</div>\r\n      <div class=\"discu-content\">{{ AiContent.content }}</div>\r\n      <div class=\"line\"></div>\r\n\r\n      <div class=\"change-btn\">\r\n        <div class=\"btn-item\" :class=\"{ 'btn-active': only_AI == true }\" @click=\"only_AIFun\">只看AI</div>\r\n        <div class=\"btn-item\" :class=\"{ 'btn-active': only_My == true }\" @click=\"only_MyFun\">只看我</div>\r\n      </div>\r\n      <div class=\"content\" ref=\"scrollContainer\">\r\n        <div v-for=\"(item, index) in msg_list\" v-bind:key=\"index\">\r\n          <div class=\"discu-content1\" :class=\"`discu-content1-${index}`\" v-if=\"only_My == false\">\r\n            <div class=\"detail\">\r\n              {{ item.answer }}\r\n            </div>\r\n          </div>\r\n          <div class=\"discu-content2\" :class=\"`discu-content2-${index}`\" v-if=\"only_AI == false\"\r\n            :ref=\"el => setItemRef(el, index)\">\r\n            <div class=\"detail\">\r\n              {{ item.question }}\r\n            </div>\r\n          </div>\r\n          <div class=\"all-line\"></div>\r\n        </div>\r\n      </div>\r\n\r\n    </div>\r\n\r\n\r\n    <div class=\"bottom-btn\" v-if=\"idloading\">\r\n      <div class=\"btn-other\" @click=\"to_write\">写驳论</div>\r\n      <div class=\"btn-ok\" @click=\"submit_paper\">提交</div>\r\n    </div>\r\n\r\n  </div>\r\n</template>\r\n<script>\r\nimport { getSubject, writingAiFetch, historySave } from '@/api/user'\r\nexport default {\r\n  name: 'Praxis',\r\n  data() {\r\n    return {\r\n      idloading:false,\r\n      resources: [],\r\n      cur: {},\r\n      visible: false,\r\n      answer_show: false,\r\n      only_AI: false,\r\n      only_My: false,\r\n      total_time: '',\r\n      currentTime: '0:00',\r\n      audio_status: 1,\r\n      checkValue: 0,\r\n      title_status: 1,\r\n      resources_id: 0,\r\n      writing: '',\r\n      src: \"\",\r\n      jobList: [],\r\n      stu_placeholder: \"请输入你的疑问...\",\r\n      stu_content: '',\r\n      is_speak: 1,\r\n      canuse: 1,\r\n      speaking: false,\r\n      writting_text: '去写作',\r\n      AiContent: [],\r\n      AIWrite: '',\r\n      msg_list: [],\r\n      autoScrollEnabled: true, // 3. 自动滚动标志\r\n      itemRefs: [], // 4. 存储discu-content2元素引用\r\n    }\r\n  },\r\n  watch: {\r\n    // 7. 监听消息列表变化，自动滚动\r\n    msg_list: {\r\n      handler() {\r\n        this.scrollToLastMessage();\r\n      },\r\n      deep: true\r\n    }\r\n  },\r\n  methods: {\r\n    async onClickLeft() {\r\n      history.back()\r\n    },\r\n    async only_AIFun() {\r\n      this.only_AI = !this.only_AI\r\n      this.only_My = false\r\n    },\r\n    async only_MyFun() {\r\n      this.only_My = !this.only_My\r\n      this.only_AI = false\r\n    },\r\n    async get_subject() {\r\n      const response = await getSubject({ type_id: 2 })\r\n      this.AiContent = response.data.content\r\n      localStorage.setItem('AiContent', JSON.stringify(response.data.content))\r\n      this.writingAiFetch()\r\n      console.log(response)\r\n    },\r\n    async submit_paper() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await historySave({\r\n            subject_title: \"(topic:\" +this.AiContent.topic +\")\" + this.AiContent.content,\r\n            sid: user.sid,\r\n            user_input: JSON.stringify(this.msg_list),\r\n            type_id: 2,\r\n            class_id: 2,\r\n          })\r\n          console.log(response)\r\n          if (response.code == 100) {\r\n            this.$message({\r\n              message: '提交成功',\r\n              center: true\r\n            })\r\n            localStorage.setItem('AiContent', [])\r\n            localStorage.setItem('userWritingToAi', [])\r\n            localStorage.setItem('AIWrite', [])\r\n            this.$router.push({ name: 'HistoryDetail', query: { his_id: response.data } })\r\n          }\r\n\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n\r\n    },\r\n    async writingAiFetch() {\r\n      const response = await writingAiFetch({\r\n        type_id: 2,\r\n        class_id: 2,\r\n        Level: 3,\r\n        userinput: this.AiContent.content,\r\n        // preuserinput: {}\r\n      })\r\n      this.AIWrite = response.data.content\r\n      this.$set(this.msg_list, this.msg_list.length, {\r\n        index: this.msg_list.length,\r\n        answer: response.data.content,\r\n        question: ''\r\n      })\r\n      localStorage.setItem('AIWrite', JSON.stringify(this.msg_list))\r\n       this.scrollToLastMessage();\r\n       this.idloading = true\r\n      console.log(this.msg_list)\r\n    },\r\n    async to_write() {\r\n      this.$router.push({\r\n        path: '/write/writeb',\r\n        query: { writeTitle: '多轮记叙' }\r\n      }).catch(err => {\r\n        if (err.name !== 'NavigationDuplicated') {\r\n          console.error(\"Navigation error:\", err);\r\n        }\r\n      });\r\n    },\r\n    setItemRef(el, index) {\r\n      // 5. 收集每个discu-content2元素的引用\r\n      if (el) {\r\n        this.itemRefs[index] = el;\r\n      }\r\n    },\r\n    scrollToLastMessage() {\r\n      if (!this.autoScrollEnabled) return; // 如果用户手动滚动了，则停止自动滚动\r\n\r\n      this.$nextTick(() => {\r\n        const container = this.$refs.scrollContainer;\r\n        const lastIndex = this.msg_list.length - 1;\r\n        const lastElement = this.itemRefs[lastIndex]; // 获取最后一个discu-content2元素\r\n\r\n        if (lastElement) {\r\n          // 6. 方式一：平滑滚动到该元素（推荐）\r\n          lastElement.scrollIntoView({\r\n            behavior: 'smooth',\r\n            block: 'nearest'\r\n          });\r\n          // 方式二：直接滚动到底部（替代方案）\r\n          // container.scrollTop = container.scrollHeight;\r\n        }\r\n      });\r\n    }\r\n  },\r\n  mounted() {\r\n    // this.get_subject()\r\n    // localStorage.setItem('AIWrite', [])\r\n    // localStorage.setItem('AiContent', [])\r\n    // 8. 初始滚动到底部\r\n    this.scrollToLastMessage();\r\n\r\n    // 9. 监听容器的滚动事件，判断是否为用户手动操作\r\n    const container = this.$refs.scrollContainer;\r\n    if (container) {\r\n      container.addEventListener('scroll', () => {\r\n        // 简单判断：如果滚动条不在最底部，则认为是用户手动滚动\r\n        const threshold = 100; // 设置一个阈值，比如距离底部100px以内不算手动滚动\r\n        const isNearBottom = container.scrollHeight - container.scrollTop - container.clientHeight <= threshold;\r\n\r\n        if (!isNearBottom) {\r\n          this.autoScrollEnabled = false;\r\n        } else {\r\n          this.autoScrollEnabled = true;\r\n        }\r\n      });\r\n    }\r\n    const writing = localStorage.getItem('AIWrite')\r\n    // const AiContent = localStorage.getItem('AiContent')\r\n    if (writing) {\r\n      this.msg_list = JSON.parse(writing)\r\n      this.AiContent = JSON.parse(localStorage.getItem('AiContent'))\r\n      var last_ques = this.msg_list[this.msg_list.length - 1].question\r\n      if (last_ques != '' && this.msg_list.length < 5) {\r\n        this.writingAiFetch()\r\n      }else{\r\n        this.idloading = true\r\n      }\r\n    } else {\r\n      this.get_subject()\r\n    }\r\n  }\r\n}\r\n</script>\r\n<style scoped>\r\n.loading-box{\r\n  width: 100vw;\r\n  height: 100vh;\r\n  background-color: rgba(0, 0, 0, 0.2);\r\n  position: fixed;\r\n  top: 0;\r\n  z-index: 99999;\r\n  /* display: flex; */\r\n  line-height: 100vh;\r\n  text-align: center;\r\n}\r\n.content {\r\n  width: 100vw;\r\n  padding-bottom: 100px;\r\n}\r\n\r\n.content {\r\n  width: 100vw;\r\n  padding-bottom: 100px;\r\n  height: 80vh;\r\n  /* 设置固定高度 */\r\n  overflow-y: auto;\r\n  /* 启用垂直滚动 */\r\n}\r\n\r\n.line {\r\n  width: 90vw;\r\n  height: 2px;\r\n  background: #E4E4E4;\r\n  margin: 0 auto;\r\n}\r\n\r\n.all-line {\r\n  width: 100vw;\r\n  height: 2px;\r\n  background: #E4E4E4;\r\n}\r\n\r\n.discu-title {\r\n  font-family: Microsoft YaHei, Microsoft YaHei;\r\n  font-weight: bold;\r\n  font-size: 14px;\r\n  color: #000000;\r\n  text-align: left;\r\n  font-style: normal;\r\n  text-transform: none;\r\n  padding: 0 5vw;\r\n}\r\n\r\n.discu-content {\r\n  font-family: Microsoft YaHei, Microsoft YaHei;\r\n  font-size: 14px;\r\n  color: #000000;\r\n  text-align: left;\r\n  font-style: normal;\r\n  text-transform: none;\r\n  margin: 20px 0;\r\n  padding: 0 5vw;\r\n  word-wrap: break-word;\r\n  overflow-wrap: break-word;\r\n}\r\n\r\n.discu-content1 {\r\n  font-family: Microsoft YaHei, Microsoft YaHei;\r\n  font-size: 14px;\r\n  color: #000000;\r\n  text-align: left;\r\n  font-style: normal;\r\n  text-transform: none;\r\n  margin: 20px auto;\r\n  width: 90vw;\r\n  word-wrap: break-word;\r\n  overflow-wrap: break-word;\r\n  border-left: 5px solid #FFB99E;\r\n}\r\n\r\n.discu-content1-0 {\r\n  border-left: 5px solid #FFB99E;\r\n}\r\n\r\n.discu-content1-1 {\r\n  border-left: 5px solid #F1DC58;\r\n}\r\n\r\n.discu-content1-2 {\r\n  border-left: 5px solid #90B8E6;\r\n}\r\n\r\n.discu-content1-3 {\r\n  border-left: 5px solid #74e08f;\r\n}\r\n\r\n.discu-content2 {\r\n  font-family: Microsoft YaHei, Microsoft YaHei;\r\n  font-size: 14px;\r\n  color: #000000;\r\n  text-align: left;\r\n  font-style: normal;\r\n  text-transform: none;\r\n  margin: 20px auto;\r\n  width: 90vw;\r\n  word-wrap: break-word;\r\n  overflow-wrap: break-word;\r\n  border-right: 5px solid #FFB99E;\r\n}\r\n\r\n.discu-content2-0 {\r\n  border-right: 5px solid #FFB99E;\r\n}\r\n\r\n.discu-content2-1 {\r\n  border-right: 5px solid #F1DC58;\r\n}\r\n\r\n.discu-content2-2 {\r\n  border-right: 5px solid #90B8E6;\r\n}\r\n\r\n.discu-content2-3 {\r\n  border-right: 5px solid #74e08f;\r\n}\r\n\r\n.detail {\r\n  margin: 0 10px;\r\n}\r\n\r\n.my-continuation {\r\n  background: #eaeaec;\r\n  min-height: 200px;\r\n  height: auto;\r\n  padding: 20px;\r\n  border-radius: 10px;\r\n}\r\n\r\n.continuation {\r\n  color: #000;\r\n  margin-top: 10px;\r\n}\r\n\r\n.bottom-btn {\r\n  position: fixed;\r\n  bottom: 10px;\r\n  width: 100vw;\r\n  background-color: #FFF;\r\n  height: 80px;\r\n}\r\n\r\n.btn-ok {\r\n  width: 144px;\r\n  height: 45px;\r\n  background: #003F88;\r\n  border-radius: 23px;\r\n  margin: 0 auto;\r\n  line-height: 45px;\r\n  text-align: center;\r\n  color: #FFF;\r\n  margin-top: 20px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.btn-other {\r\n  width: 144px;\r\n  height: 45px;\r\n  /* background: #b4b4b6; */\r\n  border-radius: 23px;\r\n  margin: 0 25px;\r\n  line-height: 45px;\r\n  text-align: center;\r\n  border: 1px solid #b4b4b6;\r\n  margin-top: 20px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n\r\n}\r\n\r\n.change-btn {\r\n  width: 100vw;\r\n  height: 50px;\r\n  text-align: end;\r\n}\r\n\r\n.btn-item {\r\n  border-radius: 12px 12px 12px 12px;\r\n  border: 1px solid #CCCCCC;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin: 20px;\r\n  text-align: center;\r\n  padding: 5px 10px;\r\n\r\n}\r\n\r\n.btn-active {\r\n  border: 1px solid #9deffd;\r\n  color: #9deffd;\r\n}\r\n</style>","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PraxisOneInD.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PraxisOneInD.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PraxisOneInD.vue?vue&type=template&id=1126c8e6&scoped=true\"\nimport script from \"./PraxisOneInD.vue?vue&type=script&lang=js\"\nexport * from \"./PraxisOneInD.vue?vue&type=script&lang=js\"\nimport style0 from \"./PraxisOneInD.vue?vue&type=style&index=0&id=1126c8e6&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"1126c8e6\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"praxis\",staticStyle:{\"text-align\":\"center\"}},[_c('van-nav-bar',{attrs:{\"title\":_vm.writeTitle,\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticStyle:{\"color\":\"red\",\"text-align\":\"center\"}},[_vm._v(\"（本页面不能粘贴）\")]),_c('div',{staticStyle:{\"text-align\":\"left\",\"margin-left\":\"5vw\"}},[_vm._v(\"Word Count: \"+_vm._s(_vm.wordCount))]),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.writing),expression:\"writing\"}],attrs:{\"onpaste\":\"alert('禁止粘贴！'); return false;\",\"maxlength\":\"8000\",\"placeholder\":\"请输入写作内容\"},domProps:{\"value\":(_vm.writing)},on:{\"input\":[function($event){if($event.target.composing)return;_vm.writing=$event.target.value},_vm.countWords]}}),_vm._v(\" \"),_c('div',{staticClass:\"btn-box\"},[_c('div',{staticClass:\"clear-img\",attrs:{\"bind:tap\":\"clear_input\"}},[_c('image',{staticStyle:{\"width\":\"50rpx\"},attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/clear.png\",\"mode\":\"widthFix\"}})]),_c('span',{on:{\"click\":_vm.clear_input}},[_vm._v(\"一键清空\")]),_c('div',{staticClass:\"submit-btn\",on:{\"click\":_vm.reback}},[_vm._v(\"保存\")])])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"praxis\" style=\"text-align: center;\">\r\n        <van-nav-bar :title=\"writeTitle\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <div style=\"color: red;text-align: center;\">（本页面不能粘贴）</div>\r\n        <div style=\"text-align: left;margin-left: 5vw;\">Word Count: {{ wordCount }}</div>\r\n        <textarea v-model=\"writing\" @input=\"countWords\" onpaste=\"alert('禁止粘贴！'); return false;\" maxlength=\"8000\"\r\n            placeholder=\"请输入写作内容\" />\r\n        <div class=\"btn-box\">\r\n            <!-- <div class=\"pc-img\">\r\n                <image style=\"width: 25rpx;\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/pc.png\"\r\n                    mode=\"widthFix\" />\r\n            </div>\r\n            <span>电脑端</span> -->\r\n            <div class=\"clear-img\" bind:tap=\"clear_input\">\r\n                <image style=\"width: 50rpx;\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/clear.png\"\r\n                    mode=\"widthFix\" />\r\n            </div>\r\n            <span @click=\"clear_input\">一键清空</span>\r\n            <div class=\"submit-btn\" @click=\"reback\">保存</div>\r\n        </div>\r\n    </div>\r\n</template>\r\n<script>\r\nexport default {\r\n    name: 'Praxis',\r\n    data() {\r\n        return {\r\n            wordCount: 0,\r\n            resources_id: 0,\r\n            writing: '',\r\n            writeTitle:'写作编辑'\r\n        }\r\n    },\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        async clear_input() {\r\n            this.wordCount = 0;\r\n            this.writing = ''\r\n        },\r\n        async reback() {\r\n            localStorage.setItem('userWritingToAi', this.writing)\r\n            history.back()\r\n        },\r\n        async countWords() {\r\n            // 使用正则表达式将字符串分割为单词数组，并过滤掉空字符串\r\n            const words = this.writing.trim().split(/\\s+/).filter(Boolean);\r\n            this.wordCount = words.length;\r\n        },\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        // 在组件挂载后立即获取任务数据\r\n        this.writeTitle = this.$route.query.writeTitle;\r\n        this.writing = localStorage.getItem('userWritingToAi')\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\ntextarea {\r\n    width: 86vw;\r\n    height: 600px;\r\n    margin: 2% auto;\r\n    font-size: 14px;\r\n    border: 1px solid lightgray;\r\n    padding: 10px 2vw;\r\n}\r\n\r\n.btn-box {\r\n    width: 90vw;\r\n    padding: 0 5vw;\r\n    height: 55px;\r\n    box-shadow: 0rpx -2px 6px 1px rgba(80, 143, 206, 0.1);\r\n    position: fixed;\r\n    bottom: 0;\r\n    padding-top: 27px;\r\n}\r\n\r\nspan {\r\n    padding: 30px 25px 0 7px;\r\n    font-size: 12px;\r\n    height: 25px;\r\n    line-height: 25px;\r\n    color: #A1A1A1;\r\n}\r\n\r\n.pc-img {\r\n    width: 25px;\r\n    height: 25px;\r\n    background: #B2D9FF;\r\n    border-radius: 25px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: center;\r\n    line-height: 25px;\r\n}\r\n\r\n.clear-img {\r\n    width: 25px;\r\n    height: 25px;\r\n    background: #FFEAA7;\r\n    border-radius: 25px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: center;\r\n    line-height: 25px;\r\n}\r\n\r\n.submit-btn {\r\n    width: 118px;\r\n    height: 36px;\r\n    background: #003F88;\r\n    border-radius: 20px;\r\n    color: #FFF;\r\n    text-align: center;\r\n    line-height: 36px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n</style>","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Write.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Write.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Write.vue?vue&type=template&id=0353392c&scoped=true\"\nimport script from \"./Write.vue?vue&type=script&lang=js\"\nexport * from \"./Write.vue?vue&type=script&lang=js\"\nimport style0 from \"./Write.vue?vue&type=style&index=0&id=0353392c&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"0353392c\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"active_list\"},[_c('van-nav-bar',{attrs:{\"title\":\"历史列表\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticClass:\"model-start\"},_vm._l((_vm.historyList),function(item,index){return _c('div',{key:index,staticClass:\"learn-item\",on:{\"click\":function($event){return _vm.to_detail(item)}}},[_c('div',{staticClass:\"learn-item-info\"},[_c('div',{staticClass:\"learn-item-title\"},[(item.type_id == 1 && item.class_id == 1)?_c('span',[_vm._v(\" [单轮议论] \")]):_vm._e(),(item.type_id == 1 && item.class_id == 2)?_c('span',[_vm._v(\" [多轮议论] \")]):_vm._e(),(item.type_id == 2 && item.class_id == 1)?_c('span',[_vm._v(\" [单轮记叙] \")]):_vm._e(),(item.type_id == 2 && item.class_id == 2)?_c('span',[_vm._v(\" [多轮记叙] \")]):_vm._e(),_vm._v(\" \"+_vm._s(item.subject_title)+\" \")]),_c('div',{staticClass:\"learn-item-update-time\"},[_vm._v(_vm._s(item.create_time))])]),_c('div',{staticClass:\"btn-learn\"},[_vm._v(\"查看详情\")])])}),0),(_vm.has_more)?_c('div',{staticClass:\"load-more\",on:{\"click\":_vm.load_more}},[_vm._v(\"点击加载更多~~\")]):_c('div',{staticClass:\"load-more-empty\"},[_vm._v(\"没有了~~\")])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"active_list\">\r\n        <van-nav-bar title=\"历史列表\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n\r\n        <div class=\"model-start\">\r\n            <div class=\"learn-item\" v-for=\"(item, index) in historyList\" :key=\"index\" @click=\"to_detail(item)\">\r\n                <div class=\"learn-item-info\">\r\n                    <div class=\"learn-item-title\">\r\n                        <span v-if=\"item.type_id == 1 && item.class_id == 1\">\r\n                            [单轮议论]\r\n                        </span>\r\n                        <span v-if=\"item.type_id == 1 && item.class_id == 2\">\r\n                            [多轮议论]\r\n                        </span>\r\n                        <span v-if=\"item.type_id == 2 && item.class_id == 1\">\r\n                            [单轮记叙]\r\n                        </span>\r\n                        <span v-if=\"item.type_id == 2 && item.class_id == 2\">\r\n                            [多轮记叙]\r\n                        </span>\r\n                        {{ item.subject_title }}\r\n                    </div>\r\n                    <div class=\"learn-item-update-time\">{{ item.create_time }}</div>\r\n                </div>\r\n                <div class=\"btn-learn\">查看详情</div>\r\n            </div>\r\n        </div>\r\n        <div class=\"load-more\" v-if=\"has_more\" @click=\"load_more\">点击加载更多~~</div>\r\n        <div class=\"load-more-empty\" v-else>没有了~~</div>\r\n\r\n\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getHistoryList } from '@/api/user'\r\nexport default {\r\n    name: 'ActiveList',\r\n    data() {\r\n        return {\r\n            historyList: [],\r\n            page: 1,\r\n            page1: 1,\r\n            active: 0,\r\n            has_more: true,\r\n            total_all: 0,\r\n        }\r\n    },\r\n\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        async load_more() {\r\n            this.page++\r\n            this.getHistoryList()\r\n        },\r\n\r\n        async getHistoryList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                console.log(user)\r\n                if (user && user.sid) {\r\n                    const response = await getHistoryList({ sid: user.sid, size: 10, page: this.page })\r\n                    if (response.code !== 100) {\r\n                        this.has_more = false\r\n                        return\r\n                    }\r\n                    const data = response.data.records\r\n                    data.forEach((child, index) => {\r\n                        if (child.user_input != \"\") {\r\n                            data[index].user_input = JSON.parse(child.user_input)\r\n                        }\r\n                    });\r\n                    this.total_all = response.data.total\r\n                    if (data.length < 10) {\r\n                        this.has_more = false\r\n                    }\r\n                    this.historyList = data.concat(this.historyList)\r\n                    this.active = 0\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        to_detail(item) {\r\n            this.$router.push({ name: 'HistoryDetail', query: { his_id: item.id } })\r\n        }\r\n    },\r\n    mounted() {\r\n        this.getHistoryList()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n.stu-info {\r\n    width: 330px;\r\n    height: 40px;\r\n}\r\n\r\n.count-info {\r\n    width: 30%;\r\n    height: 40px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.right-count,\r\n.total-count {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.right-box {\r\n    width: 70%;\r\n    height: 40px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    font-size: 14px;\r\n}\r\n\r\n.right-avg {\r\n    width: 100%;\r\n    height: 20px;\r\n    line-height: 20px;\r\n}\r\n\r\n.submit-time {\r\n    width: 100%;\r\n    height: 20px;\r\n    line-height: 20px;\r\n}\r\n\r\n.learn-item {\r\n    width: 330px;\r\n    height: 80px;\r\n    border-style: solid;\r\n    box-shadow: 0px 2px 10px 1px rgba(80, 143, 206, 0.1);\r\n    border-width: 0px;\r\n    margin: 11px auto;\r\n    border-radius: 20px;\r\n    background-color: #FFF;\r\n}\r\n\r\n.learn-item-finished {\r\n    width: 330px;\r\n    height: 130px;\r\n    border-style: solid;\r\n    box-shadow: 0px 2px 10px 1px rgba(80, 143, 206, 0.1);\r\n    border-width: 0px;\r\n    margin: 11px auto;\r\n    border-radius: 20px;\r\n    background-color: #FFF;\r\n}\r\n\r\n.learn-img {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 58px;\r\n    height: 58px;\r\n    margin: 10px 6px 0 12px;\r\n    border-radius: 10px;\r\n}\r\n\r\n\r\n.learn-item-info {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 180px;\r\n    height: 50px;\r\n    line-height: 20px;\r\n    padding-top: 21px;\r\n    text-align: left;\r\n}\r\n\r\n.learn-item-title {\r\n    width: 190px;\r\n    font-size: 12px;\r\n    font-weight: bold;\r\n    overflow: hidden;\r\n    text-overflow: ellipsis;\r\n    white-space: nowrap;\r\n    text-align: left;\r\n}\r\n\r\n.learn-item-update-time {\r\n    font-size: 12px;\r\n    color: #979797;\r\n}\r\n\r\n.btn-learn {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    color: #003F88;\r\n    font-size: 12px;\r\n    height: 85px;\r\n    line-height: 85px;\r\n    margin-left: 40px;\r\n}\r\n\r\n.load-more,\r\n.load-more-empty {\r\n    text-align: center;\r\n    font-size: 12px;\r\n    width: 100%;\r\n    height: 40px;\r\n    line-height: 40px;\r\n}\r\n</style>","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./List.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./List.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./List.vue?vue&type=template&id=143920ad&scoped=true\"\nimport script from \"./List.vue?vue&type=script&lang=js\"\nexport * from \"./List.vue?vue&type=script&lang=js\"\nimport style0 from \"./List.vue?vue&type=style&index=0&id=143920ad&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"143920ad\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"praxis\",staticStyle:{\"text-align\":\"center\"}},[_c('van-nav-bar',{attrs:{\"title\":_vm.writeTitle,\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticStyle:{\"color\":\"red\",\"text-align\":\"center\"}},[_vm._v(\"（本页面不能粘贴）\")]),_c('div',{staticStyle:{\"text-align\":\"left\",\"margin-left\":\"5vw\"}},[_vm._v(\"Word Count: \"+_vm._s(_vm.wordCount))]),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.writing),expression:\"writing\"}],attrs:{\"maxlength\":\"8000\",\"placeholder\":\"请输入写作内容\"},domProps:{\"value\":(_vm.writing)},on:{\"input\":[function($event){if($event.target.composing)return;_vm.writing=$event.target.value},_vm.countWords]}}),_vm._v(\" \"),_c('div',{staticClass:\"btn-box\"},[_c('div',{staticClass:\"clear-img\",attrs:{\"bind:tap\":\"clear_input\"}},[_c('image',{staticStyle:{\"width\":\"50rpx\"},attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/clear.png\",\"mode\":\"widthFix\"}})]),_c('span',{on:{\"click\":_vm.clear_input}},[_vm._v(\"一键清空\")]),_c('div',{staticClass:\"submit-btn\",on:{\"click\":_vm.reback}},[_vm._v(\"保存\")])])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"praxis\" style=\"text-align: center;\">\r\n        <van-nav-bar :title=\"writeTitle\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <div style=\"color: red;text-align: center;\">（本页面不能粘贴）</div>\r\n        <div style=\"text-align: left;margin-left: 5vw;\">Word Count: {{ wordCount }}</div>\r\n        <textarea v-model=\"writing\" @input=\"countWords\"  maxlength=\"8000\"\r\n            placeholder=\"请输入写作内容\" />\r\n        <div class=\"btn-box\">\r\n            <!-- <div class=\"pc-img\">\r\n                <image style=\"width: 25rpx;\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/pc.png\"\r\n                    mode=\"widthFix\" />\r\n            </div>\r\n            <span>电脑端</span> -->\r\n            <div class=\"clear-img\" bind:tap=\"clear_input\">\r\n                <image style=\"width: 50rpx;\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/clear.png\"\r\n                    mode=\"widthFix\" />\r\n            </div>\r\n            <span @click=\"clear_input\">一键清空</span>\r\n            <div class=\"submit-btn\" @click=\"reback\">保存</div>\r\n        </div>\r\n    </div>\r\n</template>\r\n<script>\r\nexport default {\r\n    name: 'Praxis',\r\n    data() {\r\n        return {\r\n            wordCount: 0,\r\n            resources_id: 0,\r\n            writing: '',\r\n            AIWriteList: [],\r\n            writeTitle: '写作编辑'\r\n        }\r\n    },\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        async clear_input() {\r\n            this.wordCount = 0;\r\n            this.writing = ''\r\n        },\r\n        async reback() {\r\n            this.AIWriteList[this.AIWriteList.length-1]['question'] = this.writing\r\n            localStorage.setItem('AIWrite', JSON.stringify(this.AIWriteList))\r\n            console.log(this.AIWriteList)\r\n            history.back()\r\n        },\r\n        async countWords() {\r\n            // 使用正则表达式将字符串分割为单词数组，并过滤掉空字符串\r\n            const words = this.writing.trim().split(/\\s+/).filter(Boolean);\r\n            this.wordCount = words.length;\r\n        },\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        // 在组件挂载后立即获取任务数据\r\n        this.AIWriteList = JSON.parse(localStorage.getItem('AIWrite'))\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\ntextarea {\r\n    width: 86vw;\r\n    height: 600px;\r\n    margin: 2% auto;\r\n    font-size: 14px;\r\n    border: 1px solid lightgray;\r\n    padding: 10px 2vw;\r\n}\r\n\r\n.btn-box {\r\n    width: 90vw;\r\n    padding: 0 5vw;\r\n    height: 55px;\r\n    box-shadow: 0rpx -2px 6px 1px rgba(80, 143, 206, 0.1);\r\n    position: fixed;\r\n    bottom: 0;\r\n    padding-top: 27px;\r\n}\r\n\r\nspan {\r\n    padding: 30px 25px 0 7px;\r\n    font-size: 12px;\r\n    height: 25px;\r\n    line-height: 25px;\r\n    color: #A1A1A1;\r\n}\r\n\r\n.pc-img {\r\n    width: 25px;\r\n    height: 25px;\r\n    background: #B2D9FF;\r\n    border-radius: 25px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: center;\r\n    line-height: 25px;\r\n}\r\n\r\n.clear-img {\r\n    width: 25px;\r\n    height: 25px;\r\n    background: #FFEAA7;\r\n    border-radius: 25px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: center;\r\n    line-height: 25px;\r\n}\r\n\r\n.submit-btn {\r\n    width: 118px;\r\n    height: 36px;\r\n    background: #003F88;\r\n    border-radius: 20px;\r\n    color: #FFF;\r\n    text-align: center;\r\n    line-height: 36px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n</style>","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WriteB.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WriteB.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./WriteB.vue?vue&type=template&id=f74849aa&scoped=true\"\nimport script from \"./WriteB.vue?vue&type=script&lang=js\"\nexport * from \"./WriteB.vue?vue&type=script&lang=js\"\nimport style0 from \"./WriteB.vue?vue&type=style&index=0&id=f74849aa&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"f74849aa\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"praxis\"},[(_vm.msgDetail.type_id == 1 && _vm.msgDetail.class_id == 1)?_c('van-nav-bar',{attrs:{\"title\":\"单轮议论\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}):_vm._e(),(_vm.msgDetail.type_id == 1 && _vm.msgDetail.class_id == 2)?_c('van-nav-bar',{attrs:{\"title\":\"多轮议论\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}):_vm._e(),(_vm.msgDetail.type_id == 2 && _vm.msgDetail.class_id == 1)?_c('van-nav-bar',{attrs:{\"title\":\"单轮记叙\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}):_vm._e(),(_vm.msgDetail.type_id == 2 && _vm.msgDetail.class_id == 2)?_c('van-nav-bar',{attrs:{\"title\":\"多轮记叙\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}):_vm._e(),_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"discu-title\"},[_vm._v(\"辩题内容：\")]),_c('div',{staticClass:\"discu-content\"},[_vm._v(_vm._s(_vm.msgDetail.subject_title))]),_c('div',{staticClass:\"line\"}),_c('div',{staticClass:\"change-btn\"},[_c('div',{staticClass:\"btn-item\",class:{ 'btn-active': _vm.only_AI == true },on:{\"click\":_vm.only_AIFun}},[_vm._v(\"只看AI\")]),_c('div',{staticClass:\"btn-item\",class:{ 'btn-active': _vm.only_My == true },on:{\"click\":_vm.only_MyFun}},[_vm._v(\"只看我\")])]),_vm._l((_vm.msgDetail.user_input),function(item,index){return (_vm.msgDetail.class_id == 2)?_c('div',{key:index},[(_vm.only_My == false)?_c('div',{staticClass:\"discu-content1\",class:`discu-content1-${index}`},[_c('div',{staticClass:\"detail\"},[_vm._v(\" \"+_vm._s(item.answer)+\" \")])]):_vm._e(),(_vm.only_AI == false)?_c('div',{staticClass:\"discu-content2\",class:`discu-content2-${index}`},[_c('div',{staticClass:\"detail\"},[_vm._v(\" \"+_vm._s(item.question)+\" \")])]):_vm._e(),_c('div',{staticClass:\"all-line\"})]):_vm._e()}),(_vm.msgDetail.class_id == 1)?_c('div',[(_vm.only_My == false)?_c('div',{staticClass:\"discu-content1\",class:`discu-content1-${_vm.index}`},[_c('div',{staticClass:\"detail\"},[_vm._v(\" \"+_vm._s(_vm.msgDetail.user_input.answer)+\" \")])]):_vm._e(),(_vm.only_AI == false)?_c('div',{staticClass:\"discu-content2\",class:`discu-content2-${_vm.index}`},[_c('div',{staticClass:\"detail\"},[_vm._v(\" \"+_vm._s(_vm.msgDetail.user_input.question)+\" \")])]):_vm._e(),_c('div',{staticClass:\"all-line\"})]):_vm._e()],2)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"praxis\">\r\n        <van-nav-bar v-if=\"msgDetail.type_id == 1 && msgDetail.class_id == 1\" title=\"单轮议论\" left-text=\"返回\" left-arrow\r\n            @click-left=\"onClickLeft\" />\r\n        <van-nav-bar v-if=\"msgDetail.type_id == 1 && msgDetail.class_id == 2\" title=\"多轮议论\" left-text=\"返回\" left-arrow\r\n            @click-left=\"onClickLeft\" />\r\n        <van-nav-bar v-if=\"msgDetail.type_id == 2 && msgDetail.class_id == 1\" title=\"单轮记叙\" left-text=\"返回\" left-arrow\r\n            @click-left=\"onClickLeft\" />\r\n        <van-nav-bar v-if=\"msgDetail.type_id == 2 && msgDetail.class_id == 2\" title=\"多轮记叙\" left-text=\"返回\" left-arrow\r\n            @click-left=\"onClickLeft\" />\r\n        <div class=\"content\">\r\n            <div class=\"discu-title\">辩题内容：</div>\r\n            <div class=\"discu-content\">{{ msgDetail.subject_title }}</div>\r\n            <div class=\"line\"></div>\r\n\r\n            <div class=\"change-btn\">\r\n                <div class=\"btn-item\" :class=\"{ 'btn-active': only_AI == true }\" @click=\"only_AIFun\">只看AI</div>\r\n                <div class=\"btn-item\" :class=\"{ 'btn-active': only_My == true }\" @click=\"only_MyFun\">只看我</div>\r\n            </div>\r\n            <div v-for=\"(item, index) in msgDetail.user_input\" v-bind:key=\"index\" v-if=\"msgDetail.class_id == 2\">\r\n                <div class=\"discu-content1\" :class=\"`discu-content1-${index}`\" v-if=\"only_My == false\">\r\n                    <div class=\"detail\">\r\n                        {{ item.answer }}\r\n                    </div>\r\n                </div>\r\n                <div class=\"discu-content2\" :class=\"`discu-content2-${index}`\" v-if=\"only_AI == false\">\r\n                    <div class=\"detail\">\r\n                        {{ item.question }}\r\n                    </div>\r\n                </div>\r\n                <div class=\"all-line\"></div>\r\n            </div>\r\n            <div v-if=\"msgDetail.class_id == 1\">\r\n                <div class=\"discu-content1\" :class=\"`discu-content1-${index}`\" v-if=\"only_My == false\">\r\n                    <div class=\"detail\">\r\n                        {{ msgDetail.user_input.answer }}\r\n                    </div>\r\n                </div>\r\n                <div class=\"discu-content2\" :class=\"`discu-content2-${index}`\" v-if=\"only_AI == false\">\r\n                    <div class=\"detail\">\r\n                        {{ msgDetail.user_input.question }}\r\n                    </div>\r\n                </div>\r\n                <div class=\"all-line\"></div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getHistoryDetail } from '@/api/user'\r\nexport default {\r\n    name: 'Praxis',\r\n    data() {\r\n        return {\r\n            his_id: 0,\r\n            AiContent: [],\r\n            only_AI: false,\r\n            only_My: false,\r\n            AIWrite: '',\r\n            msgDetail: []\r\n        }\r\n    },\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        async only_AIFun() {\r\n            this.only_AI = !this.only_AI\r\n            this.only_My = false\r\n        },\r\n        async only_MyFun() {\r\n            this.only_My = !this.only_My\r\n            this.only_AI = false\r\n        },\r\n        async get_detail() {\r\n            const response = await getHistoryDetail({ id: this.his_id })\r\n\r\n            const data = response.data\r\n\r\n            if (data.user_input != \"\") {\r\n                data.user_input = JSON.parse(data.user_input)\r\n            }\r\n            this.msgDetail = data\r\n            console.log(data)\r\n        },\r\n    },\r\n    mounted() {\r\n        this.his_id = this.$route.query.his_id;\r\n        this.get_detail()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n.content {\r\n    width: 100vw;\r\n    padding-bottom: 100px;\r\n}\r\n\r\n.line {\r\n    width: 90vw;\r\n    height: 2px;\r\n    background: #E4E4E4;\r\n    margin: 0 auto;\r\n}\r\n\r\n.all-line {\r\n    width: 100vw;\r\n    height: 2px;\r\n    background: #E4E4E4;\r\n}\r\n\r\n.discu-title {\r\n    font-family: Microsoft YaHei, Microsoft YaHei;\r\n    font-weight: bold;\r\n    font-size: 14px;\r\n    color: #000000;\r\n    text-align: left;\r\n    font-style: normal;\r\n    text-transform: none;\r\n    padding: 0 5vw;\r\n}\r\n\r\n.discu-content {\r\n    font-family: Microsoft YaHei, Microsoft YaHei;\r\n    font-size: 14px;\r\n    color: #000000;\r\n    text-align: left;\r\n    font-style: normal;\r\n    text-transform: none;\r\n    margin: 20px 0;\r\n    padding: 0 5vw;\r\n    word-wrap: break-word;\r\n    overflow-wrap: break-word;\r\n}\r\n\r\n.discu-content1 {\r\n    font-family: Microsoft YaHei, Microsoft YaHei;\r\n    font-size: 14px;\r\n    color: #000000;\r\n    text-align: left;\r\n    font-style: normal;\r\n    text-transform: none;\r\n    margin: 20px auto;\r\n    width: 90vw;\r\n    border-left: 5px solid #FFB99E;\r\n    word-wrap: break-word;\r\n    overflow-wrap: break-word;\r\n}\r\n\r\n.discu-content1-0 {\r\n    border-left: 5px solid #FFB99E;\r\n}\r\n\r\n.discu-content1-1 {\r\n    border-left: 5px solid #F1DC58;\r\n}\r\n\r\n.discu-content1-2 {\r\n    border-left: 5px solid #90B8E6;\r\n}\r\n\r\n.discu-content1-3 {\r\n    border-left: 5px solid #74e08f;\r\n}\r\n\r\n.discu-content2 {\r\n    font-family: Microsoft YaHei, Microsoft YaHei;\r\n    font-size: 14px;\r\n    color: #000000;\r\n    text-align: left;\r\n    font-style: normal;\r\n    text-transform: none;\r\n    margin: 20px auto;\r\n    width: 90vw;\r\n    border-right: 5px solid #FFB99E;\r\n    word-wrap: break-word;\r\n    overflow-wrap: break-word;\r\n}\r\n\r\n.discu-content2-0 {\r\n    border-right: 5px solid #FFB99E;\r\n}\r\n\r\n.discu-content2-1 {\r\n    border-right: 5px solid #F1DC58;\r\n}\r\n\r\n.discu-content2-2 {\r\n    border-right: 5px solid #90B8E6;\r\n}\r\n\r\n.discu-content2-3 {\r\n    border-right: 5px solid #74e08f;\r\n}\r\n\r\n.detail {\r\n    margin: 0 10px;\r\n}\r\n\r\n.my-continuation {\r\n    background: #eaeaec;\r\n    min-height: 200px;\r\n    height: auto;\r\n    padding: 20px;\r\n    border-radius: 10px;\r\n}\r\n\r\n.continuation {\r\n    color: #000;\r\n    margin-top: 10px;\r\n}\r\n\r\n.bottom-btn {\r\n    position: fixed;\r\n    bottom: 10px;\r\n    width: 100vw;\r\n    background-color: #FFF;\r\n    height: 80px;\r\n}\r\n\r\n.btn-ok {\r\n    width: 144px;\r\n    height: 45px;\r\n    background: #003F88;\r\n    border-radius: 23px;\r\n    margin: 0 auto;\r\n    line-height: 45px;\r\n    text-align: center;\r\n    color: #FFF;\r\n    margin-top: 20px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.btn-other {\r\n    width: 144px;\r\n    height: 45px;\r\n    /* background: #b4b4b6; */\r\n    border-radius: 23px;\r\n    margin: 0 25px;\r\n    line-height: 45px;\r\n    text-align: center;\r\n    border: 1px solid #b4b4b6;\r\n    margin-top: 20px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n\r\n}\r\n\r\n.change-btn {\r\n    width: 100vw;\r\n    height: 50px;\r\n    text-align: end;\r\n}\r\n\r\n.btn-item {\r\n    border-radius: 12px 12px 12px 12px;\r\n    border: 1px solid #CCCCCC;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin: 20px;\r\n    text-align: center;\r\n    padding: 5px 10px;\r\n\r\n}\r\n\r\n.btn-active {\r\n    border: 1px solid #9deffd;\r\n    color: #9deffd;\r\n}\r\n</style>","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HistoryDetail.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HistoryDetail.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./HistoryDetail.vue?vue&type=template&id=748a8fb4&scoped=true\"\nimport script from \"./HistoryDetail.vue?vue&type=script&lang=js\"\nexport * from \"./HistoryDetail.vue?vue&type=script&lang=js\"\nimport style0 from \"./HistoryDetail.vue?vue&type=style&index=0&id=748a8fb4&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"748a8fb4\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"main\"},[_c('van-nav-bar',{attrs:{\"title\":\"预约\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticClass:\"tea-info\"},[_c('div',{staticClass:\"info-desc\"},[_c('div',{staticClass:\"desc-top\"},[_c('vide',{staticClass:\"tea-name\"},[_vm._v(_vm._s(_vm.writeTeacher.row.name))]),_c('div',{staticClass:\"school-chirld\"},[_vm._v(_vm._s(_vm.writeTeacher.row.college_name))])],1),(_vm.writeTeacher.row.labels != [])?_c('div',{staticClass:\"item-lable\"},[(_vm.writeTeacher.row.labels[0])?_c('div',{staticClass:\"lable-item lable-item0\"},[_vm._v(\" \"+_vm._s(_vm.writeTeacher.row.labels[0])+\" \")]):_vm._e(),(_vm.writeTeacher.row.labels[1])?_c('div',{staticClass:\"lable-item lable-item1\"},[_vm._v(\" \"+_vm._s(_vm.writeTeacher.row.labels[1])+\" \")]):_vm._e(),(_vm.writeTeacher.row.labels[2])?_c('div',{staticClass:\"lable-item lable-item2\"},[_vm._v(\" \"+_vm._s(_vm.writeTeacher.row.labels[2])+\" \")]):_vm._e(),(_vm.writeTeacher.row.labels[3])?_c('div',{staticClass:\"lable-item lable-item3\"},[_vm._v(\" \"+_vm._s(_vm.writeTeacher.row.labels[3])+\" \")]):_vm._e()]):_vm._e()]),_c('img',{staticClass:\"tea-pic\",attrs:{\"src\":_vm.writeTeacher.row.avatar || 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png',\"mode\":\"\"}})]),_c('div',{staticClass:\"zixun\"},[_c('div',{staticClass:\"ardress\"},[_vm._v(\"咨询地点：\"+_vm._s(_vm.addr))]),_c('div',{staticClass:\"tea-desc\"},[_vm._v(\"教师介绍：\"+_vm._s(_vm.writeTeacher.row.intro))])]),_c('div',{staticClass:\"time-list\"},[_c('div',{staticClass:\"time-title\"},[_vm._v(\"咨询时间选择\")]),_c('div',{staticClass:\"date-list\"},_vm._l((_vm.writeTeacher.logList),function(item,index){return _c('span',{key:index},[(item.end_time > _vm.currentTime)?_c('div',{staticClass:\"date-item\",class:{ 'cancheck-item-checked': _vm.check_date == item.dateline },on:{\"click\":function($event){return _vm.change_date(item, index)}}},[_vm._v(\" \"+_vm._s(item.dateline)+\" \")]):_vm._e()])}),0),_c('div',{staticClass:\"am-time\"},[_c('div',{staticClass:\"cancheck-list\"},_vm._l((_vm.logTimeList),function(item,index){return (item.order_num > 0)?_c('div',{key:index,staticClass:\"cancheck-item\",class:{ 'cancheck-item-checked': _vm.time_id == item.id },on:{\"click\":function($event){return _vm.check_time(item)}}},[_vm._v(_vm._s(item.timeline))]):_vm._e()}),0)])]),_c('div',{staticClass:\"ques-callback\"},[_c('div',{staticClass:\"time-title\"},[_vm._v(\"问题概述\")]),_c('div',{staticClass:\"ques-input\"},[_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.intro),expression:\"intro\"}],staticClass:\"external-class\",attrs:{\"placeholder-class\":\"placeholder\",\"placeholder\":\"请输入内容\"},domProps:{\"value\":(_vm.intro)},on:{\"input\":function($event){if($event.target.composing)return;_vm.intro=$event.target.value}}})])]),_c('div',{staticClass:\"fujian\"},[_c('div',{staticClass:\"time-title\"},[_vm._v(\"附件\")]),_c('div',{staticClass:\"fujian-chirld\"},[_c('van-uploader',{attrs:{\"after-read\":_vm.afterRead}},[_c('div',{staticClass:\"fujian-chirld\"},[_c('img',{staticClass:\"upload-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/write/upload.png\",\"mode\":\"\"}}),_c('span',{staticStyle:{\"line-height\":\"70px\",\"font-size\":\"12px\",\"color\":\"#9D9D9D\",\"position\":\"relative\",\"left\":\"100px\"}},[_vm._v(\" 请上传作文附件\")])])])],1)]),_c('div',{staticClass:\"bottom\"},[_c('div',{staticClass:\"bottom-left\"},[_c('div',{staticClass:\"use-time\"},[_vm._v(_vm._s(_vm.check_date)+\"|\"+_vm._s(_vm.dateline))]),_c('div',{staticClass:\"teaInfo\"},[_c('div',{staticClass:\"teaName\"},[_vm._v(_vm._s(_vm.writeTeacher.row.name))]),_c('div',{staticClass:\"teaAddress\"},[_vm._v(_vm._s(_vm.addr))])])]),(_vm.cansubmit == true)?_c('div',{staticClass:\"bottom-right\"},[_c('div',{staticClass:\"btn-ok\",on:{\"click\":_vm.mine_submit}},[_vm._v(\"确认预约\")])]):_vm._e()])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"main\">\r\n        <van-nav-bar title=\"预约\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <div class=\"tea-info\">\r\n\r\n            <div class=\"info-desc\">\r\n                <div class=\"desc-top\">\r\n                    <vide class=\"tea-name\">{{ writeTeacher.row.name }}</vide>\r\n                    <div class=\"school-chirld\">{{ writeTeacher.row.college_name }}</div>\r\n                </div>\r\n                <div class=\"item-lable\" v-if=\"writeTeacher.row.labels != []\">\r\n\r\n                    <div class=\"lable-item lable-item0\" v-if=\"writeTeacher.row.labels[0]\">\r\n                        {{ writeTeacher.row.labels[0] }}\r\n                    </div>\r\n                    <div class=\"lable-item lable-item1\" v-if=\"writeTeacher.row.labels[1]\">\r\n                        {{ writeTeacher.row.labels[1] }}\r\n                    </div>\r\n                    <div class=\"lable-item lable-item2\" v-if=\"writeTeacher.row.labels[2]\">\r\n                        {{ writeTeacher.row.labels[2] }}\r\n                    </div>\r\n                    <div class=\"lable-item lable-item3\" v-if=\"writeTeacher.row.labels[3]\">\r\n                        {{ writeTeacher.row.labels[3] }}\r\n                    </div>\r\n                </div>\r\n            </div>\r\n            <img :src=\"writeTeacher.row.avatar || 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png'\" mode=\"\"\r\n                class=\"tea-pic\" />\r\n        </div>\r\n        <div class=\"zixun\">\r\n            <div class=\"ardress\">咨询地点：{{ addr }}</div>\r\n            <div class=\"tea-desc\">教师介绍：{{ writeTeacher.row.intro }}</div>\r\n        </div>\r\n\r\n        <div class=\"time-list\">\r\n            <div class=\"time-title\">咨询时间选择</div>\r\n            <!-- <div class=\"calendar-check\" @click=\"changShow\">\r\n                <div class=\"check-date\">{{ check_date }}</div>\r\n                <t-icon name=\"calendar-1\" class=\"calendar-icon\" size=\"16\" />\r\n            </div> -->\r\n            <div class=\"date-list\">\r\n                <span v-for=\"(item, index) in writeTeacher.logList\" v-bind:key=\"index\">\r\n                    <div class=\"date-item\" :class=\"{ 'cancheck-item-checked': check_date == item.dateline }\"\r\n                        v-if=\"item.end_time > currentTime\" @click=\"change_date(item, index)\">\r\n                        {{ item.dateline }}\r\n                    </div>\r\n                </span>\r\n\r\n            </div>\r\n            <div class=\"am-time\">\r\n                <div class=\"cancheck-list\">\r\n                    <div v-if=\"item.order_num > 0\" class=\"cancheck-item\"\r\n                        :class=\"{ 'cancheck-item-checked': time_id == item.id }\" v-for=\"(item, index) in logTimeList\"\r\n                        v-bind:key=\"index\" @click=\"check_time(item)\">{{\r\n                            item.timeline }}</div>\r\n\r\n                </div>\r\n            </div>\r\n        </div>\r\n\r\n\r\n        <div class=\"ques-callback\">\r\n            <div class=\"time-title\">问题概述</div>\r\n            <div class=\"ques-input\">\r\n                <textarea class=\"external-class\" v-model=\"intro\" placeholder-class=\"placeholder\" placeholder=\"请输入内容\" />\r\n            </div>\r\n        </div>\r\n\r\n        <div class=\"fujian\">\r\n            <div class=\"time-title\">附件</div>\r\n            <div class=\"fujian-chirld\">\r\n                <van-uploader :after-read=\"afterRead\">\r\n                    <div class=\"fujian-chirld\">\r\n                        <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/write/upload.png\" mode=\"\"\r\n                            class=\"upload-img\" />\r\n                        <span style=\"line-height: 70px;font-size: 12px;color: #9D9D9D;position: relative;left: 100px;\">\r\n                            请上传作文附件</span>\r\n                    </div>\r\n                </van-uploader>\r\n            </div>\r\n        </div>\r\n\r\n\r\n\r\n        <div class=\"bottom\">\r\n            <div class=\"bottom-left\">\r\n                <div class=\"use-time\">{{ check_date }}|{{ dateline }}</div>\r\n                <div class=\"teaInfo\">\r\n                    <div class=\"teaName\">{{ writeTeacher.row.name }}</div>\r\n                    <div class=\"teaAddress\">{{ addr }}</div>\r\n                </div>\r\n            </div>\r\n            <div class=\"bottom-right\" v-if=\"cansubmit == true\">\r\n                <div class=\"btn-ok\" @click=\"mine_submit\">确认预约</div>\r\n            </div>\r\n        </div>\r\n\r\n\r\n\r\n        <!-- <van-popup v-model=\"show\" position=\"bottom\" style=\"border-radius: 0 0 40px 40px\">\r\n            <div class=\"block\">\r\n                <div class=\"header\">\r\n                    <div class=\"title\">选择咨询日期</div>\r\n                    <div class=\"btn btn--confirm\" aria-role=\"button\" @click=\"changShow\">取消</div>\r\n                </div>\r\n                <div class=\"date-list\">\r\n                    <div class=\"date-item\" v-for=\"(item, index) in writeTeacher.logList\" v-bind:key=\"index\"\r\n                        @click=\"change_date(item)\">\r\n                        {{ item.dateline }}\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </van-popup> -->\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getById, saveWriteTeacherOrder } from '@/api/user'\r\nimport { applyAuthorizationToXhr } from '@/utils/auth'\r\nexport default {\r\n    name: 'Index',\r\n    data() {\r\n        return {\r\n            userInfo: [],\r\n            writeTeacher: [],\r\n            show: false,\r\n            cansubmit: true,\r\n            tea_id: '',\r\n            intro: '',\r\n            log_time_id: 0,\r\n            filePath: '',\r\n            currentTime: '',\r\n            time_id: 0\r\n        }\r\n    },\r\n    created() {\r\n        // 当Vue实例被创建后\r\n        this.updateTime(); // 更新一次时间\r\n        setInterval(this.updateTime, 1000); // 每秒更新一次时间\r\n    },\r\n    methods: {\r\n        updateTime() {\r\n            this.currentTime = Date.now() / 1000; // 格式化时间\r\n            // console.log(this.currentTime)\r\n        },\r\n        async afterRead(file) {\r\n            console.log(file)\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    var form = new FormData();\r\n                    form.append(\"file\", file.file, user.sid + \"-\" + new Date().getTime() + file.file.name); //和普通form表单并无二致，后端接收到upfile参数的文件，文件名为recorder.mp3\r\n                    var xhr = new XMLHttpRequest();\r\n                    // xhr.open(\"POST\", \"https://zju.3dease.com/fcapi/mobileupload/upload\");\r\n                    xhr.open('POST', `${process.env.VUE_APP_BASE_API}mobileupload/upload`);\r\n                    applyAuthorizationToXhr(xhr);\r\n                    xhr.onreadystatechange = () => {\r\n                        if (xhr.readyState === 4) {\r\n                            if (xhr.status === 200) {\r\n                                // 请求成功，解析响应\r\n                                var response = JSON.parse(xhr.responseText);\r\n                                this.filePath = response.data.url\r\n                                this.$message({\r\n                                    message: '上传成功',\r\n                                    center: true\r\n                                })\r\n\r\n                            } else {\r\n                                // 请求失败，处理错误\r\n                                console.error(\"上传失败，状态码:\", xhr.status);\r\n                                console.error(\"错误信息:\", xhr.statusText);\r\n                            }\r\n                        }\r\n                    };\r\n                    xhr.send(form);\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n\r\n        },\r\n        async change_lable(index) {\r\n            this.checkType = index\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n        async change_date(item, index) {\r\n            this.show = false\r\n            this.check_date = item.dateline\r\n            this.logTimeList = this.writeTeacher.logList[index].logTimeList\r\n            this.addr = this.writeTeacher.logList[index].addr\r\n            if (this.writeTeacher.logList[index].order_num == 0) {\r\n                this.$message({\r\n                    message: '当前预约已满',\r\n                    type:'error',\r\n                    center: true\r\n                })\r\n                // alert(123)\r\n            }\r\n            console.log(this.logTimeList)\r\n            this.$forceUpdate();\r\n        },\r\n        async noCheck() {\r\n            this.show = false\r\n            this.check_date = ''\r\n            this.logTimeList = []\r\n            console.log(this.logTimeList)\r\n            this.$message({\r\n                message: '已过期',\r\n                type:'error',\r\n                center: true\r\n            })\r\n            this.$forceUpdate();\r\n        },\r\n        async check_time(item) {\r\n            this.dateline = item.timeline\r\n            this.time_id = item.id\r\n            this.$forceUpdate();\r\n        },\r\n        async getTeaById() {\r\n            try {\r\n                const response = await getById({ id: this.tea_id })\r\n                if (response.data.row.labels != null) {\r\n                    response.data.row.labels = response.data.row.labels.split(/[,，]/)\r\n                } else {\r\n                    response.data.row.labels = []\r\n                }\r\n\r\n                response.data.logList.forEach((item, index) => {\r\n                    console.log(index)\r\n                    var date = new Date(item.dateline);\r\n                    const days = [\"周日\", \"周一\", \"周二\", \"周三\", \"周四\", \"周五\", \"周六\"];\r\n                    item.dateline = item.dateline + \" (\" + days[date.getDay()] + \")\";\r\n                    item.end_time = new Date(item.end_time).getTime() / 1000\r\n                    console.log(item.end_time)\r\n                })\r\n                console.log(response.data)\r\n                this.writeTeacher = response.data\r\n                this.check_date = response.data.logList[0].dateline,\r\n                    this.addr = response.data.logList[0].addr,\r\n                    this.logTimeList = response.data.logList[0].logTimeList\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n\r\n        async changShow() {\r\n            this.show = !this.show;\r\n        },\r\n        async mine_submit() {\r\n            try {\r\n\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n\r\n\r\n                if (this.time_id == 0) {\r\n                    this.$message({\r\n                        message: '请选择预约时间',\r\n                        type:'error',\r\n                        center: true\r\n                    })\r\n                    return\r\n                }\r\n                this.cansubmit = false\r\n                const response = await saveWriteTeacherOrder({\r\n                    log_time_id: this.time_id,\r\n                    sid: user.sid,\r\n                    file_path: this.filePath,\r\n                    intro: this.intro\r\n                })\r\n\r\n                this.$message({\r\n                    message: '预约成功',\r\n                    center: true\r\n                })\r\n                this.$router.push({ name: 'WriteTeaList' })\r\n                console.log(response)\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n\r\n        this.tea_id = this.$route.query.tea_id;\r\n        this.getTeaById()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n/* pages/write/second/list.wxss */\r\n/* pages/write/second/submit.wxss */\r\n.main {\r\n    background-color: #F8F8F8;\r\n    text-align: left;\r\n}\r\n\r\n.tea-info {\r\n    background: url(https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/write/info-bg.png);\r\n    width: 350px;\r\n    height: 75px;\r\n    background-size: cover;\r\n    margin: 0 auto;\r\n    margin-top: 24px;\r\n}\r\n\r\n.info-desc {\r\n    width: 255px;\r\n    height: 33px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.desc-top {\r\n    padding: 12px 0 6px 20px;\r\n}\r\n\r\n.tea-name {\r\n    font-size: 18px;\r\n    font-weight: bold;\r\n}\r\n\r\n.school-chirld {\r\n    font-size: 10px;\r\n    color: #4A4A4A;\r\n    padding-top: 6px;\r\n    padding-left: 7px;\r\n}\r\n\r\n.school-chirld,\r\n.tea-name {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.tea-pic {\r\n    width: 65px;\r\n    height: 65px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin-top: -17px;\r\n}\r\n\r\n.item-lable {\r\n    padding: 7px 0 12px 20px;\r\n}\r\n\r\n.lable-item {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin-right: 8px;\r\n    padding: 2px 5px;\r\n    border-radius: 4px;\r\n    font-size: 10px;\r\n    color: #FFF;\r\n}\r\n\r\n.lable-item0 {\r\n    background-color: #57CE53;\r\n}\r\n\r\n.lable-item1 {\r\n    background-color: #80A9E6;\r\n}\r\n\r\n.lable-item2 {\r\n    background-color: #E47ACE;\r\n}\r\n\r\n.lable-item3 {\r\n    background-color: #def705;\r\n}\r\n\r\n.zixun {\r\n    width: 330px;\r\n    /* height: 74px; */\r\n    margin: 0 auto;\r\n    background-color: #FFF;\r\n    border-radius: 0 0 10px 10px;\r\n    padding: 20px 10px;\r\n}\r\n\r\n.ardress {\r\n    padding: 7px 0 8px 19px;\r\n    font-size: 12px;\r\n    color: #404040;\r\n}\r\n\r\n.tea-desc {\r\n    color: #4A4A4A;\r\n    padding-left: 19px;\r\n    font-size: 12px;\r\n}\r\n\r\n.time-list {\r\n    width: 350px;\r\n    height: auto;\r\n    /* min-height: 458rpx; */\r\n    background: #FFFFFF;\r\n    border-radius: 10px;\r\n    margin: 15px auto 13px auto;\r\n}\r\n\r\n.time-title {\r\n    color: #000000;\r\n    font-size: 12px;\r\n    font-weight: bold;\r\n    padding: 11px 0 11px 20px;\r\n}\r\n\r\n.calendar-check {\r\n    width: 321px;\r\n    height: 26px;\r\n    background: #F4F8FB;\r\n    border-radius: 14px;\r\n    margin: 0 auto;\r\n}\r\n\r\n.check-date {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    font-size: 12px;\r\n    color: #989898;\r\n    line-height: 26px;\r\n    padding: 0 172px 0 14px;\r\n}\r\n\r\n.calendar-icon {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-top: 4px;\r\n}\r\n\r\n.am-time,\r\n.pm-time {\r\n    padding: 18px 0 8px 20px;\r\n}\r\n\r\n\r\n.cancheck-item {\r\n    background-color: #F4F8FB;\r\n    line-height: 22px;\r\n    text-align: center;\r\n    /* width: 93px; */\r\n    height: 22px;\r\n    border-radius: 10px;\r\n    color: #989898;\r\n    font-size: 12px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin: 10px 10px 10px 0;\r\n    padding: 0 12px;\r\n}\r\n\r\n.cancheck-item-checked {\r\n    background-color: #E2F9FF;\r\n    color: #699FDE;\r\n    border: 1px solid #699FDE;\r\n}\r\n\r\n.nocheck-item-checked {\r\n    background-color: #bfc3c4;\r\n    color: #ef1711;\r\n    border: 1px solid #e2e5e9;\r\n}\r\n\r\n.ques-callback {\r\n    width: 350px;\r\n    height: 130px;\r\n    background: #FFF;\r\n    border-radius: 10px;\r\n    margin: 0 auto;\r\n}\r\n\r\n.ques-input,\r\n.external-class {\r\n    width: 90%;\r\n    /* height: 20rpx; */\r\n    padding: 5px 15px;\r\n    height: 50px;\r\n}\r\n\r\n.textarea {\r\n    display: flex;\r\n    flex-direction: column;\r\n    box-sizing: border-box;\r\n    padding: 0px 16px !important;\r\n    background-color: var(--td-textarea-background-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)));\r\n}\r\n\r\n.placeholder {\r\n    color: #9D9D9D !important;\r\n    font-size: 12px !important;\r\n}\r\n\r\n\r\n.fujian {\r\n    width: 350px;\r\n    height: 108px;\r\n    background: #FFFFFF;\r\n    border-radius: 10px 10px 0 0;\r\n    margin: 15px auto 0 auto;\r\n\r\n}\r\n\r\n\r\n.fujian-chirld {\r\n    width: 350px;\r\n    height: 60px;\r\n    /* border: #D2D2D2 1px dashed; */\r\n}\r\n\r\n.upload-img {\r\n    width: 17px;\r\n    height: 12px;\r\n    float: left;\r\n    position: relative;\r\n    left: 56px;\r\n    top: 30px;\r\n}\r\n\r\n\r\n.bottom {\r\n    width: 100vw;\r\n    height: 90px;\r\n    background: #FFFFFF;\r\n    box-shadow: 0px -3px 4px 1px rgba(0, 0, 0, 0.03);\r\n    border-radius: 0;\r\n    margin-top: 20px;\r\n}\r\n\r\n.bottom-left {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 227px;\r\n    height: 90px;\r\n}\r\n\r\n.use-time {\r\n    font-size: 12px;\r\n    padding: 17px 0 0 19px;\r\n}\r\n\r\n.teaInfo {\r\n    color: #808080;\r\n    font-size: 14px;\r\n    padding: 4px 0 0 19px;\r\n}\r\n\r\n.teaName,\r\n.teaAddress {\r\n    vertical-align: top;\r\n    font-size: 12px;\r\n    display: inline-block;\r\n}\r\n\r\n.teaAddress {\r\n    margin-left: 25px;\r\n}\r\n\r\n.bottom-right {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-top: 15px;\r\n}\r\n\r\n.btn-ok {\r\n    width: 133px;\r\n    height: 43px;\r\n    background-color: #003F88;\r\n    color: #FFF;\r\n    font-size: 14px;\r\n    text-align: center;\r\n    line-height: 43px;\r\n    border-radius: 23px;\r\n}\r\n\r\n.block {\r\n    width: 100vw;\r\n    height: 240px;\r\n    background: var(--td-bg-color-container);\r\n    border-top-left-radius: 8px;\r\n    border-top-right-radius: 8px;\r\n}\r\n\r\n.wrapper {\r\n    margin: 16px;\r\n    display: block;\r\n}\r\n\r\n.header {\r\n    display: flex;\r\n    align-items: center;\r\n    height: 58px;\r\n}\r\n\r\n.title {\r\n    flex: 1;\r\n    text-align: center;\r\n    font-weight: 600;\r\n    font-size: 18px;\r\n    color: var(--td-text-color-primary);\r\n    padding-left: 80px;\r\n}\r\n\r\n.btn {\r\n    font-size: 16px;\r\n    padding: 16px;\r\n}\r\n\r\n.btn--cancel {\r\n    color: var(--td-text-color-secondary);\r\n}\r\n\r\n.btn--confirm {\r\n    color: #0052d9;\r\n}\r\n\r\n.date-list {\r\n    width: 320px;\r\n    height: auto;\r\n}\r\n\r\n.date-item {\r\n    width: 320px;\r\n    height: 25px;\r\n    margin: 5px 12px;\r\n    text-align: center;\r\n    background-color: #F4F8FB;\r\n    border-radius: 9px;\r\n    line-height: 25px;\r\n}\r\n</style>\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Submit.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Submit.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Submit.vue?vue&type=template&id=55da53c4&scoped=true\"\nimport script from \"./Submit.vue?vue&type=script&lang=js\"\nexport * from \"./Submit.vue?vue&type=script&lang=js\"\nimport style0 from \"./Submit.vue?vue&type=style&index=0&id=55da53c4&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"55da53c4\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"main\"},[_c('div',{staticClass:\"tea-info\"},[_c('img',{staticClass:\"tea-pic\",attrs:{\"src\":(_vm.orderInfo.writeTeacher && _vm.orderInfo.writeTeacher.avatar) || 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png',\"mode\":\"\"}}),_c('div',{staticClass:\"info-desc\"},[_c('div',{staticClass:\"desc-top\"},[_c('vide',{staticClass:\"tea-name\"},[_vm._v(_vm._s(_vm.orderInfo.writeTeacher.name))]),_c('div',{staticClass:\"school-chirld\"})],1)]),(_vm.orderInfo.writeTeacherOrder.state == 1)?_c('div',{staticClass:\"reserve-status\"},[_vm._v(\"已预约\")]):_vm._e(),(_vm.orderInfo.writeTeacherOrder.state == 0)?_c('div',{staticClass:\"reserve-status-cancle\",staticStyle:{\"background-color\":\"#C1C1C1\"}},[_vm._v(\"已取消\")]):_vm._e(),(_vm.orderInfo.writeTeacherOrder.state == 2)?_c('div',{staticClass:\"reserve-status reserve-status-finish\"},[_vm._v(\"已完成 \")]):_vm._e()]),_c('div',{staticClass:\"zixun\"},[_c('div',{staticClass:\"ardress\"},[_vm._v(\"预约地点：\"+_vm._s(_vm.orderInfo.writeTeacherLog.addr))]),_c('div',{staticClass:\"ardress\"},[_vm._v(\"联系方式：\"+_vm._s(_vm.orderInfo.writeTeacher.mobile))]),_c('div',{staticClass:\"tea-desc\"},[_vm._v(\"预约时间：\"+_vm._s(_vm.orderInfo.writeTeacherLog.dateline)+\" \"+_vm._s(_vm.orderInfo.writeTeacherLogTime.timeline))])]),_c('div',{staticClass:\"ques-callback\"},[_c('div',{staticClass:\"time-title\"},[_vm._v(\"问题概述\")]),_c('div',{staticClass:\"ques-input\"},[_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.orderInfo.writeTeacherOrder.intro),expression:\"orderInfo.writeTeacherOrder.intro\"}],staticClass:\"external-class\",attrs:{\"disabled\":\"true\",\"placeholder\":\"请输入内容\"},domProps:{\"value\":(_vm.orderInfo.writeTeacherOrder.intro)},on:{\"input\":function($event){if($event.target.composing)return;_vm.$set(_vm.orderInfo.writeTeacherOrder, \"intro\", $event.target.value)}}})])]),_vm._l((_vm.feedBackList),function(item,index){return _c('div',{key:index,staticClass:\"guestbook-detail\"},[_c('img',{staticClass:\"stu-pic\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png\",\"mode\":\"\"}}),_c('div',{staticClass:\"stu-name\"},[_vm._v(_vm._s(item.row.name))]),_c('div',{staticClass:\"guestbook-list\"},[_c('div',{staticClass:\"main-guestbook\"},[_vm._v(\" \"+_vm._s(item.row.content)+\" \")]),_c('div',{staticClass:\"send-time\"},[_vm._v(_vm._s(item.row.create_time))]),(item.reply_row != null)?_c('div',{staticClass:\"call-back\"},[_vm._v(\"回复\")]):_vm._e(),(item.reply_row != null)?_c('div',{staticClass:\"call-back-list\"},[_c('img',{staticClass:\"stu-pic\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png\",\"mode\":\"\"}}),_c('div',{staticClass:\"stu-name\"},[_vm._v(_vm._s(item.reply_row.name))]),_c('div',{staticClass:\"main-guestbook-chirld\"},[_vm._v(\" \"+_vm._s(item.reply_row.content)+\" \")]),_c('div',{staticClass:\"send-time\"},[_vm._v(_vm._s(item.reply_row.create_time))]),_c('div',{staticClass:\"call-back\"},[_vm._v(\"回复\")])]):_vm._e()])])}),_c('div',{staticStyle:{\"width\":\"100%\",\"height\":\"100px\"}}),_c('div',{staticClass:\"guestbook\"},[_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.save_content),expression:\"save_content\"}],staticClass:\"external-class\",attrs:{\"placeholder\":\"请输入内容\"},domProps:{\"value\":(_vm.save_content)},on:{\"input\":function($event){if($event.target.composing)return;_vm.save_content=$event.target.value}}})]),_c('div',{staticClass:\"send-btn\",on:{\"click\":_vm.saveFeedBack}},[_vm._v(\"发送\")])],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <!--pages/write/second/submit.wxml-->\r\n    <div class=\"main\">\r\n        <div class=\"tea-info\">\r\n            <img :src=\"(orderInfo.writeTeacher && orderInfo.writeTeacher.avatar) || 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png'\" mode=\"\"\n                class=\"tea-pic\" />\r\n            <div class=\"info-desc\">\r\n                <div class=\"desc-top\">\r\n                    <vide class=\"tea-name\">{{ orderInfo.writeTeacher.name }}</vide>\r\n                    <div class=\"school-chirld\"></div>\r\n                </div>\r\n            </div>\r\n            <div class=\"reserve-status\" v-if=\"orderInfo.writeTeacherOrder.state == 1\">已预约</div>\r\n            <div class=\"reserve-status-cancle\" style=\"background-color: #C1C1C1;\"\r\n                v-if=\"orderInfo.writeTeacherOrder.state == 0\">已取消</div>\r\n            <div class=\"reserve-status reserve-status-finish\" v-if=\"orderInfo.writeTeacherOrder.state == 2\">已完成\r\n            </div>\r\n        </div>\r\n        <div class=\"zixun\">\r\n            <div class=\"ardress\">预约地点：{{ orderInfo.writeTeacherLog.addr }}</div>\r\n            <div class=\"ardress\">联系方式：{{ orderInfo.writeTeacher.mobile }}</div>\r\n            <div class=\"tea-desc\">预约时间：{{ orderInfo.writeTeacherLog.dateline }}\r\n                {{ orderInfo.writeTeacherLogTime.timeline }}</div>\r\n        </div>\r\n\r\n        <div class=\"ques-callback\">\r\n            <div class=\"time-title\">问题概述</div>\r\n            <div class=\"ques-input\">\r\n                <textarea disabled=\"true\" class=\"external-class\" v-model=\"orderInfo.writeTeacherOrder.intro\"\r\n                    placeholder=\"请输入内容\" />\r\n            </div>\r\n        </div>\r\n\r\n        <div class=\"guestbook-detail\" v-for=\"(item, index) in feedBackList\" :key=\"index\">\r\n            <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png\" mode=\"\"\r\n                class=\"stu-pic\" />\r\n            <div class=\"stu-name\">{{ item.row.name }}</div>\r\n            <div class=\"guestbook-list\">\r\n                <div class=\"main-guestbook\">\r\n                    {{ item.row.content }}\r\n                </div>\r\n                <div class=\"send-time\">{{ item.row.create_time }}</div>\r\n                <div class=\"call-back\" v-if=\"item.reply_row != null\">回复</div>\r\n                <div class=\"call-back-list\" v-if=\"item.reply_row != null\">\r\n                    <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png\"\r\n                        mode=\"\" class=\"stu-pic\" />\r\n                    <div class=\"stu-name\">{{ item.reply_row.name }}</div>\r\n                    <div class=\"main-guestbook-chirld\">\r\n                        {{ item.reply_row.content }}\r\n                    </div>\r\n                    <div class=\"send-time\">{{ item.reply_row.create_time }}</div>\r\n                    <div class=\"call-back\">回复</div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n\r\n\r\n\r\n\r\n        <div style=\"width: 100%;height: 100px;\"></div>\r\n        <div class=\"guestbook\">\r\n            <textarea class=\"external-class\" v-model='save_content' placeholder=\"请输入内容\" />\r\n        </div>\r\n        <div class=\"send-btn\" @click=\"saveFeedBack\">发送</div>\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getMyOrderInfo, getFeedBackList, saveFeedback } from '@/api/user'\r\nexport default {\r\n    name: 'MySubmit',\r\n    data() {\r\n        return {\r\n            orderInfo: [],\r\n            reserve_status: 1,\r\n            feedBackList: [],\r\n            y_id: 0,\r\n            save_content: ''\r\n        }\r\n    },\r\n    methods: {\r\n        async getMyOrderInfo() {\r\n            try {\r\n                const response = await getMyOrderInfo({ id: this.y_id })\r\n                this.orderInfo = response.data\r\n                console.log(this.orderInfo)\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n\r\n        async getFeedBackList() {\r\n            try {\r\n                const response = await getFeedBackList({ teacher_order_id: this.y_id })\r\n                if (response.code == 100) {\r\n                    this.feedBackList = response.data\r\n                    console.log(response.data)\r\n                    // 确保更新视图\r\n                    this.$forceUpdate();\r\n                }\r\n\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n\r\n        async saveFeedBack() {\r\n            // saveFeedback\r\n            // teacher_order_id: this.data.order_id,sid:this.data.userInfo.sid,content:this.data.save_content\r\n            const user = JSON.parse(localStorage.getItem('user'))\r\n            try {\r\n                const response = await saveFeedback({ teacher_order_id: this.y_id, sid: user.sid, content: this.save_content })\r\n                if (response.code == 100) {\r\n                    this.save_content = ''\r\n                    this.getFeedBackList()\r\n                    // 确保更新视图\r\n                    this.$forceUpdate();\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        }\r\n\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        this.y_id = this.$route.query.y_id;\r\n        this.getMyOrderInfo()\r\n        this.getFeedBackList()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n/* pages/write/second/submit.wxss */\r\n#app {\r\n    background-color: #F8F8F8;\r\n    text-align: left;\r\n}\r\n\r\n.main {\r\n    text-align: left;\r\n}\r\n\r\n.tea-info {\r\n    width: 350px;\r\n    height: 75px;\r\n    background-size: cover;\r\n    margin: 0 auto;\r\n    margin-top: 24px;\r\n    background-color: #FFF;\r\n}\r\n\r\n.info-desc {\r\n    width: 205px;\r\n    height: 33px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.desc-top {\r\n    padding: 12px 0 6px 20px;\r\n}\r\n\r\n.tea-name {\r\n    font-size: 18px;\r\n    font-weight: bold;\r\n}\r\n\r\n.school-chirld {\r\n    font-size: 10px;\r\n    color: #4A4A4A;\r\n    padding-top: 6px;\r\n    padding-left: 7px;\r\n}\r\n\r\n.school-chirld,\r\n.tea-name {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.tea-pic {\r\n    width: 65px;\r\n    height: 65px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin-top: 7px;\r\n}\r\n\r\n.reserve-status {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 69px;\r\n    height: 26px;\r\n    text-align: center;\r\n    line-height: 26px;\r\n    font-size: 10px;\r\n    color: #00AF17;\r\n    background: linear-gradient(to right, #FFF, #BBEFB1);\r\n    margin-top: 18px;\r\n}\r\n\r\n.reserve-status-cancle {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 69px;\r\n    height: 26px;\r\n    text-align: center;\r\n    line-height: 26px;\r\n    font-size: 10px;\r\n    color: #FFF;\r\n    background: C1C1C1;\r\n    margin-top: 18px;\r\n}\r\n\r\n.reserve-status-finish {\r\n    color: #BB5700;\r\n    background: linear-gradient(to right, #FFF, #FFD23E);\r\n}\r\n\r\n.zixun {\r\n    width: 350px;\r\n    height: 65px;\r\n    margin: 0 auto 15px auto;\r\n    background-color: #FFF;\r\n    border-radius: 0 0 10px 10px;\r\n}\r\n\r\n.ardress {\r\n    padding: 7px 0 8px 19px;\r\n    font-size: 12px;\r\n    color: #404040;\r\n}\r\n\r\n.tea-desc {\r\n    color: #4A4A4A;\r\n    padding-left: 19px;\r\n    font-size: 12px;\r\n}\r\n\r\n.time-list {\r\n    width: 350px;\r\n    height: auto;\r\n    min-height: 229px;\r\n    background: #FFFFFF;\r\n    border-radius: 10px;\r\n    margin: 15px auto 13px auto;\r\n}\r\n\r\n.time-title {\r\n    color: #000000;\r\n    font-size: 12px;\r\n    font-weight: bold;\r\n    padding: 11px 0 11px 20px;\r\n}\r\n\r\n\r\n\r\n\r\n.ques-callback {\r\n    width: 300px;\r\n    height: 86px;\r\n    background: #FFF;\r\n    border-radius: 10px;\r\n    margin: 0 auto;\r\n}\r\n\r\n.ques-input,\r\n.external-class {\r\n    width: 100%;\r\n    /* height: 20rpx; */\r\n    padding: 5px 5px;\r\n    height: 50px;\r\n}\r\n\r\n.t-textarea {\r\n    display: flex;\r\n    flex-direction: column;\r\n    box-sizing: border-box;\r\n    padding: 0px 16px !important;\r\n    background-color: var(--td-textarea-background-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)));\r\n}\r\n\r\n.t-textarea__placeholder {\r\n    color: #9D9D9D !important;\r\n    font-size: 12px !important;\r\n}\r\n\r\n.fujian {\r\n    width: 350px;\r\n    height: 108px;\r\n    background: #FFFFFF;\r\n    border-radius: 5px;\r\n    margin: 0 auto;\r\n    margin-top: 15px;\r\n}\r\n\r\n.fujian-name {\r\n    font-size: 12px;\r\n    padding-left: 19px;\r\n    color: rgb(160, 160, 221);\r\n}\r\n\r\n\r\n\r\n/* 已完成 */\r\n\r\n.consult {\r\n    width: 350px;\r\n    height: 44px;\r\n    background: #FFFFFF;\r\n    border-radius: 5px;\r\n    margin: 0 auto;\r\n}\r\n\r\n.consult-title {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 152px;\r\n    height: 44px;\r\n    line-height: 44px;\r\n    font-size: 12px;\r\n    font-weight: bold;\r\n    padding-left: 23px;\r\n}\r\n\r\n.consult-link {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 175px;\r\n    height: 44px;\r\n    text-align: right;\r\n    font-size: 12px;\r\n    color: #9D9D9D;\r\n    line-height: 44px;\r\n}\r\n\r\n.stu-status-icon {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding: 0px 10px;\r\n    padding-top: 14px;\r\n}\r\n\r\n.guestbook {\r\n    width: 255px;\r\n    height: 43px;\r\n    background: #e7e7e7;\r\n    border-radius: 10px;\r\n    position: fixed;\r\n    bottom: 45px;\r\n    margin-left: 15px;\r\n}\r\n\r\n.external-class {\r\n    padding: 15px 0 0 23px;\r\n    font-size: 24rpx;\r\n}\r\n\r\n.send-btn {\r\n    width: 60px;\r\n    height: 43x;\r\n    background: #003F88;\r\n    border-radius: 10px;\r\n    margin: 0 auto;\r\n    text-align: center;\r\n    line-height: 43px;\r\n    font-size: 14px;\r\n    color: #FFF;\r\n    position: fixed;\r\n    bottom: 25px;\r\n    right: 15px;\r\n}\r\n\r\n.guestbook-detail {\r\n    width: 350px;\r\n    /* height: 500px; */\r\n    height: auto;\r\n    /* min-height: 50px; */\r\n    background: #FFFFFF;\r\n    border-radius: 5px;\r\n    margin: 12px auto;\r\n    padding-bottom: 15px;\r\n}\r\n\r\n.stu-pic {\r\n    width: 25px;\r\n    height: 25px;\r\n    padding: 17px 0 0 22px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n\r\n.stu-name {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding: 22px 0 0 8px;\r\n    color: #9D9D9D;\r\n    font-size: 12px;\r\n}\r\n\r\n.main-guestbook {\r\n    width: 285px;\r\n    height: auto;\r\n    font-family: Microsoft YaHei, Microsoft YaHei;\r\n    font-weight: 400;\r\n    font-size: 12px;\r\n    color: #000000;\r\n    line-height: 0px;\r\n    text-align: left;\r\n    line-height: 16px;\r\n    padding: 8px 0 0 55px;\r\n}\r\n\r\n.main-guestbook-chirld {\r\n    width: 210px;\r\n    height: auto;\r\n    font-family: Microsoft YaHei, Microsoft YaHei;\r\n    font-weight: 400;\r\n    font-size: 12px;\r\n    color: #000000;\r\n    line-height: 0px;\r\n    text-align: left;\r\n    line-height: 16px;\r\n    padding: 8px 0 0 55px;\r\n}\r\n\r\n.send-time {\r\n    padding: 7px 0 9px 55px;\r\n    color: #989898;\r\n    font-size: 10px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.call-back {\r\n    width: 100px;\r\n    height: 15px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-left: 11px;\r\n    color: #585858;\r\n    font-size: 10px;\r\n    padding-top: 7px;\r\n}\r\n\r\n.call-back-list {\r\n    padding-left: 59px;\r\n}\r\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MySubmit.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MySubmit.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./MySubmit.vue?vue&type=template&id=6b11b97c&scoped=true\"\nimport script from \"./MySubmit.vue?vue&type=script&lang=js\"\nexport * from \"./MySubmit.vue?vue&type=script&lang=js\"\nimport style0 from \"./MySubmit.vue?vue&type=style&index=0&id=6b11b97c&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"6b11b97c\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"index\"},[_c('van-nav-bar',{attrs:{\"title\":\"笔下生花\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticClass:\"main\"},_vm._l((_vm.feedBackList),function(item,index){return _c('div',{key:index,staticClass:\"notice-item\"},[_c('div',{staticClass:\"callback-tea\"},[(item.reply_row != null)?_c('img',{staticClass:\"callback-tea-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png\",\"mode\":\"widthFix\"}}):_vm._e(),(item.reply_row != null)?_c('div',{staticClass:\"parent-box\"},[_c('div',{staticClass:\"callback-tea-name\"},[_vm._v(_vm._s(item.reply_row.name))]),_c('div',{staticClass:\"callback-tea-content\"},[_vm._v(\"回复了你的留言 \"+_vm._s(item.reply_row.create_time)+\" \"),_c('text',{staticStyle:{\"color\":\"#000\"}},[_vm._v(\"回复\")])]),_c('div',{staticClass:\"callback-msg\"},[_vm._v(_vm._s(item.reply_row.content))])]):_vm._e(),(item.reply_row == null)?_c('div',{staticClass:\"parent-box\",staticStyle:{\"font-size\":\"24rpx\",\"font-weight\":\"bold\"}},[_vm._v(\" 暂无回复\")]):_vm._e(),_c('div',{staticClass:\"stu-info\"},[_c('div',{staticClass:\"stu-lable\"}),_c('div',{staticClass:\"stu-ques\"},[_vm._v(_vm._s(item.row.content))])])])])}),0)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"index\">\r\n        <van-nav-bar title=\"笔下生花\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <div class=\"main\">\r\n            <div class=\"notice-item\" v-for=\"(item, index) in feedBackList\" v-bind:key=\"index\">\r\n\r\n                <div class=\"callback-tea\">\r\n                    <img v-if=\"item.reply_row != null\"\r\n                        src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png\"\r\n                        class=\"callback-tea-img\" mode=\"widthFix\" />\r\n                    <div class=\"parent-box\" v-if=\"item.reply_row != null\">\r\n                        <div class=\"callback-tea-name\">{{ item.reply_row.name }}</div>\r\n                        <div class=\"callback-tea-content\">回复了你的留言 {{ item.reply_row.create_time }} <text\r\n                                style=\"color: #000;\">回复</text></div>\r\n                        <div class=\"callback-msg\">{{ item.reply_row.content }}</div>\r\n                    </div>\r\n                    <div class=\"parent-box\" style=\" font-size: 24rpx;font-weight: bold;\" v-if=\"item.reply_row == null\">\r\n                        暂无回复</div>\r\n                    <div class=\"stu-info\">\r\n                        <div class=\"stu-lable\"></div>\r\n                        <div class=\"stu-ques\">{{ item.row.content }}</div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getMyFeedBackList } from '@/api/listen'\r\nexport default {\r\n    name: 'Index',\r\n    data() {\r\n        return {\r\n            feedBackList: []\r\n        }\r\n    },\r\n    methods: {\r\n        async getList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getMyFeedBackList({ sid: user.sid })\r\n                    const data = response.data\r\n                    this.feedBackList = data\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n\r\n        async to_submit(item) {\r\n            this.$router.push({ name: 'WriteSubmit', query: { tea_id: item.id } })\r\n        }\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        this.getList()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n/* writePage/pages/write/second/notice.wxss */\r\n.main {\r\n    width: 100vw;\r\n    height: 100vh;\r\n    background-color: #F8F8F8;\r\n    text-align: left;\r\n}\r\n\r\n.notice-item {\r\n    width: 320px;\r\n    height: auto;\r\n    margin: 0 auto;\r\n    border-bottom: 1px solid #E4E4E4;\r\n    padding-bottom: 10px;\r\n}\r\n\r\n.callback-tea-img {\r\n    width: 25px;\r\n    height: 25px;\r\n    padding: 13px 4px 0 4px;\r\n    border-radius: 38px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.callback-tea {\r\n    padding-top: 17px;\r\n}\r\n\r\n.parent-box {\r\n    padding-top: 17px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-left: 10px;\r\n}\r\n\r\n.callback-tea-name {\r\n    font-size: 12px;\r\n    font-weight: bold;\r\n}\r\n\r\n.callback-tea-content {\r\n    font-size: 10px;\r\n    color: #A1A1A1;\r\n    height: 14px;\r\n    line-height: 14px;\r\n    padding-top: 6px;\r\n}\r\n\r\n.callback-msg {\r\n    font-size: 12px;\r\n    height: auto;\r\n    width: 270px;\r\n    line-height: 16px;\r\n    padding-top: 6px;\r\n}\r\n\r\n.stu-info {\r\n    width: 250px;\r\n    height: 20px;\r\n    padding-top: 8px;\r\n    padding-left: 20px;\r\n}\r\n\r\n.stu-lable {\r\n    background-color: #C8C8C8;\r\n    width: 3px;\r\n    height: 10px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin-top: 6px;\r\n}\r\n\r\n.stu-ques {\r\n    color: #A1A1A1;\r\n    font-size: 10px;\r\n    /*  */\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    line-height: 20px;\r\n    padding-left: 6px;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Notice.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Notice.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Notice.vue?vue&type=template&id=0f5f77c8&scoped=true\"\nimport script from \"./Notice.vue?vue&type=script&lang=js\"\nexport * from \"./Notice.vue?vue&type=script&lang=js\"\nimport style0 from \"./Notice.vue?vue&type=style&index=0&id=0f5f77c8&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"0f5f77c8\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"MicraList\"},[_c('van-nav-bar',{attrs:{\"title\":\"微课列表\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticClass:\"top\"},[_c('div',{staticClass:\"top-item\",class:{ 'active': _vm.this_check == 'all' },on:{\"click\":function($event){return _vm.changeTab('all')}}},[_vm._v(\"全部\")]),_c('div',{staticClass:\"top-item\",class:{ 'active': _vm.this_check == 'writing' },on:{\"click\":function($event){return _vm.changeTab('writing')}}},[_vm._v(\"写作\")]),_c('div',{staticClass:\"top-item\",class:{ 'active': _vm.this_check == 'listening' },on:{\"click\":function($event){return _vm.changeTab('listening')}}},[_vm._v(\"听力 \")]),_c('div',{staticClass:\"top-item\",class:{ 'active': _vm.this_check == 'reading' },on:{\"click\":function($event){return _vm.changeTab('reading')}}},[_vm._v(\"阅读\")]),_c('div',{staticClass:\"top-item\",class:{ 'active': _vm.this_check == 'speaking' },on:{\"click\":function($event){return _vm.changeTab('speaking')}}},[_vm._v(\"口语 \")])]),_c('div',{staticClass:\"wall\"}),_vm._l((_vm.weike_list),function(item,index){return _c('div',{key:index,staticClass:\"micra-item\",on:{\"click\":function($event){return _vm.to_micra(item)}}},[_c('img',{staticClass:\"micra-img\",attrs:{\"src\":item.cover,\"mode\":\"aspectFill\"}}),_c('div',{staticClass:\"micra-info\"},[_c('div',{staticClass:\"micra-title\"},[_vm._v(_vm._s(item.name))]),_c('div',{staticClass:\"lable\"},[_vm._v(\"类型：\"+_vm._s(item.type))]),_c('div',{staticClass:\"lable\"},[_vm._v(_vm._s(item.create_date))])])])})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import request from './index'\r\nimport MD5 from 'crypto-js/md5'\r\n\r\nconst SECRET_KEY = 'zjuEnglish'\r\nfunction buildSign(data) {\r\n    const keys = Object.keys(data).sort()\r\n    const signStr = keys\r\n        .filter(k => data[k] !== undefined && data[k] !== null)\r\n       .map(k => `${k}=${String(data[k])}`)\r\n        .join('')\r\n        console.log('signStr', signStr + SECRET_KEY)\r\n    return MD5(signStr + SECRET_KEY).toString()\r\n}\r\n\r\nfunction getParamNames(data) {\r\n\r\n    var checkParams = Object.keys(data)\r\n        .sort()\r\n        .join(',')\r\n    return checkParams\r\n}\r\n// 鑾峰彇寰鍒楄〃\r\nexport function getMicraList(params) {\r\n  return request({\r\n    url: '/weike/listbytype',\r\n    method: 'get',\r\n    params: params,\r\n    checkParams: getParamNames(params),\r\n    checkSign: buildSign(params)\r\n  })\r\n}\r\n\r\n\r\n// 鑾峰彇寰璇︽儏淇℃伅\r\nexport function getMicraDetail(params) {\r\n    return request({\r\n      url: '/weike/getdetail',\r\n      method: 'get',\r\n      params: params,\r\n      checkParams: getParamNames(params),\r\n      checkSign: buildSign(params)\r\n    })\r\n  }\r\n","<template>\r\n    <div class=\"MicraList\">\r\n        <van-nav-bar title=\"微课列表\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <div class=\"top\">\r\n            <div class=\"top-item\" :class=\"{ 'active': this_check == 'all' }\" @click=\"changeTab('all')\">全部</div>\r\n            <div class=\"top-item\" :class=\"{ 'active': this_check == 'writing' }\" @click=\"changeTab('writing')\">写作</div>\r\n            <div class=\"top-item\" :class=\"{ 'active': this_check == 'listening' }\" @click=\"changeTab('listening')\">听力\r\n            </div>\r\n            <div class=\"top-item\" :class=\"{ 'active': this_check == 'reading' }\" @click=\"changeTab('reading')\">阅读</div>\r\n            <div class=\"top-item\" :class=\"{ 'active': this_check == 'speaking' }\" @click=\"changeTab('speaking')\">口语\r\n            </div>\r\n        </div>\r\n        <div class=\"wall\"></div>\r\n        <div class=\"micra-item\" v-for=\"(item, index) in weike_list\" @click=\"to_micra(item)\" :key=\"index\">\r\n            <img class=\"micra-img\" :src=\"item.cover\" mode=\"aspectFill\" />\r\n            <div class=\"micra-info\">\r\n                <div class=\"micra-title\">{{ item.name }}</div>\r\n                <div class=\"lable\">类型：{{ item.type }}</div>\r\n                <div class=\"lable\">{{ item.create_date }}</div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getMicraList } from '@/api/micra'\r\nexport default {\r\n    name: 'MicraList',\r\n    data() {\r\n        return {\r\n            weike_list: [],\r\n            this_check: 'all'\r\n        }\r\n    },\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        async changeTab(type) {\r\n            this.this_check = type\r\n            this.getList()\r\n        },\r\n        async to_micra(item) {\r\n            console.log(item)\r\n            var video_id = item.id\r\n            this.$router.push({ name: 'MicraDetail', query: { video_id: video_id } })\r\n        },\r\n        async getList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getMicraList({ sid: user.sid, type: this.this_check })\r\n                    const data = response.data\r\n                    this.weike_list = data;\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        this.getList()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n.MicraList {\r\n    width: 100vw;\r\n    height: 100vh;\r\n}\r\n\r\n.top {\r\n    width: 96vw;\r\n    height: 30px;\r\n    margin: 10px 2vw;\r\n    position: fixed;\r\n    top: 30;\r\n}\r\n\r\n.top-item {\r\n    width: 9vw;\r\n    height: 30px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: center;\r\n    font-size: 14px;\r\n    margin: 0 5vw;\r\n}\r\n\r\n.active {\r\n    border-bottom: #6FDBFF 4px solid;\r\n    font-weight: 900;\r\n}\r\n\r\n.wall {\r\n    width: 100vw;\r\n    height: 60px;\r\n}\r\n\r\n.micra-item {\r\n    width: 330px;\r\n    height: 78px;\r\n    margin: 10px 20px 20px 25px;\r\n}\r\n\r\n.micra-img {\r\n    width: 135px;\r\n    height: 78px;\r\n    background: #FFFFFF;\r\n    border-radius: 5px;\r\n    border: 1px solid #707070;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.micra-info {\r\n    width: 171px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-left: 11px;\r\n}\r\n\r\n.micra-title {\r\n    height: 50px;\r\n    font-size: 14px;\r\n}\r\n\r\n.lable {\r\n    font-size: 12px;\r\n    color: #979797;\r\n    margin-bottom: 2px;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Index.vue?vue&type=template&id=186c39e2&scoped=true\"\nimport script from \"./Index.vue?vue&type=script&lang=js\"\nexport * from \"./Index.vue?vue&type=script&lang=js\"\nimport style0 from \"./Index.vue?vue&type=style&index=0&id=186c39e2&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"186c39e2\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"MicraList\"},[_c('div',{staticClass:\"main\"},[_c('van-nav-bar',{attrs:{\"title\":_vm.weike_info.name,\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticClass:\"video-info\"},[_c('div',{staticClass:\"video-box\"},[_c('video',{attrs:{\"src\":_vm.weike_info.url,\"autoplay\":_vm.autoplay,\"poster\":_vm.weike_info.cover,\"object-fit\":\"contain\"}})]),_c('div',{staticClass:\"micra-title\"},[_vm._v(_vm._s(_vm.weike_info.name))]),_c('div',{staticClass:\"visit-info\"},[_vm._v(_vm._s(_vm.weike_info.read_num)+\"人次已看 | \"+_vm._s(_vm.weike_info.create_date))])]),_c('div',{staticClass:\"micra-other\"},[_vm._l((_vm.weike_list),function(item,index){return _c('div',{key:index,staticClass:\"micra-item\",staticStyle:{\"margin-right\":\"10rpx\"},on:{\"click\":function($event){return _vm.to_micra(item)}}},[_c('div',{staticClass:\"item-lable\"},[_vm._v(_vm._s(item.type))]),_c('div',{staticClass:\"item-title\"},[_vm._v(_vm._s(item.name))])])}),_c('div',{staticClass:\"all-btn\"},[_c('div',{staticClass:\"all-info\",on:{\"click\":_vm.to_all}},[_vm._v(\"全部\")]),_c('van-icon',{staticClass:\"click-icon\",attrs:{\"name\":\"arrow\",\"size\":\"10\",\"color\":\"#606060\"}})],1)],2)],1),_c('HotList')],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"MicraList\">\r\n        <div class=\"main\">\r\n            <van-nav-bar :title=\"weike_info.name\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n            <div class=\"video-info\">\r\n                <div class=\"video-box\">\r\n                    <video :src=\"weike_info.url\" :autoplay=\"autoplay\" :poster=\"weike_info.cover\" object-fit=\"contain\" />\r\n                </div>\r\n                <div class=\"micra-title\">{{ weike_info.name }}</div>\r\n                <div class=\"visit-info\">{{ weike_info.read_num }}人次已看 | {{ weike_info.create_date }}</div>\r\n            </div>\r\n\r\n            <div class=\"micra-other\">\r\n                <div class=\"micra-item\" style=\"margin-right: 10rpx;\" v-for=\"(item, index) in weike_list\"\r\n                    @click=\"to_micra(item)\" :key=\"index\">\r\n                    <div class=\"item-lable\">{{ item.type }}</div>\r\n                    <div class=\"item-title\">{{ item.name }}</div>\r\n                </div>\r\n                <div class=\"all-btn\">\r\n                    <div class=\"all-info\" @click=\"to_all\">全部</div>\r\n                    <van-icon class=\"click-icon\" name=\"arrow\" size=\"10\" color=\"#606060\" />\r\n                </div>\r\n            </div>\r\n        </div>\r\n        <HotList />\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getMicraList, getMicraDetail } from '@/api/micra'\r\nimport HotList from \"../../components/HotList\";\r\nexport default {\r\n    name: 'MicraList',\r\n    components: { HotList },\r\n    data() {\r\n        return {\r\n            weike_info: [],\r\n            weike_list: [],\r\n            autoplay: true,\r\n            video_id: 0\r\n        }\r\n    },\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        async to_micra(item) {\r\n            console.log(item)\r\n            var video_id = item.id\r\n            this.video_id = video_id\r\n            this.getDetail()\r\n        },\r\n        async getDetail() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getMicraDetail({ sid: user.sid, id: this.video_id })\r\n                    const data = response.data\r\n                    data.cover = data.cover.replace('a-news.oss-cn-hangzhou.aliyuncs.com', 'https://a-news.oss-accelerate.aliyuncs.com/')\r\n                    data.cover = data.cover.replace('a-news.oss-cn-hangzhou.aliyuncs.com', 'https://a-news.oss-accelerate.aliyuncs.com/')\r\n                    this.weike_info = data;\r\n                    this.getList()\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async getList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getMicraList({ sid: user.sid, type: this.weike_info.type })\r\n                    const data = response.data\r\n                    this.weike_list = data.slice(0, 2);\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async to_all() {\r\n            this.$router.push({ name: 'MicraList' })\r\n        }\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        this.video_id = this.$route.query.video_id;\r\n        this.getDetail()\r\n\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n.MicraList {\r\n    width: 100vw;\r\n    height: 100vh;\r\n}\r\n\r\n.video-box {\r\n    width: 100vw;\r\n    height: 251px;\r\n    padding-top: 39px;\r\n    background-color: #000;\r\n}\r\n\r\n.video-box>video {\r\n    width: 100vw;\r\n    height: 251px;\r\n}\r\n\r\n.micra-title {\r\n    padding: 12px 0 8px 24px;\r\n    font-size: 16px;\r\n}\r\n\r\n.visit-info {\r\n    padding-left: 24px;\r\n    color: #979797;\r\n    font-size: 12px;\r\n}\r\n\r\n.micra-other {\r\n    width: 352px;\r\n    margin-left: 23px;\r\n    margin-top: 5px;\r\n    height: 51px;\r\n}\r\n\r\n.micra-item {\r\n    width: 160px;\r\n    height: 51px;\r\n    background: #F6F6F6;\r\n    border-radius: 5px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding: 10px 0;\r\n    margin-right: 10px;\r\n}\r\n\r\n.item-lable {\r\n    color: #A2A2A2;\r\n    font-size: 12px;\r\n    padding: 3px 0 0 15px;\r\n}\r\n\r\n.item-title {\r\n    font-size: 12px;\r\n    padding: 3px 0 0 15px;\r\n}\r\n\r\n.all-btn {\r\n    width: 69px;\r\n    height: 71px;\r\n    position: fixed;\r\n    top: 355px;\r\n    left: 306px;\r\n    background-image: url('https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/all-bg.png');\r\n    background-repeat: no-repeat;\r\n    background-size: cover;\r\n}\r\n\r\n.all-info {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 10px;\r\n    padding: 0 5px 0 40px;\r\n    font-size: 12px;\r\n    padding-top: 15px;\r\n    color: #A2A2A2;\r\n}\r\n\r\n.click-icon {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-top: 24px;\r\n    color: #A2A2A2;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Detail.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Detail.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Detail.vue?vue&type=template&id=477820a4&scoped=true\"\nimport script from \"./Detail.vue?vue&type=script&lang=js\"\nexport * from \"./Detail.vue?vue&type=script&lang=js\"\nimport style0 from \"./Detail.vue?vue&type=style&index=0&id=477820a4&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"477820a4\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"active_list\"},[_c('van-nav-bar',{attrs:{\"title\":\"活动列表\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('van-tabs',{attrs:{\"color\":\"#6FDBFF\"},model:{value:(_vm.active),callback:function ($$v) {_vm.active=$$v},expression:\"active\"}},[_c('van-tab',{attrs:{\"title\":\"全部\"}},_vm._l((_vm.active_list),function(item,index){return _c('div',{key:index,staticClass:\"acitve-item\",on:{\"click\":function($event){return _vm.to_active(item)}}},[_c('van-image',{staticClass:\"micra-img\",attrs:{\"fit\":\"cover\",\"src\":item.cover}}),_c('div',{staticClass:\"micra-info\"},[_c('div',{staticClass:\"micra-title\"},[_vm._v(_vm._s(item.name))]),_c('div',{staticClass:\"active-time\"},[_c('div',{staticClass:\"time-info\"},[_vm._v(_vm._s(item.start_date)+\"~\"+_vm._s(item.end_date))]),_c('div',{staticClass:\"active-status\"},[_vm._v(\"报名中\")])])])],1)}),0),_c('van-tab',{attrs:{\"title\":\"报名中\"}},_vm._l((_vm.active_list),function(item,index){return _c('div',{key:index,staticClass:\"acitve-item\",on:{\"click\":function($event){return _vm.to_active(item)}}},[_c('van-image',{staticClass:\"micra-img\",attrs:{\"fit\":\"cover\",\"src\":item.cover}}),_c('div',{staticClass:\"micra-info\"},[_c('div',{staticClass:\"micra-title\"},[_vm._v(_vm._s(item.name))]),_c('div',{staticClass:\"active-time\"},[_c('div',{staticClass:\"time-info\"},[_vm._v(_vm._s(item.start_date)+\"~\"+_vm._s(item.end_date))]),_c('div',{staticClass:\"active-status\"},[_vm._v(\"报名中\")])])])],1)}),0),_c('van-tab',{attrs:{\"title\":\"已结束\"}},_vm._l((_vm.active_list),function(item,index){return _c('div',{key:index,staticClass:\"acitve-item\",on:{\"click\":function($event){return _vm.to_active(item)}}},[_c('van-image',{staticClass:\"micra-img\",attrs:{\"fit\":\"cover\",\"src\":item.cover}}),_c('div',{staticClass:\"micra-info\"},[_c('div',{staticClass:\"micra-title\"},[_vm._v(_vm._s(item.name))]),_c('div',{staticClass:\"active-time\"},[_c('div',{staticClass:\"time-info\"},[_vm._v(_vm._s(item.start_date)+\"~\"+_vm._s(item.end_date))]),_c('div',{staticClass:\"active-status\"},[_vm._v(\"报名中\")])])])],1)}),0)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"active_list\">\r\n        <van-nav-bar title=\"活动列表\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <van-tabs v-model=\"active\" color=\"#6FDBFF\">\r\n            <van-tab title=\"全部\">\r\n                <div class=\"acitve-item\" v-for=\"(item, index) in active_list\" :key=\"index\" @click=\"to_active(item)\">\r\n                    <van-image fit=\"cover\" class=\"micra-img\" :src=\"item.cover\" />\r\n                    <div class=\"micra-info\">\r\n                        <div class=\"micra-title\">{{ item.name }}</div>\r\n                        <div class=\"active-time\">\r\n                            <div class=\"time-info\">{{ item.start_date }}~{{ item.end_date }}</div>\r\n                            <div class=\"active-status\">报名中</div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </van-tab>\r\n            <van-tab title=\"报名中\">\r\n                <div class=\"acitve-item\" v-for=\"(item, index) in active_list\" :key=\"index\" @click=\"to_active(item)\">\r\n                    <van-image fit=\"cover\" class=\"micra-img\" :src=\"item.cover\" />\r\n                    <div class=\"micra-info\">\r\n                        <div class=\"micra-title\">{{ item.name }}</div>\r\n                        <div class=\"active-time\">\r\n                            <div class=\"time-info\">{{ item.start_date }}~{{ item.end_date }}</div>\r\n                            <div class=\"active-status\">报名中</div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </van-tab>\r\n            <van-tab title=\"已结束\">\r\n                <div class=\"acitve-item\" v-for=\"(item, index) in active_list\" :key=\"index\" @click=\"to_active(item)\">\r\n                    <van-image fit=\"cover\" class=\"micra-img\" :src=\"item.cover\" />\r\n                    <div class=\"micra-info\">\r\n                        <div class=\"micra-title\">{{ item.name }}</div>\r\n                        <div class=\"active-time\">\r\n                            <div class=\"time-info\">{{ item.start_date }}~{{ item.end_date }}</div>\r\n                            <div class=\"active-status\">报名中</div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </van-tab>\r\n        </van-tabs>\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getActiveList } from '@/api/home'\r\nexport default {\r\n    name: 'ActiveList',\r\n    data() {\r\n        return {\r\n            active_list: [],\r\n        }\r\n    },\r\n\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        async to_active(item) {\r\n            this.$router.push({ name: 'ActiveDetail', query: { active_id: item.active_id } })\r\n        },\r\n        async getActiveList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                console.log(user)\r\n                if (user && user.sid) {\r\n                    const response = await getActiveList(user.sid)\r\n                    const data = response.data\r\n                    this.active_list = data\r\n                    this.userInfo = user\r\n\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n\r\n    },\r\n    mounted() {\r\n\r\n        this.getActiveList()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n.acitve-item {\r\n    width: 330px;\r\n    height: 232px;\r\n    background: #FFFFFF;\r\n    box-shadow: 0px 3px 6px 1px rgba(80, 143, 206, 0.1);\r\n    border-radius: 20px;\r\n    margin: 10px auto;\r\n}\r\n\r\n.micra-img {\r\n    width: 330px;\r\n    height: 140px;\r\n    background: #FFFFFF;\r\n    border-radius: 20px 20px 0 0;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.micra-info {\r\n    width: 171px;\r\n    padding-left: 14px;\r\n    padding-top: 15px;\r\n}\r\n\r\n.micra-title {\r\n    height: 30px;\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n}\r\n\r\n.active-time {\r\n    width: 302px;\r\n    height: 32px;\r\n    background: #F6F6F6;\r\n    border-radius: 5px;\r\n    line-height: 32px;\r\n    font-size: 12px;\r\n}\r\n\r\n.time-info {\r\n    width: 180px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-left: 9px;\r\n    text-align: left;\r\n    color: #979797;\r\n}\r\n\r\n.active-status {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-left: 65px;\r\n    color: #2FBE5A;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./List.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./List.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./List.vue?vue&type=template&id=438c5637&scoped=true\"\nimport script from \"./List.vue?vue&type=script&lang=js\"\nexport * from \"./List.vue?vue&type=script&lang=js\"\nimport style0 from \"./List.vue?vue&type=style&index=0&id=438c5637&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"438c5637\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"active_list\"},[_c('van-nav-bar',{attrs:{\"title\":\"活动列表\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('van-tabs',{attrs:{\"color\":\"#6FDBFF\"}},[_c('van-tab',{attrs:{\"title\":\"全部\"}},_vm._l((_vm.active_list_all),function(item,index){return _c('div',{key:index,staticClass:\"acitve-item\",on:{\"click\":function($event){return _vm.to_active(item)}}},[_c('van-image',{staticClass:\"micra-img\",attrs:{\"fit\":\"cover\",\"src\":item.cover}}),_c('div',{staticClass:\"micra-info\"},[_c('div',{staticClass:\"micra-title\"},[_vm._v(_vm._s(item.name))]),_c('div',{staticClass:\"active-time\"},[_vm._v(_vm._s(item.start_date)+\"~\"+_vm._s(item.end_date))]),(item.attachment !== '')?_c('div',{staticClass:\"active-status\"},[_vm._v(\"已上传：作文题目\")]):_vm._e(),(item.my_status == 1)?_c('div',{staticClass:\"btn-status-cancel\",on:{\"click\":function($event){return _vm.cancel_active(item)}}},[_vm._v(\"取消报名\")]):_vm._e(),(item.my_status == 2)?_c('div',{staticClass:\"btn-status\"},[_vm._v(\"已取消\")]):_vm._e(),(item.my_status == 3)?_c('div',{staticClass:\"btn-status\"},[_vm._v(\"已结束\")]):_vm._e()])],1)}),0),_c('van-tab',{attrs:{\"title\":\"已报名\"}},_vm._l((_vm.active_list_has),function(item,index){return _c('div',{key:index,staticClass:\"acitve-item\",on:{\"click\":function($event){return _vm.to_active(item)}}},[_c('van-image',{staticClass:\"micra-img\",attrs:{\"fit\":\"cover\",\"src\":item.cover}}),_c('div',{staticClass:\"micra-info\"},[_c('div',{staticClass:\"micra-title\"},[_vm._v(_vm._s(item.name))]),_c('div',{staticClass:\"active-time\"},[_vm._v(_vm._s(item.start_date)+\"~\"+_vm._s(item.end_date))]),(item.attachment !== '')?_c('div',{staticClass:\"active-status\"},[_vm._v(\"已上传：作文题目\")]):_vm._e(),(item.my_status == 1)?_c('div',{staticClass:\"btn-status-cancel\",on:{\"click\":function($event){return _vm.cancel_active(item)}}},[_vm._v(\"取消报名\")]):_vm._e(),(item.my_status == 2)?_c('div',{staticClass:\"btn-status\"},[_vm._v(\"已取消\")]):_vm._e(),(item.my_status == 3)?_c('div',{staticClass:\"btn-status\"},[_vm._v(\"已结束\")]):_vm._e()])],1)}),0),_c('van-tab',{attrs:{\"title\":\"已取消\"}},_vm._l((_vm.active_list_cancel),function(item,index){return _c('div',{key:index,staticClass:\"acitve-item\",on:{\"click\":function($event){return _vm.to_active(item)}}},[_c('van-image',{staticClass:\"micra-img\",attrs:{\"fit\":\"cover\",\"src\":item.cover}}),_c('div',{staticClass:\"micra-info\"},[_c('div',{staticClass:\"micra-title\"},[_vm._v(_vm._s(item.name))]),_c('div',{staticClass:\"active-time\"},[_vm._v(_vm._s(item.start_date)+\"~\"+_vm._s(item.end_date))]),(item.attachment !== '')?_c('div',{staticClass:\"active-status\"},[_vm._v(\"已上传：作文题目\")]):_vm._e(),(item.my_status == 1)?_c('div',{staticClass:\"btn-status-cancel\",on:{\"click\":function($event){return _vm.cancel_active(item)}}},[_vm._v(\"取消报名\")]):_vm._e(),(item.my_status == 2)?_c('div',{staticClass:\"btn-status\"},[_vm._v(\"已取消\")]):_vm._e(),(item.my_status == 3)?_c('div',{staticClass:\"btn-status\"},[_vm._v(\"已结束\")]):_vm._e()])],1)}),0),_c('van-tab',{attrs:{\"title\":\"已结束\"}},_vm._l((_vm.active_list_finish),function(item,index){return _c('div',{key:index,staticClass:\"acitve-item\",on:{\"click\":function($event){return _vm.to_active(item)}}},[_c('van-image',{staticClass:\"micra-img\",attrs:{\"fit\":\"cover\",\"src\":item.cover}}),_c('div',{staticClass:\"micra-info\"},[_c('div',{staticClass:\"micra-title\"},[_vm._v(_vm._s(item.name))]),_c('div',{staticClass:\"active-time\"},[_vm._v(_vm._s(item.start_date)+\"~\"+_vm._s(item.end_date))]),(item.attachment !== '')?_c('div',{staticClass:\"active-status\"},[_vm._v(\"已上传：作文题目\")]):_vm._e(),(item.my_status == 1)?_c('div',{staticClass:\"btn-status-cancel\",on:{\"click\":function($event){return _vm.cancel_active(item)}}},[_vm._v(\"取消报名\")]):_vm._e(),(item.my_status == 2)?_c('div',{staticClass:\"btn-status\"},[_vm._v(\"已取消\")]):_vm._e(),(item.my_status == 3)?_c('div',{staticClass:\"btn-status\"},[_vm._v(\"已结束\")]):_vm._e()])],1)}),0)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"active_list\">\r\n        <van-nav-bar title=\"活动列表\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <van-tabs color=\"#6FDBFF\">\r\n            <van-tab title=\"全部\">\r\n                <div class=\"acitve-item\" v-for=\"(item, index) in active_list_all\" :key=\"index\" @click=\"to_active(item)\">\r\n                    <van-image fit=\"cover\" class=\"micra-img\" :src=\"item.cover\" />\r\n                    <div class=\"micra-info\">\r\n                        <div class=\"micra-title\">{{ item.name }}</div>\r\n                        <div class=\"active-time\">{{ item.start_date }}~{{ item.end_date }}</div>\r\n                        <div class=\"active-status\" v-if=\"item.attachment !== ''\">已上传：作文题目</div>\r\n                        <div class=\"btn-status-cancel\" v-if=\"item.my_status == 1\" @click=\"cancel_active(item)\">取消报名</div>\r\n                        <div class=\"btn-status\" v-if=\"item.my_status == 2\">已取消</div>\r\n                        <div class=\"btn-status\" v-if=\"item.my_status == 3\">已结束</div>\r\n                    </div>\r\n                </div>\r\n            </van-tab>\r\n            <van-tab title=\"已报名\">\r\n                <div class=\"acitve-item\" v-for=\"(item, index) in active_list_has\" :key=\"index\" @click=\"to_active(item)\">\r\n                    <van-image fit=\"cover\" class=\"micra-img\" :src=\"item.cover\" />\r\n                    <div class=\"micra-info\">\r\n                        <div class=\"micra-title\">{{ item.name }}</div>\r\n                        <div class=\"active-time\">{{ item.start_date }}~{{ item.end_date }}</div>\r\n                        <div class=\"active-status\" v-if=\"item.attachment !== ''\">已上传：作文题目</div>\r\n                        <div class=\"btn-status-cancel\" v-if=\"item.my_status == 1\" @click=\"cancel_active(item)\">取消报名</div>\r\n                        <div class=\"btn-status\" v-if=\"item.my_status == 2\">已取消</div>\r\n                        <div class=\"btn-status\" v-if=\"item.my_status == 3\">已结束</div>\r\n                    </div>\r\n                </div>\r\n            </van-tab>\r\n            <van-tab title=\"已取消\">\r\n                <div class=\"acitve-item\" v-for=\"(item, index) in active_list_cancel\" :key=\"index\"\r\n                    @click=\"to_active(item)\">\r\n                    <van-image fit=\"cover\" class=\"micra-img\" :src=\"item.cover\" />\r\n                    <div class=\"micra-info\">\r\n                        <div class=\"micra-title\">{{ item.name }}</div>\r\n                        <div class=\"active-time\">{{ item.start_date }}~{{ item.end_date }}</div>\r\n                        <div class=\"active-status\" v-if=\"item.attachment !== ''\">已上传：作文题目</div>\r\n                        <div class=\"btn-status-cancel\" v-if=\"item.my_status == 1\" @click=\"cancel_active(item)\">取消报名</div>\r\n                        <div class=\"btn-status\" v-if=\"item.my_status == 2\">已取消</div>\r\n                        <div class=\"btn-status\" v-if=\"item.my_status == 3\">已结束</div>\r\n                    </div>\r\n                </div>\r\n            </van-tab>\r\n            <van-tab title=\"已结束\">\r\n                <div class=\"acitve-item\" v-for=\"(item, index) in active_list_finish\" :key=\"index\"\r\n                    @click=\"to_active(item)\">\r\n                    <van-image fit=\"cover\" class=\"micra-img\" :src=\"item.cover\" />\r\n                    <div class=\"micra-info\">\r\n                        <div class=\"micra-title\">{{ item.name }}</div>\r\n                        <div class=\"active-time\">{{ item.start_date }}~{{ item.end_date }}</div>\r\n                        <div class=\"active-status\" v-if=\"item.attachment !== ''\">已上传：作文题目</div>\r\n                        <div class=\"btn-status-cancel\" v-if=\"item.my_status == 1\" @click=\"cancel_active(item)\">取消报名</div>\r\n                        <div class=\"btn-status\" v-if=\"item.my_status == 2\">已取消</div>\r\n                        <div class=\"btn-status\" v-if=\"item.my_status == 3\">已结束</div>\r\n                    </div>\r\n                </div>\r\n            </van-tab>\r\n        </van-tabs>\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getMyActivityList } from '@/api/user'\r\nexport default {\r\n    name: 'ActiveList',\r\n    data() {\r\n        return {\r\n            active_list_all: [],\r\n            active_list_has: [],\r\n            active_list_cancel: [],\r\n            active_list_finish: [],\r\n        }\r\n    },\r\n\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        async to_active(item) {\r\n            this.$router.push({ name: 'ActiveDetail', query: { active_id: item.active_id } })\r\n        },\r\n        async getActiveList() {\r\n\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                console.log(user)\r\n                if (user && user.sid) {\r\n                    const response = await getMyActivityList({ sid: user.sid, status: 0 })\r\n                    const data = response.data\r\n                    this.active_list_all = data\r\n                    this.userInfo = user\r\n\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async getActiveList1() {\r\n\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                console.log(user)\r\n                if (user && user.sid) {\r\n                    const response = await getMyActivityList({ sid: user.sid, status: 1 })\r\n                    const data = response.data\r\n                    this.active_list_has = data\r\n                    this.userInfo = user\r\n\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async getActiveList2() {\r\n\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                console.log(user)\r\n                if (user && user.sid) {\r\n                    const response = await getMyActivityList({ sid: user.sid, status: 2 })\r\n                    const data = response.data\r\n                    this.active_list_cancel = data\r\n                    this.userInfo = user\r\n\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async getActiveList3() {\r\n\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                console.log(user)\r\n                if (user && user.sid) {\r\n                    const response = await getMyActivityList({ sid: user.sid, status: 3 })\r\n                    const data = response.data\r\n                    this.active_list_finish = data\r\n                    this.userInfo = user\r\n\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n\r\n    },\r\n    mounted() {\r\n\r\n        this.getActiveList()\r\n        this.getActiveList1()\r\n        this.getActiveList2()\r\n        this.getActiveList3()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n.acitve-item {\r\n  width: 100vw;\r\n  height: 127px;\r\n  background: #FFFFFF;\r\n  border-radius: 0px;\r\n  margin:10px 0;\r\n}\r\n\r\n.micra-img {\r\n  width: 109px;\r\n  height: 110px;\r\n  background: #FFFFFF;\r\n  border-radius: 20px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin: 9px 11px 0 25px;\r\n}\r\n\r\n.micra-info {\r\n  width: 230px;\r\n  padding-top: 15px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n}\r\n\r\n.micra-title {\r\n  height: 20px;\r\n  font-size: 14px;\r\n  font-weight: bold;\r\n}\r\n\r\n.active-time {\r\n  width: 230px;\r\n  height: 20px;\r\n  line-height: 20px;\r\n  font-size: 12px;\r\n  color: #979797;\r\n}\r\n\r\n.active-status {\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  line-height: 20px;\r\n  font-size: 12px;\r\n  font-size: 12px;\r\n  color: #979797;\r\n}\r\n\r\n.btn-status-cancel {\r\n  font-size: 12px;\r\n  width: 81px;\r\n  height: 29px;\r\n  background: #003F88;\r\n  border-radius: 15px;\r\n  text-align: center;\r\n  line-height: 29px;\r\n  color: #FFF;\r\n  margin: 7px 0 0 141px;\r\n}\r\n.btn-status {\r\n  width: 81px;\r\n  height: 29px;\r\n  font-size: 12px;\r\n  border-radius: 15px;\r\n  border: 1px solid #707070;\r\n  text-align: center;\r\n  line-height: 29px;\r\n  color: #000;\r\n  margin: 7px 0 0 141px;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MyList.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MyList.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./MyList.vue?vue&type=template&id=5af367f2&scoped=true\"\nimport script from \"./MyList.vue?vue&type=script&lang=js\"\nexport * from \"./MyList.vue?vue&type=script&lang=js\"\nimport style0 from \"./MyList.vue?vue&type=style&index=0&id=5af367f2&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"5af367f2\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"active_list\"},[_c('van-nav-bar',{attrs:{\"title\":\"学习列表\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('van-tabs',{attrs:{\"color\":\"#6FDBFF\"},model:{value:(_vm.active),callback:function ($$v) {_vm.active=$$v},expression:\"active\"}},[_c('van-tab',{attrs:{\"title\":'正在学('+ _vm.total_all +')'}},[_c('div',{staticClass:\"model-start\"},_vm._l((_vm.NewResouceList),function(item,index){return _c('div',{key:index,staticClass:\"learn-item\",on:{\"click\":function($event){return _vm.to_praxis(item)}}},[_c('img',{staticClass:\"learn-img\",attrs:{\"src\":item.cover,\"mode\":\"aspectFill\"}}),_c('div',{staticClass:\"learn-item-info\"},[_c('div',{staticClass:\"learn-item-title\"},[(item.category_id == 1)?_c('span',[_vm._v(\"[听力]\")]):_vm._e(),(item.category_id == 2)?_c('span',[_vm._v(\"[阅读]\")]):_vm._e(),(item.category_id == 4)?_c('span',[_vm._v(\"[写作]\")]):_vm._e(),_vm._v(\" \"+_vm._s(item.name)+\" \")])]),_c('div',{staticClass:\"btn-learn\"},[_vm._v(\"继续学习\")])])}),0),(_vm.has_more)?_c('div',{staticClass:\"load-more\",on:{\"click\":_vm.load_more}},[_vm._v(\"点击加载更多~~\")]):_c('div',{staticClass:\"load-more-empty\"},[_vm._v(\"没有了~~\")])]),_c('van-tab',{attrs:{\"title\":\"推荐学\"}},[_c('div',{staticClass:\"model-start\"},_vm._l((_vm.HotResouceList),function(item,index){return _c('div',{key:index,staticClass:\"learn-item\",on:{\"click\":function($event){return _vm.to_praxis(item)}}},[_c('img',{staticClass:\"learn-img\",attrs:{\"src\":item.cover,\"mode\":\"aspectFill\"}}),_c('div',{staticClass:\"learn-item-info\"},[_c('div',{staticClass:\"learn-item-title\"},[(item.category_id == 1)?_c('span',[_vm._v(\"[听力]\")]):_vm._e(),(item.category_id == 2)?_c('span',[_vm._v(\"[阅读]\")]):_vm._e(),(item.category_id == 4)?_c('span',[_vm._v(\"[写作]\")]):_vm._e(),_vm._v(\" \"+_vm._s(item.name)+\" \")])]),_c('div',{staticClass:\"btn-learn\"},[_vm._v(\"进入学习\")])])}),0)]),_c('van-tab',{attrs:{\"title\":'已完成('+ _vm.total_all1 +')'}},[_c('div',{staticClass:\"model-start\"},_vm._l((_vm.NewResouceList1),function(item,index){return _c('div',{key:index,staticClass:\"learn-item-finished\",on:{\"click\":function($event){return _vm.to_praxis(item)}}},[_c('img',{staticClass:\"learn-img\",attrs:{\"src\":item.cover,\"mode\":\"aspectFill\"}}),_c('div',{staticClass:\"learn-item-info\"},[_c('div',{staticClass:\"learn-item-title\"},[(item.category_id == 1)?_c('span',[_vm._v(\"[听力]\")]):_vm._e(),(item.category_id == 2)?_c('span',[_vm._v(\"[阅读]\")]):_vm._e(),(item.category_id == 4)?_c('span',[_vm._v(\"[写作]\")]):_vm._e(),_vm._v(\" \"+_vm._s(item.name)+\" \")])]),_c('div',{staticClass:\"btn-learn\",staticStyle:{\"color\":\"#51BF23\"}},[_vm._v(\"完成\")]),(item.category_id != 4)?_c('div',{staticClass:\"stu-info\"},[_c('div',{staticClass:\"count-info\"},[_c('div',{staticClass:\"right-count\",staticStyle:{\"padding-left\":\"10px\",\"padding-top\":\"3px\"}},[_vm._v(_vm._s(item.right_count))]),_c('div',{staticClass:\"total-count\",staticStyle:{\"font-size\":\"20px\",\"font-weight\":\"bold\"}},[_vm._v(\"/\"+_vm._s(item.total_count))])]),_c('div',{staticClass:\"right-box\"},[_c('div',{staticClass:\"right-avg\"},[_vm._v(\"首次提交正确率：\"+_vm._s(((item.right_count / item.total_count) * 100).toFixed(2))+\"% \")]),_c('div',{staticClass:\"submit-time\"},[_vm._v(\"提交时间：\"+_vm._s(item.fcreate_time))])])]):_vm._e()])}),0),(_vm.has_more1)?_c('div',{staticClass:\"load-more\",on:{\"click\":_vm.load_more1}},[_vm._v(\"点击加载更多~~\")]):_c('div',{staticClass:\"load-more-empty\"},[_vm._v(\"没有了~~\")])])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"active_list\">\r\n        <van-nav-bar title=\"学习列表\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <van-tabs v-model=\"active\" color=\"#6FDBFF\">\r\n            <van-tab :title=\"'正在学('+ total_all +')'\">\r\n                <div class=\"model-start\">\r\n\r\n                    <div class=\"learn-item\" v-for=\"(item, index) in NewResouceList\" :key=\"index\"\r\n                        @click=\"to_praxis(item)\">\r\n                        <img :src=\"item.cover\" mode=\"aspectFill\" class=\"learn-img\" />\r\n                        <div class=\"learn-item-info\">\r\n                            <div class=\"learn-item-title\">\r\n                                <span v-if=\"item.category_id == 1\">[听力]</span>\r\n                                <span v-if=\"item.category_id == 2\">[阅读]</span>\r\n                                <span v-if=\"item.category_id == 4\">[写作]</span>\r\n                                {{ item.name }}\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"btn-learn\">继续学习</div>\r\n                    </div>\r\n                </div>\r\n                <div class=\"load-more\" v-if=\"has_more\" @click=\"load_more\">点击加载更多~~</div>\r\n                <div class=\"load-more-empty\" v-else>没有了~~</div>\r\n            </van-tab>\r\n            <van-tab title=\"推荐学\">\r\n                <div class=\"model-start\">\r\n                    <div class=\"learn-item\" v-for=\"(item, index) in HotResouceList\" :key=\"index\"\r\n                        @click=\"to_praxis(item)\">\r\n                        <img :src=\"item.cover\" mode=\"aspectFill\" class=\"learn-img\" />\r\n                        <div class=\"learn-item-info\">\r\n                            <div class=\"learn-item-title\">\r\n                                <span v-if=\"item.category_id == 1\">[听力]</span>\r\n                                <span v-if=\"item.category_id == 2\">[阅读]</span>\r\n                                <span v-if=\"item.category_id == 4\">[写作]</span>\r\n                                {{ item.name }}\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"btn-learn\">进入学习</div>\r\n                    </div>\r\n                </div>\r\n            </van-tab>\r\n            <van-tab :title=\"'已完成('+ total_all1 +')'\">\r\n                <div class=\"model-start\">\r\n                    <div class=\"learn-item-finished\" v-for=\"(item, index) in NewResouceList1\" :key=\"index\"\r\n                        @click=\"to_praxis(item)\">\r\n                        <img :src=\"item.cover\" mode=\"aspectFill\" class=\"learn-img\" />\r\n                        <div class=\"learn-item-info\">\r\n                            <div class=\"learn-item-title\">\r\n                                <span v-if=\"item.category_id == 1\">[听力]</span>\r\n                                <span v-if=\"item.category_id == 2\">[阅读]</span>\r\n                                <span v-if=\"item.category_id == 4\">[写作]</span>\r\n                                {{ item.name }}\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"btn-learn\" style=\"color: #51BF23;\">完成</div>\r\n                        <div class=\"stu-info\" v-if=\"item.category_id != 4\">\r\n                            <div class=\"count-info\">\r\n                                <div class=\"right-count\" style=\"padding-left: 10px;padding-top: 3px;\">{{\r\n                                    item.right_count }}</div>\r\n                                <div class=\"total-count\" style=\"font-size: 20px;font-weight: bold;\">/{{ item.total_count\r\n                                    }}</div>\r\n                            </div>\r\n                            <div class=\"right-box\">\r\n                                <div class=\"right-avg\">首次提交正确率：{{ ((item.right_count / item.total_count) *\r\n                                    100).toFixed(2)\r\n                                    }}%\r\n                                </div>\r\n                                <div class=\"submit-time\">提交时间：{{ item.fcreate_time }}</div>\r\n                            </div>\r\n\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                <div class=\"load-more\" v-if=\"has_more1\" @click=\"load_more1\">点击加载更多~~</div>\r\n                <div class=\"load-more-empty\" v-else>没有了~~</div>\r\n            </van-tab>\r\n        </van-tabs>\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getUserResourceList, getHotUserResourceList, saveUserStudyResource } from '@/api/user'\r\nexport default {\r\n    name: 'ActiveList',\r\n    data() {\r\n        return {\r\n            HotResouceList: [],\r\n            NewResouceList: [],\r\n            NewResouceList1: [],\r\n            check_type: 1,\r\n            page: 1,\r\n            page1: 1,\r\n            active: 0,\r\n            has_more: true,\r\n            has_more1: true,\r\n            total_all: 0,\r\n            total_all1: 0\r\n        }\r\n    },\r\n\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        async load_more() {\r\n            this.page++\r\n            this.getNewUserResourceList()\r\n        },\r\n        async load_more1() {\r\n            this.page1++\r\n            this.getNewUserResourceList1()\r\n        },\r\n        async to_praxis(item) {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await saveUserStudyResource({ sid: user.sid, resource_id: item.id })\r\n                    if (response.code == 100) {\r\n                        if (item.category_id == 1) {\r\n                            this.$router.push({ name: 'Praxis', query: { log_id: response.data, resources_id: item.id } })\r\n                        }\r\n                        if (item.category_id == 2) {\r\n                            this.$router.push({ name: 'ReadPraxis', query: { log_id: response.data, resources_id: item.id } })\r\n                        }\r\n                        if (item.category_id == 4) {\r\n                            this.$router.push({ name: 'WritePraxis', query: { log_id: response.data, resources_id: item.id } })\r\n                        }\r\n                    }\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async getHotUserResourceList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                console.log(user)\r\n                if (user && user.sid) {\r\n\r\n                    const response = await getHotUserResourceList({ sid: user.sid })\r\n                    const data = response.data\r\n                    this.HotResouceList = data\r\n                    this.userInfo = user\r\n                    this.active = 1\r\n\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n\r\n        async getNewUserResourceList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                console.log(user)\r\n                if (user && user.sid) {\r\n                    const response = await getUserResourceList({ sid: user.sid, status: 1, page: this.page })\r\n                    if (response.code !== 100) {\r\n                        this.has_more = false\r\n                        return\r\n                    }\r\n                    const data = response.data.list\r\n                    this.total_all = response.data.total\r\n                    if (data.length < 10) {\r\n                        this.has_more = false\r\n                    }\r\n                    this.NewResouceList = data.concat(this.NewResouceList)\r\n                    this.active = 0\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async getNewUserResourceList1() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                console.log(user)\r\n                if (user && user.sid) {\r\n                    const response = await getUserResourceList({ sid: user.sid, status: 2, page: this.page1 })\r\n                    if (response.code !== 100) {\r\n                        this.has_more = false\r\n                        return\r\n                    }\r\n                    const data = response.data.list\r\n                    this.total_all1 = response.data.total\r\n                    if (data.length < 10) {\r\n                        this.has_more = false\r\n                    }\r\n                    this.NewResouceList1 = data.concat(this.NewResouceList1)\r\n                    this.active = 2\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n    },\r\n    mounted() {\r\n        this.active = this.$route.query.now_status;\r\n        this.getNewUserResourceList()\r\n        this.getNewUserResourceList1()\r\n        this.getHotUserResourceList()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n.stu-info {\r\n    width: 330px;\r\n    height: 40px;\r\n}\r\n\r\n.count-info {\r\n    width: 30%;\r\n    height: 40px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.right-count,\r\n.total-count {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.right-box {\r\n    width: 70%;\r\n    height: 40px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    font-size: 14px;\r\n}\r\n\r\n.right-avg {\r\n    width: 100%;\r\n    height: 20px;\r\n    line-height: 20px;\r\n}\r\n\r\n.submit-time {\r\n    width: 100%;\r\n    height: 20px;\r\n    line-height: 20px;\r\n}\r\n\r\n.learn-item {\r\n    width: 330px;\r\n    height: 80px;\r\n    border-style: solid;\r\n    box-shadow: 0px 2px 10px 1px rgba(80, 143, 206, 0.1);\r\n    border-width: 0px;\r\n    margin: 11px auto;\r\n    border-radius: 20px;\r\n    background-color: #FFF;\r\n}\r\n\r\n.learn-item-finished {\r\n    width: 330px;\r\n    height: 130px;\r\n    border-style: solid;\r\n    box-shadow: 0px 2px 10px 1px rgba(80, 143, 206, 0.1);\r\n    border-width: 0px;\r\n    margin: 11px auto;\r\n    border-radius: 20px;\r\n    background-color: #FFF;\r\n}\r\n\r\n.learn-img {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 58px;\r\n    height: 58px;\r\n    margin: 10px 6px 0 12px;\r\n    border-radius: 10px;\r\n}\r\n\r\n\r\n.learn-item-info {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 180px;\r\n    height: 50px;\r\n    line-height: 20px;\r\n    padding-top: 21px;\r\n    text-align: left;\r\n}\r\n\r\n.learn-item-title {\r\n    width: 180px;\r\n    font-size: 12px;\r\n    font-weight: bold;\r\n    overflow: hidden;\r\n    text-overflow: ellipsis;\r\n    white-space: nowrap;\r\n    text-align: left;\r\n}\r\n\r\n.btn-learn {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    color: #003F88;\r\n    font-size: 12px;\r\n    height: 85px;\r\n    line-height: 85px;\r\n}\r\n\r\n.load-more,\r\n.load-more-empty {\r\n    text-align: center;\r\n    font-size: 12px;\r\n    width: 100%;\r\n    height: 40px;\r\n    line-height: 40px;\r\n}\r\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./List.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./List.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./List.vue?vue&type=template&id=fced80fa&scoped=true\"\nimport script from \"./List.vue?vue&type=script&lang=js\"\nexport * from \"./List.vue?vue&type=script&lang=js\"\nimport style0 from \"./List.vue?vue&type=style&index=0&id=fced80fa&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"fced80fa\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"learn\"},[_c('van-nav-bar',{attrs:{\"title\":\"搜索内容\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticClass:\"tea-search\"},[_c('van-search',{attrs:{\"placeholder\":\"请输入搜索关键词\"},on:{\"input\":_vm.getList},model:{value:(_vm.keyword),callback:function ($$v) {_vm.keyword=$$v},expression:\"keyword\"}})],1),_c('div',{staticClass:\"check-item\"},[_c('div',{staticClass:\"check-item-lables\"},_vm._l((_vm.subjectCate),function(item,index){return _c('div',{key:index,class:['lable-item', _vm.keyword === item.name ? 'lable-item-check' : ''],attrs:{\"data-index\":item.id},on:{\"click\":function($event){return _vm.check_subject_cate_id(item)}}},[_vm._v(_vm._s(item.name))])}),0)]),_c('div',{staticClass:\"main-content\"},[_c('div',{staticClass:\"content-mian\"},_vm._l((_vm.resources),function(item,index){return _c('div',{key:index,staticClass:\"listen-item\",on:{\"click\":function($event){return _vm.to_praxis(item)}}},[_c('div',{staticClass:\"listen-left\"},[_c('div',{staticClass:\"listen-name\"},[_vm._v(_vm._s(item.name))]),_c('div',{staticClass:\"listen-time\"},[_vm._v(_vm._s(item.create_time))])]),_c('div',{staticClass:\"listen-right\"},[(item.status == 0)?_c('div',{staticClass:\"listen-status\"},[_vm._v(\"未完成\")]):_vm._e(),(item.status == 1)?_c('div',{staticClass:\"listen-status listen-status3\"},[_vm._v(\"上次未学完\")]):_vm._e(),(item.status == 2)?_c('div',{staticClass:\"listen-status listen-status3\"},[_vm._v(\"已学\")]):_vm._e()])])}),0)])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"learn\">\r\n        <van-nav-bar title=\"搜索内容\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <div class=\"tea-search\">\r\n            <van-search v-model=\"keyword\" @input=\"getList\" placeholder=\"请输入搜索关键词\" />\r\n        </div>\r\n        <div class=\"check-item\">\r\n            <div class=\"check-item-lables\">\r\n                <div @click=\"check_subject_cate_id(item)\"\r\n                    :class=\"['lable-item', keyword === item.name ? 'lable-item-check' : '']\" :data-index=\"item.id\"\r\n                    v-for=\"(item, index) in subjectCate\" :key=\"index\">{{ item.name }}</div>\r\n            </div>\r\n        </div>\r\n        <div class=\"main-content\">\r\n            <div class=\"content-mian\">\r\n                <div class=\"listen-item\" v-for=\"(item, index) in resources\" :key=\"index\" @click=\"to_praxis(item)\">\r\n                    <div class=\"listen-left\">\r\n                        <div class=\"listen-name\">{{ item.name }}</div>\r\n                        <div class=\"listen-time\">{{ item.create_time }}</div>\r\n                    </div>\r\n                    <div class=\"listen-right\">\r\n                        <div class=\"listen-status\" v-if=\"item.status == 0\">未完成</div>\r\n                        <div class=\"listen-status listen-status3\" v-if=\"item.status == 1\">上次未学完</div>\r\n                        <div class=\"listen-status listen-status3\" v-if=\"item.status == 2\">已学</div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getSearchList, getCateList } from '@/api/listen'\r\nimport { saveUserStudyResource } from '@/api/user'\r\nexport default {\r\n    name: 'Learn',\r\n    data() {\r\n        return {\r\n            category_id: 0,\r\n            keyword: '',\r\n            resources: [],\r\n            listData: [],\r\n            subjectCate: []\r\n        }\r\n    },\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        async getList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getSearchList({ sid: user.sid, keyword: this.keyword, category_id: this.category_id })\r\n                    const data = response.data\r\n                    this.resources = data\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n\r\n        async to_praxis(item) {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await saveUserStudyResource({ sid: user.sid, resource_id: item.id })\r\n                    // const data = response.data\r\n                    if (response.code == 100) {\r\n                        if (item.category_id == 1) {\r\n                            this.$router.push({ name: 'Praxis', query: { log_id: response.data, resources_id: item.id } })\r\n                        }\r\n                        if (item.category_id == 2) {\r\n                            this.$router.push({ name: 'ReadPraxis', query: { log_id: response.data, resources_id: item.id } })\r\n                        }\r\n                        if (item.category_id == 4) {\r\n                            this.$router.push({ name: 'WritePraxis', query: { log_id: response.data, resources_id: item.id } })\r\n                        }\r\n                    }\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async getCateList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getCateList()\r\n                    const data = response.data\r\n\r\n                    this.subjectCate = data\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async check_subject_cate_id(item) {\r\n            this.keyword = item.name\r\n            this.getList()\r\n        },\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        this.category_id = this.$route.query.category_id;\r\n        this.keyword = this.$route.query.keyword;\r\n        this.getList()\r\n        this.getCateList()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n.tea-search {\r\n    width: 360px;\r\n    height: 36px;\r\n    background: #000000;\r\n    border-radius: 25px;\r\n    /* opacity: 0.26; */\r\n    margin: 11px auto;\r\n}\r\n\r\n.check-item {\r\n    width: 339px;\r\n    margin: 11px auto;\r\n    height: auto;\r\n    text-align: left;\r\n}\r\n\r\n.check-item-title {\r\n    font-size: 12px;\r\n    font-weight: bold;\r\n    text-align: left;\r\n}\r\n\r\n.check-item-lables {\r\n    margin-top: 15px;\r\n}\r\n\r\n.lable-item {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin-right: 12px;\r\n    margin-bottom: 12px;\r\n    border: solid 1px #F4F8FB;\r\n    background-color: #F4F8FB;\r\n    padding: 2px 5px;\r\n    border-radius: 20rpx;\r\n    font-size: 12px;\r\n    color: #989898;\r\n}\r\n\r\n.lable-item-check {\r\n    border: #699FDE solid 1px;\r\n    background-color: #E2F9FF;\r\n    color: #579ACE;\r\n}\r\n\r\n.main-content {\r\n    width: 100vw;\r\n    height: 532px;\r\n    background: #FFFFFF;\r\n    border-radius: 32px;\r\n}\r\n\r\n.content-mian {\r\n    width: 90vw;\r\n    height: 532px;\r\n    margin: 0 auto;\r\n}\r\n\r\n.listen-title {\r\n    color: #000000;\r\n    font-size: 16px;\r\n    font-weight: bold;\r\n    padding-top: 23px;\r\n    text-align: center;\r\n}\r\n\r\n.listen-item {\r\n    width: 100%;\r\n    border-bottom: solid 1px #E4E4E4;\r\n    padding: 10px 0;\r\n}\r\n\r\n.listen-left {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 210px;\r\n}\r\n\r\n.listen-name {\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n    margin: 16px 0 8px 0;\r\n}\r\n\r\n.listen-time {\r\n    font-size: 12px;\r\n}\r\n\r\n.listen-right {\r\n    width: 100px;\r\n    text-align: right;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.listen-status {\r\n    padding-top: 16px;\r\n    font-size: 14px;\r\n    color: #919191;\r\n}\r\n\r\n.listen-status3 {\r\n    color: #51BF23;\r\n}\r\n\r\n.listen-status1,\r\n.listen-status2,\r\n.listen-status0 {\r\n    color: #919191;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Serch.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Serch.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Serch.vue?vue&type=template&id=f44c8320&scoped=true\"\nimport script from \"./Serch.vue?vue&type=script&lang=js\"\nexport * from \"./Serch.vue?vue&type=script&lang=js\"\nimport style0 from \"./Serch.vue?vue&type=style&index=0&id=f44c8320&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"f44c8320\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"active_detail\"},[_c('div',{staticClass:\"main\"},[_c('div',{staticClass:\"main-top\"},[_c('van-nav-bar',{attrs:{\"title\":\"活动详情\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}})],1),(_vm.active_info.cover)?_c('div',{staticClass:\"swiper-info\"},[_c('van-swipe',{staticClass:\"my-swipe\",attrs:{\"autoplay\":3000,\"lazy-render\":\"\"}},[_c('van-swipe-item',[_c('van-image',{staticClass:\"cover-image\",attrs:{\"fit\":\"contain\",\"src\":_vm.active_info.cover}})],1)],1)],1):_vm._e(),_c('div',{staticClass:\"content\"},[_c('button',{staticClass:\"top-content\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.all_active}},[_c('img',{staticClass:\"all-icon\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/active/all.png\",\"mode\":\"widthFix\"}}),_c('span',{staticClass:\"all-desc\"},[_vm._v(\"全部活动\")]),_c('van-icon',{staticClass:\"all-chevron-right\",attrs:{\"name\":\"arrow\",\"color\":\"#606060\"}})],1),(_vm.loading)?_c('div',{staticClass:\"page-status\",attrs:{\"role\":\"status\"}},[_vm._v(\"正在加载活动详情...\")]):(_vm.loadError)?_c('div',{staticClass:\"page-status\",attrs:{\"role\":\"alert\"}},[_c('p',[_vm._v(_vm._s(_vm.loadError))]),_c('button',{attrs:{\"type\":\"button\"},on:{\"click\":_vm.getActiveDetail}},[_vm._v(\"重新加载\")])]):[_c('div',{staticClass:\"active-name\"},[_vm._v(_vm._s(_vm.active_info.name))]),_c('div',{staticClass:\"active-time\"},[_vm._v(_vm._s(_vm.active_info.start_date || '待公布')+\" 至 \"+_vm._s(_vm.active_info.end_date || '待公布'))]),_c('div',{staticClass:\"active-status\"},[_c('div',{staticClass:\"status-summary\"},[_c('span',{staticClass:\"registration-count\"},[_vm._v(\"已报名 \"),_c('strong',[_vm._v(_vm._s(_vm.attended))]),_vm._v(\" 人\")]),_c('span',{staticClass:\"now-status\",class:{ full: _vm.isFull }},[_vm._v(_vm._s(_vm.quotaText))])]),_c('div',{staticClass:\"now-status-box\"},[_c('div',{staticClass:\"now-status-progress\",attrs:{\"role\":\"progressbar\",\"aria-label\":\"报名进度\",\"aria-valuenow\":_vm.progress,\"aria-valuemin\":\"0\",\"aria-valuemax\":\"100\"}},[_c('div',{staticClass:\"has-add\",style:({ width: _vm.progress + '%' })})]),(_vm.hasCapacity)?_c('div',{staticClass:\"baifenbi\"},[_vm._v(\"共 \"+_vm._s(_vm.capacity)+\" 个名额\")]):_vm._e()])]),_vm._m(0),_c('div',{staticClass:\"active-detail\"},[_c('div',{staticClass:\"lable\"},[_vm._v(\"活动详情：\")]),(_vm.active_info.content)?_c('div',{staticClass:\"active-desc\",domProps:{\"innerHTML\":_vm._s(_vm.active_info.content)}}):_c('p',{staticClass:\"empty-description\"},[_vm._v(\"暂无活动介绍\")])])]],2)]),_c('div',{staticClass:\"action-bar\"},[_c('button',{staticClass:\"add-btn\",attrs:{\"type\":\"button\",\"disabled\":_vm.loading || !!_vm.loadError || _vm.isFull || _vm.submitted},on:{\"click\":_vm.onVisibleChange}},[_vm._v(\" \"+_vm._s(_vm.submitted ? '已报名' : _vm.isFull ? '名额已满' : '报名')+\" \")])]),_c('van-popup',{staticClass:\"registration-popup\",attrs:{\"close-on-click-overlay\":!_vm.submitting},model:{value:(_vm.show),callback:function ($$v) {_vm.show=$$v},expression:\"show\"}},[_c('div',{staticClass:\"check-main\"},[_c('div',{staticClass:\"popup-title\"},[_vm._v(\"报名确认\")]),_c('div',{staticClass:\"btn-cancel\",on:{\"click\":_vm.onVisibleChange}},[_c('van-icon',{attrs:{\"name\":\"cross\",\"color\":\"#606060\"}})],1),_c('div',{staticClass:\"user-info\"},[_c('div',{staticClass:\"info-item\"},[_c('div',{staticClass:\"info-lable\"},[_vm._v(\"姓名\")]),_c('div',{staticClass:\"info-detail\"},[_vm._v(_vm._s(_vm.userInfo.name))])]),_c('div',{staticClass:\"info-item\"},[_c('div',{staticClass:\"info-lable\"},[_vm._v(\"学号\")]),_c('div',{staticClass:\"info-detail\"},[_vm._v(_vm._s(_vm.userInfo.userno))])]),_c('div',{staticClass:\"info-item\"},[_c('div',{staticClass:\"info-lable\"},[_vm._v(\"联系方式\")]),_c('div',{staticClass:\"info-detail\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.userPhone),expression:\"userPhone\"}],attrs:{\"type\":\"text\",\"placeholder\":\"填入你的联系方式\",\"name\":\"\",\"id\":\"\"},domProps:{\"value\":(_vm.userPhone)},on:{\"input\":function($event){if($event.target.composing)return;_vm.userPhone=$event.target.value}}})])]),_c('div',{staticClass:\"info-item\"},[_c('div',{staticClass:\"info-lable\"},[_vm._v(\"邮箱\")]),_c('div',{staticClass:\"info-detail\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.userEmail),expression:\"userEmail\"}],attrs:{\"type\":\"text\",\"placeholder\":\"填入你的电子邮箱\",\"name\":\"\",\"id\":\"\"},domProps:{\"value\":(_vm.userEmail)},on:{\"input\":function($event){if($event.target.composing)return;_vm.userEmail=$event.target.value}}})])])]),_c('div',{staticClass:\"fujian\"},[_c('van-uploader',{attrs:{\"after-read\":_vm.afterRead}},[_c('div',{staticClass:\"fujian-chirld\"},[_c('img',{staticClass:\"upload-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/write/upload.png\",\"mode\":\"\"}}),_c('span',[_vm._v(\"上传附件\")])])])],1),_c('button',{staticClass:\"btn-ok\",attrs:{\"type\":\"button\",\"disabled\":_vm.submitting || _vm.isFull || _vm.submitted},on:{\"click\":_vm.submit_info}},[_vm._v(_vm._s(_vm.submitting ? '正在提交...' : '确认无误，提交'))])])])],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"active-add\"},[_c('div',{staticClass:\"add-item\"},[_c('img',{staticClass:\"add-user\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/active/user.png\",\"mode\":\"widthFix\"}}),_c('div',{staticClass:\"add-item-info\"},[_vm._v(\"参与人群\")]),_c('div',{staticClass:\"add-desc\"},[_vm._v(\"本科生\")])]),_c('div',{staticClass:\"in-line\"}),_c('div',{staticClass:\"add-item\"},[_c('img',{staticClass:\"add-user\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/active/user.png\",\"mode\":\"widthFix\"}}),_c('div',{staticClass:\"add-item-info\"},[_vm._v(\"参与方式\")]),_c('div',{staticClass:\"add-desc\"},[_vm._v(\"上传文件\")])])])\n}]\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"active_detail\">\r\n        <div class=\"main\">\r\n            <div class=\"main-top\">\r\n                <van-nav-bar title=\"活动详情\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n            </div>\r\n            <div v-if=\"active_info.cover\" class=\"swiper-info\">\n                <van-swipe class=\"my-swipe\" :autoplay=\"3000\" lazy-render>\r\n                    <van-swipe-item>\r\n                        <van-image class=\"cover-image\" fit=\"contain\" :src=\"active_info.cover\" />\n                    </van-swipe-item>\r\n                </van-swipe>\r\n            </div>\r\n            <div class=\"content\">\r\n                <button type=\"button\" class=\"top-content\" @click=\"all_active\">\n                    <img class=\"all-icon\"\r\n                        src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/active/all.png\"\r\n                        mode=\"widthFix\" />\r\n                    <span class=\"all-desc\">全部活动</span>\n                    <van-icon name=\"arrow\" class=\"all-chevron-right\" color=\"#606060\" />\r\n                </button>\n                <div v-if=\"loading\" class=\"page-status\" role=\"status\">正在加载活动详情...</div>\n                <div v-else-if=\"loadError\" class=\"page-status\" role=\"alert\">\n                    <p>{{ loadError }}</p>\n                    <button type=\"button\" @click=\"getActiveDetail\">重新加载</button>\n                </div>\n                <template v-else>\n                <div class=\"active-name\">{{ active_info.name }}</div>\r\n                <div class=\"active-time\">{{ active_info.start_date || '待公布' }} 至 {{ active_info.end_date || '待公布' }}</div>\n                <div class=\"active-status\">\r\n                    <div class=\"status-summary\">\n                        <span class=\"registration-count\">已报名 <strong>{{ attended }}</strong> 人</span>\n                        <span class=\"now-status\" :class=\"{ full: isFull }\">{{ quotaText }}</span>\n                    </div>\n                    <div class=\"now-status-box\">\n                        <div class=\"now-status-progress\" role=\"progressbar\" aria-label=\"报名进度\"\n                            :aria-valuenow=\"progress\" aria-valuemin=\"0\" aria-valuemax=\"100\">\n                            <div class=\"has-add\" :style=\"{ width: progress + '%' }\"></div>\n                        </div>\n                        <div v-if=\"hasCapacity\" class=\"baifenbi\">共 {{ capacity }} 个名额</div>\n                    </div>\r\n                </div>\r\n                <div class=\"active-add\">\r\n                    <div class=\"add-item\">\r\n                        <img class=\"add-user\"\r\n                            src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/active/user.png\"\r\n                            mode=\"widthFix\" />\r\n                        <div class=\"add-item-info\">参与人群</div>\r\n                        <div class=\"add-desc\">本科生</div>\r\n                    </div>\r\n                    <div class=\"in-line\"></div>\r\n                    <div class=\"add-item\">\r\n                        <img class=\"add-user\"\r\n                            src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/active/user.png\"\r\n                            mode=\"widthFix\" />\r\n                        <div class=\"add-item-info\">参与方式</div>\r\n                        <div class=\"add-desc\">上传文件</div>\r\n                    </div>\r\n                </div>\r\n                <div class=\"active-detail\">\r\n                    <div class=\"lable\">活动详情：</div>\r\n                    <div v-if=\"active_info.content\" class=\"active-desc\" v-html=\"active_info.content\">\n                       \r\n                    </div>\n                    <p v-else class=\"empty-description\">暂无活动介绍</p>\n                </div>\n                </template>\n            </div>\n        </div>\n        <div class=\"action-bar\">\n            <button type=\"button\" class=\"add-btn\" :disabled=\"loading || !!loadError || isFull || submitted\" @click=\"onVisibleChange\">\n                {{ submitted ? '已报名' : isFull ? '名额已满' : '报名' }}\n            </button>\n        </div>\n        <van-popup v-model=\"show\" class=\"registration-popup\" :close-on-click-overlay=\"!submitting\">\n            <div class=\"check-main\">\r\n                <div class=\"popup-title\">报名确认</div>\r\n                <div class=\"btn-cancel\" @click=\"onVisibleChange\">\r\n                    <van-icon name=\"cross\" color=\"#606060\" />\r\n                </div>\r\n                <div class=\"user-info\">\r\n                    <div class=\"info-item\">\r\n                        <div class=\"info-lable\">姓名</div>\r\n                        <div class=\"info-detail\">{{ userInfo.name }}</div>\r\n                    </div>\r\n                    <div class=\"info-item\">\r\n                        <div class=\"info-lable\">学号</div>\r\n                        <div class=\"info-detail\">{{ userInfo.userno }}</div>\r\n                    </div>\r\n                    <div class=\"info-item\">\r\n                        <div class=\"info-lable\">联系方式</div>\r\n                        <div class=\"info-detail\">\r\n                            <input type=\"text\" v-model=\"userPhone\" placeholder=\"填入你的联系方式\" name=\"\" id=\"\" />\r\n                        </div>\r\n                    </div>\r\n                    <div class=\"info-item\">\r\n                        <div class=\"info-lable\">邮箱</div>\r\n                        <div class=\"info-detail\">\r\n                            <input type=\"text\" placeholder=\"填入你的电子邮箱\" v-model=\"userEmail\" name=\"\" id=\"\" />\r\n                        </div>\r\n                    </div>\r\n\r\n                </div>\r\n                <div class=\"fujian\">\r\n                    <van-uploader :after-read=\"afterRead\">\r\n                        <div class=\"fujian-chirld\">\r\n                            <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/write/upload.png\"\r\n                                mode=\"\" class=\"upload-img\" />\r\n                            <span>上传附件</span>\n                        </div>\r\n                    </van-uploader>\r\n                </div>\r\n                <button type=\"button\" class=\"btn-ok\" :disabled=\"submitting || isFull || submitted\" @click=\"submit_info\">{{ submitting ? '正在提交...' : '确认无误，提交' }}</button>\n            </div>\r\n        </van-popup>\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getActiveDetail } from '@/api/home'\r\nimport { Submitactivity } from '@/api/user'\r\nexport default {\r\n    name: 'ActiveDetail',\r\n    data() {\r\n        return {\r\n            active_id: 0,\r\n            active_info: {},\n            loading: true,\n            loadError: '',\n            submitting: false,\n            submitted: false,\n            show: false,\r\n            userInfo: {},\n            filePath: '',\r\n            userPhone: '',\r\n            userEmail: ''\r\n        }\r\n    },\r\n\r\n    computed: {\n        hasCapacity() {\n            const value = this.active_info.total_num\n            return value !== undefined && value !== null && value !== '' && Number.isFinite(Number(value)) && Number(value) >= 0\n        },\n        capacity() { return this.hasCapacity ? Number(this.active_info.total_num) : 0 },\n        attended() {\n            const value = Number(this.active_info.attend_num)\n            return Number.isFinite(value) ? Math.max(0, value) : 0\n        },\n        remaining() { return Math.max(0, this.capacity - this.attended) },\n        progress() { return this.capacity > 0 ? Math.min(100, this.attended / this.capacity * 100) : this.isFull ? 100 : 0 },\n        isFull() { return this.hasCapacity && this.remaining === 0 },\n        quotaText() { return !this.hasCapacity ? '名额待公布' : this.isFull ? '名额已满' : `剩余 ${this.remaining} 个名额` }\n    },\n    methods: {\n        async onVisibleChange() {\n            if (this.submitting || (!this.show && (this.loading || this.loadError || this.isFull || this.submitted))) return\n            this.show = !this.show\n        },\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        async all_active() {\r\n            this.$router.push({ name: 'ActiveList' })\r\n        },\r\n        async afterRead(file) {\r\n            console.log(file)\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    var form = new FormData();\r\n                    form.append(\"file\", file.file, user.sid + \"-\" + new Date().getTime() + file.file.name); //和普通form表单并无二致，后端接收到upfile参数的文件，文件名为recorder.mp3\r\n                    var xhr = new XMLHttpRequest();\r\n                    // xhr.open(\"POST\", \"https://zju.3dease.com/fcapi/mobileupload/upload\");\r\n                    xhr.open(\"POST\", \"https://elang.zju.edu.cn:8082/mobileupload/upload\");\r\n                    xhr.onreadystatechange = () => {\r\n                        if (xhr.readyState === 4) {\r\n                            if (xhr.status === 200) {\r\n                                // 请求成功，解析响应\r\n                                var response = JSON.parse(xhr.responseText);\r\n                                console.log(\"上传成功，服务器返回的数据:\", response);\r\n                                this.filePath = response.data.url\r\n\r\n                            } else {\r\n                                // 请求失败，处理错误\r\n                                console.error(\"上传失败，状态码:\", xhr.status);\r\n                                console.error(\"错误信息:\", xhr.statusText);\r\n                            }\r\n                        }\r\n                    };\r\n                    xhr.send(form);\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n\r\n        },\r\n        async submit_info() {\n            if (this.submitting || this.isFull || this.submitted) return\n            this.submitting = true\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                this.userInfo = user || {}\n                if (user && user.sid) {\r\n                    const response = await Submitactivity({\r\n                        sid: user.sid,\r\n                        activity_id: this.active_id,\r\n                        name: user.name,\r\n                        user_no: user.userno,\r\n                        phone: this.userPhone,\r\n                        email: this.userEmail,\r\n                        attachment: this.filePath\r\n                    })\r\n                    const data = response.code !== undefined ? response : response.data || {}\n                    if (data.code == 100) {\n                        this.show = false\n                        this.submitted = true\n                        this.$message.success('报名成功')\n                        this.getActiveDetail()\n                    } else {\n                        this.$message.error(data.msg || data.message || '报名失败，请稍后重试')\n                    }\r\n                } else {\r\n                    this.$message.error('登录信息已失效，请重新登录')\n                }\r\n            } catch (error) {\r\n                this.$message.error('报名失败，请稍后重试')\n            } finally {\n                this.submitting = false\n            }\r\n        },\r\n        async getActiveDetail() {\n            this.loading = true\n            this.loadError = ''\n            try {\n                const user = JSON.parse(localStorage.getItem('user'))\n                this.userInfo = user || {}\n                if (user && user.sid) {\n                    if (!this.active_id) throw new Error('缺少活动编号，请从活动列表重新进入')\n                    const response = await getActiveDetail({ sid: user.sid, id: this.active_id })\n                    if (response.code !== undefined && Number(response.code) !== 100) throw new Error(response.msg || response.message || '活动加载失败')\n                    const data = response.data\n                    if (!data || Array.isArray(data) || !Object.keys(data).length) throw new Error('未找到该活动')\n                    this.active_info = data\r\n                    this.userInfo = user\r\n\r\n                } else {\r\n                    this.loadError = '登录信息已失效，请重新登录'\n                }\r\n            } catch (error) {\r\n                this.loadError = error.message || '活动加载失败，请稍后重试'\n            } finally {\n                this.loading = false\n            }\r\n        },\r\n\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        this.active_id = this.$route.query.active_id;\r\n        this.getActiveDetail()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\n.active_detail { min-height: 100vh; background: #f4f7fb; font-size: 14px; }\n.main { padding-top: 46px; padding-bottom: calc(94px + env(safe-area-inset-bottom)); }\n.main-top { position: fixed; inset: 0 0 auto; z-index: 100; }\n.swiper-info { background: #edf4fa; }\n.cover-image { display: block; width: 100%; height: 220px; }\n.content { position: relative; padding: 16px 20px 24px; border-radius: 20px 20px 0 0; background: #fff; box-sizing: border-box; }\n.swiper-info + .content { margin-top: -14px; }\n.top-content { display: flex; align-items: center; justify-content: flex-end; gap: 5px; margin-left: auto; padding: 4px 0 10px 12px; border: 0; background: transparent; color: #606060; font-size: 12px; cursor: pointer; }\n.all-icon { width: 15px; height: 12px; object-fit: contain; }\n.active-name { margin-top: 8px; font-size: 20px; font-weight: bold; line-height: 1.5; overflow-wrap: anywhere; }\n.active-time { margin-top: 5px; color: #808080; font-size: 12px; line-height: 1.6; }\n.active-status { margin-top: 18px; padding: 14px; border: 1px solid #e6eef6; border-radius: 10px; background: #f8fbff; }\n.status-summary { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 8px; line-height: 22px; }\n.registration-count { color: #637488; font-size: 12px; }\n.registration-count strong { color: #165c99; font-size: 20px; }\n.now-status { color: #3976a6; font-size: 12px; }\n.now-status.full { color: #7f8b99; }\n.now-status-box { margin-top: 12px; }\n.now-status-progress { height: 6px; overflow: hidden; border-radius: 4px; background: #e5ebf2; }\n.has-add { height: 100%; border-radius: inherit; background: linear-gradient(90deg, #4499ee, #80d9f7); transition: width .2s; }\n.baifenbi { margin-top: 7px; color: #8a96a4; font-size: 12px; text-align: right; }\n.active-add { margin: 18px 0; padding: 0 14px; border-radius: 10px; background: #f8f8f8; }\n.add-item { display: flex; align-items: center; gap: 6px; padding: 12px 0; line-height: 20px; }\n.add-user { width: 13px; height: 13px; object-fit: contain; }\n.add-item-info { flex-shrink: 0; }\n.add-desc { margin-left: auto; color: #808080; text-align: right; }\n.in-line { height: 1px; background: #e8e8e8; }\n.active-detail { min-width: 0; }\n.lable { margin: 22px 0 14px; font-size: 16px; font-weight: 600; }\n.active-desc { overflow-x: auto; color: #606d7a; font-size: 14px; line-height: 1.8; overflow-wrap: anywhere; }\n.active-desc ::v-deep img, .active-desc ::v-deep video { max-width: 100%; height: auto; }\n.active-desc ::v-deep p { word-break: normal; }\n.active-desc ::v-deep a { color: #126abd; text-decoration: underline; text-underline-offset: 3px; overflow-wrap: anywhere; }\n.empty-description { color: #99a2ae; }\n.action-bar { position: fixed; right: 0; bottom: 0; left: 0; z-index: 90; padding: 12px 24px calc(12px + env(safe-area-inset-bottom)); border-top: 1px solid #edf0f4; background: #fff; box-sizing: border-box; }\n.add-btn, .btn-ok { display: block; width: 100%; border: 0; border-radius: 24px; background: #003f88; color: #fff; font-size: 14px; text-align: center; cursor: pointer; }\n.add-btn { max-width: 440px; height: 46px; margin: 0 auto; }\n.add-btn:disabled, .btn-ok:disabled { background: #e7edf3; color: #8d9cac; cursor: not-allowed; }\n.page-status { padding: 32px 0; color: #8292a4; text-align: center; line-height: 1.7; }\n.page-status button { padding: 8px 16px; border: 0; border-radius: 6px; background: #eaf4ff; color: #126abd; }\n.registration-popup { width: calc(100% - 40px); max-width: 360px; max-height: 85vh; border-radius: 20px; }\n.check-main { padding: 22px 20px; background: linear-gradient(180deg, #e2f2ff, #fff 55%); }\n.popup-title { padding-right: 25px; color: #003f88; font-size: 17px; font-weight: bold; }\n.btn-cancel { position: absolute; right: 16px; top: 18px; padding: 6px; cursor: pointer; }\n.user-info { margin-top: 24px; }\n.info-item { display: flex; align-items: center; gap: 10px; min-height: 42px; font-size: 14px; }\n.info-lable { width: 60px; flex-shrink: 0; }\n.info-detail { flex: 1; min-width: 0; overflow-wrap: anywhere; }\n.info-detail > input { width: 100%; min-width: 0; padding: 8px 0; border: 0; border-bottom: 1px solid #e3eaf2; background: transparent; font-size: 14px; box-sizing: border-box; }\n.fujian { margin: 18px 0; border-radius: 10px; background: #f6f6f6; }\n.fujian ::v-deep .van-uploader, .fujian ::v-deep .van-uploader__wrapper, .fujian ::v-deep .van-uploader__input-wrapper { width: 100%; }\n.fujian-chirld { display: flex; align-items: center; justify-content: center; gap: 10px; min-height: 64px; color: #8291a1; }\n.upload-img { width: 17px; height: 13px; }\n.btn-ok { height: 42px; }\n@media (max-width: 340px) {\n    .content { padding-right: 16px; padding-left: 16px; }\n    .active-name { font-size: 18px; }\n    .check-main { padding-right: 16px; padding-left: 16px; }\n}\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Detail.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Detail.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Detail.vue?vue&type=template&id=a95fd236&scoped=true\"\nimport script from \"./Detail.vue?vue&type=script&lang=js\"\nexport * from \"./Detail.vue?vue&type=script&lang=js\"\nimport style0 from \"./Detail.vue?vue&type=style&index=0&id=a95fd236&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"a95fd236\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('van-nav-bar',{attrs:{\"title\":_vm.title,\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),(_vm.msg_list.length == 0)?_c('div',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"下拉加载历史...\")]):_vm._e(),_c('van-pull-refresh',{on:{\"refresh\":_vm.onRefresh},model:{value:(_vm.isLoading),callback:function ($$v) {_vm.isLoading=$$v},expression:\"isLoading\"}},[_c('div',{staticStyle:{\"display\":\"none\"}},[_c('audio',{ref:\"audioPlayer\",attrs:{\"controls\":\"controls\",\"src\":_vm.new_audio,\"autoplay\":\"\"},on:{\"play\":_vm.onPlay,\"ended\":function($event){return _vm.myFunction()}}})]),_c('div',{ref:\"scrollContainer\",staticClass:\"chat-box\",attrs:{\"id\":\"chat-box\"}},[_vm._l((_vm.msg_list),function(item,index){return _c('div',{key:index,staticClass:\"chat-item\"},[(item.type == 0 && item.question != '')?_c('div',{staticClass:\"question-box\"},[_vm._v(_vm._s(item.question))]):_vm._e(),(item.type == 1 && item.lang_time > 0)?_c('div',{staticClass:\"question-box\",on:{\"click\":function($event){return _vm.playSound(item.filepath)}}},[_c('img',{staticClass:\"start-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/audio-msg.png\",\"mode\":\"widthFix\"}}),_c('span',{staticStyle:{\"font-size\":\"12px\",\"padding-left\":\"10px\"}},[_vm._v(_vm._s(item.lang_time)+\"s\")])]):_vm._e(),(item.answer != '')?_c('div',{staticClass:\"answer-box-text\",attrs:{\"id\":'chat' + (index + 1)}},[_c('div',{staticStyle:{\"margin-bottom\":\"10px\"},domProps:{\"innerHTML\":_vm._s(_vm.simpleParse(item.answer))}}),(_vm.total_count != index + 1)?_c('div',{staticClass:\"answer-box\",attrs:{\"id\":\"myElement\"}},[_c('div',{staticClass:\"restart-create\",on:{\"click\":function($event){return _vm.to_restart_chat(item)}}},[_vm._v(\"重新生成\")]),_c('img',{staticClass:\"copy-text\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/copy.png\",\"mode\":\"widthFix\"},on:{\"click\":function($event){return _vm.copyText(item.answer)}}}),(item.iscn == false)?_c('img',{staticClass:\"copy-text\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy.png\",\"mode\":\"widthFix\"},on:{\"click\":function($event){return _vm.enCnText(item.answer, index)}}}):_c('img',{staticClass:\"copy-text\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy1.png\",\"mode\":\"widthFix\"}}),(_vm.to_aplay == true && _vm.new_index == index)?_c('img',{staticClass:\"read-audio\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/xx.gif\",\"mode\":\"widthFix\"},on:{\"click\":function($event){return _vm.stop()}}}):_c('img',{staticClass:\"read-audio\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/read_audio.png\",\"mode\":\"widthFix\"},on:{\"click\":function($event){return _vm.readText2(item.answer, index)}}})]):_c('div',{staticClass:\"answer-box\",staticStyle:{\"height\":\"360rpx\"},attrs:{\"id\":\"myElement\"}},[_c('div',{staticClass:\"restart-create\",on:{\"click\":function($event){return _vm.to_restart_chat(item)}}},[_vm._v(\"重新生成\")]),_c('img',{staticClass:\"copy-text\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/copy.png\",\"mode\":\"widthFix\"},on:{\"click\":function($event){return _vm.copyText(item.answer)}}}),(item.iscn == false)?_c('img',{staticClass:\"copy-text\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy.png\",\"mode\":\"widthFix\"},on:{\"click\":function($event){return _vm.enCnText(item.answer, index)}}}):_c('img',{staticClass:\"copy-text\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy1.png\",\"mode\":\"widthFix\"}}),(_vm.to_aplay == true && _vm.new_index == index)?_c('img',{staticClass:\"read-audio\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/xx.gif\",\"mode\":\"widthFix\"},on:{\"click\":function($event){return _vm.stop()}}}):_c('img',{staticClass:\"read-audio\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/read_audio.png\",\"mode\":\"widthFix\"},on:{\"click\":function($event){return _vm.readText2(item.answer, index)}}}),_vm._l((_vm.global),function(item1,index1){return _c('div',{key:index1,staticClass:\"ai-ques-item\",on:{\"click\":function($event){return _vm.to_new_chat(item1)}}},[_vm._v(\" \"+_vm._s(item1.lable)+\" \")])})],2)]):_vm._e()])}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.is_get == 0),expression:\"is_get == 0\"}],staticClass:\"chat-item\"},[_c('div',{staticClass:\"answer-box-text-new\"},[_c('div',{staticClass:\"ai-ques-item1\"},[_c('img',{attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/output-9_59_13.gif\",\"width\":\"100%\",\"alt\":\"\"}})])])]),_c('div',{staticClass:\"chat-item\"},[_c('div',{staticClass:\"answer-box-text-new\"},[_c('div',{staticClass:\"ai-ques-item1\"})])]),_c('div',{staticClass:\"chat-item\"},[_c('div',{staticClass:\"answer-box-text-new\"},[_c('div',{staticClass:\"ai-ques-item1\"})])]),_c('div',{staticStyle:{\"width\":\"100vw\",\"height\":\"100px\"}})],2)]),_c('ChatComposer',{attrs:{\"fixed\":\"\",\"disabled\":_vm.is_get === 0},on:{\"send\":_vm.sendInput,\"recording\":_vm.onRecording},model:{value:(_vm.stu_content),callback:function ($$v) {_vm.stu_content=$$v},expression:\"stu_content\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./chat.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./chat.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./chat.vue?vue&type=template&id=562307dd&scoped=true\"\nimport script from \"./chat.vue?vue&type=script&lang=js\"\nexport * from \"./chat.vue?vue&type=script&lang=js\"\nimport style0 from \"./chat.vue?vue&type=style&index=0&id=562307dd&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"562307dd\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('van-nav-bar',{attrs:{\"title\":_vm.title,\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),(_vm.msg_list.length == 0)?_c('div',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"下拉加载历史...\")]):_vm._e(),_c('van-pull-refresh',{on:{\"refresh\":_vm.onRefresh},model:{value:(_vm.isLoading),callback:function ($$v) {_vm.isLoading=$$v},expression:\"isLoading\"}},[_c('div',{staticStyle:{\"display\":\"none\"}},[_c('audio',{ref:\"audioPlayer\",attrs:{\"controls\":\"controls\",\"src\":_vm.new_audio,\"autoplay\":\"\"},on:{\"play\":_vm.onPlay,\"ended\":function($event){return _vm.myFunction()}}})]),_c('div',{ref:\"scrollContainer\",staticClass:\"chat-box\",attrs:{\"id\":\"chat-box\"}},[_c('div',{staticClass:\"chat-item-answer\",domProps:{\"innerHTML\":_vm._s(_vm.chat_item_answer)}}),_vm._l((_vm.msg_list),function(item,index){return _c('div',{key:index,staticClass:\"chat-item\"},[(item.type == 0 && item.question != '')?_c('div',{staticClass:\"question-box\"},[_vm._v(_vm._s(item.question))]):_vm._e(),(item.type == 1 && item.lang_time > 0)?_c('div',{staticClass:\"question-box\",on:{\"click\":function($event){return _vm.playSound(item.filepath)}}},[_c('img',{staticClass:\"start-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/audio-msg.png\",\"mode\":\"widthFix\"}}),_c('span',{staticStyle:{\"font-size\":\"12px\",\"padding-left\":\"10px\"}},[_vm._v(_vm._s(item.lang_time)+\"s\")])]):_vm._e(),(item.answer != '')?_c('div',{staticClass:\"answer-box-text\",attrs:{\"id\":'chat' + (index + 1)}},[_c('div',{staticStyle:{\"margin-bottom\":\"10px\"},domProps:{\"innerHTML\":_vm._s(_vm.simpleParse(item.answer))}}),(_vm.total_count != index + 1)?_c('div',{staticClass:\"answer-box\",attrs:{\"id\":\"myElement\"}},[_c('div',{staticClass:\"restart-create\",on:{\"click\":function($event){return _vm.to_restart_chat(item)}}},[_vm._v(\"重新生成\")]),_c('img',{staticClass:\"copy-text\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/copy.png\",\"mode\":\"widthFix\"},on:{\"click\":function($event){return _vm.copyText(item.answer)}}}),(item.iscn == false)?_c('img',{staticClass:\"copy-text\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy.png\",\"mode\":\"widthFix\"},on:{\"click\":function($event){return _vm.enCnText(item.answer, index)}}}):_c('img',{staticClass:\"copy-text\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy1.png\",\"mode\":\"widthFix\"}}),(_vm.to_aplay == true && _vm.new_index == index)?_c('img',{staticClass:\"read-audio\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/xx.gif\",\"mode\":\"widthFix\"},on:{\"click\":function($event){return _vm.stop()}}}):_c('img',{staticClass:\"read-audio\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/read_audio.png\",\"mode\":\"widthFix\"},on:{\"click\":function($event){return _vm.readText2(item.answer, index)}}})]):_c('div',{staticClass:\"answer-box\",staticStyle:{\"height\":\"360rpx\"},attrs:{\"id\":\"myElement\"}},[_c('div',{staticClass:\"restart-create\",on:{\"click\":function($event){return _vm.to_restart_chat(item)}}},[_vm._v(\"重新生成\")]),_c('img',{staticClass:\"copy-text\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/copy.png\",\"mode\":\"widthFix\"},on:{\"click\":function($event){return _vm.copyText(item.answer)}}}),(item.iscn == false)?_c('img',{staticClass:\"copy-text\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy.png\",\"mode\":\"widthFix\"},on:{\"click\":function($event){return _vm.enCnText(item.answer, index)}}}):_c('img',{staticClass:\"copy-text\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy1.png\",\"mode\":\"widthFix\"}}),(_vm.to_aplay == true && _vm.new_index == index)?_c('img',{staticClass:\"read-audio\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/xx.gif\",\"mode\":\"widthFix\"},on:{\"click\":function($event){return _vm.stop()}}}):_c('img',{staticClass:\"read-audio\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/read_audio.png\",\"mode\":\"widthFix\"},on:{\"click\":function($event){return _vm.readText2(item.answer, index)}}}),_vm._l((_vm.global),function(item1,index1){return _c('div',{key:index1,staticClass:\"ai-ques-item\",on:{\"click\":function($event){return _vm.to_new_chat(item1)}}},[_vm._v(\" \"+_vm._s(item1.lable)+\" \")])})],2)]):_vm._e()])}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.is_get == 0),expression:\"is_get == 0\"}],staticClass:\"chat-item\"},[_c('div',{staticClass:\"answer-box-text-new\"},[_c('div',{staticClass:\"ai-ques-item1\"},[_c('img',{attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/output-9_59_13.gif\",\"width\":\"100%\",\"alt\":\"\"}})])])]),_c('div',{staticClass:\"chat-item\"},[_c('div',{staticClass:\"answer-box-text-new\"},[_c('div',{staticClass:\"ai-ques-item1\"})])]),_c('div',{staticClass:\"chat-item\"},[_c('div',{staticClass:\"answer-box-text-new\"},[_c('div',{staticClass:\"ai-ques-item1\"})])]),_c('div',{staticStyle:{\"width\":\"100vw\",\"height\":\"100px\"}})],2)]),_c('ChatComposer',{attrs:{\"fixed\":\"\",\"disabled\":_vm.is_get === 0},on:{\"send\":_vm.sendInput,\"recording\":_vm.onRecording},model:{value:(_vm.stu_content),callback:function ($$v) {_vm.stu_content=$$v},expression:\"stu_content\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./chatFile.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./chatFile.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./chatFile.vue?vue&type=template&id=4ed1bebd&scoped=true\"\nimport script from \"./chatFile.vue?vue&type=script&lang=js\"\nexport * from \"./chatFile.vue?vue&type=script&lang=js\"\nimport style0 from \"./chatFile.vue?vue&type=style&index=0&id=4ed1bebd&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"4ed1bebd\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('van-nav-bar',{attrs:{\"title\":_vm.title,\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),(_vm.msg_list.length == 0)?_c('div',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"下拉加载历史...\")]):_vm._e(),_c('van-pull-refresh',{on:{\"refresh\":_vm.onRefresh},model:{value:(_vm.isLoading),callback:function ($$v) {_vm.isLoading=$$v},expression:\"isLoading\"}},[_c('div',{staticStyle:{\"display\":\"none\"}},[_c('audio',{ref:\"audioPlayer\",attrs:{\"controls\":\"controls\",\"src\":_vm.new_audio,\"autoplay\":\"\"},on:{\"play\":_vm.onPlay,\"ended\":function($event){return _vm.myFunction()}}})]),_c('div',{ref:\"scrollContainer\",staticClass:\"chat-box\",attrs:{\"id\":\"chat-box\"}},[_vm._l((_vm.msg_list),function(item,index){return _c('div',{key:index,staticClass:\"chat-item\"},[(item.type == 0 && item.question != '')?_c('div',{staticClass:\"question-box\"},[_vm._v(_vm._s(item.question))]):_vm._e(),(item.type == 1 && item.lang_time > 0)?_c('div',{staticClass:\"question-box\",on:{\"click\":function($event){return _vm.playSound(item.filepath)}}},[_c('img',{staticClass:\"start-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/audio-msg.png\",\"mode\":\"widthFix\"}}),_c('span',{staticStyle:{\"font-size\":\"12px\",\"padding-left\":\"10px\"}},[_vm._v(_vm._s(item.lang_time)+\"s\")])]):_vm._e(),(item.answer != '')?_c('div',{staticClass:\"answer-box-text\",attrs:{\"id\":'chat' + (index + 1)}},[_c('div',{staticStyle:{\"margin-bottom\":\"10px\"}},[_vm._v(_vm._s(item.answer))]),(_vm.total_count != index + 1)?_c('div',{staticClass:\"answer-box\"},[_c('div',{staticClass:\"restart-create\",on:{\"click\":function($event){return _vm.to_restart_chat(item)}}},[_vm._v(\"重新生成\")]),_c('img',{staticClass:\"copy-text\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/copy.png\",\"mode\":\"widthFix\"},on:{\"click\":function($event){return _vm.copyText(item.answer)}}}),(item.iscn == false)?_c('img',{staticClass:\"copy-text\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy.png\",\"mode\":\"widthFix\"},on:{\"click\":function($event){return _vm.enCnText(item.answer, index)}}}):_vm._e()]):_c('div',{staticClass:\"answer-box\",staticStyle:{\"height\":\"360rpx\"},attrs:{\"id\":\"myElement\"}},[_c('div',{staticClass:\"restart-create\",on:{\"click\":function($event){return _vm.to_restart_chat(item)}}},[_vm._v(\"重新生成\")]),_c('img',{staticClass:\"copy-text\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/copy.png\",\"mode\":\"widthFix\"},on:{\"click\":function($event){return _vm.copyText(item.answer)}}}),(item.iscn == false)?_c('img',{staticClass:\"copy-text\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy.png\",\"mode\":\"widthFix\"},on:{\"click\":function($event){return _vm.enCnText(item.answer, index)}}}):_vm._e(),_vm._l((_vm.global),function(item1,index1){return _c('div',{key:index1,staticClass:\"ai-ques-item\",on:{\"click\":function($event){return _vm.to_new_chat(item1)}}},[_vm._v(\" \"+_vm._s(item1.lable)+\" \")])})],2)]):_vm._e()])}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.is_get == 0),expression:\"is_get == 0\"}],staticClass:\"chat-item\"},[_c('div',{staticClass:\"answer-box-text-new\"},[_c('div',{staticClass:\"ai-ques-item1\"},[_c('img',{attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/output-9_59_13.gif\",\"width\":\"100%\",\"alt\":\"\"}})])])]),_c('div',{staticClass:\"chat-item\"},[_c('div',{staticClass:\"answer-box-text-new\"},[_c('div',{staticClass:\"ai-ques-item1\"})])]),_c('div',{staticClass:\"chat-item\"},[_c('div',{staticClass:\"answer-box-text-new\"},[_c('div',{staticClass:\"ai-ques-item1\"})])]),_c('div',{staticStyle:{\"width\":\"100vw\",\"height\":\"100px\"}})],2)]),_c('ChatComposer',{attrs:{\"fixed\":\"\",\"disabled\":_vm.is_get === 0},on:{\"send\":_vm.sendInput,\"recording\":_vm.onRecording},model:{value:(_vm.stu_content),callback:function ($$v) {_vm.stu_content=$$v},expression:\"stu_content\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n    <div>\n        <van-nav-bar :title=\"title\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\n        <div v-if=\"msg_list.length == 0\" style=\"text-align: center\">下拉加载历史...</div>\n        <van-pull-refresh v-model=\"isLoading\" @refresh=\"onRefresh\">\n            <div style=\"display: none\">\n                <audio\n                    controls=\"controls\"\n                    :src=\"new_audio\"\n                    ref=\"audioPlayer\"\n                    autoplay\n                    @play=\"onPlay\"\n                    @ended=\"myFunction()\"\n                ></audio>\n            </div>\n            <div class=\"chat-box\" id=\"chat-box\" ref=\"scrollContainer\">\n                <div class=\"chat-item\" v-for=\"(item, index) in msg_list\" :key=\"index\">\n                    <div class=\"question-box\" v-if=\"item.type == 0 && item.question != ''\">{{ item.question }}</div>\n                    <!-- <div class=\"question-box-empty\" v-if=\"item.type == 0 && item.question == ''\"></div> -->\n                    <div\n                        class=\"question-box\"\n                        v-if=\"item.type == 1 && item.lang_time > 0\"\n                        @click=\"playSound(item.filepath)\"\n                    >\n                        <img\n                            src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/audio-msg.png\"\n                            mode=\"widthFix\"\n                            class=\"start-img\"\n                        />\n                        <span style=\"font-size: 12px; padding-left: 10px\">{{ item.lang_time }}s</span>\n                    </div>\n\n                    <div class=\"answer-box-text\" :id=\"'chat' + (index + 1)\" v-if=\"item.answer != ''\">\n                        <div style=\"margin-bottom: 10px\">{{ item.answer }}</div>\n                        <div class=\"answer-box\" v-if=\"total_count != index + 1\">\n                            <div class=\"restart-create\" @click=\"to_restart_chat(item)\">重新生成</div>\n                            <img\n                                @click=\"copyText(item.answer)\"\n                                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/copy.png\"\n                                mode=\"widthFix\"\n                                class=\"copy-text\"\n                            />\n                            <img\n                                @click=\"enCnText(item.answer, index)\"\n                                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy.png\"\n                                mode=\"widthFix\"\n                                class=\"copy-text\"\n                                v-if=\"item.iscn == false\"\n                            />\n                        </div>\n\n                        <div class=\"answer-box\" id=\"myElement\" style=\"height: 360rpx\" v-else>\n                            <div class=\"restart-create\" @click=\"to_restart_chat(item)\">重新生成</div>\n                            <img\n                                @click=\"copyText(item.answer)\"\n                                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/copy.png\"\n                                mode=\"widthFix\"\n                                class=\"copy-text\"\n                            />\n                            <img\n                                @click=\"enCnText(item.answer, index)\"\n                                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy.png\"\n                                mode=\"widthFix\"\n                                class=\"copy-text\"\n                                v-if=\"item.iscn == false\"\n                            />\n                            <div\n                                class=\"ai-ques-item\"\n                                v-for=\"(item1, index1) in global\"\n                                :key=\"index1\"\n                                @click=\"to_new_chat(item1)\"\n                            >\n                                {{ item1.lable }}\n                            </div>\n                        </div>\n                    </div>\n                </div>\n                <div class=\"chat-item\" v-show=\"is_get == 0\">\n                    <div class=\"answer-box-text-new\">\n                        <div class=\"ai-ques-item1\">\n                            <img\n                                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/output-9_59_13.gif\"\n                                width=\"100%\"\n                                alt=\"\"\n                            />\n                        </div>\n                    </div>\n                </div>\n                <div class=\"chat-item\">\n                    <div class=\"answer-box-text-new\">\n                        <div class=\"ai-ques-item1\"></div>\n                    </div>\n                </div>\n                <div class=\"chat-item\">\n                    <div class=\"answer-box-text-new\">\n                        <div class=\"ai-ques-item1\"></div>\n                    </div>\n                </div>\n                <div style=\"width: 100vw; height: 100px\"></div>\n            </div>\n        </van-pull-refresh>\n        <ChatComposer v-model=\"stu_content\" fixed :disabled=\"is_get === 0\" @send=\"sendInput\" @recording=\"onRecording\" />\n    </div>\n</template>\n\n<script>\nimport ChatComposer from '@/components/ChatComposer.vue'\n\nimport { dialogue, en2cnDb, longtext2voice, longtextSearch, saveEtalkStudy, updateEtalkStudy } from '@/api/home'\nimport { getAIHistory } from '@/api/user'\nimport { Toast } from 'ddesign'\n\nexport default {\n    name: 'Ai',\n    components: { ChatComposer },\n    data() {\n        return {\n            intervalId: null, // 保存定时器ID\n\n            title: '聊天',\n            new_audio: '',\n            content: '',\n            system: '',\n            to_aplay: false,\n            new_index: 0,\n            is_show_ai: false,\n\n            stu_content: '',\n\n            canuse: 0,\n\n            msg_list: [],\n            type: 0,\n            stype: 'speak_free',\n            lang_time: 0,\n            is_history: 0,\n            filePath: '',\n            total_count: 0,\n            from: 'speak',\n            currentSoundIndex: null,\n            pageSize: 1,\n            pageLimit: 10,\n            project_id: 0,\n            is_get: 1,\n\n            global: [\n                {\n                    lable: '主题对话，GAI式陪练',\n                    input: '',\n                    talk_type: 2,\n                },\n                {\n                    lable: '写作练习，AI写作辅导',\n                    input: '',\n                    talk_type: 1,\n                },\n            ],\n\n            isLoading: false,\n        }\n    },\n    watch: {\n        '$route.path': function (newPath) {\n            this.active = newPath // 路由变化时更新激活的路由\n        },\n    },\n    methods: {\n        async sendInput({ text, filepath, duration, type }) {\n            if (this.is_get === 0) return\n            this.content = text\n            this.filePath = filepath\n            this.lang_time = duration\n            this.type = type\n            this.stu_content = ''\n            this.is_get = 0\n            await this.saveEtalkStudy()\n            try {\n                await this.chat()\n            } finally {\n                this.is_get = 1\n                this.canuse = 1\n            }\n        },\n        onRecording() {\n            this.stop()\n            // Study timing is started when the message is sent.\n        },\n        async onPlay() {\n            this.to_aplay = true\n        },\n        async showToast() {\n            Toast.info('这是一个Toast消息')\n        },\n        async myFunction() {\n            this.to_aplay = false\n            Toast.info('这是一个Toast消息')\n        },\n        async stop() {\n            this.to_aplay = false\n            this.$refs.audioPlayer.pause()\n            this.new_audio = ''\n            // 确保更新视图\n            this.$forceUpdate()\n        },\n        async onRefresh() {\n            setTimeout(() => {\n                this.$message({\n                    message: '刷新成功',\n                    center: true,\n                })\n                this.isLoading = false\n                this.pageSize++\n                this.get_history()\n            }, 1000)\n        },\n        async to_restart_chat(item) {\n            console.log(item)\n            this.content = item.question ///语音文本内容\n            this.filepath = item.filePath //语音文件地址\n            this.type = item.type //消息类型\n            this.lang_time = item.lang_time\n            this.chat()\n        },\n        async to_new_chat(item) {\n            this.content = item.input //语音文本内容\n            if (item.talk_type == 1) {\n                this.stop()\n                this.stu_content = ''\n                this.type = 0\n                this.lang_time = 0\n                this.filePath = ''\n                this.msg_list = []\n                this.$router.push({\n                    name: 'NormalChat',\n                    query: {\n                        project_id: 0,\n                        is_history: 0,\n                        lang_time: this.lang_time,\n                        filePath: this.filePath,\n                        type: this.type,\n                        stype: 'write_guide',\n                        from: 'write',\n                        chat_title: 'E-Write',\n                        content: this.stu_content,\n                        res_id: this.res_id,\n                    },\n                })\n\n                this.title = 'E-Write'\n                this.from = 'write'\n                this.stype = 'write_guide'\n                this.msg_list = []\n                this.global = [\n                    {\n                        lable: '如何完善英语写作表达逻辑',\n                        input: 'Brief answer (within 60 words):How to improve expression in English writing?',\n                        talk_type: 0,\n                    },\n                    {\n                        lable: '生成一个优秀英语写作主题',\n                        input: 'Recommend one writing topic with brief writing guidance (within 60 words).',\n                        talk_type: 0,\n                    },\n                ]\n\n                this.chat()\n                // 确保更新视图\n                this.$forceUpdate()\n            } else if (item.talk_type == 2) {\n                this.$router.push({ name: 'Project' })\n            } else {\n                console.log(this.content)\n                this.filePath = ''\n                this.type = 0\n                this.lang_time = 0\n\n                this.chat()\n                // 确保更新视图\n                this.$forceUpdate()\n            }\n        },\n        async copyText(item) {\n            try {\n                await navigator.clipboard.writeText(item)\n                alert('文本已复制到剪贴板')\n            } catch (err) {\n                console.error('复制到剪贴板失败', err)\n            }\n        },\n        async enCnText(item, index) {\n            try {\n                const response = await en2cnDb({ userinput: item })\n                const data = response.data\n                var msg_list = this.msg_list\n                if (response.code == 100) {\n                    msg_list.forEach((val, key) => {\n                        if (key === index) {\n                            val.answer += '\\n' + data.content\n                            val.iscn = true\n                        }\n                    })\n                }\n                this.msg_list = msg_list\n            } catch (error) {\n                console.error('Login Failed:', error)\n            }\n        },\n        async readText(item, index) {\n            this.$refs.audioPlayer.pause()\n            await this.get_audio(item, index)\n        },\n        async readText2(item, index) {\n            this.$refs.audioPlayer.pause()\n            this.get_audio_read(item, index)\n        },\n        async playSound(url) {\n            // 停止当前播放的语音\n            if (this.currentSoundIndex !== null && this.currentSoundIndex !== url) {\n                this.stopSound(url)\n            }\n            // 播放新的语音\n            const sound = url\n            const audio = new Audio(sound)\n            audio.play()\n            // 更新当前播放\n            console.log(url)\n            this.currentSoundIndex = url\n        },\n        async stopSound(sound) {\n            // 停止语音播放的逻辑\n            const audio = new Audio(sound)\n            audio.pause()\n        },\n        async onClickLeft() {\n            history.back()\n        },\n\n        async chat() {\n            if (!this.content) {\n                this.is_get = 1\n                return\n            }\n            this.is_get = 0\n            this.stop()\n            const user = JSON.parse(localStorage.getItem('user') || '{}')\n            if (!user.sid) {\n                this.is_get = 1\n                return\n            }\n            const message = {\n                answer: '',\n                question: this.content,\n                type: this.type,\n                lang_time: this.lang_time,\n                filepath: this.filePath || '',\n                iscn: false,\n            }\n            this.msg_list.push(message)\n            try {\n                const response = await dialogue({\n                    userinput: this.content + ',Please give responses in English',\n                    filepath: this.filePath,\n                    type: this.type,\n                    lang_time: this.lang_time,\n                    etalk_cate_id: this.project_id,\n                    stype: this.stype,\n                    from: this.from,\n                    sid: user.sid,\n                    res_id: this.res_id,\n                    preuserinput: JSON.stringify(this.msg_list.slice(-3)),\n                })\n                message.answer = response.data.content || ''\n                this.total_count = this.msg_list.length\n            } catch (error) {\n                this.$message({ message: '回复失败，请重新发送', center: true })\n            } finally {\n                this.content = ''\n                this.stu_content = ''\n                this.is_get = 1\n                this.canuse = 1\n                this.$nextTick(() => {\n                    const container = this.$refs.scrollContainer\n                    if (container) container.scrollTop = container.scrollHeight\n                })\n            }\n        },\n        async scrollToElement() {\n            document.getElementById('myElement').scrollIntoView()\n        },\n        async to_free_talk() {},\n        async to_ai_write() {},\n        async to_script_talk() {},\n\n        change_show_ai() {\n            this.is_show_ai = !this.is_show_ai\n        },\n\n        async get_history() {\n            try {\n                const user = JSON.parse(localStorage.getItem('user'))\n                if (user && user.sid) {\n                    const response = await getAIHistory({\n                        sid: user.sid,\n                        from: this.from,\n                        page: this.pageSize,\n                        size: this.pageLimit,\n                    })\n                    const data = response.data\n                    var msg_list = this.msg_list\n                    var history_list = data.list.reverse()\n                    var new_msg = history_list.concat(msg_list)\n                    this.msg_list = new_msg\n                    console.log(this.msg_list)\n                    this.totalScroll = 0\n                    this.total_count = new_msg.length\n                } else {\n                    console.error('用户未登录或没有找到sid')\n                }\n            } catch (error) {\n                console.error('Login Failed:', error)\n            }\n        },\n        /**\n         * desc: base64对象转blob文件对象\n         * @param base64  ：数据的base64对象\n         * @param fileType  ：文件类型 mp3等;\n         * @returns {Blob}：Blob文件对象\n         */\n\n        async get_audio(str, index) {\n            const new_answer = str\n            this.new_index = index - 1\n            var msg_index = this.msg_list.length - 1\n            this.msg_list[msg_index].answer = new_answer\n            console.log(this.msg_list[msg_index])\n            console.log(index)\n\n            this.canuse = 1\n            this.is_get = 1\n            this.total_count = this.msg_list.length\n            this.scrollToElement()\n            // 确保更新视图\n            this.$forceUpdate()\n        },\n        async get_audio_read(str, index) {\n            const regex = /[0-9!@#&$%^*()_+={}[\\]:;\"'<>,.?/~`-]/g\n            var new_str = str.replace(regex, '')\n            const response = await longtext2voice({ userinput: new_str })\n\n            console.log(response.data.data.taskId)\n            // 轮询调用，直到 status 为 2\n            let taskId = response.data.data.taskId\n            let response1\n            let status = 0\n            while (status !== 2) {\n                response1 = await longtextSearch({ task_id: taskId })\n                status = response1.data.data.status\n\n                if (status !== 2) {\n                    // 如果 status 还没有变为 2，可以选择添加一个延迟，避免过于频繁的请求\n                    await new Promise((resolve) => setTimeout(resolve, 1000)) // 延迟1秒\n                }\n            }\n            this.new_index = index\n            this.to_aplay = true\n            console.log(index)\n            this.new_audio = response1.data.data.resultUrl\n            this.canuse = 1\n            this.total_count = this.msg_list.length\n            console.log(this.msg_list)\n            this.scrollToElement()\n            // 确保更新视图\n            this.$forceUpdate()\n        },\n        async saveEtalkStudy() {\n            try {\n                const user = JSON.parse(localStorage.getItem('user'))\n                if (user && user.sid) {\n                    const response = await saveEtalkStudy({ sid: user.sid })\n                    const data = response.data\n                    this.etalk_time_id = data\n                } else {\n                    console.error('用户未登录或没有找到sid')\n                }\n            } catch (error) {\n                console.error('Login Failed:', error)\n            }\n        },\n        async updateEtalkStudy() {\n            try {\n                await updateEtalkStudy({ id: this.etalk_time_id })\n            } catch (error) {\n                console.error('Login Failed:', error)\n            }\n        },\n        startPolling() {\n            this.intervalId = setInterval(() => {\n                this.updateEtalkStudy()\n            }, 1000 * 60 * 5) // 每5分钟（300000毫秒）执行一次\n        },\n    },\n    mounted() {\n        // this.$message({\n        //     message: '系统繁忙，暂停使用！',\n        //     center: true\n        // });\n        // history.back()\n        // return\n        // 在组件挂载后立即获取任务数据\n        const user = JSON.parse(localStorage.getItem('user'))\n        if (user && user.sid) {\n            if (user.type_id == 3) {\n                this.$router.push({ name: 'noAuth' })\n                return\n            }\n        } else {\n            console.error('用户未登录或没有找到sid')\n        }\n        // this.startPolling();  // 在组件挂载时启动定时器\n        // this.saveEtalkStudy()\n        this.system = this.$route.query.system\n        this.stu_content = this.$route.query.content || ''\n        this.content = this.$route.query.content || ''\n        this.title = this.$route.query.chat_title\n        this.from = this.$route.query.from\n        this.stype = this.$route.query.stype\n        this.type = this.$route.query.type\n        this.filePath = this.$route.query.filePath\n        this.lang_time = this.$route.query.lang_time\n        this.res_id = this.$route.query.res_id\n        this.is_history = this.$route.query.is_history\n        this.project_id = this.$route.query.project_id\n        if (this.stype == 'speak_free') {\n            this.global = [\n                {\n                    lable: '主题对话，GAI式陪练',\n                    input: '',\n                    talk_type: 2,\n                },\n                {\n                    lable: '写作练习，AI写作辅导',\n                    input: '',\n                    talk_type: 1,\n                },\n            ]\n        }\n        if (this.stype == 'write') {\n            this.global = [\n                {\n                    lable: '如何完善英语写作表达逻辑',\n                    input: 'Brief answer (within 60 words):How to improve expression in English writing?',\n                    talk_type: 0,\n                },\n                {\n                    lable: '生成一个优秀英语写作主题',\n                    input: 'Recommend one writing topic with brief writing guidance (within 60 words).',\n                    talk_type: 0,\n                },\n            ]\n        }\n        if (this.stype == 'listen_guide' || this.stype == 'read_guide') {\n            this.global = [\n                {\n                    lable: 'Summarize the gist and main idea.',\n                    input: 'Summarize the gist and main idea.',\n                    talk_type: 0,\n                    content: '',\n                },\n                {\n                    lable: 'Analyze and present the structure.',\n                    input: 'Analyze and present the structure.',\n                    talk_type: 0,\n                    content: '',\n                },\n                {\n                    lable: 'Explain sentences that contain over three clauses.',\n                    input: 'Explain sentences that contain over three clauses.',\n                    talk_type: 0,\n                    content: '',\n                },\n            ]\n        }\n        if (this.stype == 'write_guide' || this.stype == 'write_subject') {\n            this.global = [\n                {\n                    lable: 'Help me improve the language expression.',\n                    input: 'Help me improve the language expression.',\n                    talk_type: 0,\n                    content: '',\n                },\n                {\n                    lable: 'Help me enrich and improve the content.',\n                    input: 'Help me enrich and improve the content.',\n                    talk_type: 0,\n                    content: '',\n                },\n                {\n                    lable: 'Help me improve the article structure.',\n                    input: 'Help me improve the article structure.',\n                    talk_type: 0,\n                    content: '',\n                },\n            ]\n        }\n        if (this.stype == 'speak_subject') {\n            this.global = [\n                {\n                    lable: '重新生成一个口语练习主题',\n                    input: 'Generate a new oral practice topic and provide a brief description of it (within 60 words).',\n                    talk_type: 0,\n                    content: '',\n                },\n                {\n                    lable: '尝试进行AI写作练习',\n                    input: 'Assist me with english writing',\n                    talk_type: 1,\n                    content: '',\n                },\n            ]\n        }\n        if (this.is_history == 1) {\n            this.get_history()\n        } else {\n            this.chat()\n        }\n    },\n    beforeDestroy() {\n        this.stop()\n        clearInterval(this.intervalId)\n    },\n}\n</script>\n\n<style scoped>\n.chat-box {\n    width: 100vw;\n    height: 70vh;\n    overflow-y: auto;\n    /* 使内容可滚动 */\n    padding-bottom: 120px;\n}\n\n.question-box {\n    height: auto;\n    max-width: 280px;\n    min-width: 100px;\n    min-height: 30px;\n    background: linear-gradient(118deg, #4499ee 0%, #9ce4ff 100%);\n    border-radius: 20px 0px 20px 20px;\n    font-size: 14px;\n    color: #fff;\n    padding: 5px 10px;\n    line-height: 30px;\n    text-align: left;\n    float: right;\n    margin: 20px;\n}\n\n.question-box-empty {\n    max-width: 280px;\n    min-width: 100px;\n    height: 5px;\n    border-radius: 20px 0px 20px 20px;\n    font-size: 14px;\n    color: #fff;\n    padding: 5px 10px;\n    line-height: 30px;\n    text-align: center;\n    float: right;\n    margin: 10px;\n}\n\n.answer-box-text {\n    height: auto;\n    width: 300px;\n    min-height: 30px;\n    font-size: 14px;\n    padding: 5px 10px 20px 10px;\n    line-height: 1.5;\n    text-align: left;\n    float: left;\n    background-color: #f6f6f6;\n    margin-left: 20px;\n    border-radius: 10px;\n}\n\n.answer-box-text-new {\n    height: auto;\n    width: 300px;\n    min-height: 30px;\n    font-size: 14px;\n    padding: 5px 10px 20px 10px;\n    line-height: 1.5;\n    text-align: left;\n    float: left;\n    /* background-color: #F6F6F6; */\n    margin-left: 20px;\n    border-radius: 10px;\n}\n\n.chat-item {\n    width: 100%;\n    height: 80px;\n}\n\n.chat-item:last-child > .answer-box-text {\n    padding-bottom: 200px;\n}\n\n.answer-box {\n    padding-top: 10px;\n    border-top: 1px solid #e4e3e3;\n    width: 300px;\n    height: 100rpx;\n    line-height: 50px;\n}\n\n.restart-create {\n    width: 20%;\n    font-size: 12px;\n    height: 40px;\n    vertical-align: top;\n    display: inline-block;\n    margin-right: 45%;\n    line-height: 40px;\n}\n\n.copy-text {\n    width: 14px;\n    height: 15px;\n    padding-top: 10px;\n    vertical-align: top;\n    display: inline-block;\n    padding-right: 13px;\n}\n\n.read-audio {\n    width: 18px;\n    height: 15px;\n    padding-top: 10px;\n    vertical-align: top;\n    display: inline-block;\n}\n\n.ai-ques-item {\n    width: auto;\n    height: 30px;\n    border-radius: 15px;\n    border: 1px solid rgb(221, 219, 219);\n    line-height: 30px;\n    text-align: left;\n    padding: 0 10px;\n    font-size: 12px;\n    margin-bottom: 10px;\n}\n\n.ai-ques-item1 {\n    width: 30px;\n    height: 30px;\n    position: relative;\n    left: 20px;\n    top: 10px;\n}\n\n.start-img {\n    width: 20px;\n    height: 20px;\n    vertical-align: top;\n    display: inline-block;\n    padding-top: 5px;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NormalChat.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NormalChat.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./NormalChat.vue?vue&type=template&id=402f1544&scoped=true\"\nimport script from \"./NormalChat.vue?vue&type=script&lang=js\"\nexport * from \"./NormalChat.vue?vue&type=script&lang=js\"\nimport style0 from \"./NormalChat.vue?vue&type=style&index=0&id=402f1544&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"402f1544\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('van-nav-bar',{attrs:{\"title\":_vm.title,\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),(_vm.msg_list.length == 0)?_c('div',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"下拉加载历史...\")]):_vm._e(),_c('van-pull-refresh',{on:{\"refresh\":_vm.onRefresh},model:{value:(_vm.isLoading),callback:function ($$v) {_vm.isLoading=$$v},expression:\"isLoading\"}},[_c('div',{staticStyle:{\"display\":\"none\"}},[_c('audio',{ref:\"audioPlayer\",attrs:{\"controls\":\"controls\",\"src\":_vm.new_audio,\"autoplay\":\"\"},on:{\"play\":_vm.onPlay,\"ended\":function($event){return _vm.myFunction()}}})]),_c('div',{ref:\"scrollContainer\",staticClass:\"chat-box\",attrs:{\"id\":\"chat-box\"}},[_vm._l((_vm.msg_list),function(item,index){return _c('div',{key:index,staticClass:\"chat-item\"},[(item.type == 0 && item.question != '')?_c('div',{staticClass:\"question-box\"},[_vm._v(_vm._s(item.question))]):_vm._e(),(item.type == 1 && item.lang_time > 0)?_c('div',{staticClass:\"question-box\",on:{\"click\":function($event){return _vm.playSound(item.filepath)}}},[_c('img',{staticClass:\"start-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/audio-msg.png\",\"mode\":\"widthFix\"}}),_c('span',{staticStyle:{\"font-size\":\"12px\",\"padding-left\":\"10px\"}},[_vm._v(_vm._s(item.lang_time)+\"s\")])]):_vm._e(),(item.answer != '')?_c('div',{staticClass:\"answer-box-text\",attrs:{\"id\":'chat' + (index + 1)}},[_c('div',{staticStyle:{\"margin-bottom\":\"10px\"},domProps:{\"innerHTML\":_vm._s(_vm.simpleParse(item.answer))}}),(_vm.total_count != index + 1)?_c('div',{staticClass:\"answer-box\",attrs:{\"id\":\"myElement\"}},[_c('div',{staticClass:\"restart-create\",on:{\"click\":function($event){return _vm.to_restart_chat(item)}}},[_vm._v(\"重新生成\")]),_c('img',{staticClass:\"copy-text\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/copy.png\",\"mode\":\"widthFix\"},on:{\"click\":function($event){return _vm.copyText(item.answer)}}}),(item.iscn == false)?_c('img',{staticClass:\"copy-text\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy.png\",\"mode\":\"widthFix\"},on:{\"click\":function($event){return _vm.enCnText(item.answer, index)}}}):_c('img',{staticClass:\"copy-text\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy1.png\",\"mode\":\"widthFix\"}})]):_c('div',{staticClass:\"answer-box\",staticStyle:{\"height\":\"360rpx\"},attrs:{\"id\":\"myElement\"}},[_c('div',{staticClass:\"restart-create\",on:{\"click\":function($event){return _vm.to_restart_chat(item)}}},[_vm._v(\"重新生成\")]),_c('img',{staticClass:\"copy-text\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/copy.png\",\"mode\":\"widthFix\"},on:{\"click\":function($event){return _vm.copyText(item.answer)}}}),(item.iscn == false)?_c('img',{staticClass:\"copy-text\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy.png\",\"mode\":\"widthFix\"},on:{\"click\":function($event){return _vm.enCnText(item.answer, index)}}}):_c('img',{staticClass:\"copy-text\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy1.png\",\"mode\":\"widthFix\"}}),_vm._l((_vm.global),function(item1,index1){return _c('div',{key:index1,staticClass:\"ai-ques-item\",on:{\"click\":function($event){return _vm.to_new_chat(item1)}}},[_vm._v(\" \"+_vm._s(item1.lable)+\" \")])})],2)]):_vm._e()])}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.is_get == 0),expression:\"is_get == 0\"}],staticClass:\"chat-item\"},[_c('div',{staticClass:\"answer-box-text-new\"},[_c('div',{staticClass:\"ai-ques-item1\"},[_c('img',{attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/output-9_59_13.gif\",\"width\":\"100%\",\"alt\":\"\"}})])])]),_c('div',{staticClass:\"chat-item\"},[_c('div',{staticClass:\"answer-box-text-new\"},[_c('div',{staticClass:\"ai-ques-item1\"})])]),_c('div',{staticClass:\"chat-item\"},[_c('div',{staticClass:\"answer-box-text-new\"},[_c('div',{staticClass:\"ai-ques-item1\"})])]),_c('div',{staticStyle:{\"width\":\"100vw\",\"height\":\"100px\"}})],2)]),_c('ChatComposer',{attrs:{\"fixed\":\"\",\"disabled\":_vm.is_get === 0},on:{\"send\":_vm.sendInput,\"recording\":_vm.onRecording},model:{value:(_vm.stu_content),callback:function ($$v) {_vm.stu_content=$$v},expression:\"stu_content\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NewChat.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NewChat.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./NewChat.vue?vue&type=template&id=33d23c4f&scoped=true\"\nimport script from \"./NewChat.vue?vue&type=script&lang=js\"\nexport * from \"./NewChat.vue?vue&type=script&lang=js\"\nimport style0 from \"./NewChat.vue?vue&type=style&index=0&id=33d23c4f&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"33d23c4f\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"NoticeList\"},[_c('van-nav-bar',{attrs:{\"title\":\"通知列表\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticClass:\"exam-notice\",on:{\"click\":_vm.to_exam_notice}},[_c('div',{staticClass:\"exam-title\"},[_vm._v(\"考试通知\")]),_c('div',{staticClass:\"all-right\"},[_c('van-icon',{attrs:{\"name\":\"arrow\",\"color\":\"#606060\"}})],1)]),_vm._l((_vm.notice_list),function(item,index){return _c('div',{key:index,staticClass:\"other-notice\",on:{\"click\":function($event){return _vm.to_detail(item)}}},[_c('div',{staticClass:\"notice-time\"},[_vm._v(_vm._s(item.create_time))]),_c('div',{staticClass:\"notice-box\"},[_c('div',{staticClass:\"notice-top\"},[_c('div',{staticClass:\"notice-title\"},[_vm._v(_vm._s(item.title))]),_c('div',{class:{ 'has-read': item.is_read == 1, 'no-read1': item.is_read == 0 }})]),_c('div',{staticClass:\"notice-desc\",domProps:{\"innerHTML\":_vm._s(item.content)}}),_c('div',{staticClass:\"line\"}),_c('div',{staticClass:\"bottom\"},[_c('div',{staticClass:\"detail-btn\"},[_vm._v(\"查看详情\")]),_c('div',{staticClass:\"all-right1\"},[_c('t-icon',{attrs:{\"name\":\"chevron-right\",\"size\":\"18\",\"color\":\"#BFBFBF\",\"data-name\":\"chevron-right\",\"bind:click\":\"onIconTap\"}})],1)])])])})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"NoticeList\">\r\n        <van-nav-bar title=\"通知列表\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <div class=\"exam-notice\" @click=\"to_exam_notice\">\r\n            <div class=\"exam-title\">考试通知</div>\r\n            <div class=\"all-right\">\r\n                <van-icon name=\"arrow\" color=\"#606060\" />\r\n            </div>\r\n        </div>\r\n\r\n        <div class=\"other-notice\" v-for=\"(item, index) in notice_list\" :key=\"index\" @click=\"to_detail(item)\">\r\n            <div class=\"notice-time\">{{ item.create_time }}</div>\r\n            <div class=\"notice-box\">\r\n                <div class=\"notice-top\">\r\n                    <div class=\"notice-title\">{{ item.title }}</div>\r\n                    <div :class=\"{ 'has-read': item.is_read == 1, 'no-read1': item.is_read == 0 }\"></div>\r\n                </div>\r\n              \r\n                <div  class=\"notice-desc\" v-html=\"item.content\"></div>\r\n                <div class=\"line\"></div>\r\n                <div class=\"bottom\">\r\n                    <div class=\"detail-btn\">查看详情</div>\r\n                    <div class=\"all-right1\">\r\n                        <t-icon name=\"chevron-right\" size=\"18\" color=\"#BFBFBF\" data-name=\"chevron-right\"\r\n                            bind:click=\"onIconTap\" />\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\nimport { NoticeList } from '@/api/home'\r\n\r\nexport default {\r\n    name: 'NoticeList',\r\n    data() {\r\n        return {\r\n            notice_list: []\r\n        }\r\n    },\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        to_detail(item) {\r\n            this.$router.push({ name: 'NoticeDetail', query: { notice_id: item.id } })\r\n        },\r\n        to_exam_notice() {\r\n            this.$router.push({ name: 'NoticeExamList' })\r\n        },\r\n        async NoticeList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await NoticeList({\r\n                        sid: user.sid,\r\n                        page: 1,\r\n                        size: 10,\r\n                        type: 'common',\r\n                    })\r\n                    this.notice_list = response.data.list\r\n                    console.log(this.notice_list)\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        }\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        this.NoticeList()\r\n    }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.NoticeList {\r\n    width: 100vw;\r\n    height: 100vh;\r\n    background-color: #F8F8F8;\r\n}\r\n\r\n.exam-notice {\r\n    width: 330px;\r\n    height: 40px;\r\n    background: #FFFFFF;\r\n    border-radius: 5px;\r\n    margin: 12px auto;\r\n}\r\n\r\n.exam-title {\r\n    font-size: 14px;\r\n    line-height: 40px;\r\n    padding-left: 22px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.no-read {\r\n    width: 6px;\r\n    height: 6px;\r\n    background: #FF3D3D;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin: 17px 5px;\r\n    border-radius: 6px;\r\n}\r\n\r\n.has-read {\r\n    background-color: #FFF !important;\r\n}\r\n\r\n.all-right {\r\n    width: 4px;\r\n    height: 8px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin: 16px 5px;\r\n    padding-left: 217px;\r\n}\r\n\r\n.notice-box {\r\n    width: 330px;\r\n    height: auto;\r\n}\r\n\r\n.notice-time {\r\n    color: #BFBFBF;\r\n    text-align: center;\r\n    font-size: 10px;\r\n}\r\n\r\n.other-notice {\r\n    padding: 10px 0;\r\n    background-color: #FFF;\r\n    width: 330px;\r\n    margin: 7px auto 20px auto;\r\n    border-radius: 10px;\r\n}\r\n\r\n.notice-title {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding: 18px 0 7px 21px;\r\n    border-radius: 6px;\r\n    font-size: 14px;\r\n}\r\n\r\n.no-read1 {\r\n    width: 6px;\r\n    height: 6px;\r\n    background: #FF3D3D;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin: 27px 0 0 5px;\r\n    border-radius: 6px;\r\n}\r\n\r\n.notice-desc {\r\n    color: #888888;\r\n    font-size: 12px;\r\n    padding: 0 21px;\r\n}\r\n\r\n.line {\r\n    width: 320px;\r\n    height: 0px;\r\n    border: 1px solid #E4E4E4;\r\n    margin: 13px auto 7px auto;\r\n}\r\n\r\n.detail-btn {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    color: #BFBFBF;\r\n    font-size: 10px;\r\n    padding-left: 21px;\r\n}\r\n\r\n.all-right1 {\r\n    width: 4px;\r\n    height: 8px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin: 3px 5px;\r\n    padding-left: 245px;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./List.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./List.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./List.vue?vue&type=template&id=c77a39be&scoped=true\"\nimport script from \"./List.vue?vue&type=script&lang=js\"\nexport * from \"./List.vue?vue&type=script&lang=js\"\nimport style0 from \"./List.vue?vue&type=style&index=0&id=c77a39be&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"c77a39be\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"NoticeExamList\"},[_c('van-nav-bar',{attrs:{\"title\":\"考试通知\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_vm._l((_vm.notice_list),function(item,index){return _c('div',{key:index,staticClass:\"other-notice\",on:{\"click\":function($event){return _vm.to_detail(item)}}},[_c('div',{staticClass:\"notice-time\"},[_vm._v(_vm._s(item.create_time))]),_c('div',{staticClass:\"notice-box\"},[_c('div',{staticClass:\"notice-top\"},[_c('div',{staticClass:\"notice-title\"},[_vm._v(_vm._s(item.title))]),_c('div',{class:{ 'has-read': item.is_read == 1, 'no-read1': item.is_read == 0 }})]),_c('div',{staticClass:\"notice-desc\"},[_vm._v(_vm._s(item.content))]),_c('div',{staticClass:\"line\"}),_c('div',{staticClass:\"bottom\"},[_c('div',{staticClass:\"detail-btn\"},[_vm._v(\"查看详情\")]),_c('div',{staticClass:\"all-right1\"},[_c('t-icon',{attrs:{\"name\":\"chevron-right\",\"size\":\"18\",\"color\":\"#BFBFBF\",\"data-name\":\"chevron-right\",\"bind:click\":\"onIconTap\"}})],1)])])])})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"NoticeExamList\">\r\n        <van-nav-bar title=\"考试通知\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <div class=\"other-notice\" v-for=\"(item, index) in notice_list\" :key=\"index\" @click=\"to_detail(item)\">\r\n            <div class=\"notice-time\">{{ item.create_time }}</div>\r\n            <div class=\"notice-box\">\r\n                <div class=\"notice-top\">\r\n                    <div class=\"notice-title\">{{ item.title }}</div>\r\n                    <div :class=\"{ 'has-read': item.is_read == 1, 'no-read1': item.is_read == 0 }\"></div>\r\n                </div>\r\n                <div class=\"notice-desc\">{{ item.content }}</div>\r\n                <div class=\"line\"></div>\r\n                <div class=\"bottom\">\r\n                    <div class=\"detail-btn\">查看详情</div>\r\n                    <div class=\"all-right1\">\r\n                        <t-icon name=\"chevron-right\" size=\"18\" color=\"#BFBFBF\" data-name=\"chevron-right\"\r\n                            bind:click=\"onIconTap\" />\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\nimport { NoticeList } from '@/api/home'\r\n\r\nexport default {\r\n    name: 'NoticeExamList',\r\n    data() {\r\n        return {\r\n            notice_list: []\r\n        }\r\n    },\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        to_detail(item) {\r\n            this.$router.push({ name: 'NoticeDetail', query: { notice_id: item.id } })\r\n        },\r\n        async NoticeExamList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await NoticeList({\r\n                        sid: user.sid,\r\n                        page: 1,\r\n                        size: 10,\r\n                        type: 'test',\r\n                    })\r\n                    this.notice_list = response.data.list\r\n                    console.log(this.notice_list)\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        }\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        this.NoticeExamList()\r\n    }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.NoticeExamList {\r\n    width: 100vw;\r\n    height: 100vh;\r\n    background-color: #F8F8F8;\r\n}\r\n\r\n.exam-notice {\r\n    width: 330px;\r\n    height: 40px;\r\n    background: #FFFFFF;\r\n    border-radius: 5px;\r\n    margin: 12px auto;\r\n}\r\n\r\n.exam-title {\r\n    font-size: 14px;\r\n    line-height: 40px;\r\n    padding-left: 22px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.no-read {\r\n    width: 6px;\r\n    height: 6px;\r\n    background: #FF3D3D;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin: 17px 5px;\r\n    border-radius: 6px;\r\n}\r\n\r\n.has-read {\r\n    background-color: #FFF !important;\r\n}\r\n\r\n.all-right {\r\n    width: 4px;\r\n    height: 8px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin: 16px 5px;\r\n    padding-left: 217px;\r\n}\r\n\r\n.notice-box {\r\n    width: 330px;\r\n    height: auto;\r\n}\r\n\r\n.notice-time {\r\n    color: #BFBFBF;\r\n    text-align: center;\r\n    font-size: 10px;\r\n}\r\n\r\n.other-notice {\r\n    padding: 10px 0;\r\n    background-color: #FFF;\r\n    width: 330px;\r\n    margin: 7px auto 20px auto;\r\n    border-radius: 10px;\r\n}\r\n\r\n.notice-title {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding: 18px 0 7px 21px;\r\n    border-radius: 6px;\r\n    font-size: 14px;\r\n}\r\n\r\n.no-read1 {\r\n    width: 6px;\r\n    height: 6px;\r\n    background: #FF3D3D;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin: 27px 0 0 5px;\r\n    border-radius: 6px;\r\n}\r\n\r\n.notice-desc {\r\n    color: #888888;\r\n    font-size: 12px;\r\n    padding: 0 21px;\r\n}\r\n\r\n.line {\r\n    width: 320px;\r\n    height: 0px;\r\n    border: 1px solid #E4E4E4;\r\n    margin: 13px auto 7px auto;\r\n}\r\n\r\n.detail-btn {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    color: #BFBFBF;\r\n    font-size: 10px;\r\n    padding-left: 21px;\r\n}\r\n\r\n.all-right1 {\r\n    width: 4px;\r\n    height: 8px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    margin: 3px 5px;\r\n    padding-left: 245px;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ExamList.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ExamList.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ExamList.vue?vue&type=template&id=5f1ca691&scoped=true\"\nimport script from \"./ExamList.vue?vue&type=script&lang=js\"\nexport * from \"./ExamList.vue?vue&type=script&lang=js\"\nimport style0 from \"./ExamList.vue?vue&type=style&index=0&id=5f1ca691&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"5f1ca691\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"NoticeDetail\"},[_c('van-nav-bar',{attrs:{\"title\":\"通知详情\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticClass:\"notice-title\"},[_vm._v(_vm._s(_vm.notice_info.title))]),_c('div',{staticClass:\"notice-content\",domProps:{\"innerHTML\":_vm._s(_vm.notice_info.content)}}),_c('div',{staticClass:\"notice-create_time\"},[_vm._v(\"通知时间：\"+_vm._s(_vm.notice_info.create_time))])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"NoticeDetail\">\r\n        <van-nav-bar title=\"通知详情\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <div class=\"notice-title\">{{ notice_info.title }}</div>\r\n        <div  class=\"notice-content\" v-html=\"notice_info.content\"></div>\r\n        <div class=\"notice-create_time\">通知时间：{{ notice_info.create_time }}</div>\r\n    </div>\r\n</template>\r\n<script>\r\nimport { NoticeDetail } from '@/api/home'\r\n\r\nexport default {\r\n    name: 'NoticeDetail',\r\n    data() {\r\n        return {\r\n            notice_info: [],\r\n            notice_id: 0\r\n        }\r\n    },\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        to_detail(item) {\r\n            this.$router.push({ name: 'NoticeDetail', query: { notice_id: item.id } })\r\n        },\r\n        async NoticeDetail() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await NoticeDetail({\r\n                        sid: user.sid,\r\n                        id: this.notice_id,\r\n                    })\r\n                    this.notice_info = response.data\r\n                    console.log(this.notice_info)\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        }\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        this.notice_id = this.$route.query.notice_id;\r\n        this.NoticeDetail()\r\n    }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.NoticeDetail {\r\n    width: 100vw;\r\n    height: 100%;\r\n    padding: 10px 0;\r\n    background-color: #F8F8F8;\r\n}\r\n\r\n.notice-title {\r\n    width: 96vw;\r\n    height: 20px;\r\n    margin:  0 auto;\r\n    padding-top: 10px;\r\n    text-align: center;\r\n    font-size: 16px;\r\n    font-weight: bold;\r\n}\r\n\r\n.notice-content {\r\n    width: 90vw;\r\n    margin: 0 auto;\r\n    padding-top: 10px;\r\n    font-size: 14px;\r\n    text-indent: 2em;\r\n    text-align: left;\r\n}\r\n\r\n.notice-create_time {\r\n    padding-top: 10px;\r\n    font-size: 12px;\r\n    text-align: right;\r\n    padding-right: 20px;\r\n}\r\n.notice-content>img{\r\n    width: 50% !important;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Detail.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Detail.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Detail.vue?vue&type=template&id=72b84ac2&scoped=true\"\nimport script from \"./Detail.vue?vue&type=script&lang=js\"\nexport * from \"./Detail.vue?vue&type=script&lang=js\"\nimport style0 from \"./Detail.vue?vue&type=style&index=0&id=72b84ac2&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"72b84ac2\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"plant\"},[_c('van-nav-bar',{attrs:{\"title\":\"学习日历\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticClass:\"can\"},[_c('div',{staticClass:\"calendar-box\"},[_c('div',{staticClass:\"calendar-top\"},[_c('div',{staticClass:\"study-info\"},[_vm._v(_vm._s(_vm.countTask.today_minutes*1 + _vm.countTask.etalk_minutes*1)),_c('span',{staticClass:\"study-time\"},[_vm._v(\"/\"+_vm._s(_vm.countTask.plan_minutes)+\"min\")])]),_c('div',{staticClass:\"study-other\"},[_c('div',{staticClass:\"study-status\"},[_vm._v(\" 学习目标（ \"),(_vm.countTask.today_minutes < _vm.countTask.plan_minutes)?_c('span',[_vm._v(\"未完成\")]):_vm._e(),(_vm.countTask.today_minutes >= _vm.countTask.plan_minutes)?_c('span',[_vm._v(\"完成\")]):_vm._e(),_vm._v(\" ） \")])])]),_c('div',{staticClass:\"calendar-info\"},[_c('div',{staticClass:\"calendar\"},[_c('div',{staticClass:\"calendar-header\"},[_c('div',{staticClass:\"chevron-left\"},[_c('van-icon',{attrs:{\"name\":\"arrow-left\",\"color\":\"#606060\"},on:{\"click\":_vm.prevMonth}})],1),_c('span',{staticStyle:{\"font-size\":\"12px\"}},[_vm._v(_vm._s(_vm.year)+\"年\"+_vm._s(_vm.month)+\"月\")]),_c('div',{staticClass:\"chevron-left\"},[_c('van-icon',{attrs:{\"name\":\"arrow\",\"color\":\"#606060\"},on:{\"click\":_vm.nextMonth}})],1)]),_c('div',{staticClass:\"calendar-body\"},[_vm._m(0),_c('div',{staticClass:\"days\"},_vm._l((_vm.days),function(item,index){return _c('block',{key:index},[_c('div',{staticClass:\"day\",attrs:{\"bindtap\":\"signIn\"}},[(!item.is_today)?_c('span',{staticStyle:{\"width\":\"100%\",\"height\":\"100%\"}},[_vm._v(_vm._s(item.day))]):_vm._e(),(item.is_today)?_c('span',{staticStyle:{\"width\":\"100%\",\"height\":\"100%\",\"color\":\"#0099FF\",\"font-size\":\"12px\"}},[_vm._v(\"今天\")]):_vm._e(),(item.signed == true && _vm.nodata == false)?_c('div',{staticClass:\"check\"},[_vm._v(\"√\")]):_vm._e(),(!item.signed)?_c('div',{staticClass:\"check\"}):_vm._e()])])}),1)])]),_c('div',{staticClass:\"calendar-bottom\"},[_c('image',{staticClass:\"calendar-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/calendar/calendar.png\",\"mode\":\"widthFix\"}}),_c('div',{staticClass:\"signIn\"},[_vm._v(\"本月已连续打卡\"+_vm._s(_vm.maxContinuousDays)+\"天，累计打卡\"+_vm._s(_vm.countSign)+\"天\")])])])])]),(_vm.taskList.length > 0)?_c('div',{staticClass:\"learn-model\"},[_vm._m(1),_vm._l((_vm.taskList),function(item,index){return _c('div',{key:index,staticClass:\"learn-item\",on:{\"click\":function($event){return _vm.to_praxis(item)}}},[_c('van-image',{staticClass:\"learn-img\",attrs:{\"fit\":\"contain\",\"src\":item.cover,\"mode\":\"aspectFill\"}}),_c('div',{staticClass:\"learn-item-info\"},[_c('div',{staticClass:\"learn-item-title\"},[(item.category_id == 1)?_c('span',[_vm._v(\"[听力]\")]):_vm._e(),(item.category_id == 2)?_c('span',[_vm._v(\"[阅读]\")]):_vm._e(),(item.category_id == 4)?_c('span',[_vm._v(\"[写作]\")]):_vm._e(),_vm._v(\" \"+_vm._s(item.name)+\" \")])]),_c('div',{staticClass:\"btn-learn\"},[_vm._v(\"进入学习\")])],1)})],2):_vm._e()],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"weekdays\"},[_c('span',[_vm._v(\"日\")]),_c('span',[_vm._v(\"一\")]),_c('span',[_vm._v(\"二\")]),_c('span',[_vm._v(\"三\")]),_c('span',[_vm._v(\"四\")]),_c('span',[_vm._v(\"五\")]),_c('span',[_vm._v(\"六\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"model-start\"},[_c('div',{staticClass:\"model-title\"},[_vm._v(\"今日任务\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"plant\">\r\n        <van-nav-bar title=\"学习日历\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <div class=\"can\">\r\n            <div class=\"calendar-box\">\r\n                <div class=\"calendar-top\">\r\n                    <div class=\"study-info\">{{ countTask.today_minutes*1  + countTask.etalk_minutes*1 }}<span class=\"study-time\">/{{\r\n                        countTask.plan_minutes }}min</span></div>\r\n                    <div class=\"study-other\">\r\n                        <div class=\"study-status\">\r\n                            学习目标（\r\n                            <span v-if=\"countTask.today_minutes < countTask.plan_minutes\">未完成</span>\r\n                            <span v-if=\"countTask.today_minutes >= countTask.plan_minutes\">完成</span>\r\n                            ）\r\n                        </div>\r\n                        <!-- <div class=\"share\">分享</div> -->\r\n                    </div>\r\n                </div>\r\n                <div class=\"calendar-info\">\r\n                    <div class=\"calendar\">\r\n                        <div class=\"calendar-header\">\r\n                            <div class=\"chevron-left\">\r\n                                <van-icon name=\"arrow-left\" color=\"#606060\" @click=\"prevMonth\" />\r\n                            </div>\r\n                            <span style=\"font-size: 12px;\">{{ year }}年{{ month }}月</span>\r\n                            <div class=\"chevron-left\">\r\n                                <van-icon name=\"arrow\" color=\"#606060\" @click=\"nextMonth\" />\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"calendar-body\">\r\n                            <div class=\"weekdays\">\r\n                                <span>日</span>\r\n                                <span>一</span>\r\n                                <span>二</span>\r\n                                <span>三</span>\r\n                                <span>四</span>\r\n                                <span>五</span>\r\n                                <span>六</span>\r\n                            </div>\r\n                            <div class=\"days\">\r\n                                <block v-for=\"(item, index) in days\" :key=\"index\">\r\n                                    <div bindtap=\"signIn\" class=\"day\">\r\n                                        <span style=\"width: 100%;height: 100%;\" v-if=\"!item.is_today\">{{ item.day\r\n                                            }}</span>\r\n                                        <span style=\"width: 100%;height: 100%;color: #0099FF;font-size: 12px;\"\r\n                                            v-if=\"item.is_today\">今天</span>\r\n                                        <div class=\"check\" v-if=\"item.signed == true && nodata == false\">√</div>\r\n                                        <div class=\"check\" v-if=\"!item.signed\"></div>\r\n                                    </div>\r\n                                </block>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                    <div class=\"calendar-bottom\">\r\n                        <image src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/calendar/calendar.png\"\r\n                            mode=\"widthFix\" class=\"calendar-img\" />\r\n                        <div class=\"signIn\">本月已连续打卡{{ maxContinuousDays }}天，累计打卡{{ countSign }}天</div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n        <!-- 今日任务 -->\r\n        <div class=\"learn-model\" v-if=\"taskList.length > 0\">\r\n            <div class=\"model-start\">\r\n                <div class=\"model-title\">今日任务</div>\r\n            </div>\r\n\r\n            <div class=\"learn-item\" v-for=\"(item, index) in taskList\" :key=\"index\"  @click=\"to_praxis(item)\">\r\n                <van-image fit=\"contain\" :src=\"item.cover\" mode=\"aspectFill\" class=\"learn-img\" />\r\n                <div class=\"learn-item-info\" >\r\n                    <div class=\"learn-item-title\">\r\n                        <span v-if=\"item.category_id == 1\">[听力]</span>\r\n                        <span v-if=\"item.category_id == 2\">[阅读]</span>\r\n                        <span v-if=\"item.category_id == 4\">[写作]</span>\r\n                        {{ item.name }}\r\n                    </div>\r\n                </div>\r\n                <div class=\"btn-learn\">进入学习</div>\r\n            </div>\r\n        </div>\r\n        <!-- 今日任务 -->\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getTaskList, getDateList, getUserStudy, saveUserStudyResource } from '@/api/user'\r\nexport default {\r\n    name: 'Plant',\r\n    data() {\r\n        return {\r\n            year: 2024,\r\n            month: 1,\r\n            days: [],\r\n            day: 0,\r\n            nodata:false,\r\n            signedDays: [], // 已签到的天数，\r\n            maxContinuousDays: 0,\r\n            taskList: [],\r\n            countTask: [],\r\n            countSign: 0\r\n        }\r\n    },\r\n    methods: {\r\n        async getTask() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    this.userInfo = user\r\n                    const response = await getTaskList({ sid: user.sid })\r\n                    this.taskList = response.data\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async getSignedDays() {\r\n\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    let now_date = this.year + '' + this.month\r\n                    const response = await getDateList({ sid: user.sid, dates: now_date })\r\n                    if(response.code != 100){\r\n                        this.nodata = true\r\n                        this.maxContinuousDays = 0\r\n                        return\r\n                    }\r\n                    this.signedDays = response.data\r\n                    this.countSign = response.data.length\r\n                    this.calculateContinuousDays(this.signedDays)\r\n                    this.generateCalendar();\r\n                    // 确保更新视图\r\n                    this.$forceUpdate();\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                this.signedDays = []\r\n                this.countSign = 0\r\n                this.$forceUpdate();\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async getUserStudy() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getUserStudy({ sid: user.sid })\r\n                    this.countTask = response.data\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        },\r\n        async generateCalendar() {\r\n            let year = this.year\r\n            let month = this.month\r\n            let signedDays = this.signedDays\r\n            const now = new Date()\r\n            var day = now.getDate()\r\n            var now_month = now.getMonth() + 1;\r\n            if (now_month < 10) {\r\n                now_month = '0' + now_month\r\n            }\r\n            if (day < 10) {\r\n                day = '0' + day\r\n            }\r\n            let now_date = now.getFullYear() + '-' + now_month + '-' + day\r\n\r\n            const firstDay = new Date(year, month - 1, 1).getDay();\r\n            const daysInMonth = new Date(year, month, 0).getDate();\r\n            let days = [];\r\n            for (let i = 0; i < firstDay; i++) {\r\n                days.push({\r\n                    day: '',\r\n                    signed: false\r\n                });\r\n            }\r\n            console.log(signedDays)\r\n            for (let i = 1; i <= daysInMonth; i++) {\r\n                if (i < 10) {\r\n                    i = '0' + i\r\n                }\r\n                const date = `${year}-${month}-${i}`;\r\n                let is_today = false\r\n                if (now_date === date) {\r\n                    is_today = true\r\n                }\r\n                days.push({\r\n                    day: i,\r\n                    date,\r\n                    signed: signedDays.includes(date),\r\n                    is_today: is_today\r\n                });\r\n            }\r\n            console.log(days)\r\n            this.days = days\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n        //计算连续打卡次数\r\n        async calculateContinuousDays(checkinDates) {\r\n            checkinDates.sort((a, b) => new Date(a) - new Date(b));\r\n            let continuousDays = 1;\r\n            let maxContinuousDays = 1;\r\n            for (let i = 1; i < checkinDates.length; i++) {\r\n                const prevDate = new Date(checkinDates[i - 1]);\r\n                const currentDate = new Date(checkinDates[i]);\r\n                const diff = (currentDate - prevDate) / (1000 * 60 * 60 * 24);\r\n                if (diff === 1) {\r\n                    continuousDays += 1;\r\n                    maxContinuousDays = Math.max(maxContinuousDays, continuousDays);\r\n                } else if (diff > 1) {\r\n                    continuousDays = 1;\r\n                }\r\n            }\r\n            this.maxContinuousDays = maxContinuousDays\r\n\r\n        },\r\n        async prevMonth() {\r\n            let year = this.year;\r\n            let month = this.month;\r\n            month--;\r\n            if (month < 1) {\r\n                month = 12;\r\n                year--;\r\n            }\r\n            if (month < 10) {\r\n\r\n                month = '0' + month\r\n\r\n            }\r\n\r\n            this.year = year\r\n            this.month = month\r\n\r\n            this.getSignedDays();\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n        },\r\n        async nextMonth() {\r\n            let year = this.year;\r\n            let month = this.month;\r\n            month++;\r\n            if (month > 12 && year) {\r\n                month = 1;\r\n                year++;\r\n            }\r\n            if (month < 10) {\r\n\r\n                month = '0' + month\r\n\r\n            }\r\n            this.year = year\r\n            this.month = month\r\n            this.getSignedDays();\r\n            // 确保更新视图\r\n            this.$forceUpdate();\r\n\r\n        },\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        async to_praxis(item) {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    console.log(item)\r\n                    const response = await saveUserStudyResource({ sid: user.sid, resource_id: item.resource_id })\r\n                    if (response.code == 100) {\r\n                        if (item.category_id == 1) {\r\n                            this.$router.push({ name: 'Praxis', query: { log_id: response.data, resources_id: item.resource_id } })\r\n                        }\r\n                        if (item.category_id == 2) {\r\n                            this.$router.push({ name: 'ReadPraxis', query: { log_id: response.data, resources_id: item.resource_id } })\r\n                        }\r\n                        if (item.category_id == 4) {\r\n                            this.$router.push({ name: 'WritePraxis', query: { log_id: response.data, resources_id: item.resource_id } })\r\n                        }\r\n                    }\r\n\r\n                } else {\r\n                    console.error('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.error('Login Failed:', error)\r\n            }\r\n        }\r\n\r\n    },\r\n    mounted() {\r\n        // 在组件挂载后立即获取任务数据\r\n        var now = new Date();\r\n        var year = now.getFullYear(); // 获取当前年份\r\n        var month = now.getMonth() + 1; // 获取当前月份\r\n        if (month < 10) {\r\n            month = '0' + month\r\n        }\r\n        this.year = year\r\n        this.month = month\r\n        this.getTask()\r\n        this.getSignedDays();\r\n        this.getUserStudy()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n.can {\r\n    width: 100vw;\r\n    height: 405px;\r\n    background: linear-gradient(180deg, #E2F2FF 0%, #FFFFFF 100%);\r\n}\r\n\r\n.calendar-box {\r\n    background-image: url('https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/calendar/sign_calendar.png?v=1');\r\n    background-repeat: no-repeat;\r\n    background-size: cover;\r\n    width: 340px;\r\n    height: 404px;\r\n    margin: 0 auto;\r\n    z-index: 100;\r\n}\r\n\r\n.calendar-top {\r\n    width: 322px;\r\n    height: 61px;\r\n    padding: 51px 24px 0 27px;\r\n    text-align: left;\r\n}\r\n\r\n.study-info {\r\n    width: 322px;\r\n    font-size: 22px;\r\n    height: 29px;\r\n    font-weight: bold;\r\n    color: #FFFFFF;\r\n    padding-top: 8px;\r\n}\r\n\r\n.study-other {\r\n    width: 322px;\r\n    font-size: 14px;\r\n    height: 23px;\r\n    color: #FFFFFF;\r\n    line-height: 23px;\r\n}\r\n\r\n.study-status,\r\n.share {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.study-status {\r\n    width: 257px;\r\n}\r\n\r\n.study-time {\r\n    font-size: 12px;\r\n    font-weight: normal;\r\n}\r\n\r\n.calendar-info {\r\n    width: 322px;\r\n    height: 270px;\r\n    background: #FFFFFF;\r\n    border-radius: 12px;\r\n    margin: 10px auto;\r\n    overflow: hidden;\r\n}\r\n\r\n.calendar {\r\n    width: 282px;\r\n    padding: 14px 20px 0px 20px;\r\n    border-radius: 5px;\r\n    height: 230px;\r\n}\r\n\r\n.calendar-header {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: center;\r\n    margin-bottom: 10px;\r\n}\r\n\r\n.chevron-left {\r\n    width: 100px;\r\n}\r\n\r\n.calendar-body {\r\n    display: flex;\r\n    flex-direction: column;\r\n}\r\n\r\n.weekdays {\r\n    padding: 0 10px;\r\n    display: flex;\r\n    justify-content: space-between;\r\n    text-align: center;\r\n}\r\n\r\n.days {\r\n    display: flex;\r\n    flex-wrap: wrap;\r\n    /* 使天数自动换行 */\r\n}\r\n\r\n.day {\r\n    width: 40px;\r\n    /* 每个天数占一周的1/7 */\r\n    padding: 3px 0;\r\n    height: 24px;\r\n    text-align: center;\r\n    cursor: pointer;\r\n    /* 包括内边距和边框在内 */\r\n    font-size: 12px;\r\n}\r\n\r\n.day.signed {\r\n    color: #69DC60;\r\n    border-radius: 50%;\r\n}\r\n\r\n.check {\r\n    color: #69DC60;\r\n    width: 100%;\r\n    height: 15px;\r\n    font-size: 12px;\r\n    font-weight: bold;\r\n}\r\n\r\n.calendar-bottom {\r\n    width: 282px;\r\n    height: 20px;\r\n    position: relative;\r\n    bottom: 5px;\r\n    left: 25px;\r\n}\r\n\r\n.calendar-img {\r\n    width: 14px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-top: 3px;\r\n}\r\n\r\n.signIn {\r\n    width: 265px;\r\n    height: 20px;\r\n    line-height: 20px;\r\n    color: #686868;\r\n    font-size: 12px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-left: 3px;\r\n}\r\n\r\n\r\n.learn-model {\r\n    width: 330px;\r\n    height: auto;\r\n    padding: 0 22px;\r\n    padding-bottom: 50px;\r\n}\r\n\r\n.model-start {\r\n    width: 330px;\r\n    height: auto;\r\n    margin: 0 auto;\r\n    line-height: 40px;\r\n    margin-top: 30px;\r\n    text-align: left;\r\n}\r\n\r\n.model-title {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 110px;\r\n    text-align: left;\r\n    font-size: 16px;\r\n}\r\n\r\n.model-more {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 200px;\r\n    text-align: right;\r\n    font-size: 12px;\r\n}\r\n\r\n.model-icon {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-top: 12px;\r\n}\r\n\r\n\r\n.learn-item {\r\n    width: 330px;\r\n    height: 85px;\r\n    border-style: solid;\r\n    box-shadow: 0px 2px 10px 1px rgba(80, 143, 206, 0.1);\r\n    border-width: 0px;\r\n    margin: 11px 0;\r\n    border-radius: 20px;\r\n    display: flex;\r\n    background-color: #FFFFFF;\r\n}\r\n\r\n.learn-img {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 58px;\r\n    height: 58px;\r\n    margin: 14px 10px 13px 13px;\r\n}\r\n\r\n.learn-item-info {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 190px;\r\n    height: 50px;\r\n    line-height: 25px;\r\n    padding: 10px 0;\r\n}\r\n\r\n.learn-item-title {\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n    overflow: hidden;\r\n    text-overflow: ellipsis;\r\n    white-space: nowrap;\r\n    height: 20px;\r\n}\r\n\r\n.btn-learn {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    color: #003F88;\r\n    font-size: 12px;\r\n    height: 85px;\r\n    line-height: 85px;\r\n}\r\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Calendar.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Calendar.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./Calendar.vue?vue&type=template&id=13b6bbab&scoped=true\"\nimport script from \"./Calendar.vue?vue&type=script&lang=js\"\nexport * from \"./Calendar.vue?vue&type=script&lang=js\"\nimport style0 from \"./Calendar.vue?vue&type=style&index=0&id=13b6bbab&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"13b6bbab\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"ai\"},[_c('van-nav-bar',{attrs:{\"title\":\"能力自测\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticClass:\"exam-top\"},[_c('div',{staticClass:\"progress\"},[_c('div',{staticClass:\"progress-select\",style:({ width: _vm.progressWidth })})]),_c('div',{staticClass:\"alarm-box\"},[_c('div',{staticClass:\"alarm-time\"},[_c('van-count-down',{attrs:{\"time\":_vm.limitTime}})],1)])]),_c('div',{staticClass:\"test-box\"},[_c('div',{staticClass:\"test-orderNo\"},[_vm._v(\"Part \"+_vm._s(_vm.part))]),_c('div',{staticClass:\"test-type\"},[_vm._v(_vm._s(_vm.partName))]),(_vm.part == 1)?_c('div',{staticClass:\"test-detail\"},[_vm._m(0),_c('div',{staticClass:\"praxis-info\"},[_c('div',{staticClass:\"quest-item\"},_vm._l((_vm.options),function(item){return _c('div',{key:item.key,staticClass:\"quest-option\",on:{\"click\":function($event){return _vm.check_short_conver(item.key)}}},[_c('div',{staticClass:\"answer-title\",class:{ checked: _vm.paper_info.is_check == item.key }},[_vm._v(_vm._s(item.key))]),_c('div',{staticClass:\"answer-desc\"},[_vm._v(_vm._s(item.text))])])}),0)])]):_vm._e(),(_vm.part == 2)?_c('div',{staticClass:\"test-detail\"},[_c('div',{staticClass:\"read-context\"},[_vm._v(_vm._s(_vm.context))]),_c('div',{staticClass:\"detail-tltle\"},[_vm._v(_vm._s(_vm.count_load * 1 + 1)+\". \"+_vm._s(_vm.paper_info.question))]),_c('div',{staticClass:\"praxis-info\"},[_c('div',{staticClass:\"quest-item\"},_vm._l((_vm.options),function(item){return _c('div',{key:item.key,staticClass:\"quest-option\",on:{\"click\":function($event){return _vm.check_short_conver(item.key)}}},[_c('div',{staticClass:\"answer-title\",class:{ checked: _vm.paper_info.is_check == item.key }},[_vm._v(_vm._s(item.key))]),_c('div',{staticClass:\"answer-desc\"},[_vm._v(_vm._s(item.text))])])}),0)])]):_vm._e(),(_vm.part == 3)?_c('div',{staticClass:\"test-detail speaking-detail\"},[_c('div',{staticClass:\"speaking-index\"},[_vm._v(\"口语 \"+_vm._s(_vm.speakingIndex + 1)+\" / \"+_vm._s(_vm.speakingList.length))]),_c('div',{staticClass:\"speaking-direction\"},[_c('strong',[_vm._v(_vm._s(_vm.currentSpeaking.direction))])]),_c('div',{staticClass:\"speaking-content\"},[_vm._v(_vm._s(_vm.currentSpeaking.text))]),_c('div',{staticClass:\"speaking-action\"},[(_vm.speakingStatus == 0)?_c('button',{staticClass:\"speak-btn speak-start\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.startSpeakingRecord}},[_c('img',{staticClass:\"speak-icon\",attrs:{\"src\":\"https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/public/ly.png\",\"alt\":\"record\"}})]):_vm._e(),(_vm.speakingStatus == 1)?_c('button',{staticClass:\"speak-btn speak-recording\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.stopSpeakingRecord}},[_c('img',{staticClass:\"speak-icon speak-icon-recording\",attrs:{\"src\":\"https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/public/ly.png\",\"alt\":\"recording\"}})]):_vm._e(),(_vm.speakingStatus == 2)?_c('button',{staticClass:\"speak-btn speak-finished\",attrs:{\"type\":\"button\",\"disabled\":\"\"}},[_c('img',{staticClass:\"speak-icon speak-icon-finished\",attrs:{\"src\":\"https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/public/ly.png\",\"alt\":\"recorded\"}})]):_vm._e(),(_vm.speakingStatus == 0)?_c('span',{staticClass:\"speak-tip\"},[_vm._v(\"点击开始录音计时，只有一次机会\")]):_vm._e(),(_vm.speakingStatus == 1)?_c('span',{staticClass:\"speak-time\"},[_vm._v(_vm._s(_vm.recordingDurationText))]):_vm._e(),(_vm.speakingStatus == 2)?_c('div',{staticClass:\"record-file\"},[_c('van-icon',{attrs:{\"name\":\"music-o\",\"color\":\"#5abff5\",\"size\":\"18px\"}}),_c('span',[_vm._v(_vm._s(_vm.recordingDurationText)+\"录音文件已生成\")])],1):_vm._e()])]):_vm._e(),(_vm.audio_status == 1 && _vm.part == 1)?_c('div',{staticClass:\"audio-box\"},[_c('img',{attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/audio.png\"}}),_c('span',[_vm._v(\"温馨提示：听力自动播放，只播放一次\")]),_c('div',{staticStyle:{\"display\":\"none\"}},[_c('audio',{ref:\"audioPlayer\",attrs:{\"controls\":\"controls\",\"src\":_vm.audio_url,\"autoplay\":\"\"},on:{\"ended\":function($event){return _vm.myFunction()}}})])]):_vm._e(),(_vm.audio_status == 2 && _vm.part == 1)?_c('div',{staticClass:\"audio-box\"},[_c('img',{attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/audio_finish.png\"}}),_c('span',[_vm._v(\"温馨提示：播放完毕，请点击下一题\")])]):_vm._e(),_c('div',{staticClass:\"wall\"})]),_c('div',{staticClass:\"btn-box\"},[(_vm.count_load < 7)?_c('div',{staticClass:\"next-btn\",class:{ disabled: _vm.part == 3 && _vm.speakingStatus != 2 },on:{\"click\":_vm.next_paper}},[_vm._v(\" 下一题 \")]):_vm._e(),(_vm.count_load == 7)?_c('div',{staticClass:\"sumbit-btn\",class:{ disabled: _vm.part == 3 && _vm.speakingStatus != 2 },on:{\"click\":_vm.submit_paper}},[_vm._v(\" 提交 \")]):_vm._e()])],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"detail-tltle\"},[_c('p',[_vm._v(\" Directions: In this section, you will hear a short conversation. At the end of each conversation, one question will be asked about what was said. Both the conversation and the question will be spoken only once. After each question, there will be a pause. During the pause, you must read the four choices marked A, B, C and D and decide which is the best answer. \")])])\n}]\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"ai\">\n    <van-nav-bar title=\"能力自测\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\n\n    <div class=\"exam-top\">\n      <div class=\"progress\">\n        <div class=\"progress-select\" :style=\"{ width: progressWidth }\"></div>\n      </div>\n      <div class=\"alarm-box\">\n        <div class=\"alarm-time\">\n          <van-count-down :time=\"limitTime\" />\n        </div>\n      </div>\n    </div>\n\n    <div class=\"test-box\">\n      <div class=\"test-orderNo\">Part {{ part }}</div>\n      <div class=\"test-type\">{{ partName }}</div>\n\n      <div class=\"test-detail\" v-if=\"part == 1\">\n        <div class=\"detail-tltle\">\n          <p>\n            Directions: In this section, you will hear a short conversation. At the end of each conversation, one\n            question will be asked about what was said. Both the conversation and the question will be spoken only once.\n            After each question, there will be a pause. During the pause, you must read the four choices marked A, B, C\n            and D and decide which is the best answer.\n          </p>\n        </div>\n        <div class=\"praxis-info\">\n          <div class=\"quest-item\">\n            <div\n              v-for=\"item in options\"\n              :key=\"item.key\"\n              class=\"quest-option\"\n              @click=\"check_short_conver(item.key)\"\n            >\n              <div class=\"answer-title\" :class=\"{ checked: paper_info.is_check == item.key }\">{{ item.key }}</div>\n              <div class=\"answer-desc\">{{ item.text }}</div>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"test-detail\" v-if=\"part == 2\">\n        <div class=\"read-context\">{{ context }}</div>\n        <div class=\"detail-tltle\">{{ count_load * 1 + 1 }}. {{ paper_info.question }}</div>\n        <div class=\"praxis-info\">\n          <div class=\"quest-item\">\n            <div\n              v-for=\"item in options\"\n              :key=\"item.key\"\n              class=\"quest-option\"\n              @click=\"check_short_conver(item.key)\"\n            >\n              <div class=\"answer-title\" :class=\"{ checked: paper_info.is_check == item.key }\">{{ item.key }}</div>\n              <div class=\"answer-desc\">{{ item.text }}</div>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"test-detail speaking-detail\" v-if=\"part == 3\">\n        <div class=\"speaking-index\">口语 {{ speakingIndex + 1 }} / {{ speakingList.length }}</div>\n        <div class=\"speaking-direction\">\n          <strong>{{ currentSpeaking.direction }}</strong>\n        </div>\n        <div class=\"speaking-content\">{{ currentSpeaking.text }}</div>\n        <div class=\"speaking-action\">\n          <button\n            v-if=\"speakingStatus == 0\"\n            type=\"button\"\n            class=\"speak-btn speak-start\"\n            @click=\"startSpeakingRecord\"\n          >\n            <img class=\"speak-icon\" src=\"https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/public/ly.png\" alt=\"record\" />\n          </button>\n          <button\n            v-if=\"speakingStatus == 1\"\n            type=\"button\"\n            class=\"speak-btn speak-recording\"\n            @click=\"stopSpeakingRecord\"\n          >\n            <img class=\"speak-icon speak-icon-recording\" src=\"https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/public/ly.png\" alt=\"recording\" />\n          </button>\n          <button v-if=\"speakingStatus == 2\" type=\"button\" class=\"speak-btn speak-finished\" disabled>\n            <img class=\"speak-icon speak-icon-finished\" src=\"https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/public/ly.png\" alt=\"recorded\" />\n          </button>\n          <span v-if=\"speakingStatus == 0\" class=\"speak-tip\">点击开始录音计时，只有一次机会</span>\n          <span v-if=\"speakingStatus == 1\" class=\"speak-time\">{{ recordingDurationText }}</span>\n          <div v-if=\"speakingStatus == 2\" class=\"record-file\">\n            <van-icon name=\"music-o\" color=\"#5abff5\" size=\"18px\" />\n            <span>{{ recordingDurationText }}录音文件已生成</span>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"audio-box\" v-if=\"audio_status == 1 && part == 1\">\n        <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/audio.png\" />\n        <span>温馨提示：听力自动播放，只播放一次</span>\n        <div style=\"display: none;\">\n          <audio controls=\"controls\" :src=\"audio_url\" ref=\"audioPlayer\" autoplay @ended=\"myFunction()\"></audio>\n        </div>\n      </div>\n      <div class=\"audio-box\" v-if=\"audio_status == 2 && part == 1\">\n        <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/audio_finish.png\" />\n        <span>温馨提示：播放完毕，请点击下一题</span>\n      </div>\n      <div class=\"wall\"></div>\n    </div>\n\n    <div class=\"btn-box\">\n      <div\n        class=\"next-btn\"\n        :class=\"{ disabled: part == 3 && speakingStatus != 2 }\"\n        @click=\"next_paper\"\n        v-if=\"count_load < 7\"\n      >\n        下一题\n      </div>\n      <div\n        class=\"sumbit-btn\"\n        :class=\"{ disabled: part == 3 && speakingStatus != 2 }\"\n        @click=\"submit_paper\"\n        v-if=\"count_load == 7\"\n      >\n        提交\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nimport { getMiniPaperByListen2, getMiniPaperByRead, ListenMiniSubmit2, ReadMiniSubmit } from '@/api/exam'\nimport Recorder from 'recorder-core'\nimport 'recorder-core/src/engine/mp3'\nimport 'recorder-core/src/engine/mp3-engine'\n\nexport default {\n  name: 'Ai',\n  data() {\n    return {\n      audio_status: 1,\n      audio_url: '',\n      count_load: 0,\n      limitTime: 600000,\n      part: 1,\n      paper_id: '',\n      ques_id: '',\n      paper_info: {},\n      context: '',\n      speakingList: [\n        {\n          direction: 'Direction: In this task, you will read a short paragraph aloud and record your reading.',\n          text: \"Zhejiang University (ZJU) is one of China's oldest and most prestigious institutions of higher education. Its roots can be traced back to 1897 with the founding of the Qiushi Academy, which makes it one of China's earliest modern universities. Guided by its motto, Seeking Truth and Pursuing Innovation, the university is dedicated to national prosperity, social progress, and human development through the dissemination of knowledge and a spirit of innovation. Located in Hangzhou, a city renowned for its picturesque landscapes and rich cultural heritage.\"\n        },\n        {\n          direction: 'Direction: In this task, you will answer the question below and record your response.',\n          text: 'What can students do to improve their English learning efficiency? Please give your answer in English.'\n        }\n      ],\n      speakingStatus: 0,\n      recorder: null,\n      recordingSeconds: 0,\n      recordingTimer: null,\n      speakingAudioBlob: null,\n      speakingAudioUrl: ''\n    }\n  },\n  computed: {\n    partName() {\n      if (this.part == 1) return '听力'\n      if (this.part == 2) return '阅读'\n      return '口语'\n    },\n    progressWidth() {\n      return `${Math.min(((Number(this.count_load) || 0) + 1) / 8 * 100, 100)}%`\n    },\n    recordingDurationText() {\n      const minutes = String(Math.floor(this.recordingSeconds / 60)).padStart(2, '0')\n      const seconds = String(this.recordingSeconds % 60).padStart(2, '0')\n      return `${minutes}:${seconds}`\n    },\n    options() {\n      return [\n        { key: 'A', text: this.paper_info.optionA },\n        { key: 'B', text: this.paper_info.optionB },\n        { key: 'C', text: this.paper_info.optionC },\n        { key: 'D', text: this.paper_info.optionD }\n      ].filter(item => item.text)\n    },\n    speakingIndex() {\n      return Math.min(Math.max(Number(this.count_load) - 6, 0), this.speakingList.length - 1)\n    },\n    currentSpeaking() {\n      return this.speakingList[this.speakingIndex] || this.speakingList[0]\n    }\n  },\n  methods: {\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    myFunction() {\n      this.audio_status = 2\n    },\n    async getMiniPaperByListen() {\n      try {\n        const user = this.getUser()\n        if (!user.sid) return\n        const response = await getMiniPaperByListen2(user.sid, this.ques_id)\n        const data = response.data || {}\n        if (response.code == 100) {\n          const questions = data.questions1 || []\n          const num = questions.length ? Math.floor(Math.random() * questions.length) : 0\n          this.paper_info = {\n            ...(questions[num] || {}),\n            is_check: ''\n          }\n          this.audio_url = data.listeningShortConversation ? data.listeningShortConversation.audio : ''\n          this.audio_status = 1\n          if (data.listeningShortConversation && data.listeningShortConversation.id) {\n            this.ques_id = `${this.ques_id},${data.listeningShortConversation.id}`\n          }\n        }\n      } catch (error) {\n        console.error('Login Failed:', error)\n      }\n    },\n    async getMiniPaperByRead() {\n      try {\n        const user = this.getUser()\n        if (!user.sid) return\n        const response = await getMiniPaperByRead(user.sid, this.ques_id)\n        const data = response.data || {}\n        const question = data.questions || {}\n        this.paper_info = {\n          ...question,\n          is_check: ''\n        }\n        this.context = data.readingPassage ? data.readingPassage.context : ''\n        this.part = 2\n        if (data.readingPassage && data.readingPassage.id) {\n          this.ques_id = `${this.ques_id},${data.readingPassage.id}`\n        }\n      } catch (error) {\n        console.error('Login Failed:', error)\n      }\n    },\n    check_short_conver(check_index) {\n      this.paper_info = {\n        ...this.paper_info,\n        is_check: check_index\n      }\n    },\n    async next_paper() {\n      const user = this.getUser()\n      if (!user.sid) return\n      if (this.part == 1) {\n        await this.submitListening(user.sid)\n      } else if (this.part == 2) {\n        await this.submitReading(user.sid)\n      } else if (this.part == 3 && this.speakingStatus != 2) {\n        this.$toast('请先完成录音')\n        return\n      }\n\n      this.count_load = Number(this.count_load) + 1\n      if (this.count_load < 3) {\n        this.part = 1\n        await this.getMiniPaperByListen()\n      } else if (this.count_load < 6) {\n        this.part = 2\n        await this.getMiniPaperByRead()\n      } else {\n        this.initSpeakingPart()\n      }\n\n      this.$router.replace({\n        name: 'MiniPaper',\n        query: {\n          paper_id: this.paper_id,\n          count_load: this.count_load,\n          has_time: this.limitTime,\n          timestamp: Date.now()\n        }\n      })\n    },\n    async submitListening(sid) {\n      if (!this.paper_info.id) return\n      const submit_data1 = {\n        shortConversationList: [{\n          question_id: this.paper_info.id,\n          answer: this.paper_info.is_check || ''\n        }]\n      }\n      await ListenMiniSubmit2({ sid, pc_id: this.paper_id, result: JSON.stringify(submit_data1) })\n    },\n    async submitReading(sid) {\n      if (!this.paper_info.id) return\n      const submit_data1 = {\n        readingPassageList: [{\n          question_id: this.paper_info.id,\n          answer: this.paper_info.is_check || ''\n        }]\n      }\n      await ReadMiniSubmit({ sid, pc_id: this.paper_id, result: JSON.stringify(submit_data1) })\n    },\n    async submit_paper() {\n      if (this.part == 3) {\n        if (this.speakingStatus != 2) {\n          this.$toast('请先完成录音')\n          return\n        }\n        this.$router.push({ name: 'ExamReport', query: { pc_id: this.paper_id } })\n        return\n      }\n      const user = this.getUser()\n      if (user.sid) await this.submitReading(user.sid)\n      this.$router.push({ name: 'ExamReport', query: { pc_id: this.paper_id } })\n    },\n    onClickLeft() {\n      history.back()\n    },\n    initSpeakingPart() {\n      this.part = 3\n      this.paper_info = {}\n      this.context = ''\n      this.audio_status = 0\n      this.speakingStatus = 0\n      this.recordingSeconds = 0\n      this.speakingAudioBlob = null\n      if (this.speakingAudioUrl) {\n        URL.revokeObjectURL(this.speakingAudioUrl)\n        this.speakingAudioUrl = ''\n      }\n      this.clearRecordingTimer()\n    },\n    startSpeakingRecord() {\n      if (this.speakingStatus !== 0) return\n      this.recorder = Recorder({\n        type: 'mp3',\n        sampleRate: 16000,\n        bitRate: 16\n      })\n      this.recorder.open(() => {\n        this.speakingStatus = 1\n        this.recordingSeconds = 0\n        this.recorder.start()\n        this.recordingTimer = setInterval(() => {\n          this.recordingSeconds += 1\n        }, 1000)\n      }, () => {\n        this.$toast('无法开启录音，请检查麦克风权限')\n      })\n    },\n    stopSpeakingRecord() {\n      if (!this.recorder || this.speakingStatus !== 1) return\n      this.clearRecordingTimer()\n      this.recorder.stop((blob) => {\n        this.speakingAudioBlob = blob\n        this.speakingAudioUrl = URL.createObjectURL(blob)\n        this.speakingStatus = 2\n        this.recorder.close()\n        this.recorder = null\n      }, () => {\n        this.$toast('录音生成失败，请重试')\n        this.speakingStatus = 0\n        this.recorder.close()\n        this.recorder = null\n      })\n    },\n    clearRecordingTimer() {\n      if (this.recordingTimer) {\n        clearInterval(this.recordingTimer)\n        this.recordingTimer = null\n      }\n    },\n    async loadPaper() {\n      if (this.count_load < 3) {\n        this.part = 1\n        await this.getMiniPaperByListen()\n      } else if (this.count_load < 6) {\n        this.part = 2\n        await this.getMiniPaperByRead()\n      } else {\n        this.initSpeakingPart()\n      }\n    }\n  },\n  mounted() {\n    this.paper_id = this.$route.query.paper_id\n    this.count_load = Number(this.$route.query.count_load || 0)\n    this.limitTime = Number(this.$route.query.has_time || 600000)\n    this.loadPaper()\n  },\n  beforeDestroy() {\n    this.clearRecordingTimer()\n    if (this.recorder) {\n      this.recorder.close()\n      this.recorder = null\n    }\n    if (this.speakingAudioUrl) {\n      URL.revokeObjectURL(this.speakingAudioUrl)\n    }\n  }\n}\n</script>\n\n<style scoped>\n.ai {\n  min-height: 100vh;\n  background: #fff;\n}\n\n.exam-top {\n  width: 325px;\n  height: 30px;\n  padding: 10px 25px;\n  box-shadow: 0px 2px 6px 1px rgba(80, 143, 206, 0.1);\n}\n\n.progress {\n  width: 160px;\n  height: 5px;\n  background: #ebebeb;\n  border-radius: 3px;\n  vertical-align: top;\n  display: inline-block;\n  margin-top: 10px;\n  overflow: hidden;\n}\n\n.progress-select {\n  height: 5px;\n  background: linear-gradient(270deg, #e2cca6 0%, #b29360 100%);\n}\n\n.alarm-box {\n  width: 130px;\n  height: 25px;\n  vertical-align: top;\n  display: inline-block;\n  margin-left: 17px;\n}\n\n.alarm-time {\n  height: 25px;\n  vertical-align: top;\n  display: inline-block;\n  font-size: 14px;\n  color: #8b8b8b;\n  line-height: 25px;\n}\n\n.test-box {\n  width: 325px;\n  padding: 10px 25px 120px;\n  box-sizing: content-box;\n  text-align: left;\n}\n\n.test-orderNo {\n  font-size: 26px;\n  font-weight: bold;\n}\n\n.test-type {\n  color: #979797;\n  font-size: 16px;\n}\n\n.test-detail {\n  margin-top: 12px;\n  text-align: left;\n  font-size: 16px;\n}\n\n.detail-tltle p {\n  margin: 0;\n  line-height: 20px;\n}\n\n.read-context {\n  max-height: 220px;\n  margin-bottom: 18px;\n  overflow-y: auto;\n  font-size: 14px;\n  line-height: 22px;\n  -webkit-overflow-scrolling: touch;\n}\n\n.praxis-info {\n  width: 325px;\n  height: auto;\n  background: #fff;\n  border-radius: 0;\n  margin-top: 15px;\n}\n\n.quest-option {\n  width: 325px;\n  margin: 7px 0;\n  display: flex;\n  align-items: center;\n}\n\n.answer-title {\n  flex: 0 0 35px;\n  width: 35px;\n  height: 35px;\n  background-color: lightgray;\n  border-radius: 35px;\n  line-height: 35px;\n  text-align: center;\n}\n\n.checked {\n  background: linear-gradient(180deg, #4499ee 0%, #9ce4ff 100%);\n}\n\n.answer-desc {\n  padding-left: 10px;\n  font-size: 14px;\n  line-height: 20px;\n  width: 280px;\n}\n\n.speaking-detail {\n  margin-top: 8px;\n  line-height: 20px;\n}\n\n.speaking-index {\n  margin-bottom: 8px;\n  color: #979797;\n  font-size: 14px;\n}\n\n.speaking-direction {\n  margin-bottom: 8px;\n}\n\n.speaking-content {\n  max-height: calc(100vh - 330px);\n  min-height: 160px;\n  overflow-y: auto;\n  color: #222;\n  font-size: 15px;\n  line-height: 20px;\n  -webkit-overflow-scrolling: touch;\n}\n\n.speaking-action {\n  display: flex;\n  align-items: center;\n  gap: 16px;\n  min-height: 62px;\n  margin-top: 16px;\n}\n\n.speak-btn {\n  width: 38px;\n  height: 38px;\n  border: 0;\n  border-radius: 50%;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n}\n\n.speak-icon {\n  width: 22px;\n  height: 22px;\n  object-fit: contain;\n}\n\n.speak-icon-recording {\n  filter: brightness(1.02);\n}\n\n.speak-icon-finished {\n  opacity: 0.45;\n}\n\n.speak-start,\n.speak-recording {\n  background: linear-gradient(180deg, #77cdff 0%, #47aef1 100%);\n  box-shadow: 0 6px 12px rgba(71, 174, 241, 0.22);\n}\n\n.speak-finished {\n  background: #ececec;\n}\n\n.speak-tip {\n  color: #333;\n  font-size: 13px;\n}\n\n.speak-time {\n  color: #333;\n  font-size: 14px;\n}\n\n.record-file {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  padding: 8px 12px;\n  border-radius: 6px;\n  background: #f7f7f7;\n  color: #333;\n  font-size: 13px;\n}\n\n.audio-box {\n  width: 325px;\n  height: 63px;\n  background: #f6f6f6;\n  border-radius: 10px;\n}\n\n.audio-box > img {\n  width: 23px;\n  height: 27px;\n  padding: 18px 14px 18px 25px;\n  vertical-align: top;\n  display: inline-block;\n}\n\n.audio-box > span {\n  line-height: 63px;\n  font-size: 14px;\n}\n\n.wall {\n  width: 100%;\n  height: 100px;\n  margin-top: 15px;\n}\n\n.btn-box {\n  width: 100vw;\n  height: 101px;\n  position: fixed;\n  bottom: 0;\n  background: #fff;\n}\n\n.next-btn,\n.sumbit-btn {\n  width: 320px;\n  height: 45px;\n  border-radius: 23px;\n  margin: 0 auto;\n  text-align: center;\n  line-height: 45px;\n  font-size: 14px;\n}\n\n.next-btn {\n  border: 1px solid #003f88;\n  color: #003f88;\n  background-color: #fff;\n}\n\n.sumbit-btn {\n  border: 1px solid #003f88;\n  background-color: #003f88;\n  color: #fff;\n}\n\n.sumbit-btn.disabled,\n.next-btn.disabled {\n  border-color: #c5c5c5;\n  background: #c5c5c5;\n  color: #fff;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MiniPaper.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MiniPaper.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./MiniPaper.vue?vue&type=template&id=06aa7dc1&scoped=true\"\nimport script from \"./MiniPaper.vue?vue&type=script&lang=js\"\nexport * from \"./MiniPaper.vue?vue&type=script&lang=js\"\nimport style0 from \"./MiniPaper.vue?vue&type=style&index=0&id=06aa7dc1&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"06aa7dc1\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"ai\"},[_c('van-nav-bar',{attrs:{\"title\":\"能力自测\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticClass:\"main-content\"},[_c('div',{staticClass:\"content-title\"},[_vm._v(\"考试说明\")]),_vm._m(0),_c('div',{staticClass:\"audio-test\"},[_c('audio',{ref:\"audioPlayer\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/test.mp3\"},on:{\"timeupdate\":_vm.updateTime,\"loadedmetadata\":_vm.loadMetadata,\"canplay\":_vm.canPlay}}),_c('img',{staticClass:\"next-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/last.png\"}}),(_vm.audio_status == 1)?_c('img',{staticClass:\"start-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/start.png\"},on:{\"click\":_vm.audioPlay}}):_vm._e(),(_vm.audio_status == 2)?_c('img',{staticClass:\"start-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/zanting.png\"},on:{\"click\":_vm.audioPause}}):_vm._e(),_c('img',{staticClass:\"next-img\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/next.png\"}})]),_c('div',{staticClass:\"start-test\",on:{\"click\":_vm.to_paper}},[_vm._v(\"开始测试\")])])],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"paper-desc\"},[_c('div',[_vm._v(\" 1、请务必仔细聆听本段考试说明，说明会覆盖具体题型、考试要求，和试音。\"),_c('br'),_vm._v(\" 2、本次测试限时10分钟，在测试过程中，中途不允许退出。\"),_c('br'),_vm._v(\" 3、此次测试共涵盖听力、阅读两个部分，每部分各3个题。题目只能依序作答，既不可跳过，也不能回退。\"),_c('br'),_vm._v(\" 4、听力部分的每段语音仅会朗读一遍，请务必保证您的手机未处于静音状态，且音量已调整至适宜大小。\"),_c('br'),_vm._v(\" 5、在正式测试开始之前，您可以点击下方的语音图标来测试手机音量。\"),_c('br'),_vm._v(\" 6、倘若您已做好准备，请点击“开始测试”。 \")])])\n}]\n\nexport { render, staticRenderFns }","<template>\r\n  <div class=\"ai\">\r\n    <van-nav-bar title=\"能力自测\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n\r\n    <div class=\"main-content\">\r\n      <div class=\"content-title\">考试说明</div>\r\n      <div class=\"paper-desc\">\r\n        <div>\r\n          1、请务必仔细聆听本段考试说明，说明会覆盖具体题型、考试要求，和试音。<br>\r\n          2、本次测试限时10分钟，在测试过程中，中途不允许退出。<br>\r\n          3、此次测试共涵盖听力、阅读两个部分，每部分各3个题。题目只能依序作答，既不可跳过，也不能回退。<br>\r\n          4、听力部分的每段语音仅会朗读一遍，请务必保证您的手机未处于静音状态，且音量已调整至适宜大小。<br>\r\n          5、在正式测试开始之前，您可以点击下方的语音图标来测试手机音量。<br>\r\n          6、倘若您已做好准备，请点击“开始测试”。\r\n        </div>\r\n      </div>\r\n      <div class=\"audio-test\">\r\n        <audio ref=\"audioPlayer\" @timeupdate=\"updateTime\" @loadedmetadata=\"loadMetadata\" @canplay=\"canPlay\"\r\n          src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/test.mp3\">\r\n        </audio>\r\n        <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/last.png\" class=\"next-img\" />\r\n        <img v-if=\"audio_status == 1\"\r\n          src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/start.png\" @click=\"audioPlay\"\r\n          class=\"start-img\" />\r\n        <img v-if=\"audio_status == 2\"\r\n          src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/zanting.png\" @click=\"audioPause\"\r\n          class=\"start-img\" />\r\n        <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/next.png\" class=\"next-img\" />\r\n      </div>\r\n      <div class=\"start-test\" @click=\"to_paper\">开始测试</div>\r\n    </div>\r\n  </div>\r\n</template>\r\n<script>\r\nimport { StartMiniPaperTo } from '@/api/exam'\r\nexport default {\r\n  name: 'Ai',\r\n  data() {\r\n    return {\r\n      audio_status: 1,\r\n      play: false,\r\n      count_load: 0\r\n    }\r\n  },\r\n  methods: {\r\n    async onClickLeft() {\r\n      history.back()\r\n    },\r\n    async to_paper() {\r\n      try {\r\n        const user = JSON.parse(localStorage.getItem('user'))\r\n        if (user && user.sid) {\r\n          const response = await StartMiniPaperTo(user.sid)\r\n          const data = response.data\r\n          this.$router.push({ name: 'MiniPaper', query: { paper_id: data, count_load: 0, has_time: 600000 } })\r\n        } else {\r\n          console.error('用户未登录或没有找到sid')\r\n        }\r\n      } catch (error) {\r\n        console.error('Login Failed:', error)\r\n      }\r\n\r\n\r\n    },\r\n    async audioPlay() {\r\n      this.audio_status = 2\r\n      this.$refs.audioPlayer.play();\r\n    },\r\n    \r\n    async audioPause() {\r\n      this.$refs.audioPlayer.pause();\r\n      this.audio_status = 1\r\n    },\r\n    updateTime(event) {\r\n      const audio = event.target;\r\n      this.currentTime = this.formatTime(audio.currentTime);\r\n      console.log(audio.currentTime)\r\n      console.log(audio.duration)\r\n      this.percentage = Math.floor((audio.currentTime / audio.duration) * 100);\r\n    },\r\n    loadMetadata(event) {\r\n      const audio = event.target;\r\n      this.duration = this.formatTime(audio.duration);\r\n    },\r\n    canPlay() {\r\n      console.log('Audio can play through.');\r\n    },\r\n    formatTime(seconds) {\r\n      const m = Math.floor(seconds / 60) % 60;\r\n      const s = Math.floor(seconds) % 60;\r\n      return `${m.toString().padStart(2, '0')}:${s.toString().padStart(2, '0')}`;\r\n    },\r\n  },\r\n  mounted() {\r\n    // 在组件挂载后立即获取任务数据\r\n\r\n  }\r\n}\r\n</script>\r\n<style scoped>\r\n.main-content {\r\n  width: 325px;\r\n  height: auto;\r\n  margin: 0 auto;\r\n  text-align: left;\r\n}\r\n\r\n.content-title {\r\n  font-size: 26px;\r\n  font-weight: bold;\r\n}\r\n\r\n.paper-desc {\r\n  color: #979797;\r\n  font-size: 14px;\r\n  line-height: 30px;\r\n}\r\n\r\n.audio-test {\r\n  width: 115px;\r\n  height: 50px;\r\n  margin: 30px auto 80px auto;\r\n}\r\n\r\n.start-img {\r\n  width: 50px;\r\n  height: 50px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  margin: 0 12px;\r\n}\r\n\r\n.next-img {\r\n  width: 20px;\r\n  height: 20px;\r\n  vertical-align: top;\r\n  display: inline-block;\r\n  padding-top: 13px;\r\n}\r\n\r\n.start-test {\r\n  width: 320px;\r\n  height: 45px;\r\n  background: #003F88;\r\n  border-radius: 23px;\r\n  position: fixed;\r\n  bottom: 47px;\r\n  color: #FFFFFF;\r\n  left: 30px;\r\n  text-align: center;\r\n  line-height: 45px;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PaperNotice.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PaperNotice.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PaperNotice.vue?vue&type=template&id=7286e2a1&scoped=true\"\nimport script from \"./PaperNotice.vue?vue&type=script&lang=js\"\nexport * from \"./PaperNotice.vue?vue&type=script&lang=js\"\nimport style0 from \"./PaperNotice.vue?vue&type=style&index=0&id=7286e2a1&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"7286e2a1\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"exam\"},[_c('van-nav-bar',{attrs:{\"title\":\"自测记录\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_c('div',{staticClass:\"main\"},_vm._l((_vm.exam_list),function(item,index){return _c('div',{key:index,staticClass:\"acitve-item\"},[_c('div',{staticClass:\"micra-info\",on:{\"click\":function($event){return _vm.to_detail_exam(item.id)}}},[_c('div',{staticClass:\"micra-title\"},[_c('div',{staticClass:\"exam-name\"},[_vm._v(_vm._s(item.start_time))]),_c('div',{staticClass:\"exam-status\"},[_vm._v(\"去查看\")])]),_c('div',{staticClass:\"active-time\"},[_c('div',{staticClass:\"time-info\"},[_vm._v(_vm._s(item.right_count)+\"/\"+_vm._s(item.total_count))])])])])}),0)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"exam\">\r\n        <van-nav-bar title=\"自测记录\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <div class=\"main\">\r\n            <div class=\"acitve-item\" v-for=\"(item, index) in exam_list\" :key=\"index\">\r\n                <div class=\"micra-info\" @click=\"to_detail_exam(item.id)\">\r\n                    <div class=\"micra-title\">\r\n                        <div class=\"exam-name\">{{ item.start_time }}</div>\r\n                        <div class=\"exam-status\">去查看</div>\r\n                    </div>\r\n                    <div class=\"active-time\">\r\n                        <div class=\"time-info\">{{ item.right_count }}/{{ item.total_count }}</div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</template>\r\n<script>\nimport { getMiniPaperHisList } from '@/api/exam'\nexport default {\n    name: 'exam',\r\n    data() {\r\n        return {\r\n            exam_list: [],\r\n        }\r\n    },\r\n    watch: {\r\n        '$route.path': function (newPath) {\r\n            this.active = newPath // 路由变化时更新激活的路由\r\n        }\r\n    },\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        async getPaperList() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    const response = await getMiniPaperHisList(user.sid)\r\n                    const data = response.data\r\n\r\n                    console.log(data)\r\n                    this.exam_list = data\r\n                } else {\r\n                    console.log('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.log('Login Failed:', error)\r\n            }\r\n        },\n        to_detail_exam(pc_id) {\n            this.$router.push({ name: 'ExamReport', query: { pc_id } })\n        },\n    },\r\n    mounted() {\r\n        this.getPaperList()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n.acitve-item {\r\n    width: 330px;\r\n    height: auto;\r\n    border-bottom: 1px solid #E4E4E4;\r\n    margin: 10px auto;\r\n}\r\n\r\n.micra-info {\r\n    width: 330px;\r\n    padding-left: 14px;\r\n    padding-top: 15px;\r\n}\r\n\r\n.micra-title {\r\n    width: 330px;\r\n    height: auto;\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n}\r\n\r\n.exam-name {\r\n    width: 230px;\r\n    height: auto;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.active-time {\r\n    width: 302px;\r\n    height: 32px;\r\n    border-radius: 5px;\r\n    line-height: 32px;\r\n    font-size: 12px;\r\n}\r\n\r\n.time-info {\r\n    width: 180px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    text-align: left;\r\n    color: #979797;\r\n}\r\n\r\n.exam-status {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    padding-left: 30px;\r\n    color: #2FBE5A;\r\n    width: 50px;\r\n    height: auto;\r\n    font-weight: normal;\r\n}\r\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./examList.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./examList.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./examList.vue?vue&type=template&id=1dcc63ac&scoped=true\"\nimport script from \"./examList.vue?vue&type=script&lang=js\"\nexport * from \"./examList.vue?vue&type=script&lang=js\"\nimport style0 from \"./examList.vue?vue&type=style&index=0&id=1dcc63ac&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"1dcc63ac\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"exam\"},[_c('van-nav-bar',{attrs:{\"title\":\"自测详情\",\"left-text\":\"返回\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}}),_vm._l((_vm.exam_list),function(item,index){return _c('div',{key:index,staticClass:\"praxis-info\"},[(item.type == 1)?_c('div',{staticClass:\"quest-item\"},[_vm._m(0,true),_c('div',{staticClass:\"quest-option\",on:{\"click\":function($event){return _vm.check_short_conver('A')}}},[_c('div',{staticClass:\"answer-title\",class:{ 'checked': item.result.shortConversationList[0].answer == 'A' }},[_vm._v(\"A \")]),_c('div',{staticClass:\"answer-desc\"},[_vm._v(_vm._s(item.listeningShortConversationQuestion.optionA))])]),_c('div',{staticClass:\"quest-option\",on:{\"click\":function($event){return _vm.check_short_conver('B')}}},[_c('div',{staticClass:\"answer-title\",class:{ 'checked': item.result.shortConversationList[0].answer == 'B' }},[_vm._v(\"B \")]),_c('div',{staticClass:\"answer-desc\"},[_vm._v(_vm._s(item.listeningShortConversationQuestion.optionB))])]),_c('div',{staticClass:\"quest-option\",on:{\"click\":function($event){return _vm.check_short_conver('C')}}},[_c('div',{staticClass:\"answer-title\",class:{ 'checked': item.result.shortConversationList[0].answer == 'C' }},[_vm._v(\"C \")]),_c('div',{staticClass:\"answer-desc\"},[_vm._v(_vm._s(item.listeningShortConversationQuestion.optionC))])]),_c('div',{staticClass:\"quest-option\",on:{\"click\":function($event){return _vm.check_short_conver('D')}}},[_c('div',{staticClass:\"answer-title\",class:{ 'checked': item.result.shortConversationList[0].answer == 'D' }},[_vm._v(\"D \")]),_c('div',{staticClass:\"answer-desc\"},[_vm._v(_vm._s(item.listeningShortConversationQuestion.optionD))])]),(item.score > 0)?_c('div',{staticClass:\"right-ok\"},[_vm._v(\" 结果：正确 \")]):_c('div',{staticClass:\"waring\"},[_vm._v(\" 结果：错误，正确答案\"+_vm._s(item.listeningShortConversationQuestion.answer)+\" \")])]):_vm._e(),(item.type == 2)?_c('div',{staticClass:\"quest-item\"},[_c('div',{staticClass:\"detail-tltle\"},[_c('P',[_vm._v(\"原文：\"+_vm._s(item.readingPassage.context))]),_c('p',[_vm._v(\" \"+_vm._s(item.readingPassageQuestion.question))])],1),_c('div',{staticClass:\"quest-option\"},[_c('div',{staticClass:\"answer-title\",class:{ 'checked': item.result.readingPassageList[0].answer == 'A' }},[_vm._v(\"A \")]),_c('div',{staticClass:\"answer-desc\"},[_vm._v(_vm._s(item.readingPassageQuestion.optionA))])]),_c('div',{staticClass:\"quest-option\"},[_c('div',{staticClass:\"answer-title\",class:{ 'checked': item.result.readingPassageList[0].answer == 'B' }},[_vm._v(\"B \")]),_c('div',{staticClass:\"answer-desc\"},[_vm._v(_vm._s(item.readingPassageQuestion.optionB))])]),_c('div',{staticClass:\"quest-option\"},[_c('div',{staticClass:\"answer-title\",class:{ 'checked': item.result.readingPassageList[0].answer == 'C' }},[_vm._v(\"C \")]),_c('div',{staticClass:\"answer-desc\"},[_vm._v(_vm._s(item.readingPassageQuestion.optionC))])]),_c('div',{staticClass:\"quest-option\"},[_c('div',{staticClass:\"answer-title\",class:{ 'checked': item.result.readingPassageList[0].answer == 'D' }},[_vm._v(\"D \")]),_c('div',{staticClass:\"answer-desc\"},[_vm._v(_vm._s(item.readingPassageQuestion.optionD))])]),(item.score > 0)?_c('div',{staticClass:\"right-ok\"},[_vm._v(\" 结果：正确 \")]):_c('div',{staticClass:\"waring\"},[_vm._v(\" 结果：错误，正确答案\"+_vm._s(item.readingPassageQuestion.answer)+\" \")])]):_vm._e()])})],2)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"detail-tltle\"},[_c('p',[_vm._v(\" Directions: In this section, you will hear a short conversation. At the end of each conversation, one question will be asked about what was said. Both the conversation and the question will be spoken only once. After each question, there will be a pause. During the pause, you must read the four choices marked A, B, C and D and decide which is the best answer.\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"exam\">\r\n        <van-nav-bar title=\"自测详情\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\r\n        <div class=\"praxis-info\" v-for=\"(item, index) in exam_list\" :key=\"index\">\r\n            <div class=\"quest-item\" v-if=\"item.type == 1\">\r\n                <div class=\"detail-tltle\">\r\n                    <p> Directions: In this section, you will hear a short conversation. At the end of each\r\n                        conversation,\r\n                        one\r\n                        question will be asked about what was said. Both the conversation and the question will be\r\n                        spoken\r\n                        only once.\r\n                        After each question, there will be a pause. During the pause, you must read the four choices\r\n                        marked\r\n                        A, B, C and D and\r\n                        decide which is the best answer.</p>\r\n                </div>\r\n                <div class=\"quest-option\" @click=\"check_short_conver('A')\">\r\n                    <div class=\"answer-title\"\r\n                        :class=\"{ 'checked': item.result.shortConversationList[0].answer == 'A' }\">A\r\n                    </div>\r\n                    <div class=\"answer-desc\">{{ item.listeningShortConversationQuestion.optionA }}</div>\r\n                </div>\r\n                <div class=\"quest-option\" @click=\"check_short_conver('B')\">\r\n                    <div class=\"answer-title\"\r\n                        :class=\"{ 'checked': item.result.shortConversationList[0].answer == 'B' }\">B\r\n                    </div>\r\n                    <div class=\"answer-desc\">{{ item.listeningShortConversationQuestion.optionB }}</div>\r\n                </div>\r\n                <div class=\"quest-option\" @click=\"check_short_conver('C')\">\r\n                    <div class=\"answer-title\"\r\n                        :class=\"{ 'checked': item.result.shortConversationList[0].answer == 'C' }\">C\r\n                    </div>\r\n                    <div class=\"answer-desc\">{{ item.listeningShortConversationQuestion.optionC }}</div>\r\n                </div>\r\n                <div class=\"quest-option\" @click=\"check_short_conver('D')\">\r\n                    <div class=\"answer-title\"\r\n                        :class=\"{ 'checked': item.result.shortConversationList[0].answer == 'D' }\">D\r\n                    </div>\r\n                    <div class=\"answer-desc\">{{ item.listeningShortConversationQuestion.optionD }}</div>\r\n                </div>\r\n\r\n                <div class=\"right-ok\" v-if=\"item.score > 0\">\r\n                    结果：正确\r\n                </div>\r\n                <div class=\"waring\" v-else>\r\n                    结果：错误，正确答案{{ item.listeningShortConversationQuestion.answer }}\r\n                </div>\r\n            </div>\r\n            <div class=\"quest-item\" v-if=\"item.type == 2\">\r\n                <div class=\"detail-tltle\">\r\n                    <P>原文：{{ item.readingPassage.context }}</P>\r\n                    <p> {{ item.readingPassageQuestion.question }}</p>\r\n                </div>\r\n                <div class=\"quest-option\">\r\n                    <div class=\"answer-title\" :class=\"{ 'checked': item.result.readingPassageList[0].answer == 'A' }\">A\r\n                    </div>\r\n                    <div class=\"answer-desc\">{{ item.readingPassageQuestion.optionA }}</div>\r\n                </div>\r\n                <div class=\"quest-option\">\r\n                    <div class=\"answer-title\" :class=\"{ 'checked': item.result.readingPassageList[0].answer == 'B' }\">B\r\n                    </div>\r\n                    <div class=\"answer-desc\">{{ item.readingPassageQuestion.optionB }}</div>\r\n                </div>\r\n                <div class=\"quest-option\">\r\n                    <div class=\"answer-title\" :class=\"{ 'checked': item.result.readingPassageList[0].answer == 'C' }\">C\r\n                    </div>\r\n                    <div class=\"answer-desc\">{{ item.readingPassageQuestion.optionC }}</div>\r\n                </div>\r\n                <div class=\"quest-option\">\r\n                    <div class=\"answer-title\" :class=\"{ 'checked': item.result.readingPassageList[0].answer == 'D' }\">D\r\n                    </div>\r\n                    <div class=\"answer-desc\">{{ item.readingPassageQuestion.optionD }}</div>\r\n                </div>\r\n                <div class=\"right-ok\" v-if=\"item.score > 0\">\r\n                    结果：正确\r\n                </div>\r\n                <div class=\"waring\" v-else>\r\n                    结果：错误，正确答案{{ item.readingPassageQuestion.answer }}\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</template>\r\n<script>\r\nimport { getMiniPaperRow } from '@/api/exam'\r\nexport default {\r\n    name: 'exam',\r\n    data() {\r\n        return {\r\n            exam_list: [],\r\n            pc_id: 0,\r\n            userInfo: []\r\n        }\r\n    },\r\n    watch: {\r\n        '$route.path': function (newPath) {\r\n            this.active = newPath // 路由变化时更新激活的路由\r\n        }\r\n    },\r\n    methods: {\r\n        async onClickLeft() {\r\n            history.back()\r\n        },\r\n        async getPaperInfo() {\r\n            try {\r\n                const user = JSON.parse(localStorage.getItem('user'))\r\n                if (user && user.sid) {\r\n                    this.userInfo = user\r\n                    const response = await getMiniPaperRow(this.pc_id)\r\n                    var data = response.data\r\n                    data.forEach(val => {\r\n                        val.result = JSON.parse(val.result)\r\n                    })\r\n                    this.exam_list = data\r\n                    console.log(this.exam_list)\r\n                } else {\r\n                    console.log('用户未登录或没有找到sid')\r\n                }\r\n            } catch (error) {\r\n                console.log('Login Failed:', error)\r\n            }\r\n        },\r\n    },\r\n    mounted() {\r\n        this.pc_id = this.$route.query.pc_id;\r\n        this.getPaperInfo()\r\n    }\r\n}\r\n</script>\r\n<style scoped>\r\n.right-ok,\r\n.waring {\r\n    width: 100%;\r\n    height: 60px;\r\n    line-height: 60px;\r\n    font-size: 20px;\r\n    color: green;\r\n}\r\n\r\n.waring {\r\n    color: red;\r\n}\r\n\r\n.exam {\r\n    width: 95vw;\r\n    height: 100vh;\r\n    background-color: #F8F8F8;\r\n    margin: 20px auto;\r\n}\r\n\r\nquest-option {\r\n    width: 325px;\r\n    margin: 7px 0;\r\n    display: flex;\r\n    justify-content: center;\r\n    align-items: center;\r\n}\r\n\r\n.quest-option1 {\r\n    width: 45px;\r\n    margin: 7px 0;\r\n    display: flex;\r\n    justify-content: center;\r\n    align-items: center;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.answer-title {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 35px;\r\n    height: 35px;\r\n    background-color: lightgray;\r\n    border-radius: 35px;\r\n    line-height: 35px;\r\n    text-align: center;\r\n}\r\n\r\n.checked {\r\n    background: linear-gradient(180deg, #4499EE 0%, #9CE4FF 100%);\r\n}\r\n\r\n.answer-desc {\r\n    padding-left: 10px;\r\n    font-size: 14px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n    width: 300px;\r\n}\r\n\r\n.audio-box {\r\n    width: 325px;\r\n    height: 63px;\r\n    background: #F6F6F6;\r\n    border-radius: 10px;\r\n}\r\n\r\n.audio-box>img {\r\n    width: 23px;\r\n    height: 27px;\r\n    padding: 18px 14px 18px 25px;\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.audio-box>span {\r\n    line-height: 63px;\r\n    font-size: 14px;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./examReport.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./examReport.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./examReport.vue?vue&type=template&id=7bcac378&scoped=true\"\nimport script from \"./examReport.vue?vue&type=script&lang=js\"\nexport * from \"./examReport.vue?vue&type=script&lang=js\"\nimport style0 from \"./examReport.vue?vue&type=style&index=0&id=7bcac378&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"7bcac378\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-layout\"},[_c('div',{staticClass:\"pc-stage\",style:(_vm.stageStyle)},[_c('header',{staticClass:\"pc-header\"},[_c('div',{staticClass:\"brand\"},[_c('img',{staticClass:\"brand-mark\",attrs:{\"src\":_vm.logoSrc,\"alt\":\"慧学外语\"}}),_c('span',[_vm._v(\"慧学外语\")])]),_c('nav',{staticClass:\"pc-nav\"},_vm._l((_vm.navList),function(item){return _c('router-link',{key:item.path,staticClass:\"pc-nav-item\",attrs:{\"to\":item.path,\"replace\":\"\"}},[_c('img',{attrs:{\"src\":_vm.$route.path === item.path ? item.active : item.icon,\"alt\":item.title}}),_c('span',[_vm._v(_vm._s(item.title))])])}),1),_c('div',{staticClass:\"user-mini\"},[_c('span',[_vm._v(_vm._s(_vm.userInfo.name || '同学'))]),_c('img',{attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png\"}})])]),_c('main',{staticClass:\"pc-main\"},[_c('router-view')],1)])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-layout\">\n    <div class=\"pc-stage\" :style=\"stageStyle\">\n      <header class=\"pc-header\">\n        <div class=\"brand\">\n          <img class=\"brand-mark\" :src=\"logoSrc\" alt=\"慧学外语\" />\n          <span>慧学外语</span>\n        </div>\n        <nav class=\"pc-nav\">\n          <router-link\n            v-for=\"item in navList\"\n            :key=\"item.path\"\n            :to=\"item.path\"\n            replace\n            class=\"pc-nav-item\"\n          >\n            <img :src=\"$route.path === item.path ? item.active : item.icon\" :alt=\"item.title\" />\n            <span>{{ item.title }}</span>\n          </router-link>\n        </nav>\n        <div class=\"user-mini\">\n          <span>{{ userInfo.name || '同学' }}</span>\n          <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png\" />\n        </div>\n      </header>\n      <main class=\"pc-main\">\n        <router-view></router-view>\n      </main>\n    </div>\n  </div>\n</template>\n\n<script>\nexport default {\n  name: 'PcLayout',\n  data() {\n    return {\n      userInfo: JSON.parse(localStorage.getItem('user')) || {},\n      designWidth: 1158,\n      designHeight: 655,\n      scale: 1,\n      logoSrc: require('@/assets/pc/logo.png'),\n      navList: [\n        { path: '/pc/home', title: '首页', icon: require('@/assets/pc/home.png'), active: require('@/assets/pc/home-active.png') },\n        { path: '/pc/exam', title: '测试', icon: require('@/assets/pc/exam.png'), active: require('@/assets/pc/exam-active.png') },\n        { path: '/pc/ai', title: 'AI伴学', icon: require('@/assets/pc/ai.png'), active: require('@/assets/pc/ai-active.png') },\n        { path: '/pc/plant', title: '计划', icon: require('@/assets/pc/plant.png'), active: require('@/assets/pc/plant-active.png') },\n        { path: '/pc/mine', title: '我的', icon: require('@/assets/pc/mine.png'), active: require('@/assets/pc/mine-active.png') }\n      ]\n    }\n  },\n  computed: {\n    stageStyle() {\n      return {\n        width: `${this.designWidth}px`,\n        height: `${this.designHeight}px`,\n        transform: `translate(-50%, -50%) scale(${this.scale})`\n      }\n    }\n  },\n  methods: {\n    updateScale() {\n      const width = window.innerWidth || document.documentElement.clientWidth || this.designWidth\n      const height = window.innerHeight || document.documentElement.clientHeight || this.designHeight\n      this.scale = Math.min(width / this.designWidth, height / this.designHeight)\n    }\n  },\n  mounted() {\n    this.updateScale()\n    window.addEventListener('resize', this.updateScale)\n  },\n  beforeDestroy() {\n    window.removeEventListener('resize', this.updateScale)\n  }\n}\n</script>\n\n<style scoped>\n.pc-layout {\n  width: 100vw;\n  height: 100vh;\n  overflow: hidden;\n  background: #F6F6F6;\n  color: #0f1f33;\n  position: relative;\n}\n\n.pc-stage {\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  transform-origin: center center;\n  background: #dcecff;\n  box-sizing: border-box;\n}\n\n.pc-header {\n  height: 40px;\n  display: flex;\n  align-items: center;\n  box-sizing: border-box;\n  padding: 0 22px;\n  background: #FFF;\n  border-bottom: 1px solid rgba(142, 172, 205, 0.22);\n}\n\n.brand {\n  width: 160px;\n  display: flex;\n  align-items: center;\n  font-size: 12px;\n  font-weight: 700;\n  color: #102238;\n}\n\n.brand-mark {\n  width: 42px;\n  height: 24px;\n  margin-right: 6px;\n  object-fit: contain;\n}\n\n.pc-nav {\n  display: flex;\n  align-items: center;\n  gap: 20px;\n}\n\n.pc-nav-item {\n  display: flex;\n  align-items: center;\n  gap: 5px;\n  color: #344a66;\n  font-size: 12px;\n  line-height: 18px;\n  text-decoration: none;\n}\n\n.pc-nav-item.router-link-active {\n  color: #0d5aa8;\n  font-weight: 700;\n}\n\n.pc-nav-item img {\n  width: 16px;\n  height: 16px;\n  object-fit: contain;\n}\n\n.user-mini {\n  margin-left: auto;\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  font-size: 12px;\n}\n\n.user-mini img {\n  width: 18px;\n  height: 18px;\n  border-radius: 50%;\n}\n\n.pc-main {\n  box-sizing: border-box;\n  padding: 20px 22px 32px;\n}\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcLayout.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcLayout.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcLayout.vue?vue&type=template&id=b4cfad48&scoped=true\"\nimport script from \"./PcLayout.vue?vue&type=script&lang=js\"\nexport * from \"./PcLayout.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcLayout.vue?vue&type=style&index=0&id=b4cfad48&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"b4cfad48\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-home\"},[_c('div',{staticClass:\"main-col\"},[_c('section',{staticClass:\"panel quick-panel\"},[_c('div',{staticClass:\"panel-head\"},[_c('PanelTitle',{attrs:{\"title\":\"常用功能\"}}),_c('div',{staticClass:\"language-switch\",attrs:{\"role\":\"group\",\"aria-label\":\"学习语言\"}},[_c('span',[_vm._v(\"学习语言\")]),_vm._l((_vm.languageOptions),function(item){return _c('button',{key:item.value,class:{ active: _vm.studyLanguage === item.value },attrs:{\"type\":\"button\",\"aria-pressed\":_vm.studyLanguage === item.value},on:{\"click\":function($event){return _vm.changeLanguage(item.value)}}},[_vm._v(_vm._s(item.label))])})],2)],1),_c('div',{staticClass:\"quick-list\"},_vm._l((_vm.fastList),function(item){return _c('div',{key:item.id || item.name,staticClass:\"quick-item\",on:{\"click\":function($event){return _vm.toPage(item)}}},[_c('img',{attrs:{\"src\":item.img_url}}),_c('span',[_vm._v(_vm._s(item.name))])])}),0)]),_c('div',{staticClass:\"middle-grid\"},[_c('section',{staticClass:\"panel data-panel\"},[_c('PanelTitle',{attrs:{\"title\":\"学习数据\"}}),_c('div',{staticClass:\"data-list\"},[_c('div',{staticClass:\"data-item\"},[_c('span',[_vm._v(\"今日时长\")]),_c('strong',[_vm._v(_vm._s(_vm.countTask.today_minutes)),_c('em',[_vm._v(\"/\"+_vm._s(_vm.countTask.plan_minutes)+\"min\")])])]),_c('div',{staticClass:\"data-item clickable\",on:{\"click\":_vm.toCalendar}},[_c('span',[_vm._v(\"本月打卡\")]),_c('strong',[_vm._v(_vm._s(_vm.countSign)),_c('em',[_vm._v(\"天\")])])]),_c('div',{staticClass:\"data-item\"},[_c('span',[_vm._v(\"E-talk时长\")]),_c('strong',[_vm._v(_vm._s(_vm.countTask.etalk_total_minutes)),_c('em',[_vm._v(\"min\")])])]),_c('div',{staticClass:\"data-item clickable\",on:{\"click\":_vm.toTodayTask}},[_c('span',[_vm._v(\"今日任务 >\")]),_c('strong',[_vm._v(_vm._s(_vm.countTask.total_finish_count)),_c('em',[_vm._v(\"/\"+_vm._s(_vm.countTask.total_task_count)+\"个\")])])])])],1),_c('section',{staticClass:\"panel now-panel\"},[_c('div',{staticClass:\"panel-head\"},[_c('PanelTitle',{attrs:{\"title\":\"正在学\"}}),_c('button',{attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.toStudyList(0)}}},[_vm._v(\"全部>\")])],1),(_vm.currentCourse)?_c('div',{staticClass:\"now-course\",on:{\"click\":function($event){return _vm.toPraxis(_vm.currentCourse)}}},[_c('img',{attrs:{\"src\":_vm.currentCourse.cover}}),_c('div',{staticClass:\"course-info\"},[_c('div',{staticClass:\"course-title\"},[_vm._v(_vm._s(_vm.categoryText(_vm.currentCourse.category_id))+_vm._s(_vm.currentCourse.name))])]),_c('button',{attrs:{\"type\":\"button\"}},[_vm._v(\"开始学习\")])]):_c('div',{staticClass:\"empty-line\"},[_vm._v(\"暂无正在学习内容\")]),(_vm.currentCourses.length > 1)?_c('div',{staticClass:\"dots\"},_vm._l((_vm.currentCourses),function(item,index){return _c('span',{key:item.id || index,class:{ active: index === _vm.currentCourseIndex },on:{\"click\":function($event){return _vm.setCurrentCourse(index)}}})}),0):_vm._e()])]),_c('section',{staticClass:\"panel recommend-panel\"},[_c('div',{staticClass:\"panel-head\"},[_c('PanelTitle',{attrs:{\"title\":\"推荐学\"}}),_c('button',{attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.toStudyList(1)}}},[_vm._v(\"全部>\")])],1),_c('div',{staticClass:\"recommend-list\"},_vm._l((_vm.recommendCourses),function(item){return _c('div',{key:item.id,staticClass:\"recommend-card\",on:{\"click\":function($event){return _vm.toPraxis(item)}}},[_c('div',{staticClass:\"cover-wrap\"},[_c('img',{attrs:{\"src\":item.cover}}),_c('span',[_vm._v(\"继续学习\")])]),_c('div',{staticClass:\"recommend-title\"},[_vm._v(_vm._s(item.name))]),_c('div',{staticClass:\"tag-row\"},[_c('span',[_vm._v(_vm._s(_vm.categoryName(item.category_id)))]),_c('span',[_vm._v(_vm._s(item.subject_name || item.subject || '生命与健康'))])])])}),0)])]),_c('aside',{staticClass:\"side-col\"},[_c('section',{staticClass:\"panel calendar-panel\"},[_c('PanelTitle',{attrs:{\"title\":\"签到日历\"}}),_c('div',{staticClass:\"calendar-top\"},[_c('button',{attrs:{\"type\":\"button\"},on:{\"click\":_vm.prevMonth}},[_vm._v(\"‹\")]),_c('span',[_vm._v(_vm._s(_vm.calendarTitle))]),_c('button',{attrs:{\"type\":\"button\"},on:{\"click\":_vm.nextMonth}},[_vm._v(\"›\")])]),_c('div',{staticClass:\"week-row\"},_vm._l((_vm.weekList),function(item){return _c('span',{key:item},[_vm._v(_vm._s(item))])}),0),_c('div',{staticClass:\"date-grid\"},_vm._l((_vm.calendarDays),function(item){return _c('span',{key:item.key,class:{ muted: item.muted, signed: item.signed, today: item.today }},[_vm._v(\" \"+_vm._s(item.today ? '今天' : item.day)+\" \")])}),0),_c('div',{staticClass:\"calendar-note\"},[_vm._v(\"本月已连续打卡\"+_vm._s(_vm.maxContinuousDays)+\"天，累计打卡\"+_vm._s(_vm.countSign)+\"天\")])],1),_c('section',{staticClass:\"panel notice-panel\"},[_c('PanelTitle',{attrs:{\"title\":\"各类通知\"}}),_c('div',{staticClass:\"tabs\"},_vm._l((_vm.noticeTabs),function(item){return _c('span',{key:item.key,class:{ active: _vm.noticeActive === item.key },on:{\"click\":function($event){return _vm.changeNoticeTab(item.key)}}},[_vm._v(\" \"+_vm._s(item.label)+\" \")])}),0),_c('div',{staticClass:\"notice-list\"},[(_vm.noticeLoading)?_c('div',{staticClass:\"notice-empty\"},[_vm._v(\"加载中..\")]):(_vm.noticeList.length === 0)?_c('div',{staticClass:\"notice-empty\"},[_vm._v(\"暂无通知\")]):_vm._l((_vm.noticeList),function(item,index){return _c('div',{key:index,staticClass:\"notice-item\"},[(_vm.isActivityNotice(item))?_c('button',{staticClass:\"notice-link\",attrs:{\"type\":\"button\",\"disabled\":_vm.noticeOpening},on:{\"click\":function($event){return _vm.openActivityNotice(item)}}},[_c('div',[_c('em',{class:_vm.noticeTypeClass(item)},[_vm._v(\"[\"+_vm._s(_vm.noticeTypeText(item))+\"]\")]),_vm._v(_vm._s(item.title))]),_c('span',[_vm._v(_vm._s(_vm.noticeDateText(item)))])]):[_c('div',[_c('em',{class:_vm.noticeTypeClass(item)},[_vm._v(\"[\"+_vm._s(_vm.noticeTypeText(item))+\"]\")]),_vm._v(_vm._s(item.title))]),_c('span',[_vm._v(_vm._s(_vm.noticeDateText(item)))])]],2)})],2),_vm._m(0)],1)]),_c('PcAiAssistant',{attrs:{\"scene\":\"home\"}})],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"dots\"},[_c('span',{staticClass:\"active\"}),_c('span'),_c('span')])\n}]\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-ai-assistant\",class:{ 'home-scene': _vm.scene === 'home' }},[(!_vm.visible)?_c('button',{staticClass:\"robot-btn\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){_vm.visible = true}}},[_c('img',{attrs:{\"src\":_vm.robotSrc,\"alt\":\"AI\"}})]):_vm._e(),(_vm.visible)?_c('div',{staticClass:\"assistant-mask\"},[_c('section',{staticClass:\"assistant-panel\"},[_c('button',{staticClass:\"close-btn\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){_vm.visible = false}}},[_vm._v(\"×\")]),_c('div',{staticClass:\"assistant-head\"},[_c('img',{attrs:{\"src\":_vm.robotSrc,\"alt\":\"AI\"}}),_c('span',[_vm._v(_vm._s(_vm.sceneConfig.greeting || '嗨，你好，一起开启外语学习吧'))])]),_c('div',{staticClass:\"quick-list\"},_vm._l((_vm.quickList),function(item){return _c('button',{key:item.label,attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.goQuick(item)}}},[_vm._v(\" \"+_vm._s(item.label)+\" \")])}),0),_c('button',{staticClass:\"chat-btn\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.goChat}},[_vm._v(\"去对话\")])])]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-ai-assistant\" :class=\"{ 'home-scene': scene === 'home' }\">\n    <button v-if=\"!visible\" type=\"button\" class=\"robot-btn\" @click=\"visible = true\">\n      <img :src=\"robotSrc\" alt=\"AI\" />\n    </button>\n\n    <div v-if=\"visible\" class=\"assistant-mask\">\n      <section class=\"assistant-panel\">\n        <button type=\"button\" class=\"close-btn\" @click=\"visible = false\">×</button>\n        <div class=\"assistant-head\">\n          <img :src=\"robotSrc\" alt=\"AI\" />\n          <span>{{ sceneConfig.greeting || '嗨，你好，一起开启外语学习吧' }}</span>\n        </div>\n        <div class=\"quick-list\">\n          <button\n            v-for=\"item in quickList\"\n            :key=\"item.label\"\n            type=\"button\"\n            @click=\"goQuick(item)\"\n          >\n            {{ item.label }}\n          </button>\n        </div>\n        <button type=\"button\" class=\"chat-btn\" @click=\"goChat\">去对话</button>\n      </section>\n    </div>\n  </div>\n</template>\n\n<script>\nimport { getEtalkCateList } from '@/api/user'\n\nexport default {\n  name: 'PcAiAssistant',\n  props: {\n    scene: {\n      type: String,\n      default: 'listen'\n    },\n    resourcesId: {\n      type: [String, Number],\n      default: ''\n    }\n  },\n  data() {\n    return {\n      visible: false,\n      writeTopics: [],\n      robotSrc: 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/wyt.gif'\n    }\n  },\n  computed: {\n    sceneConfig() {\n      const configs = {\n        listen: {\n          from: 'listen',\n          title: 'E-Listen',\n          stype: 'listen_guide',\n          quick: [\n            { label: '生成一篇适合我的听力练习段篇章', stype: 'listen', content: 'Generate a listening passage suitable for me and ask a question based on this passage to help me better understand the main idea.' },\n            { label: '介绍提升听力理解的方法', stype: 'listen', content: 'Briefly introduce methods to improve listening comprehension skills (within 60 words).' },\n            { label: '如何在听力练习中抓住主旨要点', stype: 'listen', content: 'Briefly introduce how to grasp the main idea in listening practice (within 60 words).' }\n          ]\n        },\n        'listen-praxis': {\n          from: 'listen',\n          title: 'E-Listen',\n          stype: 'listen_guide',\n          quick: [\n            { label: '概括文章主旨大意', stype: 'listen_gist', content: 'Briefly summarize the main idea of the article (within 60 words).' },\n            { label: '分析文章逻辑结构', stype: 'listen_structure', content: 'Briefly analyze the structure of the article (within 80 words).' },\n            { label: '翻译本篇练习材料', stype: 'translate', content: '翻译本篇练习材料' }\n          ]\n        },\n        read: {\n          from: 'read',\n          title: 'E-Read',\n          stype: 'read',\n          quick: [\n            { label: '生成一篇适合我的阅读练习篇章', stype: 'read', content: 'Generate a reading passage (within 120 words) suitable for me and ask a question based on this passage to help me better understand the main idea.' },\n            { label: '介绍提升阅读理解能力的方法', stype: 'read', content: 'Briefly introduce methods to improve reading comprehension skills (within 60 words).' },\n            { label: '如何在阅读练习中抓住主旨大意', stype: 'read', content: 'Briefly introduce how to grasp the main idea in reading practice (within 60 words).' }\n          ]\n        },\n        'read-praxis': {\n          from: 'read',\n          title: 'E-Read',\n          stype: 'read',\n          quick: [\n            { label: '概括文章主旨大意', stype: 'read_gist', content: 'Briefly summarize the main idea of the article (within 60 words).' },\n            { label: '分析文章逻辑结构', stype: 'read_structure', content: 'Briefly analyze the structure of the article (within 80 words).' },\n            { label: '翻译本篇练习材料', stype: 'translate', content: '翻译本篇练习材料' }\n          ]\n        },\n        'write-index': {\n          from: 'write',\n          title: 'E-Write',\n          stype: 'write_guide',\n          greeting: '嗨，你好，试试慧学外语这些写作主题',\n          quick: this.writeTopics\n        },\n        write: {\n          from: 'write',\n          title: 'E-Write',\n          stype: 'write_subject',\n          quick: [\n            { label: 'Expression', stype: 'write_subject', content: 'Expression' },\n            { label: 'Content', stype: 'write_subject', content: 'Content' },\n            { label: 'Text structure', stype: 'write_subject', content: 'Text structure' }\n          ]\n        },\n        home: {\n          from: 'speak_free',\n          title: '自由对话',\n          stype: 'speak_free',\n          greeting: '嗨，你好，试试慧学外语这些伴学功能',\n          quick: [\n            { label: '\"自由对话\" 口语练习', action: 'free' },\n            { label: '\"主题对话\" 口语练习', action: 'project' },\n            { label: '\"写作练习\" 写作指导', action: 'write' }\n          ]\n        }\n      }\n      return configs[this.scene] || configs.listen\n    },\n    quickList() {\n      return this.sceneConfig.quick\n    }\n  },\n  mounted() {\n    if (this.scene === 'write-index') this.loadWriteTopics()\n  },\n  methods: {\n    async loadWriteTopics() {\n      try {\n        const user = JSON.parse(localStorage.getItem('user') || '{}')\n        if (!user.sid) return\n        const response = await getEtalkCateList({ sid: user.sid })\n        const topics = Array.isArray(response.data) ? response.data.slice() : []\n        const selected = []\n        while (topics.length && selected.length < 3) {\n          const index = Math.floor(Math.random() * topics.length)\n          const [topic] = topics.splice(index, 1)\n          selected.push({ label: topic.name, stype: 'write_subject', content: topic.content })\n        }\n        this.writeTopics = selected\n      } catch (error) {\n        console.error('加载写作主题失败:', error)\n      }\n    },\n    chatQuery(item = {}) {\n      return {\n        project_id: 0,\n        is_history: 0,\n        res_id: this.resourcesId || '',\n        lang_time: 0,\n        filePath: '',\n        type: 0,\n        stype: item.stype || this.sceneConfig.stype,\n        from: this.sceneConfig.from,\n        chat_title: this.sceneConfig.title,\n        system: '',\n        content: item.content || ''\n      }\n    },\n    goQuick(item) {\n      if (item.action === 'free') {\n        this.$router.push({ name: 'PcChatIndex', query: this.chatQuery(item) })\n        return\n      }\n      if (item.action === 'project') {\n        this.$router.push({ name: 'PcEtalkProject' })\n        return\n      }\n      if (item.action === 'write') {\n        this.$router.push({\n          name: 'PcNewChat',\n          query: {\n            ...this.chatQuery(item),\n            stype: 'write',\n            from: 'write',\n            chat_title: '写作练习'\n          }\n        })\n        return\n      }\n      this.$router.push({ name: this.scene === 'home' ? 'PcChatIndex' : 'PcNewChat', query: this.chatQuery(item) })\n    },\n    goChat() {\n      this.$router.push({ name: this.scene === 'home' ? 'PcChatIndex' : 'PcNewChat', query: this.chatQuery() })\n    }\n  }\n}\n</script>\n\n<style scoped>\n.pc-ai-assistant {\n  pointer-events: none;\n}\n\n.robot-btn {\n  position: absolute;\n  right: 18px;\n  bottom: 18px;\n  z-index: 80;\n  width: 58px;\n  height: 58px;\n  padding: 0;\n  border: none;\n  background: transparent;\n  cursor: pointer;\n  pointer-events: auto;\n}\n\n.robot-btn img {\n  width: 58px;\n  height: 58px;\n  object-fit: contain;\n}\n\n.assistant-mask {\n  position: absolute;\n  inset: -40px -22px -32px;\n  z-index: 200;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: rgba(32, 50, 78, 0.36);\n  pointer-events: auto;\n}\n\n.home-scene {\n  position: absolute;\n  inset: 0;\n}\n\n.assistant-panel {\n  width: 328px;\n  min-height: 356px;\n  padding: 26px 16px 22px;\n  border-radius: 12px;\n  background: rgba(239, 247, 254, 0.96);\n  box-sizing: border-box;\n  position: relative;\n  box-shadow: 0 12px 34px rgba(24, 55, 96, 0.18);\n}\n\n.close-btn {\n  position: absolute;\n  right: 14px;\n  top: 10px;\n  width: 26px;\n  height: 26px;\n  border: none;\n  background: transparent;\n  color: #66758a;\n  font-size: 22px;\n  line-height: 20px;\n  cursor: pointer;\n}\n\n.assistant-head {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  color: #34475f;\n  font-size: 13px;\n  line-height: 20px;\n  padding: 0 8px;\n}\n\n.assistant-head img {\n  width: 48px;\n  height: 48px;\n  object-fit: contain;\n}\n\n.quick-list {\n  margin-top: 20px;\n  display: grid;\n  gap: 12px;\n}\n\n.quick-list button {\n  height: 56px;\n  border: none;\n  border-radius: 10px;\n  background: #fff;\n  border: 1px solid #acc5ff;\n  color: #5f6570;\n  font-size: 13px;\n  font-weight: 500;\n  cursor: pointer;\n}\n\n.chat-btn {\n  width: 100%;\n  height: 48px;\n  margin-top: 20px;\n  border: none;\n  border-radius: 10px;\n  background: #00529f;\n  color: #fff;\n  font-size: 16px;\n  cursor: pointer;\n}\n\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcAiAssistant.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcAiAssistant.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcAiAssistant.vue?vue&type=template&id=5ca9091e&scoped=true\"\nimport script from \"./PcAiAssistant.vue?vue&type=script&lang=js\"\nexport * from \"./PcAiAssistant.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcAiAssistant.vue?vue&type=style&index=0&id=5ca9091e&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"5ca9091e\",\n  null\n  \n)\n\nexport default component.exports","<template>\r\n  <div class=\"pc-home\">\r\n    <div class=\"main-col\">\r\n      <section class=\"panel quick-panel\">\r\n        <div class=\"panel-head\">\n          <PanelTitle title=\"常用功能\" />\n          <div class=\"language-switch\" role=\"group\" aria-label=\"学习语言\">\n            <span>学习语言</span>\n            <button\n              v-for=\"item in languageOptions\"\n              :key=\"item.value\"\n              type=\"button\"\n              :class=\"{ active: studyLanguage === item.value }\"\n              :aria-pressed=\"studyLanguage === item.value\"\n              @click=\"changeLanguage(item.value)\"\n            >{{ item.label }}</button>\n          </div>\n        </div>\n        <div class=\"quick-list\">\r\n          <div\r\n            v-for=\"item in fastList\"\r\n            :key=\"item.id || item.name\"\r\n            class=\"quick-item\"\r\n            @click=\"toPage(item)\"\r\n          >\r\n            <img :src=\"item.img_url\" />\r\n            <span>{{ item.name }}</span>\r\n          </div>\r\n        </div>\r\n      </section>\r\n\r\n      <div class=\"middle-grid\">\r\n        <section class=\"panel data-panel\">\r\n          <PanelTitle title=\"学习数据\" />\r\n          <div class=\"data-list\">\r\n            <div class=\"data-item\">\r\n              <span>今日时长</span>\r\n              <strong>{{ countTask.today_minutes }}<em>/{{ countTask.plan_minutes }}min</em></strong>\r\n            </div>\r\n            <div class=\"data-item clickable\" @click=\"toCalendar\">\r\n              <span>本月打卡</span>\r\n              <strong>{{ countSign }}<em>天</em></strong>\r\n            </div>\r\n            <div class=\"data-item\">\r\n              <span>E-talk时长</span>\r\n              <strong>{{ countTask.etalk_total_minutes }}<em>min</em></strong>\r\n            </div>\r\n            <div class=\"data-item clickable\" @click=\"toTodayTask\">\r\n              <span>今日任务 &gt;</span>\r\n              <strong>{{ countTask.total_finish_count }}<em>/{{ countTask.total_task_count }}个</em></strong>\r\n            </div>\r\n          </div>\r\n        </section>\r\n\r\n        <section class=\"panel now-panel\">\r\n          <div class=\"panel-head\">\r\n            <PanelTitle title=\"正在学\" />\r\n            <button type=\"button\" @click=\"toStudyList(0)\">全部&gt;</button>\r\n          </div>\r\n          <div v-if=\"currentCourse\" class=\"now-course\" @click=\"toPraxis(currentCourse)\">\r\n            <img :src=\"currentCourse.cover\" />\n            <div class=\"course-info\">\n              <div class=\"course-title\">{{ categoryText(currentCourse.category_id) }}{{ currentCourse.name }}</div>\n            </div>\n            <button type=\"button\">开始学习</button>\r\n          </div>\r\n          <div v-else class=\"empty-line\">暂无正在学习内容</div>\r\n          <div class=\"dots\" v-if=\"currentCourses.length > 1\">\r\n            <span\r\n              v-for=\"(item, index) in currentCourses\"\r\n              :key=\"item.id || index\"\r\n              :class=\"{ active: index === currentCourseIndex }\"\r\n              @click=\"setCurrentCourse(index)\"\r\n            ></span>\r\n          </div>\r\n        </section>\r\n      </div>\r\n\r\n      <section class=\"panel recommend-panel\">\r\n        <div class=\"panel-head\">\r\n          <PanelTitle title=\"推荐学\" />\r\n          <button type=\"button\" @click=\"toStudyList(1)\">全部&gt;</button>\r\n        </div>\r\n        <div class=\"recommend-list\">\r\n          <div v-for=\"item in recommendCourses\" :key=\"item.id\" class=\"recommend-card\" @click=\"toPraxis(item)\">\r\n            <div class=\"cover-wrap\">\r\n              <img :src=\"item.cover\" />\r\n              <span>继续学习</span>\r\n            </div>\n            <div class=\"recommend-title\">{{ item.name }}</div>\n            <div class=\"tag-row\">\n              <span>{{ categoryName(item.category_id) }}</span>\n              <span>{{ item.subject_name || item.subject || '生命与健康' }}</span>\n            </div>\n          </div>\n        </div>\r\n      </section>\r\n    </div>\r\n\r\n    <aside class=\"side-col\">\r\n      <section class=\"panel calendar-panel\">\r\n        <PanelTitle title=\"签到日历\" />\r\n        <div class=\"calendar-top\">\r\n          <button type=\"button\" @click=\"prevMonth\">&#8249;</button>\r\n          <span>{{ calendarTitle }}</span>\r\n          <button type=\"button\" @click=\"nextMonth\">&#8250;</button>\r\n        </div>\r\n        <div class=\"week-row\">\r\n          <span v-for=\"item in weekList\" :key=\"item\">{{ item }}</span>\r\n        </div>\r\n        <div class=\"date-grid\">\r\n          <span\r\n            v-for=\"item in calendarDays\"\r\n            :key=\"item.key\"\r\n            :class=\"{ muted: item.muted, signed: item.signed, today: item.today }\"\r\n          >\n            {{ item.today ? '今天' : item.day }}\n          </span>\n        </div>\n        <div class=\"calendar-note\">本月已连续打卡{{ maxContinuousDays }}天，累计打卡{{ countSign }}天</div>\r\n      </section>\r\n\r\n      <section class=\"panel notice-panel\">\r\n        <PanelTitle title=\"各类通知\" />\r\n        <div class=\"tabs\">\r\n          <span\r\n            v-for=\"item in noticeTabs\"\r\n            :key=\"item.key\"\r\n            :class=\"{ active: noticeActive === item.key }\"\r\n            @click=\"changeNoticeTab(item.key)\"\r\n          >\r\n            {{ item.label }}\r\n          </span>\r\n        </div>\r\n        <div class=\"notice-list\">\r\n          <div v-if=\"noticeLoading\" class=\"notice-empty\">加载中..</div>\r\n          <div v-else-if=\"noticeList.length === 0\" class=\"notice-empty\">暂无通知</div>\r\n          <template v-else>\r\n            <div v-for=\"(item, index) in noticeList\" :key=\"index\" class=\"notice-item\">\n              <button v-if=\"isActivityNotice(item)\" type=\"button\" class=\"notice-link\" :disabled=\"noticeOpening\" @click=\"openActivityNotice(item)\">\n                <div><em :class=\"noticeTypeClass(item)\">[{{ noticeTypeText(item) }}]</em>{{ item.title }}</div>\n                <span>{{ noticeDateText(item) }}</span>\n              </button>\n              <template v-else>\n                <div><em :class=\"noticeTypeClass(item)\">[{{ noticeTypeText(item) }}]</em>{{ item.title }}</div>\n                <span>{{ noticeDateText(item) }}</span>\n              </template>\n            </div>\r\n          </template>\r\n        </div>\r\n        <div class=\"dots\"><span class=\"active\"></span><span></span><span></span></div>\r\n      </section>\r\n    </aside>\r\n    <PcAiAssistant scene=\"home\" />\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport Vue from 'vue'\r\nimport {\r\n  getUserStudy,\r\n  getDateList,\r\n  getMenuList,\r\n  getNewUserResourceList,\r\n  HotResouceList,\r\n  NoticeList,\n  getActiveList,\n  UserTaskSend,\r\n  getUserRowByToken\r\n} from '@/api/home'\r\nimport { saveUserStudyResource, getUserSign } from '@/api/user'\r\nimport { getPlant } from '@/api/plant'\nimport PcAiAssistant from '@/components/PcAiAssistant.vue'\nimport { saveRefreshedUser } from '@/utils/auth'\nimport { getStudyLanguage, languageOptions, setStudyLanguage } from '@/utils/language'\n\r\nconst PanelTitle = Vue.component('PanelTitle', {\r\n  functional: true,\r\n  props: { title: String },\r\n  render(h, ctx) {\r\n    return h('div', { class: 'title-wrap' }, [\r\n      h('span', { class: 'title-icon' }),\r\n      h('strong', ctx.props.title)\r\n    ])\r\n  }\r\n})\r\n\r\nexport default {\r\n  name: 'PcHome',\r\n  components: { PanelTitle, PcAiAssistant },\r\n  data() {\r\n    const now = new Date()\n    return {\n      studyLanguage: getStudyLanguage(),\n      languageOptions,\n      languageRequestId: 0,\n      countSign: 0,\r\n      maxContinuousDays: 0,\r\n      signedDays: [],\r\n      year: now.getFullYear(),\r\n      month: now.getMonth() + 1,\r\n      fastList: [],\r\n      currentCourses: [],\r\n      currentCourseIndex: 0,\r\n      currentCourseTimer: null,\r\n      recommendCourses: [],\r\n      noticeList: [],\r\n      noticeActive: 'all',\r\n      noticeLoading: false,\n      noticeOpening: false,\n      noticeTabs: [\r\n        { key: 'all', label: '全部通知', type: '' },\r\n        { key: 'test', label: '考试通知', type: 'test' },\r\n        { key: 'activity', label: '活动通知', type: 'activity' }\r\n      ],\r\n      showAi: false,\r\n      countTask: {\r\n        total_finish_count: 0,\r\n        total_task_count: 0,\r\n        today_minutes: 0,\r\n        plan_minutes: 0,\r\n        etalk_total_minutes: 0\r\n      },\r\n      weekList: ['日', '一', '二', '三', '四', '五', '六']\r\n    }\r\n  },\r\n  computed: {\r\n    currentCourse() {\r\n      return this.currentCourses[this.currentCourseIndex]\r\n    },\r\n    calendarTitle() {\r\n      const now = new Date()\r\n      return `${now.getFullYear()}年${now.getMonth() + 1}月`\r\n    },\r\n    calendarDays() {\r\n      const now = new Date()\r\n      const year = now.getFullYear()\r\n      const month = now.getMonth()\r\n      const firstDay = new Date(year, month, 1).getDay()\r\n      const daysInMonth = new Date(year, month + 1, 0).getDate()\r\n      const prevMonthDays = new Date(year, month, 0).getDate()\r\n      const list = []\r\n\r\n      for (let i = firstDay - 1; i >= 0; i--) {\r\n        list.push({ key: `p-${i}`, day: prevMonthDays - i, muted: true })\r\n      }\r\n      for (let day = 1; day <= daysInMonth; day++) {\r\n        list.push({\r\n          key: `c-${day}`,\r\n          day,\r\n          signed: this.signedDays.includes(day),\r\n          today: day === now.getDate()\r\n        })\r\n      }\r\n      while (list.length < 42) {\r\n        list.push({ key: `n-${list.length}`, day: list.length - firstDay - daysInMonth + 1, muted: true })\r\n      }\r\n      return list.slice(0, 42)\r\n    },\r\n    calendarTitle() {\r\n      return `${this.year}年${this.month}月`\r\n    },\r\n    calendarDays() {\r\n      const monthIndex = this.month - 1\r\n      const firstDay = new Date(this.year, monthIndex, 1).getDay()\r\n      const daysInMonth = new Date(this.year, monthIndex + 1, 0).getDate()\r\n      const prevMonthDays = new Date(this.year, monthIndex, 0).getDate()\r\n      const today = new Date()\r\n      const list = []\r\n\r\n      for (let i = firstDay - 1; i >= 0; i -= 1) {\r\n        list.push({ key: `p-${i}`, day: prevMonthDays - i, muted: true })\r\n      }\r\n      for (let day = 1; day <= daysInMonth; day += 1) {\r\n        const date = this.formatDate(this.year, this.month, day)\r\n        list.push({\r\n          key: `c-${day}`,\r\n          day,\r\n          signed: this.signedDays.includes(date),\r\n          today: today.getFullYear() === this.year && today.getMonth() + 1 === this.month && today.getDate() === day\r\n        })\r\n      }\r\n      while (list.length < 42) {\r\n        list.push({ key: `n-${list.length}`, day: list.length - firstDay - daysInMonth + 1, muted: true })\r\n      }\r\n      return list.slice(0, 42)\r\n    },\r\n    currentNoticeTab() {\r\n      return this.noticeTabs.find(item => item.key === this.noticeActive) || this.noticeTabs[0]\r\n    }\r\n  },\r\n  methods: {\n    changeLanguage(value) {\n      const next = setStudyLanguage(value)\n      if (next === this.studyLanguage) return\n      this.studyLanguage = next\n      this.refreshHomeData()\n    },\n    async refreshHomeData() {\n      this.languageRequestId += 1\n      if (this.currentCourseTimer) clearInterval(this.currentCourseTimer)\n      this.currentCourseTimer = null\n      this.fastList = []\n      this.currentCourses = []\n      this.currentCourseIndex = 0\n      this.recommendCourses = []\n      this.noticeList = []\n      this.countSign = 0\n      this.signedDays = []\n      this.maxContinuousDays = 0\n      this.countTask = {\n        total_finish_count: 0, total_task_count: 0, today_minutes: 0,\n        plan_minutes: 0, etalk_total_minutes: 0\n      }\n      const results = await Promise.allSettled([\n        this.loadStudy(), this.loadSign(), this.loadMenu(),\n        this.loadCourses(), this.loadNotice()\n      ])\n      results.forEach(result => {\n        if (result.status === 'rejected') console.error('Home data refresh failed', result.reason)\n      })\n    },\n    getUser() {\r\n      return JSON.parse(localStorage.getItem('user') || '{}')\r\n    },\r\n    categoryText(id) {\r\n      return `[${this.categoryName(id)}]`\r\n    },\r\n    categoryName(id) {\r\n      if (id == 1) return '听力'\r\n      if (id == 2) return '口语'\r\n      if (id == 3) return '阅读'\r\n      if (id == 4) return '写作'\r\n      return '学习'\r\n    },\r\n    itemDateText(item) {\r\n      const value = item && (item.update_time || item.create_time || item.dateline || item.date)\r\n      return value ? `${value}更新` : ''\r\n    },\r\n    noticeTypeText(item) {\r\n      const value = item && (item.type_name || item.notice_type_name || item.category_name)\r\n      if (value) return value\r\n      const type = item && (item.type || item.notice_type || item.category)\r\n      if (type === 'test' || type === 'exam' || type == 1) return '考试'\r\n      if (type === 'activity' || type === 'active' || type == 2) return '活动'\r\n      if (this.noticeActive === 'test') return '考试'\r\n      if (this.noticeActive === 'activity') return '活动'\r\n      return '通知'\r\n    },\r\n    noticeTypeClass(item) {\r\n      const text = this.noticeTypeText(item)\r\n      return text === '活动' ? 'blue' : 'red'\r\n    },\r\n    noticeDateText(item) {\n      const value = item && (item.create_time || item.update_time || item.dateline || item.date)\n      return value ? `${value}发布` : ''\n    },\n    isActivityNotice(item) {\n      const type = item.type || item.notice_type || item.category\n      return type === 'activity' || type === 'active' || type == 2 ||\n        /^活动/.test(this.noticeTypeText(item)) || (!type && this.noticeActive === 'activity')\n    },\n    async openActivityNotice(item) {\n      if (this.noticeOpening) return\n      this.noticeOpening = true\n      const requestId = this.languageRequestId\n      try {\n        let activeId = item.active_id || item.activity_id\n        const link = item.link_url || item.url\n        if (!activeId && link) {\n          const query = String(link).split('?')[1]\n          if (query) activeId = new URLSearchParams(query).get('active_id')\n        }\n        if (!activeId) {\n          // 通知编号与活动编号不同，旧通知通过活动名称关联。\n          const response = await getActiveList(this.getUser().sid)\n          const activities = Array.isArray(response.data) ? response.data : []\n          const normalizeTitle = value => String(value || '').replace(/^\\[活动\\]/, '').replace(/\\s+/g, '')\n          const matches = activities.filter(activity => normalizeTitle(activity.name) === normalizeTitle(item.title))\n          if (matches.length === 1) activeId = matches[0].active_id || matches[0].id\n        }\n        if (requestId !== this.languageRequestId) return\n        if (!activeId) {\n          this.$message.warning('暂未找到对应活动')\n          return\n        }\n        this.$router.push({ name: 'PcActiveDetail', query: { active_id: activeId } })\n      } catch (error) {\n        this.$message.error('活动加载失败，请稍后重试')\n      } finally {\n        this.noticeOpening = false\n      }\n    },\n    normalizeImg(url) {\r\n      return url ? url.replace('a-news.oss-cn-hangzhou.aliyuncs.com', 'a-news.oss-accelerate.aliyuncs.com') : ''\r\n    },\r\n    formatDate(year, month, day) {\r\n      return `${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')}`\r\n    },\r\n    normalizeSignDate(value) {\r\n      const text = String(value || '')\r\n      const matched = text.match(/\\d{4}-\\d{2}-\\d{2}/)\r\n      if (matched) return matched[0]\r\n      const day = Number(text.replace(/\\D/g, '').slice(-2))\r\n      if (!day) return ''\r\n      return this.formatDate(this.year, this.month, day)\r\n    },\r\n    async initUser() {\r\n      const user = this.getUser()\r\n      if (!user.sid) return\r\n      const response = await getUserRowByToken({ token: user.token })\n      if (response && response.data) {\n        saveRefreshedUser(response.data)\n        this.showAi = response.data.type_id == 2\r\n        this.userSign(response.data.sid)\r\n      }\r\n    },\r\n    async userSign(sid) {\r\n      const now = new Date()\r\n      const month = String(now.getMonth() + 1).padStart(2, '0')\r\n      const day = String(now.getDate()).padStart(2, '0')\r\n      await getUserSign({ sid, dateline: `${now.getFullYear()}-${month}-${day}` })\r\n    },\r\n    async loadStudy() {\n      const requestId = this.languageRequestId\n      const user = this.getUser()\r\n      if (!user.sid) return\r\n      const response = await getUserStudy(user.sid)\n      if (requestId !== this.languageRequestId) return\n      const data = response.data || {}\r\n      this.countTask = {\r\n        total_finish_count: data.total_finish_count || 0,\r\n        total_task_count: data.total_task_count || 0,\r\n        today_minutes: data.today_minutes || 0,\r\n        plan_minutes: data.plan_minutes || 0,\r\n        etalk_total_minutes: data.etalk_total_minutes || 0\r\n      }\r\n    },\r\n    async loadSign() {\n      const requestId = this.languageRequestId\n      const user = this.getUser()\r\n      if (!user.sid) return\r\n      const dates = `${this.year}${String(this.month).padStart(2, '0')}`\r\n      const response = await getDateList({ sid: user.sid, dates })\n      if (requestId !== this.languageRequestId) return\n      const data = response.code === 100 && Array.isArray(response.data) ? response.data : []\r\n      this.countSign = data.length\r\n      this.signedDays = data.map(item => {\r\n        const value = typeof item === 'string' ? item : item.dateline || item.date || item.day\r\n        return this.normalizeSignDate(value)\r\n      }).filter(Boolean)\r\n      this.calculateContinuousDays()\r\n    },\r\n    calculateContinuousDays() {\r\n      if (!this.signedDays.length) {\r\n        this.maxContinuousDays = 0\r\n        return\r\n      }\r\n      const list = this.signedDays.slice().sort((a, b) => new Date(a) - new Date(b))\r\n      let current = 1\r\n      let max = 1\r\n      for (let i = 1; i < list.length; i += 1) {\r\n        const diff = (new Date(list[i]) - new Date(list[i - 1])) / (1000 * 60 * 60 * 24)\r\n        if (diff === 1) {\r\n          current += 1\r\n          max = Math.max(max, current)\r\n        } else if (diff > 1) {\r\n          current = 1\r\n        }\r\n      }\r\n      this.maxContinuousDays = max\r\n    },\r\n    prevMonth() {\r\n      this.month -= 1\r\n      if (this.month < 1) {\r\n        this.month = 12\r\n        this.year -= 1\r\n      }\r\n      this.loadSign()\r\n    },\r\n    nextMonth() {\r\n      this.month += 1\r\n      if (this.month > 12) {\r\n        this.month = 1\r\n        this.year += 1\r\n      }\r\n      this.loadSign()\r\n    },\r\n    async loadMenu() {\n      const requestId = this.languageRequestId\n      const response = await getMenuList()\n      if (requestId !== this.languageRequestId) return\n      this.fastList = (response.data || []).slice(0, 8).map(item => ({\r\n        ...item,\r\n        img_url: this.normalizeImg(item.img_url)\r\n      }))\r\n    },\r\n    async loadCourses() {\n      const requestId = this.languageRequestId\n      const user = this.getUser()\r\n      if (!user.sid) return\r\n      const [current, hot] = await Promise.all([\n        getNewUserResourceList(user.sid), HotResouceList(user.sid)\n      ])\n      if (requestId !== this.languageRequestId) return\n      this.currentCourses = (current.data || []).slice(0, 5)\r\n      this.currentCourseIndex = 0\r\n      this.startCurrentCourseCarousel()\r\n      this.recommendCourses = (hot.data || []).slice(0, 2)\r\n    },\r\n    async loadNotice() {\n      const requestId = this.languageRequestId\n      const user = this.getUser()\r\n      if (!user.sid) return\r\n      this.noticeLoading = true\r\n      try {\r\n        const params = { sid: user.sid, page: 1, size: 4 }\r\n        if (this.currentNoticeTab.type) {\r\n          params.type = this.currentNoticeTab.type\r\n        }\r\n        const response = await NoticeList(params)\n        if (requestId !== this.languageRequestId) return\n        this.noticeList = response.data && response.data.list ? response.data.list : []\r\n      } finally {\r\n        if (requestId === this.languageRequestId) this.noticeLoading = false\n      }\r\n    },\r\n    async checkPlant() {\r\n      const user = this.getUser()\r\n      if (!user.sid) return\r\n      const response = await getPlant(user.sid)\r\n      if (response.code !== 100) {\r\n        this.$router.push({ name: 'SetPlant' })\r\n      }\r\n    },\r\n    async pushTask() {\r\n      const user = this.getUser()\r\n      if (user.sid) await UserTaskSend({ sid: user.sid })\r\n    },\r\n    async toPraxis(item) {\r\n      const user = this.getUser()\r\n      if (!user.sid || !item) return\r\n      const response = await saveUserStudyResource({ sid: user.sid, resource_id: item.id })\r\n      if (response.code != 100) return\r\n      if (item.category_id == 1) {\r\n        this.$router.push({ name: 'PcListenPraxis', query: { log_id: response.data, resources_id: item.id } })\r\n      } else if (item.category_id == 4) {\r\n        this.$router.push({ name: 'PcWritePraxis', query: { log_id: response.data, resources_id: item.id } })\r\n      } else {\r\n        this.$router.push({ name: 'PcReadPraxis', query: { log_id: response.data, resources_id: item.id } })\r\n      }\r\n    },\r\n    toPage(item) {\r\n      if (item.id == 3 && !this.showAi) {\r\n        this.$router.push({ name: 'noAuth' })\r\n        return\r\n      }\r\n      if (item.link_url === '/write/index') {\r\n        this.$router.push({ name: 'PcWrite' })\r\n        return\r\n      }\r\n      this.$router.push(item.link_url)\r\n    },\r\n    toTodayTask() {\r\n      this.$router.push({ name: 'PcTodayTask' })\r\n    },\r\n    toStudyList(status = 0) {\r\n      this.$router.push({ name: 'PcStudyList', query: { now_status: status } })\r\n    },\r\n    toCalendar() {\r\n      this.$router.push({ name: 'Calendar' })\r\n    },\r\n    setCurrentCourse(index) {\r\n      this.currentCourseIndex = index\r\n      this.startCurrentCourseCarousel()\r\n    },\r\n    startCurrentCourseCarousel() {\r\n      if (this.currentCourseTimer) {\r\n        clearInterval(this.currentCourseTimer)\r\n        this.currentCourseTimer = null\r\n      }\r\n      if (this.currentCourses.length <= 1) return\r\n      this.currentCourseTimer = setInterval(() => {\r\n        this.currentCourseIndex = (this.currentCourseIndex + 1) % this.currentCourses.length\r\n      }, 4000)\r\n    },\r\n    changeNoticeTab(key) {\r\n      if (this.noticeActive === key) return\r\n      this.noticeActive = key\r\n      this.loadNotice()\r\n    }\r\n  },\r\n  mounted() {\r\n    this.initUser()\r\n    this.checkPlant()\r\n    this.pushTask()\r\n    this.refreshHomeData()\n  },\r\n  beforeDestroy() {\n    this.languageRequestId += 1\n    if (this.currentCourseTimer) {\r\n      clearInterval(this.currentCourseTimer)\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.pc-home {\n  width: 1114px;\r\n  height: 583px;\r\n  display: grid;\r\n  grid-template-columns: 390px 400px 290px;\r\n  grid-template-rows: 264px 284px;\n  grid-template-areas:\r\n    \"main main side\"\r\n    \"main main side\";\r\n  gap: 12px;\r\n  position: relative;\r\n}\r\n\r\n.main-col {\n  display: grid;\r\n  grid-area: main;\r\n  grid-template-columns: 390px 400px;\r\n  grid-template-rows: 264px 284px;\n  grid-template-areas:\r\n    \"quick quick\"\r\n    \"middle recommend\";\r\n  gap: 12px;\r\n  min-width: 0;\r\n}\r\n\r\n.side-col {\n  display: grid;\r\n  grid-area: side;\r\n  grid-template-rows: 284px 264px;\n  gap: 12px;\n  min-width: 0;\r\n}\r\n.middle-grid {\n  display: grid;\r\n  grid-area: middle;\r\n  grid-template-columns: 1fr;\r\n  grid-template-rows: 116px 156px;\n  gap: 12px;\r\n  min-width: 0;\r\n}\r\n\r\n.panel {\r\n  background: #fff;\r\n  border-radius: 6px;\r\n  box-sizing: border-box;\r\n  box-shadow: 0 1px 0 rgba(255, 255, 255, 0.9), 0 2px 12px rgba(34, 63, 108, 0.06);\r\n  min-width: 0;\r\n  overflow: hidden;\r\n}\r\n\r\n.quick-panel {\r\n  grid-area: quick;\r\n  height: 264px;\r\n  padding: 18px 18px 16px;\r\n}\r\n\r\n.data-panel,\r\n.now-panel {\r\n  height: 100%;\r\n  padding: 14px;\r\n}\r\n\r\n.recommend-panel {\n  grid-area: recommend;\n  height: 284px;\n  padding: 12px 16px 18px;\n}\n\r\n.calendar-panel {\r\n  height: 284px;\r\n  padding: 14px 34px 14px;\r\n}\r\n\r\n.notice-panel {\r\n  height: 264px;\r\n  padding: 12px 34px 12px;\r\n}\r\n\r\n::v-deep .title-wrap,\r\n.panel-head {\r\n  display: flex;\r\n  align-items: center;\r\n}\r\n\r\n.panel-head {\r\n  justify-content: space-between;\r\n}\r\n\r\n::v-deep .title-icon {\r\n  width: 13px;\r\n  height: 13px;\r\n  margin-right: 6px;\r\n  background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat;\r\n}\r\n\r\n::v-deep .title-wrap strong {\r\n  font-size: 16px;\r\n  line-height: 22px;\r\n  color: #152237;\r\n}\r\n\r\nbutton {\r\n  border: none;\r\n  background: transparent;\r\n  color: #6f7f94;\r\n  cursor: pointer;\r\n  padding: 0;\r\n  font-size: 12px;\r\n}\r\n\r\n.language-switch {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  font-size: 12px;\n  color: #6f7f94;\n}\n\n.language-switch button {\n  padding: 4px 12px;\n  border: 1px solid #dce6f1;\n  border-radius: 4px;\n  color: #344a66;\n}\n\n.language-switch button.active {\n  color: #0d5aa8;\n  background: #eaf3ff;\n  border-color: #92bce8;\n  font-weight: 700;\n}\n\n.language-switch button:focus-visible {\n  outline: 2px solid #0d5aa8;\n  outline-offset: 2px;\n}\n\n.quick-list {\n  display: grid;\r\n  grid-template-columns: repeat(4, minmax(0, 1fr));\r\n  grid-template-rows: repeat(2, 1fr);\r\n  align-items: center;\r\n  row-gap: 22px;\r\n  column-gap: 42px;\r\n  margin-top: 22px;\r\n  padding: 0 16px;\r\n  min-width: 0;\r\n}\r\n\r\n.quick-item {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: flex-start;\r\n  cursor: pointer;\r\n  min-width: 0;\r\n}\r\n\r\n.quick-item img {\r\n  width: 60px;\r\n  height: 60px;\r\n  object-fit: contain;\r\n  margin-right: 12px;\r\n  margin-bottom: 0;\r\n  flex: 0 0 auto;\r\n}\r\n\r\n.quick-item span {\r\n  margin-left: 0;\r\n  font-size: 18px;\r\n  color: #14253b;\r\n  white-space: nowrap;\r\n  overflow: visible;\r\n  text-overflow: clip;\r\n  text-align: left;\r\n}\r\n\r\n.data-list {\r\n  margin-top: 14px;\r\n  display: grid;\r\n  grid-template-columns: repeat(4, 1fr);\r\n}\r\n\r\n.data-item {\r\n  text-align: center;\r\n}\r\n\r\n.data-item span {\r\n  display: block;\r\n  font-size: 12px;\r\n  color: #7a8aa0;\r\n  margin-bottom: 8px;\r\n}\r\n\r\n.data-item strong {\r\n  font-size: 24px;\r\n  line-height: 28px;\r\n  color: #06162a;\r\n}\r\n\r\n.data-item em {\r\n  font-style: normal;\r\n  font-size: 12px;\r\n  font-weight: 500;\r\n}\r\n\r\n.clickable {\r\n  cursor: pointer;\r\n}\r\n\r\n.now-course {\n  height: 96px;\n  margin-top: 8px;\r\n  display: flex;\r\n  align-items: center;\r\n  padding: 8px 14px;\r\n  box-sizing: border-box;\r\n  cursor: pointer;\r\n  min-width: 0;\r\n  background: #f2f7ff;\r\n  border-radius: 6px;\r\n}\r\n\r\n.now-course img {\r\n  width: 62px;\r\n  height: 62px;\r\n  object-fit: cover;\r\n  margin-right: 14px;\r\n}\r\n\r\n.course-info {\r\n  flex: 1;\r\n  min-width: 0;\r\n}\r\n\r\n.course-title {\r\n  font-size: 15px;\r\n  line-height: 22px;\r\n  font-weight: 700;\r\n  color: #0f1f33;\r\n  overflow: hidden;\r\n  white-space: nowrap;\r\n  text-overflow: ellipsis;\r\n}\r\n\r\n.course-date {\r\n  font-size: 14px;\r\n  line-height: 22px;\r\n  color: #8593a6;\r\n}\r\n\r\n.now-course button {\r\n  color: #0d5aa8;\r\n  font-size: 14px;\r\n  flex: 0 0 auto;\r\n}\r\n\r\n.dots {\r\n  display: flex;\r\n  justify-content: center;\r\n  gap: 10px;\r\n  margin-top: 8px;\r\n}\r\n\r\n.dots span {\r\n  width: 6px;\r\n  height: 6px;\r\n  border-radius: 50%;\r\n  background: #b8cee9;\r\n  cursor: pointer;\r\n}\r\n\r\n.dots .active {\r\n  background: #2766b4;\r\n}\r\n\r\n.empty-line {\r\n  height: 84px;\r\n  margin-top: 8px;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  color: #7a8aa0;\r\n}\r\n\r\n.recommend-list {\r\n  display: grid;\r\n  grid-template-columns: repeat(2, minmax(0, 1fr));\r\n  gap: 8px;\r\n  margin-top: 12px;\r\n  min-width: 0;\r\n}\r\n\r\n.recommend-card {\n  height: 230px;\n  box-sizing: border-box;\r\n  cursor: pointer;\r\n  overflow: hidden;\r\n  min-width: 0;\r\n  border: 1px solid #e7edf5;\r\n  border-radius: 6px;\r\n}\r\n\r\n.cover-wrap {\n  height: 132px;\n  position: relative;\r\n  overflow: hidden;\r\n  min-width: 0;\r\n}\r\n\r\n.cover-wrap img {\r\n  width: 100%;\r\n  height: 100%;\r\n  object-fit: cover;\r\n  display: block;\r\n}\r\n\r\n.cover-wrap span {\r\n  position: absolute;\r\n  right: 0;\r\n  bottom: 0;\r\n  height: 24px;\r\n  line-height: 24px;\r\n  padding: 0 16px;\r\n  background: rgba(23, 50, 84, 0.72);\r\n  color: #fff;\r\n  font-size: 12px;\r\n  border-radius: 12px 0 0 0;\r\n}\r\n\r\n.recommend-title {\r\n  padding: 8px 14px 0;\r\n  font-size: 16px;\r\n  line-height: 22px;\r\n  font-weight: 700;\r\n  color: #0f1f33;\r\n  overflow: hidden;\r\n  white-space: nowrap;\r\n  text-overflow: ellipsis;\r\n}\r\n\r\n.tag-row {\r\n  display: flex;\r\n  gap: 8px;\r\n  padding: 4px 14px 0;\r\n}\r\n\r\n.tag-row span {\r\n  height: 18px;\r\n  line-height: 18px;\r\n  padding: 0 7px;\r\n  border-radius: 2px;\r\n  background: #d7e8ff;\r\n  color: #2b6fbb;\r\n  font-size: 12px;\r\n}\r\n\r\n.recommend-date {\r\n  padding: 5px 14px 0;\r\n  font-size: 14px;\r\n  color: #8a98aa;\r\n}\r\n\r\n.calendar-top {\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  gap: 18px;\r\n  margin: 10px 0 8px;\n  color: #0f1f33;\r\n  font-size: 13px;\r\n}\r\n\r\n.week-row,\r\n.date-grid {\r\n  display: flex;\r\n  flex-wrap: wrap;\r\n  text-align: center;\r\n}\r\n\r\n.week-row {\n  color: #98a7ba;\r\n  font-size: 12px;\r\n  margin-bottom: 6px;\n}\r\n\r\n.week-row span {\r\n  width: calc(100% / 7);\r\n}\r\n\r\n.date-grid span {\n  width: calc(100% / 7);\r\n  height: 24px;\n  line-height: 16px;\n  font-size: 12px;\r\n  color: #223047;\r\n  position: relative;\r\n  overflow: visible;\r\n}\r\n\r\n.date-grid .muted {\r\n  color: #aeb9c7;\r\n}\r\n\r\n.date-grid .signed {\r\n  color: #24a268;\r\n  font-weight: 700;\r\n}\r\n\r\n.date-grid .signed::after {\n  content: '\\2714';\r\n  position: absolute;\r\n  left: 50%;\r\n  bottom: 0;\n  transform: translateX(-50%);\r\n  color: #41b776;\r\n  font-size: 13px;\r\n  line-height: 10px;\r\n  font-weight: 700;\r\n  z-index: 1;\r\n}\r\n\r\n.date-grid .today {\r\n  color: #1688ff;\r\n}\r\n\r\n.date-grid .today.signed {\r\n  color: #24a268;\r\n}\r\n\r\n.calendar-note {\n  margin-top: 6px;\n  margin-bottom: 8px;\r\n  font-size: 12px;\r\n  color: #6f7f94;\r\n}\r\n\r\n.tabs {\r\n  display: flex;\r\n  gap: 28px;\r\n  margin: 6px 0 12px;\r\n  font-size: 13px;\r\n  color: #98a7ba;\r\n}\r\n\r\n.notice-list {\r\n  min-height: 96px;\r\n}\r\n\r\n.tabs span {\r\n  cursor: pointer;\r\n}\r\n\r\n.tabs .active {\r\n  color: #0f1f33;\r\n  border-bottom: 1px solid #0f1f33;\r\n}\r\n\r\n.notice-empty {\r\n  height: 126px;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  color: #8d9bae;\r\n  font-size: 12px;\r\n}\r\n\r\n.notice-item {\r\n  margin-bottom: 10px;\r\n  font-size: 12px;\r\n  line-height: 18px;\r\n  color: #6f7f94;\r\n}\r\n\r\n.notice-item div {\n  overflow: hidden;\r\n  white-space: nowrap;\r\n  text-overflow: ellipsis;\r\n}\n\n.notice-link {\n  display: block;\n  width: 100%;\n  padding: 0;\n  border: none;\n  background: transparent;\n  color: inherit;\n  font: inherit;\n  text-align: left;\n  cursor: pointer;\n}\n\n.notice-link:hover div, .notice-link:focus-visible div {\n  color: #1688ff;\n  text-decoration: underline;\n}\n\n.notice-link:disabled {\n  cursor: wait;\n}\n\r\n.notice-item em {\r\n  font-style: normal;\r\n}\r\n\r\n.notice-item .red {\r\n  color: #e64b5b;\r\n}\r\n\r\n.notice-item .blue {\r\n  color: #1688ff;\r\n}\r\n\r\n.notice-item span {\r\n  display: block;\r\n  color: #8d9bae;\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcHome.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcHome.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcHome.vue?vue&type=template&id=8faac2de&scoped=true\"\nimport script from \"./PcHome.vue?vue&type=script&lang=js\"\nexport * from \"./PcHome.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcHome.vue?vue&type=style&index=0&id=8faac2de&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"8faac2de\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-exam\"},[_c('div',{staticClass:\"left-col\"},[_c('section',{staticClass:\"panel self-panel\"},[_c('PanelTitle',{attrs:{\"title\":\"能力自测\"}}),_c('div',{staticClass:\"self-banner\",on:{\"click\":_vm.toExamNotice}},[_c('div',{staticClass:\"banner-copy\"},[_c('h1',[_vm._v(\"能力自测\")]),_c('p',[_vm._v(_vm._s(_vm.selfExamLabel)+\"：\"+_vm._s(_vm.selfExamTime))])]),_vm._m(0)])],1),_c('section',{staticClass:\"panel recommend-panel\"},[_c('div',{staticClass:\"panel-head\"},[_c('PanelTitle',{attrs:{\"title\":\"推荐学\"}}),_c('button',{attrs:{\"type\":\"button\"},on:{\"click\":_vm.toStudyList}},[_vm._v(\"全部>\")])],1),_c('div',{staticClass:\"recommend-list\"},_vm._l((_vm.recommendCourses),function(item){return _c('div',{key:item.id,staticClass:\"recommend-card\",on:{\"click\":function($event){return _vm.toPraxis(item)}}},[_c('div',{staticClass:\"cover-wrap\"},[_c('img',{attrs:{\"src\":_vm.normalizeImg(item.cover),\"alt\":\"\"}}),_c('span',[_vm._v(\"继续学习\")])]),_c('div',{staticClass:\"recommend-title\"},[_vm._v(_vm._s(item.name))]),_c('div',{staticClass:\"tag-row\"},[_c('span',[_vm._v(_vm._s(_vm.categoryName(item.category_id)))]),_c('span',[_vm._v(_vm._s(item.subject_name || item.subject || '生命与健康'))])])])}),0)])]),_c('aside',{staticClass:\"panel record-panel\"},[_c('PanelTitle',{attrs:{\"title\":\"自测记录\"}}),_c('div',{staticClass:\"record-list\"},[_vm._l((_vm.examList),function(item){return _c('div',{key:item.id,staticClass:\"record-item\",on:{\"click\":function($event){return _vm.toExamReport(item)}}},[_c('div',{staticClass:\"record-info\"},[_c('div',{staticClass:\"record-title\"},[_vm._v(_vm._s(item.name || item.paper_name || '能力自测'))]),_c('div',{staticClass:\"record-time\"},[_vm._v(_vm._s(item.start_time || item.create_time || item.update_time || ''))])]),_c('span',{class:_vm.recordStatusClass(item)},[_vm._v(_vm._s(_vm.recordStatusText(item)))])])}),(_vm.examList.length === 0)?_c('div',{staticClass:\"record-empty\"},[_vm._v(\"暂无自测记录\")]):_vm._e()],2)],1)])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('ul',[_c('li',[_vm._v(\"人工智能分析\")]),_c('li',[_vm._v(\"强大算法支撑\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-exam\">\n    <div class=\"left-col\">\n      <section class=\"panel self-panel\">\n        <PanelTitle title=\"能力自测\" />\n        <div class=\"self-banner\" @click=\"toExamNotice\">\n          <div class=\"banner-copy\">\n            <h1>能力自测</h1>\n            <p>{{ selfExamLabel }}：{{ selfExamTime }}</p>\n          </div>\n          <ul>\n            <!-- <li>准确性高</li> -->\n            <li>人工智能分析</li>\n            <li>强大算法支撑</li>\n          </ul>\n        </div>\n      </section>\n\n      <section class=\"panel recommend-panel\">\n        <div class=\"panel-head\">\n          <PanelTitle title=\"推荐学\" />\n          <button type=\"button\" @click=\"toStudyList\">全部&gt;</button>\n        </div>\n        <div class=\"recommend-list\">\n          <div v-for=\"item in recommendCourses\" :key=\"item.id\" class=\"recommend-card\" @click=\"toPraxis(item)\">\n            <div class=\"cover-wrap\">\n              <img :src=\"normalizeImg(item.cover)\" alt=\"\" />\n              <span>继续学习</span>\n            </div>\n            <div class=\"recommend-title\">{{ item.name }}</div>\n            <div class=\"tag-row\">\n              <span>{{ categoryName(item.category_id) }}</span>\n              <span>{{ item.subject_name || item.subject || '生命与健康' }}</span>\n            </div>\n          </div>\n        </div>\n      </section>\n    </div>\n\n    <aside class=\"panel record-panel\">\n      <PanelTitle title=\"自测记录\" />\n      <div class=\"record-list\">\n        <div v-for=\"item in examList\" :key=\"item.id\" class=\"record-item\" @click=\"toExamReport(item)\">\n          <div class=\"record-info\">\n            <div class=\"record-title\">{{ item.name || item.paper_name || '能力自测' }}</div>\n            <div class=\"record-time\">{{ item.start_time || item.create_time || item.update_time || '' }}</div>\n          </div>\n          <span :class=\"recordStatusClass(item)\">{{ recordStatusText(item) }}</span>\n        </div>\n        <div v-if=\"examList.length === 0\" class=\"record-empty\">暂无自测记录</div>\n      </div>\n    </aside>\n  </div>\n</template>\n\n<script>\nimport Vue from 'vue'\nimport { getMiniPaperHisList, StartMiniPaper } from '@/api/exam'\nimport { HotResouceList } from '@/api/home'\nimport { saveUserStudyResource } from '@/api/user'\n\nconst PanelTitle = Vue.component('ExamPanelTitle', {\n  functional: true,\n  props: { title: String },\n  render(h, ctx) {\n    return h('div', { class: 'title-wrap' }, [\n      h('span', { class: 'title-icon' }),\n      h('strong', ctx.props.title)\n    ])\n  }\n})\n\nexport default {\n  name: 'PcExam',\n  components: { PanelTitle },\n  data() {\n    return {\n      examList: [],\n      recommendCourses: [],\n      selfExamTime: '未开始',\n      selfExamLabel: '下次测试'\n    }\n  },\n  methods: {\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    normalizeImg(url) {\n      return url\n        ? url.replace('a-news.oss-cn-hangzhou.aliyuncs.com', 'a-news.oss-accelerate.aliyuncs.com')\n        : ''\n    },\n    categoryName(id) {\n      if (id == 1) return '听力'\n      if (id == 2) return '口语'\n      if (id == 3) return '阅读'\n      if (id == 4) return '写作'\n      return '学习'\n    },\n    formatDate(timestamp) {\n      if (!timestamp) return '未开始'\n      const date = new Date(timestamp)\n      return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`\n    },\n    recordStatusText(item) {\n      if (!item) return '待阅卷'\n      const text = item.status_name || item.status_text || item.evaluate_status_name || item.review_status_name\n      if (text) return text\n      const status = String((item && (item.status || item.review_status || item.evaluate_status)) || '')\n      if (status === '0') return '待阅卷'\n      if (status === '1') return '已评阅'\n      if (status === '2') return '已完成'\n      return '已评阅'\n    },\n    recordStatusClass(item) {\n      const status = this.recordStatusText(item)\n      if (status === '待阅卷') return 'todo'\n      return 'done'\n    },\n    async loadExamList() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const response = await getMiniPaperHisList(user.sid)\n      this.examList = response.data || []\n    },\n    async loadStartInfo() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const response = await StartMiniPaper(user.sid)\n      const data = response.data || {}\n      if (data.row == null) {\n        this.selfExamLabel = '下次测试'\n        this.selfExamTime = data.next_start_time ? this.formatDate(data.next_start_time) : '暂无记录'\n      } else if (data.end_time && data.end_time < Date.now()) {\n        this.selfExamLabel = '测试结束'\n        this.selfExamTime = this.formatDate(data.end_time)\n      } else {\n        this.selfExamLabel = '下次测试'\n        this.selfExamTime = data.next_start_time ? this.formatDate(data.next_start_time) : '进行中'\n      }\n    },\n    async loadRecommend() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const response = await HotResouceList(user.sid)\n      this.recommendCourses = (response.data || []).slice(0, 3)\n    },\n    toExamNotice() {\n      this.$router.push({ name: 'PcExamNotice' })\n    },\n    toExamReport(item) {\n      this.$router.push({ name: 'PcExamReport', query: { pc_id: item.id } })\n    },\n    toStudyList() {\n      this.$router.push({ name: 'StudyList', query: { now_status: 0 } })\n    },\n    async toPraxis(item) {\n      const user = this.getUser()\n      if (!user.sid || !item) return\n      const response = await saveUserStudyResource({ sid: user.sid, resource_id: item.id })\n      if (response.code != 100) return\n      if (item.category_id == 1) {\n        this.$router.push({ name: 'PcListenPraxis', query: { log_id: response.data, resources_id: item.id } })\n      } else if (item.category_id == 4) {\n        this.$router.push({ name: 'PcWritePraxis', query: { log_id: response.data, resources_id: item.id } })\n      } else {\n        this.$router.push({ name: 'PcReadPraxis', query: { log_id: response.data, resources_id: item.id } })\n      }\n    }\n  },\n  mounted() {\n    this.loadExamList()\n    this.loadStartInfo()\n    this.loadRecommend()\n  }\n}\n</script>\n\n<style scoped>\n.pc-exam {\n  width: 1098px;\n  height: 570px;\n  display: grid;\n  grid-template-columns: 604px 484px;\n  gap: 12px;\n}\n\n.left-col {\n  display: grid;\n  gap: 14px;\n}\n\n.panel {\n  background: rgba(255, 255, 255, 0.92);\n  border-radius: 6px;\n  box-sizing: border-box;\n}\n\n.self-panel {\n  height: 286px;\n  padding: 18px 24px 22px;\n}\n\n.recommend-panel {\n  height: 272px;\n  padding: 12px 16px 16px;\n}\n\n.record-panel {\n  height: 570px;\n  padding: 20px 20px 18px;\n}\n\n::v-deep .title-wrap,\n.panel-head {\n  display: flex;\n  align-items: center;\n}\n\n.panel-head {\n  justify-content: space-between;\n}\n\n::v-deep .title-icon {\n  width: 13px;\n  height: 13px;\n  margin-right: 6px;\n  background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat;\n}\n\n::v-deep .title-wrap strong {\n  font-size: 16px;\n  line-height: 22px;\n  color: #152237;\n}\n\nbutton {\n  border: none;\n  background: transparent;\n  color: #6f7f94;\n  cursor: pointer;\n  padding: 0;\n  font-size: 12px;\n}\n\n.self-banner {\n  height: 204px;\n  margin-top: 18px;\n  box-sizing: border-box;\n  padding: 28px 30px 24px 34px;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  background:\n    linear-gradient(150deg, rgba(129, 190, 255, 0.48), rgba(218, 236, 255, 0.7)),\n    linear-gradient(28deg, transparent 0 34%, rgba(255, 255, 255, 0.46) 35% 62%, transparent 63%),\n    linear-gradient(100deg, rgba(44, 139, 231, 0.18) 0 14%, transparent 15% 70%, rgba(44, 139, 231, 0.18) 71%);\n  border-radius: 12px;\n  cursor: pointer;\n}\n\n.banner-copy h1 {\n  margin: 0;\n  font-size: 28px;\n  line-height: 38px;\n  color: #075fbd;\n}\n\n.banner-copy p {\n  margin: 2px 0 0;\n  font-size: 18px;\n  color: #6b9fe0;\n}\n\n.self-banner ul {\n  margin: 74px 60px 0 0;\n  padding: 0;\n  list-style: none;\n}\n\n.self-banner li {\n  font-size: 14px;\n  line-height: 28px;\n  color: #4f8bd5;\n}\n\n.self-banner li::before {\n  content: '';\n  width: 8px;\n  height: 8px;\n  display: inline-block;\n  margin-right: 8px;\n  border-radius: 50%;\n  background: #0c65c5;\n}\n\n.recommend-list {\n  display: grid;\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n  gap: 10px;\n  margin-top: 10px;\n}\n\n.recommend-card {\n  height: 214px;\n  box-sizing: border-box;\n  cursor: pointer;\n  overflow: hidden;\n  border-radius: 4px;\n  background: #fff;\n  border: 1px solid #e7edf5;\n}\n\n.cover-wrap {\n  height: 116px;\n  position: relative;\n  overflow: hidden;\n  border-radius: 4px 4px 0 0;\n}\n\n.cover-wrap img {\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n  display: block;\n}\n\n.cover-wrap span {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  height: 24px;\n  line-height: 24px;\n  padding: 0 16px;\n  background: rgba(23, 50, 84, 0.72);\n  color: #fff;\n  font-size: 12px;\n  border-radius: 12px 0 0 0;\n}\n\n.recommend-title {\n  padding: 10px 10px 0;\n  font-size: 15px;\n  line-height: 20px;\n  font-weight: 700;\n  color: #0f1f33;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.tag-row {\n  display: flex;\n  gap: 8px;\n  padding: 6px 10px 0;\n  min-width: 0;\n}\n\n.tag-row span {\n  max-width: 100%;\n  height: 18px;\n  line-height: 18px;\n  padding: 0 7px;\n  border-radius: 2px;\n  background: #d7e8ff;\n  color: #2b6fbb;\n  font-size: 12px;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.record-list {\n  margin-top: 24px;\n  height: 480px;\n  overflow-y: auto;\n  padding-right: 4px;\n}\n\n.record-list::-webkit-scrollbar {\n  width: 4px;\n}\n\n.record-list::-webkit-scrollbar-thumb {\n  border-radius: 4px;\n  background: #bfd1e8;\n}\n\n.record-item {\n  height: 64px;\n  margin-bottom: 10px;\n  border-radius: 8px;\n  background: #edf2ff;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  box-sizing: border-box;\n  padding: 0 26px 0 24px;\n  cursor: pointer;\n}\n\n.record-info {\n  min-width: 0;\n}\n\n.record-title {\n  font-size: 14px;\n  line-height: 22px;\n  color: #17263a;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  max-width: 320px;\n}\n\n.record-time {\n  font-size: 12px;\n  line-height: 18px;\n  color: #8a98aa;\n}\n\n.record-item span {\n  font-size: 13px;\n  flex: 0 0 auto;\n}\n\n.record-item .todo {\n  color: #e7643b;\n}\n\n.record-item .done {\n  color: #45aa76;\n}\n\n.record-empty {\n  height: 200px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #8a98aa;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcExam.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcExam.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcExam.vue?vue&type=template&id=a34e0cee&scoped=true\"\nimport script from \"./PcExam.vue?vue&type=script&lang=js\"\nexport * from \"./PcExam.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcExam.vue?vue&type=style&index=0&id=a34e0cee&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"a34e0cee\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-exam-notice\"},[_c('div',{staticClass:\"breadcrumb\"},[_vm._v(\"当前位置：首页-测试\")]),_c('section',{staticClass:\"panel notice-panel\"},[_vm._m(0),_vm._m(1),_c('div',{staticClass:\"audio-row\"},[_c('audio',{ref:\"audioPlayer\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/test.mp3\"}}),_c('button',{staticClass:\"audio-icon small\",attrs:{\"type\":\"button\"}},[_vm._v(\"◀\")]),(!_vm.playing)?_c('button',{staticClass:\"audio-icon play\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.audioPlay}},[_vm._v(\"▶\")]):_c('button',{staticClass:\"audio-icon pause\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.audioPause}},[_vm._v(\"Ⅱ\")]),_c('button',{staticClass:\"audio-icon small\",attrs:{\"type\":\"button\"}},[_vm._v(\"▶\")])]),_c('div',{staticClass:\"action-row\"},[_c('button',{staticClass:\"start-btn\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.startExam}},[_vm._v(\"开始测试\")])])])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"panel-head\"},[_c('div',{staticClass:\"brand\"},[_c('span',{staticClass:\"brand-icon\"},[_vm._v(\"❖\")]),_c('strong',[_vm._v(\"能力自测\")])]),_c('h2',[_vm._v(\"考试说明\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('ol',{staticClass:\"rule-list\"},[_c('li',[_vm._v(\"请务必仔细聆听本段考试说明，说明会覆盖具体题型、考试要求，和试音。\")]),_c('li',[_vm._v(\"本次测试限时10分钟，在测试过程中，中途不允许退出。\")]),_c('li',[_vm._v(\"此次测试共涵盖听力、阅读两个部分，每部分各3个题目。题目只能依次作答，既不可跳过，也不能回退。\")]),_c('li',[_vm._v(\"听力部分的每段语音仅会朗读一遍，请务必保证您的手机处于静音状态，且音量已调整至适宜大小。\")]),_c('li',[_vm._v(\"在正式测试开始之前，您可以点击下方的语音图标来测试手机音量。\")]),_c('li',[_vm._v(\"倘若您已做好准备，请点击“开始测试”。\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-exam-notice\">\n    <div class=\"breadcrumb\">当前位置：首页-测试</div>\n\n    <section class=\"panel notice-panel\">\n      <div class=\"panel-head\">\n        <div class=\"brand\">\n          <span class=\"brand-icon\">❖</span>\n          <strong>能力自测</strong>\n        </div>\n        <h2>考试说明</h2>\n      </div>\n\n      <ol class=\"rule-list\">\n        <li>请务必仔细聆听本段考试说明，说明会覆盖具体题型、考试要求，和试音。</li>\n        <li>本次测试限时10分钟，在测试过程中，中途不允许退出。</li>\n        <li>此次测试共涵盖听力、阅读两个部分，每部分各3个题目。题目只能依次作答，既不可跳过，也不能回退。</li>\n        <li>听力部分的每段语音仅会朗读一遍，请务必保证您的手机处于静音状态，且音量已调整至适宜大小。</li>\n        <li>在正式测试开始之前，您可以点击下方的语音图标来测试手机音量。</li>\n        <li>倘若您已做好准备，请点击“开始测试”。</li>\n      </ol>\n\n      <div class=\"audio-row\">\n        <audio ref=\"audioPlayer\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/test.mp3\"></audio>\n        <button type=\"button\" class=\"audio-icon small\">◀</button>\n        <button v-if=\"!playing\" type=\"button\" class=\"audio-icon play\" @click=\"audioPlay\">▶</button>\n        <button v-else type=\"button\" class=\"audio-icon pause\" @click=\"audioPause\">Ⅱ</button>\n        <button type=\"button\" class=\"audio-icon small\">▶</button>\n      </div>\n\n      <div class=\"action-row\">\n        <button type=\"button\" class=\"start-btn\" @click=\"startExam\">开始测试</button>\n      </div>\n    </section>\n  </div>\n</template>\n\n<script>\nimport { StartMiniPaperTo } from '@/api/exam'\n\nexport default {\n  name: 'PcExamNotice',\n  data() {\n    return {\n      playing: false\n    }\n  },\n  methods: {\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    async startExam() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const response = await StartMiniPaperTo(user.sid)\n      const data = response.data\n      this.$router.push({ name: 'PcMiniPaper', query: { paper_id: data, count_load: 0, has_time: 600000 } })\n    },\n    audioPlay() {\n      this.playing = true\n      this.$refs.audioPlayer.play()\n    },\n    audioPause() {\n      this.playing = false\n      this.$refs.audioPlayer.pause()\n    }\n  }\n}\n</script>\n\n<style scoped>\n.pc-exam-notice {\n  width: 1114px;\n  height: 583px;\n  color: #121b2a;\n}\n\n.breadcrumb {\n  height: 26px;\n  font-size: 12px;\n  line-height: 18px;\n  color: #7c8794;\n}\n\n.panel {\n  background: rgba(255, 255, 255, 0.98);\n  border-radius: 6px;\n  box-sizing: border-box;\n}\n\n.notice-panel {\n  height: 551px;\n  padding: 16px 28px 24px;\n}\n\n.panel-head {\n  position: relative;\n  min-height: 38px;\n}\n\n.brand {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  color: #111b2c;\n  font-size: 16px;\n  font-weight: 700;\n}\n\n.brand-icon {\n  color: #69a8ea;\n  font-size: 18px;\n}\n\n.panel-head h2 {\n  position: absolute;\n  left: 50%;\n  top: 0;\n  transform: translateX(-50%);\n  margin: 0;\n  font-size: 18px;\n  line-height: 38px;\n  color: #111;\n}\n\n.rule-list {\n  margin: 22px 0 0;\n  padding-left: 20px;\n  font-size: 14px;\n  line-height: 30px;\n  color: #1f2937;\n}\n\n.audio-row {\n  height: 108px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 30px;\n  margin-top: 24px;\n}\n\n.audio-icon {\n  border: none;\n  background: transparent;\n  cursor: pointer;\n  padding: 0;\n  color: #808080;\n}\n\n.audio-icon.small {\n  font-size: 20px;\n}\n\n.audio-icon.play,\n.audio-icon.pause {\n  width: 40px;\n  height: 40px;\n  border-radius: 50%;\n  background: linear-gradient(180deg, #7cc4ff 0%, #2a8fe9 100%);\n  color: #fff;\n  font-size: 18px;\n}\n\n.audio-icon.pause {\n  width: 42px;\n  height: 42px;\n}\n\n.action-row {\n  display: flex;\n  justify-content: center;\n  margin-top: 10px;\n}\n\n.start-btn {\n  width: 296px;\n  height: 50px;\n  border-radius: 12px;\n  background: #0a4f98;\n  color: #fff;\n  font-size: 16px;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcExamNotice.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcExamNotice.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcExamNotice.vue?vue&type=template&id=68e1a27a&scoped=true\"\nimport script from \"./PcExamNotice.vue?vue&type=script&lang=js\"\nexport * from \"./PcExamNotice.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcExamNotice.vue?vue&type=style&index=0&id=68e1a27a&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"68e1a27a\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-mini-paper\"},[_c('div',{staticClass:\"breadcrumb\"},[_vm._v(\"当前位置：首页-测试\")]),_c('section',{staticClass:\"paper-panel\"},[_c('header',{staticClass:\"paper-head\"},[_c('div',{staticClass:\"part-title\"},[_c('span',{staticClass:\"title-icon\"},[_vm._v(\"❖\")]),_c('strong',[_vm._v(\"Part \"+_vm._s(_vm.part)+\" \"+_vm._s(_vm.partName))])]),_c('div',{staticClass:\"progress-wrap\"},[_c('div',{staticClass:\"progress-track\"},[_c('span',{style:({ width: _vm.progressWidth })})]),_c('div',{staticClass:\"progress-track\"}),_c('div',{staticClass:\"progress-track\"})]),_c('div',{staticClass:\"timer\"},[_c('span',[_vm._v(\"◴\")]),_vm._v(\" \"+_vm._s(_vm.remainText)+\" \")])]),(_vm.part == 1)?_c('div',{staticClass:\"listen-tip\"},[_c('audio',{ref:\"audioPlayer\",attrs:{\"src\":_vm.audioUrl,\"autoplay\":\"\"},on:{\"ended\":_vm.audioEnded}}),_c('span',{class:['music', { muted: _vm.audioStatus !== 1 }]},[_vm._v(\"♫\")]),_c('strong',[_vm._v(_vm._s(_vm.audioStatus == 1 ? '温馨提示：听力自动播放，只播放一次' : '温馨提示：播放完毕，请点击下一题'))])]):_vm._e(),(_vm.part == 1)?_c('div',{staticClass:\"directions\"},[_vm._v(\" Directions: In this section, you will hear a short conversation. At the end of each conversation, one question will be asked about what was said. Both the conversation and the question will be spoken only once. After each question, there will be a pause. During the pause, you must read the four choices marked A, B, C and D and decide which is the best answer. \")]):_c('div',{staticClass:\"read-content\"},[_c('p',[_vm._v(_vm._s(_vm.context))]),_c('strong',[_vm._v(_vm._s(_vm.countLoad + 1)+\". \"+_vm._s(_vm.paperInfo.question))])]),_c('div',{staticClass:\"option-list\"},_vm._l((_vm.options),function(item){return _c('button',{key:item.key,staticClass:\"option-row\",class:{ checked: _vm.paperInfo.is_check === item.key },attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.checkOption(item.key)}}},[_c('span',[_vm._v(_vm._s(item.key))]),_c('em',[_vm._v(_vm._s(item.text))])])}),0),_c('div',{staticClass:\"action-row\"},[(_vm.countLoad != 5)?_c('button',{staticClass:\"next-btn\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.nextPaper}},[_vm._v(\"下一题\")]):_c('button',{staticClass:\"next-btn submit-btn\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.submitPaper}},[_vm._v(\"提交\")])])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-mini-paper\">\n    <div class=\"breadcrumb\">当前位置：首页-测试</div>\n\n    <section class=\"paper-panel\">\n      <header class=\"paper-head\">\n        <div class=\"part-title\">\n          <span class=\"title-icon\">❖</span>\n          <strong>Part {{ part }} {{ partName }}</strong>\n        </div>\n        <div class=\"progress-wrap\">\n          <div class=\"progress-track\">\n            <span :style=\"{ width: progressWidth }\"></span>\n          </div>\n          <div class=\"progress-track\"></div>\n          <div class=\"progress-track\"></div>\n        </div>\n        <div class=\"timer\">\n          <span>◴</span>\n          {{ remainText }}\n        </div>\n      </header>\n\n      <div v-if=\"part == 1\" class=\"listen-tip\">\n        <audio\n          ref=\"audioPlayer\"\n          :src=\"audioUrl\"\n          autoplay\n          @ended=\"audioEnded\"\n        ></audio>\n        <span :class=\"['music', { muted: audioStatus !== 1 }]\">♫</span>\n        <strong>{{ audioStatus == 1 ? '温馨提示：听力自动播放，只播放一次' : '温馨提示：播放完毕，请点击下一题' }}</strong>\n      </div>\n\n      <div v-if=\"part == 1\" class=\"directions\">\n        Directions: In this section, you will hear a short conversation. At the end of each conversation, one\n        question will be asked about what was said. Both the conversation and the question will be spoken only once.\n        After each question, there will be a pause. During the pause, you must read the four choices marked A, B, C\n        and D and decide which is the best answer.\n      </div>\n\n      <div v-else class=\"read-content\">\n        <p>{{ context }}</p>\n        <strong>{{ countLoad + 1 }}. {{ paperInfo.question }}</strong>\n      </div>\n\n      <div class=\"option-list\">\n        <button\n          v-for=\"item in options\"\n          :key=\"item.key\"\n          type=\"button\"\n          class=\"option-row\"\n          :class=\"{ checked: paperInfo.is_check === item.key }\"\n          @click=\"checkOption(item.key)\"\n        >\n          <span>{{ item.key }}</span>\n          <em>{{ item.text }}</em>\n        </button>\n      </div>\n\n      <div class=\"action-row\">\n        <button v-if=\"countLoad != 5\" type=\"button\" class=\"next-btn\" @click=\"nextPaper\">下一题</button>\n        <button v-else type=\"button\" class=\"next-btn submit-btn\" @click=\"submitPaper\">提交</button>\n      </div>\n    </section>\n  </div>\n</template>\n\n<script>\nimport { getMiniPaperByListen2, getMiniPaperByRead, ListenMiniSubmit2, ReadMiniSubmit } from '@/api/exam'\n\nexport default {\n  name: 'PcMiniPaper',\n  data() {\n    return {\n      audioStatus: 1,\n      audioUrl: '',\n      context: '',\n      countLoad: 0,\n      limitTime: 600000,\n      remainingTime: 600000,\n      part: 1,\n      paperId: '',\n      quesId: '',\n      paperInfo: {},\n      timer: null\n    }\n  },\n  computed: {\n    partName() {\n      return this.part == 1 ? 'Listening' : 'Reading'\n    },\n    remainText() {\n      const totalSeconds = Math.max(0, Math.ceil(this.remainingTime / 1000))\n      const minutes = Math.floor(totalSeconds / 60)\n      const seconds = totalSeconds % 60\n      return `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`\n    },\n    progressWidth() {\n      return `${Math.min(100, ((this.countLoad + 1) / 6) * 100)}%`\n    },\n    options() {\n      return [\n        { key: 'A', text: this.paperInfo.optionA },\n        { key: 'B', text: this.paperInfo.optionB },\n        { key: 'C', text: this.paperInfo.optionC },\n        { key: 'D', text: this.paperInfo.optionD }\n      ].filter(item => item.text)\n    }\n  },\n  beforeDestroy() {\n    if (this.timer) clearInterval(this.timer)\n  },\n  methods: {\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    startTimer() {\n      if (this.timer) clearInterval(this.timer)\n      const start = Date.now()\n      const initial = Number(this.limitTime) || 600000\n      this.remainingTime = initial\n      this.timer = setInterval(() => {\n        this.remainingTime = Math.max(0, initial - (Date.now() - start))\n        if (this.remainingTime <= 0) {\n          clearInterval(this.timer)\n          this.submitPaper()\n        }\n      }, 1000)\n    },\n    audioEnded() {\n      this.audioStatus = 2\n    },\n    async loadListen() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const response = await getMiniPaperByListen2(user.sid, this.quesId)\n      const data = response.data || {}\n      if (response.code == 100) {\n        const questions = data.questions1 || []\n        const index = Math.floor(Math.random() * questions.length)\n        this.paperInfo = {\n          ...(questions[index] || {}),\n          is_check: ''\n        }\n        this.audioUrl = data.listeningShortConversation ? data.listeningShortConversation.audio : ''\n        this.audioStatus = 1\n        if (data.listeningShortConversation && data.listeningShortConversation.id) {\n          this.quesId = `${this.quesId},${data.listeningShortConversation.id}`\n        }\n      }\n    },\n    async loadRead() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const response = await getMiniPaperByRead(user.sid, this.quesId)\n      const data = response.data || {}\n      const question = data.questions || {}\n      this.paperInfo = {\n        ...question,\n        is_check: ''\n      }\n      this.context = data.readingPassage ? data.readingPassage.context : ''\n      this.part = 2\n      if (data.readingPassage && data.readingPassage.id) {\n        this.quesId = `${this.quesId},${data.readingPassage.id}`\n      }\n    },\n    checkOption(value) {\n      this.paperInfo = {\n        ...this.paperInfo,\n        is_check: value\n      }\n    },\n    async submitCurrentAnswer() {\n      const user = this.getUser()\n      if (!user.sid || !this.paperInfo.id) return\n      if (this.part == 1) {\n        const result = {\n          shortConversationList: [{\n            question_id: this.paperInfo.id,\n            answer: this.paperInfo.is_check || ''\n          }]\n        }\n        await ListenMiniSubmit2({ sid: user.sid, pc_id: this.paperId, result: JSON.stringify(result) })\n        return\n      }\n      const result = {\n        readingPassageList: [{\n          question_id: this.paperInfo.id,\n          answer: this.paperInfo.is_check || ''\n        }]\n      }\n      await ReadMiniSubmit({ sid: user.sid, pc_id: this.paperId, result: JSON.stringify(result) })\n    },\n    async nextPaper() {\n      await this.submitCurrentAnswer()\n      this.countLoad = Number(this.countLoad) + 1\n      if (this.countLoad < 3) {\n        this.part = 1\n        await this.loadListen()\n      } else {\n        this.part = 2\n        await this.loadRead()\n      }\n      this.$router.replace({\n        name: 'PcMiniPaper',\n        query: {\n          paper_id: this.paperId,\n          count_load: this.countLoad,\n          has_time: this.remainingTime,\n          timestamp: Date.now()\n        }\n      })\n    },\n    async submitPaper() {\n      await this.submitCurrentAnswer()\n      this.$router.push({ name: 'PcExamReport', query: { pc_id: this.paperId } })\n    },\n    async loadPaper() {\n      if (this.countLoad < 3) {\n        this.part = 1\n        await this.loadListen()\n      } else {\n        this.part = 2\n        await this.loadRead()\n      }\n    }\n  },\n  mounted() {\n    this.paperId = this.$route.query.paper_id\n    this.countLoad = Number(this.$route.query.count_load || 0)\n    this.limitTime = Number(this.$route.query.has_time || 600000)\n    this.startTimer()\n    this.loadPaper()\n  }\n}\n</script>\n\n<style scoped>\n.pc-mini-paper {\n  width: 1114px;\n  height: 583px;\n  color: #121b2a;\n}\n\n.breadcrumb {\n  height: 26px;\n  font-size: 12px;\n  line-height: 18px;\n  color: #7c8794;\n}\n\n.paper-panel {\n  height: 551px;\n  box-sizing: border-box;\n  padding: 18px 28px 34px;\n  border-radius: 6px;\n  background: rgba(255, 255, 255, 0.98);\n}\n\n.paper-head {\n  display: grid;\n  grid-template-columns: 250px 1fr 88px;\n  align-items: center;\n  gap: 22px;\n}\n\n.part-title {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  font-size: 17px;\n  color: #111;\n}\n\n.title-icon {\n  color: #69a8ea;\n  font-size: 18px;\n}\n\n.progress-wrap {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 4px;\n}\n\n.progress-track {\n  height: 7px;\n  border-radius: 3px;\n  background: #eeeeee;\n  overflow: hidden;\n}\n\n.progress-track span {\n  display: block;\n  height: 100%;\n  background: linear-gradient(90deg, #aee8f5 0%, #49a5f0 100%);\n}\n\n.timer {\n  display: flex;\n  align-items: center;\n  justify-content: flex-end;\n  gap: 7px;\n  color: #ff2f37;\n  font-size: 16px;\n}\n\n.listen-tip {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-top: 22px;\n  color: #f04f53;\n  font-size: 14px;\n}\n\n.music {\n  width: 28px;\n  height: 28px;\n  border-radius: 4px;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  background: #72c3fb;\n  color: #fff;\n  font-size: 18px;\n}\n\n.music.muted {\n  background: #d6d9dd;\n}\n\n.directions,\n.read-content {\n  width: 1000px;\n  margin-top: 14px;\n  font-size: 16px;\n  line-height: 20px;\n  color: #111;\n}\n\n.read-content {\n  max-height: 168px;\n  overflow-y: auto;\n  line-height: 24px;\n}\n\n.read-content p {\n  margin: 0 0 16px;\n}\n\n.option-list {\n  width: 730px;\n  margin-top: 26px;\n}\n\n.option-row {\n  width: 100%;\n  height: 36px;\n  display: grid;\n  grid-template-columns: 48px 1fr;\n  align-items: center;\n  margin-bottom: 5px;\n  border: none;\n  background: #f0f0f2;\n  color: #111;\n  cursor: pointer;\n  text-align: left;\n  padding: 0;\n}\n\n.option-row.checked {\n  background: #e2f9ff;\n  box-shadow: inset 0 0 0 1px #6db7e8;\n}\n\n.option-row span {\n  text-align: center;\n  font-size: 15px;\n}\n\n.option-row em {\n  font-style: normal;\n  font-size: 15px;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.action-row {\n  display: flex;\n  justify-content: center;\n  margin-top: 50px;\n}\n\n.next-btn {\n  width: 288px;\n  height: 48px;\n  border-radius: 12px;\n  border: 1px solid #0a4f98;\n  background: #fff;\n  color: #0a4f98;\n  font-size: 16px;\n  cursor: pointer;\n}\n\n.submit-btn {\n  background: #0a4f98;\n  color: #fff;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcMiniPaper.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcMiniPaper.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcMiniPaper.vue?vue&type=template&id=5784be95&scoped=true\"\nimport script from \"./PcMiniPaper.vue?vue&type=script&lang=js\"\nexport * from \"./PcMiniPaper.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcMiniPaper.vue?vue&type=style&index=0&id=5784be95&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"5784be95\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-exam-report\"},[_c('section',{staticClass:\"report-panel\"},[_vm._m(0),(_vm.loading)?_c('div',{staticClass:\"empty-state\"},[_vm._v(\"加载中..\")]):(_vm.reportItems.length === 0)?_c('div',{staticClass:\"empty-state\"},[_vm._v(\"暂无自测结果\")]):_c('div',{staticClass:\"report-scroll\"},[(_vm.listenItems.length)?_c('section',{staticClass:\"part-section\"},[_c('h2',[_vm._v(\"Part-1  听力\")]),_vm._l((_vm.listenItems),function(item,index){return _c('article',{key:item.key,staticClass:\"question-block\",class:{ first: index === 0 }},[_c('p',{staticClass:\"directions\"},[_vm._v(\" Directions: In this section, you will hear a short conversation. At the end of each conversation, one question will be asked about what was said. Both the conversation and the question will be spoken only once. After each question, there will be a pause. During the pause, you must read the four choices marked A, B, C and D and decide which is the best answer. \")]),_c('OptionRows',{attrs:{\"options\":item.options}}),_c('div',{staticClass:\"answer-line\"},[_c('span',[_vm._v(\"正确答案：\"+_vm._s(item.answer || '-'))]),_c('span',[_vm._v(\"你的答案：\"+_vm._s(item.userAnswer || '-'))])])],1)})],2):_vm._e(),(_vm.readItems.length)?_c('section',{staticClass:\"part-section read-section\"},[_c('h2',[_vm._v(\"Part-2  阅读\")]),_vm._l((_vm.readItems),function(item){return _c('article',{key:item.key,staticClass:\"question-block read-block\"},[(item.context)?_c('p',{staticClass:\"article-text\"},[_c('span',[_vm._v(\"原文：\")]),_vm._v(_vm._s(item.context)+\" \")]):_vm._e(),_c('h3',[_vm._v(_vm._s(item.question))]),_c('OptionRows',{attrs:{\"options\":item.options}}),_c('div',{staticClass:\"answer-line\"},[_c('span',[_vm._v(\"正确答案：\"+_vm._s(item.answer || '-'))]),_c('span',[_vm._v(\"你的答案：\"+_vm._s(item.userAnswer || '-'))])])],1)})],2):_vm._e()])])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"panel-title\"},[_c('span',{staticClass:\"title-icon\"}),_c('strong',[_vm._v(\"自测详情\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-exam-report\">\n    <section class=\"report-panel\">\n      <div class=\"panel-title\">\n        <span class=\"title-icon\"></span>\n        <strong>自测详情</strong>\n      </div>\n\n      <div v-if=\"loading\" class=\"empty-state\">加载中..</div>\n      <div v-else-if=\"reportItems.length === 0\" class=\"empty-state\">暂无自测结果</div>\n      <div v-else class=\"report-scroll\">\n        <section v-if=\"listenItems.length\" class=\"part-section\">\n          <h2>Part-1&nbsp;&nbsp;听力</h2>\n          <article\n            v-for=\"(item, index) in listenItems\"\n            :key=\"item.key\"\n            class=\"question-block\"\n            :class=\"{ first: index === 0 }\"\n          >\n            <p class=\"directions\">\n              Directions: In this section, you will hear a short conversation. At the end of each conversation, one\n              question will be asked about what was said. Both the conversation and the question will be spoken only\n              once. After each question, there will be a pause. During the pause, you must read the four choices\n              marked A, B, C and D and decide which is the best answer.\n            </p>\n            <OptionRows :options=\"item.options\" />\n            <div class=\"answer-line\">\n              <span>正确答案：{{ item.answer || '-' }}</span>\n              <span>你的答案：{{ item.userAnswer || '-' }}</span>\n            </div>\n          </article>\n        </section>\n\n        <section v-if=\"readItems.length\" class=\"part-section read-section\">\n          <h2>Part-2&nbsp;&nbsp;阅读</h2>\n          <article\n            v-for=\"item in readItems\"\n            :key=\"item.key\"\n            class=\"question-block read-block\"\n          >\n            <p v-if=\"item.context\" class=\"article-text\">\n              <span>原文：</span>{{ item.context }}\n            </p>\n            <h3>{{ item.question }}</h3>\n            <OptionRows :options=\"item.options\" />\n            <div class=\"answer-line\">\n              <span>正确答案：{{ item.answer || '-' }}</span>\n              <span>你的答案：{{ item.userAnswer || '-' }}</span>\n            </div>\n          </article>\n        </section>\n      </div>\n    </section>\n  </div>\n</template>\n\n<script>\nimport Vue from 'vue'\nimport { getMiniPaperRow } from '@/api/exam'\n\nconst optionKeys = ['A', 'B', 'C', 'D']\n\nconst OptionRows = Vue.component('PcExamReportOptionRows', {\n  functional: true,\n  props: {\n    options: { type: Array, default: () => [] }\n  },\n  render(h, ctx) {\n    return h('div', { class: 'option-list' }, ctx.props.options.map(option => (\n      h('div', { key: option.key, class: ['option-row', option.state] }, [\n        h('span', option.key),\n        h('em', option.text)\n      ])\n    )))\n  }\n})\n\nexport default {\n  name: 'PcExamReport',\n  components: { OptionRows },\n  data() {\n    return {\n      pcId: '',\n      examList: [],\n      loading: false\n    }\n  },\n  computed: {\n    reportItems() {\n      return this.examList\n        .map((item, index) => this.normalizeItem(item, index))\n        .filter(Boolean)\n    },\n    listenItems() {\n      return this.reportItems.filter(item => item.type === 'listen')\n    },\n    readItems() {\n      return this.reportItems.filter(item => item.type === 'read')\n    }\n  },\n  methods: {\n    parseJson(value, fallback) {\n      if (Array.isArray(value) || (value && typeof value === 'object')) return value\n      if (!value) return fallback\n      try {\n        return JSON.parse(value)\n      } catch (error) {\n        return fallback\n      }\n    },\n    cleanText(value) {\n      return String(value || '')\n        .replace(/<[^>]+>/g, '')\n        .replace(/&nbsp;/gi, ' ')\n        .replace(/\\s+/g, ' ')\n        .trim()\n    },\n    normalizeAnswerValue(value) {\n      const text = String(value || '').trim()\n      if (!text) return ''\n      return text.toUpperCase()\n    },\n    answerFromResult(result, key, questionId) {\n      const list = Array.isArray(result && result[key]) ? result[key] : []\n      const matched = list.find(item => String(item.question_id) === String(questionId)) || list[0] || {}\n      return this.normalizeAnswerValue(matched.answer)\n    },\n    optionText(question, key) {\n      return question[`option${key}`] || question[`option${key.toLowerCase()}`] || ''\n    },\n    buildOptions(question, answer, userAnswer) {\n      return optionKeys\n        .map(key => {\n          const state = key === answer ? 'right' : key === userAnswer && userAnswer !== answer ? 'wrong' : ''\n          return {\n            key,\n            text: this.cleanText(this.optionText(question, key)),\n            state\n          }\n        })\n        .filter(item => item.text)\n    },\n    normalizeItem(item, index) {\n      const type = Number(item.type)\n      const result = this.parseJson(item.result, {})\n\n      if (type === 1) {\n        const question = item.listeningShortConversationQuestion || {}\n        const answer = this.normalizeAnswerValue(question.answer)\n        const userAnswer = this.answerFromResult(result, 'shortConversationList', question.id)\n        return {\n          key: `listen-${item.id || index}`,\n          type: 'listen',\n          answer,\n          userAnswer,\n          options: this.buildOptions(question, answer, userAnswer)\n        }\n      }\n\n      if (type === 2) {\n        const question = item.readingPassageQuestion || {}\n        const passage = item.readingPassage || {}\n        const answer = this.normalizeAnswerValue(question.answer)\n        const userAnswer = this.answerFromResult(result, 'readingPassageList', question.id)\n        return {\n          key: `read-${item.id || index}`,\n          type: 'read',\n          context: this.cleanText(passage.context || item.context || ''),\n          question: this.cleanText(question.question || question.questions || ''),\n          answer,\n          userAnswer,\n          options: this.buildOptions(question, answer, userAnswer)\n        }\n      }\n\n      return null\n    },\n    getRoutePaperId() {\n      const value = this.$route.query.pc_id || this.$route.query.resource_id || ''\n      const match = String(value).match(/\\d+/)\n      return match ? match[0] : value\n    },\n    async loadReport() {\n      if (!this.pcId) return\n      this.loading = true\n      try {\n        const response = await getMiniPaperRow(this.pcId)\n        const data = Array.isArray(response.data) ? response.data : []\n        this.examList = data.map(item => ({\n          ...item,\n          result: this.parseJson(item.result, {})\n        }))\n      } finally {\n        this.loading = false\n      }\n    }\n  },\n  mounted() {\n    this.pcId = this.getRoutePaperId()\n    this.loadReport()\n  }\n}\n</script>\n\n<style scoped>\n.pc-exam-report {\n  width: 1114px;\n  height: 583px;\n  color: #101827;\n  font-size: 13px;\n}\n\n.report-panel {\n  height: 583px;\n  padding: 16px 28px 20px;\n  box-sizing: border-box;\n  border-radius: 6px;\n  background: rgba(255, 255, 255, 0.62);\n  overflow: hidden;\n}\n\n.panel-title {\n  height: 20px;\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n.title-icon {\n  width: 13px;\n  height: 13px;\n  display: inline-block;\n  background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat;\n}\n\n.panel-title strong {\n  font-size: 15px;\n  line-height: 20px;\n  color: #111c2d;\n}\n\n.report-scroll {\n  height: 523px;\n  margin-top: 8px;\n  overflow-y: auto;\n  padding-right: 14px;\n}\n\n.report-scroll::-webkit-scrollbar {\n  width: 4px;\n}\n\n.report-scroll::-webkit-scrollbar-thumb {\n  border-radius: 999px;\n  background: rgba(88, 124, 168, 0.28);\n}\n\n.part-section h2 {\n  margin: 0 0 8px;\n  font-size: 14px;\n  line-height: 20px;\n  color: #101827;\n}\n\n.read-section {\n  margin-top: 36px;\n}\n\n.question-block {\n  width: 100%;\n  max-width: 1010px;\n  margin-top: 20px;\n}\n\n.question-block.first {\n  margin-top: 0;\n}\n\n.directions,\n.article-text {\n  max-width: 980px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 16px;\n  color: #182235;\n}\n\n.article-text span {\n  font-weight: 700;\n}\n\n.read-block h3 {\n  margin: 0 0 12px;\n  max-width: 850px;\n  font-size: 13px;\n  line-height: 18px;\n  color: #101827;\n}\n\n::v-deep .option-list {\n  width: 396px;\n  display: grid;\n  gap: 3px;\n}\n\n::v-deep .option-row {\n  min-height: 30px;\n  display: grid;\n  grid-template-columns: 40px 1fr;\n  align-items: center;\n  background: #d5e0f3;\n  color: #142033;\n}\n\n::v-deep .option-row span {\n  text-align: center;\n  font-size: 13px;\n}\n\n::v-deep .option-row em {\n  min-width: 0;\n  padding-right: 12px;\n  font-style: normal;\n  font-size: 13px;\n  line-height: 18px;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n::v-deep .option-row.right {\n  background: #20c62b;\n  color: #fff;\n}\n\n::v-deep .option-row.wrong {\n  background: #e2253a;\n  color: #fff;\n}\n\n.answer-line {\n  display: flex;\n  gap: 22px;\n  margin-top: 7px;\n  font-size: 12px;\n  line-height: 18px;\n  color: #162238;\n}\n\n.empty-state {\n  height: 520px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #8a98aa;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcExamReport.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcExamReport.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcExamReport.vue?vue&type=template&id=372b760c&scoped=true\"\nimport script from \"./PcExamReport.vue?vue&type=script&lang=js\"\nexport * from \"./PcExamReport.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcExamReport.vue?vue&type=style&index=0&id=372b760c&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"372b760c\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-ai\"},[_c('section',{staticClass:\"panel ai-panel\"},[_c('PanelTitle',{attrs:{\"title\":\"AI伴学\"}}),_c('div',{staticClass:\"ai-grid\"},_vm._l((_vm.aiCards),function(item){return _c('div',{key:item.title,staticClass:\"ai-card\",class:item.cls,on:{\"click\":function($event){return _vm.go(item.path)}}},[_c('div',{staticClass:\"ai-copy\"},[_c('h2',[_vm._v(_vm._s(item.title))])]),_c('div',{staticClass:\"ai-icon\"},[_c('img',{attrs:{\"src\":item.icon}})])])}),0)],1),_c('section',{staticClass:\"panel recommend-panel\"},[_c('div',{staticClass:\"panel-head\"},[_c('PanelTitle',{attrs:{\"title\":\"推荐学习\"}}),_c('button',{attrs:{\"type\":\"button\"},on:{\"click\":_vm.toStudyList}},[_vm._v(\"全部>\")])],1),_c('div',{staticClass:\"recommend-list\"},_vm._l((_vm.recommendCourses),function(item){return _c('div',{key:item.id,staticClass:\"recommend-card\",on:{\"click\":function($event){return _vm.toPraxis(item)}}},[_c('div',{staticClass:\"cover-wrap\"},[_c('img',{attrs:{\"src\":item.cover}}),_c('span',[_vm._v(\"继续学习\")])]),_c('div',{staticClass:\"recommend-title\"},[_vm._v(_vm._s(item.name))]),_c('div',{staticClass:\"tag-row\"},[_c('span',[_vm._v(_vm._s(_vm.categoryName(item.category_id)))]),_c('span',[_vm._v(_vm._s(item.subject_name || item.subject || '生命与健康'))])])])}),0)])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-ai\">\n    <section class=\"panel ai-panel\">\n      <PanelTitle title=\"AI伴学\" />\n      <div class=\"ai-grid\">\n        <div v-for=\"item in aiCards\" :key=\"item.title\" class=\"ai-card\" :class=\"item.cls\" @click=\"go(item.path)\">\n          <div class=\"ai-copy\">\n            <h2>{{ item.title }}</h2>\n          </div>\n          <div class=\"ai-icon\">\n            <img :src=\"item.icon\" />\n          </div>\n        </div>\n      </div>\n    </section>\n\n    <section class=\"panel recommend-panel\">\n      <div class=\"panel-head\">\n        <PanelTitle title=\"推荐学习\" />\n        <button type=\"button\" @click=\"toStudyList\">全部&gt;</button>\n      </div>\n      <div class=\"recommend-list\">\n        <div v-for=\"item in recommendCourses\" :key=\"item.id\" class=\"recommend-card\" @click=\"toPraxis(item)\">\n          <div class=\"cover-wrap\">\n            <img :src=\"item.cover\" />\n            <span>继续学习</span>\n          </div>\n          <div class=\"recommend-title\">{{ item.name }}</div>\n          <div class=\"tag-row\">\n            <span>{{ categoryName(item.category_id) }}</span>\n            <span>{{ item.subject_name || item.subject || '生命与健康' }}</span>\n          </div>\n        </div>\n      </div>\n    </section>\n  </div>\n</template>\n\n<script>\nimport Vue from 'vue'\nimport { HotResouceList } from '@/api/home'\nimport { saveUserStudyResource } from '@/api/user'\n\nconst PanelTitle = Vue.component('AiPanelTitle', {\n  functional: true,\n  props: { title: String },\n  render(h, ctx) {\n    return h('div', { class: 'title-wrap' }, [\n      h('span', { class: 'title-icon' }),\n      h('strong', ctx.props.title)\n    ])\n  }\n})\n\nexport default {\n  name: 'PcAi',\n  components: { PanelTitle },\n  data() {\n    return {\n      aiCards: [\n        {\n          title: 'E-Talk',\n          path: '/etalk/index',\n          icon: 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/e-talk/e-talk.png',\n          cls: 'talk-card',\n        },\n        {\n          title: 'E-Listen',\n          path: '/listen/index',\n          icon: 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/e-talk/e-listen.png',\n          cls: 'listen-card',\n        },\n        {\n          title: 'E-Read',\n          path: '/read/index',\n          icon: 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/e-talk/e-read.png',\n          cls: 'read-card',\n        },\n        {\n          title: 'E-Write',\n          path: '/write/index',\n          icon: 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/e-talk/e-write.png',\n          cls: 'write-card',\n        }\n      ],\n      recommendCourses: []\n    }\n  },\n  methods: {\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    categoryName(id) {\n      if (id == 1) return '听力'\n      if (id == 2) return '口语'\n      if (id == 3) return '阅读'\n      if (id == 4) return '写作'\n      return '学习'\n    },\n    async loadRecommend() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const response = await HotResouceList(user.sid)\n      this.recommendCourses = (response.data || []).slice(0, 5)\n    },\n    go(path) {\n      this.$router.push(path)\n    },\n    toStudyList() {\n      this.$router.push({ name: 'StudyList', query: { now_status: 0 } })\n    },\n    async toPraxis(item) {\n      const user = this.getUser()\n      if (!user.sid || !item) return\n      const response = await saveUserStudyResource({ sid: user.sid, resource_id: item.id })\n      if (response.code != 100) return\n      if (item.category_id == 1) {\n        this.$router.push({ name: 'PcListenPraxis', query: { log_id: response.data, resources_id: item.id } })\n      } else if (item.category_id == 4) {\n        this.$router.push({ name: 'PcWritePraxis', query: { log_id: response.data, resources_id: item.id } })\n      } else {\n        this.$router.push({ name: 'PcReadPraxis', query: { log_id: response.data, resources_id: item.id } })\n      }\n    }\n  },\n  mounted() {\n    this.loadRecommend()\n  }\n}\n</script>\n\n<style scoped>\n.pc-ai {\n  width: 1098px;\n  display: grid;\n  gap: 14px;\n}\n\n.panel {\n  background: rgba(225, 239, 255, 0.82);\n  border-radius: 6px;\n  box-sizing: border-box;\n  padding: 14px 20px 16px;\n}\n\n.ai-panel {\n  padding-bottom: 18px;\n}\n\n.recommend-panel {\n  padding: 12px 14px 18px;\n}\n\n::v-deep .title-wrap,\n.panel-head {\n  display: flex;\n  align-items: center;\n}\n\n.panel-head {\n  justify-content: space-between;\n}\n\n::v-deep .title-icon {\n  width: 13px;\n  height: 13px;\n  margin-right: 6px;\n  background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat;\n}\n\n::v-deep .title-wrap strong {\n  font-size: 16px;\n  line-height: 22px;\n  color: #152237;\n}\n\nbutton {\n  border: none;\n  background: transparent;\n  color: #6f7f94;\n  cursor: pointer;\n  padding: 0;\n  font-size: 12px;\n}\n\n.ai-grid {\n  display: grid;\n  grid-template-columns: repeat(2, 1fr);\n  gap: 22px 16px;\n  margin-top: 16px;\n}\n\n.ai-card {\n  height: 132px;\n  border-radius: 8px;\n  box-sizing: border-box;\n  padding: 28px 28px 18px 34px;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n}\n\n.talk-card {\n  background: linear-gradient(90deg, rgba(168, 189, 248, 0.56), rgba(201, 215, 255, 0.82));\n}\n\n.listen-card {\n  background: linear-gradient(90deg, rgba(197, 228, 255, 0.55), rgba(219, 239, 255, 0.9));\n}\n\n.read-card {\n  background: linear-gradient(90deg, rgba(223, 214, 239, 0.66), rgba(232, 228, 248, 0.94));\n}\n\n.write-card {\n  background: linear-gradient(90deg, rgba(189, 207, 255, 0.62), rgba(212, 226, 255, 0.92));\n}\n\n.ai-copy h2 {\n  margin: 0;\n  font-size: 24px;\n  line-height: 32px;\n  color: #17263a;\n}\n\n.ai-copy p {\n  margin: 8px 0 0;\n  font-size: 14px;\n  color: #17263a;\n}\n\n.ai-icon {\n  width: 146px;\n  height: 76px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n.ai-icon img {\n  width: 96px;\n  height: 96px;\n  object-fit: contain;\n}\n\n.recommend-list {\n  display: grid;\n  grid-template-columns: repeat(5, minmax(0, 1fr));\n  gap: 8px;\n  margin-top: 12px;\n}\n\n.recommend-card {\n  height: 214px;\n  box-sizing: border-box;\n  cursor: pointer;\n  overflow: hidden;\n  background: #fff;\n  border: 1px solid #e7edf5;\n  border-radius: 4px;\n}\n\n.cover-wrap {\n  height: 122px;\n  position: relative;\n  overflow: hidden;\n}\n\n.cover-wrap img {\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n  display: block;\n}\n\n.cover-wrap span {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  height: 24px;\n  line-height: 24px;\n  padding: 0 16px;\n  background: rgba(23, 50, 84, 0.72);\n  color: #fff;\n  font-size: 12px;\n  border-radius: 12px 0 0 0;\n}\n\n.recommend-title {\n  padding: 8px 14px 0;\n  font-size: 16px;\n  line-height: 22px;\n  font-weight: 700;\n  color: #0f1f33;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.tag-row {\n  display: flex;\n  gap: 8px;\n  padding: 4px 14px 0;\n}\n\n.tag-row span {\n  height: 18px;\n  line-height: 18px;\n  padding: 0 7px;\n  border-radius: 2px;\n  background: #d7e8ff;\n  color: #2b6fbb;\n  font-size: 12px;\n}\n\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcAi.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcAi.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcAi.vue?vue&type=template&id=50d481e1&scoped=true\"\nimport script from \"./PcAi.vue?vue&type=script&lang=js\"\nexport * from \"./PcAi.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcAi.vue?vue&type=style&index=0&id=50d481e1&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"50d481e1\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-plant\"},[_c('div',{staticClass:\"left-col\"},[_c('section',{staticClass:\"panel plan-panel\"},[_c('PanelTitle',{attrs:{\"title\":\"提升计划\"}}),_c('div',{staticClass:\"level-row\"},[_c('span',{staticClass:\"lv old\"},[_vm._v(\"LV.3\")]),_c('div',{staticClass:\"progress-bar\"},[_c('i',{style:({ width: `${_vm.progressWidth}%` })})]),_c('span',{staticClass:\"lv next\"},[_vm._v(\"LV.4\")])]),_c('div',{staticClass:\"today-card\"},[_c('div',{staticClass:\"today-head\"},[_c('div',[_vm._m(0),_c('p',[_vm._v(_vm._s(_vm.todayMinutes)+\"min/\"+_vm._s(_vm.planMinutes)+\"min\")])]),_c('button',{attrs:{\"type\":\"button\"},on:{\"click\":_vm.toPlanSetting}},[_vm._v(\"计划管理\")])]),_c('div',{staticClass:\"stats-grid\"},[_c('div',{staticClass:\"stat-box\"},[_c('span',[_vm._v(\"听力\")]),_c('strong',[_vm._v(_vm._s(_vm.typeCounts.listen))]),_c('i')]),_c('div',{staticClass:\"stat-box\"},[_c('span',[_vm._v(\"阅读\")]),_c('strong',[_vm._v(_vm._s(_vm.typeCounts.read))]),_c('i',{staticClass:\"read\"})]),_c('div',{staticClass:\"stat-box\"},[_c('span',[_vm._v(\"写作\")]),_c('strong',[_vm._v(_vm._s(_vm.typeCounts.write))]),_c('i',{staticClass:\"write\"})])]),_c('button',{staticClass:\"study-btn\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.goToStudy}},[_vm._v(\"去学习\")])])],1),_c('section',{staticClass:\"panel list-panel\"},[_c('div',{staticClass:\"panel-head\"},[_c('PanelTitle',{attrs:{\"title\":\"任务一览\"}})],1),_c('div',{staticClass:\"task-list\"},[_vm._l((_vm.taskList),function(item){return _c('div',{key:item.id,staticClass:\"task-item\",on:{\"click\":function($event){return _vm.toPraxis(item)}}},[_c('img',{attrs:{\"src\":item.cover}}),_c('div',{staticClass:\"task-info\"},[_c('div',{staticClass:\"task-title\"},[_vm._v(_vm._s(_vm.taskTitle(item)))]),_c('div',{staticClass:\"task-date\"},[_vm._v(_vm._s(_vm.itemDateText(item)))])]),_c('button',{attrs:{\"type\":\"button\"}},[_vm._v(\"开始学习\")])])}),(_vm.taskList.length === 0)?_c('div',{staticClass:\"task-empty\"},[_vm._v(\"暂无任务\")]):_vm._e()],2)])]),_c('div',{staticClass:\"right-col\"},[_c('section',{staticClass:\"panel self-panel\"},[_c('PanelTitle',{attrs:{\"title\":\"能力自测\"}}),_c('div',{staticClass:\"self-banner\",style:({ backgroundImage: `url(${_vm.plantBg})` }),on:{\"click\":_vm.startExam}},[_c('div',{staticClass:\"banner-copy\"},[_c('h1',[_vm._v(\"能力自测\")]),_c('p',[_vm._v(\"下次测试：\"+_vm._s(_vm.selfExamTime))])]),_vm._m(1)])],1),_c('section',{staticClass:\"panel recommend-panel\"},[_c('div',{staticClass:\"panel-head\"},[_c('PanelTitle',{attrs:{\"title\":\"推荐学习\"}}),_c('button',{attrs:{\"type\":\"button\"},on:{\"click\":_vm.goToStudyList}},[_vm._v(\"全部>\")])],1),_c('div',{staticClass:\"recommend-list\"},_vm._l((_vm.recommendCourses),function(item){return _c('div',{key:item.id,staticClass:\"recommend-card\",on:{\"click\":function($event){return _vm.toPraxis(item)}}},[_c('div',{staticClass:\"cover-wrap\"},[_c('img',{attrs:{\"src\":item.cover}})]),_c('div',{staticClass:\"recommend-title\"},[_vm._v(_vm._s(item.name))]),_c('div',{staticClass:\"tag-row\"},[_c('span',[_vm._v(_vm._s(_vm.categoryName(item.category_id)))]),_c('span',[_vm._v(_vm._s(item.subject_name || item.subject || '生命与健康'))])]),_c('div',{staticClass:\"recommend-date\"},[_vm._v(_vm._s(_vm.itemDateText(item)))])])}),0)])])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('h2',[_vm._v(\"今日任务 \"),_c('span',[_vm._v(\"（未完成）\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('ul',[_c('li',[_vm._v(\"准确性高\")]),_c('li',[_vm._v(\"人工智能分析\")]),_c('li',[_vm._v(\"强大算法支持\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-plant\">\n    <div class=\"left-col\">\n      <section class=\"panel plan-panel\">\n        <PanelTitle title=\"提升计划\" />\n        <div class=\"level-row\">\n          <span class=\"lv old\">LV.3</span>\n          <div class=\"progress-bar\"><i :style=\"{ width: `${progressWidth}%` }\"></i></div>\n          <span class=\"lv next\">LV.4</span>\n        </div>\n\n        <div class=\"today-card\">\n          <div class=\"today-head\">\n            <div>\n              <h2>今日任务 <span>（未完成）</span></h2>\n              <p>{{ todayMinutes }}min/{{ planMinutes }}min</p>\n            </div>\n            <button type=\"button\" @click=\"toPlanSetting\">计划管理</button>\n          </div>\n\n          <div class=\"stats-grid\">\n            <div class=\"stat-box\">\n              <span>听力</span>\n              <strong>{{ typeCounts.listen }}</strong>\n              <i></i>\n            </div>\n            <div class=\"stat-box\">\n              <span>阅读</span>\n              <strong>{{ typeCounts.read }}</strong>\n              <i class=\"read\"></i>\n            </div>\n            <div class=\"stat-box\">\n              <span>写作</span>\n              <strong>{{ typeCounts.write }}</strong>\n              <i class=\"write\"></i>\n            </div>\n          </div>\n\n          <button type=\"button\" class=\"study-btn\" @click=\"goToStudy\">去学习</button>\n        </div>\n      </section>\n\n      <section class=\"panel list-panel\">\n        <div class=\"panel-head\">\n          <PanelTitle title=\"任务一览\" />\n        </div>\n        <div class=\"task-list\">\n          <div v-for=\"item in taskList\" :key=\"item.id\" class=\"task-item\" @click=\"toPraxis(item)\">\n            <img :src=\"item.cover\" />\n            <div class=\"task-info\">\n              <div class=\"task-title\">{{ taskTitle(item) }}</div>\n              <div class=\"task-date\">{{ itemDateText(item) }}</div>\n            </div>\n            <button type=\"button\">开始学习</button>\n          </div>\n          <div v-if=\"taskList.length === 0\" class=\"task-empty\">暂无任务</div>\n        </div>\n      </section>\n    </div>\n\n    <div class=\"right-col\">\n      <section class=\"panel self-panel\">\n        <PanelTitle title=\"能力自测\" />\n        <div class=\"self-banner\" :style=\"{ backgroundImage: `url(${plantBg})` }\" @click=\"startExam\">\n          <div class=\"banner-copy\">\n            <h1>能力自测</h1>\n            <p>下次测试：{{ selfExamTime }}</p>\n          </div>\n          <ul>\n            <li>准确性高</li>\n            <li>人工智能分析</li>\n            <li>强大算法支持</li>\n          </ul>\n        </div>\n      </section>\n\n      <section class=\"panel recommend-panel\">\n        <div class=\"panel-head\">\n          <PanelTitle title=\"推荐学习\" />\n          <button type=\"button\" @click=\"goToStudyList\">全部&gt;</button>\n        </div>\n        <div class=\"recommend-list\">\n          <div v-for=\"item in recommendCourses\" :key=\"item.id\" class=\"recommend-card\" @click=\"toPraxis(item)\">\n            <div class=\"cover-wrap\">\n              <img :src=\"item.cover\" />\n            </div>\n            <div class=\"recommend-title\">{{ item.name }}</div>\n            <div class=\"tag-row\">\n              <span>{{ categoryName(item.category_id) }}</span>\n              <span>{{ item.subject_name || item.subject || '生命与健康' }}</span>\n            </div>\n            <div class=\"recommend-date\">{{ itemDateText(item) }}</div>\n          </div>\n        </div>\n      </section>\n    </div>\n  </div>\n</template>\n\n<script>\nimport Vue from 'vue'\nimport { getNewUserResourceList, HotResouceList } from '@/api/home'\nimport { getPlant } from '@/api/plant'\nimport { StartMiniPaper } from '@/api/exam'\nimport { saveUserStudyResource } from '@/api/user'\nimport plantBg from '@/assets/pc/plant-bg.png'\n\nconst PanelTitle = Vue.component('PlantPanelTitle', {\n  functional: true,\n  props: { title: String },\n  render(h, ctx) {\n    return h('div', { class: 'title-wrap' }, [\n      h('span', { class: 'title-icon' }),\n      h('strong', ctx.props.title)\n    ])\n  }\n})\n\nexport default {\n  name: 'PcPlant',\n  components: { PanelTitle },\n  data() {\n    return {\n      level: 3,\n      aimLevel: 4,\n      todayMinutes: 16,\n      planMinutes: 30,\n      typeCounts: { listen: 2, read: 1, write: 0 },\n      taskList: [],\n      recommendCourses: [],\n      selfExamTime: '2026-7-24',\n      plantBg\n    }\n  },\n  computed: {\n    progressWidth() {\n      if (!this.level || !this.aimLevel) return 35\n      return Math.max(18, Math.min(100, ((this.level - 1) / 8) * 100))\n    }\n  },\n  methods: {\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    categoryText(id) {\n      if (id == 1) return '[听力]'\n      if (id == 2) return '[口语]'\n      if (id == 3) return '[阅读]'\n      if (id == 4) return '[写作]'\n      return '[学习]'\n    },\n    categoryName(id) {\n      if (id == 1) return '听力'\n      if (id == 2) return '口语'\n      if (id == 3) return '阅读'\n      if (id == 4) return '写作'\n      return '学习'\n    },\n    taskTitle(item) {\n      const category = this.categoryText(item.category_id)\n      return `${category}${item.name || ''}`\n    },\n    itemDateText(item) {\n      const value = item && (item.update_time || item.create_time || item.dateline || item.date)\n      return value ? `${value}更新` : ''\n    },\n    formatDate(value) {\n      if (!value) return ''\n      const date = new Date(value)\n      if (Number.isNaN(date.getTime())) {\n        return String(value).slice(0, 10)\n      }\n      return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`\n    },\n    async loadPlant() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const response = await getPlant(user.sid)\n      if (response.code === 100 && response.data) {\n        this.aimLevel = response.data.aim_level || this.aimLevel\n      }\n    },\n    async loadPlanData() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const current = await getNewUserResourceList(user.sid)\n      const hot = await HotResouceList(user.sid)\n      this.taskList = (current.data || []).slice(0, 2)\n      this.recommendCourses = (hot.data || []).slice(0, 2)\n\n      this.typeCounts = { listen: 0, read: 0, write: 0 }\n      this.taskList.forEach(item => {\n        if (item.category_id == 1) this.typeCounts.listen += 1\n        if (item.category_id == 2 || item.category_id == 3) this.typeCounts.read += 1\n        if (item.category_id == 4) this.typeCounts.write += 1\n      })\n    },\n    async loadSelfExam() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const response = await StartMiniPaper(user.sid)\n      const data = response.data || {}\n      this.selfExamTime = this.formatDate(data.next_start_time) || this.selfExamTime\n    },\n    async toPraxis(item) {\n      const user = this.getUser()\n      if (!user.sid || !item) return\n      const response = await saveUserStudyResource({ sid: user.sid, resource_id: item.id })\n      if (response.code != 100) return\n      if (item.category_id == 1) {\n        this.$router.push({ name: 'PcListenPraxis', query: { log_id: response.data, resources_id: item.id } })\n      } else if (item.category_id == 4) {\n        this.$router.push({ name: 'PcWritePraxis', query: { log_id: response.data, resources_id: item.id } })\n      } else {\n        this.$router.push({ name: 'PcReadPraxis', query: { log_id: response.data, resources_id: item.id } })\n      }\n    },\n    async goToStudy() {\n      const item = this.taskList[0]\n      if (item) {\n        await this.toPraxis(item)\n      } else {\n        this.$router.push({ name: 'StudyList', query: { now_status: 0 } })\n      }\n    },\n    goToStudyList() {\n      this.$router.push({ name: 'StudyList', query: { now_status: 0 } })\n    },\n    toPlanSetting() {\n      this.$router.push({ name: 'PcPlantSetting' })\n    },\n    async startExam() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const response = await StartMiniPaper(user.sid)\n      const data = response.data || {}\n      if (data.is_allow == 1) {\n        const paperId = data.row == null ? 0 : data.row.id\n        this.$router.push({ name: 'PaperNotice', query: { paper_id: paperId, count_load: 0, has_time: 600000 } })\n      } else {\n        this.$message({ message: '不在时间范围', center: true })\n      }\n    }\n  },\n  mounted() {\n    this.loadPlant()\n    this.loadPlanData()\n    this.loadSelfExam()\n  }\n}\n</script>\n\n<style scoped>\n.pc-plant {\n  width: 1098px;\n  height: 570px;\n  display: grid;\n  grid-template-columns: 644px 440px;\n  gap: 12px;\n}\n\n.left-col,\n.right-col {\n  display: grid;\n  gap: 14px;\n}\n\n.left-col {\n  background: #fff;\n  border-radius: 6px;\n  box-shadow: 0 1px 0 rgba(255, 255, 255, 0.9), 0 2px 12px rgba(34, 63, 108, 0.06);\n  padding: 14px 18px 16px;\n  box-sizing: border-box;\n}\n\n.panel {\n  border-radius: 6px;\n  box-sizing: border-box;\n}\n\n.plan-panel {\n  height: 286px;\n  padding: 0;\n  background: transparent;\n}\n\n.list-panel {\n  height: 214px;\n  padding: 0;\n  background: transparent;\n}\n\n.self-panel {\n  height: 242px;\n  padding: 14px 14px 14px;\n  background: #fff;\n  box-shadow: 0 1px 0 rgba(255, 255, 255, 0.9), 0 2px 12px rgba(34, 63, 108, 0.06);\n}\n\n.recommend-panel {\n  height: 298px;\n  padding: 12px 12px 14px;\n  background: #fff;\n  box-shadow: 0 1px 0 rgba(255, 255, 255, 0.9), 0 2px 12px rgba(34, 63, 108, 0.06);\n}\n\n::v-deep .title-wrap,\n.panel-head,\n.today-head {\n  display: flex;\n  align-items: center;\n}\n\n.panel-head {\n  justify-content: space-between;\n}\n\n::v-deep .title-icon {\n  width: 13px;\n  height: 13px;\n  margin-right: 6px;\n  background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat;\n}\n\n::v-deep .title-wrap strong {\n  font-size: 16px;\n  line-height: 22px;\n  color: #152237;\n}\n\nbutton {\n  border: none;\n  background: transparent;\n  color: #6f7f94;\n  cursor: pointer;\n  padding: 0;\n  font-size: 12px;\n}\n\n.level-row {\n  display: flex;\n  align-items: center;\n  gap: 14px;\n  margin-top: 10px;\n}\n\n.lv {\n  font-size: 24px;\n  font-weight: 800;\n  font-style: italic;\n}\n\n.old {\n  color: #c6ab76;\n}\n\n.next {\n  color: #c0c0c0;\n}\n\n.progress-bar {\n  flex: 1;\n  height: 6px;\n  background: #d7d9de;\n  border-radius: 999px;\n  overflow: hidden;\n}\n\n.progress-bar i {\n  display: block;\n  height: 100%;\n  background: linear-gradient(90deg, #c7af78 0%, #d2c08b 100%);\n  border-radius: inherit;\n}\n\n.today-card {\n  margin-top: 14px;\n  height: 170px;\n  background: #f2f5fb;\n  border-radius: 24px;\n  padding: 16px 20px 18px;\n  box-sizing: border-box;\n  position: relative;\n}\n\n.today-head {\n  justify-content: space-between;\n}\n\n.today-head h2 {\n  margin: 0;\n  font-size: 18px;\n  line-height: 28px;\n  color: #162338;\n}\n\n.today-head h2 span {\n  font-weight: 400;\n  color: #8593a6;\n  font-size: 14px;\n}\n\n.today-head p {\n  margin: 4px 0 0;\n  font-size: 12px;\n  color: #7a8aa0;\n}\n\n.today-head button {\n  width: 76px;\n  height: 28px;\n  border-radius: 8px;\n  background: rgba(255, 255, 255, 0.75);\n  color: #8d98a8;\n}\n\n.stats-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 18px;\n  margin-top: 28px;\n  padding-right: 170px;\n}\n\n.stat-box {\n  position: relative;\n  text-align: center;\n}\n\n.stat-box span {\n  display: block;\n  font-size: 13px;\n  color: #8e9bad;\n  margin-bottom: 8px;\n}\n\n.stat-box strong {\n  font-size: 28px;\n  line-height: 34px;\n  color: #0e1320;\n}\n\n.stat-box i {\n  display: block;\n  width: 38px;\n  height: 5px;\n  margin: 8px auto 0;\n  border-radius: 999px;\n  background: #c6e5ff;\n}\n\n.stat-box .read {\n  background: #f6cfbc;\n}\n\n.stat-box .write {\n  background: #d7f1bf;\n}\n\n.study-btn {\n  width: 148px;\n  height: 48px;\n  position: absolute;\n  right: 20px;\n  bottom: 18px;\n  border-radius: 16px;\n  background: #1558a7;\n  color: #fff;\n  font-size: 16px;\n}\n\n.task-list {\n  margin-top: 14px;\n  display: grid;\n  gap: 10px;\n}\n\n.task-item {\n  height: 61px;\n  display: flex;\n  align-items: center;\n  box-sizing: border-box;\n  padding: 0 14px 0 10px;\n  background: #f2f5fb;\n  border-radius: 6px;\n  cursor: pointer;\n}\n\n.task-item img {\n  width: 60px;\n  height: 44px;\n  object-fit: cover;\n  margin-right: 12px;\n  border-radius: 4px;\n}\n\n.task-info {\n  flex: 1;\n  min-width: 0;\n}\n\n.task-title {\n  font-size: 15px;\n  line-height: 20px;\n  color: #111c2d;\n  font-weight: 700;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.task-date {\n  margin-top: 2px;\n  font-size: 12px;\n  color: #8a98aa;\n}\n\n.task-item button {\n  color: #0d5aa8;\n  font-size: 14px;\n}\n\n.task-empty {\n  height: 72px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #8a98aa;\n}\n\n.self-banner {\n  width: calc(100% - 18px);\n  height: 166px;\n  margin: 12px auto 0;\n  box-sizing: border-box;\n  padding: 20px 20px 16px;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  background-color: #fff;\n  background-size: 100% 100%;\n  background-position: center;\n  background-repeat: no-repeat;\n  border: 1px dashed rgba(160, 171, 188, 0.85);\n  border-radius: 4px;\n  cursor: pointer;\n}\n\n.banner-copy h1 {\n  margin: 0;\n  font-size: 21px;\n  line-height: 30px;\n  color: #0a5bb8;\n}\n\n.banner-copy p {\n  margin: 2px 0 0;\n  font-size: 15px;\n  color: #5f8fc7;\n}\n\n.self-banner ul {\n  margin: 42px 4px 0 0;\n  padding: 0;\n  list-style: none;\n}\n\n.self-banner li {\n  font-size: 13px;\n  line-height: 26px;\n  color: #4c83c7;\n}\n\n.self-banner li::before {\n  content: \"\";\n  width: 8px;\n  height: 8px;\n  display: inline-block;\n  margin-right: 8px;\n  border-radius: 50%;\n  background: #0c65c5;\n}\n\n.recommend-list {\n  display: grid;\n  grid-template-columns: repeat(2, 1fr);\n  gap: 10px;\n  margin-top: 10px;\n}\n\n.recommend-card {\n  height: 205px;\n  box-sizing: border-box;\n  cursor: pointer;\n  overflow: hidden;\n  background: #fff;\n  border: 1px solid #e3e9f2;\n  border-radius: 6px;\n}\n\n.cover-wrap {\n  height: 122px;\n  position: relative;\n  overflow: hidden;\n}\n\n.cover-wrap img {\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n  display: block;\n}\n\n.recommend-title {\n  padding: 8px 12px 0;\n  font-size: 15px;\n  line-height: 22px;\n  font-weight: 700;\n  color: #0f1f33;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.tag-row {\n  display: flex;\n  gap: 8px;\n  padding: 4px 12px 0;\n}\n\n.tag-row span {\n  height: 18px;\n  line-height: 18px;\n  padding: 0 7px;\n  border-radius: 2px;\n  background: #d7e8ff;\n  color: #2b6fbb;\n  font-size: 12px;\n}\n\n.recommend-date {\n  padding: 4px 12px 0;\n  font-size: 12px;\n  color: #8a98aa;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcPlant.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcPlant.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcPlant.vue?vue&type=template&id=4b4a30e4&scoped=true\"\nimport script from \"./PcPlant.vue?vue&type=script&lang=js\"\nexport * from \"./PcPlant.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcPlant.vue?vue&type=style&index=0&id=4b4a30e4&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"4b4a30e4\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-mine\"},[_c('section',{staticClass:\"panel left-panel\"},[_c('div',{staticClass:\"user-head\"},[_c('img',{staticClass:\"avatar\",attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png\"}}),_c('div',{staticClass:\"user-meta\"},[_c('div',{staticClass:\"user-name\"},[_vm._v(_vm._s(_vm.userInfo.name || '用户名'))]),_c('div',{staticClass:\"user-id\"},[_vm._v(\"ID：\"+_vm._s(_vm.userInfo.userno || _vm.userInfo.sid || '1389284597'))])]),_c('div',{staticClass:\"plan-badge\"},[_vm._v(\"提升计划已制定 >\")]),_c('router-link',{staticClass:\"right-count\",attrs:{\"to\":{ name: 'PcStudyList', query: { now_status: 2 } },\"title\":\"查看已完成学习列表\"}},[_vm._v(\" 已完成达标篇数: \"),_c('strong',[_vm._v(_vm._s(_vm.rightCount))]),_vm._v(\" \"),_c('span',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\">\")])])],1),_c('div',{staticClass:\"level-row\"},[_c('span',{staticClass:\"lv\"},[_vm._v(\"LV.\"+_vm._s(_vm.userLevelNum))]),_c('span',{staticClass:\"level-desc\"},[_vm._v(_vm._s(_vm.levelDesc))])]),_c('div',{staticClass:\"radar-row\"},[_c('div',{staticClass:\"radar-box\"},[_c('div',{ref:\"radar\",staticClass:\"radar\"}),_vm._m(0)]),_c('div',{staticClass:\"level-bars\"},_vm._l((_vm.levelBars),function(item){return _c('div',{key:item.key,staticClass:\"bar-item\"},[_c('div',{staticClass:\"bar-head\"},[_c('span',[_vm._v(_vm._s(item.label))]),_c('strong',[_vm._v(_vm._s(item.value))])]),_c('div',{staticClass:\"bar-track\"},[_c('i',{style:({ width: `${item.value / 9 * 100}%` })})])])}),0)])]),_c('section',{staticClass:\"panel right-panel\"},[_c('PanelTitle',{attrs:{\"title\":\"常用功能\"}}),_c('div',{staticClass:\"tool-wrap\"},[_c('div',{staticClass:\"tool-grid\"},_vm._l((_vm.tools),function(item){return _c('div',{key:item.title,staticClass:\"tool-item\",class:{ disabled: item.action === 'diagnosis-report' && !_vm.diagnosisReportUrl },on:{\"click\":function($event){item.action ? _vm.go(item) : _vm.go(item.path)}}},[_c('div',{staticClass:\"tool-icon\"},[_c('img',{attrs:{\"src\":item.icon}})]),_c('span',[_vm._v(_vm._s(item.title))])])}),0)])],1)])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"legend\"},[_c('span',[_c('i',{staticClass:\"mine\"}),_vm._v(\"我的水平\")]),_c('span',[_c('i',{staticClass:\"target\"}),_vm._v(\"目标水平\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-mine\">\n    <section class=\"panel left-panel\">\n      <div class=\"user-head\">\n        <img class=\"avatar\" src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png\" />\n        <div class=\"user-meta\">\n          <div class=\"user-name\">{{ userInfo.name || '用户名' }}</div>\n          <div class=\"user-id\">ID：{{ userInfo.userno || userInfo.sid || '1389284597' }}</div>\n        </div>\n        <div class=\"plan-badge\">提升计划已制定 &gt;</div>\n        <router-link class=\"right-count\" :to=\"{ name: 'PcStudyList', query: { now_status: 2 } }\" title=\"查看已完成学习列表\">\n          已完成达标篇数: <strong>{{ rightCount }}</strong> <span aria-hidden=\"true\">&gt;</span>\n        </router-link>\n      </div>\n\n      <div class=\"level-row\">\n        <span class=\"lv\">LV.{{ userLevelNum }}</span>\n        <span class=\"level-desc\">{{ levelDesc }}</span>\n      </div>\n\n      <div class=\"radar-row\">\n        <div class=\"radar-box\">\n          <div ref=\"radar\" class=\"radar\"></div>\n          <div class=\"legend\">\n            <span><i class=\"mine\"></i>我的水平</span>\n            <span><i class=\"target\"></i>目标水平</span>\n          </div>\n        </div>\n        <div class=\"level-bars\">\n          <div v-for=\"item in levelBars\" :key=\"item.key\" class=\"bar-item\">\n            <div class=\"bar-head\">\n              <span>{{ item.label }}</span>\n              <strong>{{ item.value }}</strong>\n            </div>\n            <div class=\"bar-track\">\n              <i :style=\"{ width: `${item.value / 9 * 100}%` }\"></i>\n            </div>\n          </div>\n        </div>\n      </div>\n    </section>\n\n    <section class=\"panel right-panel\">\n      <PanelTitle title=\"常用功能\" />\n      <div class=\"tool-wrap\">\n        <div class=\"tool-grid\">\n          <div v-for=\"item in tools\" :key=\"item.title\" class=\"tool-item\" :class=\"{ disabled: item.action === 'diagnosis-report' && !diagnosisReportUrl }\" @click=\"item.action ? go(item) : go(item.path)\">\n            <div class=\"tool-icon\">\n              <img :src=\"item.icon\" />\n            </div>\n            <span>{{ item.title }}</span>\n          </div>\n        </div>\n      </div>\n    </section>\n  </div>\n</template>\n\n<script>\nimport * as echarts from 'echarts'\nimport Vue from 'vue'\nimport { getExamPdf, getRightCount } from '@/api/user'\nimport { getUserRowByToken } from '@/api/home'\n\nconst PanelTitle = Vue.component('MinePanelTitle', {\n  functional: true,\n  props: { title: String },\n  render(h, ctx) {\n    return h('div', { class: 'title-wrap' }, [\n      h('span', { class: 'title-icon' }),\n      h('strong', ctx.props.title)\n    ])\n  }\n})\n\nexport default {\n  name: 'PcMine',\n  components: { PanelTitle },\n  data() {\n    return {\n      userInfo: JSON.parse(localStorage.getItem('user') || '{}'),\n      rightCount: 0,\n      userLevel: {\n        listen_level: 0,\n        speak_level: 0,\n        read_level: 0,\n        write_level: 0,\n        plan_aim_level: 0\n      },\n      userLevelNum: 3,\n      chart: null,\n      tools: [\n        {\n          title: '生词本',\n          path: '/pc/collect/new_words',\n          icon: 'https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/wordsBook.png'\n        },\n        {\n          title: '反思日志',\n          path: '/pc/study/note',\n          icon: 'https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/rebackLog.png'\n        },\n        {\n          title: '关于慧学',\n          path: '/pc/about',\n          icon: 'https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/aboutH.png'\n        },\n        {\n          title: '我的活动',\n          path: '/active/mylist',\n          icon: 'https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/myActivity.png'\n        },\n        {\n          title: '诊断报告',\n          path: '',\n          action: 'diagnosis-report',\n          icon: 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/exam_score.png'\n        }\n      ]\n    }\n  },\n  computed: {\n    levelDesc() {\n      if (this.userLevelNum <= 3) return '初级，搞定日常对话'\n      if (this.userLevelNum <= 6) return '中级，逐步提升表达'\n      return '高级，稳步进阶'\n    },\n    levelBars() {\n      return [\n        { key: 'listen', label: '听力', value: this.userLevel.listen_level || 0 },\n        { key: 'speak', label: '口语', value: this.userLevel.speak_level || 0 },\n        { key: 'read', label: '阅读', value: this.userLevel.read_level || 0 },\n        { key: 'write', label: '写作', value: this.userLevel.write_level || 0 }\n      ]\n    },\n    diagnosisReportUrl() {\n      const info = this.userInfo || {}\n      const report = info.diagnosis_report || info.diagnostic_report || info.diagnosisReport || info.diagnosticReport\n      if (typeof report === 'string') return report\n      if (report && typeof report === 'object') return report.url || report.path || report.file_url || report.fileUrl || ''\n      return info.report_url || info.reportUrl || info.diagnosis_report_url || info.diagnosisReportUrl || info.diagnostic_report_url || info.diagnosticReportUrl || info.pdf_url || info.pdfUrl || ''\n    }\n  },\n  methods: {\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    go(path) {\n      if (path && typeof path === 'object' && path.action === 'diagnosis-report') {\n        this.downloadDiagnosisReport()\n        return\n      }\n      this.$router.push(path)\n    },\n    async downloadDiagnosisReport() {\n      const user = this.userInfo || {}\n      const userno = user.userno || user.userNo || user.student_no || user.sid\n      if (!userno) {\n        this.$message && this.$message({ message: '诊断报告暂不可用', center: true })\n        return\n      }\n      try {\n        const result = await getExamPdf(userno)\n        const blob = result instanceof Blob ? result : new Blob([result], { type: 'application/pdf' })\n        const url = URL.createObjectURL(blob)\n        const link = document.createElement('a')\n        link.href = url\n        link.download = '诊断报告.pdf'\n        document.body.appendChild(link)\n        link.click()\n        document.body.removeChild(link)\n        URL.revokeObjectURL(url)\n      } catch (error) {\n        console.error('Failed to fetch diagnosis report:', error)\n        this.$message && this.$message({ message: '诊断报告暂不可用', center: true })\n      }\n      return\n      const url = this.diagnosisReportUrl\n      if (!url) {\n        this.$message && this.$message({ message: '诊断报告暂不可用', center: true })\n        return\n      }\n      const link = document.createElement('a')\n      link.href = url\n      link.download = '诊断报告.pdf'\n      link.target = '_blank'\n      link.rel = 'noopener'\n      document.body.appendChild(link)\n      link.click()\n      document.body.removeChild(link)\n    },\n    async loadUserInfo() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const response = await getUserRowByToken({ token: user.token })\n      if (response && response.data) {\n        this.userInfo = response.data\n        this.userLevel = response.data\n        this.userLevelNum = Math.floor(\n          (Number(response.data.listen_level || 0) +\n            Number(response.data.speak_level || 0) +\n            Number(response.data.read_level || 0) +\n            Number(response.data.write_level || 0)) / 4\n        ) || 3\n        this.renderRadar()\n      }\n    },\n    async loadRightCount() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const response = await getRightCount({ sid: user.sid })\n      this.rightCount = response.data || 0\n    },\n    renderRadar() {\n      if (!this.$refs.radar) return\n      if (!this.chart) {\n        this.chart = echarts.init(this.$refs.radar)\n      }\n      this.chart.setOption({\n        radar: [{\n          indicator: [\n            { text: '听力', max: 9 },\n            { text: '阅读', max: 9 },\n            { text: '写作', max: 9 },\n            { text: '口语', max: 9 }\n          ],\n          radius: 72,\n          shape: 'circle',\n          splitNumber: 4,\n          axisName: {\n            color: '#0b4ca0',\n            fontSize: 14,\n            fontWeight: 'bold'\n          },\n          splitLine: { lineStyle: { color: '#d7e4f3' } },\n          splitArea: {\n            areaStyle: [\n              { color: 'rgba(151, 187, 236, 0.22)' },\n              { color: 'rgba(151, 187, 236, 0.12)' }\n            ]\n          },\n          axisLine: { lineStyle: { color: '#c9d8eb' } }\n        }],\n        series: [{\n          type: 'radar',\n          symbol: 'circle',\n          symbolSize: 6,\n          data: [\n            {\n              value: [\n                this.userLevel.listen_level || 0,\n                this.userLevel.read_level || 0,\n                this.userLevel.write_level || 0,\n                this.userLevel.speak_level || 0\n              ],\n              name: '我的水平',\n              lineStyle: { color: '#2f6dff' },\n              itemStyle: { color: '#2f6dff' },\n              areaStyle: { color: 'rgba(47, 109, 255, 0.28)' }\n            },\n            {\n              value: [\n                this.userLevel.plan_aim_level || 5,\n                this.userLevel.plan_aim_level || 5,\n                this.userLevel.plan_aim_level || 5,\n                this.userLevel.plan_aim_level || 5\n              ],\n              name: '目标水平',\n              lineStyle: { color: 'rgba(169, 192, 220, 0.7)' },\n              itemStyle: { color: 'rgba(169, 192, 220, 0.7)' },\n              areaStyle: { color: 'rgba(169, 192, 220, 0.18)' }\n            }\n          ]\n        }],\n        tooltip: {}\n      })\n    }\n  },\n  mounted() {\n    this.loadUserInfo()\n    this.loadRightCount()\n    window.addEventListener('resize', this.renderRadar)\n  },\n  beforeDestroy() {\n    window.removeEventListener('resize', this.renderRadar)\n    if (this.chart) {\n      this.chart.dispose()\n      this.chart = null\n    }\n  }\n}\n</script>\n\n<style scoped>\n.pc-mine {\n  width: 1098px;\n  height: 570px;\n  display: grid;\n  grid-template-columns: 680px 408px;\n  gap: 12px;\n}\n\n.panel {\n  background: #fff;\n  border-radius: 6px;\n  box-sizing: border-box;\n  box-shadow: 0 1px 0 rgba(255, 255, 255, 0.9), 0 2px 12px rgba(34, 63, 108, 0.06);\n  padding: 16px 18px;\n}\n\n.right-panel {\n  padding: 16px 22px;\n  background: #fff;\n  box-shadow: 0 1px 0 rgba(255, 255, 255, 0.9), 0 2px 12px rgba(34, 63, 108, 0.06);\n  align-self: start;\n}\n\n.tool-wrap {\n  margin-top: 14px;\n  padding: 18px 18px 16px;\n  background: transparent;\n  border-radius: 4px;\n}\n\n::v-deep .title-wrap {\n  display: flex;\n  align-items: center;\n}\n\n::v-deep .title-icon {\n  width: 13px;\n  height: 13px;\n  margin-right: 6px;\n  background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat;\n}\n\n::v-deep .title-wrap strong {\n  font-size: 16px;\n  line-height: 22px;\n  color: #152237;\n}\n\n.user-head {\n  display: grid;\n  grid-template-columns: 64px 1fr auto;\n  align-items: center;\n  column-gap: 18px;\n  row-gap: 6px;\n}\n\n.avatar {\n  width: 64px;\n  height: 64px;\n  border-radius: 50%;\n}\n\n.user-meta {\n  align-self: center;\n}\n\n.user-name {\n  font-size: 22px;\n  line-height: 30px;\n  color: #162338;\n}\n\n.user-id {\n  font-size: 14px;\n  color: #7d8a9b;\n  margin-top: 2px;\n}\n\n.plan-badge {\n  padding: 0 16px;\n  height: 28px;\n  line-height: 28px;\n  border-radius: 999px;\n  background: rgba(220, 227, 239, 0.78);\n  color: #a5afba;\n  font-size: 12px;\n  justify-self: end;\n}\n\n.right-count {\n  grid-column: 3;\n  justify-self: end;\n  font-size: 14px;\n  color: #162338;\n  text-decoration: none;\n  cursor: pointer;\n}\n\n.right-count:hover {\n  color: #239cd2;\n}\n\n.right-count:focus-visible {\n  outline: 2px solid #239cd2;\n  outline-offset: 4px;\n}\n\n.right-count strong {\n  font-size: 22px;\n}\n\n.level-row {\n  margin-top: 26px;\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n.lv {\n  font-size: 30px;\n  font-weight: 800;\n  font-style: italic;\n  color: #bca57a;\n}\n\n.level-desc {\n  color: #8f9dac;\n  font-size: 14px;\n}\n\n.radar-row {\n  display: grid;\n  grid-template-columns: 300px 1fr;\n  gap: 20px;\n  margin-top: 16px;\n}\n\n.radar-box {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n}\n\n.radar {\n  width: 280px;\n  height: 280px;\n}\n\n.legend {\n  margin-top: 10px;\n  display: flex;\n  gap: 22px;\n  color: #95a1b0;\n  font-size: 12px;\n}\n\n.legend span {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n}\n\n.legend i {\n  width: 10px;\n  height: 10px;\n  border-radius: 50%;\n  display: inline-block;\n}\n\n.legend .mine {\n  background: #2f6dff;\n}\n\n.legend .target {\n  background: rgba(169, 192, 220, 0.7);\n}\n\n.level-bars {\n  padding-top: 8px;\n}\n\n.bar-item {\n  margin-bottom: 30px;\n}\n\n.bar-head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-bottom: 8px;\n  color: #162338;\n  font-size: 14px;\n}\n\n.bar-track {\n  height: 4px;\n  border-radius: 999px;\n  background: #cfd9e7;\n  overflow: hidden;\n}\n\n.bar-track i {\n  display: block;\n  height: 100%;\n  background: linear-gradient(90deg, #a7dfaa, #8fd2a1);\n}\n\n.tool-grid {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: 22px 18px;\n  margin-top: 0;\n}\n\n.tool-item {\n  text-align: center;\n  cursor: pointer;\n}\n\n.tool-item.disabled {\n  opacity: 0.6;\n  cursor: default;\n}\n\n.tool-icon {\n  width: 46px;\n  height: 46px;\n  margin: 0 auto 10px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: rgba(255, 255, 255, 0.22);\n}\n\n.tool-icon img {\n  width: 24px;\n  height: 24px;\n}\n\n.tool-item span {\n  font-size: 13px;\n  color: #91a0b1;\n}\n</style>\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcMine.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcMine.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcMine.vue?vue&type=template&id=576b81ad&scoped=true\"\nimport script from \"./PcMine.vue?vue&type=script&lang=js\"\nexport * from \"./PcMine.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcMine.vue?vue&type=style&index=0&id=576b81ad&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"576b81ad\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-write\"},[_c('div',{staticClass:\"breadcrumb\"},[_vm._v(\"当前位置：首页-笔下生花\")]),_c('section',{staticClass:\"panel ai-panel\"},[_c('div',{staticClass:\"panel-head\"},[_c('PanelTitle',{attrs:{\"title\":\"AI写作辅导\"}}),_c('button',{staticClass:\"history-btn\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.toAiHistory}},[_c('span',[_vm._v(\"⌘\")]),_vm._v(\" AI写作历史 \")])],1),_c('div',{staticClass:\"ai-card-list\"},_vm._l((_vm.aiCards),function(item){return _c('div',{key:item.title,staticClass:\"ai-card\",class:item.cls,on:{\"click\":function($event){return _vm.toAiWrite(item)}}},[_c('div',{staticClass:\"card-tag\"},[_vm._v(_vm._s(item.tag))]),_c('h3',[_vm._v(_vm._s(item.title))]),_c('p',[_vm._v(_vm._s(item.update))]),_c('img',{attrs:{\"src\":item.icon,\"alt\":\"\"}})])}),0)]),_c('section',{staticClass:\"panel guide-panel\"},[_c('div',{staticClass:\"panel-head\"},[_c('PanelTitle',{attrs:{\"title\":\"写作指导\"}}),_c('div',{staticClass:\"tool-actions\"},[_c('button',{attrs:{\"type\":\"button\"},on:{\"click\":_vm.toTeacherList}},[_c('span',[_vm._v(\"⌕\")]),_vm._v(\" 搜索 \")]),_c('button',{staticClass:\"message-btn\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.toWriteNotice}},[_c('span',[_vm._v(\"◉\")]),_vm._v(\" 留言 \"),(_vm.hasFeedback)?_c('i',[_vm._v(\"1\")]):_vm._e()]),_c('button',{attrs:{\"type\":\"button\"},on:{\"click\":_vm.toMyOrder}},[_c('span',[_vm._v(\"◔\")]),_vm._v(\" 我的预约 \")])])],1),(_vm.teacherList.length > 0)?_c('div',{staticClass:\"teacher-grid\"},_vm._l((_vm.teacherList),function(item){return _c('div',{key:item.id,staticClass:\"teacher-card\",on:{\"click\":function($event){return _vm.toSubmit(item)}}},[_c('div',{staticClass:\"teacher-main\"},[_c('img',{attrs:{\"src\":item.avatar || 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png',\"alt\":\"\"}}),_c('div',{staticClass:\"teacher-info\"},[_c('h3',[_vm._v(_vm._s(item.name))]),_c('div',{staticClass:\"label-row\"},_vm._l((_vm.normalizedLabels(item)),function(label,index){return _c('span',{key:`${item.id}-${label}`,class:`label-${index}`},[_vm._v(\" \"+_vm._s(label)+\" \")])}),0),_c('p',[_vm._v(\"咨询地点：\"+_vm._s(_vm.teacherAddress(item)))]),_c('p',[_vm._v(\"咨询时间：\"+_vm._s(_vm.teacherTime(item)))])]),_c('button',{staticClass:\"quota-btn\",class:{ full: _vm.isReservationFull(item) },attrs:{\"type\":\"button\"}},[_vm._v(\" \"+_vm._s(_vm.quotaText(item))+\" \")])])])}),0):_c('div',{staticClass:\"empty-state\"},[_vm._v(\"暂无写作指导老师\")])]),_c('PcAiAssistant',{attrs:{\"scene\":\"write-index\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-write\">\n    <div class=\"breadcrumb\">当前位置：首页-笔下生花</div>\n\n    <section class=\"panel ai-panel\">\n      <div class=\"panel-head\">\n        <PanelTitle title=\"AI写作辅导\" />\n        <button type=\"button\" class=\"history-btn\" @click=\"toAiHistory\">\n          <span>⌘</span>\n          AI写作历史\n        </button>\n      </div>\n      <div class=\"ai-card-list\">\n        <div\n          v-for=\"item in aiCards\"\n          :key=\"item.title\"\n          class=\"ai-card\"\n          :class=\"item.cls\"\n          @click=\"toAiWrite(item)\"\n        >\n          <div class=\"card-tag\">{{ item.tag }}</div>\n          <h3>{{ item.title }}</h3>\n          <p>{{ item.update }}</p>\n          <img :src=\"item.icon\" alt=\"\" />\n        </div>\n      </div>\n    </section>\n\n    <section class=\"panel guide-panel\">\n      <div class=\"panel-head\">\n        <PanelTitle title=\"写作指导\" />\n        <div class=\"tool-actions\">\n          <button type=\"button\" @click=\"toTeacherList\">\n            <span>⌕</span>\n            搜索\n          </button>\n          <button type=\"button\" @click=\"toWriteNotice\" class=\"message-btn\">\n            <span>◉</span>\n            留言\n            <i v-if=\"hasFeedback\">1</i>\n          </button>\n          <button type=\"button\" @click=\"toMyOrder\">\n            <span>◔</span>\n            我的预约\n          </button>\n        </div>\n      </div>\n\n      <div v-if=\"teacherList.length > 0\" class=\"teacher-grid\">\n        <div v-for=\"item in teacherList\" :key=\"item.id\" class=\"teacher-card\" @click=\"toSubmit(item)\">\n          <div class=\"teacher-main\">\n            <img\n              :src=\"item.avatar || 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png'\"\n              alt=\"\"\n            />\n            <div class=\"teacher-info\">\n              <h3>{{ item.name }}</h3>\n              <div class=\"label-row\">\n                <span\n                  v-for=\"(label, index) in normalizedLabels(item)\"\n                  :key=\"`${item.id}-${label}`\"\n                  :class=\"`label-${index}`\"\n                >\n                  {{ label }}\n                </span>\n              </div>\n              <p>咨询地点：{{ teacherAddress(item) }}</p>\n              <p>咨询时间：{{ teacherTime(item) }}</p>\n            </div>\n          <button type=\"button\" class=\"quota-btn\" :class=\"{ full: isReservationFull(item) }\">\n              {{ quotaText(item) }}\n            </button>\n          </div>\n        </div>\n      </div>\n      <div v-else class=\"empty-state\">暂无写作指导老师</div>\n    </section>\n    <PcAiAssistant scene=\"write-index\" />\n  </div>\n</template>\n\n<script>\nimport Vue from 'vue'\nimport { writeTeacherList, getMyNewFeedBack } from '@/api/user'\nimport PcAiAssistant from '@/components/PcAiAssistant.vue'\nimport { isReservationFull } from '@/utils/reservation'\n\nconst PanelTitle = Vue.component('WritePanelTitle', {\n  functional: true,\n  props: { title: String },\n  render(h, ctx) {\n    return h('div', { class: 'title-wrap' }, [\n      h('span', { class: 'title-icon' }),\n      h('strong', ctx.props.title)\n    ])\n  }\n})\n\nexport default {\n  name: 'PcWrite',\n  components: { PanelTitle, PcAiAssistant },\n  data() {\n    return {\n      teacherList: [],\n      feedback: null,\n      currentTime: Date.now(),\n      timer: null,\n      aiCards: [\n        {\n          tag: '分主题，分层写作',\n          title: '主题写作',\n          update: '03月20日更新',\n          type: 'theme',\n          cls: 'theme-card',\n          icon: 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/e-talk/e-write.png'\n        },\n        {\n          tag: 'AI辩题，互动性强',\n          title: '互动式议论文',\n          update: '暂无更新',\n          type: 'discussion',\n          cls: 'debate-card',\n          icon: 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/e-talk/e-talk.png'\n        },\n        {\n          tag: 'AI互动，趣味性强',\n          title: '互动式记叙文',\n          update: '暂无更新',\n          type: 'narrative',\n          cls: 'story-card',\n          icon: 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/e-talk/e-write.png'\n        }\n      ]\n    }\n  },\n  computed: {\n    hasFeedback() {\n      return !!(this.feedback && this.feedback.row)\n    }\n  },\n  methods: {\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    normalizedLabels(item) {\n      if (!item || !item.labels) return ['四级写作辅导', '雅思', '六级']\n      if (Array.isArray(item.labels)) return item.labels.slice(0, 3)\n      return String(item.labels).split(/[,，]/).filter(Boolean).slice(0, 3)\n    },\n    teacherAddress(item) {\n      return item.writeTeacherLog && item.writeTeacherLog.addr ? item.writeTeacherLog.addr : 'xx教学楼'\n    },\n    teacherTime(item) {\n      const log = item.writeTeacherLog || {}\n      const time = log.logTimeList && log.logTimeList[0] ? log.logTimeList[0].timeline : '19:00-19:45'\n      return `${log.dateline || '2023-04-13'} ${time}`\n    },\n    isReservationFull(item) {\n      return isReservationFull(item, this.currentTime)\n    },\n    quotaText(item) {\n      if (this.isReservationFull(item)) return '已满'\n      if (item.orderNumTotal > 0 && item.orderNumTotal < 5) return `仅剩${item.orderNumTotal}名额`\n      return '预约'\n    },\n    async loadTeachers() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const response = await writeTeacherList()\n      const data = response.data || []\n      this.teacherList = data.slice(0, 6)\n    },\n    async loadFeedback() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const response = await getMyNewFeedBack({ sid: user.sid })\n      if (response.code === 100) this.feedback = response.data\n    },\n    toAiWrite(item) {\n      if (item.type === 'theme') {\n        this.$router.push({ name: 'PcWriteProject' })\n        return\n      }\n      if (item.type === 'discussion') {\n        this.$router.push({ name: 'PcInteractiveArgument' })\n        return\n      }\n      this.$router.push({ name: 'PcInteractiveNarrative' })\n    },\n    toAiHistory() {\n      this.$router.push({ name: 'PcWriteHistory' })\n    },\n    toTeacherList() {\n      this.$router.push({ name: 'WriteTeaList' })\n    },\n    toWriteNotice() {\n      this.$router.push({ name: 'PcWriteNotice' })\n    },\n    toMyOrder() {\n      this.$router.push({ name: 'PcWriteOrderList' })\n    },\n    toSubmit(item) {\n      if (this.isReservationFull(item)) return\n      this.$router.push({ name: 'PcWriteSubmit', query: { tea_id: item.id } })\n    }\n  },\n  mounted() {\n    this.timer = setInterval(() => {\n      this.currentTime = Date.now()\n    }, 1000)\n    this.loadTeachers()\n    this.loadFeedback()\n  },\n  beforeDestroy() {\n    if (this.timer) clearInterval(this.timer)\n  }\n}\n</script>\n\n<style scoped>\n.pc-write {\n  width: 1114px;\n  height: 583px;\n  color: #121b2a;\n  position: relative;\n}\n\n.breadcrumb {\n  height: 28px;\n  font-size: 12px;\n  line-height: 18px;\n  color: #7c8794;\n}\n\n.panel {\n  background: rgba(255, 255, 255, 0.96);\n  border-radius: 6px;\n  box-sizing: border-box;\n}\n\n.ai-panel {\n  height: 178px;\n  padding: 16px 26px 18px 18px;\n}\n\n.guide-panel {\n  height: 372px;\n  margin-top: 16px;\n  padding: 14px 26px 18px 18px;\n  overflow: hidden;\n}\n\n.panel-head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n}\n\n::v-deep .title-wrap {\n  display: flex;\n  align-items: center;\n}\n\n::v-deep .title-icon {\n  width: 13px;\n  height: 13px;\n  margin-right: 8px;\n  background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat;\n}\n\n::v-deep .title-wrap strong {\n  font-size: 17px;\n  line-height: 24px;\n  color: #111b2c;\n}\n\nbutton {\n  border: none;\n  background: transparent;\n  cursor: pointer;\n  padding: 0;\n}\n\n.history-btn {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  color: #4b5563;\n  font-size: 13px;\n}\n\n.history-btn span,\n.tool-actions span {\n  font-size: 18px;\n  line-height: 18px;\n}\n\n.ai-card-list {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 12px;\n  margin-top: 14px;\n}\n\n.ai-card {\n  height: 104px;\n  position: relative;\n  overflow: hidden;\n  border-radius: 5px;\n  padding: 36px 24px 16px;\n  box-sizing: border-box;\n  cursor: pointer;\n}\n\n.ai-card::before {\n  content: '';\n  position: absolute;\n  right: -14px;\n  top: 28px;\n  width: 116px;\n  height: 116px;\n  border-radius: 50%;\n  background: rgba(255, 255, 255, 0.34);\n}\n\n.ai-card img {\n  position: absolute;\n  right: 34px;\n  top: 44px;\n  width: 48px;\n  height: 48px;\n  object-fit: contain;\n}\n\n.card-tag {\n  position: absolute;\n  left: 0;\n  top: 0;\n  min-width: 112px;\n  height: 22px;\n  line-height: 22px;\n  padding: 0 12px;\n  font-size: 13px;\n}\n\n.ai-card h3 {\n  margin: 0;\n  font-size: 20px;\n  line-height: 28px;\n  color: #151515;\n}\n\n.ai-card p {\n  margin: 8px 0 0;\n  font-size: 12px;\n  color: #8b8f99;\n}\n\n.theme-card {\n  background: linear-gradient(100deg, #eff7ff 0%, #e8f3ff 100%);\n}\n\n.theme-card .card-tag {\n  background: #d7ecff;\n  color: #196cbc;\n}\n\n.debate-card {\n  background: linear-gradient(100deg, #fcf3ff 0%, #f3e6ff 100%);\n}\n\n.debate-card .card-tag {\n  background: #f1d4fb;\n  color: #9c39a5;\n}\n\n.story-card {\n  background: linear-gradient(100deg, #effff3 0%, #e0faea 100%);\n}\n\n.story-card .card-tag {\n  background: #cbf1d3;\n  color: #15923f;\n}\n\n.tool-actions {\n  display: flex;\n  align-items: center;\n  gap: 22px;\n}\n\n.tool-actions button {\n  position: relative;\n  display: grid;\n  gap: 2px;\n  justify-items: center;\n  color: #252b35;\n  font-size: 12px;\n}\n\n.message-btn i {\n  position: absolute;\n  top: -5px;\n  right: -8px;\n  width: 16px;\n  height: 16px;\n  line-height: 16px;\n  border-radius: 50%;\n  background: #ff641c;\n  color: #fff;\n  font-size: 10px;\n  font-style: normal;\n}\n\n.teacher-grid {\n  height: 314px;\n  margin-top: 16px;\n  display: grid;\n  grid-template-columns: repeat(2, 1fr);\n  column-gap: 72px;\n  row-gap: 0;\n  overflow-y: auto;\n  padding-right: 10px;\n}\n\n.teacher-grid::-webkit-scrollbar {\n  width: 4px;\n}\n\n.teacher-grid::-webkit-scrollbar-thumb {\n  border-radius: 999px;\n  background: #d8dde5;\n}\n\n.teacher-card {\n  height: 112px;\n  border-bottom: 1px solid #edf0f4;\n  cursor: pointer;\n}\n\n.teacher-main {\n  display: flex;\n  align-items: flex-start;\n  position: relative;\n}\n\n.teacher-main img {\n  width: 42px;\n  height: 42px;\n  border-radius: 50%;\n  margin: 0 14px 0 12px;\n}\n\n.teacher-info {\n  min-width: 0;\n  flex: 1;\n}\n\n.teacher-info h3 {\n  margin: 4px 0 8px;\n  font-size: 22px;\n  line-height: 28px;\n  color: #101010;\n}\n\n.label-row {\n  display: flex;\n  gap: 8px;\n  margin-bottom: 12px;\n}\n\n.label-row span {\n  height: 19px;\n  line-height: 19px;\n  padding: 0 8px;\n  border-radius: 2px;\n  color: #fff;\n  font-size: 12px;\n}\n\n.label-0 {\n  background: #50cf59;\n}\n\n.label-1 {\n  background: #72b5ee;\n}\n\n.label-2 {\n  background: #df72d6;\n}\n\n.teacher-info p {\n  margin: 0 0 6px;\n  font-size: 13px;\n  line-height: 18px;\n  color: #696f7a;\n}\n\n.quota-btn {\n  width: 92px;\n  height: 34px;\n  margin-top: 18px;\n  border-radius: 17px;\n  background: #0057a5;\n  color: #fff;\n  font-size: 15px;\n  white-space: nowrap;\n}\n\n.quota-btn.full {\n  background: #aab2bf;\n}\n\n.empty-state {\n  height: 280px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #8b96a6;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWrite.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWrite.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcWrite.vue?vue&type=template&id=7b6e6c61&scoped=true\"\nimport script from \"./PcWrite.vue?vue&type=script&lang=js\"\nexport * from \"./PcWrite.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcWrite.vue?vue&type=style&index=0&id=7b6e6c61&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"7b6e6c61\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-write-project\"},[_c('section',{staticClass:\"panel last-panel\"},[_c('PanelTitle',{attrs:{\"title\":\"上次学习\"}}),(_vm.lastResource && _vm.lastResource.id)?_c('div',{staticClass:\"last-card\",on:{\"click\":function($event){return _vm.toPraxis(_vm.lastResource)}}},[_c('img',{attrs:{\"src\":_vm.lastResource.cover}}),_c('div',{staticClass:\"last-info\"},[_c('h2',[_vm._v(\"[写作]\"+_vm._s(_vm.lastResource.name))]),_c('p',[_vm._v(_vm._s(_vm.itemDateText(_vm.lastResource)))])]),_c('button',{attrs:{\"type\":\"button\"}},[_vm._v(_vm._s(_vm.lastResource.status == 2 ? '已学' : '继续学习'))])]):_c('div',{staticClass:\"empty-line\"},[_vm._v(\"暂无上次学习内容\")])],1),_c('section',{staticClass:\"panel subject-panel\"},[_c('div',{staticClass:\"panel-head\"},[_c('PanelTitle',{attrs:{\"title\":\"主题列表\"}}),_c('div',{staticClass:\"filter-row\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.keyword),expression:\"keyword\"}],attrs:{\"type\":\"text\",\"placeholder\":\"请输入关键词\"},domProps:{\"value\":(_vm.keyword)},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.loadList.apply(null, arguments)},\"input\":function($event){if($event.target.composing)return;_vm.keyword=$event.target.value}}}),_c('button',{attrs:{\"type\":\"button\"},on:{\"click\":_vm.loadList}},[_vm._v(\"搜索\")])])],1),(_vm.loading)?_c('div',{staticClass:\"empty-grid\"},[_vm._v(\"加载中...\")]):(_vm.listData.length === 0)?_c('div',{staticClass:\"empty-grid\"},[_vm._v(\"暂无主题内容\")]):_c('div',{staticClass:\"subject-grid\"},_vm._l((_vm.listData),function(item){return _c('div',{key:item.id,staticClass:\"subject-card\",on:{\"click\":function($event){return _vm.toLearn(item)}}},[_c('div',{staticClass:\"cover-wrap\"},[_c('img',{attrs:{\"src\":item.cover}}),_c('span',[_vm._v(_vm._s(item.read_num || item.study_num || 1)+\"人正在学\")])]),_c('h3',[_vm._v(_vm._s(item.name))]),_c('p',[_vm._v(_vm._s(_vm.itemDateText(item))+\" | 共\"+_vm._s(item.resource_num || 0)+\"个资源包\")])])}),0)]),_c('PcAiAssistant',{attrs:{\"scene\":\"write-index\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-write-project\">\n    <section class=\"panel last-panel\">\n      <PanelTitle title=\"上次学习\" />\n      <div v-if=\"lastResource && lastResource.id\" class=\"last-card\" @click=\"toPraxis(lastResource)\">\n        <img :src=\"lastResource.cover\" />\n        <div class=\"last-info\">\n          <h2>[写作]{{ lastResource.name }}</h2>\n          <p>{{ itemDateText(lastResource) }}</p>\n        </div>\n        <button type=\"button\">{{ lastResource.status == 2 ? '已学' : '继续学习' }}</button>\n      </div>\n      <div v-else class=\"empty-line\">暂无上次学习内容</div>\n    </section>\n\n    <section class=\"panel subject-panel\">\n      <div class=\"panel-head\">\n        <PanelTitle title=\"主题列表\" />\n        <div class=\"filter-row\">\n          <input v-model=\"keyword\" type=\"text\" placeholder=\"请输入关键词\" @keyup.enter=\"loadList\" />\n          <button type=\"button\" @click=\"loadList\">搜索</button>\n        </div>\n      </div>\n\n      <div v-if=\"loading\" class=\"empty-grid\">加载中...</div>\n      <div v-else-if=\"listData.length === 0\" class=\"empty-grid\">暂无主题内容</div>\n      <div v-else class=\"subject-grid\">\n        <div\n          v-for=\"item in listData\"\n          :key=\"item.id\"\n          class=\"subject-card\"\n          @click=\"toLearn(item)\"\n        >\n          <div class=\"cover-wrap\">\n            <img :src=\"item.cover\" />\n            <span>{{ item.read_num || item.study_num || 1 }}人正在学</span>\n          </div>\n          <h3>{{ item.name }}</h3>\n          <p>{{ itemDateText(item) }} | 共{{ item.resource_num || 0 }}个资源包</p>\n        </div>\n      </div>\n    </section>\n    <PcAiAssistant scene=\"write-index\" />\n  </div>\n</template>\n\n<script>\nimport Vue from 'vue'\nimport { UserResource, getList } from '@/api/listen'\nimport { saveUserStudyResource } from '@/api/user'\nimport PcAiAssistant from '@/components/PcAiAssistant.vue'\n\nconst PanelTitle = Vue.component('PcWriteProjectPanelTitle', {\n  functional: true,\n  props: { title: String },\n  render(h, ctx) {\n    return h('div', { class: 'title-wrap' }, [\n      h('span', { class: 'title-icon' }),\n      h('strong', ctx.props.title)\n    ])\n  }\n})\n\nexport default {\n  name: 'PcWriteProject',\n  components: { PanelTitle, PcAiAssistant },\n  data() {\n    return {\n      categoryId: 4,\n      lastResource: null,\n      listData: [],\n      keyword: '',\n      loading: false\n    }\n  },\n  methods: {\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    normalizeImg(url) {\n      return url ? url.replace('a-news.oss-cn-hangzhou.aliyuncs.com', 'a-news.oss-accelerate.aliyuncs.com') : ''\n    },\n    itemDateText(item) {\n      const value = item && (item.update_time || item.create_time || item.dateline || item.date)\n      return value ? `${value}更新` : ''\n    },\n    async loadLastResource() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const response = await UserResource({ sid: user.sid, category_id: this.categoryId })\n      const data = response.data || null\n      if (data) data.cover = this.normalizeImg(data.cover)\n      this.lastResource = data\n    },\n    async loadList() {\n      const user = this.getUser()\n      if (!user.sid) return\n      this.loading = true\n      try {\n        const response = await getList({\n          sid: user.sid,\n          category_id: this.categoryId,\n          level: '',\n          subject_cate_id: '',\n          keyword: this.keyword\n        })\n        this.listData = (response.data || [])\n          .filter(item => Number(item.resource_num || 0) > 0)\n          .map(item => ({\n            ...item,\n            cover: this.normalizeImg(item.cover)\n          }))\n      } finally {\n        this.loading = false\n      }\n    },\n    async toPraxis(item) {\n      const user = this.getUser()\n      if (!user.sid || !item) return\n      const response = await saveUserStudyResource({ sid: user.sid, resource_id: item.id })\n      if (response.code !== 100) return\n      this.$router.push({ name: 'PcWritePraxis', query: { log_id: response.data, resources_id: item.id } })\n    },\n    toLearn(item) {\n      this.$router.push({ name: 'PcWriteLearn', query: { subject_id: item.id, subject_name: item.name } })\n    }\n  },\n  mounted() {\n    this.loadLastResource()\n    this.loadList()\n  }\n}\n</script>\n\n<style scoped>\n.pc-write-project {\n  position: relative;\n  width: 1098px;\n  height: 570px;\n  display: grid;\n  gap: 14px;\n}\n\n.pc-write-project > .pc-ai-assistant {\n  position: absolute;\n  inset: 0;\n}\n\n.panel {\n  background: #fff;\n  border-radius: 6px;\n  box-sizing: border-box;\n}\n\n.last-panel {\n  height: 144px;\n  padding: 18px 28px 16px;\n}\n\n.subject-panel {\n  height: 412px;\n  padding: 18px 28px 20px;\n  overflow: hidden;\n}\n\n.panel-head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n}\n\n::v-deep .title-wrap {\n  display: flex;\n  align-items: center;\n}\n\n::v-deep .title-icon {\n  width: 13px;\n  height: 13px;\n  margin-right: 6px;\n  background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat;\n}\n\n::v-deep .title-wrap strong {\n  font-size: 16px;\n  line-height: 22px;\n  color: #152237;\n}\n\n.last-card {\n  height: 82px;\n  margin-top: 14px;\n  display: flex;\n  align-items: center;\n  cursor: pointer;\n}\n\n.last-card img {\n  width: 72px;\n  height: 72px;\n  object-fit: cover;\n  margin-right: 24px;\n}\n\n.last-info {\n  flex: 1;\n  min-width: 0;\n}\n\n.last-info h2 {\n  margin: 0;\n  font-size: 17px;\n  line-height: 24px;\n  color: #0e1b2d;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.last-info p {\n  margin: 8px 0 0;\n  font-size: 14px;\n  color: #8a98aa;\n}\n\nbutton {\n  border: none;\n  background: transparent;\n  color: #0d5aa8;\n  font-size: 15px;\n  cursor: pointer;\n}\n\n.filter-row {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n.filter-row input {\n  width: 176px;\n  height: 30px;\n  border: 1px solid #d9e1eb;\n  border-radius: 15px;\n  padding: 0 12px;\n  box-sizing: border-box;\n  outline: none;\n  font-size: 13px;\n}\n\n.filter-row button {\n  width: 64px;\n  height: 30px;\n  border-radius: 15px;\n  background: #00529f;\n  color: #fff;\n  font-size: 13px;\n}\n\n.subject-grid {\n  height: 332px;\n  margin-top: 14px;\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: 12px 10px;\n  overflow-y: auto;\n  padding-right: 8px;\n}\n\n.subject-grid::-webkit-scrollbar {\n  width: 4px;\n}\n\n.subject-grid::-webkit-scrollbar-thumb {\n  background: rgba(88, 124, 168, 0.22);\n  border-radius: 999px;\n}\n\n.subject-card {\n  min-width: 0;\n  cursor: pointer;\n}\n\n.cover-wrap {\n  height: 178px;\n  position: relative;\n  overflow: hidden;\n  border-radius: 5px;\n}\n\n.cover-wrap img {\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n  display: block;\n}\n\n.cover-wrap span {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  min-width: 96px;\n  height: 34px;\n  line-height: 34px;\n  padding: 0 12px;\n  box-sizing: border-box;\n  background: rgba(13, 42, 74, 0.66);\n  color: #fff;\n  font-size: 15px;\n  text-align: center;\n  border-radius: 8px 0 0 0;\n}\n\n.subject-card h3 {\n  margin: 8px 6px 0;\n  font-size: 17px;\n  line-height: 24px;\n  color: #0f1f33;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.subject-card p {\n  margin: 4px 6px 0;\n  font-size: 13px;\n  line-height: 18px;\n  color: #7f8ea4;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.empty-line,\n.empty-grid {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #7f8ea4;\n}\n\n.empty-line {\n  height: 82px;\n  margin-top: 14px;\n}\n\n.empty-grid {\n  height: 332px;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWriteProject.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWriteProject.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcWriteProject.vue?vue&type=template&id=1a72cf2e&scoped=true\"\nimport script from \"./PcWriteProject.vue?vue&type=script&lang=js\"\nexport * from \"./PcWriteProject.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcWriteProject.vue?vue&type=style&index=0&id=1a72cf2e&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"1a72cf2e\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-write-learn\"},[_c('section',{staticClass:\"learn-panel\"},[_c('div',{staticClass:\"panel-head\"},[_vm._m(0),_c('div',{staticClass:\"sub-title\"},[_vm._v(\"[写作]\"+_vm._s(_vm.subjectName))])]),(_vm.loading)?_c('div',{staticClass:\"empty-state\"},[_vm._v(\"加载中...\")]):(_vm.resourceList.length === 0)?_c('div',{staticClass:\"empty-state\"},[_vm._v(\"暂无内容\")]):_c('div',{staticClass:\"resource-list\"},_vm._l((_vm.resourceList),function(item){return _c('div',{key:item.id,staticClass:\"resource-item\",on:{\"click\":function($event){return _vm.toPraxis(item)}}},[_c('div',{staticClass:\"item-main\"},[_c('div',{staticClass:\"item-name\"},[_vm._v(_vm._s(item.name))]),_c('div',{staticClass:\"item-date\"},[_vm._v(_vm._s(item.create_time))])]),_c('div',{staticClass:\"item-status\",class:_vm.statusClass(item)},[_vm._v(\" \"+_vm._s(_vm.statusText(item))+\" \")])])}),0)])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"panel-title\"},[_c('span',{staticClass:\"title-icon\"}),_c('strong',[_vm._v(\"主题列表\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-write-learn\">\n    <section class=\"learn-panel\">\n      <div class=\"panel-head\">\n        <div class=\"panel-title\">\n          <span class=\"title-icon\"></span>\n          <strong>主题列表</strong>\n        </div>\n        <div class=\"sub-title\">[写作]{{ subjectName }}</div>\n      </div>\n\n      <div v-if=\"loading\" class=\"empty-state\">加载中...</div>\n      <div v-else-if=\"resourceList.length === 0\" class=\"empty-state\">暂无内容</div>\n      <div v-else class=\"resource-list\">\n        <div\n          v-for=\"item in resourceList\"\n          :key=\"item.id\"\n          class=\"resource-item\"\n          @click=\"toPraxis(item)\"\n        >\n          <div class=\"item-main\">\n            <div class=\"item-name\">{{ item.name }}</div>\n            <div class=\"item-date\">{{ item.create_time }}</div>\n          </div>\n          <div class=\"item-status\" :class=\"statusClass(item)\">\n            {{ statusText(item) }}\n          </div>\n        </div>\n      </div>\n    </section>\n  </div>\n</template>\n\n<script>\nimport { getResources } from '@/api/listen'\nimport { saveUserStudyResource } from '@/api/user'\n\nexport default {\n  name: 'PcWriteLearn',\n  data() {\n    return {\n      subjectId: '',\n      subjectName: '',\n      resourceList: [],\n      loading: false\n    }\n  },\n  methods: {\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    normalizeStatus(item) {\n      const status = Number(item && item.status)\n      const hisLabel = Number(item && item.hisLabel)\n      if (hisLabel === 1) return 2\n      return status\n    },\n    statusText(item) {\n      const status = this.normalizeStatus(item)\n      if (status === 2) return '已完成'\n      if (status === 1) return '上次未学完'\n      return '未完成'\n    },\n    statusClass(item) {\n      return this.normalizeStatus(item) === 2 ? 'done' : 'todo'\n    },\n    async loadList() {\n      const user = this.getUser()\n      if (!user.sid) return\n      this.loading = true\n      try {\n        const response = await getResources({ sid: user.sid, subject_id: this.subjectId })\n        this.resourceList = Array.isArray(response.data) ? response.data : []\n      } finally {\n        this.loading = false\n      }\n    },\n    async toPraxis(item) {\n      const user = this.getUser()\n      if (!user.sid || !item) return\n      const response = await saveUserStudyResource({ sid: user.sid, resource_id: item.id })\n      if (response.code !== 100) return\n      this.$router.push({\n        name: 'PcWritePraxis',\n        query: { log_id: response.data, resources_id: item.id }\n      })\n    }\n  },\n  mounted() {\n    this.subjectId = this.$route.query.subject_id || ''\n    this.subjectName = this.$route.query.subject_name || ''\n    this.loadList()\n  }\n}\n</script>\n\n<style scoped>\n.pc-write-learn {\n  width: 1114px;\n  height: 583px;\n}\n\n.learn-panel {\n  height: 583px;\n  background: rgba(255, 255, 255, 0.78);\n  border-radius: 8px;\n  box-sizing: border-box;\n  padding: 18px 22px 20px;\n}\n\n.panel-head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-bottom: 12px;\n}\n\n.panel-title {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n.title-icon {\n  width: 13px;\n  height: 13px;\n  background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat;\n}\n\n.panel-title strong {\n  font-size: 16px;\n  line-height: 22px;\n  color: #152237;\n}\n\n.sub-title {\n  font-size: 13px;\n  color: #8a98aa;\n}\n\n.resource-list {\n  height: 520px;\n  overflow-y: auto;\n  padding-right: 4px;\n}\n\n.resource-list::-webkit-scrollbar {\n  width: 4px;\n}\n\n.resource-list::-webkit-scrollbar-thumb {\n  background: rgba(88, 124, 168, 0.22);\n  border-radius: 999px;\n}\n\n.resource-item {\n  min-height: 72px;\n  margin-bottom: 10px;\n  padding: 18px 30px 18px 28px;\n  background: #dce9ff;\n  border-radius: 14px;\n  box-sizing: border-box;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  cursor: pointer;\n}\n\n.item-main {\n  min-width: 0;\n  flex: 1;\n}\n\n.item-name {\n  font-size: 15px;\n  line-height: 22px;\n  color: #1c2636;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.item-date {\n  margin-top: 6px;\n  font-size: 12px;\n  color: #8e98a6;\n}\n\n.item-status {\n  width: 90px;\n  text-align: right;\n  font-size: 13px;\n}\n\n.item-status.done {\n  color: #2ea46f;\n}\n\n.item-status.todo {\n  color: #97a0ad;\n}\n\n.empty-state {\n  height: 520px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #8a98aa;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWriteLearn.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWriteLearn.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcWriteLearn.vue?vue&type=template&id=672a7f76&scoped=true\"\nimport script from \"./PcWriteLearn.vue?vue&type=script&lang=js\"\nexport * from \"./PcWriteLearn.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcWriteLearn.vue?vue&type=style&index=0&id=672a7f76&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"672a7f76\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-write-praxis\"},[_c('div',{staticClass:\"breadcrumb\"},[_vm._v(\"当前位置：首页>笔下生花>主题写作\")]),_c('section',{staticClass:\"directions-card\"},[_vm._m(0),_c('div',{staticClass:\"directions-content\"},[(_vm.resourceContent)?_c('div',{domProps:{\"innerHTML\":_vm._s(_vm.resourceContent)}}):_vm._e(),(_vm.questionDirections)?_c('div',{staticClass:\"question-directions\",domProps:{\"innerHTML\":_vm._s(_vm.questionDirections)}}):_vm._e(),(_vm.questionTitle)?_c('div',{domProps:{\"innerHTML\":_vm._s(_vm.questionTitle)}}):_vm._e()])]),_c('section',{staticClass:\"editor-card\"},[_vm._m(1),_c('div',{staticClass:\"editor-shell\"},[_c('div',{staticClass:\"paste-tip\"},[_vm._v(\"本页面不能粘贴\")]),_c('div',{staticClass:\"word-count\"},[_vm._v(\"Word Count: \"+_vm._s(_vm.wordCount))]),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.writing),expression:\"writing\"}],attrs:{\"maxlength\":\"8000\"},domProps:{\"value\":(_vm.writing)},on:{\"input\":[function($event){if($event.target.composing)return;_vm.writing=$event.target.value},_vm.saveDraft],\"paste\":function($event){$event.preventDefault();return _vm.onPaste.apply(null, arguments)}}})]),_c('div',{staticClass:\"action-row\"},[_c('button',{staticClass:\"clear-btn\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.clearInput}},[_c('span'),_vm._v(\" 一键清空 \")]),_c('button',{staticClass:\"submit-btn\",attrs:{\"type\":\"button\",\"disabled\":_vm.submitting},on:{\"click\":_vm.submitPaper}},[_vm._v(\" \"+_vm._s(_vm.submitting ? '提交中...' : '提交')+\" \")])])]),_c('PcAiAssistant',{attrs:{\"scene\":\"write\",\"resources-id\":_vm.resourcesId}})],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"panel-title\"},[_c('span',{staticClass:\"title-icon\"}),_c('strong',[_vm._v(\"Directions\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"panel-title\"},[_c('span',{staticClass:\"title-icon\"}),_c('strong',[_vm._v(\"写作编辑\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-write-praxis\">\n    <div class=\"breadcrumb\">当前位置：首页&gt;笔下生花&gt;主题写作</div>\n\n    <section class=\"directions-card\">\n      <div class=\"panel-title\">\n        <span class=\"title-icon\"></span>\n        <strong>Directions</strong>\n      </div>\n      <div class=\"directions-content\">\n        <div v-if=\"resourceContent\" v-html=\"resourceContent\"></div>\n        <div v-if=\"questionDirections\" class=\"question-directions\" v-html=\"questionDirections\"></div>\n        <div v-if=\"questionTitle\" v-html=\"questionTitle\"></div>\n      </div>\n    </section>\n\n    <section class=\"editor-card\">\n      <div class=\"panel-title\">\n        <span class=\"title-icon\"></span>\n        <strong>写作编辑</strong>\n      </div>\n      <div class=\"editor-shell\">\n        <div class=\"paste-tip\">本页面不能粘贴</div>\n        <div class=\"word-count\">Word Count: {{ wordCount }}</div>\n        <textarea\n          v-model=\"writing\"\n          maxlength=\"8000\"\n          @input=\"saveDraft\"\n          @paste.prevent=\"onPaste\"\n        ></textarea>\n      </div>\n      <div class=\"action-row\">\n        <button type=\"button\" class=\"clear-btn\" @click=\"clearInput\">\n          <span></span>\n          一键清空\n        </button>\n        <button type=\"button\" class=\"submit-btn\" :disabled=\"submitting\" @click=\"submitPaper\">\n          {{ submitting ? '提交中...' : '提交' }}\n        </button>\n      </div>\n    </section>\n    <PcAiAssistant scene=\"write\" :resources-id=\"resourcesId\" />\n  </div>\n</template>\n\n<script>\nimport { getJobList, updateUserStudy } from '@/api/listen'\nimport { writeSubmit } from '@/api/user'\nimport { decrypt } from '@/api/aes'\nimport PcAiAssistant from '@/components/PcAiAssistant.vue'\n\nexport default {\n  name: 'PcWritePraxis',\n  components: { PcAiAssistant },\n  data() {\n    return {\n      resourcesId: '',\n      logId: '',\n      resources: {\n        resources: {}\n      },\n      jobList: [],\n      writing: '',\n      submitting: false\n    }\n  },\n  computed: {\n    resourceContent() {\n      return this.resources.resources && this.resources.resources.content\n        ? this.resources.resources.content\n        : ''\n    },\n    questionDirections() {\n      return this.jobList[0] && this.jobList[0].directions\n        ? this.jobList[0].directions.trim()\n        : ''\n    },\n    questionTitle() {\n      return this.jobList[0] && this.jobList[0].title ? this.jobList[0].title : ''\n    },\n    wordCount() {\n      return String(this.writing || '').trim().split(/\\s+/).filter(Boolean).length\n    },\n    draftKey() {\n      return `userWriting${this.resourcesId}`\n    }\n  },\n  methods: {\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    saveDraft() {\n      localStorage.setItem(this.draftKey, this.writing || '')\n    },\n    onPaste() {\n      alert('禁止粘贴')\n    },\n    clearInput() {\n      this.writing = ''\n      this.saveDraft()\n    },\n    async loadData() {\n      const user = this.getUser()\n      if (!user.sid || !this.resourcesId) return\n      const response = await getJobList({ sid: user.sid, resource_id: this.resourcesId })\n      const data = response.data || { resources: {} }\n      const list = data.jobList ? JSON.parse(decrypt(data.jobList)) : []\n      data.jobList = list\n      this.resources = data\n      this.jobList = list\n    },\n    async submitPaper() {\n      if (this.submitting) return\n      const user = this.getUser()\n      const job = this.jobList[0]\n      if (!user.sid || !job) return\n      this.saveDraft()\n      this.submitting = true\n      try {\n        const response = await writeSubmit({\n          result: JSON.stringify({ writing: this.writing || '' }),\n          sid: user.sid,\n          log_id: this.logId,\n          job_id: job.id,\n          resource_id: this.resourcesId\n        })\n        if (response.code === 100) {\n          const resp = await updateUserStudy({ id: this.logId })\n          if (resp.code === 100) {\n            this.$router.push({ name: 'WriteReport', query: { resource_id: this.resourcesId } })\n          }\n        }\n      } finally {\n        this.submitting = false\n      }\n    }\n  },\n  mounted() {\n    this.logId = this.$route.query.log_id || ''\n    this.resourcesId = this.$route.query.resources_id || this.$route.query.resource_id || ''\n    this.writing = localStorage.getItem(this.draftKey) || ''\n    this.loadData()\n  }\n}\n</script>\n\n<style scoped>\n.pc-write-praxis {\n  width: 1114px;\n  height: 583px;\n  color: #121b2a;\n  position: relative;\n}\n\n.breadcrumb {\n  height: 28px;\n  font-size: 12px;\n  line-height: 18px;\n  color: #7c8794;\n}\n\n.directions-card,\n.editor-card {\n  background: rgba(255, 255, 255, 0.36);\n  border-radius: 6px;\n  box-sizing: border-box;\n}\n\n.directions-card {\n  min-height: 130px;\n  max-height: 180px;\n  overflow-y: auto;\n  padding: 16px 24px 18px;\n}\n\n.editor-card {\n  height: 466px;\n  margin-top: 16px;\n  padding: 16px 24px 18px;\n}\n\n.panel-title {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n.title-icon {\n  width: 13px;\n  height: 13px;\n  display: inline-block;\n  background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat;\n}\n\n.panel-title strong {\n  font-size: 16px;\n  line-height: 22px;\n  color: #111b2c;\n}\n\n.directions-content {\n  margin-top: 10px;\n  padding-left: 16px;\n  font-size: 16px;\n  line-height: 28px;\n  color: #182437;\n  overflow-wrap: break-word;\n}\n\n.question-directions {\n  margin-bottom: 12px;\n}\n\n.question-directions ::v-deep p {\n  margin: 0 0 8px;\n}\n\n.question-directions ::v-deep p:last-child {\n  margin-bottom: 0;\n}\n\n.question-directions ::v-deep img {\n  max-width: 100%;\n  height: auto;\n}\n\n.editor-shell {\n  position: relative;\n  height: 340px;\n  margin-top: 12px;\n  background: rgba(255, 255, 255, 0.18);\n}\n\n.paste-tip {\n  position: absolute;\n  left: 20px;\n  top: 15px;\n  color: #ff243d;\n  font-size: 14px;\n  z-index: 1;\n  pointer-events: none;\n}\n\n.word-count {\n  position: absolute;\n  right: 24px;\n  top: 15px;\n  font-size: 15px;\n  color: #162235;\n  z-index: 1;\n  pointer-events: none;\n}\n\ntextarea {\n  width: 100%;\n  height: 100%;\n  border: none;\n  resize: none;\n  outline: none;\n  padding: 48px 20px 18px;\n  box-sizing: border-box;\n  background: transparent;\n  color: #132033;\n  font-size: 15px;\n  line-height: 24px;\n}\n\n.action-row {\n  height: 58px;\n  margin-top: 12px;\n  display: flex;\n  align-items: center;\n  justify-content: flex-end;\n  gap: 44px;\n}\n\nbutton {\n  border: none;\n  cursor: pointer;\n}\n\n.clear-btn {\n  height: 40px;\n  display: inline-flex;\n  align-items: center;\n  gap: 12px;\n  color: #1b2534;\n  background: transparent;\n  font-size: 15px;\n}\n\n.clear-btn span {\n  width: 34px;\n  height: 34px;\n  border-radius: 50%;\n  background: #e8c9a7;\n  position: relative;\n}\n\n.clear-btn span::before,\n.clear-btn span::after {\n  content: '';\n  position: absolute;\n  left: 10px;\n  top: 16px;\n  width: 14px;\n  height: 2px;\n  background: #fff;\n  transform: rotate(45deg);\n}\n\n.clear-btn span::after {\n  transform: rotate(-45deg);\n}\n\n.submit-btn {\n  width: 290px;\n  height: 50px;\n  border-radius: 14px;\n  background: #00529f;\n  color: #fff;\n  font-size: 16px;\n  font-weight: 700;\n}\n\n.submit-btn:disabled {\n  background: #8aa9ca;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWritePraxis.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWritePraxis.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcWritePraxis.vue?vue&type=template&id=e6286dc2&scoped=true\"\nimport script from \"./PcWritePraxis.vue?vue&type=script&lang=js\"\nexport * from \"./PcWritePraxis.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcWritePraxis.vue?vue&type=style&index=0&id=e6286dc2&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"e6286dc2\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-submit\"},[_c('div',{staticClass:\"breadcrumb\"},[_vm._v(\"当前位置：首页-笔下生花-预约老师\")]),_c('section',{staticClass:\"panel teacher-panel\"},[_c('img',{staticClass:\"avatar\",attrs:{\"src\":_vm.teacher.row.avatar || 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png',\"alt\":\"\"}}),_c('div',{staticClass:\"teacher-main\"},[_c('div',{staticClass:\"teacher-row\"},[_c('h2',[_vm._v(_vm._s(_vm.teacher.row.name || '--'))]),_c('span',[_vm._v(_vm._s(_vm.teacher.row.college_name || ''))])]),(_vm.teacherLabels.length > 0)?_c('div',{staticClass:\"label-row\"},_vm._l((_vm.teacherLabels),function(label,index){return _c('span',{key:`${label}-${index}`,class:`label-${index}`},[_vm._v(\" \"+_vm._s(label)+\" \")])}),0):_vm._e(),_c('p',[_vm._v(\"咨询地点：\"+_vm._s(_vm.addr || '--'))]),_c('p',[_vm._v(\"教师介绍：\"+_vm._s(_vm.teacher.row.intro || '--'))])])]),_c('div',{staticClass:\"submit-grid\"},[_c('section',{staticClass:\"panel select-panel\"},[_c('h3',[_vm._v(\"咨询日期选择\")]),_c('div',{staticClass:\"date-list\"},_vm._l((_vm.teacher.logList),function(item,index){return _c('button',{key:`${item.rawDate || item.dateline}-${index}`,staticClass:\"date-pill\",class:{ active: _vm.checkedLogIndex === index, disabled: item.end_time <= _vm.currentTime },attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.changeDate(item, index)}}},[_vm._v(\" \"+_vm._s(item.dateline)+\" \")])}),0),_c('h3',{staticClass:\"time-title\"},[_vm._v(\"咨询时间点选择\")]),_c('div',{staticClass:\"time-list\"},_vm._l((_vm.logTimeList),function(item){return _c('button',{key:item.id,staticClass:\"time-pill\",class:{ active: _vm.timeId === item.id, disabled: item.order_num == 0 },attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.checkTime(item)}}},[_vm._v(\" \"+_vm._s(item.timeline)+\" \")])}),0)]),_c('section',{staticClass:\"panel desc-panel\"},[_c('h3',[_vm._v(\"问题概述\")]),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.intro),expression:\"intro\"}],attrs:{\"placeholder\":\"请输入内容\"},domProps:{\"value\":(_vm.intro)},on:{\"input\":function($event){if($event.target.composing)return;_vm.intro=$event.target.value}}}),_c('div',{staticClass:\"desc-actions\"},[_c('label',{staticClass:\"upload-btn\"},[_c('input',{attrs:{\"type\":\"file\",\"accept\":\"image/*,.pdf,.doc,.docx\"},on:{\"change\":_vm.afterRead}}),_c('span',{staticClass:\"upload-icon\"},[_vm._v(\"⬆\")]),_c('span',[_vm._v(_vm._s(_vm.fileName || '请上传作文附件'))])]),_c('button',{staticClass:\"submit-btn\",attrs:{\"type\":\"button\",\"disabled\":!_vm.canSubmit},on:{\"click\":_vm.mineSubmit}},[_vm._v(\"确认预约\")])])])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-submit\">\n    <div class=\"breadcrumb\">当前位置：首页-笔下生花-预约老师</div>\n\n    <section class=\"panel teacher-panel\">\n      <img\n        class=\"avatar\"\n        :src=\"teacher.row.avatar || 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png'\"\n        alt=\"\"\n      />\n      <div class=\"teacher-main\">\n        <div class=\"teacher-row\">\n          <h2>{{ teacher.row.name || '--' }}</h2>\n          <span>{{ teacher.row.college_name || '' }}</span>\n        </div>\n        <div v-if=\"teacherLabels.length > 0\" class=\"label-row\">\n          <span v-for=\"(label, index) in teacherLabels\" :key=\"`${label}-${index}`\" :class=\"`label-${index}`\">\n            {{ label }}\n          </span>\n        </div>\n        <p>咨询地点：{{ addr || '--' }}</p>\n        <p>教师介绍：{{ teacher.row.intro || '--' }}</p>\n      </div>\n    </section>\n\n    <div class=\"submit-grid\">\n      <section class=\"panel select-panel\">\n        <h3>咨询日期选择</h3>\n        <div class=\"date-list\">\n          <button\n            v-for=\"(item, index) in teacher.logList\"\n            :key=\"`${item.rawDate || item.dateline}-${index}`\"\n            type=\"button\"\n            class=\"date-pill\"\n            :class=\"{ active: checkedLogIndex === index, disabled: item.end_time <= currentTime }\"\n            @click=\"changeDate(item, index)\"\n          >\n            {{ item.dateline }}\n          </button>\n        </div>\n\n        <h3 class=\"time-title\">咨询时间点选择</h3>\n        <div class=\"time-list\">\n          <button\n            v-for=\"item in logTimeList\"\n            :key=\"item.id\"\n            type=\"button\"\n            class=\"time-pill\"\n            :class=\"{ active: timeId === item.id, disabled: item.order_num == 0 }\"\n            @click=\"checkTime(item)\"\n          >\n            {{ item.timeline }}\n          </button>\n        </div>\n      </section>\n\n      <section class=\"panel desc-panel\">\n        <h3>问题概述</h3>\n        <textarea v-model=\"intro\" placeholder=\"请输入内容\"></textarea>\n        <div class=\"desc-actions\">\n          <label class=\"upload-btn\">\n            <input type=\"file\" accept=\"image/*,.pdf,.doc,.docx\" @change=\"afterRead\" />\n            <span class=\"upload-icon\">⬆</span>\n            <span>{{ fileName || '请上传作文附件' }}</span>\n          </label>\n          <button type=\"button\" class=\"submit-btn\" :disabled=\"!canSubmit\" @click=\"mineSubmit\">确认预约</button>\n        </div>\n      </section>\n    </div>\n  </div>\n</template>\n\n<script>\nimport { getById, saveWriteTeacherOrder } from '@/api/user'\nimport { applyAuthorizationToXhr } from '@/utils/auth'\n\nconst weeks = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']\n\nexport default {\n  name: 'PcWriteSubmit',\n  data() {\n    return {\n      teaId: '',\n      teacher: { row: {}, logList: [] },\n      teacherLabels: [],\n      checkedLogIndex: 0,\n      addr: '',\n      logTimeList: [],\n      timeId: 0,\n      dateline: '',\n      intro: '',\n      filePath: '',\n      fileName: '',\n      currentTime: Date.now() / 1000,\n      canSubmit: true,\n      timer: null\n    }\n  },\n  created() {\n    this.timer = setInterval(() => {\n      this.currentTime = Date.now() / 1000\n    }, 1000)\n  },\n  beforeDestroy() {\n    if (this.timer) clearInterval(this.timer)\n  },\n  methods: {\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    normalizeLabels(value) {\n      if (!value) return []\n      if (Array.isArray(value)) return value\n      return String(value).split(/[,，]/).filter(Boolean)\n    },\n    formatDateLabel(value) {\n      const date = new Date(value)\n      if (Number.isNaN(date.getTime())) return value\n      return `${value}（${weeks[date.getDay()]}）`\n    },\n    normalizeLog(item) {\n      const rawDate = item.dateline\n      return {\n        ...item,\n        rawDate,\n        dateline: this.formatDateLabel(rawDate),\n        end_time: new Date(item.end_time).getTime() / 1000\n      }\n    },\n    async loadTeacher() {\n      const response = await getById({ id: this.teaId })\n      const data = response.data || {}\n      const row = data.row || {}\n      row.labels = this.normalizeLabels(row.labels)\n      const logList = Array.isArray(data.logList) ? data.logList.map(this.normalizeLog) : []\n\n      this.teacher = {\n        ...data,\n        row,\n        logList\n      }\n      this.teacherLabels = row.labels.slice(0, 3)\n\n      const firstAvailableIndex = logList.findIndex(item => item.end_time > this.currentTime)\n      const defaultIndex = firstAvailableIndex > -1 ? firstAvailableIndex : 0\n      if (logList[defaultIndex]) {\n        this.applyLog(logList[defaultIndex], defaultIndex)\n      }\n    },\n    applyLog(item, index) {\n      this.checkedLogIndex = index\n      this.addr = item.addr || ''\n      this.logTimeList = item.logTimeList || []\n      this.timeId = 0\n      this.dateline = ''\n    },\n    changeDate(item, index) {\n      if (item.end_time <= this.currentTime) return\n      this.applyLog(item, index)\n      if (item.order_num == 0) {\n        this.$message({ message: '当前预约已满', type: 'error', center: true })\n      }\n    },\n    checkTime(item) {\n      if (item.order_num == 0) return\n      this.timeId = item.id\n      this.dateline = item.timeline\n    },\n    afterRead(event) {\n      const file = event.target.files && event.target.files[0]\n      if (!file) return\n      const user = this.getUser()\n      if (!user.sid) return\n      const form = new FormData()\n      form.append('file', file, `${user.sid}-${Date.now()}-${file.name}`)\n      const xhr = new XMLHttpRequest()\n      xhr.open('POST', `${process.env.VUE_APP_BASE_API}mobileupload/upload`);\n      applyAuthorizationToXhr(xhr)\n      xhr.onreadystatechange = () => {\n        if (xhr.readyState !== 4) return\n        if (xhr.status === 200) {\n          const response = JSON.parse(xhr.responseText)\n          this.filePath = response.data.url\n          this.fileName = file.name\n          this.$message({ message: '上传成功', center: true })\n          return\n        }\n        this.$message({ message: '上传失败', type: 'error', center: true })\n      }\n      xhr.send(form)\n    },\n    async mineSubmit() {\n      const user = this.getUser()\n      if (!this.timeId) {\n        this.$message({ message: '请选择预约时间', type: 'error', center: true })\n        return\n      }\n      this.canSubmit = false\n      try {\n        const response = await saveWriteTeacherOrder({\n          log_time_id: this.timeId,\n          sid: user.sid,\n          file_path: this.filePath,\n          intro: this.intro\n        })\n        if (response.code == 100) {\n          this.$message({ message: '预约成功', center: true })\n          this.$router.push({ name: 'PcWrite' })\n        }\n      } finally {\n        this.canSubmit = true\n      }\n    }\n  },\n  mounted() {\n    this.teaId = this.$route.query.tea_id\n    if (this.teaId) this.loadTeacher()\n  }\n}\n</script>\n\n<style scoped>\n.pc-submit {\n  width: 1114px;\n  height: 583px;\n  color: #121b2a;\n}\n\n.breadcrumb {\n  height: 26px;\n  font-size: 12px;\n  line-height: 18px;\n  color: #7c8794;\n}\n\n.panel {\n  background: rgba(255, 255, 255, 0.96);\n  border-radius: 6px;\n  box-sizing: border-box;\n}\n\n.teacher-panel {\n  height: 192px;\n  display: flex;\n  align-items: center;\n  padding: 28px 46px 26px 42px;\n}\n\n.avatar {\n  width: 78px;\n  height: 78px;\n  border-radius: 50%;\n  margin-right: 34px;\n  object-fit: cover;\n}\n\n.teacher-main {\n  flex: 1;\n  min-width: 0;\n}\n\n.teacher-row {\n  display: flex;\n  align-items: baseline;\n  gap: 14px;\n}\n\n.teacher-row h2 {\n  margin: 0;\n  font-size: 26px;\n  line-height: 34px;\n  color: #111;\n}\n\n.teacher-row span {\n  font-size: 14px;\n  color: #3f4b5b;\n}\n\n.label-row {\n  display: flex;\n  gap: 8px;\n  margin: 8px 0 16px;\n}\n\n.label-row span {\n  height: 22px;\n  line-height: 22px;\n  padding: 0 10px;\n  border-radius: 2px;\n  color: #fff;\n  font-size: 13px;\n}\n\n.label-0 {\n  background: #50cf59;\n}\n\n.label-1 {\n  background: #72b5ee;\n}\n\n.label-2 {\n  background: #df72d6;\n}\n\n.teacher-main p {\n  margin: 0 0 8px;\n  font-size: 14px;\n  line-height: 21px;\n  color: #5f6672;\n}\n\n.submit-grid {\n  height: 338px;\n  margin-top: 14px;\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 16px;\n}\n\n.select-panel,\n.desc-panel {\n  height: 100%;\n  padding: 22px 36px 24px;\n}\n\nh3 {\n  margin: 0;\n  font-size: 18px;\n  line-height: 26px;\n  color: #111;\n}\n\n.date-list {\n  display: grid;\n  grid-template-columns: repeat(2, 258px);\n  gap: 16px 18px;\n  margin-top: 16px;\n}\n\n.time-title {\n  margin-top: 28px;\n}\n\n.time-list {\n  display: grid;\n  grid-template-columns: repeat(3, 140px);\n  gap: 18px 26px;\n  margin-top: 16px;\n}\n\nbutton {\n  border: none;\n  cursor: pointer;\n  padding: 0;\n}\n\n.date-pill,\n.time-pill {\n  height: 42px;\n  border-radius: 21px;\n  background: #f3f8fc;\n  color: #232a35;\n  font-size: 16px;\n}\n\n.time-pill {\n  height: 38px;\n  font-size: 15px;\n}\n\n.date-pill.active,\n.time-pill.active {\n  background: #e2f9ff;\n  color: #39aee2;\n  box-shadow: inset 0 0 0 1px #89c9ee;\n}\n\n.date-pill.disabled,\n.time-pill.disabled {\n  color: #c0c7d1;\n  background: #f4f7fa;\n  cursor: default;\n}\n\n.desc-panel {\n  display: flex;\n  flex-direction: column;\n}\n\n.desc-panel textarea {\n  width: 100%;\n  height: 236px;\n  margin-top: 12px;\n  border: none;\n  background: #fafafa;\n  resize: none;\n  padding: 18px 20px;\n  font-size: 14px;\n  line-height: 22px;\n  box-sizing: border-box;\n  outline: none;\n  border-radius: 0;\n}\n\n.desc-actions {\n  height: 56px;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  gap: 20px;\n}\n\n.upload-btn {\n  position: relative;\n  min-width: 0;\n  flex: 1;\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  color: #9aa0aa;\n  font-size: 14px;\n  cursor: pointer;\n}\n\n.upload-btn span:last-child {\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.upload-btn input {\n  position: absolute;\n  inset: 0;\n  opacity: 0;\n  cursor: pointer;\n}\n\n.upload-icon {\n  width: 22px;\n  height: 22px;\n  border-radius: 50%;\n  background: #c8cbd1;\n  color: #fff;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 14px;\n  line-height: 1;\n}\n\n.submit-btn {\n  width: 320px;\n  height: 56px;\n  border-radius: 14px;\n  background: #0052a0;\n  color: #fff;\n  font-size: 18px;\n}\n\n.submit-btn:disabled {\n  background: #8ea8c9;\n  cursor: default;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWriteSubmit.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWriteSubmit.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcWriteSubmit.vue?vue&type=template&id=74e02538&scoped=true\"\nimport script from \"./PcWriteSubmit.vue?vue&type=script&lang=js\"\nexport * from \"./PcWriteSubmit.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcWriteSubmit.vue?vue&type=style&index=0&id=74e02538&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"74e02538\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-write-order-list\"},[_c('div',{staticClass:\"breadcrumb\"},[_vm._v(\"当前位置：首页-笔下生花-我的预约\")]),_c('section',{staticClass:\"order-panel\"},[_vm._m(0),(_vm.orderList.length > 0)?_c('div',{staticClass:\"order-grid\"},_vm._l((_vm.orderList),function(item){return _c('div',{key:item.id,staticClass:\"order-card\",on:{\"click\":function($event){return _vm.toDetail(item)}}},[_c('div',{staticClass:\"teacher-head\"},[_c('img',{staticClass:\"avatar\",attrs:{\"src\":item.avatar || _vm.avatarSrc,\"alt\":\"\"}}),_c('h3',[_vm._v(_vm._s(item.teacher_name || item.name || '--'))]),_c('button',{staticClass:\"status-pill\",class:_vm.statusClass(item),attrs:{\"type\":\"button\"}},[_vm._v(\" \"+_vm._s(_vm.statusText(item))+\" \")])]),_c('div',{staticClass:\"label-row\"},_vm._l((_vm.normalizedLabels(item.labels)),function(label,index){return _c('span',{key:`${item.id}-${label}-${index}`,class:`label-${index}`},[_vm._v(\" \"+_vm._s(label)+\" \")])}),0),_c('p',[_vm._v(\"预约地点：\"+_vm._s(item.addr || '--'))]),_c('p',[_vm._v(\"预约时间：\"+_vm._s(_vm.formatOrderTime(item)))])])}),0):_c('div',{staticClass:\"empty-state\"},[_vm._v(\"暂无预约记录\")])])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"panel-title\"},[_c('span',{staticClass:\"title-icon\"}),_c('strong',[_vm._v(\"我的预约\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-write-order-list\">\n    <div class=\"breadcrumb\">当前位置：首页-笔下生花-我的预约</div>\n\n    <section class=\"order-panel\">\n      <div class=\"panel-title\">\n        <span class=\"title-icon\"></span>\n        <strong>我的预约</strong>\n      </div>\n\n      <div v-if=\"orderList.length > 0\" class=\"order-grid\">\n        <div\n          v-for=\"item in orderList\"\n          :key=\"item.id\"\n          class=\"order-card\"\n          @click=\"toDetail(item)\"\n        >\n          <div class=\"teacher-head\">\n            <img class=\"avatar\" :src=\"item.avatar || avatarSrc\" alt=\"\" />\n            <h3>{{ item.teacher_name || item.name || '--' }}</h3>\n            <button type=\"button\" class=\"status-pill\" :class=\"statusClass(item)\">\n              {{ statusText(item) }}\n            </button>\n          </div>\n\n          <div class=\"label-row\">\n            <span\n              v-for=\"(label, index) in normalizedLabels(item.labels)\"\n              :key=\"`${item.id}-${label}-${index}`\"\n              :class=\"`label-${index}`\"\n            >\n              {{ label }}\n            </span>\n          </div>\n\n          <p>预约地点：{{ item.addr || '--' }}</p>\n          <p>预约时间：{{ formatOrderTime(item) }}</p>\n        </div>\n      </div>\n\n      <div v-else class=\"empty-state\">暂无预约记录</div>\n    </section>\n  </div>\n</template>\n\n<script>\nimport { getMyList } from '@/api/user'\n\nexport default {\n  name: 'PcWriteOrderList',\n  data() {\n    return {\n      orderList: [],\n      avatarSrc: 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png'\n    }\n  },\n  methods: {\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    normalizedLabels(value) {\n      if (!value) return []\n      if (Array.isArray(value)) return value.slice(0, 3)\n      return String(value).split(/[,，]/).filter(Boolean).slice(0, 3)\n    },\n    statusText(item) {\n      if (item.state == 0) return '已取消'\n      if (item.state == 2) return '已完成'\n      return '已预约'\n    },\n    statusClass(item) {\n      return {\n        canceled: item.state == 0,\n        finished: item.state == 2\n      }\n    },\n    formatOrderTime(item) {\n      return `${item.dateline || '--'} ${item.timeline || ''}`.trim()\n    },\n    async loadOrders() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const response = await getMyList({ sid: user.sid, keywords: '' })\n      const data = Array.isArray(response.data) ? response.data : []\n      this.orderList = data.map(item => ({\n        ...item,\n        labels: this.normalizedLabels(item.labels)\n      }))\n    },\n    toDetail(item) {\n      this.$router.push({ name: 'PcWriteOrderDetail', query: { y_id: item.id } })\n    }\n  },\n  mounted() {\n    this.loadOrders()\n  }\n}\n</script>\n\n<style scoped>\n.pc-write-order-list {\n  width: 1114px;\n  height: 583px;\n  color: #111c2d;\n}\n\n.breadcrumb {\n  height: 28px;\n  color: #6d7e93;\n  font-size: 12px;\n  line-height: 18px;\n}\n\n.order-panel {\n  height: 500px;\n  padding: 16px 32px 18px;\n  border-radius: 8px;\n  background: rgba(239, 247, 255, 0.74);\n  box-sizing: border-box;\n  overflow: hidden;\n}\n\n.panel-title {\n  display: flex;\n  align-items: center;\n  height: 28px;\n}\n\n.title-icon {\n  width: 13px;\n  height: 13px;\n  margin-right: 8px;\n  background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat;\n}\n\n.panel-title strong {\n  font-size: 17px;\n  color: #14253b;\n}\n\n.order-grid {\n  height: 420px;\n  margin-top: 18px;\n  display: grid;\n  grid-template-columns: repeat(2, 1fr);\n  column-gap: 72px;\n  overflow-y: auto;\n  padding: 0 18px 0 0;\n  scrollbar-width: none;\n  -ms-overflow-style: none;\n}\n\n.order-grid::-webkit-scrollbar {\n  display: none;\n}\n\n.order-card {\n  height: 130px;\n  padding-top: 8px;\n  border-bottom: 1px solid rgba(175, 190, 211, 0.58);\n  box-sizing: border-box;\n  cursor: pointer;\n}\n\n.teacher-head {\n  display: flex;\n  align-items: center;\n}\n\n.avatar {\n  width: 36px;\n  height: 36px;\n  margin-right: 14px;\n  border-radius: 50%;\n  object-fit: cover;\n}\n\n.teacher-head h3 {\n  flex: 1;\n  margin: 0;\n  color: #111c2d;\n  font-size: 19px;\n  line-height: 28px;\n}\n\n.status-pill {\n  width: 90px;\n  height: 30px;\n  border: none;\n  border-radius: 15px;\n  background: #00529f;\n  color: #fff;\n  font-size: 13px;\n  cursor: pointer;\n}\n\n.status-pill.canceled {\n  background: #aeb7c4;\n}\n\n.status-pill.finished {\n  background: #f2c84c;\n  color: #8a5200;\n}\n\n.label-row {\n  display: flex;\n  gap: 8px;\n  height: 22px;\n  margin: 8px 0 10px;\n}\n\n.label-row span {\n  height: 20px;\n  line-height: 20px;\n  padding: 0 8px;\n  border-radius: 3px;\n  color: #fff;\n  font-size: 12px;\n}\n\n.label-0 {\n  background: #50cf59;\n}\n\n.label-1 {\n  background: #72b5ee;\n}\n\n.label-2 {\n  background: #df72d6;\n}\n\n.order-card p {\n  margin: 0 0 7px;\n  color: #5f6c80;\n  font-size: 12px;\n  line-height: 18px;\n}\n\n.empty-state {\n  height: 400px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #7e8da3;\n  font-size: 14px;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWriteOrderList.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWriteOrderList.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcWriteOrderList.vue?vue&type=template&id=54cf0271&scoped=true\"\nimport script from \"./PcWriteOrderList.vue?vue&type=script&lang=js\"\nexport * from \"./PcWriteOrderList.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcWriteOrderList.vue?vue&type=style&index=0&id=54cf0271&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"54cf0271\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-write-order-detail\"},[_c('div',{staticClass:\"breadcrumb\"},[_vm._v(\"当前位置：首页-笔下生花-我的预约-预约详情\")]),_c('section',{staticClass:\"detail-card\"},[_c('div',{staticClass:\"teacher-side\"},[_c('div',{staticClass:\"teacher-head\"},[_c('img',{staticClass:\"avatar\",attrs:{\"src\":_vm.teacher.avatar || _vm.avatarSrc,\"alt\":\"\"}}),_c('h2',[_vm._v(_vm._s(_vm.teacher.name || '--'))])]),_c('div',{staticClass:\"label-row\"},_vm._l((_vm.labels),function(label,index){return _c('span',{key:`${label}-${index}`,class:`label-${index}`},[_vm._v(\" \"+_vm._s(label)+\" \")])}),0),_c('p',[_vm._v(\"预约地点：\"+_vm._s(_vm.logInfo.addr || '--'))]),_c('p',[_vm._v(\"预约时间：\"+_vm._s(_vm.orderTime))]),_c('p',[_vm._v(\"联系方式：\"+_vm._s(_vm.teacher.mobile || _vm.teacher.dingding || '--'))])]),_c('div',{staticClass:\"question-side\"},[_vm._v(\"问题概述：\"+_vm._s(_vm.order.intro || '--'))]),_c('div',{staticClass:\"status-text\",class:_vm.statusClass},[_vm._v(_vm._s(_vm.statusText))])]),_c('section',{staticClass:\"message-card\"},[_c('h3',[_vm._v(\"留言板\")]),(_vm.feedBackList.length > 0)?_c('div',{staticClass:\"feedback-list\"},_vm._l((_vm.feedBackList),function(item,index){return _c('div',{key:index,staticClass:\"feedback-item\"},[_c('span',[_vm._v(_vm._s(item.row && item.row.name ? item.row.name : '我')+\"：\")]),_c('em',[_vm._v(_vm._s(item.row && item.row.content ? item.row.content : ''))]),_c('small',[_vm._v(_vm._s(item.row && item.row.create_time ? item.row.create_time : ''))]),(item.reply_row)?_c('div',{staticClass:\"reply-item\"},[_c('span',[_vm._v(_vm._s(item.reply_row.name || '老师')+\"：\")]),_c('em',[_vm._v(_vm._s(item.reply_row.content))]),_c('small',[_vm._v(_vm._s(item.reply_row.create_time))])]):_vm._e()])}),0):_vm._e(),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.saveContent),expression:\"saveContent\"}],attrs:{\"placeholder\":\"给老师留言\"},domProps:{\"value\":(_vm.saveContent)},on:{\"input\":function($event){if($event.target.composing)return;_vm.saveContent=$event.target.value}}}),_c('div',{staticClass:\"message-actions\"},[_c('button',{staticClass:\"clear-btn\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.clearContent}},[_c('span',{staticClass:\"clear-icon\"},[_vm._v(\"⌧\")]),_vm._v(\" 一键清空 \")]),_c('button',{staticClass:\"send-btn\",attrs:{\"type\":\"button\",\"disabled\":_vm.sending},on:{\"click\":_vm.saveFeedBack}},[_vm._v(\" \"+_vm._s(_vm.sending ? '发送中...' : '发送')+\" \")])])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-write-order-detail\">\n    <div class=\"breadcrumb\">当前位置：首页-笔下生花-我的预约-预约详情</div>\n\n    <section class=\"detail-card\">\n      <div class=\"teacher-side\">\n        <div class=\"teacher-head\">\n          <img class=\"avatar\" :src=\"teacher.avatar || avatarSrc\" alt=\"\" />\n          <h2>{{ teacher.name || '--' }}</h2>\n        </div>\n\n        <div class=\"label-row\">\n          <span\n            v-for=\"(label, index) in labels\"\n            :key=\"`${label}-${index}`\"\n            :class=\"`label-${index}`\"\n          >\n            {{ label }}\n          </span>\n        </div>\n\n        <p>预约地点：{{ logInfo.addr || '--' }}</p>\n        <p>预约时间：{{ orderTime }}</p>\n        <p>联系方式：{{ teacher.mobile || teacher.dingding || '--' }}</p>\n      </div>\n\n      <div class=\"question-side\">问题概述：{{ order.intro || '--' }}</div>\n      <div class=\"status-text\" :class=\"statusClass\">{{ statusText }}</div>\n    </section>\n\n    <section class=\"message-card\">\n      <h3>留言板</h3>\n\n      <div v-if=\"feedBackList.length > 0\" class=\"feedback-list\">\n        <div v-for=\"(item, index) in feedBackList\" :key=\"index\" class=\"feedback-item\">\n          <span>{{ item.row && item.row.name ? item.row.name : '我' }}：</span>\n          <em>{{ item.row && item.row.content ? item.row.content : '' }}</em>\n          <small>{{ item.row && item.row.create_time ? item.row.create_time : '' }}</small>\n          <div v-if=\"item.reply_row\" class=\"reply-item\">\n            <span>{{ item.reply_row.name || '老师' }}：</span>\n            <em>{{ item.reply_row.content }}</em>\n            <small>{{ item.reply_row.create_time }}</small>\n          </div>\n        </div>\n      </div>\n\n      <textarea v-model=\"saveContent\" placeholder=\"给老师留言\"></textarea>\n\n      <div class=\"message-actions\">\n        <button type=\"button\" class=\"clear-btn\" @click=\"clearContent\">\n          <span class=\"clear-icon\">⌧</span>\n          一键清空\n        </button>\n        <button type=\"button\" class=\"send-btn\" :disabled=\"sending\" @click=\"saveFeedBack\">\n          {{ sending ? '发送中...' : '发送' }}\n        </button>\n      </div>\n    </section>\n  </div>\n</template>\n\n<script>\nimport { getFeedBackList, getMyOrderInfo, saveFeedback } from '@/api/user'\n\nexport default {\n  name: 'PcWriteOrderDetail',\n  data() {\n    return {\n      yId: '',\n      orderInfo: {},\n      feedBackList: [],\n      saveContent: '',\n      sending: false,\n      avatarSrc: 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png'\n    }\n  },\n  computed: {\n    teacher() {\n      return this.orderInfo.writeTeacher || {}\n    },\n    order() {\n      return this.orderInfo.writeTeacherOrder || {}\n    },\n    logInfo() {\n      return this.orderInfo.writeTeacherLog || {}\n    },\n    logTime() {\n      return this.orderInfo.writeTeacherLogTime || {}\n    },\n    labels() {\n      const value = this.teacher.labels\n      if (!value) return ['四级写作辅导', '雅思', '六级']\n      if (Array.isArray(value)) return value.slice(0, 3)\n      return String(value).split(/[,，]/).filter(Boolean).slice(0, 3)\n    },\n    orderTime() {\n      return `${this.logInfo.dateline || '--'} ${this.logTime.timeline || ''}`.trim()\n    },\n    statusText() {\n      if (this.order.state == 0) return '已取消'\n      if (this.order.state == 2) return '已完成'\n      return '已预约'\n    },\n    statusClass() {\n      return {\n        canceled: this.order.state == 0,\n        finished: this.order.state == 2\n      }\n    }\n  },\n  methods: {\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    showMessage(message, type) {\n      if (this.$message) {\n        this.$message({ message, type, center: true })\n      } else {\n        alert(message)\n      }\n    },\n    async loadOrderInfo() {\n      if (!this.yId) return\n      const response = await getMyOrderInfo({ id: this.yId })\n      this.orderInfo = response.data || {}\n    },\n    async loadFeedback() {\n      if (!this.yId) return\n      const response = await getFeedBackList({ teacher_order_id: this.yId })\n      if (response.code == 100) {\n        this.feedBackList = Array.isArray(response.data) ? response.data : []\n      }\n    },\n    clearContent() {\n      this.saveContent = ''\n    },\n    async saveFeedBack() {\n      const content = String(this.saveContent || '').trim()\n      if (!content) {\n        this.showMessage('请输入留言内容', 'warning')\n        return\n      }\n      const user = this.getUser()\n      if (!user.sid || this.sending) return\n      this.sending = true\n      try {\n        const response = await saveFeedback({\n          teacher_order_id: this.yId,\n          sid: user.sid,\n          content\n        })\n        if (response.code == 100) {\n          this.saveContent = ''\n          await this.loadFeedback()\n          this.showMessage('发送成功')\n        }\n      } finally {\n        this.sending = false\n      }\n    }\n  },\n  mounted() {\n    this.yId = this.$route.query.y_id || this.$route.query.id || ''\n    this.loadOrderInfo()\n    this.loadFeedback()\n  }\n}\n</script>\n\n<style scoped>\n.pc-write-order-detail {\n  width: 1114px;\n  height: 583px;\n  color: #111c2d;\n}\n\n.breadcrumb {\n  height: 28px;\n  color: #6d7e93;\n  font-size: 12px;\n  line-height: 18px;\n}\n\n.detail-card,\n.message-card {\n  border-radius: 8px;\n  background: rgba(239, 247, 255, 0.74);\n  box-sizing: border-box;\n}\n\n.detail-card {\n  height: 174px;\n  padding: 28px 52px 22px 34px;\n  display: grid;\n  grid-template-columns: 330px 1fr 90px;\n  column-gap: 40px;\n  align-items: start;\n}\n\n.teacher-head {\n  display: flex;\n  align-items: center;\n}\n\n.avatar {\n  width: 42px;\n  height: 42px;\n  margin-right: 14px;\n  border-radius: 50%;\n  object-fit: cover;\n}\n\n.teacher-head h2 {\n  margin: 0;\n  color: #111c2d;\n  font-size: 21px;\n  line-height: 30px;\n}\n\n.label-row {\n  display: flex;\n  gap: 8px;\n  height: 22px;\n  margin: 9px 0 10px;\n}\n\n.label-row span {\n  height: 20px;\n  line-height: 20px;\n  padding: 0 8px;\n  border-radius: 3px;\n  color: #fff;\n  font-size: 12px;\n}\n\n.label-0 {\n  background: #50cf59;\n}\n\n.label-1 {\n  background: #72b5ee;\n}\n\n.label-2 {\n  background: #df72d6;\n}\n\n.teacher-side p {\n  margin: 0 0 6px;\n  color: #5f6c80;\n  font-size: 12px;\n  line-height: 17px;\n}\n\n.question-side {\n  padding-top: 70px;\n  color: #5f6c80;\n  font-size: 12px;\n  line-height: 18px;\n  word-break: break-word;\n}\n\n.status-text {\n  padding-top: 12px;\n  color: #00529f;\n  font-size: 13px;\n  text-align: right;\n}\n\n.status-text.canceled {\n  color: #8a96a8;\n}\n\n.status-text.finished {\n  color: #b06a00;\n}\n\n.message-card {\n  height: 354px;\n  margin-top: 14px;\n  padding: 18px 22px 18px;\n}\n\n.message-card h3 {\n  margin: 0 0 10px 4px;\n  font-size: 18px;\n  line-height: 24px;\n  color: #111c2d;\n}\n\n.feedback-list {\n  max-height: 72px;\n  margin: 0 0 8px;\n  overflow-y: auto;\n  color: #5f6c80;\n  font-size: 12px;\n  line-height: 18px;\n}\n\n.feedback-item {\n  margin-bottom: 6px;\n}\n\n.feedback-item span {\n  color: #111c2d;\n  font-weight: 700;\n}\n\n.feedback-item em {\n  font-style: normal;\n}\n\n.feedback-item small {\n  margin-left: 8px;\n  color: #94a0b1;\n}\n\n.reply-item {\n  margin: 4px 0 0 28px;\n}\n\ntextarea {\n  width: 100%;\n  height: 236px;\n  padding: 18px 26px;\n  border: none;\n  resize: none;\n  outline: none;\n  background: rgba(225, 239, 255, 0.68);\n  color: #111c2d;\n  font-size: 14px;\n  line-height: 22px;\n  box-sizing: border-box;\n}\n\ntextarea::placeholder {\n  color: #9aa8bb;\n}\n\n.message-actions {\n  height: 56px;\n  display: flex;\n  align-items: center;\n  justify-content: flex-end;\n  gap: 42px;\n}\n\nbutton {\n  border: none;\n  cursor: pointer;\n  padding: 0;\n}\n\n.clear-btn {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  background: transparent;\n  color: #111c2d;\n  font-size: 14px;\n}\n\n.clear-icon {\n  width: 34px;\n  height: 34px;\n  border: 1px dashed rgba(143, 115, 72, 0.5);\n  border-radius: 4px;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  background: #ffe6bd;\n  color: #fff;\n  font-size: 18px;\n}\n\n.send-btn {\n  width: 290px;\n  height: 47px;\n  border-radius: 12px;\n  background: #00529f;\n  color: #fff;\n  font-size: 16px;\n}\n\n.send-btn:disabled {\n  background: #8ea8c9;\n  cursor: default;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWriteOrderDetail.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWriteOrderDetail.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcWriteOrderDetail.vue?vue&type=template&id=294b63e8&scoped=true\"\nimport script from \"./PcWriteOrderDetail.vue?vue&type=script&lang=js\"\nexport * from \"./PcWriteOrderDetail.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcWriteOrderDetail.vue?vue&type=style&index=0&id=294b63e8&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"294b63e8\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-write-notice\"},[_c('div',{staticClass:\"breadcrumb\"},[_vm._v(\"当前位置：首页-笔下生花-留言\")]),_c('section',{staticClass:\"notice-panel\"},[_vm._m(0),(_vm.feedBackList.length > 0)?_c('div',{staticClass:\"notice-list\"},_vm._l((_vm.feedBackList),function(item,index){return _c('div',{key:index,staticClass:\"notice-item\"},[(item.reply_row)?_c('div',{staticClass:\"reply-main\"},[_c('img',{staticClass:\"avatar\",attrs:{\"src\":_vm.avatarSrc,\"alt\":\"\"}}),_c('div',{staticClass:\"reply-content\"},[_c('div',{staticClass:\"reply-head\"},[_c('strong',[_vm._v(_vm._s(item.reply_row.name || '老师'))]),_c('span',[_vm._v(\"回复了你的留言 \"+_vm._s(item.reply_row.create_time || ''))])]),_c('p',[_vm._v(_vm._s(item.reply_row.content))])])]):_c('div',{staticClass:\"empty-reply\"},[_vm._v(\"暂无回复\")]),_c('div',{staticClass:\"question-row\"},[_c('span'),_c('p',[_vm._v(_vm._s(item.row && item.row.content ? item.row.content : '--'))])])])}),0):_c('div',{staticClass:\"empty-state\"},[_vm._v(\"暂无留言\")])])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"panel-title\"},[_c('span',{staticClass:\"title-icon\"}),_c('strong',[_vm._v(\"留言\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-write-notice\">\n    <div class=\"breadcrumb\">当前位置：首页-笔下生花-留言</div>\n\n    <section class=\"notice-panel\">\n      <div class=\"panel-title\">\n        <span class=\"title-icon\"></span>\n        <strong>留言</strong>\n      </div>\n\n      <div v-if=\"feedBackList.length > 0\" class=\"notice-list\">\n        <div v-for=\"(item, index) in feedBackList\" :key=\"index\" class=\"notice-item\">\n          <div v-if=\"item.reply_row\" class=\"reply-main\">\n            <img class=\"avatar\" :src=\"avatarSrc\" alt=\"\" />\n            <div class=\"reply-content\">\n              <div class=\"reply-head\">\n                <strong>{{ item.reply_row.name || '老师' }}</strong>\n                <span>回复了你的留言 {{ item.reply_row.create_time || '' }}</span>\n              </div>\n              <p>{{ item.reply_row.content }}</p>\n            </div>\n          </div>\n          <div v-else class=\"empty-reply\">暂无回复</div>\n\n          <div class=\"question-row\">\n            <span></span>\n            <p>{{ item.row && item.row.content ? item.row.content : '--' }}</p>\n          </div>\n        </div>\n      </div>\n\n      <div v-else class=\"empty-state\">暂无留言</div>\n    </section>\n  </div>\n</template>\n\n<script>\nimport { getMyFeedBackList } from '@/api/listen'\n\nexport default {\n  name: 'PcWriteNotice',\n  data() {\n    return {\n      feedBackList: [],\n      avatarSrc: 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/mine/default_header.png'\n    }\n  },\n  methods: {\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    async loadList() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const response = await getMyFeedBackList({ sid: user.sid })\n      this.feedBackList = Array.isArray(response.data) ? response.data : []\n    }\n  },\n  mounted() {\n    this.loadList()\n  }\n}\n</script>\n\n<style scoped>\n.pc-write-notice {\n  width: 1114px;\n  height: 583px;\n  color: #111c2d;\n}\n\n.breadcrumb {\n  height: 28px;\n  color: #6d7e93;\n  font-size: 12px;\n  line-height: 18px;\n}\n\n.notice-panel {\n  height: 555px;\n  padding: 18px 24px;\n  border-radius: 8px;\n  background: rgba(239, 247, 255, 0.74);\n  box-sizing: border-box;\n  overflow: hidden;\n}\n\n.panel-title {\n  display: flex;\n  align-items: center;\n  height: 28px;\n}\n\n.title-icon {\n  width: 13px;\n  height: 13px;\n  margin-right: 8px;\n  background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat;\n}\n\n.panel-title strong {\n  font-size: 17px;\n  color: #14253b;\n}\n\n.notice-list {\n  height: 474px;\n  margin-top: 14px;\n  overflow-y: auto;\n  padding: 0 18px 0 8px;\n  scrollbar-width: none;\n  -ms-overflow-style: none;\n}\n\n.notice-list::-webkit-scrollbar {\n  display: none;\n}\n\n.notice-item {\n  min-height: 98px;\n  padding: 18px 6px 14px;\n  border-bottom: 1px solid rgba(175, 190, 211, 0.58);\n  box-sizing: border-box;\n}\n\n.reply-main {\n  display: flex;\n  align-items: flex-start;\n}\n\n.avatar {\n  width: 32px;\n  height: 32px;\n  margin-right: 12px;\n  border-radius: 50%;\n  object-fit: cover;\n}\n\n.reply-content {\n  min-width: 0;\n  flex: 1;\n}\n\n.reply-head {\n  display: flex;\n  align-items: baseline;\n  gap: 12px;\n}\n\n.reply-head strong {\n  color: #111c2d;\n  font-size: 14px;\n  line-height: 20px;\n}\n\n.reply-head span {\n  color: #8d9aab;\n  font-size: 12px;\n}\n\n.reply-content p {\n  margin: 7px 0 0;\n  color: #111c2d;\n  font-size: 13px;\n  line-height: 20px;\n  word-break: break-word;\n}\n\n.empty-reply {\n  color: #111c2d;\n  font-size: 14px;\n  font-weight: 700;\n  line-height: 28px;\n}\n\n.question-row {\n  display: flex;\n  align-items: flex-start;\n  margin: 10px 0 0 44px;\n}\n\n.question-row span {\n  width: 4px;\n  height: 14px;\n  margin: 3px 8px 0 0;\n  background: #c8c8c8;\n}\n\n.question-row p {\n  margin: 0;\n  color: #8d9aab;\n  font-size: 12px;\n  line-height: 20px;\n  word-break: break-word;\n}\n\n.empty-state {\n  height: 440px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #7e8da3;\n  font-size: 14px;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWriteNotice.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWriteNotice.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcWriteNotice.vue?vue&type=template&id=6647436c&scoped=true\"\nimport script from \"./PcWriteNotice.vue?vue&type=script&lang=js\"\nexport * from \"./PcWriteNotice.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcWriteNotice.vue?vue&type=style&index=0&id=6647436c&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"6647436c\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-interactive-argument\"},[_c('div',{staticClass:\"top-row\"},[_c('div',{staticClass:\"panel-title\"},[_c('span',{staticClass:\"title-icon\"}),_c('strong',[_vm._v(_vm._s(_vm.pageConfig.title)+\"模式选择\")])]),_c('button',{staticClass:\"back-btn\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.goBack}},[_vm._v(\"返回\")])]),_c('div',{staticClass:\"mode-grid\"},_vm._l((_vm.modeList),function(item,index){return _c('section',{key:item.type,staticClass:\"mode-card\",class:{ active: _vm.activeIndex === index },style:({ backgroundImage: `url(${item.bg})` }),on:{\"click\":function($event){_vm.activeIndex = index}}},[_c('h2',[_vm._v(_vm._s(item.title))]),_vm._l((item.content),function(line){return _c('p',{key:line},[_vm._v(_vm._s(line))])})],2)}),0),_c('p',{staticClass:\"notice\"},[_vm._v(_vm._s(_vm.pageConfig.notice))]),_c('button',{staticClass:\"start-btn\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.startWrite}},[_vm._v(\"开始写作\")])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-interactive-argument\">\n    <div class=\"top-row\">\n      <div class=\"panel-title\">\n        <span class=\"title-icon\"></span>\n        <strong>{{ pageConfig.title }}模式选择</strong>\n      </div>\n      <button type=\"button\" class=\"back-btn\" @click=\"goBack\">返回</button>\n    </div>\n\n    <div class=\"mode-grid\">\n      <section\n        v-for=\"(item, index) in modeList\"\n        :key=\"item.type\"\n        class=\"mode-card\"\n        :class=\"{ active: activeIndex === index }\"\n        :style=\"{ backgroundImage: `url(${item.bg})` }\"\n        @click=\"activeIndex = index\"\n      >\n        <h2>{{ item.title }}</h2>\n        <p v-for=\"line in item.content\" :key=\"line\">{{ line }}</p>\n      </section>\n    </div>\n\n    <p class=\"notice\">{{ pageConfig.notice }}</p>\n\n    <button type=\"button\" class=\"start-btn\" @click=\"startWrite\">开始写作</button>\n  </div>\n</template>\n\n<script>\nexport default {\n  name: 'PcInteractiveArgument',\n  data() {\n    return {\n      activeIndex: 0\n    }\n  },\n  computed: {\n    isNarrative() {\n      return this.$route.meta && this.$route.meta.writeType === 'narrative'\n    },\n    pageConfig() {\n      if (this.isNarrative) {\n        return {\n          title: '互动式记叙文',\n          notice: '请仔细阅读AI提供的内容，并学习其行文与语言表达（如词汇、结构等），并尝试应用于自己的写作中。期待你与AI共创作的精彩故事。',\n          modes: [\n            {\n              type: 'single',\n              title: '单轮互动',\n              bg: 'https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/hd1.png',\n              routeName: 'PcInteractiveWriteNarrativeSingle',\n              content: [\n                '首先，AI将提供一篇被抹去后半部分的英文故事。',\n                '其次，请仔细阅读AI提供的故事，并在此基础上完成故事续写，不少于400词，限时45分钟。'\n              ]\n            },\n            {\n              type: 'multi',\n              title: '多轮互动',\n              bg: 'https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/hd2.png',\n              routeName: 'PcInteractiveWriteNarrativeMulti',\n              content: [\n                '首先，故事的开头已由AI提供，请阅读并完成续写，长度应与AI提供的内容相似。',\n                '随后，AI将根据你所写的内容，续写新的内容，请阅读并续写，长度应与AI提供的内容相似。',\n                '最后，你和AI将分别完成故事结尾部分，约100词。总时长为45分钟。'\n              ]\n            }\n          ]\n        }\n      }\n      return {\n        title: '互动式议论文',\n        notice: '请仔细阅读AI提供的内容，并学习其行文与语言表达（如词汇、结构等），并尝试应用于自己的写作中。期待你与AI的精彩辩论！',\n        modes: [\n          {\n            type: 'single',\n            title: '单轮互动',\n            bg: 'https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/hd1.png',\n            routeName: 'PcInteractiveWriteArgumentSingle',\n            content: [\n              '首先，AI将提供一篇包括引言、论据以及总结的完整议论文。',\n              '其次，请针对AI所写的议论文写一篇驳论，提出与AI相反的观点。',\n              '文章的结构与长度应与AI提供的文章相似，不少于400词，限时45分钟。'\n            ]\n          },\n          {\n            type: 'multi',\n            title: '多轮互动',\n            bg: 'https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/hd2.png',\n            routeName: 'PcInteractiveWriteArgumentMulti',\n            content: [\n              '首先，AI将提供自己议论文的引言部分，请你以此为样例，撰写相反引言。',\n              '其次，AI将提供支持其观点的第一条论点，请就此提出反驳论点，约100词。同理，将进行多轮辩论。',\n              '最后，你和AI将分别撰写自己观点的结论部分，约100词。总时长为45分钟。'\n            ]\n          }\n        ]\n      }\n    },\n    modeList() {\n      return this.pageConfig.modes\n    }\n  },\n  watch: {\n    '$route.name'() {\n      this.activeIndex = 0\n    }\n  },\n  methods: {\n    goBack() {\n      this.$router.back()\n    },\n    startWrite() {\n      const item = this.modeList[this.activeIndex] || this.modeList[0]\n      localStorage.setItem('AiContent', [])\n      localStorage.setItem('userWritingToAi', [])\n      localStorage.setItem('AIWrite', [])\n      this.$router.push({ name: item.routeName })\n    }\n  }\n}\n</script>\n\n<style scoped>\n.pc-interactive-argument {\n  width: 1114px;\n  height: 583px;\n  padding: 18px 34px 0;\n  box-sizing: border-box;\n  color: #111c2d;\n  font-size: 13px;\n}\n\n.top-row {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n}\n\n.back-btn {\n  height: 30px;\n  padding: 0 18px;\n  border: none;\n  border-radius: 5px;\n  background: #00529f;\n  color: #fff;\n  font-size: 13px;\n  cursor: pointer;\n}\n\n.panel-title {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n.title-icon {\n  width: 13px;\n  height: 13px;\n  display: inline-block;\n  background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat;\n}\n\n.panel-title strong {\n  font-size: 15px;\n  line-height: 22px;\n  color: #111c2d;\n}\n\n.mode-grid {\n  display: grid;\n  grid-template-columns: repeat(2, 1fr);\n  gap: 44px;\n  margin-top: 16px;\n}\n\n.mode-card {\n  height: 280px;\n  padding: 38px 42px;\n  box-sizing: border-box;\n  border: 1px dashed rgba(44, 55, 70, 0.35);\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100% 100%;\n  cursor: pointer;\n  opacity: 0.7;\n}\n\n.mode-card.active {\n  border-color: rgba(23, 150, 238, 0.85);\n  opacity: 1;\n}\n\n.mode-card h2 {\n  margin: 0 0 20px;\n  font-size: 24px;\n  line-height: 30px;\n  color: #00529f;\n}\n\n.mode-card:nth-child(2) h2 {\n  color: #9b6e2f;\n}\n\n.mode-card p {\n  margin: 0 0 8px;\n  font-size: 14px;\n  line-height: 26px;\n  color: #6ea6dc;\n}\n\n.mode-card:nth-child(2) p {\n  color: #9d846b;\n}\n\n.notice {\n  margin: 22px 0 0;\n  text-align: center;\n  color: #46566b;\n  font-size: 13px;\n  line-height: 22px;\n}\n\n.start-btn {\n  width: 290px;\n  height: 48px;\n  display: block;\n  margin: 12px auto 0;\n  border: none;\n  border-radius: 12px;\n  background: #00529f;\n  color: #fff;\n  font-size: 16px;\n  cursor: pointer;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcInteractiveArgument.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcInteractiveArgument.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcInteractiveArgument.vue?vue&type=template&id=66c8f249&scoped=true\"\nimport script from \"./PcInteractiveArgument.vue?vue&type=script&lang=js\"\nexport * from \"./PcInteractiveArgument.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcInteractiveArgument.vue?vue&type=style&index=0&id=66c8f249&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"66c8f249\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-interactive-write\"},[_c('div',{staticClass:\"breadcrumb\"},[_vm._v(\"当前位置：首页>笔下生花>\"+_vm._s(_vm.pageTitle)+\">编辑\")]),(_vm.loading)?_c('div',{staticClass:\"loading-mask\"},[_vm._v(\"AI写作生成中，请稍候...\")]):_vm._e(),_c('div',{staticClass:\"write-layout\"},[_c('section',{staticClass:\"source-card\"},[_c('div',{staticClass:\"panel-title\"},[_c('span',{staticClass:\"title-icon\"}),_c('strong',[_vm._v(_vm._s(_vm.isNarrative ? '题目' : '辩题'))])]),_c('div',{staticClass:\"source-scroll\"},[_c('p',{staticClass:\"topic-text\"},[_vm._v(_vm._s(_vm.aiContent.content || '-'))]),_c('h2',[_vm._v(\"AI writing\")]),_c('p',{staticClass:\"ai-text\"},[_vm._v(_vm._s(_vm.aiWriting || '-'))])])]),_c('section',{staticClass:\"editor-card\"},[_vm._m(0),_c('div',{staticClass:\"editor-shell\"},[_c('div',{staticClass:\"paste-tip\"},[_vm._v(\"本页面不能粘贴\")]),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.writing),expression:\"writing\"}],attrs:{\"maxlength\":\"8000\"},domProps:{\"value\":(_vm.writing)},on:{\"input\":[function($event){if($event.target.composing)return;_vm.writing=$event.target.value},_vm.saveDraft],\"paste\":function($event){$event.preventDefault();return _vm.onPaste.apply(null, arguments)}}}),_c('div',{staticClass:\"word-count\"},[_vm._v(\"Word Count: \"+_vm._s(_vm.wordCount))])]),_c('div',{staticClass:\"action-row\"},[_c('button',{staticClass:\"clear-btn\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.clearInput}},[_c('span'),_vm._v(\" 一键清空 \")]),_c('button',{staticClass:\"submit-btn\",attrs:{\"type\":\"button\",\"disabled\":_vm.submitting || _vm.loading},on:{\"click\":_vm.submitPaper}},[_vm._v(\" \"+_vm._s(_vm.submitting ? '提交中...' : '提交')+\" \")])])])]),_c('PcAiAssistant',{attrs:{\"scene\":\"write\"}})],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"panel-title\"},[_c('span',{staticClass:\"title-icon\"}),_c('strong',[_vm._v(\"My continuation\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-interactive-write\">\n    <div class=\"breadcrumb\">当前位置：首页&gt;笔下生花&gt;{{ pageTitle }}&gt;编辑</div>\n\n    <div v-if=\"loading\" class=\"loading-mask\">AI写作生成中，请稍候...</div>\n\n    <div class=\"write-layout\">\n      <section class=\"source-card\">\n        <div class=\"panel-title\">\n          <span class=\"title-icon\"></span>\n          <strong>{{ isNarrative ? '题目' : '辩题' }}</strong>\n        </div>\n        <div class=\"source-scroll\">\n          <p class=\"topic-text\">{{ aiContent.content || '-' }}</p>\n          <h2>AI writing</h2>\n          <p class=\"ai-text\">{{ aiWriting || '-' }}</p>\n        </div>\n      </section>\n\n      <section class=\"editor-card\">\n        <div class=\"panel-title\">\n          <span class=\"title-icon\"></span>\n          <strong>My continuation</strong>\n        </div>\n        <div class=\"editor-shell\">\n          <div class=\"paste-tip\">本页面不能粘贴</div>\n          <textarea\n            v-model=\"writing\"\n            maxlength=\"8000\"\n            @input=\"saveDraft\"\n            @paste.prevent=\"onPaste\"\n          ></textarea>\n          <div class=\"word-count\">Word Count: {{ wordCount }}</div>\n        </div>\n        <div class=\"action-row\">\n          <button type=\"button\" class=\"clear-btn\" @click=\"clearInput\">\n            <span></span>\n            一键清空\n          </button>\n          <button type=\"button\" class=\"submit-btn\" :disabled=\"submitting || loading\" @click=\"submitPaper\">\n            {{ submitting ? '提交中...' : '提交' }}\n          </button>\n        </div>\n      </section>\n    </div>\n    <PcAiAssistant scene=\"write\" />\n  </div>\n</template>\n\n<script>\nimport { getSubject, historySave, writingAiFetch } from '@/api/user'\nimport PcAiAssistant from '@/components/PcAiAssistant.vue'\n\nexport default {\n  name: 'PcInteractiveWrite',\n  components: { PcAiAssistant },\n  data() {\n    return {\n      aiContent: {},\n      aiWriting: '',\n      writing: '',\n      loading: false,\n      submitting: false\n    }\n  },\n  computed: {\n    typeId() {\n      return Number(this.$route.meta && this.$route.meta.typeId) || 1\n    },\n    classId() {\n      return Number(this.$route.meta && this.$route.meta.classId) || 1\n    },\n    isNarrative() {\n      return this.typeId === 2\n    },\n    pageTitle() {\n      if (this.isNarrative) return this.classId === 1 ? '单轮记叙' : '多轮记叙'\n      return this.classId === 1 ? '单轮议论' : '多轮议论'\n    },\n    wordCount() {\n      return String(this.writing || '').trim().split(/\\s+/).filter(Boolean).length\n    },\n    draftKey() {\n      return `pcInteractiveWriting-${this.typeId}-${this.classId}`\n    }\n  },\n  methods: {\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    saveDraft() {\n      localStorage.setItem(this.draftKey, this.writing || '')\n      localStorage.setItem('userWritingToAi', this.writing || '')\n    },\n    onPaste() {\n      alert('禁止粘贴')\n    },\n    clearInput() {\n      this.writing = ''\n      this.saveDraft()\n    },\n    async loadData() {\n      this.writing = localStorage.getItem(this.draftKey) || localStorage.getItem('userWritingToAi') || ''\n      const cachedContent = localStorage.getItem('AiContent')\n      const cachedAiWriting = localStorage.getItem('AIWrite')\n      if (cachedContent && cachedContent !== '[]' && cachedAiWriting && cachedAiWriting !== '[]') {\n        this.aiContent = JSON.parse(cachedContent)\n        this.aiWriting = cachedAiWriting\n        return\n      }\n\n      this.loading = true\n      try {\n        const subject = await getSubject({ type_id: this.typeId })\n        this.aiContent = subject.data && subject.data.content ? subject.data.content : {}\n        localStorage.setItem('AiContent', JSON.stringify(this.aiContent))\n        const ai = await writingAiFetch({\n          type_id: this.typeId,\n          class_id: this.classId,\n          Level: 3,\n          userinput: this.aiContent.content\n        })\n        this.aiWriting = ai.data && ai.data.content ? ai.data.content : ''\n        localStorage.setItem('AIWrite', this.aiWriting)\n      } finally {\n        this.loading = false\n      }\n    },\n    async submitPaper() {\n      if (this.submitting || this.loading) return\n      const user = this.getUser()\n      if (!user.sid) return\n      this.saveDraft()\n      this.submitting = true\n      try {\n        const response = await historySave({\n          subject_title: `(topic:${this.aiContent.topic || ''})${this.aiContent.content || ''}`,\n          sid: user.sid,\n          user_input: JSON.stringify({\n            index: 0,\n            answer: this.aiWriting,\n            question: this.writing\n          }),\n          type_id: this.typeId,\n          class_id: this.classId\n        })\n        if (response.code === 100) {\n          localStorage.setItem('AiContent', [])\n          localStorage.setItem('userWritingToAi', [])\n          localStorage.setItem('AIWrite', [])\n          localStorage.removeItem(this.draftKey)\n          this.$router.push({ name: 'PcWriteHistoryDetail', query: { his_id: response.data } })\n        }\n      } finally {\n        this.submitting = false\n      }\n    }\n  },\n  mounted() {\n    this.loadData()\n  }\n}\n</script>\n\n<style scoped>\n.pc-interactive-write {\n  width: 1114px;\n  height: 583px;\n  color: #111c2d;\n  font-size: 13px;\n  position: relative;\n}\n\n.breadcrumb {\n  height: 28px;\n  font-size: 12px;\n  line-height: 18px;\n  color: #65758b;\n}\n\n.write-layout {\n  height: 555px;\n  display: grid;\n  grid-template-columns: 548px 548px;\n  gap: 16px;\n}\n\n.source-card,\n.editor-card {\n  border-radius: 8px;\n  background: rgba(255, 255, 255, 0.36);\n  box-sizing: border-box;\n}\n\n.source-card {\n  padding: 16px 28px 22px;\n}\n\n.editor-card {\n  padding: 16px 22px 18px;\n}\n\n.panel-title {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n.title-icon {\n  width: 13px;\n  height: 13px;\n  display: inline-block;\n  background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat;\n}\n\n.panel-title strong {\n  font-size: 16px;\n  line-height: 22px;\n}\n\n.source-scroll {\n  height: 470px;\n  margin-top: 10px;\n  padding-right: 12px;\n  overflow-y: auto;\n}\n\n.topic-text,\n.ai-text {\n  margin: 0;\n  font-size: 16px;\n  line-height: 25px;\n  color: #111c2d;\n  white-space: pre-wrap;\n}\n\n.source-scroll h2 {\n  margin: 16px 0 8px;\n  font-size: 16px;\n  line-height: 22px;\n}\n\n.editor-shell {\n  height: 427px;\n  margin-top: 10px;\n  position: relative;\n  background: rgba(207, 222, 242, 0.55);\n}\n\n.paste-tip {\n  position: absolute;\n  left: 20px;\n  top: 16px;\n  color: #ff243d;\n  font-size: 14px;\n  z-index: 1;\n}\n\ntextarea {\n  width: 100%;\n  height: 100%;\n  padding: 42px 20px 42px;\n  border: none;\n  resize: none;\n  outline: none;\n  box-sizing: border-box;\n  background: transparent;\n  color: #111c2d;\n  font-size: 16px;\n  line-height: 25px;\n}\n\n.word-count {\n  position: absolute;\n  right: 24px;\n  bottom: 14px;\n  font-size: 15px;\n}\n\n.action-row {\n  height: 54px;\n  display: flex;\n  align-items: center;\n  gap: 18px;\n  margin-top: 16px;\n}\n\n.clear-btn {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  border: none;\n  background: transparent;\n  color: #111c2d;\n  font-size: 14px;\n  cursor: pointer;\n}\n\n.clear-btn span {\n  width: 36px;\n  height: 36px;\n  border: 1px dashed rgba(143, 115, 72, 0.6);\n  border-radius: 4px;\n  background: #ffe5b9;\n}\n\n.submit-btn {\n  flex: 1;\n  height: 48px;\n  border: none;\n  border-radius: 12px;\n  background: #00529f;\n  color: #fff;\n  font-size: 16px;\n  cursor: pointer;\n}\n\n.submit-btn:disabled {\n  background: #8aa9ca;\n  cursor: default;\n}\n\n.loading-mask {\n  position: absolute;\n  inset: 28px 0 0;\n  z-index: 10;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: rgba(220, 236, 255, 0.72);\n  color: #00529f;\n  font-size: 16px;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcInteractiveWrite.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcInteractiveWrite.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcInteractiveWrite.vue?vue&type=template&id=54ddff6c&scoped=true\"\nimport script from \"./PcInteractiveWrite.vue?vue&type=script&lang=js\"\nexport * from \"./PcInteractiveWrite.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcInteractiveWrite.vue?vue&type=style&index=0&id=54ddff6c&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"54ddff6c\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-interactive-multi-write\"},[(_vm.loading)?_c('div',{staticClass:\"loading-mask\"},[_vm._v(\"对话生成中，请耐心等待...\")]):_vm._e(),_c('div',{staticClass:\"top-bar\"},[_c('button',{staticClass:\"back-btn\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.goBack}},[_vm._v(\"返回\")]),_c('h1',[_vm._v(_vm._s(_vm.pageTitle))])]),_c('section',{staticClass:\"content-card\"},[_c('div',{staticClass:\"topic-title\"},[_vm._v(_vm._s(_vm.isNarrative ? '题目内容：' : '辩题内容：'))]),_c('p',{staticClass:\"topic-content\"},[_vm._v(_vm._s(_vm.aiContent.content || '-'))]),_c('div',{staticClass:\"line\"}),_c('div',{staticClass:\"filter-row\"},[_c('button',{class:{ active: _vm.onlyAI },attrs:{\"type\":\"button\"},on:{\"click\":_vm.toggleOnlyAI}},[_vm._v(\"只看AI\")]),_c('button',{class:{ active: _vm.onlyMy },attrs:{\"type\":\"button\"},on:{\"click\":_vm.toggleOnlyMy}},[_vm._v(\"只看我\")])]),_c('div',{ref:\"scrollContainer\",staticClass:\"dialog-list\"},[_vm._l((_vm.msgList),function(item,index){return [(!_vm.onlyMy)?_c('div',{key:`ai-${index}`,staticClass:\"dialog-block ai-block\",class:`color-${index % 4}`},[_vm._v(\" \"+_vm._s(item.answer)+\" \")]):_vm._e(),(!_vm.onlyAI && item.question)?_c('div',{key:`my-${index}`,staticClass:\"dialog-block my-block\",class:`color-${index % 4}`},[_vm._v(\" \"+_vm._s(item.question)+\" \")]):_vm._e(),(index < _vm.msgList.length - 1)?_c('div',{key:`line-${index}`,staticClass:\"split-line\"}):_vm._e()]})],2)]),_c('div',{staticClass:\"bottom-actions\"},[_c('button',{staticClass:\"write-btn\",attrs:{\"type\":\"button\",\"disabled\":_vm.loading || _vm.submitting || !_vm.canWrite},on:{\"click\":_vm.openEditor}},[_vm._v(\" \"+_vm._s(_vm.isNarrative ? '写续写' : '写驳论')+\" \")]),_c('button',{staticClass:\"submit-btn\",attrs:{\"type\":\"button\",\"disabled\":_vm.loading || _vm.submitting || _vm.msgList.length === 0},on:{\"click\":_vm.submitPaper}},[_vm._v(\" \"+_vm._s(_vm.submitting ? '提交中...' : '提交')+\" \")])]),(_vm.editorVisible)?_c('div',{staticClass:\"editor-mask\"},[_c('div',{staticClass:\"editor-panel\"},[_c('div',{staticClass:\"editor-head\"},[_c('strong',[_vm._v(_vm._s(_vm.isNarrative ? 'My continuation' : 'My rebuttal'))]),_c('button',{attrs:{\"type\":\"button\"},on:{\"click\":_vm.closeEditor}},[_vm._v(\"关闭\")])]),_c('div',{staticClass:\"paste-tip\"},[_vm._v(\"本页面不能粘贴\")]),_c('div',{staticClass:\"word-count\"},[_vm._v(\"Word Count: \"+_vm._s(_vm.wordCount))]),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.writing),expression:\"writing\"}],attrs:{\"maxlength\":\"8000\",\"placeholder\":\"请输入写作内容\"},domProps:{\"value\":(_vm.writing)},on:{\"paste\":function($event){$event.preventDefault();return _vm.onPaste.apply(null, arguments)},\"input\":function($event){if($event.target.composing)return;_vm.writing=$event.target.value}}}),_c('div',{staticClass:\"editor-actions\"},[_c('button',{staticClass:\"clear-btn\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.clearWriting}},[_vm._v(\"一键清空\")]),_c('button',{staticClass:\"save-btn\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.saveWriting}},[_vm._v(\"保存\")])])])]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-interactive-multi-write\">\n    <div v-if=\"loading\" class=\"loading-mask\">对话生成中，请耐心等待...</div>\n\n    <div class=\"top-bar\">\n      <button type=\"button\" class=\"back-btn\" @click=\"goBack\">返回</button>\n      <h1>{{ pageTitle }}</h1>\n    </div>\n\n    <section class=\"content-card\">\n      <div class=\"topic-title\">{{ isNarrative ? '题目内容：' : '辩题内容：' }}</div>\n      <p class=\"topic-content\">{{ aiContent.content || '-' }}</p>\n      <div class=\"line\"></div>\n\n      <div class=\"filter-row\">\n        <button type=\"button\" :class=\"{ active: onlyAI }\" @click=\"toggleOnlyAI\">只看AI</button>\n        <button type=\"button\" :class=\"{ active: onlyMy }\" @click=\"toggleOnlyMy\">只看我</button>\n      </div>\n\n      <div ref=\"scrollContainer\" class=\"dialog-list\">\n        <template v-for=\"(item, index) in msgList\">\n          <div\n            v-if=\"!onlyMy\"\n            :key=\"`ai-${index}`\"\n            class=\"dialog-block ai-block\"\n            :class=\"`color-${index % 4}`\"\n          >\n            {{ item.answer }}\n          </div>\n          <div\n            v-if=\"!onlyAI && item.question\"\n            :key=\"`my-${index}`\"\n            class=\"dialog-block my-block\"\n            :class=\"`color-${index % 4}`\"\n          >\n            {{ item.question }}\n          </div>\n          <div v-if=\"index < msgList.length - 1\" :key=\"`line-${index}`\" class=\"split-line\"></div>\n        </template>\n      </div>\n    </section>\n\n    <div class=\"bottom-actions\">\n      <button type=\"button\" class=\"write-btn\" :disabled=\"loading || submitting || !canWrite\" @click=\"openEditor\">\n        {{ isNarrative ? '写续写' : '写驳论' }}\n      </button>\n      <button type=\"button\" class=\"submit-btn\" :disabled=\"loading || submitting || msgList.length === 0\" @click=\"submitPaper\">\n        {{ submitting ? '提交中...' : '提交' }}\n      </button>\n    </div>\n\n    <div v-if=\"editorVisible\" class=\"editor-mask\">\n      <div class=\"editor-panel\">\n        <div class=\"editor-head\">\n          <strong>{{ isNarrative ? 'My continuation' : 'My rebuttal' }}</strong>\n          <button type=\"button\" @click=\"closeEditor\">关闭</button>\n        </div>\n        <div class=\"paste-tip\">本页面不能粘贴</div>\n        <div class=\"word-count\">Word Count: {{ wordCount }}</div>\n        <textarea\n          v-model=\"writing\"\n          maxlength=\"8000\"\n          placeholder=\"请输入写作内容\"\n          @paste.prevent=\"onPaste\"\n        ></textarea>\n        <div class=\"editor-actions\">\n          <button type=\"button\" class=\"clear-btn\" @click=\"clearWriting\">一键清空</button>\n          <button type=\"button\" class=\"save-btn\" @click=\"saveWriting\">保存</button>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nimport { getSubject, historySave, writingAiFetch } from '@/api/user'\n\nexport default {\n  name: 'PcInteractiveMultiWrite',\n  data() {\n    return {\n      aiContent: {},\n      msgList: [],\n      onlyAI: false,\n      onlyMy: false,\n      loading: false,\n      submitting: false,\n      editorVisible: false,\n      writing: ''\n    }\n  },\n  computed: {\n    typeId() {\n      return Number(this.$route.meta && this.$route.meta.typeId) || 1\n    },\n    isNarrative() {\n      return this.typeId === 2\n    },\n    pageTitle() {\n      return this.isNarrative ? '多轮记叙' : '多轮议论'\n    },\n    storageKey() {\n      return `pcInteractiveMulti-${this.typeId}`\n    },\n    canWrite() {\n      const last = this.msgList[this.msgList.length - 1]\n      return !!last && !last.question\n    },\n    wordCount() {\n      return String(this.writing || '').trim().split(/\\s+/).filter(Boolean).length\n    }\n  },\n  watch: {\n    msgList: {\n      handler() {\n        this.saveCache()\n        this.scrollToBottom()\n      },\n      deep: true\n    }\n  },\n  methods: {\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    safeParse(value, fallback) {\n      try {\n        return value ? JSON.parse(value) : fallback\n      } catch (error) {\n        return fallback\n      }\n    },\n    showMessage(message) {\n      if (this.$message) {\n        this.$message({ message, center: true })\n      } else {\n        alert(message)\n      }\n    },\n    goBack() {\n      this.$router.back()\n    },\n    toggleOnlyAI() {\n      this.onlyAI = !this.onlyAI\n      this.onlyMy = false\n    },\n    toggleOnlyMy() {\n      this.onlyMy = !this.onlyMy\n      this.onlyAI = false\n    },\n    saveCache() {\n      localStorage.setItem('AIWrite', JSON.stringify(this.msgList))\n      localStorage.setItem('AiContent', JSON.stringify(this.aiContent))\n      localStorage.setItem(this.storageKey, JSON.stringify({\n        aiContent: this.aiContent,\n        msgList: this.msgList\n      }))\n    },\n    clearCache() {\n      localStorage.setItem('AiContent', [])\n      localStorage.setItem('userWritingToAi', [])\n      localStorage.setItem('AIWrite', [])\n      localStorage.removeItem(this.storageKey)\n    },\n    async loadSubject() {\n      const response = await getSubject({ type_id: this.typeId })\n      this.aiContent = response.data && response.data.content ? response.data.content : {}\n      await this.generateAi()\n    },\n    async generateAi() {\n      this.loading = true\n      try {\n        const response = await writingAiFetch({\n          type_id: this.typeId,\n          class_id: 2,\n          Level: 3,\n          userinput: this.aiContent.content\n        })\n        const content = response.data && response.data.content ? response.data.content : ''\n        this.msgList.push({\n          index: this.msgList.length,\n          answer: content,\n          question: ''\n        })\n      } finally {\n        this.loading = false\n      }\n    },\n    openEditor() {\n      const last = this.msgList[this.msgList.length - 1]\n      this.writing = last && last.question ? last.question : ''\n      this.editorVisible = true\n    },\n    closeEditor() {\n      this.editorVisible = false\n    },\n    onPaste() {\n      alert('禁止粘贴')\n    },\n    clearWriting() {\n      this.writing = ''\n    },\n    async saveWriting() {\n      const lastIndex = this.msgList.length - 1\n      if (lastIndex < 0) return\n      this.$set(this.msgList[lastIndex], 'question', this.writing || '')\n      localStorage.setItem('userWritingToAi', this.writing || '')\n      this.editorVisible = false\n      if (this.writing && this.msgList.length < 5) {\n        await this.generateAi()\n      }\n    },\n    async submitPaper() {\n      if (this.submitting || this.loading) return\n      const user = this.getUser()\n      if (!user.sid) return\n      this.submitting = true\n      try {\n        const response = await historySave({\n          subject_title: `(topic:${this.aiContent.topic || ''})${this.aiContent.content || ''}`,\n          sid: user.sid,\n          user_input: JSON.stringify(this.msgList),\n          type_id: this.typeId,\n          class_id: 2\n        })\n        if (response.code === 100) {\n          this.showMessage('提交成功')\n          this.clearCache()\n          this.$router.push({ name: 'PcWriteHistoryDetail', query: { his_id: response.data } })\n        }\n      } finally {\n        this.submitting = false\n      }\n    },\n    scrollToBottom() {\n      this.$nextTick(() => {\n        const container = this.$refs.scrollContainer\n        if (container) container.scrollTop = container.scrollHeight\n      })\n    },\n    async initData() {\n      const cached = this.safeParse(localStorage.getItem(this.storageKey), null)\n      const mobileList = this.safeParse(localStorage.getItem('AIWrite'), null)\n      const mobileContent = this.safeParse(localStorage.getItem('AiContent'), null)\n      if (cached && Array.isArray(cached.msgList) && cached.msgList.length) {\n        this.aiContent = cached.aiContent || {}\n        this.msgList = cached.msgList\n      } else if (Array.isArray(mobileList) && mobileList.length) {\n        this.aiContent = mobileContent || {}\n        this.msgList = mobileList\n      } else {\n        await this.loadSubject()\n        return\n      }\n      const last = this.msgList[this.msgList.length - 1]\n      if (last && last.question && this.msgList.length < 5) {\n        await this.generateAi()\n      }\n    }\n  },\n  mounted() {\n    this.initData()\n  }\n}\n</script>\n\n<style scoped>\n.pc-interactive-multi-write {\n  width: 1114px;\n  height: 583px;\n  position: relative;\n  color: #111;\n  background: #fff;\n  border-radius: 8px;\n  box-sizing: border-box;\n  overflow: hidden;\n}\n\n.top-bar {\n  height: 44px;\n  position: relative;\n  display: flex;\n  align-items: center;\n}\n\n.back-btn {\n  margin-left: 12px;\n  border: none;\n  background: transparent;\n  color: #1784ff;\n  font-size: 13px;\n  cursor: pointer;\n}\n\n.back-btn::before {\n  content: '<';\n  margin-right: 5px;\n}\n\n.top-bar h1 {\n  position: absolute;\n  left: 50%;\n  top: 0;\n  transform: translateX(-50%);\n  margin: 0;\n  font-size: 22px;\n  line-height: 44px;\n  color: #222;\n}\n\n.content-card {\n  height: 464px;\n  padding: 0 42px;\n  box-sizing: border-box;\n}\n\n.topic-title {\n  margin-top: 2px;\n  font-size: 13px;\n  line-height: 22px;\n  font-weight: 700;\n}\n\n.topic-content {\n  min-height: 42px;\n  margin: 18px 0 12px;\n  font-size: 14px;\n  line-height: 21px;\n  word-break: break-word;\n}\n\n.line,\n.split-line {\n  height: 1px;\n  background: #e2e2e2;\n}\n\n.filter-row {\n  display: flex;\n  justify-content: flex-end;\n  gap: 36px;\n  height: 54px;\n  align-items: center;\n}\n\n.filter-row button {\n  min-width: 58px;\n  height: 28px;\n  padding: 0 12px;\n  border: 1px solid #d5dce5;\n  border-radius: 9px;\n  background: #fff;\n  color: #333;\n  font-size: 12px;\n  cursor: pointer;\n}\n\n.filter-row button.active {\n  border-color: #7dcfff;\n  color: #0b7fc5;\n}\n\n.dialog-list {\n  height: 296px;\n  overflow-y: auto;\n  padding-right: 8px;\n  scrollbar-width: thin;\n  scrollbar-color: #d9d9d9 transparent;\n}\n\n.dialog-list::-webkit-scrollbar {\n  width: 4px;\n}\n\n.dialog-list::-webkit-scrollbar-thumb {\n  border-radius: 999px;\n  background: #d9d9d9;\n}\n\n.dialog-block {\n  margin: 18px 0;\n  font-size: 14px;\n  line-height: 19px;\n  word-break: break-word;\n  white-space: pre-wrap;\n}\n\n.ai-block {\n  padding-left: 10px;\n  border-left: 5px solid #ffb99e;\n}\n\n.my-block {\n  padding: 0 14px 0 0;\n  border-right: 5px solid #ffb99e;\n}\n\n.ai-block.color-1 {\n  border-left-color: #f1dc58;\n}\n\n.my-block.color-1 {\n  border-right-color: #f1dc58;\n}\n\n.ai-block.color-2 {\n  border-left-color: #90b8e6;\n}\n\n.my-block.color-2 {\n  border-right-color: #90b8e6;\n}\n\n.ai-block.color-3 {\n  border-left-color: #74e08f;\n}\n\n.my-block.color-3 {\n  border-right-color: #74e08f;\n}\n\n.bottom-actions {\n  position: absolute;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  height: 74px;\n  display: flex;\n  align-items: center;\n  gap: 24px;\n  padding-left: 16px;\n  border-top: 1px solid #e1e1e1;\n  background: #fff;\n  box-sizing: border-box;\n}\n\n.write-btn,\n.submit-btn {\n  width: 144px;\n  height: 45px;\n  border-radius: 23px;\n  font-size: 13px;\n  cursor: pointer;\n}\n\n.write-btn {\n  border: 1px solid #bfc6d0;\n  background: #fff;\n  color: #243044;\n}\n\n.submit-btn {\n  border: none;\n  background: #00529f;\n  color: #fff;\n}\n\n.write-btn:disabled,\n.submit-btn:disabled {\n  opacity: 0.55;\n  cursor: default;\n}\n\n.loading-mask,\n.editor-mask {\n  position: absolute;\n  inset: 0;\n  z-index: 20;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: rgba(255, 255, 255, 0.78);\n  color: #00529f;\n  font-size: 16px;\n}\n\n.editor-mask {\n  background: rgba(17, 28, 45, 0.35);\n}\n\n.editor-panel {\n  width: 820px;\n  height: 500px;\n  padding: 18px 22px;\n  border-radius: 8px;\n  background: #fff;\n  box-sizing: border-box;\n  color: #111;\n}\n\n.editor-head {\n  height: 32px;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n}\n\n.editor-head strong {\n  font-size: 17px;\n}\n\n.editor-head button,\n.clear-btn,\n.save-btn {\n  border: none;\n  cursor: pointer;\n}\n\n.editor-head button {\n  background: transparent;\n  color: #65758b;\n}\n\n.paste-tip {\n  color: #ff243d;\n  font-size: 13px;\n  line-height: 24px;\n}\n\n.word-count {\n  color: #333;\n  font-size: 13px;\n  line-height: 24px;\n}\n\ntextarea {\n  width: 100%;\n  height: 330px;\n  padding: 14px;\n  border: 1px solid #d8dde5;\n  resize: none;\n  outline: none;\n  box-sizing: border-box;\n  font-size: 15px;\n  line-height: 24px;\n}\n\n.editor-actions {\n  display: flex;\n  justify-content: flex-end;\n  gap: 16px;\n  margin-top: 16px;\n}\n\n.clear-btn,\n.save-btn {\n  width: 120px;\n  height: 38px;\n  border-radius: 19px;\n  font-size: 13px;\n}\n\n.clear-btn {\n  background: #f1f4f8;\n  color: #333;\n}\n\n.save-btn {\n  background: #00529f;\n  color: #fff;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcInteractiveMultiWrite.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcInteractiveMultiWrite.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcInteractiveMultiWrite.vue?vue&type=template&id=a4494e0c&scoped=true\"\nimport script from \"./PcInteractiveMultiWrite.vue?vue&type=script&lang=js\"\nexport * from \"./PcInteractiveMultiWrite.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcInteractiveMultiWrite.vue?vue&type=style&index=0&id=a4494e0c&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"a4494e0c\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-write-history\"},[_c('div',{staticClass:\"breadcrumb\"},[_vm._v(\"当前位置：首页-笔下生花-写作历史\")]),_c('section',{staticClass:\"history-panel\"},[_vm._m(0),_c('div',{staticClass:\"history-list\"},_vm._l((_vm.historyList),function(item){return _c('div',{key:item.id,staticClass:\"history-card\",on:{\"click\":function($event){return _vm.toDetail(item)}}},[_c('div',{staticClass:\"history-main\"},[_c('strong',[_c('span',[_vm._v(_vm._s(_vm.typeText(item)))]),_vm._v(_vm._s(_vm.cleanTitle(item.subject_title)))]),_c('em',[_vm._v(_vm._s(item.create_time))])]),_c('button',{attrs:{\"type\":\"button\"}},[_vm._v(\"查看详情\")])])}),0),(_vm.hasMore)?_c('div',{staticClass:\"load-more\",on:{\"click\":_vm.loadMore}},[_vm._v(\"点击加载更多~~\")]):_c('div',{staticClass:\"load-more\"},[_vm._v(\"没有了哦~\")])])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"panel-title\"},[_c('span',{staticClass:\"title-icon\"}),_c('strong',[_vm._v(\"AI写作历史\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-write-history\">\n    <div class=\"breadcrumb\">当前位置：首页-笔下生花-写作历史</div>\n\n    <section class=\"history-panel\">\n      <div class=\"panel-title\">\n        <span class=\"title-icon\"></span>\n        <strong>AI写作历史</strong>\n      </div>\n\n      <div class=\"history-list\">\n        <div\n          v-for=\"item in historyList\"\n          :key=\"item.id\"\n          class=\"history-card\"\n          @click=\"toDetail(item)\"\n        >\n          <div class=\"history-main\">\n            <strong><span>{{ typeText(item) }}</span>{{ cleanTitle(item.subject_title) }}</strong>\n            <em>{{ item.create_time }}</em>\n          </div>\n          <button type=\"button\">查看详情</button>\n        </div>\n      </div>\n\n      <div v-if=\"hasMore\" class=\"load-more\" @click=\"loadMore\">点击加载更多~~</div>\n      <div v-else class=\"load-more\">没有了哦~</div>\n    </section>\n  </div>\n</template>\n\n<script>\nimport { getHistoryList } from '@/api/user'\n\nexport default {\n  name: 'PcWriteHistory',\n  data() {\n    return {\n      historyList: [],\n      page: 1,\n      hasMore: true,\n      loading: false\n    }\n  },\n  methods: {\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    cleanTitle(title) {\n      return String(title || '').replace(/^\\(topic:[^)]+\\)/, '')\n    },\n    typeText(item) {\n      if (item.type_id == 1 && item.class_id == 1) return '[单轮议论]'\n      if (item.type_id == 1 && item.class_id == 2) return '[多轮议论]'\n      if (item.type_id == 2 && item.class_id == 1) return '[单轮记叙]'\n      if (item.type_id == 2 && item.class_id == 2) return '[多轮记叙]'\n      return '[AI写作]'\n    },\n    async loadList() {\n      const user = this.getUser()\n      if (!user.sid || !this.hasMore || this.loading) return\n      this.loading = true\n      try {\n        const response = await getHistoryList({ sid: user.sid, size: 10, page: this.page })\n        if (response.code !== 100) {\n          this.hasMore = false\n          return\n        }\n        const records = response.data && response.data.records ? response.data.records : []\n        this.historyList = this.historyList.concat(records)\n        if (records.length < 10) this.hasMore = false\n      } finally {\n        this.loading = false\n      }\n    },\n    loadMore() {\n      this.page += 1\n      this.loadList()\n    },\n    toDetail(item) {\n      this.$router.push({ name: 'PcWriteHistoryDetail', query: { his_id: item.id } })\n    }\n  },\n  mounted() {\n    this.loadList()\n  }\n}\n</script>\n\n<style scoped>\n.pc-write-history {\n  width: 1114px;\n  height: 583px;\n  color: #111c2d;\n}\n\n.breadcrumb {\n  height: 28px;\n  color: #6d7e93;\n  font-size: 12px;\n  line-height: 18px;\n}\n\n.history-panel {\n  height: 555px;\n  padding: 18px 24px;\n  border-radius: 8px;\n  background: #fff;\n  box-sizing: border-box;\n  overflow: hidden;\n}\n\n.panel-title {\n  display: flex;\n  align-items: center;\n  height: 28px;\n}\n\n.title-icon {\n  width: 13px;\n  height: 13px;\n  margin-right: 8px;\n  background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat;\n}\n\n.panel-title strong {\n  font-size: 17px;\n  color: #14253b;\n}\n\n.history-list {\n  height: 455px;\n  margin-top: 14px;\n  overflow-y: auto;\n  scrollbar-width: none;\n  -ms-overflow-style: none;\n}\n\n.history-list::-webkit-scrollbar {\n  display: none;\n}\n\n.history-card {\n  height: 64px;\n  margin-bottom: 10px;\n  padding: 0 18px;\n  border-radius: 8px;\n  background: #f7fbff;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  cursor: pointer;\n}\n\n.history-main {\n  min-width: 0;\n}\n\n.history-main strong {\n  display: block;\n  max-width: 840px;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  color: #14253b;\n  font-size: 13px;\n}\n\n.history-main span {\n  color: #0b5fa5;\n  margin-right: 6px;\n}\n\n.history-main em {\n  display: block;\n  margin-top: 6px;\n  color: #8a98aa;\n  font-style: normal;\n  font-size: 12px;\n}\n\n.history-card button,\n.load-more {\n  color: #00529f;\n  font-size: 12px;\n}\n\n.history-card button {\n  border: none;\n  background: transparent;\n  cursor: pointer;\n}\n\n.load-more {\n  height: 28px;\n  line-height: 28px;\n  text-align: center;\n  cursor: pointer;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWriteHistory.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWriteHistory.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcWriteHistory.vue?vue&type=template&id=5b4cf079&scoped=true\"\nimport script from \"./PcWriteHistory.vue?vue&type=script&lang=js\"\nexport * from \"./PcWriteHistory.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcWriteHistory.vue?vue&type=style&index=0&id=5b4cf079&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"5b4cf079\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-write-history-detail\"},[_c('div',{staticClass:\"breadcrumb\"},[_vm._v(\"当前位置：首页-笔下生花-写作历史\")]),_c('section',{staticClass:\"detail-panel\"},[_vm._m(0),_c('div',{staticClass:\"subject\"},[_vm._v(_vm._s(_vm.subjectTitle))]),_c('div',{staticClass:\"filter-row\"},[_c('button',{class:{ active: _vm.onlyAI },attrs:{\"type\":\"button\"},on:{\"click\":_vm.toggleOnlyAI}},[_vm._v(\"只看AI\")]),_c('button',{class:{ active: _vm.onlyMy },attrs:{\"type\":\"button\"},on:{\"click\":_vm.toggleOnlyMy}},[_vm._v(\"只看我\")])]),_c('div',{staticClass:\"content-list\"},[_vm._l((_vm.contentList),function(item,index){return [(!_vm.onlyMy)?_c('div',{key:`ai-${index}`,staticClass:\"write-block ai-block\",class:`color-${index % 4}`},[_c('strong',[_vm._v(\"AI writing:\")]),_c('span',[_vm._v(_vm._s(item.answer))])]):_vm._e(),(!_vm.onlyAI)?_c('div',{key:`my-${index}`,staticClass:\"write-block my-block\",class:`color-${index % 4}`},[_c('strong',[_vm._v(\"My Continuation:\")]),_c('span',[_vm._v(_vm._s(item.question))])]):_vm._e(),(index < _vm.contentList.length - 1)?_c('div',{key:`line-${index}`,staticClass:\"split-line\"}):_vm._e()]})],2)])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"panel-title\"},[_c('span',{staticClass:\"title-icon\"}),_c('strong',[_vm._v(\"辩题内容\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-write-history-detail\">\n    <div class=\"breadcrumb\">当前位置：首页-笔下生花-写作历史</div>\n\n    <section class=\"detail-panel\">\n      <div class=\"panel-title\">\n        <span class=\"title-icon\"></span>\n        <strong>辩题内容</strong>\n      </div>\n\n      <div class=\"subject\">{{ subjectTitle }}</div>\n\n      <div class=\"filter-row\">\n        <button type=\"button\" :class=\"{ active: onlyAI }\" @click=\"toggleOnlyAI\">只看AI</button>\n        <button type=\"button\" :class=\"{ active: onlyMy }\" @click=\"toggleOnlyMy\">只看我</button>\n      </div>\n\n      <div class=\"content-list\">\n        <template v-for=\"(item, index) in contentList\">\n          <div\n            v-if=\"!onlyMy\"\n            :key=\"`ai-${index}`\"\n            class=\"write-block ai-block\"\n            :class=\"`color-${index % 4}`\"\n          >\n            <strong>AI writing:</strong>\n            <span>{{ item.answer }}</span>\n          </div>\n          <div\n            v-if=\"!onlyAI\"\n            :key=\"`my-${index}`\"\n            class=\"write-block my-block\"\n            :class=\"`color-${index % 4}`\"\n          >\n            <strong>My Continuation:</strong>\n            <span>{{ item.question }}</span>\n          </div>\n          <div v-if=\"index < contentList.length - 1\" :key=\"`line-${index}`\" class=\"split-line\"></div>\n        </template>\n      </div>\n    </section>\n  </div>\n</template>\n\n<script>\nimport { getHistoryDetail } from '@/api/user'\n\nexport default {\n  name: 'PcWriteHistoryDetail',\n  data() {\n    return {\n      hisId: '',\n      onlyAI: false,\n      onlyMy: false,\n      msgDetail: {}\n    }\n  },\n  computed: {\n    subjectTitle() {\n      return String(this.msgDetail.subject_title || '').replace(/^\\(topic:[^)]+\\)/, '')\n    },\n    contentList() {\n      const value = this.msgDetail.user_input\n      const list = Array.isArray(value) ? value : value && typeof value === 'object' ? [value] : []\n      return list.map(item => ({\n        answer: item && item.answer ? item.answer : '',\n        question: item && item.question ? item.question : ''\n      }))\n    }\n  },\n  methods: {\n    toggleOnlyAI() {\n      this.onlyAI = !this.onlyAI\n      this.onlyMy = false\n    },\n    toggleOnlyMy() {\n      this.onlyMy = !this.onlyMy\n      this.onlyAI = false\n    },\n    async loadDetail() {\n      if (!this.hisId) return\n      const response = await getHistoryDetail({ id: this.hisId })\n      const data = response.data || {}\n      if (data.user_input) {\n        try {\n          data.user_input = JSON.parse(data.user_input)\n        } catch (error) {\n          data.user_input = []\n        }\n      }\n      this.msgDetail = data\n    }\n  },\n  mounted() {\n    this.hisId = this.$route.query.his_id || ''\n    this.loadDetail()\n  }\n}\n</script>\n\n<style scoped>\n.pc-write-history-detail {\n  width: 1114px;\n  height: 583px;\n  color: #111c2d;\n}\n\n.breadcrumb {\n  height: 28px;\n  color: #6d7e93;\n  font-size: 12px;\n  line-height: 18px;\n}\n\n.detail-panel {\n  height: 555px;\n  padding: 18px 24px;\n  border-radius: 8px;\n  background: #fff;\n  box-sizing: border-box;\n  overflow: hidden;\n}\n\n.panel-title {\n  display: flex;\n  align-items: center;\n  height: 28px;\n}\n\n.title-icon {\n  width: 13px;\n  height: 13px;\n  margin-right: 8px;\n  background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat;\n}\n\n.panel-title strong {\n  font-size: 17px;\n  color: #14253b;\n}\n\n.subject {\n  margin: 10px 12px 0;\n  color: #111;\n  font-size: 15px;\n  line-height: 27px;\n  word-break: break-word;\n}\n\n.filter-row {\n  display: flex;\n  gap: 10px;\n  margin: 22px 0 0 8px;\n}\n\n.filter-row button {\n  min-width: 62px;\n  height: 26px;\n  padding: 0 12px;\n  border: 1px solid #d5dce5;\n  border-radius: 6px;\n  background: #fff;\n  color: #666;\n  font-size: 12px;\n  cursor: pointer;\n}\n\n.filter-row button.active {\n  border-color: #7dcfff;\n  color: #0b7fc5;\n}\n\n.content-list {\n  height: 358px;\n  margin-top: 22px;\n  overflow-y: auto;\n  padding: 0 34px 0 8px;\n  scrollbar-width: thin;\n  scrollbar-color: #d9d9d9 transparent;\n}\n\n.content-list::-webkit-scrollbar {\n  width: 4px;\n}\n\n.content-list::-webkit-scrollbar-thumb {\n  border-radius: 999px;\n  background: #d9d9d9;\n}\n\n.write-block {\n  position: relative;\n  margin: 0 0 14px;\n  color: #111;\n  font-size: 15px;\n  line-height: 27px;\n  word-break: break-word;\n}\n\n.write-block strong {\n  margin-right: 8px;\n  font-weight: 700;\n}\n\n.write-block span {\n  white-space: pre-wrap;\n}\n\n.ai-block {\n  padding-left: 9px;\n  border-left: 5px solid #ffb99e;\n}\n\n.my-block {\n  padding: 0 14px 0 0;\n  border-right: 5px solid #ffb99e;\n}\n\n.ai-block.color-1 {\n  border-left-color: #f1dc58;\n}\n\n.my-block.color-1 {\n  border-right-color: #f1dc58;\n}\n\n.ai-block.color-2 {\n  border-left-color: #90b8e6;\n}\n\n.my-block.color-2 {\n  border-right-color: #90b8e6;\n}\n\n.ai-block.color-3 {\n  border-left-color: #74e08f;\n}\n\n.my-block.color-3 {\n  border-right-color: #74e08f;\n}\n\n.split-line {\n  height: 1px;\n  margin: 8px 0 22px;\n  background: #e4e4e4;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWriteHistoryDetail.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWriteHistoryDetail.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcWriteHistoryDetail.vue?vue&type=template&id=f1e1ad1a&scoped=true\"\nimport script from \"./PcWriteHistoryDetail.vue?vue&type=script&lang=js\"\nexport * from \"./PcWriteHistoryDetail.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcWriteHistoryDetail.vue?vue&type=style&index=0&id=f1e1ad1a&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"f1e1ad1a\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-etalk\"},[_c('div',{staticClass:\"breadcrumb\"},[_c('router-link',{attrs:{\"to\":{ name: 'PcHome' }}},[_vm._v(\"当前位置：首页\")]),_c('span',[_vm._v(\"-E-talk\")])],1),_c('section',{staticClass:\"entry-grid\",attrs:{\"aria-label\":\"E-talk 口语练习\"}},_vm._l((_vm.entries),function(item){return _c('button',{key:item.type,staticClass:\"entry-card\",style:({ backgroundImage: `url(${item.image})` }),attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.openEntry(item)}}},[_c('span',[_vm._v(_vm._s(item.title))])])}),0),_c('router-link',{staticClass:\"history-link\",attrs:{\"to\":{ name: 'PcEtalkHistory' }}},[_vm._v(\"记录回放\")]),_c('PcAiAssistant',{attrs:{\"scene\":\"home\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-etalk\">\n    <div class=\"breadcrumb\"><router-link :to=\"{ name: 'PcHome' }\">当前位置：首页</router-link><span>-E-talk</span></div>\n    <section class=\"entry-grid\" aria-label=\"E-talk 口语练习\">\n      <button v-for=\"item in entries\" :key=\"item.type\" type=\"button\" class=\"entry-card\"\n        :style=\"{ backgroundImage: `url(${item.image})` }\" @click=\"openEntry(item)\">\n        <span>{{ item.title }}</span>\n      </button>\n    </section>\n    <router-link class=\"history-link\" :to=\"{ name: 'PcEtalkHistory' }\">记录回放</router-link>\n    <PcAiAssistant scene=\"home\" />\n  </div>\n</template>\n\n<script>\nimport PcAiAssistant from '@/components/PcAiAssistant.vue'\n\nconst imageBase = 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/'\n\nexport default {\n  name: 'PcSpeak',\n  components: { PcAiAssistant },\n  data() {\n    return {\n      entries: [\n        { title: '自由对话', type: 'speak_free', image: `${imageBase}auto-talk-bg.png?v1` },\n        { title: '主题对话', type: 'speak_subject', image: `${imageBase}project-talk-bg.png?v1` },\n        // { title: '脚本练习', type: 'script_talk', image: `${imageBase}script_talk.png?v1` },\n        { title: '口语反馈', type: 'feedback', image: `${imageBase}feedback.png?v1` }\n      ]\n    }\n  },\n  methods: {\n    openEntry(item) {\n      if (item.type === 'feedback') {\n        this.$router.push({ name: 'PcFeedback' })\n        return\n      }\n      if (item.type === 'script_talk') {\n        this.$router.push({ name: 'PcScriptPractice' })\n        return\n      }\n      if (item.type === 'speak_subject') {\n        this.$router.push({ name: 'PcEtalkProject' })\n        return\n      }\n      this.$router.push({\n        name: 'PcChatIndex',\n        query: {\n          project_id: 0, is_history: 0, lang_time: 0, filePath: '', type: 0,\n          stype: item.type, from: 'speak_free', chat_title: item.title,\n          system: '假如你是一名语文老师', content: ''\n        }\n      })\n    }\n  }\n}\n</script>\n\n<style scoped>\n.pc-etalk {\n  position: relative; box-sizing: border-box; width: 1158px; height: 615px;\n  margin: -20px -22px -32px; padding: 20px 22px 12px; color: #111c2d;\n  background: #d3e4ff url('https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/etalk-bg.png') center / cover no-repeat;\n}\n.breadcrumb, .entry-grid, .history-link { position: relative; }\n.breadcrumb { height: 18px; padding-left: 6px; font-size: 11px; line-height: 18px; color: #7d8692; }\n.breadcrumb a { color: inherit; text-decoration: none; }\n.entry-grid { display: grid; grid-template-columns: repeat(2, 368px); gap: 16px; width: 752px; margin: 18px auto 0; }\n.entry-card {\n  display: flex; align-items: center; height: 104px; padding: 0 38px; border: none; border-radius: 12px;\n  background-color: #e0ebff; background-size: 100% 100%; background-repeat: no-repeat;\n  box-shadow: 0 3px 6px rgba(103, 157, 226, 0.12); color: #111c2d; font-family: inherit;\n  font-size: 20px; font-weight: 700; text-align: left; cursor: pointer; transition: transform 0.2s, box-shadow 0.2s;\n}\n.entry-card:hover { transform: translateY(-3px); box-shadow: 0 8px 18px rgba(71, 122, 198, 0.18); }\n.entry-card:focus-visible, .history-link:focus-visible { outline: 2px solid #356cc4; outline-offset: 4px; }\n.history-link { display: block; width: fit-content; margin: 24px auto 0; padding: 4px 12px; color: #737f90; font-size: 14px; line-height: 22px; text-decoration: none; }\n.history-link:hover { color: #00529f; text-decoration: underline; }\n.pc-etalk ::v-deep .robot-btn { top: 24px; right: 36px; bottom: auto; }\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcSpeak.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcSpeak.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcSpeak.vue?vue&type=template&id=7afadfce&scoped=true\"\nimport script from \"./PcSpeak.vue?vue&type=script&lang=js\"\nexport * from \"./PcSpeak.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcSpeak.vue?vue&type=style&index=0&id=7afadfce&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"7afadfce\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-etalk-history\"},[_c('div',{staticClass:\"breadcrumb\"},[_c('router-link',{attrs:{\"to\":{ name: 'PcHome' }}},[_vm._v(\"当前位置：首页\")]),_c('router-link',{attrs:{\"to\":{ name: 'PcEtalkIndex' }}},[_vm._v(\"-E-talk\")]),_c('span',[_vm._v(\"-记录回放\")])],1),_c('section',{staticClass:\"history-panel\"},[_c('div',{staticClass:\"panel-head\"},[_c('h1',[_vm._v(\"记录回放\")]),_c('router-link',{staticClass:\"back-link\",attrs:{\"to\":{ name: 'PcEtalkIndex' }}},[_vm._v(\"返回 E-talk\")])],1),(_vm.loading)?_c('div',{staticClass:\"empty-state\",attrs:{\"role\":\"status\"}},[_vm._v(\"记录加载中...\")]):(_vm.error)?_c('div',{staticClass:\"empty-state\",attrs:{\"role\":\"alert\"}},[_c('p',[_vm._v(_vm._s(_vm.error))]),_c('button',{attrs:{\"type\":\"button\"},on:{\"click\":_vm.loadHistory}},[_vm._v(\"重新加载\")])]):(!_vm.todayList.length && !_vm.olderList.length)?_c('div',{staticClass:\"empty-state\"},[_vm._v(\"暂无对话记录，开始一次口语练习吧\")]):_c('div',{staticClass:\"history-list\"},_vm._l((_vm.groups),function(group){return _c('section',{key:group.title},[(group.items.length)?_c('h2',[_vm._v(_vm._s(group.title)),_c('span',[_vm._v(\"（E-Talk 部分已学 \"+_vm._s(group.minutes)+\" min）\")])]):_vm._e(),_vm._l((group.items),function(item,index){return _c('button',{key:`${item.id || index}-${item.from}`,staticClass:\"history-row\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.openHistory(item)}}},[(item.icon_img)?_c('img',{attrs:{\"src\":item.icon_img,\"alt\":\"\"}}):_vm._e(),_c('span',{staticClass:\"record-content\"},[_c('strong',[_vm._v(_vm._s(item.name || '口语对话'))]),_c('span',[_vm._v(_vm._s(item.question || '查看对话记录'))])]),_c('time',[_vm._v(_vm._s(item.create_time || ''))]),_c('span',{staticClass:\"record-arrow\",attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"›\")])])})],2)}),0)])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-etalk-history\">\n    <div class=\"breadcrumb\">\n      <router-link :to=\"{ name: 'PcHome' }\">当前位置：首页</router-link>\n      <router-link :to=\"{ name: 'PcEtalkIndex' }\">-E-talk</router-link><span>-记录回放</span>\n    </div>\n    <section class=\"history-panel\">\n      <div class=\"panel-head\"><h1>记录回放</h1><router-link class=\"back-link\" :to=\"{ name: 'PcEtalkIndex' }\">返回 E-talk</router-link></div>\n      <div v-if=\"loading\" class=\"empty-state\" role=\"status\">记录加载中...</div>\n      <div v-else-if=\"error\" class=\"empty-state\" role=\"alert\"><p>{{ error }}</p><button type=\"button\" @click=\"loadHistory\">重新加载</button></div>\n      <div v-else-if=\"!todayList.length && !olderList.length\" class=\"empty-state\">暂无对话记录，开始一次口语练习吧</div>\n      <div v-else class=\"history-list\">\n        <section v-for=\"group in groups\" :key=\"group.title\">\n          <h2 v-if=\"group.items.length\">{{ group.title }}<span>（E-Talk 部分已学 {{ group.minutes }} min）</span></h2>\n          <button v-for=\"(item, index) in group.items\" :key=\"`${item.id || index}-${item.from}`\" type=\"button\" class=\"history-row\" @click=\"openHistory(item)\">\n            <img v-if=\"item.icon_img\" :src=\"item.icon_img\" alt=\"\" />\n            <span class=\"record-content\"><strong>{{ item.name || '口语对话' }}</strong><span>{{ item.question || '查看对话记录' }}</span></span>\n            <time>{{ item.create_time || '' }}</time><span class=\"record-arrow\" aria-hidden=\"true\">›</span>\n          </button>\n        </section>\n      </div>\n    </section>\n  </div>\n</template>\n\n<script>\nimport { getNewInfoList, getOldInfoList } from '@/api/user'\nimport { getUserStudy } from '@/api/home'\nimport { getStoredUser } from '@/utils/auth'\n\nexport default {\n  name: 'PcEtalkHistory',\n  data() {\n    return { loading: false, error: '', todayList: [], olderList: [], todayMinutes: 0, totalMinutes: 0 }\n  },\n  computed: {\n    groups() {\n      return [\n        { title: '今天', items: this.todayList, minutes: this.todayMinutes },\n        { title: '更早记录', items: this.olderList, minutes: this.totalMinutes }\n      ]\n    }\n  },\n  methods: {\n    async loadHistory() {\n      const user = getStoredUser()\n      if (!user.sid) { this.error = '登录信息已失效，请重新登录'; return }\n      this.loading = true\n      this.error = ''\n      try {\n        const responses = await Promise.all([\n          getNewInfoList({ sid: user.sid }), getOldInfoList({ sid: user.sid }), getUserStudy(user.sid)\n        ])\n        responses.forEach(response => {\n          if (!response || (response.code !== undefined && Number(response.code) !== 100)) {\n            throw new Error((response && (response.msg || response.message)) || '记录加载失败，请稍后重试')\n          }\n        })\n        this.todayList = Array.isArray(responses[0].data) ? responses[0].data : []\n        this.olderList = Array.isArray(responses[1].data) ? responses[1].data : []\n        const study = responses[2].data || {}\n        this.todayMinutes = study.etalk_minutes || 0\n        this.totalMinutes = study.etalk_total_minutes || 0\n      } catch (error) {\n        this.error = error.message || '记录加载失败，请稍后重试'\n      } finally { this.loading = false }\n    },\n    openHistory(item) {\n      this.$router.push({\n        name: 'PcChatIndex',\n        query: {\n          project_id: 0, is_history: 1, lang_time: 0, filePath: '', type: 0,\n          stype: item.from || 'speak_free', from: item.from || 'speak_free',\n          chat_title: item.name || '口语对话', system: '假如你是一名语文老师', content: ''\n        }\n      })\n    }\n  },\n  mounted() { this.loadHistory() }\n}\n</script>\n\n<style scoped>\n.pc-etalk-history { width: 1114px; height: 583px; color: #14253b; }\n.breadcrumb { height: 26px; font-size: 11px; line-height: 18px; color: #7d8692; }\n.breadcrumb a { color: inherit; text-decoration: none; }\n.breadcrumb a:hover { color: #00529f; }\n.history-panel { box-sizing: border-box; height: 557px; padding: 20px 26px; border-radius: 10px; background: #fff; }\n.panel-head { display: flex; align-items: center; justify-content: space-between; }\n.panel-head h1 { margin: 0; padding-left: 10px; border-left: 4px solid #00529f; font-size: 18px; }\n.back-link, .empty-state button { border: none; border-radius: 6px; padding: 8px 16px; background: #e9f2ff; color: #00529f; font-size: 13px; text-decoration: none; cursor: pointer; }\n.history-list { height: 459px; overflow-y: auto; margin-top: 20px; padding-right: 8px; }\n.history-list h2 { margin: 6px 0 12px; font-size: 16px; }\n.history-list h2 span { margin-left: 8px; color: #77869a; font-size: 12px; font-weight: 400; }\n.history-list section + section { margin-top: 24px; }\n.history-row { display: flex; align-items: center; gap: 16px; box-sizing: border-box; width: 100%; min-height: 78px; margin-bottom: 12px; padding: 14px 20px; border: 1px solid #e8eff9; border-radius: 8px; background: #f7fbff; font-family: inherit; text-align: left; cursor: pointer; }\n.history-row:hover { background: #edf5ff; }\n.history-row img { width: 36px; height: 36px; object-fit: contain; }\n.record-content { display: flex; flex: 1; min-width: 0; flex-direction: column; gap: 8px; }\n.record-content strong { color: #14253b; font-size: 14px; }\n.record-content > span { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; color: #77869a; font-size: 12px; }\n.history-row time { flex-shrink: 0; color: #77869a; font-size: 12px; }\n.record-arrow { color: #8fa4bf; font-size: 24px; }\n.empty-state { height: 440px; display: flex; flex-direction: column; align-items: center; justify-content: center; color: #77869a; font-size: 14px; }\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcEtalkHistory.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcEtalkHistory.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcEtalkHistory.vue?vue&type=template&id=623bd2df&scoped=true\"\nimport script from \"./PcEtalkHistory.vue?vue&type=script&lang=js\"\nexport * from \"./PcEtalkHistory.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcEtalkHistory.vue?vue&type=style&index=0&id=623bd2df&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"623bd2df\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-task-page\"},[_c('div',{staticClass:\"breadcrumb\"},[_vm._v(\"当前位置：首页>今日任务\")]),_c('div',{staticClass:\"task-layout\"},[_c('section',{staticClass:\"task-panel\"},[_c('PanelTitle',{attrs:{\"title\":\"今日任务\"}}),(_vm.taskList.length > 0)?_c('div',{staticClass:\"task-list\"},_vm._l((_vm.taskList),function(item){return _c('div',{key:item.id || item.resource_id,staticClass:\"task-row\",on:{\"click\":function($event){return _vm.toPraxis(item)}}},[_c('img',{attrs:{\"src\":_vm.normalizeImg(item.cover)}}),_c('div',{staticClass:\"task-info\"},[_c('div',{staticClass:\"task-title\"},[_vm._v(_vm._s(item.name))]),_c('div',{staticClass:\"tag-row\"},[_c('span',[_vm._v(_vm._s(_vm.categoryName(item.category_id)))]),_c('span',[_vm._v(\"生命与健康\")]),_c('span',[_vm._v(_vm._s(_vm.levelName(item)))])])]),(item.progress !== undefined)?_c('div',{staticClass:\"task-progress\"},[_c('div',{style:({ width: item.progress + '%' })})]):_vm._e()])}),0):_c('div',{staticClass:\"empty-state\"},[_vm._v(\"暂无今日任务\")])],1),_c('section',{staticClass:\"calendar-panel\"},[_c('PanelTitle',{attrs:{\"title\":\"签到日历\"}}),_c('div',{staticClass:\"calendar-top\"},[_c('button',{attrs:{\"type\":\"button\"},on:{\"click\":_vm.prevMonth}},[_vm._v(\"‹\")]),_c('span',[_vm._v(_vm._s(_vm.calendarTitle))]),_c('button',{attrs:{\"type\":\"button\"},on:{\"click\":_vm.nextMonth}},[_vm._v(\"›\")])]),_c('div',{staticClass:\"week-row\"},_vm._l((_vm.weekList),function(item){return _c('span',{key:item},[_vm._v(_vm._s(item))])}),0),_c('div',{staticClass:\"date-grid\"},_vm._l((_vm.calendarDays),function(item){return _c('span',{key:item.key,class:{ muted: item.muted, signed: item.signed, today: item.today }},[_vm._v(\" \"+_vm._s(item.today ? '今天' : item.day)),_c('br'),(item.signed)?_c('span',{staticStyle:{\"color\":\"#24a268\"}},[_vm._v(\"√\")]):_vm._e()])}),0),_c('div',{staticClass:\"calendar-note\"},[_vm._v(\"本月已连续打卡\"+_vm._s(_vm.maxContinuousDays)+\"天，累计打卡\"+_vm._s(_vm.countSign)+\"天\")])],1)])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-task-page\">\n    <div class=\"breadcrumb\">当前位置：首页&gt;今日任务</div>\n    <div class=\"task-layout\">\n      <section class=\"task-panel\">\n        <PanelTitle title=\"今日任务\" />\n        <div class=\"task-list\" v-if=\"taskList.length > 0\">\n          <div v-for=\"item in taskList\" :key=\"item.id || item.resource_id\" class=\"task-row\" @click=\"toPraxis(item)\">\n            <img :src=\"normalizeImg(item.cover)\" />\n            <div class=\"task-info\">\n              <div class=\"task-title\">{{ item.name }}</div>\n              <div class=\"tag-row\">\n                <span>{{ categoryName(item.category_id) }}</span>\n                <span>生命与健康</span>\n                <span>{{ levelName(item) }}</span>\n              </div>\n            </div>\n            <div class=\"task-progress\" v-if=\"item.progress !== undefined\">\n              <div :style=\"{ width: item.progress + '%' }\"></div>\n            </div>\n          </div>\n        </div>\n        <div v-else class=\"empty-state\">暂无今日任务</div>\n      </section>\n\n      <section class=\"calendar-panel\">\n        <PanelTitle title=\"签到日历\" />\n        <div class=\"calendar-top\">\n          <button type=\"button\" @click=\"prevMonth\">‹</button>\n          <span>{{ calendarTitle }}</span>\n          <button type=\"button\" @click=\"nextMonth\">›</button>\n        </div>\n        <div class=\"week-row\">\n          <span v-for=\"item in weekList\" :key=\"item\">{{ item }}</span>\n        </div>\n        <div class=\"date-grid\">\n          <span\n            v-for=\"item in calendarDays\"\n            :key=\"item.key\"\n            :class=\"{ muted: item.muted, signed: item.signed, today: item.today }\"\n          >\n            {{ item.today ? '今天' : item.day }}<br>\n            <span v-if=\"item.signed\" style=\"color: #24a268;\">√</span>\n          </span>\n        </div>\n        <div class=\"calendar-note\">本月已连续打卡{{ maxContinuousDays }}天，累计打卡{{ countSign }}天</div>\n      </section>\n    </div>\n  </div>\n</template>\n\n<script>\nimport Vue from 'vue'\nimport { getTaskList, getDateList, saveUserStudyResource } from '@/api/user'\n\nconst PanelTitle = Vue.component('TodayTaskPanelTitle', {\n  functional: true,\n  props: { title: String },\n  render(h, ctx) {\n    return h('div', { class: 'title-wrap' }, [\n      h('span', { class: 'title-icon' }),\n      h('strong', ctx.props.title)\n    ])\n  }\n})\n\nexport default {\n  name: 'PcTodayTask',\n  components: { PanelTitle },\n  data() {\n    const now = new Date()\n    return {\n      taskList: [],\n      signedDays: [],\n      countSign: 0,\n      maxContinuousDays: 0,\n      year: now.getFullYear(),\n      month: now.getMonth() + 1,\n      weekList: ['日', '一', '二', '三', '四', '五', '六']\n    }\n  },\n  computed: {\n    calendarTitle() {\n      return `${this.year}年${this.month}月`\n    },\n    calendarDays() {\n      const monthIndex = this.month - 1\n      const firstDay = new Date(this.year, monthIndex, 1).getDay()\n      const daysInMonth = new Date(this.year, monthIndex + 1, 0).getDate()\n      const prevMonthDays = new Date(this.year, monthIndex, 0).getDate()\n      const today = new Date()\n      const list = []\n\n      for (let i = firstDay - 1; i >= 0; i--) {\n        list.push({ key: `p-${i}`, day: prevMonthDays - i, muted: true })\n      }\n\n      for (let day = 1; day <= daysInMonth; day++) {\n        const date = this.formatDate(this.year, this.month, day)\n        list.push({\n          key: `c-${day}`,\n          day,\n          signed: this.signedDays.includes(date),\n          today: today.getFullYear() === this.year && today.getMonth() + 1 === this.month && today.getDate() === day\n        })\n      }\n\n      while (list.length < 42) {\n        list.push({ key: `n-${list.length}`, day: list.length - firstDay - daysInMonth + 1, muted: true })\n      }\n      return list.slice(0, 42)\n    }\n  },\n  methods: {\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    normalizeImg(url) {\n      return url ? url.replace('a-news.oss-cn-hangzhou.aliyuncs.com', 'a-news.oss-accelerate.aliyuncs.com') : ''\n    },\n    categoryName(id) {\n      if (id == 1) return '听力'\n      if (id == 2 || id == 3) return '阅读'\n      if (id == 4) return '写作'\n      return '学习'\n    },\n    levelName(item) {\n      const value = item.level || item.grade || item.level_name || item.level_id\n      if (!value) return ''\n      return String(value).includes('?') ? String(value) : `${value}?`\n    },\n    isDone(item) {\n      return item.status == 1 || item.status == 2 || item.finish_status == 1 || item.is_finish == 1\n    },\n    formatDate(year, month, day) {\n      return `${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')}`\n    },\n    normalizeSignDate(value) {\n      const text = String(value || '')\n      const matched = text.match(/\\d{4}-\\d{2}-\\d{2}/)\n      if (matched) return matched[0]\n      const day = Number(text.replace(/\\D/g, '').slice(-2))\n      if (!day) return ''\n      return this.formatDate(this.year, this.month, day)\n    },\n    async loadTasks() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const response = await getTaskList({ sid: user.sid })\n      this.taskList = response.data || []\n    },\n    async loadSign() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const dates = `${this.year}${String(this.month).padStart(2, '0')}`\n      const response = await getDateList({ sid: user.sid, dates })\n      const data = response.code === 100 && Array.isArray(response.data) ? response.data : []\n      this.signedDays = data.map(item => {\n        if (typeof item === 'string') return this.normalizeSignDate(item)\n        return this.normalizeSignDate(item.dateline || item.date || item.day)\n      }).filter(Boolean)\n      this.countSign = this.signedDays.length\n      this.calculateContinuousDays()\n    },\n    calculateContinuousDays() {\n      if (!this.signedDays.length) {\n        this.maxContinuousDays = 0\n        return\n      }\n      const list = this.signedDays.slice().sort((a, b) => new Date(a) - new Date(b))\n      let current = 1\n      let max = 1\n      for (let i = 1; i < list.length; i++) {\n        const diff = (new Date(list[i]) - new Date(list[i - 1])) / (1000 * 60 * 60 * 24)\n        if (diff === 1) {\n          current += 1\n          max = Math.max(max, current)\n        } else if (diff > 1) {\n          current = 1\n        }\n      }\n      this.maxContinuousDays = max\n    },\n    prevMonth() {\n      this.month -= 1\n      if (this.month < 1) {\n        this.month = 12\n        this.year -= 1\n      }\n      this.loadSign()\n    },\n    nextMonth() {\n      this.month += 1\n      if (this.month > 12) {\n        this.month = 1\n        this.year += 1\n      }\n      this.loadSign()\n    },\n    async toPraxis(item) {\n      const user = this.getUser()\n      if (!user.sid || !item) return\n      const resourceId = item.resource_id || item.id\n      const response = await saveUserStudyResource({ sid: user.sid, resource_id: resourceId })\n      if (response.code != 100) return\n      if (item.category_id == 1) {\n        this.$router.push({ name: 'PcListenPraxis', query: { log_id: response.data, resources_id: resourceId } })\n      } else if (item.category_id == 4) {\n        this.$router.push({ name: 'PcWritePraxis', query: { log_id: response.data, resources_id: resourceId } })\n      } else {\n        this.$router.push({ name: 'PcReadPraxis', query: { log_id: response.data, resources_id: resourceId } })\n      }\n    }\n  },\n  mounted() {\n    this.loadTasks()\n    this.loadSign()\n  }\n}\n</script>\n\n<style scoped>\n.pc-task-page {\n  width: 1114px;\n  height: 583px;\n  color: #101b2d;\n}\n\n.breadcrumb {\n  height: 22px;\n  font-size: 12px;\n  line-height: 18px;\n  color: #7d8692;\n}\n\n.task-layout {\n  height: 541px;\n  display: grid;\n  grid-template-columns: 790px 286px;\n  gap: 16px;\n  align-items: start;\n}\n\n.task-panel,\n.calendar-panel {\n  background: rgba(255, 255, 255, 0.94);\n  border-radius: 6px;\n  box-sizing: border-box;\n}\n\n.task-panel {\n  height: 528px;\n  padding: 14px 28px 0 14px;\n}\n\n.calendar-panel {\n  height: 374px;\n  padding: 14px 34px 12px;\n}\n\n::v-deep .title-wrap {\n  display: flex;\n  align-items: center;\n}\n\n::v-deep .title-icon {\n  width: 13px;\n  height: 13px;\n  margin-right: 8px;\n  background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat;\n}\n\n::v-deep .title-wrap strong {\n  font-size: 17px;\n  line-height: 24px;\n  color: #111b2c;\n}\n\n.task-list {\n  height: 476px;\n  margin-top: 12px;\n  overflow-y: auto;\n  padding-right: 6px;\n}\n\n.task-list::-webkit-scrollbar {\n  width: 4px;\n}\n\n.task-list::-webkit-scrollbar-thumb {\n  border-radius: 999px;\n  background: #d5dce6;\n}\n\n.task-row {\n  height: 143px;\n  display: flex;\n  align-items: flex-start;\n  padding: 0 14px 20px 0;\n  border-bottom: 1px solid #eef1f5;\n  box-sizing: border-box;\n  cursor: pointer;\n}\n\n.task-row + .task-row {\n  padding-top: 20px;\n  height: 163px;\n}\n\n.task-row img {\n  width: 185px;\n  height: 122px;\n  border-radius: 4px;\n  object-fit: cover;\n  display: block;\n  margin-right: 24px;\n}\n\n.task-info {\n  flex: 1;\n  min-width: 0;\n  padding-top: 10px;\n}\n\n.task-title {\n  max-width: 450px;\n  font-size: 16px;\n  line-height: 24px;\n  font-weight: 800;\n  color: #0f1828;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.tag-row {\n  display: flex;\n  gap: 8px;\n  margin-top: 6px;\n}\n\n.tag-row span {\n  min-width: 34px;\n  height: 18px;\n  line-height: 18px;\n  padding: 0 8px;\n  background: #eef5ff;\n  color: #2d6fba;\n  font-size: 12px;\n  text-align: center;\n  border-radius: 2px;\n}\n\n.tag-row span:empty {\n  display: none;\n}\n\n.task-status {\n  width: 64px;\n  padding-top: 15px;\n  text-align: right;\n  font-size: 16px;\n  font-weight: 800;\n  color: #43bf24;\n}\n\n.task-status.undone {\n  color: #ed3347;\n}\n\n.empty-state {\n  height: 450px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #8b96a6;\n}\n\nbutton {\n  border: none;\n  background: transparent;\n  color: #9aa4b4;\n  cursor: pointer;\n  padding: 0;\n  font-size: 20px;\n}\n\n.calendar-top {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 18px;\n  margin: 18px 0 16px;\n  color: #0f1f33;\n  font-size: 13px;\n}\n\n.week-row,\n.date-grid {\n  display: flex;\n  flex-wrap: wrap;\n  text-align: center;\n}\n\n.week-row {\n  color: #98a7ba;\n  font-size: 12px;\n  margin-bottom: 10px;\n}\n\n.week-row span {\n  width: calc(100% / 7);\n}\n\n.date-grid span {\n  width: calc(100% / 7);\n  height: 29px;\n  font-size: 12px;\n  color: #223047;\n  position: relative;\n}\n\n.date-grid .muted {\n  color: #b9c1ce;\n}\n\n.date-grid .signed {\n  color: #24a268;\n  font-weight: 700;\n}\n\n.date-grid .today {\n  color: #1688ff;\n}\n\n.date-grid .today.signed {\n  color: #24a268;\n}\n\n.calendar-note {\n  margin-top: 8px;\n  font-size: 12px;\n  color: #6f7f94;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcTodayTask.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcTodayTask.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcTodayTask.vue?vue&type=template&id=12537aee&scoped=true\"\nimport script from \"./PcTodayTask.vue?vue&type=script&lang=js\"\nexport * from \"./PcTodayTask.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcTodayTask.vue?vue&type=style&index=0&id=12537aee&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"12537aee\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-study-list\"},[_c('div',{staticClass:\"breadcrumb\"},[_vm._v(\"当前位置：首页-学习列表\")]),_c('section',{staticClass:\"tab-panel\"},[_vm._m(0),_c('div',{staticClass:\"tabs\"},_vm._l((_vm.tabs),function(item){return _c('button',{key:item.key,class:{ active: _vm.activeTab === item.key },attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.changeTab(item.key)}}},[_vm._v(\" \"+_vm._s(item.label)+\" \")])}),0)]),_c('section',{staticClass:\"list-panel\"},[(_vm.currentList.length > 0)?_c('div',{ref:\"studyGrid\",staticClass:\"study-grid\",on:{\"&scroll\":function($event){return _vm.updateScrollHint.apply(null, arguments)}}},_vm._l((_vm.currentList),function(item){return _c('article',{key:`${_vm.activeTab}-${item.id}`,staticClass:\"study-card\",on:{\"click\":function($event){return _vm.toPraxis(item)}}},[_c('img',{staticClass:\"cover\",attrs:{\"src\":item.cover,\"alt\":\"\"}}),_c('div',{staticClass:\"card-main\"},[_c('h3',[_vm._v(_vm._s(_vm.categoryText(item.category_id))+_vm._s(item.name))]),(_vm.activeTab === 'finished')?_c('div',{staticClass:\"result-row\"},[_c('strong',[_vm._v(_vm._s(item.right_count || 0)+\"/\"+_vm._s(item.total_count || 0))]),_c('span',[_vm._v(\"首次提交正确率：\"+_vm._s(_vm.rightRate(item)))]),_c('span',[_vm._v(\"提交时间:\"+_vm._s(item.fcreate_time || '--'))])]):_vm._e()]),_c('div',{staticClass:\"status-tag\",class:{ green: _vm.activeTab === 'finished' }},[_vm._v(_vm._s(_vm.actionText))])])}),0):_c('div',{staticClass:\"empty-state\"},[_vm._v(\"暂无学习内容\")]),(_vm.showLoadMore)?_c('div',{staticClass:\"load-more\",on:{\"click\":_vm.loadMore}},[_vm._v(\"点击加载更多~~\")]):(_vm.activeTab !== 'hot' && _vm.currentList.length > 0 && !_vm.canScrollDown && !_vm.loading)?_c('div',{staticClass:\"list-end\"},[_vm._v(\" 已显示全部内容 \")]):_vm._e(),(_vm.canScrollDown)?_c('button',{staticClass:\"scroll-hint\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.scrollList}},[_vm._v(\" 向下滚动查看更多 \"),_c('span',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"↓\")])]):_vm._e()])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"panel-title\"},[_c('span',{staticClass:\"title-icon\"}),_c('strong',[_vm._v(\"学习列表\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-study-list\">\n    <div class=\"breadcrumb\">当前位置：首页-学习列表</div>\n\n    <section class=\"tab-panel\">\n      <div class=\"panel-title\">\n        <span class=\"title-icon\"></span>\n        <strong>学习列表</strong>\n      </div>\n      <div class=\"tabs\">\n        <button\n          v-for=\"item in tabs\"\n          :key=\"item.key\"\n          type=\"button\"\n          :class=\"{ active: activeTab === item.key }\"\n          @click=\"changeTab(item.key)\"\n        >\n          {{ item.label }}\n        </button>\n      </div>\n    </section>\n\n    <section class=\"list-panel\">\n      <div v-if=\"currentList.length > 0\" ref=\"studyGrid\" class=\"study-grid\" @scroll.passive=\"updateScrollHint\">\n        <article v-for=\"item in currentList\" :key=\"`${activeTab}-${item.id}`\" class=\"study-card\" @click=\"toPraxis(item)\">\n          <img class=\"cover\" :src=\"item.cover\" alt=\"\" />\n          <div class=\"card-main\">\n            <h3>{{ categoryText(item.category_id) }}{{ item.name }}</h3>\n            <div v-if=\"activeTab === 'finished'\" class=\"result-row\">\n              <strong>{{ item.right_count || 0 }}/{{ item.total_count || 0 }}</strong>\n              <span>首次提交正确率：{{ rightRate(item) }}</span>\n              <span>提交时间:{{ item.fcreate_time || '--' }}</span>\n            </div>\n          </div>\n          <div class=\"status-tag\" :class=\"{ green: activeTab === 'finished' }\">{{ actionText }}</div>\n        </article>\n      </div>\n\n      <div v-else class=\"empty-state\">暂无学习内容</div>\n\n      <div v-if=\"showLoadMore\" class=\"load-more\" @click=\"loadMore\">点击加载更多~~</div>\n      <div v-else-if=\"activeTab !== 'hot' && currentList.length > 0 && !canScrollDown && !loading\" class=\"list-end\">\n        已显示全部内容\n      </div>\n      <button v-if=\"canScrollDown\" type=\"button\" class=\"scroll-hint\" @click=\"scrollList\">\n        向下滚动查看更多 <span aria-hidden=\"true\">↓</span>\n      </button>\n    </section>\n  </div>\n</template>\n\n<script>\nimport { getHotUserResourceList, getUserResourceList, saveUserStudyResource } from '@/api/user'\n\nexport default {\n  name: 'PcStudyList',\n  data() {\n    return {\n      activeTab: 'finished',\n      finishedList: [],\n      studyingList: [],\n      hotList: [],\n      finishedPage: 1,\n      studyingPage: 1,\n      hasMoreFinished: true,\n      hasMoreStudying: true,\n      loading: false,\n      canScrollDown: false,\n      tabs: [\n        { key: 'finished', label: '已完成' },\n        { key: 'studying', label: '正在学' },\n        { key: 'hot', label: '推荐学' }\n      ]\n    }\n  },\n  computed: {\n    currentList() {\n      if (this.activeTab === 'studying') return this.studyingList\n      if (this.activeTab === 'hot') return this.hotList\n      return this.finishedList\n    },\n    actionText() {\n      if (this.activeTab === 'finished') return '已完成'\n      if (this.activeTab === 'studying') return '继续学习'\n      return '进入学习'\n    },\n    showLoadMore() {\n      if (this.activeTab === 'studying') return this.hasMoreStudying\n      if (this.activeTab === 'finished') return this.hasMoreFinished\n      return false\n    }\n  },\n  watch: {\n    currentList() {\n      this.$nextTick(this.updateScrollHint)\n    },\n    activeTab() {\n      this.$nextTick(() => {\n        if (this.$refs.studyGrid) this.$refs.studyGrid.scrollTop = 0\n        this.updateScrollHint()\n      })\n    }\n  },\n  methods: {\n    updateScrollHint() {\n      const grid = this.$refs.studyGrid\n      this.canScrollDown = !!grid && grid.scrollHeight - grid.clientHeight - grid.scrollTop > 2\n    },\n    scrollList() {\n      const grid = this.$refs.studyGrid\n      if (!grid) return\n      grid.scrollBy({\n        top: grid.clientHeight,\n        behavior: window.matchMedia('(prefers-reduced-motion: reduce)').matches ? 'auto' : 'smooth'\n      })\n    },\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    categoryName(id) {\n      if (id == 1) return '听力'\n      if (id == 2 || id == 3) return '阅读'\n      if (id == 4) return '写作'\n      return '学习'\n    },\n    categoryText(id) {\n      return `[${this.categoryName(id)}]`\n    },\n    rightRate(item) {\n      const total = Number(item.total_count) || 0\n      if (!total) return '0%'\n      return `${(((Number(item.right_count) || 0) / total) * 100).toFixed(2)}%`\n    },\n    normalizeList(data) {\n      return (Array.isArray(data) ? data : []).map(item => ({\n        ...item,\n        cover: item.cover || 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/default_cover.png'\n      }))\n    },\n    async loadStudying() {\n      if (!this.hasMoreStudying || this.loading) return\n      const user = this.getUser()\n      if (!user.sid) return\n      this.loading = true\n      try {\n        const response = await getUserResourceList({ sid: user.sid, status: 1, page: this.studyingPage })\n        if (response.code !== 100) {\n          this.hasMoreStudying = false\n          return\n        }\n        const data = this.normalizeList(response.data && response.data.list)\n        this.studyingList = this.studyingList.concat(data)\n        if (data.length < 10) this.hasMoreStudying = false\n      } finally {\n        this.loading = false\n      }\n    },\n    async loadFinished() {\n      if (!this.hasMoreFinished || this.loading) return\n      const user = this.getUser()\n      if (!user.sid) return\n      this.loading = true\n      try {\n        const response = await getUserResourceList({ sid: user.sid, status: 2, page: this.finishedPage })\n        if (response.code !== 100) {\n          this.hasMoreFinished = false\n          return\n        }\n        const data = this.normalizeList(response.data && response.data.list)\n        this.finishedList = this.finishedList.concat(data)\n        if (data.length < 10) this.hasMoreFinished = false\n      } finally {\n        this.loading = false\n      }\n    },\n    async loadHot() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const response = await getHotUserResourceList({ sid: user.sid })\n      this.hotList = this.normalizeList(response.data)\n    },\n    changeTab(key) {\n      this.activeTab = key\n    },\n    loadMore() {\n      if (this.activeTab === 'studying') {\n        this.studyingPage += 1\n        this.loadStudying()\n      }\n      if (this.activeTab === 'finished') {\n        this.finishedPage += 1\n        this.loadFinished()\n      }\n    },\n    async toPraxis(item) {\n      const user = this.getUser()\n      if (!user.sid || !item) return\n      const response = await saveUserStudyResource({ sid: user.sid, resource_id: item.id })\n      if (response.code != 100) return\n      if (item.category_id == 1) {\n        this.$router.push({ name: 'PcListenPraxis', query: { log_id: response.data, resources_id: item.id } })\n      } else if (item.category_id == 4) {\n        this.$router.push({ name: 'PcWritePraxis', query: { log_id: response.data, resources_id: item.id } })\n      } else {\n        this.$router.push({ name: 'PcReadPraxis', query: { log_id: response.data, resources_id: item.id } })\n      }\n    },\n    applyInitialTab() {\n      const value = String(this.$route.query.now_status || '')\n      if (value === '0') this.activeTab = 'studying'\n      if (value === '1') this.activeTab = 'hot'\n      if (value === '2') this.activeTab = 'finished'\n    }\n  },\n  mounted() {\n    this.applyInitialTab()\n    this.loadFinished()\n    this.loadStudying()\n    this.loadHot()\n    this.$nextTick(this.updateScrollHint)\n    window.addEventListener('resize', this.updateScrollHint)\n  },\n  beforeDestroy() {\n    window.removeEventListener('resize', this.updateScrollHint)\n  }\n}\n</script>\n\n<style scoped>\n.pc-study-list {\n  width: 1114px;\n  height: 583px;\n  color: #111c2d;\n}\n\n.breadcrumb {\n  height: 28px;\n  color: #6d7e93;\n  font-size: 12px;\n  line-height: 18px;\n}\n\n.tab-panel,\n.list-panel {\n  position: relative;\n  border-radius: 8px;\n  background: rgba(239, 247, 255, 0.74);\n  box-sizing: border-box;\n}\n\n.tab-panel {\n  height: 82px;\n  padding: 14px 36px;\n  background: #fff;\n}\n\n.panel-title {\n  display: flex;\n  align-items: center;\n  height: 24px;\n}\n\n.title-icon {\n  width: 13px;\n  height: 13px;\n  margin-right: 8px;\n  background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat;\n}\n\n.panel-title strong {\n  font-size: 17px;\n  color: #14253b;\n}\n\n.tabs {\n  display: flex;\n  gap: 34px;\n  margin-top: 8px;\n  padding-left: 20px;\n}\n\nbutton {\n  border: none;\n  background: transparent;\n  cursor: pointer;\n  padding: 0;\n}\n\n.tabs button {\n  height: 26px;\n  padding: 0 8px;\n  color: #6d7e93;\n  font-size: 13px;\n}\n\n.tabs button.active {\n  color: #239CD2;\n  background: #E2F9FF;\n}\n\n.list-panel {\n  height: 408px;\n  margin-top: 12px;\n  padding: 16px 24px;\n  overflow: hidden;\n}\n\n.study-grid {\n  height: 336px;\n  display: grid;\n  grid-template-columns: repeat(2, 1fr);\n  gap: 12px;\n  overflow-y: auto;\n  padding-right: 4px;\n  scrollbar-width: thin;\n  scrollbar-color: #b6d7e8 transparent;\n}\n\n.study-grid::-webkit-scrollbar {\n  width: 5px;\n}\n\n.study-grid::-webkit-scrollbar-thumb {\n  border-radius: 3px;\n  background: #b6d7e8;\n}\n\n.scroll-hint {\n  position: absolute;\n  right: 24px;\n  bottom: 10px;\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  padding: 5px 12px;\n  border-radius: 14px;\n  background: #e2f9ff;\n  color: #167eae;\n  font-size: 12px;\n  line-height: 18px;\n}\n\n.scroll-hint:hover {\n  background: #d0f1fc;\n}\n\n.scroll-hint:focus-visible {\n  outline: 2px solid #239cd2;\n  outline-offset: 2px;\n}\n\n.study-card {\n  height: 162px;\n  display: grid;\n  grid-template-columns: 72px minmax(0, 1fr) 88px;\n  gap: 12px;\n  padding: 18px 0 0 20px;\n  border-radius: 6px;\n  background: #fff;\n  box-sizing: border-box;\n  cursor: pointer;\n}\n\n.cover {\n  width: 72px;\n  height: 72px;\n  object-fit: cover;\n}\n\n.card-main {\n  min-width: 0;\n}\n\n.card-main h3 {\n  margin: 7px 0 8px;\n  color: #13233a;\n  font-size: 16px;\n  line-height: 22px;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.card-main p {\n  margin: 0;\n  color: #7f8fa4;\n  font-size: 14px;\n  line-height: 22px;\n}\n\n.result-row {\n  display: flex;\n  align-items: baseline;\n  gap: 8px;\n  margin-top: 26px;\n  padding-top: 12px;\n  border-top: 1px solid rgba(175, 190, 211, 0.58);\n  white-space: nowrap;\n}\n\n.result-row strong {\n  color: #65758b;\n  font-size: 28px;\n  line-height: 32px;\n  font-weight: 500;\n}\n\n.result-row span {\n  color: #8795a8;\n  font-size: 13px;\n}\n\n.status-tag {\n  width: 88px;\n  height: 32px;\n  margin-top: 5px;\n  line-height: 32px;\n  text-align: center;\n  border: none;\n  background: #d6f5d8;\n  color: #1bb84a;\n  font-size: 14px;\n}\n\n.status-tag:not(.green) {\n  background: #e5f1ff;\n  color: #00529f;\n}\n\n.load-more,\n.list-end,\n.empty-state {\n  height: 42px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #6d7e93;\n  font-size: 12px;\n}\n\n.list-end {\n  gap: 12px;\n  color: #8795a8;\n}\n\n.list-end::before,\n.list-end::after {\n  content: '';\n  width: 32px;\n  height: 1px;\n  background: #d6e2ed;\n}\n\n.empty-state {\n  height: 336px;\n  font-size: 14px;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcStudyList.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcStudyList.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcStudyList.vue?vue&type=template&id=0a6ed2d3&scoped=true\"\nimport script from \"./PcStudyList.vue?vue&type=script&lang=js\"\nexport * from \"./PcStudyList.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcStudyList.vue?vue&type=style&index=0&id=0a6ed2d3&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"0a6ed2d3\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-listen-index\"},[_c('section',{staticClass:\"panel last-panel\"},[_c('PanelTitle',{attrs:{\"title\":\"上次学习\"}}),(_vm.lastResource && _vm.lastResource.id)?_c('div',{staticClass:\"last-card\",on:{\"click\":function($event){return _vm.toPraxis(_vm.lastResource)}}},[_c('img',{attrs:{\"src\":_vm.lastResource.cover}}),_c('div',{staticClass:\"last-info\"},[_c('h2',[_vm._v(_vm._s(_vm.categoryText)+_vm._s(_vm.lastResource.name))])]),_c('button',{attrs:{\"type\":\"button\"}},[_vm._v(_vm._s(_vm.lastResource.status == 2 ? '已学' : '继续学习'))])]):_c('div',{staticClass:\"empty-line\"},[_vm._v(\"暂无上次学习内容\")])],1),_c('section',{staticClass:\"panel subject-panel\"},[_c('PanelTitle',{attrs:{\"title\":\"主题列表\"}}),(_vm.listData.length === 0)?_c('div',{staticClass:\"empty-grid\"},[_vm._v(\"加载中...\")]):_c('div',{staticClass:\"subject-grid\"},_vm._l((_vm.listData),function(item){return _c('div',{key:item.id,staticClass:\"subject-card\",on:{\"click\":function($event){return _vm.toLearn(item)}}},[_c('div',{staticClass:\"cover-wrap\"},[_c('img',{attrs:{\"src\":item.cover}}),_c('span',[_vm._v(_vm._s(item.read_num || item.study_num || 1)+\"人正在学\")])]),_c('h3',[_vm._v(_vm._s(item.name))]),_c('p',[_vm._v(\"共\"+_vm._s(item.resource_num || 0)+\"个资源包\")])])}),0)],1),_c('PcAiAssistant',{attrs:{\"scene\":\"listen\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-listen-index\">\n    <section class=\"panel last-panel\">\n      <PanelTitle title=\"上次学习\" />\n      <div v-if=\"lastResource && lastResource.id\" class=\"last-card\" @click=\"toPraxis(lastResource)\">\n        <img :src=\"lastResource.cover\" />\n        <div class=\"last-info\">\n          <h2>{{ categoryText }}{{ lastResource.name }}</h2>\n        </div>\n        <button type=\"button\">{{ lastResource.status == 2 ? '已学' : '继续学习' }}</button>\n      </div>\n      <div v-else class=\"empty-line\">暂无上次学习内容</div>\n    </section>\n\n    <section class=\"panel subject-panel\">\n      <PanelTitle title=\"主题列表\" />\n      <div v-if=\"listData.length === 0\" class=\"empty-grid\">加载中...</div>\n      <div v-else class=\"subject-grid\">\n        <div\n          v-for=\"item in listData\"\n          :key=\"item.id\"\n          class=\"subject-card\"\n          @click=\"toLearn(item)\"\n        >\n          <div class=\"cover-wrap\">\n            <img :src=\"item.cover\" />\n            <span>{{ item.read_num || item.study_num || 1 }}人正在学</span>\n          </div>\n          <h3>{{ item.name }}</h3>\n          <p>共{{ item.resource_num || 0 }}个资源包</p>\n        </div>\n      </div>\n    </section>\n    <PcAiAssistant scene=\"listen\" />\n  </div>\n</template>\n\n<script>\nimport Vue from 'vue'\nimport { UserResource, getList } from '@/api/listen'\nimport { saveUserStudyResource } from '@/api/user'\nimport PcAiAssistant from '@/components/PcAiAssistant.vue'\n\nconst PanelTitle = Vue.component('PcListenPanelTitle', {\n  functional: true,\n  props: { title: String },\n  render(h, ctx) {\n    return h('div', { class: 'title-wrap' }, [\n      h('span', { class: 'title-icon' }),\n      h('strong', ctx.props.title)\n    ])\n  }\n})\n\nexport default {\n  name: 'PcListenIndex',\n  components: { PanelTitle, PcAiAssistant },\n  data() {\n    return {\n      categoryId: 1,\n      categoryText: '[听力]',\n      lastResource: null,\n      listData: []\n    }\n  },\n  methods: {\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    normalizeImg(url) {\n      return url ? url.replace('a-news.oss-cn-hangzhou.aliyuncs.com', 'a-news.oss-accelerate.aliyuncs.com') : ''\n    },\n    async loadLastResource() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const response = await UserResource({ sid: user.sid, category_id: this.categoryId })\n      const data = response.data || null\n      if (data) {\n        data.cover = this.normalizeImg(data.cover)\n      }\n      this.lastResource = data\n    },\n    async loadList() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const response = await getList({ sid: user.sid, category_id: this.categoryId, level: '', subject_cate_id: '', keyword: '' })\n      this.listData = (response.data || [])\n        .filter(item => Number(item.resource_num || 0) > 0)\n        .map(item => ({\n          ...item,\n          cover: this.normalizeImg(item.cover)\n        }))\n    },\n    async toPraxis(item) {\n      const user = this.getUser()\n      if (!user.sid || !item) return\n      const response = await saveUserStudyResource({ sid: user.sid, resource_id: item.id })\n      if (response.code != 100) return\n      this.$router.push({ name: 'PcListenPraxis', query: { log_id: response.data, resources_id: item.id } })\n    },\n    toLearn(item) {\n      this.$router.push({ name: 'PcListenLearn', query: { subject_id: item.id, subject_name: item.name } })\n    }\n  },\n  mounted() {\n    this.loadLastResource()\n    this.loadList()\n  }\n}\n</script>\n\n<style scoped>\n.pc-listen-index {\n  width: 1098px;\n  height: 570px;\n  display: grid;\n  gap: 14px;\n  position: relative;\n}\n\n.panel {\n  background: #fff;\n  border-radius: 6px;\n  box-sizing: border-box;\n}\n\n.last-panel {\n  height: 144px;\n  padding: 18px 28px 16px;\n}\n\n.subject-panel {\n  height: 412px;\n  padding: 18px 28px 20px;\n  overflow: hidden;\n}\n\n::v-deep .title-wrap {\n  display: flex;\n  align-items: center;\n}\n\n::v-deep .title-icon {\n  width: 13px;\n  height: 13px;\n  margin-right: 6px;\n  background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat;\n}\n\n::v-deep .title-wrap strong {\n  font-size: 16px;\n  line-height: 22px;\n  color: #152237;\n}\n\n.last-card {\n  height: 82px;\n  margin-top: 14px;\n  display: flex;\n  align-items: center;\n  cursor: pointer;\n}\n\n.last-card img {\n  width: 72px;\n  height: 72px;\n  object-fit: cover;\n  margin-right: 24px;\n}\n\n.last-info {\n  flex: 1;\n  min-width: 0;\n}\n\n.last-info h2 {\n  margin: 0;\n  font-size: 17px;\n  line-height: 24px;\n  color: #0e1b2d;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.last-info p {\n  margin: 8px 0 0;\n  font-size: 14px;\n  color: #8a98aa;\n}\n\nbutton {\n  border: none;\n  background: transparent;\n  color: #0d5aa8;\n  font-size: 15px;\n  cursor: pointer;\n}\n\n.subject-grid {\n  height: 332px;\n  margin-top: 14px;\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: 12px 10px;\n  overflow-y: auto;\n  padding-right: 8px;\n}\n\n.subject-grid::-webkit-scrollbar {\n  width: 4px;\n}\n\n.subject-grid::-webkit-scrollbar-thumb {\n  background: rgba(88, 124, 168, 0.22);\n  border-radius: 999px;\n}\n\n.subject-card {\n  min-width: 0;\n  cursor: pointer;\n}\n\n.cover-wrap {\n  height: 178px;\n  position: relative;\n  overflow: hidden;\n  border-radius: 5px;\n}\n\n.cover-wrap img {\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n  display: block;\n}\n\n.cover-wrap span {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  min-width: 96px;\n  height: 34px;\n  line-height: 34px;\n  padding: 0 12px;\n  box-sizing: border-box;\n  background: rgba(13, 42, 74, 0.66);\n  color: #fff;\n  font-size: 15px;\n  text-align: center;\n  border-radius: 8px 0 0 0;\n}\n\n.subject-card h3 {\n  margin: 8px 6px 0;\n  font-size: 17px;\n  line-height: 24px;\n  color: #0f1f33;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.subject-card p {\n  margin: 4px 6px 0;\n  font-size: 13px;\n  line-height: 18px;\n  color: #7f8ea4;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.empty-line,\n.empty-grid {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #7f8ea4;\n}\n\n.empty-line {\n  height: 82px;\n  margin-top: 14px;\n}\n\n.empty-grid {\n  height: 332px;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcListenIndex.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcListenIndex.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcListenIndex.vue?vue&type=template&id=e8c92ad0&scoped=true\"\nimport script from \"./PcListenIndex.vue?vue&type=script&lang=js\"\nexport * from \"./PcListenIndex.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcListenIndex.vue?vue&type=style&index=0&id=e8c92ad0&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"e8c92ad0\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-read-index\"},[_c('section',{staticClass:\"panel last-panel\"},[_c('PanelTitle',{attrs:{\"title\":\"上次学习\"}}),(_vm.lastResource && _vm.lastResource.id)?_c('div',{staticClass:\"last-card\",on:{\"click\":function($event){return _vm.toPraxis(_vm.lastResource)}}},[_c('img',{attrs:{\"src\":_vm.lastResource.cover}}),_c('div',{staticClass:\"last-info\"},[_c('h2',[_vm._v(_vm._s(_vm.categoryText)+_vm._s(_vm.lastResource.name))])]),_c('button',{attrs:{\"type\":\"button\"}},[_vm._v(_vm._s(_vm.lastResource.status == 2 ? '已学' : '继续学习'))])]):_c('div',{staticClass:\"empty-line\"},[_vm._v(\"暂无上次学习内容\")])],1),_c('section',{staticClass:\"panel subject-panel\"},[_c('PanelTitle',{attrs:{\"title\":\"主题列表\"}}),(_vm.listData.length === 0)?_c('div',{staticClass:\"empty-grid\"},[_vm._v(\"加载中...\")]):_c('div',{staticClass:\"subject-grid\"},_vm._l((_vm.listData),function(item){return _c('div',{key:item.id,staticClass:\"subject-card\",on:{\"click\":function($event){return _vm.toLearn(item)}}},[_c('div',{staticClass:\"cover-wrap\"},[_c('img',{attrs:{\"src\":item.cover}}),_c('span',[_vm._v(_vm._s(item.read_num || item.study_num || 1)+\"人正在学\")])]),_c('h3',[_vm._v(_vm._s(item.name))]),_c('p',[_vm._v(\"共\"+_vm._s(item.resource_num || 0)+\"个资源包\")])])}),0)],1),_c('PcAiAssistant',{attrs:{\"scene\":\"read\"}})],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-read-index\">\n    <section class=\"panel last-panel\">\n      <PanelTitle title=\"上次学习\" />\n      <div v-if=\"lastResource && lastResource.id\" class=\"last-card\" @click=\"toPraxis(lastResource)\">\n        <img :src=\"lastResource.cover\" />\n        <div class=\"last-info\">\n          <h2>{{ categoryText }}{{ lastResource.name }}</h2>\n        </div>\n        <button type=\"button\">{{ lastResource.status == 2 ? '已学' : '继续学习' }}</button>\n      </div>\n      <div v-else class=\"empty-line\">暂无上次学习内容</div>\n    </section>\n\n    <section class=\"panel subject-panel\">\n      <PanelTitle title=\"主题列表\" />\n      <div v-if=\"listData.length === 0\" class=\"empty-grid\">加载中...</div>\n      <div v-else class=\"subject-grid\">\n        <div\n          v-for=\"item in listData\"\n          :key=\"item.id\"\n          class=\"subject-card\"\n          @click=\"toLearn(item)\"\n        >\n          <div class=\"cover-wrap\">\n            <img :src=\"item.cover\" />\n            <span>{{ item.read_num || item.study_num || 1 }}人正在学</span>\n          </div>\n          <h3>{{ item.name }}</h3>\n          <p>共{{ item.resource_num || 0 }}个资源包</p>\n        </div>\n      </div>\n    </section>\n    <PcAiAssistant scene=\"read\" />\n  </div>\n</template>\n\n<script>\nimport Vue from 'vue'\nimport { UserResource, getList } from '@/api/read'\nimport { saveUserStudyResource } from '@/api/user'\nimport PcAiAssistant from '@/components/PcAiAssistant.vue'\n\nconst PanelTitle = Vue.component('PcReadPanelTitle', {\n  functional: true,\n  props: { title: String },\n  render(h, ctx) {\n    return h('div', { class: 'title-wrap' }, [\n      h('span', { class: 'title-icon' }),\n      h('strong', ctx.props.title)\n    ])\n  }\n})\n\nexport default {\n  name: 'PcReadIndex',\n  components: { PanelTitle, PcAiAssistant },\n  data() {\n    return {\n      categoryId: 2,\n      categoryText: '[阅读]',\n      lastResource: null,\n      listData: []\n    }\n  },\n  methods: {\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    normalizeImg(url) {\n      return url ? url.replace('a-news.oss-cn-hangzhou.aliyuncs.com', 'a-news.oss-accelerate.aliyuncs.com') : ''\n    },\n    async loadLastResource() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const response = await UserResource({ sid: user.sid, category_id: this.categoryId })\n      const data = response.data || null\n      if (data) {\n        data.cover = this.normalizeImg(data.cover)\n      }\n      this.lastResource = data\n    },\n    async loadList() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const response = await getList({ sid: user.sid, category_id: this.categoryId, level: '', subject_cate_id: '', keyword: '' })\n      this.listData = (response.data || [])\n        .filter(item => Number(item.resource_num || 0) > 0)\n        .map(item => ({\n          ...item,\n          cover: this.normalizeImg(item.cover)\n        }))\n    },\n    async toPraxis(item) {\n      const user = this.getUser()\n      if (!user.sid || !item) return\n      const response = await saveUserStudyResource({ sid: user.sid, resource_id: item.id })\n      if (response.code != 100) return\n      this.$router.push({ name: 'PcReadPraxis', query: { log_id: response.data, resources_id: item.id } })\n    },\n    toLearn(item) {\n      this.$router.push({ name: 'PcReadLearn', query: { subject_id: item.id, subject_name: item.name } })\n    }\n  },\n  mounted() {\n    this.loadLastResource()\n    this.loadList()\n  }\n}\n</script>\n\n<style scoped>\n.pc-read-index {\n  width: 1098px;\n  height: 570px;\n  display: grid;\n  gap: 14px;\n  position: relative;\n}\n\n.panel {\n  background: #fff;\n  border-radius: 6px;\n  box-sizing: border-box;\n}\n\n.last-panel {\n  height: 144px;\n  padding: 18px 28px 16px;\n}\n\n.subject-panel {\n  height: 412px;\n  padding: 18px 28px 20px;\n  overflow: hidden;\n}\n\n::v-deep .title-wrap {\n  display: flex;\n  align-items: center;\n}\n\n::v-deep .title-icon {\n  width: 13px;\n  height: 13px;\n  margin-right: 6px;\n  background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat;\n}\n\n::v-deep .title-wrap strong {\n  font-size: 16px;\n  line-height: 22px;\n  color: #152237;\n}\n\n.last-card {\n  height: 82px;\n  margin-top: 14px;\n  display: flex;\n  align-items: center;\n  cursor: pointer;\n}\n\n.last-card img {\n  width: 72px;\n  height: 72px;\n  object-fit: cover;\n  margin-right: 24px;\n}\n\n.last-info {\n  flex: 1;\n  min-width: 0;\n}\n\n.last-info h2 {\n  margin: 0;\n  font-size: 17px;\n  line-height: 24px;\n  color: #0e1b2d;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.last-info p {\n  margin: 8px 0 0;\n  font-size: 14px;\n  color: #8a98aa;\n}\n\nbutton {\n  border: none;\n  background: transparent;\n  color: #0d5aa8;\n  font-size: 15px;\n  cursor: pointer;\n}\n\n.subject-grid {\n  height: 332px;\n  margin-top: 14px;\n  display: grid;\n  grid-template-columns: repeat(4, minmax(0, 1fr));\n  gap: 12px 10px;\n  overflow-y: auto;\n  padding-right: 8px;\n}\n\n.subject-grid::-webkit-scrollbar {\n  width: 4px;\n}\n\n.subject-grid::-webkit-scrollbar-thumb {\n  background: rgba(88, 124, 168, 0.22);\n  border-radius: 999px;\n}\n\n.subject-card {\n  min-width: 0;\n  cursor: pointer;\n}\n\n.cover-wrap {\n  height: 178px;\n  position: relative;\n  overflow: hidden;\n  border-radius: 5px;\n}\n\n.cover-wrap img {\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n  display: block;\n}\n\n.cover-wrap span {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  min-width: 96px;\n  height: 34px;\n  line-height: 34px;\n  padding: 0 12px;\n  box-sizing: border-box;\n  background: rgba(13, 42, 74, 0.66);\n  color: #fff;\n  font-size: 15px;\n  text-align: center;\n  border-radius: 8px 0 0 0;\n}\n\n.subject-card h3 {\n  margin: 8px 6px 0;\n  font-size: 17px;\n  line-height: 24px;\n  color: #0f1f33;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.subject-card p {\n  margin: 4px 6px 0;\n  font-size: 13px;\n  line-height: 18px;\n  color: #7f8ea4;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.empty-line,\n.empty-grid {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #7f8ea4;\n}\n\n.empty-line {\n  height: 82px;\n  margin-top: 14px;\n}\n\n.empty-grid {\n  height: 332px;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcReadIndex.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcReadIndex.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcReadIndex.vue?vue&type=template&id=30c1dc15&scoped=true\"\nimport script from \"./PcReadIndex.vue?vue&type=script&lang=js\"\nexport * from \"./PcReadIndex.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcReadIndex.vue?vue&type=style&index=0&id=30c1dc15&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"30c1dc15\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-learn-page\"},[_c('section',{staticClass:\"learn-panel\"},[_c('div',{staticClass:\"panel-head\"},[_vm._m(0),_c('div',{staticClass:\"sub-title\"},[_vm._v(_vm._s(_vm.subjectName))])]),(_vm.loading)?_c('div',{staticClass:\"empty-state\"},[_vm._v(\"加载中..\")]):(_vm.resourceList.length === 0)?_c('div',{staticClass:\"empty-state\"},[_vm._v(\"暂无内容\")]):_c('div',{staticClass:\"resource-list\"},_vm._l((_vm.resourceList),function(item){return _c('div',{key:item.id,staticClass:\"resource-item\",on:{\"click\":function($event){return _vm.toPraxis(item)}}},[_c('div',{staticClass:\"item-main\"},[_c('div',{staticClass:\"item-name\"},[_vm._v(_vm._s(item.name))])]),_c('div',{staticClass:\"item-status\",class:_vm.statusClass(item)},[_vm._v(\" \"+_vm._s(_vm.statusText(item))+\" \")])])}),0)]),_c('PcAiAssistant',{attrs:{\"scene\":\"listen\"}})],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"panel-title\"},[_c('span',{staticClass:\"title-icon\"}),_c('strong',[_vm._v(\"主题列表\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-learn-page\">\n    <section class=\"learn-panel\">\n      <div class=\"panel-head\">\n        <div class=\"panel-title\">\n          <span class=\"title-icon\"></span>\n          <strong>主题列表</strong>\n        </div>\n        <div class=\"sub-title\">{{ subjectName }}</div>\n      </div>\n\n      <div v-if=\"loading\" class=\"empty-state\">加载中..</div>\n      <div v-else-if=\"resourceList.length === 0\" class=\"empty-state\">暂无内容</div>\n      <div v-else class=\"resource-list\">\n        <div\n          v-for=\"item in resourceList\"\n          :key=\"item.id\"\n          class=\"resource-item\"\n          @click=\"toPraxis(item)\"\n        >\n          <div class=\"item-main\">\n            <div class=\"item-name\">{{ item.name }}</div>\n          </div>\n          <div class=\"item-status\" :class=\"statusClass(item)\">\n            {{ statusText(item) }}\n          </div>\n        </div>\n      </div>\n    </section>\n    <PcAiAssistant scene=\"listen\" />\n  </div>\n</template>\n\n<script>\nimport { getResources, saveUserStudyResource } from '@/api/listen'\nimport PcAiAssistant from '@/components/PcAiAssistant.vue'\n\nexport default {\n  name: 'PcListenLearn',\n  components: { PcAiAssistant },\n  data() {\n    return {\n      subjectId: '',\n      subjectName: '',\n      resourceList: [],\n      loading: false\n    }\n  },\n  methods: {\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    normalizeStatus(item) {\n      const status = Number(item && item.status)\n      const hisLabel = Number(item && item.hisLabel)\n      if (hisLabel === 1) return 2\n      return status\n    },\n    statusText(item) {\n      const status = this.normalizeStatus(item)\n      if (status === 2) return '已完成'\n      return '未完成'\n    },\n    statusClass(item) {\n      const status = this.normalizeStatus(item)\n      return status === 2 ? 'done' : 'todo'\n    },\n    async loadList() {\n      const user = this.getUser()\n      if (!user.sid) return\n      this.loading = true\n      try {\n        const response = await getResources({ sid: user.sid, subject_id: this.subjectId })\n        this.resourceList = Array.isArray(response.data) ? response.data : []\n      } finally {\n        this.loading = false\n      }\n    },\n    async toPraxis(item) {\n      const user = this.getUser()\n      if (!user.sid || !item) return\n      const response = await saveUserStudyResource({ sid: user.sid, resource_id: item.id })\n      if (response.code !== 100) return\n      this.$router.push({\n        name: 'PcListenPraxis',\n        query: { log_id: response.data, resources_id: item.id }\n      })\n    }\n  },\n  mounted() {\n    this.subjectId = this.$route.query.subject_id || ''\n    this.subjectName = this.$route.query.subject_name || ''\n    this.loadList()\n  }\n}\n</script>\n\n<style scoped>\n.pc-learn-page {\n  width: 1114px;\n  height: 583px;\n  position: relative;\n}\n\n.learn-panel {\n  height: 583px;\n  background: rgba(255, 255, 255, 0.78);\n  border-radius: 8px;\n  box-sizing: border-box;\n  padding: 18px 22px 20px;\n}\n\n.panel-head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-bottom: 12px;\n}\n\n.panel-title {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n.title-icon {\n  width: 13px;\n  height: 13px;\n  background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat;\n}\n\n.panel-title strong {\n  font-size: 16px;\n  line-height: 22px;\n  color: #152237;\n}\n\n.sub-title {\n  font-size: 13px;\n  color: #8a98aa;\n}\n\n.resource-list {\n  height: 520px;\n  overflow-y: auto;\n  padding-right: 4px;\n}\n\n.resource-list::-webkit-scrollbar {\n  width: 4px;\n}\n\n.resource-list::-webkit-scrollbar-thumb {\n  background: rgba(88, 124, 168, 0.22);\n  border-radius: 999px;\n}\n\n.resource-item {\n  min-height: 72px;\n  margin-bottom: 10px;\n  padding: 18px 30px 18px 28px;\n  background: #dce9ff;\n  border-radius: 14px;\n  box-sizing: border-box;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  cursor: pointer;\n}\n\n.item-main {\n  min-width: 0;\n  flex: 1;\n}\n\n.item-name {\n  font-size: 15px;\n  line-height: 22px;\n  color: #1c2636;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.item-status {\n  width: 90px;\n  text-align: right;\n  font-size: 13px;\n}\n\n.item-status.done {\n  color: #2ea46f;\n}\n\n.item-status.todo {\n  color: #97a0ad;\n}\n\n.empty-state {\n  height: 520px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #8a98aa;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcListenLearn.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcListenLearn.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcListenLearn.vue?vue&type=template&id=3c3dc23d&scoped=true\"\nimport script from \"./PcListenLearn.vue?vue&type=script&lang=js\"\nexport * from \"./PcListenLearn.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcListenLearn.vue?vue&type=style&index=0&id=3c3dc23d&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"3c3dc23d\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-learn-page\"},[_c('section',{staticClass:\"learn-panel\"},[_c('div',{staticClass:\"panel-head\"},[_vm._m(0),_c('div',{staticClass:\"sub-title\"},[_vm._v(_vm._s(_vm.subjectName))])]),(_vm.loading)?_c('div',{staticClass:\"empty-state\"},[_vm._v(\"加载中..\")]):(_vm.resourceList.length === 0)?_c('div',{staticClass:\"empty-state\"},[_vm._v(\"暂无内容\")]):_c('div',{staticClass:\"resource-list\"},_vm._l((_vm.resourceList),function(item){return _c('div',{key:item.id,staticClass:\"resource-item\",on:{\"click\":function($event){return _vm.toPraxis(item)}}},[_c('div',{staticClass:\"item-main\"},[_c('div',{staticClass:\"item-name\"},[_vm._v(_vm._s(item.name))])]),_c('div',{staticClass:\"item-status\",class:_vm.statusClass(item)},[_vm._v(\" \"+_vm._s(_vm.statusText(item))+\" \")])])}),0)]),_c('PcAiAssistant',{attrs:{\"scene\":\"read\"}})],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"panel-title\"},[_c('span',{staticClass:\"title-icon\"}),_c('strong',[_vm._v(\"主题列表\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-learn-page\">\n    <section class=\"learn-panel\">\n      <div class=\"panel-head\">\n        <div class=\"panel-title\">\n          <span class=\"title-icon\"></span>\n          <strong>主题列表</strong>\n        </div>\n        <div class=\"sub-title\">{{ subjectName }}</div>\n      </div>\n\n      <div v-if=\"loading\" class=\"empty-state\">加载中..</div>\n      <div v-else-if=\"resourceList.length === 0\" class=\"empty-state\">暂无内容</div>\n      <div v-else class=\"resource-list\">\n        <div\n          v-for=\"item in resourceList\"\n          :key=\"item.id\"\n          class=\"resource-item\"\n          @click=\"toPraxis(item)\"\n        >\n          <div class=\"item-main\">\n            <div class=\"item-name\">{{ item.name }}</div>\n          </div>\n          <div class=\"item-status\" :class=\"statusClass(item)\">\n            {{ statusText(item) }}\n          </div>\n        </div>\n      </div>\n    </section>\n    <PcAiAssistant scene=\"read\" />\n  </div>\n</template>\n\n<script>\nimport { getResources, saveUserStudyResource } from '@/api/read'\nimport PcAiAssistant from '@/components/PcAiAssistant.vue'\n\nexport default {\n  name: 'PcReadLearn',\n  components: { PcAiAssistant },\n  data() {\n    return {\n      subjectId: '',\n      subjectName: '',\n      resourceList: [],\n      loading: false\n    }\n  },\n  methods: {\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    normalizeStatus(item) {\n      const status = Number(item && item.status)\n      const hisLabel = Number(item && item.hisLabel)\n      if (hisLabel === 1) return 2\n      return status\n    },\n    statusText(item) {\n      const status = this.normalizeStatus(item)\n      if (status === 2) return '已完成'\n      return '未完成'\n    },\n    statusClass(item) {\n      const status = this.normalizeStatus(item)\n      return status === 2 ? 'done' : 'todo'\n    },\n    async loadList() {\n      const user = this.getUser()\n      if (!user.sid) return\n      this.loading = true\n      try {\n        const response = await getResources({ sid: user.sid, subject_id: this.subjectId })\n        this.resourceList = Array.isArray(response.data) ? response.data : []\n      } finally {\n        this.loading = false\n      }\n    },\n    async toPraxis(item) {\n      const user = this.getUser()\n      if (!user.sid || !item) return\n      const response = await saveUserStudyResource({ sid: user.sid, resource_id: item.id })\n      if (response.code !== 100) return\n      this.$router.push({\n        name: 'PcReadPraxis',\n        query: { log_id: response.data, resources_id: item.id }\n      })\n    }\n  },\n  mounted() {\n    this.subjectId = this.$route.query.subject_id || ''\n    this.subjectName = this.$route.query.subject_name || ''\n    this.loadList()\n  }\n}\n</script>\n\n<style scoped>\n.pc-learn-page {\n  width: 1114px;\n  height: 583px;\n  position: relative;\n}\n\n.learn-panel {\n  height: 583px;\n  background: rgba(255, 255, 255, 0.78);\n  border-radius: 8px;\n  box-sizing: border-box;\n  padding: 18px 22px 20px;\n}\n\n.panel-head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-bottom: 12px;\n}\n\n.panel-title {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n.title-icon {\n  width: 13px;\n  height: 13px;\n  background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat;\n}\n\n.panel-title strong {\n  font-size: 16px;\n  line-height: 22px;\n  color: #152237;\n}\n\n.sub-title {\n  font-size: 13px;\n  color: #8a98aa;\n}\n\n.resource-list {\n  height: 520px;\n  overflow-y: auto;\n  padding-right: 4px;\n}\n\n.resource-list::-webkit-scrollbar {\n  width: 4px;\n}\n\n.resource-list::-webkit-scrollbar-thumb {\n  background: rgba(88, 124, 168, 0.22);\n  border-radius: 999px;\n}\n\n.resource-item {\n  min-height: 72px;\n  margin-bottom: 10px;\n  padding: 18px 30px 18px 28px;\n  background: #dce9ff;\n  border-radius: 14px;\n  box-sizing: border-box;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  cursor: pointer;\n}\n\n.item-main {\n  min-width: 0;\n  flex: 1;\n}\n\n.item-name {\n  font-size: 15px;\n  line-height: 22px;\n  color: #1c2636;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.item-status {\n  width: 90px;\n  text-align: right;\n  font-size: 13px;\n}\n\n.item-status.done {\n  color: #2ea46f;\n}\n\n.item-status.todo {\n  color: #97a0ad;\n}\n\n.empty-state {\n  height: 520px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #8a98aa;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcReadLearn.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcReadLearn.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcReadLearn.vue?vue&type=template&id=4af9108e&scoped=true\"\nimport script from \"./PcReadLearn.vue?vue&type=script&lang=js\"\nexport * from \"./PcReadLearn.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcReadLearn.vue?vue&type=style&index=0&id=4af9108e&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"4af9108e\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-listen-praxis\"},[_c('div',{staticClass:\"breadcrumb\"},[_vm._v(\"当前位置：首页>听闻天下>\"+_vm._s(_vm.resourceName))]),(!_vm.dialogShow)?_c('div',{staticClass:\"captcha-panel\"},[_c('img',{attrs:{\"src\":_vm.imageBase64,\"alt\":\"\"},on:{\"click\":_vm.refreshCaptcha}}),_c('div',{staticClass:\"captcha-row\"},[_c('span',[_vm._v(\"请输入验证码：\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.verifyCode),expression:\"verifyCode\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.verifyCode)},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.checkCaptchaCode.apply(null, arguments)},\"input\":function($event){if($event.target.composing)return;_vm.verifyCode=$event.target.value}}})]),_c('button',{attrs:{\"type\":\"button\"},on:{\"click\":_vm.checkCaptchaCode}},[_vm._v(\"提交\")])]):_c('div',{staticClass:\"listen-layout\"},[_c('main',{staticClass:\"left-col\"},[_c('section',{staticClass:\"audio-panel\"},[_c('button',{staticClass:\"origin-link\",class:{ enabled: _vm.canReadOrigin },attrs:{\"type\":\"button\"},on:{\"click\":_vm.toggleOrigin}},[_vm._v(\" \"+_vm._s(_vm.canReadOrigin ? '查看原文' : '交卷后再看原文')+\" \")]),_c('h1',[_vm._v(_vm._s(_vm.resourceName))]),(!_vm.hasDirections)?_c('div',{staticClass:\"directions\"},[_vm._v(\"Directions: Listen to the passage and choose the best answer.\")]):_vm._e(),(_vm.typeId === 'audio')?_c('div',{staticClass:\"audio-row\"},[_c('audio',{ref:\"audioPlayer\",attrs:{\"src\":_vm.audioSrc},on:{\"timeupdate\":_vm.updateTime,\"loadedmetadata\":_vm.loadMetadata,\"ended\":_vm.onAudioEnded}}),_c('button',{staticClass:\"play-btn\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.toggleAudio}},[(!_vm.isPlaying)?_c('span'):_c('i')]),_c('div',{staticClass:\"progress-track\",on:{\"click\":_vm.seekAudio}},[_c('span',{style:({ width: _vm.audioPercent + '%' })})]),_c('em',[_vm._v(_vm._s(_vm.durationText))])]):(_vm.typeId === 'video')?_c('video',{ref:\"videoPlayer\",staticClass:\"video-player\",attrs:{\"src\":_vm.audioSrc,\"controls\":\"\"}}):_vm._e()]),_c('section',{staticClass:\"question-panel\"},[(_vm.loading)?_c('div',{staticClass:\"empty-state\"},[_vm._v(\"加载中...\")]):(_vm.showOrigin && _vm.isPdfResource)?_c('PdfViewer',{attrs:{\"src\":_vm.resource.file_path}}):(_vm.showOrigin)?_c('div',{staticClass:\"origin-content\",domProps:{\"innerHTML\":_vm._s(_vm.resourceContent)}}):(_vm.jobList.length === 0)?_c('div',{staticClass:\"empty-state\"},[_vm._v(\"暂无练习题，请先完成听力材料。\")]):_c('div',{staticClass:\"question-list\"},_vm._l((_vm.jobList),function(item,index){return _c('article',{key:item.id || index,staticClass:\"question-block\"},[(item.directions && item.directions.trim())?_c('div',{staticClass:\"question-directions\",domProps:{\"innerHTML\":_vm._s(item.directions)}}):_vm._e(),_c('h2',[_vm._v(\"题\"+_vm._s(index + 1))]),(item.title && !_vm.isInputType(item))?_c('div',{staticClass:\"question-title\",domProps:{\"innerHTML\":_vm._s(item.title)}}):_vm._e(),(item.type_id == 1 || item.type_id == 4)?_c('div',{staticClass:\"option-list\"},_vm._l((item.optionsArray),function(child,childIndex){return _c('button',{key:child.label || childIndex,staticClass:\"option-row\",class:{ checked: child.is_check == 1 },attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.selectOption(index, childIndex)}}},[_c('span',[_vm._v(_vm._s(child.label))]),_c('em',[_vm._v(_vm._s(child.title))])])}),0):(item.type_id == 3 || item.type_id == 6)?_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(item.user_answer),expression:\"item.user_answer\"}],staticClass:\"text-answer\",attrs:{\"placeholder\":\"请输入答案\"},domProps:{\"value\":(item.user_answer)},on:{\"input\":[function($event){if($event.target.composing)return;_vm.$set(item, \"user_answer\", $event.target.value)},function($event){return _vm.markTextAnswer(index)}]}}):(item.type_id == 2)?_c('div',{staticClass:\"fill-answer\"},[_c('div',{staticClass:\"fill-title\"},[_vm._l((item.titleChunks),function(chunk,chunkIndex){return [(!chunk.isInput)?_c('span',{key:`t-${chunkIndex}`,domProps:{\"innerHTML\":_vm._s(chunk.text)}}):_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.insertWordAnswers[item.id][chunk.inputIndex]),expression:\"insertWordAnswers[item.id][chunk.inputIndex]\"}],key:`i-${chunkIndex}`,attrs:{\"type\":\"text\",\"placeholder\":`(${chunk.inputIndex + 1})`},domProps:{\"value\":(_vm.insertWordAnswers[item.id][chunk.inputIndex])},on:{\"input\":[function($event){if($event.target.composing)return;_vm.$set(_vm.insertWordAnswers[item.id], chunk.inputIndex, $event.target.value)},function($event){return _vm.markFillAnswer(index, chunk.inputIndex)}]}})]})],2)]):(item.type_id == 5 || item.type_id == 7 || item.type_id == 8)?_c('div',{staticClass:\"fill-answer\"},[_c('div',{staticClass:\"fill-title\"},[_vm._l((item.titleChunks),function(chunk,chunkIndex){return [(!chunk.isInput)?_c('span',{key:`t-${chunkIndex}`,domProps:{\"innerHTML\":_vm._s(chunk.text)}}):_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.insertWordAnswers[item.id][chunk.inputIndex]),expression:\"insertWordAnswers[item.id][chunk.inputIndex]\"}],key:`s-${chunkIndex}`,on:{\"change\":[function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.$set(_vm.insertWordAnswers[item.id], chunk.inputIndex, $event.target.multiple ? $$selectedVal : $$selectedVal[0])},function($event){return _vm.markFillAnswer(index, chunk.inputIndex)}]}},[_c('option',{attrs:{\"value\":\"\"}},[_vm._v(\"请选择\")]),_vm._l((_vm.selectOptions(item, chunk.inputIndex)),function(option){return _c('option',{key:`${option.label}-${option.title}`,domProps:{\"value\":`${option.label}-${option.title}`}},[_vm._v(\" \"+_vm._s(option.label)+\" - \"+_vm._s(option.title)+\" \")])})],2)]})],2)]):_c('div',{staticClass:\"unsupported\"},[_vm._v(\"该题型暂不支持 PC 端作答。\")])])}),0)],1)]),_c('aside',{staticClass:\"answer-side\"},[_c('section',{staticClass:\"history-card\",on:{\"click\":_vm.toHistoryList}},[_vm._m(0),_c('div',{staticClass:\"history-score\"},[_c('strong',[_vm._v(_vm._s(_vm.latestHistory.right_count || 0))]),_vm._v(\"/\"+_vm._s(_vm.latestHistory.total_count || _vm.totalCount)+\" \"),_c('span',[_vm._v(\"（第\"+_vm._s(_vm.historyList.length || 0)+\"次）\")]),_c('p',[_vm._v(\"正确率：\"+_vm._s(_vm.historyRate(_vm.latestHistory))+\"%\")])]),_c('div',{staticClass:\"history-meta\"},[_c('button',{attrs:{\"type\":\"button\"}},[_vm._v(\"全部\")]),_c('span',[_vm._v(\"交卷时间：\"+_vm._s(_vm.latestHistory.create_time || '-'))])])]),_c('section',{staticClass:\"answer-card\"},[_c('div',{staticClass:\"card-head\"},[_c('div',{staticClass:\"panel-title\"},[_c('span',{staticClass:\"title-icon\"}),_c('strong',[_vm._v(\"答题卡(\"+_vm._s(_vm.answeredCount)+\"/\"+_vm._s(_vm.totalCount)+\")\")])]),(_vm.timerText)?_c('span',[_vm._v(\"计时\"+_vm._s(_vm.timerText))]):_vm._e()]),_c('div',{staticClass:\"card-grid\"},_vm._l((_vm.answerCards),function(card){return _c('button',{key:card.key,class:{ active: _vm.isCardActive(card), done: card.done },attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.scrollToAnswer(card)}}},[_vm._v(\" \"+_vm._s(card.label)+\" \")])}),0)]),_c('button',{staticClass:\"submit-btn\",attrs:{\"type\":\"button\",\"disabled\":_vm.submitting},on:{\"click\":_vm.openSubmitConfirm}},[_vm._v(\" \"+_vm._s(_vm.submitting ? '提交中...' : '交卷')+\" \")])])]),(_vm.dialogShow)?_c('PcAiAssistant',{attrs:{\"scene\":\"listen-praxis\",\"resources-id\":_vm.resourcesId}}):_vm._e(),(_vm.submitConfirmVisible)?_c('div',{staticClass:\"submit-confirm-mask\",on:{\"click\":function($event){if($event.target !== $event.currentTarget)return null;_vm.submitConfirmVisible = false}}},[_c('section',{staticClass:\"submit-confirm-card\"},[_c('div',{staticClass:\"submit-confirm-head\"},[_c('div',{staticClass:\"panel-title\"},[_c('span',{staticClass:\"title-icon\"}),_c('strong',[_vm._v(\"答题卡(\"+_vm._s(_vm.answeredCount)+\"/\"+_vm._s(_vm.totalCount)+\")\")])]),(_vm.timerText)?_c('span',[_vm._v(\"计时\"+_vm._s(_vm.timerText))]):_vm._e()]),_c('div',{staticClass:\"submit-confirm-grid\"},_vm._l((_vm.answerCards),function(card){return _c('button',{key:card.key,class:{ active: _vm.isCardActive(card), done: card.done },attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.scrollToAnswer(card)}}},[_vm._v(\" \"+_vm._s(card.label)+\" \")])}),0),_c('button',{staticClass:\"submit-confirm-btn\",attrs:{\"type\":\"button\",\"disabled\":_vm.submitting},on:{\"click\":_vm.confirmSubmit}},[_vm._v(\" 确定 \")])])]):_vm._e()],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"history-title\"},[_vm._v(\"答题\"),_c('br'),_vm._v(\"记录\")])\n}]\n\nexport { render, staticRenderFns }","<template>\r\n  <div class=\"pc-listen-praxis\">\r\n    <div class=\"breadcrumb\">当前位置：首页&gt;听闻天下&gt;{{ resourceName }}</div>\n\r\n    <div v-if=\"!dialogShow\" class=\"captcha-panel\">\r\n      <img :src=\"imageBase64\" alt=\"\" @click=\"refreshCaptcha\" />\r\n      <div class=\"captcha-row\">\r\n        <span>请输入验证码：</span>\r\n        <input v-model=\"verifyCode\" type=\"text\" @keyup.enter=\"checkCaptchaCode\" />\r\n      </div>\r\n      <button type=\"button\" @click=\"checkCaptchaCode\">提交</button>\r\n    </div>\r\n\r\n    <div v-else class=\"listen-layout\">\r\n      <main class=\"left-col\">\r\n        <section class=\"audio-panel\">\r\n  \r\n          <button type=\"button\" class=\"origin-link\" :class=\"{ enabled: canReadOrigin }\" @click=\"toggleOrigin\">\r\n            {{ canReadOrigin ? '查看原文' : '交卷后再看原文' }}\r\n          </button>\r\n\r\n          <h1>{{ resourceName }}</h1>\r\n          <div v-if=\"!hasDirections\" class=\"directions\">Directions: Listen to the passage and choose the best answer.</div>\r\n\r\n          <div v-if=\"typeId === 'audio'\" class=\"audio-row\">\r\n            <audio\r\n              ref=\"audioPlayer\"\r\n              :src=\"audioSrc\"\r\n              @timeupdate=\"updateTime\"\r\n              @loadedmetadata=\"loadMetadata\"\r\n              @ended=\"onAudioEnded\"\r\n            ></audio>\r\n            <button type=\"button\" class=\"play-btn\" @click=\"toggleAudio\">\r\n              <span v-if=\"!isPlaying\"></span>\r\n              <i v-else></i>\r\n            </button>\r\n            <div class=\"progress-track\" @click=\"seekAudio\">\r\n              <span :style=\"{ width: audioPercent + '%' }\"></span>\r\n            </div>\r\n            <em>{{ durationText }}</em>\r\n          </div>\r\n\r\n          <video\r\n            v-else-if=\"typeId === 'video'\"\r\n            ref=\"videoPlayer\"\r\n            class=\"video-player\"\r\n            :src=\"audioSrc\"\r\n            controls\r\n          ></video>\r\n        </section>\r\n\r\n        <section class=\"question-panel\">\r\n          <div v-if=\"loading\" class=\"empty-state\">加载中...</div>\r\n          <PdfViewer v-else-if=\"showOrigin && isPdfResource\" :src=\"resource.file_path\" />\n          <div v-else-if=\"showOrigin\" class=\"origin-content\" v-html=\"resourceContent\"></div>\n          <div v-else-if=\"jobList.length === 0\" class=\"empty-state\">暂无练习题，请先完成听力材料。</div>\r\n          <div v-else class=\"question-list\">\r\n            <article v-for=\"(item, index) in jobList\" :key=\"item.id || index\" class=\"question-block\">\r\n              <div\r\n                v-if=\"item.directions && item.directions.trim()\"\r\n                class=\"question-directions\"\r\n                v-html=\"item.directions\"\r\n              ></div>\r\n              <h2>题{{ index + 1 }}</h2>\r\n              <div v-if=\"item.title && !isInputType(item)\" class=\"question-title\" v-html=\"item.title\"></div>\r\n\r\n              <div v-if=\"item.type_id == 1 || item.type_id == 4\" class=\"option-list\">\r\n                <button\r\n                  v-for=\"(child, childIndex) in item.optionsArray\"\r\n                  :key=\"child.label || childIndex\"\r\n                  type=\"button\"\r\n                  class=\"option-row\"\r\n                  :class=\"{ checked: child.is_check == 1 }\"\r\n                  @click=\"selectOption(index, childIndex)\"\r\n                >\r\n                  <span>{{ child.label }}</span>\r\n                  <em>{{ child.title }}</em>\r\n                </button>\r\n              </div>\r\n\r\n              <textarea\r\n                v-else-if=\"item.type_id == 3 || item.type_id == 6\"\r\n                v-model=\"item.user_answer\"\r\n                class=\"text-answer\"\r\n                placeholder=\"请输入答案\"\r\n                @input=\"markTextAnswer(index)\"\r\n              ></textarea>\r\n\r\n              <div v-else-if=\"item.type_id == 2\" class=\"fill-answer\">\r\n                <div class=\"fill-title\">\r\n                  <template v-for=\"(chunk, chunkIndex) in item.titleChunks\">\r\n                    <span v-if=\"!chunk.isInput\" :key=\"`t-${chunkIndex}`\" v-html=\"chunk.text\"></span>\r\n                    <input\r\n                      v-else\r\n                      :key=\"`i-${chunkIndex}`\"\r\n                      v-model=\"insertWordAnswers[item.id][chunk.inputIndex]\"\r\n                      type=\"text\"\r\n                      :placeholder=\"`(${chunk.inputIndex + 1})`\"\r\n                      @input=\"markFillAnswer(index, chunk.inputIndex)\"\r\n                    />\r\n                  </template>\r\n                </div>\r\n              </div>\r\n\r\n              <div v-else-if=\"item.type_id == 5 || item.type_id == 7 || item.type_id == 8\" class=\"fill-answer\">\r\n                <div class=\"fill-title\">\r\n                  <template v-for=\"(chunk, chunkIndex) in item.titleChunks\">\r\n                    <span v-if=\"!chunk.isInput\" :key=\"`t-${chunkIndex}`\" v-html=\"chunk.text\"></span>\r\n                    <select\r\n                      v-else\r\n                      :key=\"`s-${chunkIndex}`\"\r\n                      v-model=\"insertWordAnswers[item.id][chunk.inputIndex]\"\r\n                      @change=\"markFillAnswer(index, chunk.inputIndex)\"\r\n                    >\r\n                      <option value=\"\">请选择</option>\r\n                      <option\r\n                        v-for=\"option in selectOptions(item, chunk.inputIndex)\"\r\n                        :key=\"`${option.label}-${option.title}`\"\r\n                        :value=\"`${option.label}-${option.title}`\"\r\n                      >\r\n                        {{ option.label }} - {{ option.title }}\r\n                      </option>\r\n                    </select>\r\n                  </template>\r\n                </div>\r\n              </div>\r\n\r\n              <div v-else class=\"unsupported\">该题型暂不支持 PC 端作答。</div>\r\n            </article>\r\n          </div>\r\n        </section>\r\n      </main>\r\n\r\n      <aside class=\"answer-side\">\r\n        <section class=\"history-card\" @click=\"toHistoryList\">\r\n          <div class=\"history-title\">答题<br>记录</div>\r\n          <div class=\"history-score\">\r\n            <strong>{{ latestHistory.right_count || 0 }}</strong>/{{ latestHistory.total_count || totalCount }}\r\n            <span>（第{{ historyList.length || 0 }}次）</span>\r\n            <p>正确率：{{ historyRate(latestHistory) }}%</p>\r\n          </div>\r\n          <div class=\"history-meta\">\r\n            <button type=\"button\">全部</button>\r\n            <span>交卷时间：{{ latestHistory.create_time || '-' }}</span>\r\n          </div>\r\n        </section>\r\n        <section class=\"answer-card\">\r\n          <div class=\"card-head\">\r\n            <div class=\"panel-title\">\r\n              <span class=\"title-icon\"></span>\r\n              <strong>答题卡({{ answeredCount }}/{{ totalCount }})</strong>\r\n            </div>\r\n            <span v-if=\"timerText\">计时{{ timerText }}</span>\r\n          </div>\r\n          <div class=\"card-grid\">\r\n            <button\r\n              v-for=\"card in answerCards\"\r\n              :key=\"card.key\"\r\n              type=\"button\"\r\n              :class=\"{ active: isCardActive(card), done: card.done }\"\r\n              @click=\"scrollToAnswer(card)\"\r\n            >\r\n              {{ card.label }}\r\n            </button>\r\n          </div>\r\n        </section>\r\n        <button type=\"button\" class=\"submit-btn\" :disabled=\"submitting\" @click=\"openSubmitConfirm\">\r\n          {{ submitting ? '提交中...' : '交卷' }}\r\n        </button>\r\n      </aside>\r\n    </div>\r\n    <PcAiAssistant v-if=\"dialogShow\" scene=\"listen-praxis\" :resources-id=\"resourcesId\" />\n\r\n    <div v-if=\"submitConfirmVisible\" class=\"submit-confirm-mask\" @click.self=\"submitConfirmVisible = false\">\r\n      <section class=\"submit-confirm-card\">\r\n        <div class=\"submit-confirm-head\">\r\n          <div class=\"panel-title\">\r\n            <span class=\"title-icon\"></span>\r\n            <strong>答题卡({{ answeredCount }}/{{ totalCount }})</strong>\r\n          </div>\r\n          <span v-if=\"timerText\">计时{{ timerText }}</span>\r\n        </div>\r\n        <div class=\"submit-confirm-grid\">\r\n          <button\r\n            v-for=\"card in answerCards\"\r\n            :key=\"card.key\"\r\n            type=\"button\"\r\n            :class=\"{ active: isCardActive(card), done: card.done }\"\r\n            @click=\"scrollToAnswer(card)\"\r\n          >\r\n            {{ card.label }}\r\n          </button>\r\n        </div>\r\n        <button type=\"button\" class=\"submit-confirm-btn\" :disabled=\"submitting\" @click=\"confirmSubmit\">\r\n          确定\r\n        </button>\r\n      </section>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport { createCaptcha, checkCaptcha, getHistoryList, getJobList, saveAccessLog, submitData, updateUserStudy } from '@/api/listen'\r\nimport { decrypt } from '@/api/aes'\nimport PdfViewer from '@/components/PdfViewer'\nimport PcAiAssistant from '@/components/PcAiAssistant.vue'\nimport { normalizeHtmlEntities } from '@/utils/html'\r\n\r\nexport default {\r\n  name: 'PcListenPraxis',\r\n  components: { PdfViewer, PcAiAssistant },\n  data() {\r\n    return {\r\n      dialogShow: true,\r\n      imageBase64: '',\r\n      verifyCode: '',\r\n      loading: false,\r\n      resources: {\r\n        resources: {}\r\n      },\r\n      jobList: [],\r\n      insertWordAnswers: {},\r\n      logId: '',\r\n      resourcesId: '',\r\n      audioSrc: '',\r\n      typeId: 'audio',\r\n      isPlaying: false,\r\n      audioPercent: 0,\r\n      currentSeconds: 0,\r\n      durationSeconds: 0,\r\n      canReadOrigin: false,\r\n      showOrigin: false,\r\n      submitting: false,\r\n      startTime: Date.now(),\r\n      nowTime: Date.now(),\r\n      timer: null,\r\n      currentIndex: 0,\r\n      currentBlankIndex: null,\r\n      submitConfirmVisible: false,\r\n      historyList: []\r\n    }\r\n  },\r\n  computed: {\r\n    resource() {\r\n      return this.resources.resources || {}\r\n    },\r\n    resourceName() {\r\n      return this.resource.name || '加载中...'\r\n    },\r\n    resourceContent() {\n      return normalizeHtmlEntities(this.resource.content)\r\n    },\n    isPdfResource() {\n      const fileType = String(this.resource.file_type || '').toLowerCase()\n      const filePath = String(this.resource.file_path || '').toLowerCase().split('?')[0]\n      return fileType.includes('pdf') || filePath.endsWith('.pdf')\n    },\n    hasDirections() {\r\n      return this.jobList.some(item => item.directions && item.directions.trim())\r\n    },\r\n    durationText() {\r\n      return this.formatTime(this.durationSeconds || this.currentSeconds)\r\n    },\r\n    answeredCount() {\r\n      return this.answerCards.filter(item => item.done).length\r\n    },\r\n    totalCount() {\r\n      return this.answerCards.length\r\n    },\r\n    latestHistory() {\r\n      return this.historyList[0] || {}\r\n    },\r\n    answerCards() {\r\n      const cards = []\r\n      this.jobList.forEach((item, index) => {\r\n        if (this.isInputType(item)) {\r\n          const blankCount = this.getBlankCount(item)\r\n          for (let blankIndex = 0; blankIndex < blankCount; blankIndex += 1) {\r\n            cards.push({\r\n              key: `${item.id || index}-${blankIndex}`,\r\n              label: `${index + 1}-${blankIndex + 1}`,\r\n              questionIndex: index,\r\n              blankIndex,\r\n              done: this.isBlankAnswered(item, blankIndex)\r\n            })\r\n          }\r\n          return\r\n        }\r\n        cards.push({\r\n          key: `${item.id || index}`,\r\n          label: `${index + 1}`,\r\n          questionIndex: index,\r\n          blankIndex: null,\r\n          done: this.isAnswered(item)\r\n        })\r\n      })\r\n      return cards\r\n    },\r\n    timerText() {\r\n      const seconds = Math.max(0, Math.floor((this.nowTime - this.startTime) / 1000))\r\n      return this.formatTime(seconds)\r\n    }\r\n  },\r\n  beforeDestroy() {\r\n    if (this.timer) clearInterval(this.timer)\r\n  },\r\n  methods: {\r\n    getUser() {\r\n      return JSON.parse(localStorage.getItem('user') || '{}')\r\n    },\r\n    normalizeOptions(options) {\r\n      if (Array.isArray(options)) return options\r\n      if (!options) return []\r\n      try {\r\n        return JSON.parse(options)\r\n      } catch (error) {\r\n        return []\r\n      }\r\n    },\r\n    normalizeSelectAnswers(optionsAnswer) {\r\n      if (Array.isArray(optionsAnswer)) return optionsAnswer\r\n      if (!optionsAnswer) return []\r\n      try {\r\n        return JSON.parse(optionsAnswer)\r\n      } catch (error) {\r\n        return []\r\n      }\r\n    },\r\n    withTimeout(promise, timeoutMs = 12000) {\r\n      return Promise.race([\r\n        promise,\r\n        new Promise(resolve => {\r\n          setTimeout(() => resolve({ __timeout: true }), timeoutMs)\r\n        })\r\n      ])\r\n    },\r\n    normalizeJobList(list) {\r\n      return (list || []).map(item => {\r\n        const row = {\r\n          ...item,\r\n          is_check: Number(item.is_check) || 0,\r\n          user_answer: item.user_answer || ''\r\n        }\r\n        if (row.type_id == 1 || row.type_id == 3 || row.type_id == 4 || row.type_id == 6) {\r\n          row.optionsArray = this.normalizeOptions(row.options).map(child => ({\r\n            ...child,\r\n            is_check: Number(child.is_check) || 0\r\n          }))\r\n        } else {\r\n          row.optionsArray = this.normalizeOptions(row.options)\r\n        }\r\n        row.optionsArray1 = this.normalizeSelectAnswers(row.options_answer)\r\n        if (this.isInputType(row)) {\r\n          row.titleChunks = this.parseFillTitle(row.title)\r\n          const count = this.getBlankCount(row)\r\n          this.$set(this.insertWordAnswers, row.id, Array(count).fill(''))\r\n        }\r\n        return row\r\n      })\r\n    },\r\n    isInputType(item) {\r\n      return item.type_id == 2 || item.type_id == 5 || item.type_id == 7 || item.type_id == 8\r\n    },\r\n    countPlaceholders(text) {\r\n      const value = String(text || '')\r\n      const matches = value.match(/_\\(\\d+\\)_+/g)\r\n      return matches ? matches.length : 0\r\n    },\r\n    parseFillTitle(text) {\r\n      const value = String(text || '')\r\n        .replace(/__锛?/g, '_(')\r\n        .replace(/锛塤_/g, ')_')\r\n        .replace(/__（/g, '_(')\r\n        .replace(/）_/g, ')_')\r\n        .replace(/<p[^>]*>/gi, '<br>')\r\n        .replace(/<\\/p>/gi, '')\r\n      const chunks = []\r\n      const regex = /_\\((\\d+)\\)_+/g\r\n      let lastIndex = 0\r\n      let match\r\n\r\n      while ((match = regex.exec(value)) !== null) {\r\n        if (match.index > lastIndex) {\r\n          chunks.push({ isInput: false, text: value.slice(lastIndex, match.index) })\r\n        }\r\n        chunks.push({ isInput: true, inputIndex: chunks.filter(chunk => chunk.isInput).length })\r\n        lastIndex = regex.lastIndex\r\n      }\r\n      if (lastIndex < value.length) {\r\n        chunks.push({ isInput: false, text: value.slice(lastIndex) })\r\n      }\r\n      return chunks.length ? chunks : [{ isInput: false, text: value }]\r\n    },\r\n    normalizeFillText(text) {\r\n      return String(text || '')\r\n        .replace(/<p[^>]*>/gi, '<br>')\r\n        .replace(/<\\/p>/gi, '')\r\n        .replace(/&nbsp;/gi, ' ')\r\n    },\r\n    parseFillTitle(text) {\r\n      const source = this.normalizeFillText(text)\r\n      const normalized = source.replace(\r\n        /_+\\s*[\\(（]+\\s*(\\d+)\\s*[\\)）]*\\s*_*\\s*[\\(（]*/g,\r\n        (_, number) => `[[BLANK:${number}]]`\r\n      )\r\n      const chunks = []\r\n      const regex = /\\[\\[BLANK:(\\d+)\\]\\]/g\r\n      let lastIndex = 0\r\n      let match\r\n\r\n      while ((match = regex.exec(normalized)) !== null) {\r\n        if (match.index > lastIndex) {\r\n          chunks.push({ isInput: false, text: normalized.slice(lastIndex, match.index) })\r\n        }\r\n        chunks.push({ isInput: true, inputIndex: chunks.filter(chunk => chunk.isInput).length })\r\n        lastIndex = regex.lastIndex\r\n      }\r\n      if (lastIndex < normalized.length) {\r\n        chunks.push({ isInput: false, text: normalized.slice(lastIndex) })\r\n      }\r\n      return chunks.length ? chunks : [{ isInput: false, text: source }]\r\n    },\r\n    selectOptions(item, inputIndex) {\r\n      const answerGroup = item.optionsArray1 && item.optionsArray1[inputIndex]\r\n      if (answerGroup && Array.isArray(answerGroup.options)) {\r\n        return answerGroup.options\r\n      }\r\n      return item.optionsArray || []\r\n    },\r\n    historyRate(item) {\r\n      const total = Number(item && item.total_count) || Number(this.totalCount) || 0\r\n      const right = Number(item && item.right_count) || 0\r\n      return total ? ((right / total) * 100).toFixed(2) : '0.00'\r\n    },\r\n    async loadHistoryList() {\r\n      const user = this.getUser()\r\n      if (!user.sid || !this.resourcesId) return\r\n      const response = await getHistoryList({ sid: user.sid, resource_id: this.resourcesId })\r\n      if (response.code === 100 && Array.isArray(response.data)) {\r\n        this.historyList = response.data.slice().reverse()\r\n      } else {\r\n        this.historyList = []\r\n      }\r\n    },\r\n    toHistoryList() {\r\n      this.$router.push({ name: 'PcPracticeHistoryListen', query: { resources_id: this.resourcesId } })\r\n    },\r\n    toHistoryDetail(item) {\r\n      if (!item) return\r\n      this.$router.push({ name: 'PcPracticeDetailListen', query: { resource_id: this.resourcesId, his_id: item.id } })\r\n    },\r\n    async saveAccessLog() {\r\n      const user = this.getUser()\r\n      if (!user.sid) {\r\n        await this.loadJobList()\r\n        return\r\n      }\r\n      try {\r\n        const response = await this.withTimeout(saveAccessLog({ sid: user.sid, res_id: this.resourcesId }))\r\n        if (response && response.__timeout) {\r\n          await this.loadJobList()\r\n          return\r\n        }\r\n        if (response.code !== 100) {\r\n          await this.loadJobList()\r\n          return\r\n        }\r\n        if (response.data == 2) {\r\n          const history = await this.withTimeout(getHistoryList({ sid: user.sid, resource_id: this.resourcesId }))\r\n          if (history && !history.__timeout && history.code === 100 && Array.isArray(history.data) && history.data.length > 0) {\r\n            await this.loadJobList()\r\n            return\r\n          }\r\n          this.dialogShow = false\r\n          await this.refreshCaptcha()\r\n          return\r\n        }\r\n      } catch (error) {\r\n        console.error('saveAccessLog failed', error)\r\n      }\r\n      await this.loadJobList()\r\n    },\r\n    async refreshCaptcha() {\r\n      const user = this.getUser()\r\n      if (!user.sid) return\r\n      const response = await createCaptcha({ sid: user.sid })\r\n      if (response.code === 100) {\r\n        this.imageBase64 = `data:image/png;base64,${response.data.imageBase64}`\r\n      }\r\n    },\r\n    async checkCaptchaCode() {\r\n      const user = this.getUser()\r\n      if (!user.sid) return\r\n      try {\r\n        const response = await this.withTimeout(checkCaptcha({ sid: user.sid, captchaCode: this.verifyCode }))\r\n        if (response && response.__timeout) {\r\n          await this.refreshCaptcha()\r\n          return\r\n        }\r\n        if (response.code === 100 && response.data == 1) {\r\n          this.dialogShow = true\r\n          await this.loadJobList()\r\n        } else {\r\n          await this.refreshCaptcha()\r\n        }\r\n      } catch (error) {\r\n        console.error('checkCaptchaCode failed', error)\r\n        await this.refreshCaptcha()\r\n      }\r\n    },\r\n    async loadJobList() {\r\n      const user = this.getUser()\r\n      if (!user.sid) return\r\n      this.loading = true\r\n      try {\r\n        const response = await this.withTimeout(getJobList({ sid: user.sid, resource_id: this.resourcesId }))\r\n        if (!response || response.__timeout) {\r\n          throw new Error('getJobList timeout')\r\n        }\r\n        if (response.code === 100) {\r\n          const data = response.data || { resources: {} }\r\n          const jobList = data.jobList ? JSON.parse(decrypt(data.jobList)) : []\r\n          this.resources = data\r\n          this.jobList = this.normalizeJobList(jobList)\r\n          this.audioSrc = data.resources ? data.resources.file_path : ''\r\n          this.typeId = data.resources && data.resources.type_id ? data.resources.type_id : 'audio'\r\n          this.insertWordAnswers = { ...this.insertWordAnswers }\r\n        }\r\n      } catch (error) {\r\n        console.error('loadJobList failed', error)\r\n        this.resources = { resources: {} }\r\n        this.jobList = []\r\n        this.audioSrc = ''\r\n        this.typeId = 'audio'\r\n      } finally {\r\n        this.loading = false\r\n      }\r\n    },\r\n    selectOption(itemIndex, optionIndex) {\r\n      const item = this.jobList[itemIndex]\r\n      if (!item) return\r\n      if (item.type_id == 4) {\r\n        item.optionsArray[optionIndex].is_check = item.optionsArray[optionIndex].is_check == 1 ? 0 : 1\r\n      } else {\r\n        item.optionsArray.forEach((child, index) => {\r\n          child.is_check = index === optionIndex ? 1 : 0\r\n        })\r\n      }\r\n      item.is_check = this.isAnswered(item) ? 1 : 0\r\n      this.currentIndex = itemIndex\r\n      this.jobList = [...this.jobList]\r\n    },\r\n    markTextAnswer(index) {\r\n      const item = this.jobList[index]\r\n      item.is_check = item.user_answer && item.user_answer.trim() ? 1 : 0\r\n      this.currentIndex = index\r\n      this.currentBlankIndex = null\r\n      this.jobList = [...this.jobList]\r\n    },\r\n    markFillAnswer(index, blankIndex = null) {\r\n      const item = this.jobList[index]\r\n      item.is_check = this.isAnswered(item) ? 1 : 0\r\n      this.currentIndex = index\r\n      this.currentBlankIndex = blankIndex\r\n      this.jobList = [...this.jobList]\r\n    },\r\n    getBlankCount(item) {\r\n      if (!item) return 0\r\n      const chunkCount = (item.titleChunks || []).filter(chunk => chunk.isInput).length\r\n      const answerCount = (this.insertWordAnswers[item.id] || []).length\r\n      const standardCount = item.type_id == 2 ? (item.optionsArray || []).length : (item.optionsArray1 || []).length\r\n      return Math.max(chunkCount, standardCount, answerCount, 1)\r\n    },\r\n    isBlankAnswered(item, blankIndex) {\r\n      const answers = this.insertWordAnswers[item.id] || []\r\n      return Boolean(answers[blankIndex] && String(answers[blankIndex]).trim())\r\n    },\r\n    isAnswered(item) {\r\n      if (!item) return false\r\n      if (item.type_id == 1 || item.type_id == 4) {\r\n        return (item.optionsArray || []).some(child => child.is_check == 1)\r\n      }\r\n      if (item.type_id == 3 || item.type_id == 6) {\r\n        return Boolean(item.user_answer && item.user_answer.trim())\r\n      }\r\n      if (this.isInputType(item)) {\r\n        const answers = this.insertWordAnswers[item.id] || []\r\n        return answers.some(answer => answer && String(answer).trim())\r\n      }\r\n      return item.is_check == 1\r\n    },\r\n    // Keep fill-in grading consistent with the mobile Praxis component.\r\n    // Answers may contain alternatives separated by '&', punctuation and\r\n    // whitespace; numeric answers are compared as a complete phrase while\r\n    // single-character answers are treated as selectable alternatives.\r\n    normalizeAnswerText(value) {\r\n      return String(value || '')\r\n        .trim()\r\n        .toLowerCase()\r\n        .replace(/[,，]+/g, ' ')\r\n        .replace(/[.。]+/g, '')\r\n        .replace(/\\s+/g, ' ')\r\n    },\r\n    isFillRight(userAnswer, standardAnswer) {\r\n      const userText = this.normalizeAnswerText(userAnswer)\r\n      if (!userText) return 0\r\n      const raw = String(standardAnswer || '').trim()\r\n      if (!raw) return 0\r\n      let standards = raw.split(/\\s*&\\s*/).map(item => this.normalizeAnswerText(item)).filter(Boolean)\r\n      const tokens = raw.split(/\\s*&\\s*|\\s+/).map(item => this.normalizeAnswerText(item)).filter(Boolean)\r\n      if (tokens.length > 1 && tokens.every(item => item.length < 2)) {\r\n        const answerSet = new Set(tokens)\r\n        const userTokens = userText.split(/\\s+/).filter(Boolean)\r\n        return userTokens.length > 0 && userTokens.every(item => answerSet.has(item)) ? 1 : 0\r\n      }\r\n      if (tokens.length > 0 && tokens.every(item => /^\\d+$/.test(item))) {\r\n        return this.normalizeAnswerText(tokens.join(' ')) === userText ? 1 : 0\r\n      }\r\n      // For word/phrase answers, '&' separates accepted alternatives.\r\n      standards = standards.map(item => item.replace(/[,，]+/g, '').trim())\r\n      return standards.includes(userText) ? 1 : 0\r\n    },\r\n    buildSubmitData() {\r\n      const user = this.getUser()\r\n      const submitList = []\r\n      this.jobList.forEach(item => {\r\n        if (item.type_id == 1) {\r\n          const selected = (item.optionsArray || []).find(child => child.is_check == 1)\r\n          const answer = selected ? selected.label : ''\r\n          submitList.push({\r\n            user_id: user.sid,\r\n            job_id: item.id,\r\n            type_id: item.type_id,\r\n            lable: answer,\r\n            answer,\r\n            is_right: item.options_answer === answer ? 1 : 0,\r\n            resource_id: item.resource_id || this.resourcesId\r\n          })\r\n        } else if (item.type_id == 4) {\r\n          const answer = (item.optionsArray || []).filter(child => child.is_check == 1).map(child => child.label).join(',')\r\n          submitList.push({\r\n            user_id: user.sid,\r\n            job_id: item.id,\r\n            type_id: item.type_id,\r\n            answer,\r\n            is_right: item.options_answer === answer ? 1 : 0,\r\n            resource_id: item.resource_id || this.resourcesId\r\n          })\r\n        } else if (item.type_id == 3 || item.type_id == 6) {\r\n          submitList.push({\r\n            user_id: user.sid,\r\n            job_id: item.id,\r\n            type_id: item.type_id,\r\n            answer: item.user_answer || '',\r\n            is_right: 0,\r\n            resource_id: item.resource_id || this.resourcesId\r\n          })\r\n        } else if (item.type_id == 2) {\r\n          const answers = this.insertWordAnswers[item.id] || []\r\n          const count = this.getBlankCount(item)\r\n          Array.from({ length: count }).forEach((_, index) => {\r\n            const child = (item.optionsArray || [])[index] || {}\r\n            submitList.push({\r\n              user_id: user.sid,\r\n              job_id: item.id,\r\n              type_id: item.type_id,\r\n              lable: index + 1,\r\n              answer: answers[index] || '',\r\n              is_right: this.isFillRight(answers[index], child.title),\r\n              resource_id: item.resource_id || this.resourcesId\r\n            })\r\n          })\r\n        } else if (item.type_id == 5 || item.type_id == 7 || item.type_id == 8) {\r\n          const answers = this.insertWordAnswers[item.id] || []\r\n          const count = this.getBlankCount(item)\r\n          Array.from({ length: count }).forEach((_, index) => {\r\n            const child = (item.optionsArray1 || [])[index] || {}\r\n            const answer = answers[index] || ''\r\n            const selectedLabel = answer ? String(answer).split('-')[0] : ''\r\n            submitList.push({\r\n              user_id: user.sid,\r\n              job_id: item.id,\r\n              type_id: item.type_id,\r\n              lable: index + 1,\r\n              answer,\r\n              is_right: child.title === selectedLabel ? 1 : 0,\r\n              resource_id: item.resource_id || this.resourcesId\r\n            })\r\n          })\r\n        }\r\n      })\r\n      return submitList\r\n    },\r\n    openSubmitConfirm() {\r\n      if (this.submitting) return\r\n      this.submitConfirmVisible = true\r\n    },\r\n    async confirmSubmit() {\r\n      if (this.submitting) return\r\n      const user = this.getUser()\r\n      if (!user.sid) return\r\n      this.submitConfirmVisible = false\r\n      this.submitting = true\r\n      try {\r\n        const response = await submitData({ params: JSON.stringify(this.buildSubmitData()) })\r\n        if (response.code === 100) {\r\n          const resp = await updateUserStudy({ id: this.logId })\r\n          if (resp.code === 100) {\r\n            this.canReadOrigin = true\r\n            this.$router.push({ name: 'PcPracticeDetailListen', query: { resource_id: this.resourcesId } })\r\n          }\r\n        }\r\n      } finally {\r\n        this.submitting = false\r\n      }\r\n    },\r\n    toggleOrigin() {\r\n      if (!this.canReadOrigin) return\r\n      this.showOrigin = !this.showOrigin\r\n    },\r\n    toggleAudio() {\r\n      const audio = this.$refs.audioPlayer\r\n      if (!audio) return\r\n      if (this.isPlaying) {\r\n        audio.pause()\r\n        this.isPlaying = false\r\n      } else {\r\n        audio.play()\r\n        this.isPlaying = true\r\n      }\r\n    },\r\n    seekAudio(event) {\r\n      const audio = this.$refs.audioPlayer\r\n      if (!audio || !this.durationSeconds) return\r\n      const rect = event.currentTarget.getBoundingClientRect()\r\n      const percent = Math.min(1, Math.max(0, (event.clientX - rect.left) / rect.width))\r\n      audio.currentTime = percent * this.durationSeconds\r\n    },\r\n    updateTime(event) {\r\n      const audio = event.target\r\n      this.currentSeconds = audio.currentTime || 0\r\n      this.durationSeconds = audio.duration || this.durationSeconds\r\n      this.audioPercent = this.durationSeconds ? Math.floor((this.currentSeconds / this.durationSeconds) * 100) : 0\r\n    },\r\n    loadMetadata(event) {\r\n      this.durationSeconds = event.target.duration || 0\r\n    },\r\n    onAudioEnded() {\r\n      this.isPlaying = false\r\n      this.audioPercent = 100\r\n      if (this.jobList.length === 0) {\r\n        this.canReadOrigin = true\r\n      }\r\n    },\r\n    formatTime(seconds) {\r\n      const value = Number(seconds) || 0\r\n      const minutes = Math.floor(value / 60)\r\n      const remain = Math.floor(value % 60)\r\n      return `${String(minutes).padStart(2, '0')}:${String(remain).padStart(2, '0')}`\r\n    },\r\n    scrollToQuestion(index) {\r\n      this.currentIndex = index\r\n      this.currentBlankIndex = null\r\n      this.$nextTick(() => {\r\n        const list = this.$el.querySelectorAll('.question-block')\r\n        if (list[index]) list[index].scrollIntoView({ behavior: 'smooth', block: 'start' })\r\n      })\r\n    },\r\n    isCardActive(card) {\r\n      return this.currentIndex === card.questionIndex && this.currentBlankIndex === card.blankIndex\r\n    },\r\n    scrollToAnswer(card) {\r\n      this.currentIndex = card.questionIndex\r\n      this.currentBlankIndex = card.blankIndex\r\n      this.$nextTick(() => {\r\n        const list = this.$el.querySelectorAll('.question-block')\r\n        const target = list[card.questionIndex]\r\n        if (target) {\r\n          target.scrollIntoView({ behavior: 'smooth', block: 'start' })\r\n          if (card.blankIndex !== null) {\r\n            const controls = target.querySelectorAll('.fill-title input, .fill-title select')\r\n            if (controls[card.blankIndex]) controls[card.blankIndex].focus()\r\n          }\r\n        }\r\n      })\r\n    }\r\n  },\r\n  mounted() {\r\n    this.logId = this.$route.query.log_id || ''\r\n    this.resourcesId = this.$route.query.resources_id || this.$route.query.resource_id || ''\r\n    this.startTime = Date.now()\r\n    this.timer = setInterval(() => {\r\n      this.nowTime = Date.now()\r\n    }, 1000)\r\n    this.loadHistoryList()\r\n    this.saveAccessLog()\r\n  }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.pc-listen-praxis {\r\n  width: 1114px;\r\n  height: 583px;\r\n  color: #111c2d;\r\n  font-size: 13px;\r\n  position: relative;\r\n}\r\n\r\n.breadcrumb {\r\n  height: 22px;\r\n  font-size: 11px;\r\n  line-height: 18px;\r\n  color: #7d8692;\r\n}\r\n\r\n.listen-layout {\r\n  height: 541px;\r\n  display: grid;\r\n  grid-template-columns: 798px 286px;\r\n  gap: 16px;\r\n  align-items: stretch;\r\n}\r\n\r\n.left-col {\r\n  min-width: 0;\r\n  height: 541px;\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 14px;\r\n}\r\n\r\n.audio-panel,\r\n.question-panel,\r\n.answer-card,\r\n.captcha-panel {\r\n  background: rgba(255, 255, 255, 0.96);\r\n  border-radius: 6px;\r\n  box-sizing: border-box;\r\n}\r\n\r\n.audio-panel {\r\n  min-height: 166px;\r\n  height: auto;\r\n  padding: 16px 36px 18px 38px;\r\n  position: relative;\r\n}\r\n\r\n.panel-title {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n}\r\n\r\n.title-icon {\r\n  width: 13px;\r\n  height: 13px;\r\n  display: inline-block;\r\n  background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat;\r\n}\r\n\r\n.panel-title strong {\r\n  font-size: 15px;\r\n  line-height: 22px;\r\n  color: #111c2d;\r\n}\r\n\r\n.origin-link {\r\n  position: absolute;\r\n  right: 32px;\r\n  top: 16px;\r\n  border: none;\r\n  background: transparent;\r\n  color: #ff4b5c;\r\n  font-size: 11px;\r\n  cursor: pointer;\r\n}\r\n\r\n.origin-link.enabled {\r\n  color: #00529f;\r\n}\r\n\r\n.audio-panel h1 {\r\n  margin: 4px 80px 0;\r\n  font-size: 14px;\r\n  line-height: 24px;\r\n  text-align: center;\r\n  color: #111;\r\n}\r\n\r\n.directions {\r\n  margin-top: 8px;\r\n  font-size: 14px;\r\n  line-height: 20px;\r\n  font-weight: 700;\r\n  color: #151515;\r\n}\r\n\r\n.audio-row {\r\n  height: 44px;\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 14px;\r\n  margin-top: 10px;\r\n}\r\n\r\n.play-btn {\r\n  width: 30px;\r\n  height: 30px;\r\n  border: none;\r\n  border-radius: 50%;\r\n  background: linear-gradient(180deg, #79cfff, #3fa7f3);\r\n  box-shadow: 0 2px 4px rgba(39, 128, 218, 0.28);\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  cursor: pointer;\r\n}\r\n\r\n.play-btn span {\r\n  width: 0;\r\n  height: 0;\r\n  margin-left: 2px;\r\n  border-top: 7px solid transparent;\r\n  border-bottom: 7px solid transparent;\r\n  border-left: 10px solid #fff;\r\n}\r\n\r\n.play-btn i {\r\n  width: 10px;\r\n  height: 13px;\r\n  border-left: 4px solid #fff;\r\n  border-right: 4px solid #fff;\r\n}\r\n\r\n.progress-track {\r\n  flex: 1;\r\n  height: 5px;\r\n  border-radius: 999px;\r\n  background: #dedede;\r\n  cursor: pointer;\r\n  position: relative;\r\n}\r\n\r\n.progress-track span {\r\n  height: 5px;\r\n  border-radius: 999px;\r\n  display: block;\r\n  background: linear-gradient(90deg, #0189e9, #79d7ff);\r\n  position: relative;\r\n}\r\n\r\n.progress-track span::after {\r\n  content: '';\r\n  width: 13px;\r\n  height: 13px;\r\n  position: absolute;\r\n  right: -6px;\r\n  top: 50%;\r\n  transform: translateY(-50%);\r\n  border-radius: 50%;\r\n  background: #e9f7ff;\r\n  border: 2px solid #8fc8ec;\r\n  box-sizing: border-box;\r\n}\r\n\r\n.audio-row em {\r\n  width: 42px;\r\n  font-style: normal;\r\n  color: #8c8f96;\r\n  font-size: 12px;\r\n}\r\n\r\n.video-player {\r\n  width: 100%;\r\n  height: 100px;\r\n  margin-top: 8px;\r\n  background: #000;\r\n}\r\n\r\n.question-panel {\r\n  flex: 1;\r\n  min-height: 0;\r\n  height: auto;\r\n  padding: 22px 28px;\r\n  overflow-y: auto;\r\n}\r\n\r\n.question-panel::-webkit-scrollbar {\r\n  width: 4px;\r\n}\r\n\r\n.question-panel::-webkit-scrollbar-thumb {\r\n  border-radius: 999px;\r\n  background: #d5dce6;\r\n}\r\n\r\n.question-block + .question-block {\r\n  margin-top: 18px;\r\n}\r\n\r\n.question-block h2 {\r\n  margin: 0 0 8px;\r\n  font-size: 15px;\r\n  line-height: 22px;\r\n  color: #0c1320;\r\n}\r\n\r\n.question-directions,\r\n.question-title,\r\n.fill-title {\r\n  margin-bottom: 8px;\r\n  font-size: 13px;\r\n  line-height: 20px;\r\n  color: #202a39;\r\n}\r\n\r\n.question-directions {\r\n  margin-bottom: 12px;\r\n  overflow-wrap: break-word;\r\n}\r\n\r\n.question-directions ::v-deep p {\r\n  margin: 0 0 8px;\r\n}\r\n\r\n.question-directions ::v-deep p:last-child {\r\n  margin-bottom: 0;\r\n}\r\n\r\n.question-directions ::v-deep img {\r\n  max-width: 100%;\r\n  height: auto;\r\n}\r\n\r\n.option-list {\r\n  display: grid;\r\n  gap: 4px;\r\n}\r\n\r\n.option-row {\r\n  min-height: 32px;\r\n  display: grid;\r\n  grid-template-columns: 38px 1fr;\r\n  align-items: center;\r\n  border: none;\r\n  background: #f0f0f2;\r\n  color: #1c2636;\r\n  text-align: left;\r\n  cursor: pointer;\r\n  padding: 0;\r\n  font-size: 13px;\r\n}\r\n\r\n.option-row span {\r\n  text-align: center;\r\n  color: #5d6570;\r\n  font-weight: 700;\r\n}\r\n\r\n.option-row em {\r\n  font-style: normal;\r\n  overflow: hidden;\r\n  white-space: nowrap;\r\n  text-overflow: ellipsis;\r\n}\r\n\r\n.option-row.checked {\r\n  background: #00529f;\r\n  color: #fff;\r\n}\r\n\r\n.option-row.checked span {\r\n  color: #fff;\r\n}\r\n\r\n.text-answer {\r\n  width: 100%;\r\n  height: 86px;\r\n  border: 1px solid #d9e1eb;\r\n  border-radius: 4px;\r\n  resize: none;\r\n  padding: 10px;\r\n  box-sizing: border-box;\r\n  font-size: 13px;\r\n  outline: none;\r\n}\r\n\r\n.fill-grid {\r\n  display: grid;\r\n  grid-template-columns: repeat(2, minmax(0, 1fr));\r\n  gap: 8px 14px;\r\n}\r\n\r\n.fill-grid label {\r\n  display: grid;\r\n  grid-template-columns: 28px 1fr;\r\n  align-items: center;\r\n  gap: 8px;\r\n  font-size: 12px;\r\n  color: #526174;\r\n}\r\n\r\n.fill-grid input {\r\n  height: 30px;\r\n  border: 1px solid #d9e1eb;\r\n  border-radius: 4px;\r\n  padding: 0 8px;\r\n  outline: none;\r\n}\r\n\r\n.unsupported,\r\n.empty-state {\r\n  height: 160px;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  color: #8894a5;\r\n  font-size: 13px;\r\n}\r\n\r\n.origin-content {\r\n  font-size: 13px;\r\n  line-height: 23px;\r\n  color: #1f2a3a;\r\n}\r\n\r\n.answer-side {\r\n  min-width: 0;\r\n  height: 541px;\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 14px;\r\n}\r\n\r\n.history-card {\n  min-height: 76px;\n  display: grid;\n  grid-template-columns: 48px minmax(0, 1fr) 98px;\n  align-items: center;\n  gap: 8px;\n  padding: 8px 10px;\n  border-radius: 8px;\r\n  background: #fff;\r\n  cursor: pointer;\r\n}\r\n\r\n.history-title {\n  padding-right: 8px;\n  border-right: 1px solid #b8b8b8;\r\n  color: #111c2d;\r\n  font-size: 14px;\r\n  line-height: 18px;\r\n  text-align: center;\r\n}\r\n\r\n.history-score {\n  min-width: 0;\n  color: #656565;\n  font-size: 11px;\n  line-height: 17px;\n  white-space: nowrap;\n}\n\r\n.history-score strong {\n  color: #111c2d;\n  font-size: 20px;\n  white-space: nowrap;\n}\n\r\n.history-score span {\n  display: inline-block;\n  white-space: nowrap;\n}\n\r\n.history-score p {\r\n  margin: 0;\r\n}\r\n\r\n.history-meta {\n  min-width: 0;\n  color: #656565;\n  font-size: 10px;\n  line-height: 17px;\n  text-align: right;\n}\n\r\n.history-meta button {\r\n  display: block;\r\n  margin: 0 0 4px auto;\r\n  padding: 0;\r\n  border: none;\r\n  background: transparent;\r\n  color: #00529f;\r\n  font-size: 13px;\r\n  cursor: pointer;\r\n}\r\n\r\n.history-meta span {\r\n  display: block;\r\n  overflow: hidden;\r\n  text-overflow: ellipsis;\r\n  white-space: nowrap;\r\n}\r\n\r\n.answer-card {\r\n  flex: 1;\r\n  min-height: 0;\r\n  height: auto;\r\n  padding: 16px 16px 18px;\r\n  overflow-y: auto;\r\n}\r\n\r\n.card-head {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n}\r\n\r\n.card-head span {\r\n  color: #ff243d;\r\n  font-size: 11px;\r\n}\r\n\r\n.card-grid {\r\n  display: flex;\r\n  flex-wrap: wrap;\r\n  gap: 14px;\r\n  margin-top: 24px;\r\n  padding: 0 16px;\r\n}\r\n\r\n.card-grid button {\r\n  min-width: 30px;\r\n  height: 30px;\r\n  padding: 0 8px;\r\n  border: none;\r\n  border-radius: 999px;\r\n  background: #f0f0f2;\r\n  color: #8e949d;\r\n  font-size: 14px;\r\n  font-weight: 700;\r\n  cursor: pointer;\r\n}\r\n\r\n.card-grid button.active {\r\n  background: #e8f3ff;\r\n  color: #00529f;\r\n  box-shadow: inset 0 0 0 1px #00529f;\r\n}\r\n\r\n.card-grid button.done {\r\n  background: #00529f;\r\n  color: #fff;\r\n  box-shadow: none;\r\n}\r\n\r\n.card-grid button.done.active {\r\n  background: #00529f;\r\n  color: #fff;\r\n  box-shadow: 0 0 0 2px rgba(0, 82, 159, 0.18);\r\n}\r\n\r\n.submit-btn {\r\n  width: 286px;\r\n  height: 48px;\r\n  margin-top: 22px;\r\n  border: none;\r\n  border-radius: 8px;\r\n  background: #00529f;\r\n  color: #fff;\r\n  font-size: 15px;\r\n  font-weight: 700;\r\n  cursor: pointer;\r\n}\r\n\r\n.submit-btn:disabled {\r\n  background: #8aa9ca;\r\n  cursor: default;\r\n}\r\n\r\n.submit-confirm-mask {\r\n  position: fixed;\r\n  inset: 0;\r\n  z-index: 3000;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  background: rgba(13, 31, 64, 0.32);\r\n}\r\n\r\n.submit-confirm-card {\r\n  width: 300px;\r\n  min-height: 280px;\r\n  padding: 14px 16px 12px;\r\n  border-radius: 10px;\r\n  background: #dfe9fb;\r\n  box-sizing: border-box;\r\n}\r\n\r\n.submit-confirm-head {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n}\r\n\r\n.submit-confirm-head .panel-title strong {\r\n  font-size: 13px;\r\n}\r\n\r\n.submit-confirm-head span {\r\n  color: #ff243d;\r\n  font-size: 11px;\r\n}\r\n\r\n.submit-confirm-grid {\r\n  display: flex;\r\n  flex-wrap: wrap;\r\n  gap: 10px;\r\n  margin-top: 18px;\r\n  padding: 4px 6px 18px;\r\n  min-height: 128px;\r\n}\r\n\r\n.submit-confirm-grid button {\r\n  min-width: 30px;\r\n  height: 30px;\r\n  padding: 0 8px;\r\n  border: none;\r\n  border-radius: 999px;\r\n  background: #eef2f8;\r\n  color: #8e949d;\r\n  font-size: 14px;\r\n  font-weight: 700;\r\n  cursor: pointer;\r\n}\r\n\r\n.submit-confirm-grid button.active {\r\n  background: #00529f;\r\n  color: #fff;\r\n}\r\n\r\n.submit-confirm-grid button.done {\r\n  background: #00529f;\r\n  color: #fff;\r\n}\r\n\r\n.submit-confirm-grid button.done.active {\r\n  background: #00529f;\r\n  color: #fff;\r\n}\r\n\r\n.submit-confirm-btn {\r\n  width: 100%;\r\n  height: 50px;\r\n  border: none;\r\n  border-radius: 10px;\r\n  background: #00529f;\r\n  color: #fff;\r\n  font-size: 14px;\r\n  font-weight: 700;\r\n  cursor: pointer;\r\n}\r\n\r\n.submit-confirm-btn:disabled {\r\n  background: #8aa9ca;\r\n  cursor: default;\r\n}\r\n\r\n.captcha-panel {\r\n  width: 420px;\r\n  min-height: 240px;\r\n  margin: 110px auto 0;\r\n  padding: 34px;\r\n  text-align: center;\r\n}\r\n\r\n.captcha-panel img {\r\n  max-width: 180px;\r\n  height: 54px;\r\n  object-fit: contain;\r\n  cursor: pointer;\r\n}\r\n\r\n.captcha-row {\r\n  margin-top: 22px;\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  gap: 8px;\r\n  font-size: 13px;\r\n}\r\n\r\n.captcha-row input {\r\n  width: 136px;\r\n  height: 34px;\r\n  border: 1px solid #d6deeb;\r\n  border-radius: 4px;\r\n  padding: 0 8px;\r\n}\r\n\r\n.captcha-panel button {\r\n  width: 180px;\r\n  height: 40px;\r\n  margin-top: 24px;\r\n  border: none;\r\n  border-radius: 22px;\r\n  background: #00529f;\r\n  color: #fff;\r\n  cursor: pointer;\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcListenPraxis.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcListenPraxis.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcListenPraxis.vue?vue&type=template&id=56f774dc&scoped=true\"\nimport script from \"./PcListenPraxis.vue?vue&type=script&lang=js\"\nexport * from \"./PcListenPraxis.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcListenPraxis.vue?vue&type=style&index=0&id=56f774dc&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"56f774dc\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-read-praxis\"},[_c('div',{staticClass:\"breadcrumb\"},[_vm._v(\"当前位置：首页>书海遨游>\"+_vm._s(_vm.resourceName))]),(!_vm.dialogShow)?_c('div',{staticClass:\"captcha-panel\"},[_c('img',{attrs:{\"src\":_vm.imageBase64,\"alt\":\"\"},on:{\"click\":_vm.refreshCaptcha}}),_c('div',{staticClass:\"captcha-row\"},[_c('span',[_vm._v(\"请输入验证码：\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.verifyCode),expression:\"verifyCode\"}],attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.verifyCode)},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.checkCaptchaCode.apply(null, arguments)},\"input\":function($event){if($event.target.composing)return;_vm.verifyCode=$event.target.value}}})]),_c('button',{attrs:{\"type\":\"button\"},on:{\"click\":_vm.checkCaptchaCode}},[_vm._v(\"提交\")])]):_c('div',{staticClass:\"read-layout\"},[_c('section',{staticClass:\"article-panel\"},[_c('h1',[_vm._v(_vm._s(_vm.resourceName))]),(_vm.loading)?_c('div',{staticClass:\"empty-state\"},[_vm._v(\"加载中...\")]):(_vm.isPdfResource)?_c('PdfViewer',{staticClass:\"pdf-reader\",attrs:{\"src\":_vm.resource.file_path}}):_c('ArticleParser',{staticClass:\"article-reader\",attrs:{\"content\":_vm.resourceContent},on:{\"word-click\":_vm.onWordClick}})],1),_c('aside',{staticClass:\"right-col\"},[_c('section',{staticClass:\"history-card\",on:{\"click\":_vm.toHistoryList}},[_vm._m(0),_c('div',{staticClass:\"history-score\"},[_c('strong',[_vm._v(_vm._s(_vm.latestHistory.right_count || 0))]),_vm._v(\"/\"+_vm._s(_vm.latestHistory.total_count || _vm.totalCount)+\" \"),_c('span',[_vm._v(\"（第\"+_vm._s(_vm.historyList.length || 0)+\"次）\")]),_c('p',[_vm._v(\"正确率：\"+_vm._s(_vm.historyRate(_vm.latestHistory))+\"%\")])]),_c('div',{staticClass:\"history-meta\"},[_c('button',{attrs:{\"type\":\"button\"}},[_vm._v(\"全部\")]),_c('span',[_vm._v(\"交卷时间：\"+_vm._s(_vm.latestHistory.create_time || '-'))])])]),_c('section',{staticClass:\"answer-card\"},[_c('div',{staticClass:\"card-head\"},[_c('div',{staticClass:\"panel-title\"},[_c('span',{staticClass:\"title-icon\"}),_c('strong',[_vm._v(\"答题卡(\"+_vm._s(_vm.answeredCount)+\"/\"+_vm._s(_vm.totalCount)+\")\")])]),(_vm.timerText)?_c('span',[_vm._v(\"计时\"+_vm._s(_vm.timerText))]):_vm._e()]),_c('div',{staticClass:\"card-grid\"},_vm._l((_vm.answerCards),function(card){return _c('button',{key:card.key,class:{ active: _vm.isCardActive(card), done: card.done },attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.scrollToAnswer(card)}}},[_vm._v(\" \"+_vm._s(card.label)+\" \")])}),0),_c('button',{staticClass:\"submit-btn\",attrs:{\"type\":\"button\",\"disabled\":_vm.submitting || _vm.totalCount === 0},on:{\"click\":_vm.openSubmitConfirm}},[_vm._v(\" \"+_vm._s(_vm.submitting ? '提交中...' : '提交')+\" \")])]),_c('section',{staticClass:\"question-panel\"},[(_vm.loading)?_c('div',{staticClass:\"empty-state\"},[_vm._v(\"加载中...\")]):(_vm.jobList.length === 0)?_c('div',{staticClass:\"empty-state\"},[_vm._v(\"暂无练习题，请先阅读文章。\")]):_c('div',{staticClass:\"question-list\"},_vm._l((_vm.jobList),function(item,index){return _c('article',{key:item.id || index,staticClass:\"question-block\"},[(item.directions && item.directions.trim())?_c('div',{staticClass:\"question-directions\",domProps:{\"innerHTML\":_vm._s(item.directions)}}):_vm._e(),_c('h2',[_vm._v(\"题\"+_vm._s(index + 1))]),(item.title && !_vm.isFillType(item))?_c('div',{staticClass:\"question-title\",domProps:{\"innerHTML\":_vm._s(item.title)}}):_vm._e(),(item.type_id == 1 || item.type_id == 4)?_c('div',{staticClass:\"option-list\"},_vm._l((item.optionsArray),function(child,childIndex){return _c('button',{key:child.label || childIndex,staticClass:\"option-row\",class:{ checked: child.is_check == 1 },attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.selectOption(index, childIndex)}}},[_c('span',[_vm._v(_vm._s(child.label))]),_c('em',[_vm._v(_vm._s(child.title))])])}),0):(item.type_id == 3 || item.type_id == 6)?_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(item.user_answer),expression:\"item.user_answer\"}],staticClass:\"text-answer\",attrs:{\"placeholder\":\"请输入答案\"},domProps:{\"value\":(item.user_answer)},on:{\"input\":[function($event){if($event.target.composing)return;_vm.$set(item, \"user_answer\", $event.target.value)},function($event){return _vm.markTextAnswer(index)}]}}):(item.type_id == 2)?_c('div',{staticClass:\"fill-answer\"},[_c('div',{staticClass:\"fill-title\"},[_vm._l((item.titleChunks),function(chunk,chunkIndex){return [(!chunk.isInput)?_c('span',{key:`t-${chunkIndex}`,domProps:{\"innerHTML\":_vm._s(chunk.text)}}):_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.insertWordAnswers[item.id][chunk.inputIndex]),expression:\"insertWordAnswers[item.id][chunk.inputIndex]\"}],key:`i-${chunkIndex}`,attrs:{\"type\":\"text\",\"placeholder\":`(${chunk.inputIndex + 1})`},domProps:{\"value\":(_vm.insertWordAnswers[item.id][chunk.inputIndex])},on:{\"input\":[function($event){if($event.target.composing)return;_vm.$set(_vm.insertWordAnswers[item.id], chunk.inputIndex, $event.target.value)},function($event){return _vm.markFillAnswer(index, chunk.inputIndex)}]}})]})],2)]):(item.type_id == 5 || item.type_id == 7 || item.type_id == 8)?_c('div',{staticClass:\"fill-answer\"},[_c('div',{staticClass:\"fill-title\"},[_vm._l((item.titleChunks),function(chunk,chunkIndex){return [(!chunk.isInput)?_c('span',{key:`t-${chunkIndex}`,domProps:{\"innerHTML\":_vm._s(chunk.text)}}):_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.insertWordAnswers[item.id][chunk.inputIndex]),expression:\"insertWordAnswers[item.id][chunk.inputIndex]\"}],key:`s-${chunkIndex}`,on:{\"change\":[function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.$set(_vm.insertWordAnswers[item.id], chunk.inputIndex, $event.target.multiple ? $$selectedVal : $$selectedVal[0])},function($event){return _vm.markFillAnswer(index, chunk.inputIndex)}]}},[_c('option',{attrs:{\"value\":\"\"}},[_vm._v(\"请选择\")]),_vm._l((_vm.selectOptions(item, chunk.inputIndex)),function(option){return _c('option',{key:`${option.label}-${option.title}`,domProps:{\"value\":`${option.label}-${option.title}`}},[_vm._v(\" \"+_vm._s(option.label)+\" - \"+_vm._s(option.title)+\" \")])})],2)]})],2)]):_c('div',{staticClass:\"unsupported\"},[_vm._v(\"该题型暂不支持 PC 端作答。\")])])}),0)])])]),(_vm.dialogShow)?_c('PcAiAssistant',{attrs:{\"scene\":\"read-praxis\",\"resources-id\":_vm.resourcesId}}):_vm._e(),(_vm.submitConfirmVisible)?_c('div',{staticClass:\"submit-confirm-mask\",on:{\"click\":function($event){if($event.target !== $event.currentTarget)return null;_vm.submitConfirmVisible = false}}},[_c('section',{staticClass:\"submit-confirm-card\"},[_c('div',{staticClass:\"submit-confirm-head\"},[_c('div',{staticClass:\"panel-title\"},[_c('span',{staticClass:\"title-icon\"}),_c('strong',[_vm._v(\"答题卡(\"+_vm._s(_vm.answeredCount)+\"/\"+_vm._s(_vm.totalCount)+\")\")])]),(_vm.timerText)?_c('span',[_vm._v(\"计时\"+_vm._s(_vm.timerText))]):_vm._e()]),_c('div',{staticClass:\"submit-confirm-grid\"},_vm._l((_vm.answerCards),function(card){return _c('button',{key:card.key,class:{ active: _vm.isCardActive(card), done: card.done },attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.scrollToAnswer(card)}}},[_vm._v(\" \"+_vm._s(card.label)+\" \")])}),0),_c('button',{staticClass:\"submit-confirm-btn\",attrs:{\"type\":\"button\",\"disabled\":_vm.submitting},on:{\"click\":_vm.confirmSubmit}},[_vm._v(\" 确定 \")])])]):_vm._e(),_c('van-action-sheet',{staticStyle:{\"min-height\":\"300px\",\"background-color\":\"aliceblue\",\"z-index\":\"9999\"},attrs:{\"title\":\"单词释义\"},model:{value:(_vm.wordShow),callback:function ($$v) {_vm.wordShow=$$v},expression:\"wordShow\"}},[_c('div',{staticClass:\"word-sheet\"},[_c('div',{staticClass:\"word-head\"},[_c('strong',[_vm._v(_vm._s(_vm.word))]),(!_vm.wordCollected)?_c('button',{attrs:{\"type\":\"button\"},on:{\"click\":_vm.addWord}},[_vm._v(\"收藏\")]):_c('span',[_vm._v(\"已收藏\")])]),_vm._l((_vm.wordDetail),function(item,index){return _c('div',{key:index,staticClass:\"word-item\"},[_vm._v(\" \"+_vm._s(item.type)+\"  :  \"+_vm._s(item.meaning_CH)+\" \")])})],2)])],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"history-title\"},[_vm._v(\"答题\"),_c('br'),_vm._v(\"记录\")])\n}]\n\nexport { render, staticRenderFns }","<template>\r\n  <div class=\"pc-read-praxis\">\r\n    <div class=\"breadcrumb\">当前位置：首页&gt;书海遨游&gt;{{ resourceName }}</div>\r\n\r\n    <div v-if=\"!dialogShow\" class=\"captcha-panel\">\r\n      <img :src=\"imageBase64\" alt=\"\" @click=\"refreshCaptcha\" />\r\n      <div class=\"captcha-row\">\r\n        <span>请输入验证码：</span>\r\n        <input v-model=\"verifyCode\" type=\"text\" @keyup.enter=\"checkCaptchaCode\" />\r\n      </div>\r\n      <button type=\"button\" @click=\"checkCaptchaCode\">提交</button>\r\n    </div>\r\n\r\n    <div v-else class=\"read-layout\">\r\n      <section class=\"article-panel\">\r\n\r\n        <h1>{{ resourceName }}</h1>\r\n        <div v-if=\"loading\" class=\"empty-state\">加载中...</div>\r\n        <PdfViewer v-else-if=\"isPdfResource\" class=\"pdf-reader\" :src=\"resource.file_path\" />\r\n        <ArticleParser\r\n          v-else\r\n          class=\"article-reader\"\r\n          :content=\"resourceContent\"\r\n          @word-click=\"onWordClick\"\r\n        />\r\n      </section>\r\n\r\n      <aside class=\"right-col\">\r\n        <section class=\"history-card\" @click=\"toHistoryList\">\r\n          <div class=\"history-title\">答题<br>记录</div>\r\n          <div class=\"history-score\">\r\n            <strong>{{ latestHistory.right_count || 0 }}</strong>/{{ latestHistory.total_count || totalCount }}\r\n            <span>（第{{ historyList.length || 0 }}次）</span>\r\n            <p>正确率：{{ historyRate(latestHistory) }}%</p>\r\n          </div>\r\n          <div class=\"history-meta\">\r\n            <button type=\"button\">全部</button>\r\n            <span>交卷时间：{{ latestHistory.create_time || '-' }}</span>\r\n          </div>\r\n        </section>\r\n        <section class=\"answer-card\">\r\n          <div class=\"card-head\">\r\n            <div class=\"panel-title\">\r\n              <span class=\"title-icon\"></span>\r\n              <strong>答题卡({{ answeredCount }}/{{ totalCount }})</strong>\r\n            </div>\r\n            <span v-if=\"timerText\">计时{{ timerText }}</span>\r\n          </div>\r\n          <div class=\"card-grid\">\r\n            <button\r\n              v-for=\"card in answerCards\"\r\n              :key=\"card.key\"\r\n              type=\"button\"\r\n              :class=\"{ active: isCardActive(card), done: card.done }\"\r\n              @click=\"scrollToAnswer(card)\"\r\n            >\r\n              {{ card.label }}\r\n            </button>\r\n          </div>\r\n          <button type=\"button\" class=\"submit-btn\" :disabled=\"submitting || totalCount === 0\" @click=\"openSubmitConfirm\">\r\n            {{ submitting ? '提交中...' : '提交' }}\r\n          </button>\r\n        </section>\r\n\r\n        <section class=\"question-panel\">\r\n          <div v-if=\"loading\" class=\"empty-state\">加载中...</div>\r\n          <div v-else-if=\"jobList.length === 0\" class=\"empty-state\">暂无练习题，请先阅读文章。</div>\r\n          <div v-else class=\"question-list\">\r\n            <article v-for=\"(item, index) in jobList\" :key=\"item.id || index\" class=\"question-block\">\r\n              <div\r\n                v-if=\"item.directions && item.directions.trim()\"\r\n                class=\"question-directions\"\r\n                v-html=\"item.directions\"\r\n              ></div>\r\n              <h2>题{{ index + 1 }}</h2>\r\n              <div v-if=\"item.title && !isFillType(item)\" class=\"question-title\" v-html=\"item.title\"></div>\r\n\r\n              <div v-if=\"item.type_id == 1 || item.type_id == 4\" class=\"option-list\">\r\n                <button\r\n                  v-for=\"(child, childIndex) in item.optionsArray\"\r\n                  :key=\"child.label || childIndex\"\r\n                  type=\"button\"\r\n                  class=\"option-row\"\r\n                  :class=\"{ checked: child.is_check == 1 }\"\r\n                  @click=\"selectOption(index, childIndex)\"\r\n                >\r\n                  <span>{{ child.label }}</span>\r\n                  <em>{{ child.title }}</em>\r\n                </button>\r\n              </div>\r\n\r\n              <textarea\r\n                v-else-if=\"item.type_id == 3 || item.type_id == 6\"\r\n                v-model=\"item.user_answer\"\r\n                class=\"text-answer\"\r\n                placeholder=\"请输入答案\"\r\n                @input=\"markTextAnswer(index)\"\r\n              ></textarea>\r\n\r\n              <div v-else-if=\"item.type_id == 2\" class=\"fill-answer\">\r\n                <div class=\"fill-title\">\r\n                  <template v-for=\"(chunk, chunkIndex) in item.titleChunks\">\r\n                    <span v-if=\"!chunk.isInput\" :key=\"`t-${chunkIndex}`\" v-html=\"chunk.text\"></span>\r\n                    <input\r\n                      v-else\r\n                      :key=\"`i-${chunkIndex}`\"\r\n                      v-model=\"insertWordAnswers[item.id][chunk.inputIndex]\"\r\n                      type=\"text\"\r\n                      :placeholder=\"`(${chunk.inputIndex + 1})`\"\r\n                      @input=\"markFillAnswer(index, chunk.inputIndex)\"\r\n                    />\r\n                  </template>\r\n                </div>\r\n              </div>\r\n\r\n              <div v-else-if=\"item.type_id == 5 || item.type_id == 7 || item.type_id == 8\" class=\"fill-answer\">\r\n                <div class=\"fill-title\">\r\n                  <template v-for=\"(chunk, chunkIndex) in item.titleChunks\">\r\n                    <span v-if=\"!chunk.isInput\" :key=\"`t-${chunkIndex}`\" v-html=\"chunk.text\"></span>\r\n                    <select\r\n                      v-else\r\n                      :key=\"`s-${chunkIndex}`\"\r\n                      v-model=\"insertWordAnswers[item.id][chunk.inputIndex]\"\r\n                      @change=\"markFillAnswer(index, chunk.inputIndex)\"\r\n                    >\r\n                      <option value=\"\">请选择</option>\r\n                      <option\r\n                        v-for=\"option in selectOptions(item, chunk.inputIndex)\"\r\n                        :key=\"`${option.label}-${option.title}`\"\r\n                        :value=\"`${option.label}-${option.title}`\"\r\n                      >\r\n                        {{ option.label }} - {{ option.title }}\r\n                      </option>\r\n                    </select>\r\n                  </template>\r\n                </div>\r\n              </div>\r\n\r\n              <div v-else class=\"unsupported\">该题型暂不支持 PC 端作答。</div>\r\n            </article>\r\n          </div>\r\n        </section>\r\n      </aside>\r\n    </div>\r\n    <PcAiAssistant v-if=\"dialogShow\" scene=\"read-praxis\" :resources-id=\"resourcesId\" />\n\r\n    <div v-if=\"submitConfirmVisible\" class=\"submit-confirm-mask\" @click.self=\"submitConfirmVisible = false\">\r\n      <section class=\"submit-confirm-card\">\r\n        <div class=\"submit-confirm-head\">\r\n          <div class=\"panel-title\">\r\n            <span class=\"title-icon\"></span>\r\n            <strong>答题卡({{ answeredCount }}/{{ totalCount }})</strong>\r\n          </div>\r\n          <span v-if=\"timerText\">计时{{ timerText }}</span>\r\n        </div>\r\n        <div class=\"submit-confirm-grid\">\r\n          <button\r\n            v-for=\"card in answerCards\"\r\n            :key=\"card.key\"\r\n            type=\"button\"\r\n            :class=\"{ active: isCardActive(card), done: card.done }\"\r\n            @click=\"scrollToAnswer(card)\"\r\n          >\r\n            {{ card.label }}\r\n          </button>\r\n        </div>\r\n        <button type=\"button\" class=\"submit-confirm-btn\" :disabled=\"submitting\" @click=\"confirmSubmit\">\r\n          确定\r\n        </button>\r\n      </section>\r\n    </div>\r\n\r\n    <van-action-sheet\r\n      style=\"min-height: 300px;background-color: aliceblue;z-index: 9999;\"\r\n      v-model=\"wordShow\"\r\n      title=\"单词释义\"\r\n    >\r\n      <div class=\"word-sheet\">\r\n        <div class=\"word-head\">\r\n          <strong>{{ word }}</strong>\r\n          <button v-if=\"!wordCollected\" type=\"button\" @click=\"addWord\">收藏</button>\r\n          <span v-else>已收藏</span>\r\n        </div>\r\n        <div v-for=\"(item, index) in wordDetail\" :key=\"index\" class=\"word-item\">\r\n          {{ item.type }}&nbsp;&nbsp;:&nbsp;&nbsp;{{ item.meaning_CH }}\r\n        </div>\r\n      </div>\r\n    </van-action-sheet>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport { createCaptcha, checkCaptcha, getHistoryList, getJobList, saveAccessLog, submitData, updateUserStudy } from '@/api/listen'\r\nimport { AddWord, getListByWord } from '@/api/home'\r\nimport { decrypt } from '@/api/aes'\r\nimport ArticleParser from '@/components/ArticleParser'\r\nimport PdfViewer from '@/components/PdfViewer'\r\nimport PcAiAssistant from '@/components/PcAiAssistant.vue'\r\n\r\nexport default {\r\n  name: 'PcReadPraxis',\r\n  components: { ArticleParser, PdfViewer, PcAiAssistant },\r\n  data() {\r\n    return {\r\n      dialogShow: true,\r\n      imageBase64: '',\r\n      verifyCode: '',\r\n      loading: false,\r\n      resources: {\r\n        resources: {}\r\n      },\r\n      jobList: [],\r\n      insertWordAnswers: {},\r\n      logId: '',\r\n      resourcesId: '',\r\n      historyList: [],\r\n      submitting: false,\r\n      startTime: Date.now(),\r\n      nowTime: Date.now(),\r\n      timer: null,\r\n      currentIndex: 0,\r\n      currentBlankIndex: null,\r\n      wordShow: false,\r\n      wordDetail: [],\r\n      word: '',\r\n      wordCollected: false,\r\n      submitConfirmVisible: false\r\n    }\r\n  },\r\n  computed: {\r\n    resource() {\r\n      return this.resources.resources || {}\r\n    },\r\n    resourceName() {\r\n      return this.resource.name || '加载中...'\r\n    },\r\n    resourceContent() {\r\n      return this.resource.content || ''\r\n    },\r\n    isPdfResource() {\r\n      const fileType = String(this.resource.file_type || '').toLowerCase()\r\n      const filePath = String(this.resource.file_path || '').toLowerCase().split('?')[0]\r\n      return fileType.includes('pdf') || filePath.endsWith('.pdf')\r\n    },\r\n    answeredCount() {\r\n      return this.answerCards.filter(item => item.done).length\r\n    },\r\n    totalCount() {\r\n      return this.answerCards.length\r\n    },\r\n    latestHistory() {\r\n      return this.historyList[0] || {}\r\n    },\r\n    answerCards() {\r\n      const cards = []\r\n      this.jobList.forEach((item, index) => {\r\n        if (this.isFillType(item)) {\r\n          const blankCount = this.getBlankCount(item)\r\n          for (let blankIndex = 0; blankIndex < blankCount; blankIndex += 1) {\r\n            cards.push({\r\n              key: `${item.id || index}-${blankIndex}`,\r\n              label: `${index + 1}-${blankIndex + 1}`,\r\n              questionIndex: index,\r\n              blankIndex,\r\n              done: this.isBlankAnswered(item, blankIndex)\r\n            })\r\n          }\r\n          return\r\n        }\r\n        cards.push({\r\n          key: `${item.id || index}`,\r\n          label: `${index + 1}`,\r\n          questionIndex: index,\r\n          blankIndex: null,\r\n          done: this.isAnswered(item)\r\n        })\r\n      })\r\n      return cards\r\n    },\r\n    timerText() {\r\n      const seconds = Math.max(0, Math.floor((this.nowTime - this.startTime) / 1000))\r\n      return this.formatTime(seconds)\r\n    }\r\n  },\r\n  beforeDestroy() {\r\n    if (this.timer) clearInterval(this.timer)\r\n  },\r\n  methods: {\r\n    getUser() {\r\n      return JSON.parse(localStorage.getItem('user') || '{}')\r\n    },\r\n    normalizeOptions(options) {\r\n      if (Array.isArray(options)) return options\r\n      if (!options) return []\r\n      try {\r\n        return JSON.parse(options)\r\n      } catch (error) {\r\n        return []\r\n      }\r\n    },\r\n    normalizeSelectAnswers(optionsAnswer) {\r\n      if (Array.isArray(optionsAnswer)) return optionsAnswer\r\n      if (!optionsAnswer) return []\r\n      try {\r\n        return JSON.parse(optionsAnswer)\r\n      } catch (error) {\r\n        return []\r\n      }\r\n    },\r\n    normalizeJobList(list) {\r\n      return (list || []).map(item => {\r\n        const row = {\r\n          ...item,\r\n          is_check: Number(item.is_check) || 0,\r\n          user_answer: item.user_answer || ''\r\n        }\r\n        row.optionsArray = this.normalizeOptions(row.options).map(child => ({\r\n          ...child,\r\n          is_check: Number(child.is_check) || 0\r\n        }))\r\n        row.optionsArray1 = this.normalizeSelectAnswers(row.options_answer)\r\n        if (this.isFillType(row)) {\r\n          row.titleChunks = this.parseFillTitle(row.title)\r\n          const count = this.getBlankCount(row)\r\n          this.$set(this.insertWordAnswers, row.id, Array(count).fill(''))\r\n        }\r\n        return row\r\n      })\r\n    },\r\n    parseFillTitle(text) {\r\n      const value = String(text || '')\r\n        .replace(/__（/g, '_(')\r\n        .replace(/）_/g, ')_')\r\n        .replace(/<p[^>]*>/gi, '<br>')\r\n        .replace(/<\\/p>/gi, '')\r\n      const chunks = []\r\n      const regex = /_\\((\\d+)\\)_+/g\r\n      let lastIndex = 0\r\n      let match\r\n\r\n      while ((match = regex.exec(value)) !== null) {\r\n        if (match.index > lastIndex) {\r\n          chunks.push({ isInput: false, text: value.slice(lastIndex, match.index) })\r\n        }\r\n        chunks.push({ isInput: true, inputIndex: chunks.filter(chunk => chunk.isInput).length })\r\n        lastIndex = regex.lastIndex\r\n      }\r\n      if (lastIndex < value.length) {\r\n        chunks.push({ isInput: false, text: value.slice(lastIndex) })\r\n      }\r\n      return chunks.length ? chunks : [{ isInput: false, text: value }]\r\n    },\r\n    isFillType(item) {\r\n      return item.type_id == 2 || item.type_id == 5 || item.type_id == 7 || item.type_id == 8\r\n    },\r\n    normalizeFillText(text) {\r\n      return String(text || '')\r\n        .replace(/<p[^>]*>/gi, '<br>')\r\n        .replace(/<\\/p>/gi, '')\r\n        .replace(/&nbsp;/gi, ' ')\r\n    },\r\n    parseFillTitle(text) {\r\n      const source = this.normalizeFillText(text)\r\n      const normalized = source.replace(\r\n        /_+\\s*[\\(（]+\\s*(\\d+)\\s*[\\)）]*\\s*_*\\s*[\\(（]*/g,\r\n        (_, number) => `[[BLANK:${number}]]`\r\n      )\r\n      const chunks = []\r\n      const regex = /\\[\\[BLANK:(\\d+)\\]\\]/g\r\n      let lastIndex = 0\r\n      let match\r\n\r\n      while ((match = regex.exec(normalized)) !== null) {\r\n        if (match.index > lastIndex) {\r\n          chunks.push({ isInput: false, text: normalized.slice(lastIndex, match.index) })\r\n        }\r\n        chunks.push({ isInput: true, inputIndex: chunks.filter(chunk => chunk.isInput).length })\r\n        lastIndex = regex.lastIndex\r\n      }\r\n      if (lastIndex < normalized.length) {\r\n        chunks.push({ isInput: false, text: normalized.slice(lastIndex) })\r\n      }\r\n      return chunks.length ? chunks : [{ isInput: false, text: source }]\r\n    },\r\n    selectOptions(item, inputIndex) {\r\n      const answerGroup = item.optionsArray1 && item.optionsArray1[inputIndex]\r\n      if (answerGroup && Array.isArray(answerGroup.options)) {\r\n        return answerGroup.options\r\n      }\r\n      return item.optionsArray || []\r\n    },\r\n    historyRate(item) {\r\n      const total = Number(item && item.total_count) || Number(this.totalCount) || 0\r\n      const right = Number(item && item.right_count) || 0\r\n      return total ? ((right / total) * 100).toFixed(2) : '0.00'\r\n    },\r\n    async loadHistoryList() {\r\n      const user = this.getUser()\r\n      if (!user.sid || !this.resourcesId) return\r\n      const response = await getHistoryList({ sid: user.sid, resource_id: this.resourcesId })\r\n      if (response.code === 100 && Array.isArray(response.data)) {\r\n        this.historyList = response.data.slice().reverse()\r\n      } else {\r\n        this.historyList = []\r\n      }\r\n    },\r\n    toHistoryList() {\r\n      this.$router.push({ name: 'PcPracticeHistoryRead', query: { resources_id: this.resourcesId } })\r\n    },\r\n    toHistoryDetail(item) {\r\n      if (!item) return\r\n      this.$router.push({ name: 'PcPracticeDetailRead', query: { resource_id: this.resourcesId, his_id: item.id } })\r\n    },\r\n    async saveAccessLog() {\r\n      const user = this.getUser()\r\n      if (!user.sid) return\r\n      const response = await saveAccessLog({ sid: user.sid, res_id: this.resourcesId })\r\n      if (response.code !== 100) {\r\n        await this.loadJobList()\r\n        return\r\n      }\r\n      if (response.data == 2) {\r\n        const history = await getHistoryList({ sid: user.sid, resource_id: this.resourcesId })\r\n        if (history.code === 100 && Array.isArray(history.data) && history.data.length > 0) {\r\n          await this.loadJobList()\r\n          return\r\n        }\r\n        this.dialogShow = false\r\n        await this.refreshCaptcha()\r\n        return\r\n      }\r\n      await this.loadJobList()\r\n    },\r\n    async refreshCaptcha() {\r\n      const user = this.getUser()\r\n      if (!user.sid) return\r\n      const response = await createCaptcha({ sid: user.sid })\r\n      if (response.code === 100) {\r\n        this.imageBase64 = `data:image/png;base64,${response.data.imageBase64}`\r\n      }\r\n    },\r\n    async checkCaptchaCode() {\r\n      const user = this.getUser()\r\n      if (!user.sid) return\r\n      const response = await checkCaptcha({ sid: user.sid, captchaCode: this.verifyCode })\r\n      if (response.code === 100 && response.data == 1) {\r\n        this.dialogShow = true\r\n        await this.loadJobList()\r\n      } else {\r\n        await this.refreshCaptcha()\r\n      }\r\n    },\r\n    async loadJobList() {\r\n      const user = this.getUser()\r\n      if (!user.sid) return\r\n      this.loading = true\r\n      try {\r\n        const response = await getJobList({ sid: user.sid, resource_id: this.resourcesId })\r\n        if (response.code === 100) {\r\n          const data = response.data || { resources: {} }\r\n          const jobList = data.jobList ? JSON.parse(decrypt(data.jobList)) : []\r\n          this.resources = data\r\n          this.jobList = this.normalizeJobList(jobList)\r\n          this.insertWordAnswers = { ...this.insertWordAnswers }\r\n        }\r\n      } finally {\r\n        this.loading = false\r\n      }\r\n    },\r\n    selectOption(itemIndex, optionIndex) {\r\n      const item = this.jobList[itemIndex]\r\n      if (!item) return\r\n      if (item.type_id == 4) {\r\n        item.optionsArray[optionIndex].is_check = item.optionsArray[optionIndex].is_check == 1 ? 0 : 1\r\n      } else {\r\n        item.optionsArray.forEach((child, index) => {\r\n          child.is_check = index === optionIndex ? 1 : 0\r\n        })\r\n      }\r\n      item.is_check = this.isAnswered(item) ? 1 : 0\r\n      this.currentIndex = itemIndex\r\n      this.jobList = [...this.jobList]\r\n    },\r\n    markTextAnswer(index) {\r\n      const item = this.jobList[index]\r\n      item.is_check = item.user_answer && item.user_answer.trim() ? 1 : 0\r\n      this.currentIndex = index\r\n      this.currentBlankIndex = null\r\n      this.jobList = [...this.jobList]\r\n    },\r\n    markFillAnswer(index, blankIndex = null) {\r\n      const item = this.jobList[index]\r\n      item.is_check = this.isAnswered(item) ? 1 : 0\r\n      this.currentIndex = index\r\n      this.currentBlankIndex = blankIndex\r\n      this.jobList = [...this.jobList]\r\n    },\r\n    getBlankCount(item) {\r\n      if (!item) return 0\r\n      const chunkCount = (item.titleChunks || []).filter(chunk => chunk.isInput).length\r\n      const answerCount = (this.insertWordAnswers[item.id] || []).length\r\n      const standardCount = item.type_id == 2 ? (item.optionsArray || []).length : (item.optionsArray1 || []).length\r\n      return Math.max(chunkCount, standardCount, answerCount, 1)\r\n    },\r\n    isBlankAnswered(item, blankIndex) {\r\n      const answers = this.insertWordAnswers[item.id] || []\r\n      return Boolean(answers[blankIndex] && String(answers[blankIndex]).trim())\r\n    },\r\n    isAnswered(item) {\r\n      if (!item) return false\r\n      if (item.type_id == 1 || item.type_id == 4) {\r\n        return (item.optionsArray || []).some(child => child.is_check == 1)\r\n      }\r\n      if (item.type_id == 3 || item.type_id == 6) {\r\n        return Boolean(item.user_answer && item.user_answer.trim())\r\n      }\r\n      if (this.isFillType(item)) {\r\n        const answers = this.insertWordAnswers[item.id] || []\r\n        return answers.some(answer => answer && String(answer).trim())\r\n      }\r\n      return item.is_check == 1\r\n    },\r\n    normalizeAnswerText(value) {\r\n      return String(value || '')\r\n        .trim()\r\n        .toLowerCase()\r\n        .replace(/[,，]+/g, ' ')\r\n        .replace(/[.。]+/g, '')\r\n        .replace(/\\s+/g, ' ')\r\n    },\r\n    isFillRight(userAnswer, standardAnswer) {\r\n      const userValue = this.normalizeAnswerText(userAnswer)\r\n      if (!userValue) return 0\r\n      const raw = String(standardAnswer || '').trim()\r\n      if (!raw) return 0\r\n      let standards = raw.split(/\\s*&\\s*/).map(item => this.normalizeAnswerText(item)).filter(Boolean)\r\n      const tokens = raw.split(/\\s*&\\s*|\\s+/).map(item => this.normalizeAnswerText(item)).filter(Boolean)\r\n      // Match the mobile behavior for answers represented by individual\r\n      // characters (for example, several accepted letters separated by spaces).\r\n      if (tokens.length > 1 && tokens.every(item => item.length < 2)) {\r\n        const answerSet = new Set(tokens)\r\n        const userTokens = userValue.split(/\\s+/).filter(Boolean)\r\n        return userTokens.length > 0 && userTokens.every(item => answerSet.has(item)) ? 1 : 0\r\n      }\r\n      if (tokens.length > 0 && tokens.every(item => /^\\d+$/.test(item))) {\r\n        return this.normalizeAnswerText(tokens.join(' ')) === userValue ? 1 : 0\r\n      }\r\n      standards = standards.map(item => item.replace(/[,，]+/g, '').trim())\r\n      return standards.includes(userValue) ? 1 : 0\r\n    },\r\n    buildSubmitData() {\r\n      const user = this.getUser()\r\n      const submitList = []\r\n      this.jobList.forEach(item => {\r\n        if (item.type_id == 1) {\r\n          const selected = (item.optionsArray || []).find(child => child.is_check == 1)\r\n          const answer = selected ? selected.label : ''\r\n          submitList.push({\r\n            user_id: user.sid,\r\n            job_id: item.id,\r\n            type_id: item.type_id,\r\n            lable: answer,\r\n            answer,\r\n            is_right: item.options_answer === answer ? 1 : 0,\r\n            resource_id: item.resource_id || this.resourcesId\r\n          })\r\n        } else if (item.type_id == 4) {\r\n          const answer = (item.optionsArray || []).filter(child => child.is_check == 1).map(child => child.label).join(',')\r\n          submitList.push({\r\n            user_id: user.sid,\r\n            job_id: item.id,\r\n            type_id: item.type_id,\r\n            answer,\r\n            is_right: item.options_answer === answer ? 1 : 0,\r\n            resource_id: item.resource_id || this.resourcesId\r\n          })\r\n        } else if (item.type_id == 2) {\r\n          const answers = this.insertWordAnswers[item.id] || []\r\n          const count = this.getBlankCount(item)\r\n          Array.from({ length: count }).forEach((_, index) => {\r\n            const child = (item.optionsArray || [])[index] || {}\r\n            submitList.push({\r\n              user_id: user.sid,\r\n              job_id: item.id,\r\n              type_id: item.type_id,\r\n              lable: index + 1,\r\n              answer: answers[index] || '',\r\n              is_right: this.isFillRight(answers[index], child.title),\r\n              resource_id: item.resource_id || this.resourcesId\r\n            })\r\n          })\r\n        } else if (item.type_id == 5 || item.type_id == 7 || item.type_id == 8) {\r\n          const answers = this.insertWordAnswers[item.id] || []\r\n          const count = this.getBlankCount(item)\r\n          Array.from({ length: count }).forEach((_, index) => {\r\n            const child = (item.optionsArray1 || [])[index] || {}\r\n            const answer = answers[index] || ''\r\n            const selectedLabel = answer ? String(answer).split('-')[0] : ''\r\n            submitList.push({\r\n              user_id: user.sid,\r\n              job_id: item.id,\r\n              type_id: item.type_id,\r\n              lable: index + 1,\r\n              answer,\r\n              is_right: child.title === selectedLabel ? 1 : 0,\r\n              resource_id: item.resource_id || this.resourcesId\r\n            })\r\n          })\r\n        } else if (item.type_id == 3 || item.type_id == 6) {\r\n          submitList.push({\r\n            user_id: user.sid,\r\n            job_id: item.id,\r\n            type_id: item.type_id,\r\n            answer: item.user_answer || '',\r\n            is_right: 0,\r\n            resource_id: item.resource_id || this.resourcesId\r\n          })\r\n        }\r\n      })\r\n      return submitList\r\n    },\r\n    openSubmitConfirm() {\r\n      if (this.submitting) return\r\n      this.submitConfirmVisible = true\r\n    },\r\n    async confirmSubmit() {\r\n      if (this.submitting) return\r\n      const user = this.getUser()\r\n      if (!user.sid) return\r\n      this.submitConfirmVisible = false\r\n      this.submitting = true\r\n      try {\r\n        const response = await submitData({ params: JSON.stringify(this.buildSubmitData()) })\r\n        if (response.code === 100) {\r\n          const resp = await updateUserStudy({ id: this.logId })\r\n          if (resp.code === 100) {\r\n            this.$router.push({ name: 'PcPracticeDetailRead', query: { resource_id: this.resourcesId } })\r\n          }\r\n        }\r\n      } finally {\r\n        this.submitting = false\r\n      }\r\n    },\r\n    async onWordClick(word) {\r\n      const response = await getListByWord({ word })\r\n      if (response.code === 100 && response.data.length > 0) {\r\n        this.wordCollected = false\r\n        this.wordShow = true\r\n        this.wordDetail = response.data\r\n        this.word = word\r\n      }\r\n    },\r\n    async addWord() {\r\n      const user = this.getUser()\r\n      if (!user.sid || !this.word) return\r\n      const response = await AddWord({ uid: user.sid, word: this.word })\r\n      if (response.code === 100) {\r\n        this.wordCollected = true\r\n      }\r\n    },\r\n    formatTime(seconds) {\r\n      const value = Number(seconds) || 0\r\n      const minutes = Math.floor(value / 60)\r\n      const remain = Math.floor(value % 60)\r\n      return `${String(minutes).padStart(2, '0')}:${String(remain).padStart(2, '0')}`\r\n    },\r\n    scrollToQuestion(index) {\r\n      this.currentIndex = index\r\n      this.currentBlankIndex = null\r\n      this.$nextTick(() => {\r\n        const list = this.$el.querySelectorAll('.question-block')\r\n        if (list[index]) list[index].scrollIntoView({ behavior: 'smooth', block: 'start' })\r\n      })\r\n    },\r\n    isCardActive(card) {\r\n      return this.currentIndex === card.questionIndex && this.currentBlankIndex === card.blankIndex\r\n    },\r\n    scrollToAnswer(card) {\r\n      this.currentIndex = card.questionIndex\r\n      this.currentBlankIndex = card.blankIndex\r\n      this.$nextTick(() => {\r\n        const list = this.$el.querySelectorAll('.question-block')\r\n        const target = list[card.questionIndex]\r\n        if (target) {\r\n          target.scrollIntoView({ behavior: 'smooth', block: 'start' })\r\n          if (card.blankIndex !== null) {\r\n            const controls = target.querySelectorAll('.fill-title input, .fill-title select')\r\n            if (controls[card.blankIndex]) controls[card.blankIndex].focus()\r\n          }\r\n        }\r\n      })\r\n    }\r\n  },\r\n  mounted() {\r\n    this.logId = this.$route.query.log_id || ''\r\n    this.resourcesId = this.$route.query.resources_id || this.$route.query.resource_id || ''\r\n    this.startTime = Date.now()\r\n    this.timer = setInterval(() => {\r\n      this.nowTime = Date.now()\r\n    }, 1000)\r\n    this.loadHistoryList()\r\n    this.saveAccessLog()\r\n  }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.pc-read-praxis {\r\n  width: 1114px;\r\n  height: 583px;\r\n  color: #111c2d;\r\n  font-size: 13px;\r\n  position: relative;\r\n}\r\n\r\n.breadcrumb {\r\n  height: 22px;\r\n  font-size: 11px;\r\n  line-height: 18px;\r\n  color: #7d8692;\r\n}\r\n\r\n.read-layout {\r\n  height: 541px;\r\n  display: grid;\r\n  grid-template-columns: 650px 448px;\r\n  gap: 16px;\r\n  align-items: stretch;\r\n}\r\n\r\n.article-panel,\r\n.answer-card,\r\n.question-panel,\r\n.captcha-panel {\r\n  background: rgba(255, 255, 255, 0.96);\r\n  border-radius: 6px;\r\n  box-sizing: border-box;\r\n}\r\n\r\n.article-panel {\r\n  min-width: 0;\r\n  height: 541px;\r\n  padding: 16px 28px 22px;\r\n  display: flex;\r\n  flex-direction: column;\r\n}\r\n\r\n.pdf-reader {\r\n  flex: 1;\r\n  min-height: 0;\r\n  display: flex;\r\n  flex-direction: column;\r\n  overflow: hidden;\r\n}\r\n\r\n::v-deep .pdf-reader .pdf-toolbar {\r\n  flex-shrink: 0;\r\n}\r\n\r\n::v-deep .pdf-reader .pdf-pages {\r\n  flex: 1;\r\n  min-height: 0;\r\n}\r\n\r\n.panel-title {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n}\r\n\r\n.title-icon {\r\n  width: 13px;\r\n  height: 13px;\r\n  display: inline-block;\r\n  background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat;\r\n}\r\n\r\n.panel-title strong {\r\n  font-size: 15px;\r\n  line-height: 22px;\r\n  color: #111c2d;\r\n}\r\n\r\n.article-panel h1 {\r\n  margin: 8px 0 12px;\r\n  font-size: 15px;\r\n  line-height: 22px;\r\n  text-align: center;\r\n  color: #111;\r\n}\r\n\r\n::v-deep .article-reader {\r\n  flex: 1;\r\n  min-height: 0;\r\n  overflow-y: auto;\r\n}\r\n\r\n::v-deep .article-reader .article-container {\r\n  height: auto;\r\n  overflow: visible;\r\n}\r\n\r\n::v-deep .article-reader .article-content {\r\n  width: auto;\r\n  margin: 0;\r\n  padding: 0 8px 24px 0;\r\n  font-size: 14px;\r\n  line-height: 24px;\r\n  color: #1f2a3a;\r\n  text-align: justify;\r\n}\r\n\r\n::v-deep .article-reader .word {\r\n  cursor: pointer;\r\n}\r\n\r\n.right-col {\r\n  min-width: 0;\r\n  height: 541px;\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 14px;\r\n}\r\n\r\n.history-card {\r\n  min-height: 52px;\r\n  display: grid;\r\n  grid-template-columns: 58px 1fr 154px;\r\n  align-items: center;\r\n  gap: 10px;\r\n  padding: 8px 12px;\r\n  border-radius: 8px;\r\n  background: #fff;\r\n  cursor: pointer;\r\n}\r\n\r\n.history-title {\r\n  padding-right: 10px;\r\n  border-right: 1px solid #b8b8b8;\r\n  color: #111c2d;\r\n  font-size: 14px;\r\n  line-height: 18px;\r\n  text-align: center;\r\n}\r\n\r\n.history-score {\r\n  min-width: 0;\r\n  color: #656565;\r\n  font-size: 12px;\r\n  line-height: 17px;\r\n}\r\n\r\n.history-score strong {\r\n  color: #111c2d;\r\n  font-size: 20px;\r\n}\r\n\r\n.history-score span {\r\n  display: inline-block;\r\n}\r\n\r\n.history-score p {\r\n  margin: 0;\r\n}\r\n\r\n.history-meta {\r\n  min-width: 0;\r\n  color: #656565;\r\n  font-size: 12px;\r\n  line-height: 17px;\r\n  text-align: right;\r\n}\r\n\r\n.history-meta button {\r\n  display: block;\r\n  margin: 0 0 4px auto;\r\n  padding: 0;\r\n  border: none;\r\n  background: transparent;\r\n  color: #00529f;\r\n  font-size: 13px;\r\n  cursor: pointer;\r\n}\r\n\r\n.history-meta span {\r\n  display: block;\r\n  overflow: hidden;\r\n  text-overflow: ellipsis;\r\n  white-space: nowrap;\r\n}\r\n\r\n.answer-card {\r\n  height: auto;\r\n  flex: 0 0 auto;\r\n  max-height: 240px;\r\n  padding: 16px 16px 14px;\r\n  overflow-y: auto;\r\n}\r\n\r\n.card-head {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n}\r\n\r\n.card-head span {\r\n  color: #ff243d;\r\n  font-size: 11px;\r\n}\r\n\r\n.card-grid {\r\n  display: flex;\r\n  flex-wrap: wrap;\r\n  gap: 9px;\r\n  margin-top: 16px;\r\n  overflow: visible;\r\n}\r\n\r\n.card-grid button {\r\n  min-width: 28px;\r\n  height: 28px;\r\n  padding: 0 8px;\r\n  border: none;\r\n  border-radius: 999px;\r\n  background: #f0f0f2;\r\n  color: #8e949d;\r\n  font-size: 13px;\r\n  font-weight: 700;\r\n  cursor: pointer;\r\n}\r\n\r\n.card-grid button.active {\r\n  border: 1px solid #00529f;\r\n  background: #eef6ff;\r\n  color: #00529f;\r\n}\r\n\r\n.card-grid button.done {\r\n  background: #00529f;\r\n  color: #fff;\r\n}\r\n\r\n.card-grid button.done.active {\r\n  box-shadow: 0 0 0 3px rgba(0, 82, 159, 0.14);\r\n}\r\n\r\n.submit-btn {\r\n  width: 100%;\r\n  height: 36px;\r\n  margin-top: 12px;\r\n  border: none;\r\n  border-radius: 6px;\r\n  background: #00529f;\r\n  color: #fff;\r\n  font-size: 14px;\r\n  font-weight: 700;\r\n  cursor: pointer;\r\n}\r\n\r\n.submit-btn:disabled {\r\n  background: #8aa9ca;\r\n  cursor: default;\r\n}\r\n\r\n.submit-confirm-mask {\r\n  position: fixed;\r\n  inset: 0;\r\n  z-index: 3000;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  background: rgba(13, 31, 64, 0.32);\r\n}\r\n\r\n.submit-confirm-card {\r\n  width: 300px;\r\n  min-height: 280px;\r\n  padding: 14px 16px 12px;\r\n  border-radius: 10px;\r\n  background: #dfe9fb;\r\n  box-sizing: border-box;\r\n}\r\n\r\n.submit-confirm-head {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n}\r\n\r\n.submit-confirm-head .panel-title strong {\r\n  font-size: 14px;\r\n}\r\n\r\n.submit-confirm-head span {\r\n  color: #ff243d;\r\n  font-size: 11px;\r\n}\r\n\r\n.submit-confirm-grid {\r\n  display: flex;\r\n  flex-wrap: wrap;\r\n  gap: 10px;\r\n  margin-top: 18px;\r\n  padding: 4px 6px 18px;\r\n  min-height: 128px;\r\n}\r\n\r\n.submit-confirm-grid button {\r\n  min-width: 30px;\r\n  height: 30px;\r\n  padding: 0 8px;\r\n  border: none;\r\n  border-radius: 999px;\r\n  background: #eef2f8;\r\n  color: #8e949d;\r\n  font-size: 14px;\r\n  font-weight: 700;\r\n  cursor: pointer;\r\n}\r\n\r\n.submit-confirm-grid button.active {\r\n  background: #00529f;\r\n  color: #fff;\r\n}\r\n\r\n.submit-confirm-grid button.done {\r\n  background: #00529f;\r\n  color: #fff;\r\n}\r\n\r\n.submit-confirm-grid button.done.active {\r\n  background: #00529f;\r\n  color: #fff;\r\n}\r\n\r\n.submit-confirm-btn {\r\n  width: 100%;\r\n  height: 50px;\r\n  border: none;\r\n  border-radius: 10px;\r\n  background: #00529f;\r\n  color: #fff;\r\n  font-size: 15px;\r\n  font-weight: 700;\r\n  cursor: pointer;\r\n}\r\n\r\n.submit-confirm-btn:disabled {\r\n  background: #8aa9ca;\r\n  cursor: default;\r\n}\r\n\r\n.question-panel {\r\n  flex: 1;\r\n  min-height: 0;\r\n  padding: 18px 20px;\r\n  overflow-y: auto;\r\n}\r\n\r\n.article-reader::-webkit-scrollbar,\r\n.question-panel::-webkit-scrollbar,\r\n.card-grid::-webkit-scrollbar {\r\n  width: 4px;\r\n}\r\n\r\n.article-reader::-webkit-scrollbar-thumb,\r\n.question-panel::-webkit-scrollbar-thumb,\r\n.card-grid::-webkit-scrollbar-thumb {\r\n  border-radius: 999px;\r\n  background: #d5dce6;\r\n}\r\n\r\n.question-block + .question-block {\r\n  margin-top: 18px;\r\n}\r\n\r\n.question-block h2 {\r\n  margin: 0 0 8px;\r\n  font-size: 15px;\r\n  line-height: 22px;\r\n  color: #0c1320;\r\n}\r\n\r\n.question-directions,\r\n.question-title,\r\n.fill-title {\r\n  margin-bottom: 8px;\r\n  font-size: 13px;\r\n  line-height: 22px;\r\n  color: #202a39;\r\n}\r\n\r\n.question-directions {\r\n  margin-bottom: 12px;\r\n  overflow-wrap: break-word;\r\n}\r\n\r\n.question-directions ::v-deep p {\r\n  margin: 0 0 8px;\r\n}\r\n\r\n.question-directions ::v-deep p:last-child {\r\n  margin-bottom: 0;\r\n}\r\n\r\n.question-directions ::v-deep img {\r\n  max-width: 100%;\r\n  height: auto;\r\n}\r\n\r\n.fill-title input,\r\n.fill-title select {\r\n  min-width: 86px;\r\n  height: 28px;\r\n  margin: 0 5px 6px;\r\n  border: 1px solid #d9e1eb;\r\n  border-radius: 4px;\r\n  padding: 0 7px;\r\n  box-sizing: border-box;\r\n  font-size: 12px;\r\n  outline: none;\r\n}\r\n\r\n.fill-title select {\r\n  min-width: 132px;\r\n  color: #1c2636;\r\n  background: #fff;\r\n}\r\n\r\n.option-list {\r\n  display: grid;\r\n  gap: 5px;\r\n}\r\n\r\n.option-row {\r\n  min-height: 32px;\r\n  display: grid;\r\n  grid-template-columns: 36px 1fr;\r\n  align-items: center;\r\n  border: none;\r\n  background: #f0f0f2;\r\n  color: #1c2636;\r\n  text-align: left;\r\n  cursor: pointer;\r\n  padding: 0;\r\n  font-size: 13px;\r\n}\r\n\r\n.option-row span {\r\n  text-align: center;\r\n  color: #5d6570;\r\n  font-weight: 700;\r\n}\r\n\r\n.option-row em {\r\n  padding: 7px 10px 7px 0;\r\n  font-style: normal;\r\n}\r\n\r\n.option-row.checked {\r\n  background: #00529f;\r\n  color: #fff;\r\n}\r\n\r\n.option-row.checked span {\r\n  color: #fff;\r\n}\r\n\r\n.text-answer {\r\n  width: 100%;\r\n  height: 82px;\r\n  border: 1px solid #d9e1eb;\r\n  border-radius: 4px;\r\n  resize: none;\r\n  padding: 10px;\r\n  box-sizing: border-box;\r\n  font-size: 13px;\r\n  outline: none;\r\n}\r\n\r\n.unsupported,\r\n.empty-state {\r\n  height: 160px;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  color: #8894a5;\r\n  font-size: 13px;\r\n}\r\n\r\n.captcha-panel {\r\n  width: 420px;\r\n  min-height: 240px;\r\n  margin: 110px auto 0;\r\n  padding: 34px;\r\n  text-align: center;\r\n}\r\n\r\n.captcha-panel img {\r\n  max-width: 180px;\r\n  height: 54px;\r\n  object-fit: contain;\r\n  cursor: pointer;\r\n}\r\n\r\n.captcha-row {\r\n  margin-top: 22px;\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  gap: 8px;\r\n  font-size: 13px;\r\n}\r\n\r\n.captcha-row input {\r\n  width: 136px;\r\n  height: 34px;\r\n  border: 1px solid #d6deeb;\r\n  border-radius: 4px;\r\n  padding: 0 8px;\r\n}\r\n\r\n.captcha-panel button {\r\n  width: 180px;\r\n  height: 40px;\r\n  margin-top: 24px;\r\n  border: none;\r\n  border-radius: 22px;\r\n  background: #00529f;\r\n  color: #fff;\r\n  cursor: pointer;\r\n}\r\n\r\n.word-sheet {\r\n  padding: 16px 24px 28px;\r\n  color: #1f2a3a;\r\n}\r\n\r\n.word-head {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n  margin-bottom: 14px;\r\n}\r\n\r\n.word-head strong {\r\n  font-size: 22px;\r\n}\r\n\r\n.word-head button {\r\n  border: none;\r\n  color: #00529f;\r\n  background: transparent;\r\n  cursor: pointer;\r\n}\r\n\r\n.word-head span {\r\n  color: #8a98aa;\r\n}\r\n\r\n.word-item {\r\n  font-size: 14px;\r\n  line-height: 28px;\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcReadPraxis.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcReadPraxis.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcReadPraxis.vue?vue&type=template&id=4bf9d21b&scoped=true\"\nimport script from \"./PcReadPraxis.vue?vue&type=script&lang=js\"\nexport * from \"./PcReadPraxis.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcReadPraxis.vue?vue&type=style&index=0&id=4bf9d21b&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"4bf9d21b\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-practice-history\"},[_c('div',{staticClass:\"breadcrumb\"},[_vm._v(\"当前位置：首页>今日任务>练习记录\")]),_c('section',{staticClass:\"history-panel\"},[_c('div',{staticClass:\"panel-head\"},[_vm._m(0),_c('button',{attrs:{\"type\":\"button\"},on:{\"click\":_vm.goBack}},[_vm._v(\"返回\")])]),(_vm.loading)?_c('div',{staticClass:\"empty-state\"},[_vm._v(\"加载中...\")]):(_vm.historyList.length === 0)?_c('div',{staticClass:\"empty-state\"},[_vm._v(\"暂无练习记录\")]):_c('div',{staticClass:\"history-list\"},_vm._l((_vm.historyList),function(item,index){return _c('article',{key:item.id || index,staticClass:\"history-row\",on:{\"click\":function($event){return _vm.toDetail(item)}}},[_vm._m(1,true),_c('div',{staticClass:\"history-score\"},[_c('strong',[_vm._v(_vm._s(item.right_count || 0))]),_vm._v(\"/\"+_vm._s(item.total_count || 0)+\" \"),_c('span',[_vm._v(\"（第\"+_vm._s(index + 1)+\"次）\")]),_c('p',[_vm._v(\"正确率：\"+_vm._s(_vm.historyRate(item))+\"%\")])]),_c('div',{staticClass:\"history-meta\"},[_c('span',[_vm._v(\"交卷时间：\"+_vm._s(item.create_time || '-'))])])])}),0)])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"panel-title\"},[_c('span',{staticClass:\"title-icon\"}),_c('strong',[_vm._v(\"练习记录\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"history-title\"},[_vm._v(\"答题\"),_c('br'),_vm._v(\"记录\")])\n}]\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-practice-history\">\n    <div class=\"breadcrumb\">当前位置：首页&gt;今日任务&gt;练习记录</div>\n\n    <section class=\"history-panel\">\n      <div class=\"panel-head\">\n        <div class=\"panel-title\">\n          <span class=\"title-icon\"></span>\n          <strong>练习记录</strong>\n        </div>\n        <button type=\"button\" @click=\"goBack\">返回</button>\n      </div>\n\n      <div v-if=\"loading\" class=\"empty-state\">加载中...</div>\n      <div v-else-if=\"historyList.length === 0\" class=\"empty-state\">暂无练习记录</div>\n      <div v-else class=\"history-list\">\n        <article\n          v-for=\"(item, index) in historyList\"\n          :key=\"item.id || index\"\n          class=\"history-row\"\n          @click=\"toDetail(item)\"\n        >\n          <div class=\"history-title\">答题<br>记录</div>\n          <div class=\"history-score\">\n            <strong>{{ item.right_count || 0 }}</strong>/{{ item.total_count || 0 }}\n            <span>（第{{ index + 1 }}次）</span>\n            <p>正确率：{{ historyRate(item) }}%</p>\n          </div>\n          <div class=\"history-meta\">\n            <span>交卷时间：{{ item.create_time || '-' }}</span>\n          </div>\n        </article>\n      </div>\n    </section>\n  </div>\n</template>\n\n<script>\nimport { getHistoryList } from '@/api/listen'\n\nexport default {\n  name: 'PcPracticeHistory',\n  data() {\n    return {\n      loading: false,\n      historyList: [],\n      resourcesId: ''\n    }\n  },\n  computed: {\n    isRead() {\n      return this.$route.meta && this.$route.meta.practiceType === 'read'\n    }\n  },\n  methods: {\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    historyRate(item) {\n      const total = Number(item && item.total_count) || 0\n      const right = Number(item && item.right_count) || 0\n      return total ? ((right / total) * 100).toFixed(2) : '0.00'\n    },\n    async loadHistoryList() {\n      const user = this.getUser()\n      if (!user.sid || !this.resourcesId) return\n      this.loading = true\n      try {\n        const response = await getHistoryList({ sid: user.sid, resource_id: this.resourcesId })\n        this.historyList = response.code === 100 && Array.isArray(response.data) ? response.data : []\n      } finally {\n        this.loading = false\n      }\n    },\n    toDetail(item) {\n      if (!item) return\n      this.$router.push({\n        name: this.isRead ? 'PcPracticeDetailRead' : 'PcPracticeDetailListen',\n        query: {\n          resource_id: this.resourcesId,\n          his_id: item.id\n        }\n      })\n    },\n    goBack() {\n      this.$router.back()\n    }\n  },\n  mounted() {\n    this.resourcesId = this.$route.query.resources_id || this.$route.query.resource_id || ''\n    this.loadHistoryList()\n  }\n}\n</script>\n\n<style scoped>\n.pc-practice-history {\n  width: 1114px;\n  height: 583px;\n  color: #111c2d;\n  font-size: 13px;\n}\n\n.breadcrumb {\n  height: 22px;\n  font-size: 11px;\n  line-height: 18px;\n  color: #7d8692;\n}\n\n.history-panel {\n  height: 541px;\n  padding: 18px 24px;\n  overflow: hidden;\n  border-radius: 8px;\n  background: #fff;\n  box-shadow: 0 10px 24px rgba(24, 43, 77, 0.06);\n}\n\n.panel-head {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n}\n\n.panel-head button {\n  height: 30px;\n  padding: 0 18px;\n  border: none;\n  border-radius: 5px;\n  background: #00529f;\n  color: #fff;\n  font-size: 13px;\n  cursor: pointer;\n}\n\n.panel-title {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n}\n\n.title-icon {\n  width: 4px;\n  height: 16px;\n  border-radius: 999px;\n  background: #00529f;\n}\n\n.panel-title strong {\n  font-size: 17px;\n  color: #111c2d;\n}\n\n.history-list {\n  height: 472px;\n  margin-top: 18px;\n  overflow-y: auto;\n  padding-right: 8px;\n}\n\n.history-row {\n  min-height: 76px;\n  display: grid;\n  grid-template-columns: 76px 1fr 280px;\n  align-items: center;\n  gap: 18px;\n  margin-bottom: 14px;\n  padding: 12px 20px;\n  border-radius: 8px;\n  background: #f2f2f4;\n  cursor: pointer;\n  transition: background 0.2s ease, transform 0.2s ease;\n}\n\n.history-row:hover {\n  background: #eef6ff;\n  transform: translateY(-1px);\n}\n\n.history-title {\n  padding-right: 18px;\n  border-right: 1px solid #b8b8b8;\n  color: #111c2d;\n  font-size: 16px;\n  line-height: 20px;\n  text-align: center;\n}\n\n.history-score {\n  color: #656565;\n  font-size: 13px;\n  line-height: 20px;\n}\n\n.history-score strong {\n  color: #111c2d;\n  font-size: 24px;\n}\n\n.history-score span {\n  margin-left: 4px;\n}\n\n.history-score p {\n  margin: 2px 0 0;\n}\n\n.history-meta {\n  color: #656565;\n  font-size: 13px;\n  text-align: right;\n}\n\n.empty-state {\n  height: 420px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #8894a5;\n  font-size: 14px;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcPracticeHistory.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcPracticeHistory.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcPracticeHistory.vue?vue&type=template&id=217617ca&scoped=true\"\nimport script from \"./PcPracticeHistory.vue?vue&type=script&lang=js\"\nexport * from \"./PcPracticeHistory.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcPracticeHistory.vue?vue&type=style&index=0&id=217617ca&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"217617ca\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-practice-detail\"},[_c('div',{staticClass:\"breadcrumb\"},[_vm._v(\"当前位置：首页>今日任务>答题结果\")]),_c('div',{staticClass:\"detail-layout\",class:{ 'read-layout': _vm.isRead }},[_c('main',{staticClass:\"result-panel\"},[_c('div',{staticClass:\"panel-head\"},[_c('div',{staticClass:\"panel-title\"},[_c('span',{staticClass:\"title-icon\"}),_c('strong',[_vm._v(_vm._s(_vm.isRead ? '阅读结果' : '听力结果'))])]),_c('h1',[_vm._v(_vm._s(_vm.resourceName))])]),_c('div',{staticClass:\"summary-strip\"},[_c('div',{staticClass:\"score-box\"},[_c('strong',[_vm._v(_vm._s(_vm.rightCount))]),_c('span',[_vm._v(\"/\"+_vm._s(_vm.totalCount))])]),_c('div',{staticClass:\"summary-info\"},[_c('p',[_vm._v(\"共\"+_vm._s(_vm.answerInfo.countTotal || _vm.totalCount)+\"题，答对\"+_vm._s(_vm.answerInfo.rightCountTotal || 0)+\"题\")]),_c('p',[_vm._v(\"正确率：\"+_vm._s(_vm.rightPercent)+\"%\")])]),_c('div',{staticClass:\"submit-time\"},[_vm._v(\"交卷时间：\"+_vm._s(_vm.submitTime || '-'))])]),_c('div',{staticClass:\"question-scroll\"},[(_vm.loading)?_c('div',{staticClass:\"empty-state\"},[_vm._v(\"加载中...\")]):(_vm.jobList.length === 0)?_c('div',{staticClass:\"empty-state\"},[_vm._v(\"暂无答题结果\")]):_vm._l((_vm.jobList),function(item,index){return _c('article',{key:item.id || index,staticClass:\"question-block\"},[_c('h2',[_vm._v(\"题\"+_vm._s(index + 1))]),(item.title && !_vm.isFillType(item))?_c('div',{staticClass:\"question-title\",domProps:{\"innerHTML\":_vm._s(item.title)}}):_vm._e(),(item.type_id == 1 || item.type_id == 4)?_c('div',{staticClass:\"option-list\"},_vm._l((item.optionsArray),function(child,childIndex){return _c('div',{key:child.label || childIndex,staticClass:\"option-row\",class:{\n                user: _vm.answerLabels(item).includes(child.label),\n                right: _vm.rightLabels(item).includes(child.label)\n              }},[_c('span',[_vm._v(_vm._s(child.label))]),_c('em',[_vm._v(_vm._s(child.title))])])}),0):(_vm.isFillType(item))?_c('div',{staticClass:\"fill-result\"},[_vm._l((item.titleChunks),function(chunk,chunkIndex){return [(!chunk.isInput)?_c('span',{key:`t-${chunkIndex}`,domProps:{\"innerHTML\":_vm._s(chunk.text)}}):_c('strong',{key:`i-${chunkIndex}`,class:{ wrong: !_vm.answerAt(item, chunk.inputIndex).is_right }},[_vm._v(\" \"+_vm._s(_vm.answerDisplayText(item, chunk.inputIndex))+\" \")])]})],2):_c('div',{staticClass:\"question-title\",domProps:{\"innerHTML\":_vm._s(item.title)}}),_c('div',{staticClass:\"answer-line\"},[_c('span',[_vm._v(\"正确答案：\"+_vm._s(_vm.rightAnswerText(item)))]),_c('span',[_vm._v(\"你的答案：\"+_vm._s(_vm.userAnswerText(item)))])])])})],2)]),_c('aside',{staticClass:\"side-panel\"},[_c('section',{staticClass:\"article-card\"},[_c('div',{staticClass:\"panel-title\"},[_c('span',{staticClass:\"title-icon\"}),_c('strong',[_vm._v(\"原文\")]),(!_vm.isRead)?_c('button',{staticClass:\"origin-toggle\",attrs:{\"type\":\"button\",\"aria-expanded\":_vm.originVisible ? 'true' : 'false'},on:{\"click\":function($event){_vm.originVisible = !_vm.originVisible}}},[_vm._v(_vm._s(_vm.originVisible ? '收起原文' : '查看原文'))]):_vm._e()]),(_vm.isRead || _vm.originVisible)?[(_vm.isPdfResource)?_c('PdfViewer',{staticClass:\"pdf-reader\",attrs:{\"src\":_vm.resource.file_path}}):(_vm.resourceContent)?_c('ArticleParser',{staticClass:\"article-reader\",attrs:{\"content\":_vm.resourceContent},on:{\"word-click\":_vm.onWordClick}}):_c('div',{staticClass:\"empty-state\"},[_vm._v(\"暂无原文\")])]:_c('div',{staticClass:\"empty-state\"},[_vm._v(\"原文已隐藏，点击“查看原文”展开\")])],2),(!_vm.isRead)?_c('section',{staticClass:\"audio-card\"},[_c('audio',{ref:\"audioPlayer\",attrs:{\"src\":_vm.audioSrc},on:{\"timeupdate\":_vm.updateTime,\"loadedmetadata\":_vm.loadMetadata,\"ended\":function($event){_vm.audioPlaying = false}}}),_c('button',{staticClass:\"play-btn\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.toggleAudio}},[(!_vm.audioPlaying)?_c('span'):_c('i')]),_c('div',{staticClass:\"progress-track\",on:{\"click\":_vm.seekAudio}},[_c('span',{style:({ width: _vm.audioPercent + '%' })})]),_c('em',[_vm._v(_vm._s(_vm.audioTime))])]):_vm._e()])]),_c('van-action-sheet',{staticStyle:{\"min-height\":\"300px\",\"background-color\":\"aliceblue\",\"z-index\":\"9999\"},attrs:{\"title\":\"单词释义\"},model:{value:(_vm.wordShow),callback:function ($$v) {_vm.wordShow=$$v},expression:\"wordShow\"}},[_c('div',{staticClass:\"word-sheet\"},[_c('div',{staticClass:\"word-head\"},[_c('strong',[_vm._v(_vm._s(_vm.word))]),(!_vm.wordCollected)?_c('button',{attrs:{\"type\":\"button\"},on:{\"click\":_vm.addWord}},[_vm._v(\"收藏\")]):_c('span',[_vm._v(\"已收藏\")])]),_vm._l((_vm.wordDetail),function(item,index){return _c('div',{key:index,staticClass:\"word-item\"},[_vm._v(\" \"+_vm._s(item.type)+\"  :  \"+_vm._s(item.meaning_CH)+\" \")])})],2)])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n  <div class=\"pc-practice-detail\">\r\n    <div class=\"breadcrumb\">当前位置：首页&gt;今日任务&gt;答题结果</div>\r\n    <div class=\"detail-layout\" :class=\"{ 'read-layout': isRead }\">\r\n      <main class=\"result-panel\">\r\n        <div class=\"panel-head\">\r\n          <div class=\"panel-title\">\r\n            <span class=\"title-icon\"></span>\r\n            <strong>{{ isRead ? '阅读结果' : '听力结果' }}</strong>\r\n          </div>\r\n          <h1>{{ resourceName }}</h1>\r\n        </div>\r\n\r\n        <div class=\"summary-strip\">\r\n          <div class=\"score-box\">\r\n            <strong>{{ rightCount }}</strong>\r\n            <span>/{{ totalCount }}</span>\r\n          </div>\r\n          <div class=\"summary-info\">\r\n            <p>共{{ answerInfo.countTotal || totalCount }}题，答对{{ answerInfo.rightCountTotal || 0 }}题</p>\r\n            <p>正确率：{{ rightPercent }}%</p>\r\n          </div>\r\n          <div class=\"submit-time\">交卷时间：{{ submitTime || '-' }}</div>\r\n        </div>\r\n\r\n        <div class=\"question-scroll\">\r\n          <div v-if=\"loading\" class=\"empty-state\">加载中...</div>\r\n          <div v-else-if=\"jobList.length === 0\" class=\"empty-state\">暂无答题结果</div>\r\n          <article v-for=\"(item, index) in jobList\" v-else :key=\"item.id || index\" class=\"question-block\">\r\n            <h2>题{{ index + 1 }}</h2>\r\n            <div v-if=\"item.title && !isFillType(item)\" class=\"question-title\" v-html=\"item.title\"></div>\r\n\r\n            <div v-if=\"item.type_id == 1 || item.type_id == 4\" class=\"option-list\">\r\n              <div\r\n                v-for=\"(child, childIndex) in item.optionsArray\"\r\n                :key=\"child.label || childIndex\"\r\n                class=\"option-row\"\r\n                :class=\"{\r\n                  user: answerLabels(item).includes(child.label),\r\n                  right: rightLabels(item).includes(child.label)\r\n                }\"\r\n              >\r\n                <span>{{ child.label }}</span>\r\n                <em>{{ child.title }}</em>\r\n              </div>\r\n            </div>\r\n\r\n            <div v-else-if=\"isFillType(item)\" class=\"fill-result\">\r\n              <template v-for=\"(chunk, chunkIndex) in item.titleChunks\">\r\n                <span v-if=\"!chunk.isInput\" :key=\"`t-${chunkIndex}`\" v-html=\"chunk.text\"></span>\r\n                <strong\r\n                  v-else\r\n                  :key=\"`i-${chunkIndex}`\"\r\n                  :class=\"{ wrong: !answerAt(item, chunk.inputIndex).is_right }\"\r\n                >\r\n                  {{ answerDisplayText(item, chunk.inputIndex) }}\n                </strong>\r\n              </template>\r\n            </div>\r\n\r\n            <div v-else class=\"question-title\" v-html=\"item.title\"></div>\r\n\r\n            <div class=\"answer-line\">\r\n              <span>正确答案：{{ rightAnswerText(item) }}</span>\r\n              <span>你的答案：{{ userAnswerText(item) }}</span>\r\n            </div>\r\n          </article>\r\n        </div>\r\n      </main>\r\n\r\n      <aside class=\"side-panel\">\r\n        <section class=\"article-card\">\r\n          <div class=\"panel-title\">\r\n            <span class=\"title-icon\"></span>\n            <strong>原文</strong>\n            <button\n              v-if=\"!isRead\"\n              type=\"button\"\n              class=\"origin-toggle\"\n              :aria-expanded=\"originVisible ? 'true' : 'false'\"\n              @click=\"originVisible = !originVisible\"\n            >{{ originVisible ? '收起原文' : '查看原文' }}</button>\n          </div>\n          <template v-if=\"isRead || originVisible\">\n            <PdfViewer v-if=\"isPdfResource\" class=\"pdf-reader\" :src=\"resource.file_path\" />\n            <ArticleParser\n              v-else-if=\"resourceContent\"\n              class=\"article-reader\"\n              :content=\"resourceContent\"\n              @word-click=\"onWordClick\"\n            />\n            <div v-else class=\"empty-state\">暂无原文</div>\n          </template>\n          <div v-else class=\"empty-state\">原文已隐藏，点击“查看原文”展开</div>\n        </section>\r\n\r\n        <section v-if=\"!isRead\" class=\"audio-card\">\r\n          <audio\r\n            ref=\"audioPlayer\"\r\n            :src=\"audioSrc\"\r\n            @timeupdate=\"updateTime\"\r\n            @loadedmetadata=\"loadMetadata\"\r\n            @ended=\"audioPlaying = false\"\r\n          ></audio>\r\n          <button type=\"button\" class=\"play-btn\" @click=\"toggleAudio\">\r\n            <span v-if=\"!audioPlaying\"></span>\r\n            <i v-else></i>\r\n          </button>\r\n          <div class=\"progress-track\" @click=\"seekAudio\">\r\n            <span :style=\"{ width: audioPercent + '%' }\"></span>\r\n          </div>\r\n          <em>{{ audioTime }}</em>\r\n        </section>\r\n      </aside>\r\n    </div>\r\n\r\n    <van-action-sheet\r\n      style=\"min-height: 300px;background-color: aliceblue;z-index: 9999;\"\r\n      v-model=\"wordShow\"\r\n      title=\"单词释义\"\r\n    >\r\n      <div class=\"word-sheet\">\r\n        <div class=\"word-head\">\r\n          <strong>{{ word }}</strong>\r\n          <button v-if=\"!wordCollected\" type=\"button\" @click=\"addWord\">收藏</button>\r\n          <span v-else>已收藏</span>\r\n        </div>\r\n        <div v-for=\"(item, index) in wordDetail\" :key=\"index\" class=\"word-item\">\r\n          {{ item.type }}&nbsp;&nbsp;:&nbsp;&nbsp;{{ item.meaning_CH }}\r\n        </div>\r\n      </div>\r\n    </van-action-sheet>\r\n  </div>\r\n</template>\r\n\r\n<script>\nimport { getHistoryInfo, getJobList, getsHistory, jobAnswer } from '@/api/listen'\nimport { AddWord, getListByWord } from '@/api/home'\r\nimport { decrypt } from '@/api/aes'\r\nimport ArticleParser from '@/components/ArticleParser'\nimport PdfViewer from '@/components/PdfViewer'\n\r\nexport default {\r\n  name: 'PcPracticeDetail',\r\n  components: { ArticleParser, PdfViewer },\n  data() {\r\n    return {\r\n      loading: false,\n      originVisible: false,\n      resources: {\r\n        resources: {}\r\n      },\r\n      jobList: [],\r\n      answerInfo: {},\r\n      answerMap: {},\n      flatAnswers: [],\n      resourcesId: '',\n      historyId: '',\n      audioSrc: '',\n      audioPlaying: false,\r\n      audioPercent: 0,\r\n      currentSeconds: 0,\r\n      durationSeconds: 0,\r\n      wordShow: false,\r\n      wordDetail: [],\r\n      word: '',\r\n      wordCollected: false\r\n    }\r\n  },\r\n  computed: {\r\n    isRead() {\r\n      return this.$route.meta && this.$route.meta.practiceType === 'read'\r\n    },\r\n    resource() {\r\n      return this.resources.resources || {}\r\n    },\r\n    resourceName() {\r\n      return this.resource.name || '答题结果'\r\n    },\r\n    resourceContent() {\n      return this.resource.content || ''\n    },\n    isPdfResource() {\n      const fileType = String(this.resource.file_type || '').toLowerCase()\n      const filePath = String(this.resource.file_path || '').toLowerCase().split('?')[0]\n      return fileType.includes('pdf') || filePath.endsWith('.pdf')\n    },\n    totalCount() {\r\n      return this.jobList.reduce((total, item) => {\r\n        return total + (this.isFillType(item) ? this.fillBlankCount(item) : 1)\r\n      }, 0)\r\n    },\r\n    rightCount() {\r\n      return this.jobList.reduce((total, item) => {\r\n        const answers = this.answersFor(item)\r\n        if (this.isFillType(item)) {\r\n          return total + answers.filter(row => Number(row.is_right) === 1).length\r\n        }\r\n        return total + (answers.some(row => Number(row.is_right) === 1) ? 1 : 0)\r\n      }, 0)\r\n    },\r\n    rightPercent() {\r\n      const total = Number(this.totalCount) || 0\r\n      const right = Number(this.rightCount) || 0\r\n      return total ? ((right / total) * 100).toFixed(2) : '0.00'\r\n    },\r\n    submitTime() {\r\n      return this.flatAnswers[0] && this.flatAnswers[0].create_time\r\n    },\r\n    audioTime() {\r\n      return this.formatTime(this.durationSeconds || this.currentSeconds)\r\n    }\r\n  },\r\n  watch: {\n    '$route.fullPath'() {\n      this.originVisible = false\n    }\n  },\n  methods: {\n    getUser() {\r\n      return JSON.parse(localStorage.getItem('user') || '{}')\r\n    },\r\n    parseIfJson(value) {\r\n      if (Array.isArray(value) || typeof value === 'object') return value\r\n      if (!value) return value\r\n      try {\r\n        return JSON.parse(value)\r\n      } catch (error) {\r\n        return value\r\n      }\r\n    },\r\n    normalizeOptions(options) {\r\n      const value = this.parseIfJson(options)\r\n      return Array.isArray(value) ? value : []\r\n    },\r\n    normalizeJobList(list) {\r\n      return (list || []).map(item => {\r\n        const row = {\r\n          ...item,\r\n          optionsArray: this.normalizeOptions(item.options),\r\n          optionsAnswerParsed: this.parseIfJson(item.options_answer)\r\n        }\r\n        if (this.isFillType(row)) {\r\n          row.titleChunks = this.parseFillTitle(row.title)\r\n        }\r\n        return row\r\n      })\r\n    },\r\n    parseFillTitle(text) {\r\n      const value = String(text || '')\r\n        .replace(/<p[^>]*>/gi, '<br>')\r\n        .replace(/<\\/p>/gi, '')\r\n        .replace(/&nbsp;/gi, ' ')\r\n      const normalized = value.replace(\r\n        /_+\\s*[\\(\\uFF08]?\\s*(\\d+)\\s*[\\)\\uFF09]?\\s*_+/g,\r\n        (_, number) => `[[BLANK:${number}]]`\r\n      )\r\n      const chunks = []\r\n      const regex = /\\[\\[BLANK:(\\d+)\\]\\]/g\r\n      let lastIndex = 0\r\n      let match\r\n\r\n      while ((match = regex.exec(normalized)) !== null) {\r\n        if (match.index > lastIndex) {\r\n          chunks.push({ isInput: false, text: normalized.slice(lastIndex, match.index) })\r\n        }\r\n        chunks.push({ isInput: true, inputIndex: chunks.filter(chunk => chunk.isInput).length })\r\n        lastIndex = regex.lastIndex\r\n      }\r\n      if (lastIndex < normalized.length) {\r\n        chunks.push({ isInput: false, text: normalized.slice(lastIndex) })\r\n      }\r\n      return chunks.length ? chunks : [{ isInput: false, text: value }]\r\n    },\r\n    isFillType(item) {\r\n      return item.type_id == 2 || item.type_id == 5 || item.type_id == 7 || item.type_id == 8\r\n    },\r\n    fillBlankCount(item) {\r\n      if (!this.isFillType(item)) return 0\r\n      const chunkCount = (item.titleChunks || []).filter(chunk => chunk.isInput).length\r\n      if (chunkCount > 0) return chunkCount\r\n      return (this.answerMap[item.id] || []).length\r\n    },\r\n    answersFor(item) {\r\n      const answers = (this.answerMap[item.id] || []).slice()\r\n      if (this.isFillType(item)) {\r\n        const count = this.fillBlankCount(item)\r\n        return count ? answers.slice(0, count) : answers\r\n      }\r\n      return answers\r\n    },\r\n    answerAt(item, index) {\n      return this.answersFor(item)[index] || {}\n    },\n    answerDisplayText(item, index) {\n      const answer = this.answerAt(item, index).answer\n      return answer ? answer : '未输入'\n    },\n    answerLabels(item) {\r\n      return this.parseAnswerTokens(item.user_answer)\r\n    },\r\n    rightLabels(item) {\r\n      const value = item.optionsAnswerParsed\r\n      if (Array.isArray(value)) return value.map(row => row.label || row.lable || row.title || '').filter(Boolean)\r\n      return this.parseAnswerTokens(item.options_answer)\r\n    },\r\n    parseAnswerTokens(value) {\r\n      if (Array.isArray(value)) {\r\n        return value\r\n          .map(row => row && (row.label || row.lable || row.title || row.answer || ''))\r\n          .filter(Boolean)\r\n      }\r\n      return String(value || '')\r\n        .split(/[|,]/)\r\n        .map(v => v.trim())\r\n        .filter(Boolean)\r\n    },\r\n    rightAnswerText(item) {\r\n      const value = item.optionsAnswerParsed\r\n      if (Array.isArray(value)) {\r\n        return value.map((row, index) => `(${index + 1}) ${row.title || row.label || row.lable || ''}`).join(' ')\r\n      }\r\n      if (this.isFillType(item) && item.optionsArray.length) {\r\n        return item.optionsArray.map((row, index) => `(${index + 1}) ${row.title || row.label || ''}`).join(' ')\r\n      }\r\n      return value || '-'\r\n    },\r\n    userAnswerText(item) {\n      const answers = this.answersFor(item)\n      if (this.isFillType(item)) {\n        const count = this.fillBlankCount(item)\n        return Array.from({ length: count })\n          .map((_, index) => `(${index + 1}) ${this.answerDisplayText(item, index)}`)\n          .join(' ')\n      }\n      if (answers.length) {\n        return answers.map(row => row.answer || '').filter(Boolean).join(item.type_id == 1 || item.type_id == 4 ? ',' : ' | ') || '未作'\r\n      }\r\n      return item.user_answer || '未作'\r\n    },\r\n    normalizeAnswerMap(list) {\r\n      return (list || []).reduce((map, item) => {\r\n        const jobId = item.job_id\r\n        if (!map[jobId]) map[jobId] = []\r\n        map[jobId].push(item)\r\n        return map\r\n      }, {})\r\n    },\r\n    async loadData() {\n      const user = this.getUser()\n      if (!user.sid) return\n      this.loading = true\n      try {\n        const params = { sid: user.sid, resource_id: this.resourcesId }\n        const response = this.historyId\n          ? await getsHistory({ ...params, s_id: this.historyId })\n          : await getJobList(params)\n        if (response.code === 100) {\n          const data = response.data || { resources: {} }\n          const rawJobList = data.jobList || []\n          const jobList = typeof rawJobList === 'string' ? JSON.parse(decrypt(rawJobList)) : rawJobList\n          this.resources = data\n          this.jobList = this.normalizeJobList(jobList)\n          this.audioSrc = data.resources ? data.resources.file_path : ''\n          await this.loadAnswers()\r\n        }\r\n      } finally {\r\n        this.loading = false\r\n      }\r\n    },\r\n    async loadAnswers() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const params = { sid: user.sid, resource_id: this.resourcesId }\n      const response = this.historyId\n        ? await getHistoryInfo({ ...params, s_id: this.historyId })\n        : await jobAnswer(params)\n      if (response.code !== 100) return\n      const data = response.data || {}\n      const list = data.jobAnswerList || data.array || []\n      this.answerMap = this.normalizeAnswerMap(list)\n      this.flatAnswers = list\n      this.answerInfo = {\r\n        ...data,\r\n        countTotal: this.totalCount,\r\n        rightCountTotal: this.rightCount\r\n      }\r\n    },\r\n    async onWordClick(word) {\r\n      const response = await getListByWord({ word })\r\n      if (response.code === 100 && response.data.length > 0) {\r\n        this.wordCollected = false\r\n        this.wordShow = true\r\n        this.wordDetail = response.data\r\n        this.word = word\r\n      }\r\n    },\r\n    async addWord() {\r\n      const user = this.getUser()\r\n      if (!user.sid || !this.word) return\r\n      const response = await AddWord({ uid: user.sid, word: this.word })\r\n      if (response.code === 100) {\r\n        this.wordCollected = true\r\n      }\r\n    },\r\n    toggleAudio() {\r\n      const audio = this.$refs.audioPlayer\r\n      if (!audio) return\r\n      if (this.audioPlaying) {\r\n        audio.pause()\r\n        this.audioPlaying = false\r\n      } else {\r\n        audio.play()\r\n        this.audioPlaying = true\r\n      }\r\n    },\r\n    seekAudio(event) {\r\n      const audio = this.$refs.audioPlayer\r\n      if (!audio || !this.durationSeconds) return\r\n      const rect = event.currentTarget.getBoundingClientRect()\r\n      const percent = Math.min(1, Math.max(0, (event.clientX - rect.left) / rect.width))\r\n      audio.currentTime = percent * this.durationSeconds\r\n    },\r\n    updateTime(event) {\r\n      const audio = event.target\r\n      this.currentSeconds = audio.currentTime || 0\r\n      this.durationSeconds = audio.duration || this.durationSeconds\r\n      this.audioPercent = this.durationSeconds ? Math.floor((this.currentSeconds / this.durationSeconds) * 100) : 0\r\n    },\r\n    loadMetadata(event) {\r\n      this.durationSeconds = event.target.duration || 0\r\n    },\r\n    formatTime(seconds) {\r\n      const value = Number(seconds) || 0\r\n      const minutes = Math.floor(value / 60)\r\n      const remain = Math.floor(value % 60)\r\n      return `${String(minutes).padStart(2, '0')}:${String(remain).padStart(2, '0')}`\r\n    }\r\n  },\r\n  mounted() {\n    this.resourcesId = this.$route.query.resource_id || this.$route.query.resources_id || ''\n    this.historyId = this.$route.query.his_id || ''\n    this.loadData()\n  }\n}\n</script>\r\n\r\n<style scoped>\r\n.pc-practice-detail {\r\n  width: 1114px;\r\n  height: 583px;\r\n  color: #111c2d;\r\n  font-size: 13px;\r\n}\r\n\r\n.breadcrumb {\r\n  height: 22px;\r\n  font-size: 11px;\r\n  line-height: 18px;\r\n  color: #7d8692;\r\n}\r\n\r\n.detail-layout {\r\n  height: 541px;\r\n  display: grid;\r\n  grid-template-columns: 650px 448px;\r\n  gap: 16px;\r\n}\r\n\r\n.detail-layout.read-layout {\r\n  grid-template-columns: repeat(2, minmax(0, 1fr));\r\n}\r\n\r\n.result-panel,\r\n.article-card,\r\n.audio-card {\r\n  background: rgba(255, 255, 255, 0.96);\r\n  border-radius: 6px;\r\n  box-sizing: border-box;\r\n}\r\n\r\n.read-layout .result-panel {\r\n  order: 2;\r\n}\r\n\r\n.read-layout .side-panel {\r\n  order: 1;\r\n}\r\n\r\n.result-panel {\r\n  height: 541px;\r\n  padding: 16px 22px 18px;\r\n  display: flex;\r\n  flex-direction: column;\r\n}\r\n\r\n.panel-title {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 8px;\r\n}\r\n\r\n.title-icon {\r\n  width: 13px;\r\n  height: 13px;\r\n  display: inline-block;\r\n  background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat;\r\n}\r\n\r\n.panel-title strong {\r\n  font-size: 15px;\r\n  line-height: 22px;\r\n  color: #111c2d;\r\n}\r\n\r\n.panel-head h1 {\r\n  margin: 6px 80px 10px;\r\n  font-size: 15px;\r\n  line-height: 22px;\r\n  text-align: center;\r\n}\r\n\r\n.summary-strip {\r\n  min-height: 72px;\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 18px;\r\n  padding: 10px 18px;\r\n  border-radius: 6px;\r\n  background: #f5f8fc;\r\n  box-sizing: border-box;\r\n}\r\n\r\n.score-box strong {\r\n  font-size: 30px;\r\n  color: #00529f;\r\n}\r\n\r\n.score-box span {\r\n  color: #8a94a3;\r\n}\r\n\r\n.summary-info {\r\n  flex: 1;\r\n}\r\n\r\n.summary-info p {\r\n  margin: 3px 0;\r\n  color: #334155;\r\n}\r\n\r\n.submit-time {\r\n  color: #8a94a3;\r\n  font-size: 12px;\r\n}\r\n\r\n.question-scroll {\r\n  flex: 1;\r\n  min-height: 0;\r\n  margin-top: 14px;\r\n  overflow-y: auto;\r\n  padding-right: 8px;\r\n}\r\n\r\n.question-scroll::-webkit-scrollbar,\r\n.article-reader::-webkit-scrollbar {\r\n  width: 4px;\r\n}\r\n\r\n.question-scroll::-webkit-scrollbar-thumb,\r\n.article-reader::-webkit-scrollbar-thumb {\r\n  border-radius: 999px;\r\n  background: #d5dce6;\r\n}\r\n\r\n.question-block {\r\n  padding-bottom: 16px;\r\n  border-bottom: 1px solid #edf1f6;\r\n}\r\n\r\n.question-block + .question-block {\r\n  margin-top: 18px;\r\n}\r\n\r\n.question-block h2 {\r\n  margin: 0 0 8px;\r\n  font-size: 15px;\r\n  line-height: 22px;\r\n}\r\n\r\n.question-title,\r\n.fill-result {\r\n  margin-bottom: 8px;\r\n  font-size: 13px;\r\n  line-height: 22px;\r\n  color: #202a39;\r\n}\r\n\r\n.fill-result strong {\r\n  display: inline-block;\r\n  margin: 0 5px 4px;\r\n  padding: 0 8px;\r\n  border-bottom: 1px solid #54a4ee;\r\n  color: #24a268;\r\n}\r\n\r\n.fill-result strong.wrong {\r\n  color: #e33d45;\r\n}\r\n\r\n.option-list {\r\n  display: grid;\r\n  gap: 5px;\r\n}\r\n\r\n.option-row {\r\n  min-height: 32px;\r\n  display: grid;\r\n  grid-template-columns: 36px 1fr;\r\n  align-items: center;\r\n  background: #f0f0f2;\r\n  color: #1c2636;\r\n  font-size: 13px;\r\n}\r\n\r\n.option-row span {\r\n  text-align: center;\r\n  color: #5d6570;\r\n  font-weight: 700;\r\n}\r\n\r\n.option-row em {\r\n  padding: 7px 10px 7px 0;\r\n  font-style: normal;\r\n}\r\n\r\n.option-row.user {\r\n  background: #ffecef;\r\n}\r\n\r\n.option-row.right {\r\n  background: #e8f7ef;\r\n}\r\n\r\n.option-row.right span {\r\n  color: #24a268;\r\n}\r\n\r\n.answer-line {\r\n  margin-top: 10px;\r\n  display: grid;\r\n  gap: 4px;\r\n  color: #5b6573;\r\n  font-size: 12px;\r\n}\r\n\r\n.side-panel {\r\n  height: 541px;\r\n  min-width: 0;\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 14px;\r\n}\r\n\r\n.article-card {\r\n  flex: 1;\r\n  min-height: 0;\r\n  padding: 16px 18px;\r\n  display: flex;\r\n  flex-direction: column;\r\n}\r\n\r\n.origin-toggle {\n  margin-left: auto;\n  padding: 4px 10px;\n  border: 1px solid #c8dff5;\n  border-radius: 4px;\n  background: #f0f7ff;\n  color: #00529f;\n  font-size: 12px;\n  cursor: pointer;\n}\n\n.origin-toggle:hover {\n  background: #e1efff;\n}\n\n.pdf-reader {\n  flex: 1;\n  min-height: 0;\n  display: flex;\n  flex-direction: column;\n  margin-top: 12px;\n  overflow: hidden;\n}\n\n::v-deep .pdf-reader .pdf-toolbar {\n  flex-shrink: 0;\n}\n\n::v-deep .pdf-reader .pdf-pages {\n  flex: 1;\n  min-height: 0;\n}\n\n::v-deep .article-reader {\n  flex: 1;\r\n  min-height: 0;\r\n  margin-top: 12px;\r\n  overflow-y: auto;\r\n}\r\n\r\n::v-deep .article-reader .article-container {\r\n  height: auto;\r\n  overflow: visible;\r\n}\r\n\r\n::v-deep .article-reader .article-content {\r\n  width: auto;\r\n  margin: 0;\r\n  padding: 0 6px 18px 0;\r\n  font-size: 13px;\r\n  line-height: 23px;\r\n  color: #1f2a3a;\r\n  text-align: justify;\r\n}\r\n\r\n.audio-card {\r\n  height: 58px;\r\n  padding: 0 16px;\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 12px;\r\n}\r\n\r\n.play-btn {\r\n  width: 30px;\r\n  height: 30px;\r\n  border: none;\r\n  border-radius: 50%;\r\n  background: linear-gradient(180deg, #79cfff, #3fa7f3);\r\n  box-shadow: 0 2px 4px rgba(39, 128, 218, 0.28);\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  cursor: pointer;\r\n}\r\n\r\n.play-btn span {\r\n  width: 0;\r\n  height: 0;\r\n  margin-left: 2px;\r\n  border-top: 7px solid transparent;\r\n  border-bottom: 7px solid transparent;\r\n  border-left: 10px solid #fff;\r\n}\r\n\r\n.play-btn i {\r\n  width: 10px;\r\n  height: 13px;\r\n  border-left: 4px solid #fff;\r\n  border-right: 4px solid #fff;\r\n}\r\n\r\n.progress-track {\r\n  flex: 1;\r\n  height: 5px;\r\n  border-radius: 999px;\r\n  background: #dedede;\r\n  cursor: pointer;\r\n}\r\n\r\n.progress-track span {\r\n  height: 5px;\r\n  border-radius: 999px;\r\n  display: block;\r\n  background: linear-gradient(90deg, #0189e9, #79d7ff);\r\n}\r\n\r\n.audio-card em {\r\n  width: 42px;\r\n  font-style: normal;\r\n  color: #8c8f96;\r\n  font-size: 12px;\r\n}\r\n\r\n.empty-state {\r\n  min-height: 120px;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  color: #8894a5;\r\n}\r\n\r\n.word-sheet {\r\n  padding: 16px 24px 28px;\r\n  color: #1f2a3a;\r\n}\r\n\r\n.word-head {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n  margin-bottom: 14px;\r\n}\r\n\r\n.word-head strong {\r\n  font-size: 22px;\r\n}\r\n\r\n.word-head button {\r\n  border: none;\r\n  color: #00529f;\r\n  background: transparent;\r\n  cursor: pointer;\r\n}\r\n\r\n.word-head span {\r\n  color: #8a98aa;\r\n}\r\n\r\n.word-item {\r\n  font-size: 14px;\r\n  line-height: 28px;\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcPracticeDetail.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcPracticeDetail.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcPracticeDetail.vue?vue&type=template&id=21e144a0&scoped=true\"\nimport script from \"./PcPracticeDetail.vue?vue&type=script&lang=js\"\nexport * from \"./PcPracticeDetail.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcPracticeDetail.vue?vue&type=style&index=0&id=21e144a0&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"21e144a0\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-about\"},[_c('div',{staticClass:\"breadcrumb\"},[_vm._v(\"当前位置：首页-我的-关于慧学\")]),_vm._m(0),_c('div',{staticClass:\"content-grid\"},[_c('section',{staticClass:\"panel highlights-panel\"},[_c('PanelTitle',{attrs:{\"title\":\"平台亮点\"}}),_c('div',{staticClass:\"highlight-grid\"},_vm._l((_vm.highlights),function(item){return _c('article',{key:item.title,staticClass:\"highlight-card\"},[_c('div',{staticClass:\"highlight-icon\"},[_vm._v(_vm._s(item.icon))]),_c('div',[_c('h2',[_vm._v(_vm._s(item.title))]),_c('p',[_vm._v(_vm._s(item.text))])])])}),0)],1),_c('section',{staticClass:\"panel about-panel\"},[_c('PanelTitle',{attrs:{\"title\":\"关于慧学外语智能学习平台\"}}),_vm._m(1)],1)])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('section',{staticClass:\"hero-panel\"},[_c('div',[_c('h1',[_vm._v(\"AI赋能 创新育人\")]),_c('p',[_vm._v(\"智慧测评、智慧伴学、自主学习、因材施教\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"about-copy\"},[_c('p',[_vm._v(\" 为更好服务国家战略与学生成长成才需求，深入实施数智赋能外语类公共课程教学，学校主动探索人工智能技术支持下的外语教与学数智化工具，自主研发慧学外语智能学习平台（ZJU E-LANG）。 \")]),_c('p',[_vm._v(\" 平台以《中国英语能力等级量表》为依据，以认知诊断测评技术为核心，由人工智能大模型驱动，建设英语能力自适应诊断测试、优质线上教学资源、自适应自主学习、英文写作创新实践、人机对话口语和可视化测评反馈等模块。 \")]),_c('p',[_vm._v(\" 平台通过“自适应诊断-自适应学习-可视化评价”的学习链路，为学生设计符合其能力水平并可动态调整的学习方案，促进英语能力持续提升。 \")])])\n}]\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-about\">\n    <div class=\"breadcrumb\">当前位置：首页-我的-关于慧学</div>\n\n    <section class=\"hero-panel\">\n      <div>\n        <h1>AI赋能 创新育人</h1>\n        <p>智慧测评、智慧伴学、自主学习、因材施教</p>\n      </div>\n    </section>\n\n    <div class=\"content-grid\">\n      <section class=\"panel highlights-panel\">\n        <PanelTitle title=\"平台亮点\" />\n        <div class=\"highlight-grid\">\n          <article v-for=\"item in highlights\" :key=\"item.title\" class=\"highlight-card\">\n            <div class=\"highlight-icon\">{{ item.icon }}</div>\n            <div>\n              <h2>{{ item.title }}</h2>\n              <p>{{ item.text }}</p>\n            </div>\n          </article>\n        </div>\n      </section>\n\n      <section class=\"panel about-panel\">\n        <PanelTitle title=\"关于慧学外语智能学习平台\" />\n        <div class=\"about-copy\">\n          <p>\n            为更好服务国家战略与学生成长成才需求，深入实施数智赋能外语类公共课程教学，学校主动探索人工智能技术支持下的外语教与学数智化工具，自主研发慧学外语智能学习平台（ZJU E-LANG）。\n          </p>\n          <p>\n            平台以《中国英语能力等级量表》为依据，以认知诊断测评技术为核心，由人工智能大模型驱动，建设英语能力自适应诊断测试、优质线上教学资源、自适应自主学习、英文写作创新实践、人机对话口语和可视化测评反馈等模块。\n          </p>\n          <p>\n            平台通过“自适应诊断-自适应学习-可视化评价”的学习链路，为学生设计符合其能力水平并可动态调整的学习方案，促进英语能力持续提升。\n          </p>\n        </div>\n      </section>\n    </div>\n  </div>\n</template>\n\n<script>\nimport Vue from 'vue'\n\nconst PanelTitle = Vue.component('PcAboutPanelTitle', {\n  functional: true,\n  props: { title: String },\n  render(h, ctx) {\n    return h('div', { class: 'title-wrap' }, [\n      h('span', { class: 'title-icon' }),\n      h('strong', ctx.props.title)\n    ])\n  }\n})\n\nexport default {\n  name: 'PcAbout',\n  components: { PanelTitle },\n  data() {\n    return {\n      highlights: [\n        {\n          icon: '教',\n          title: '变革教学模式',\n          text: '贴近教学目标，持续扩充教学资源库，融合 AI 技术，为学生提供写作指导、远程写作预约等服务。'\n        },\n        {\n          icon: '学',\n          title: '赋能自主学习',\n          text: '结合学生能力诊断，个性化推荐学习资料，提供数字人口语对话、AI 互动伴学等学习支持。'\n        },\n        {\n          icon: '评',\n          title: '改革评价方式',\n          text: '应用中国英语能力等级量表，融合自适应诊断技术，构建更精准的英语能力测评体系。'\n        },\n        {\n          icon: '研',\n          title: '践行科教融合',\n          text: '沉淀学习行为和测评数据，支持教学研究、学术分析与课程持续优化。'\n        }\n      ]\n    }\n  }\n}\n</script>\n\n<style scoped>\n.pc-about {\n  width: 1114px;\n  height: 583px;\n  color: #111c2d;\n}\n\n.breadcrumb {\n  height: 26px;\n  font-size: 12px;\n  line-height: 18px;\n  color: #7d8692;\n}\n\n.hero-panel {\n  height: 128px;\n  box-sizing: border-box;\n  padding: 28px 36px;\n  border-radius: 6px;\n  background: linear-gradient(90deg, #eef7ff 0%, #d8ecff 54%, #f7fbff 100%);\n  display: flex;\n  align-items: center;\n}\n\n.hero-panel h1 {\n  margin: 0;\n  font-size: 30px;\n  line-height: 38px;\n  color: #102238;\n}\n\n.hero-panel p {\n  margin: 8px 0 0;\n  font-size: 15px;\n  color: #50627a;\n}\n\n.content-grid {\n  height: 417px;\n  margin-top: 12px;\n  display: grid;\n  grid-template-columns: 520px 1fr;\n  gap: 14px;\n}\n\n.panel {\n  min-width: 0;\n  background: rgba(255, 255, 255, 0.96);\n  border-radius: 6px;\n  box-sizing: border-box;\n  padding: 18px 22px;\n}\n\n::v-deep .title-wrap {\n  display: flex;\n  align-items: center;\n}\n\n::v-deep .title-icon {\n  width: 13px;\n  height: 13px;\n  margin-right: 6px;\n  background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat;\n}\n\n::v-deep .title-wrap strong {\n  font-size: 16px;\n  line-height: 22px;\n  color: #152237;\n}\n\n.highlight-grid {\n  margin-top: 18px;\n  display: grid;\n  grid-template-columns: repeat(2, minmax(0, 1fr));\n  gap: 12px;\n}\n\n.highlight-card {\n  min-height: 146px;\n  padding: 16px 14px;\n  box-sizing: border-box;\n  border-radius: 6px;\n  background: #eef7ff;\n  display: grid;\n  grid-template-columns: 42px 1fr;\n  gap: 12px;\n}\n\n.highlight-icon {\n  width: 42px;\n  height: 42px;\n  border-radius: 6px;\n  background: #0b5aa6;\n  color: #fff;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 20px;\n  font-weight: 700;\n}\n\n.highlight-card h2 {\n  margin: 0;\n  font-size: 16px;\n  line-height: 22px;\n  color: #102238;\n}\n\n.highlight-card p {\n  margin: 8px 0 0;\n  font-size: 12px;\n  line-height: 20px;\n  color: #5f6f83;\n}\n\n.about-copy {\n  height: 344px;\n  margin-top: 18px;\n  overflow-y: auto;\n  padding-right: 10px;\n}\n\n.about-copy::-webkit-scrollbar {\n  width: 4px;\n}\n\n.about-copy::-webkit-scrollbar-thumb {\n  border-radius: 999px;\n  background: #d5dce6;\n}\n\n.about-copy p {\n  margin: 0 0 16px;\n  text-indent: 2em;\n  font-size: 14px;\n  line-height: 26px;\n  color: #4f5f73;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcAbout.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcAbout.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcAbout.vue?vue&type=template&id=5c6bdb6c&scoped=true\"\nimport script from \"./PcAbout.vue?vue&type=script&lang=js\"\nexport * from \"./PcAbout.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcAbout.vue?vue&type=style&index=0&id=5c6bdb6c&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"5c6bdb6c\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('PcChat',{attrs:{\"mode\":\"index\"}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-chat\"},[_c('div',{staticClass:\"breadcrumb\"},[_vm._v(\"当前位置：首页-\"+_vm._s(_vm.sectionName)+\"-ai对话\")]),_c('section',{staticClass:\"chat-panel\"},[_c('audio',{ref:\"audioPlayer\",attrs:{\"src\":_vm.audioUrl},on:{\"ended\":_vm.onAudioEnded}}),_c('div',{ref:\"scrollBody\",staticClass:\"message-list\"},[(_vm.loadingHistory)?_c('div',{staticClass:\"history-tip\"},[_vm._v(\"历史加载中...\")]):_vm._e(),(_vm.chatItemAnswer)?_c('div',{staticClass:\"preset-answer\",domProps:{\"innerHTML\":_vm._s(_vm.chatItemAnswer)}}):_vm._e(),_vm._l((_vm.msgList),function(item,index){return [(item.question)?_c('div',{key:`q-${index}`,staticClass:\"message-row question-row\"},[_c('div',{staticClass:\"question-bubble\"},[_vm._v(_vm._s(item.question))])]):_vm._e(),(item.answer)?_c('div',{key:`a-${index}`,staticClass:\"message-row answer-row\"},[_c('div',{staticClass:\"answer-bubble\"},[_c('div',{staticClass:\"answer-content\",domProps:{\"innerHTML\":_vm._s(_vm.simpleParse(item.answer))}}),_c('div',{staticClass:\"answer-actions\"},[_c('button',{attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.restartChat(item)}}},[_vm._v(\"重新生成\")]),_c('div',{staticClass:\"action-icons\"},[_c('button',{attrs:{\"type\":\"button\",\"title\":\"复制\"},on:{\"click\":function($event){return _vm.copyText(item.answer)}}},[_c('img',{attrs:{\"src\":\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/copy.png\"}})]),_c('button',{attrs:{\"type\":\"button\",\"title\":\"翻译\"},on:{\"click\":function($event){return _vm.translateText(item, index)}}},[_c('img',{attrs:{\"src\":item.iscn ? _vm.translateActiveIcon : _vm.translateIcon}})]),(_vm.hasReadAudio)?_c('button',{attrs:{\"type\":\"button\",\"title\":_vm.playingIndex === index ? '暂停' : '朗读'},on:{\"click\":function($event){return _vm.toggleReadAudio(item.answer, index)}}},[_c('img',{attrs:{\"src\":_vm.playingIndex === index ? _vm.stopAudioIcon : _vm.readAudioIcon}})]):_vm._e()])]),(index === _vm.msgList.length - 1 && _vm.quickQuestions.length)?_c('div',{staticClass:\"follow-list\"},_vm._l((_vm.quickQuestions),function(quick){return _c('button',{key:quick.lable,attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.toNewChat(quick)}}},[_vm._v(\" \"+_vm._s(quick.lable)+\" \")])}),0):_vm._e()])]):_vm._e()]}),(_vm.isFetching)?_c('div',{staticClass:\"message-row answer-row\"},[_c('div',{staticClass:\"answer-bubble loading-bubble\"},[_vm._v(\"生成中...\")])]):_vm._e()],2),_c('ChatComposer',{staticClass:\"pc-composer\",attrs:{\"initial-voice\":false,\"disabled\":_vm.isFetching},on:{\"send\":_vm.sendInput,\"recording\":_vm.stopReadAudio},model:{value:(_vm.stuContent),callback:function ($$v) {_vm.stuContent=$$v},expression:\"stuContent\"}})],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-chat\">\n    <div class=\"breadcrumb\">当前位置：首页-{{ sectionName }}-ai对话</div>\n\n    <section class=\"chat-panel\">\n      <audio ref=\"audioPlayer\" :src=\"audioUrl\" @ended=\"onAudioEnded\"></audio>\n\n      <div ref=\"scrollBody\" class=\"message-list\">\n        <div v-if=\"loadingHistory\" class=\"history-tip\">历史加载中...</div>\n        <div v-if=\"chatItemAnswer\" class=\"preset-answer\" v-html=\"chatItemAnswer\"></div>\n        <template v-for=\"(item, index) in msgList\">\n          <div v-if=\"item.question\" :key=\"`q-${index}`\" class=\"message-row question-row\">\n            <div class=\"question-bubble\">{{ item.question }}</div>\n          </div>\n          <div v-if=\"item.answer\" :key=\"`a-${index}`\" class=\"message-row answer-row\">\n            <div class=\"answer-bubble\">\n              <div class=\"answer-content\" v-html=\"simpleParse(item.answer)\"></div>\n              <div class=\"answer-actions\">\n                <button type=\"button\" @click=\"restartChat(item)\">重新生成</button>\n                <div class=\"action-icons\">\n                  <button type=\"button\" title=\"复制\" @click=\"copyText(item.answer)\">\n                    <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/copy.png\" />\n                  </button>\n                  <button type=\"button\" title=\"翻译\" @click=\"translateText(item, index)\">\n                    <img :src=\"item.iscn ? translateActiveIcon : translateIcon\" />\n                  </button>\n                  <button\n                    v-if=\"hasReadAudio\"\n                    type=\"button\"\n                    :title=\"playingIndex === index ? '暂停' : '朗读'\"\n                    @click=\"toggleReadAudio(item.answer, index)\"\n                  >\n                    <img :src=\"playingIndex === index ? stopAudioIcon : readAudioIcon\" />\n                  </button>\n                </div>\n              </div>\n              <div v-if=\"index === msgList.length - 1 && quickQuestions.length\" class=\"follow-list\">\n                <button v-for=\"quick in quickQuestions\" :key=\"quick.lable\" type=\"button\" @click=\"toNewChat(quick)\">\n                  {{ quick.lable }}\n                </button>\n              </div>\n            </div>\n          </div>\n        </template>\n\n        <div v-if=\"isFetching\" class=\"message-row answer-row\">\n          <div class=\"answer-bubble loading-bubble\">生成中...</div>\n        </div>\n      </div>\n\n      <ChatComposer\n        v-model=\"stuContent\"\n        class=\"pc-composer\"\n        :initial-voice=\"false\"\n        :disabled=\"isFetching\"\n        @send=\"sendInput\"\n        @recording=\"stopReadAudio\"\n      />\n    </section>\n  </div>\n</template>\n\n<script>\nimport { en2cnDb, getttsUrl, topicDialogue, speak_fetch, dialogue } from '@/api/home'\nimport { getAIHistory } from '@/api/user'\nimport ChatComposer from '@/components/ChatComposer.vue'\n\nexport default {\n  name: 'PcChat',\n  components: { ChatComposer },\n  props: {\n    mode: {\n      type: String,\n      default: 'new',\n    },\n  },\n  data() {\n    return {\n      title: 'AI对话',\n      sectionName: 'AI伴学',\n      system: '',\n      from: 'listen',\n      stype: 'listen_guide',\n      type: 0,\n      filePath: '',\n      langTime: 0,\n      resId: 0,\n      projectId: 0,\n      isHistory: 0,\n      pageSize: 0,\n      pageLimit: 1,\n      chatItemAnswer: '',\n      etalkTimeId: '',\n      stuContent: '',\n      content: '',\n      msgList: [],\n      isFetching: false,\n      loadingHistory: false,\n      audioUrl: '',\n      playingIndex: -1,\n      translateIcon: 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy.png',\n      translateActiveIcon: 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy1.png',\n      readAudioIcon: 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/read_audio.png',\n      stopAudioIcon: 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/xx.gif',\n      quickQuestions: [],\n    }\n  },\n  mounted() {\n    this.initFromRoute()\n  },\n  beforeDestroy() {\n    this.stopReadAudio()\n  },\n  computed: {\n    hasReadAudio() {\n      return this.mode === 'index' || this.mode === 'file'\n    },\n  },\n  methods: {\n    initFromRoute() {\n      const user = JSON.parse(localStorage.getItem('user') || '{}')\n      if (this.requiresEtalkAuth() && user.type_id != 2) {\n        this.$router.push({ name: 'noAuth' })\n        return\n      }\n      if (!this.requiresEtalkAuth() && user.type_id == 3) {\n        this.$router.push({ name: 'noAuth' })\n        return\n      }\n\n      const query = this.$route.query || {}\n      this.system = query.system || ''\n      this.content = query.content || ''\n      this.stuContent = query.content || ''\n      this.title = query.chat_title || 'AI对话'\n      this.from = query.from || 'listen'\n      this.stype = query.stype || this.from || 'listen_guide'\n      this.type = Number(query.type || 0)\n      this.filePath = query.filePath || query.filepath || ''\n      this.langTime = Number(query.lang_time || 0)\n      this.resId = query.res_id || query.resources_id || ''\n      this.projectId = query.project_id || 0\n      this.isHistory = Number(query.is_history || 0)\n      this.chatItemAnswer = query.answer || ''\n      this.pageSize = this.mode === 'normal' ? 1 : 0\n      this.pageLimit = this.mode === 'normal' ? 10 : 1\n      this.sectionName = this.getSectionName(this.from)\n      this.initQuickQuestions()\n\n      if (this.isHistory === 1) {\n        this.getHistory()\n        return\n      }\n      if (this.content) {\n        this.chat()\n      }\n    },\n    requiresEtalkAuth() {\n      return this.mode === 'index' || this.mode === 'file'\n    },\n    getSectionName(value) {\n      if (value === 'read') return '书海遨游'\n      if (value === 'write') return '笔下生花'\n      if (value === 'speak_free' || value === 'speak_subject' || value === 'speak') return '语连珠'\n      return '听闻天下'\n    },\n    initQuickQuestions() {\n      if (this.stype === 'speak_free') {\n        this.quickQuestions = [\n          { lable: '主题对话，GAI式陪练', input: '', talk_type: 2 },\n          { lable: '写作练习，AI写作辅导', input: '', talk_type: 1 },\n        ]\n        return\n      }\n      if (this.stype === 'write') {\n        this.quickQuestions = [\n          {\n            lable: '如何完善英语写作表达逻辑',\n            input: 'Brief answer (within 60 words):How to improve expression in English writing?',\n            talk_type: 0,\n          },\n          {\n            lable: '生成一个优秀英语写作主题',\n            input: 'Recommend one writing topic with brief writing guidance (within 60 words).',\n            talk_type: 0,\n          },\n        ]\n        return\n      }\n      if (this.stype === 'listen_guide' || this.stype === 'read_guide') {\n        this.quickQuestions = [\n          { lable: 'Summarize the gist and main idea.', input: 'Summarize the gist and main idea.', talk_type: 0 },\n          { lable: 'Analyze and present the structure.', input: 'Analyze and present the structure.', talk_type: 0 },\n          {\n            lable: 'Explain sentences that contain over three clauses.',\n            input: 'Explain sentences that contain over three clauses.',\n            talk_type: 0,\n          },\n        ]\n        return\n      }\n      if (this.stype === 'write_guide' || this.stype === 'write_subject') {\n        this.quickQuestions = [\n          {\n            lable: 'Help me improve the language expression.',\n            input: 'Help me improve the language expression.',\n            talk_type: 0,\n          },\n          {\n            lable: 'Help me enrich and improve the content.',\n            input: 'Help me enrich and improve the content.',\n            talk_type: 0,\n          },\n          {\n            lable: 'Help me improve the article structure.',\n            input: 'Help me improve the article structure.',\n            talk_type: 0,\n          },\n        ]\n        return\n      }\n      if (this.stype === 'speak_subject') {\n        this.quickQuestions = [\n          {\n            lable: '重新生成一个口语练习主题',\n            input: 'Generate a new oral practice topic and provide a brief description of it (within 60 words).',\n            talk_type: 0,\n          },\n          { lable: '尝试进行AI写作练习', input: 'Assist me with english writing', talk_type: 1 },\n        ]\n        return\n      }\n      this.quickQuestions = []\n    },\n    simpleParse(value) {\n      return String(value || '')\n        .replace(/&/g, '&amp;')\n        .replace(/</g, '&lt;')\n        .replace(/>/g, '&gt;')\n        .replace(/^\\s*#\\s+(.+?)\\s*$/gm, '<h1>$1</h1>')\n        .replace(/^\\s*##\\s+(.+?)\\s*$/gm, '<h2>$1</h2>')\n        .replace(/\\*\\*(.+?)\\*\\*/g, '<strong>$1</strong>')\n        .replace(/\\n/g, '<br>')\n    },\n    plainText(value) {\n      return String(value || '')\n        .replace(/<[^>]+>/g, '')\n        .trim()\n    },\n    scrollToBottom() {\n      this.$nextTick(() => {\n        const el = this.$refs.scrollBody\n        if (el) el.scrollTop = el.scrollHeight\n      })\n    },\n    getContextMessages() {\n      return this.msgList\n        .filter((item) => {\n          const answer = String(item.answer || '').trim()\n          return answer !== '当前服务繁忙，请稍后再试。'\n        })\n        .slice(-3)\n    },\n    buildParams(requestStype, userinput) {\n      const user = JSON.parse(localStorage.getItem('user') || '{}')\n      const params = {\n        userinput,\n        type: this.type,\n        lang_time: this.langTime,\n        etalk_cate_id: this.projectId,\n        stype: requestStype,\n        from: this.from,\n        sid: user.sid,\n        res_id: this.resId === '0' || this.resId === 0 ? '' : this.resId,\n        preuserinput: JSON.stringify(this.getContextMessages()),\n      }\n\n      params.filepath = this.filePath\n      if (this.mode === 'new' || this.mode === 'index' || this.mode === 'normal') {\n        params.filePath = this.filePath\n      }\n\n      Object.keys(params).forEach((key) => {\n        if (params[key] === '' || params[key] === null || params[key] === undefined) {\n          delete params[key]\n        }\n      })\n      return params\n    },\n    async chat() {\n      if (!this.content && this.stype !== 'translate') return\n      const user = JSON.parse(localStorage.getItem('user') || '{}')\n      if (!user.sid || this.isFetching) return\n\n      const question = this.content\n      const requestStype = this.getRequestStype()\n      const requestInput = this.getRequestInput()\n      if (!requestInput && this.mode === 'normal') return\n      const message = {\n        question,\n        answer: '',\n        type: this.type,\n        lang_time: this.langTime,\n        filepath: this.filePath,\n        iscn: requestStype === 'translate',\n      }\n      this.msgList.push(message)\n      const params = this.buildParams(requestStype, requestInput)\n      this.stuContent = ''\n      this.isFetching = true\n      this.scrollToBottom()\n\n      try {\n        var response = ''\n        if (this.mode === 'new' && Number(this.resId) > 0) {\n          response = await speak_fetch(params)\n        } else if (this.mode !== 'new' && this.stype === 'speak_subject') {\n          response = await topicDialogue(params)\n        } else {\n          response = await dialogue(params)\n        }\n        const data = response.data || {}\n        this.$set(message, 'answer', data.content || '')\n        if (this.hasReadAudio && data.content) {\n          this.readText(data.content, this.msgList.length - 1)\n        }\n      } catch (error) {\n        const index = this.msgList.indexOf(message)\n        if (index > -1) {\n          this.msgList.splice(index, 1)\n        }\n        if (this.$message) {\n          this.$message({ message: '当前服务繁忙，请稍后再试。', center: true })\n        }\n        console.error(error)\n      } finally {\n        this.content = ''\n        this.filePath = ''\n        this.langTime = 0\n        this.type = 0\n        this.isFetching = false\n        this.scrollToBottom()\n      }\n    },\n    getRequestStype() {\n      if (this.mode === 'new') {\n        return this.content.includes('翻译') ? 'translate' : this.from\n      }\n      return this.stype\n    },\n    getRequestInput() {\n      if (this.mode === 'normal' && this.type === 0 && this.content) {\n        return `${this.content},Please give responses in English`\n      }\n      return this.content\n    },\n    sendInput({ text, filepath, duration, type }) {\n      if (this.isFetching) return\n      this.content = text\n      this.filePath = filepath\n      this.langTime = duration\n      this.type = type\n      return this.chat()\n    },\n    restartChat(item) {\n      this.content = item.question || ''\n      this.filePath = item.filepath || item.filePath || ''\n      this.langTime = item.lang_time || 0\n      this.type = item.type || 0\n      this.chat()\n    },\n    toNewChat(item) {\n      this.content = item.input || ''\n      if (item.talk_type === 1) {\n        this.stuContent = ''\n        this.type = 0\n        this.langTime = 0\n        this.filePath = ''\n        this.msgList = []\n        this.$router.push({\n          name: this.mode === 'normal' ? 'PcNormalChat' : 'PcNewChat',\n          query: {\n            project_id: 0,\n            is_history: 0,\n            lang_time: 0,\n            filePath: '',\n            type: 0,\n            stype: 'write_guide',\n            from: 'write',\n            chat_title: 'E-Write',\n            content: '',\n            res_id: this.resId,\n          },\n        })\n        return\n      }\n      if (item.talk_type === 2) {\n        this.$router.push({ name: 'PcEtalkProject' })\n        return\n      }\n      this.filePath = ''\n      this.type = 0\n      this.langTime = 0\n      this.chat()\n    },\n    async copyText(value) {\n      try {\n        await navigator.clipboard.writeText(this.plainText(value))\n        this.$message && this.$message({ message: '已复制', center: true })\n      } catch (error) {\n        console.error(error)\n      }\n    },\n    async translateText(item, index) {\n      if (!item.answer || item.iscn) return\n      try {\n        const response = await en2cnDb({ userinput: item.answer })\n        const data = response.data || {}\n        if (response.code === 100 && data.content) {\n          this.$set(this.msgList, index, {\n            ...item,\n            answer: `${item.answer}\\n${data.content}`,\n            iscn: true,\n          })\n        }\n      } catch (error) {\n        console.error(error)\n      }\n    },\n    onAudioEnded() {\n      this.playingIndex = -1\n      this.audioUrl = ''\n    },\n    stopReadAudio() {\n      if (this.$refs.audioPlayer) {\n        this.$refs.audioPlayer.pause()\n        this.$refs.audioPlayer.currentTime = 0\n      }\n      this.playingIndex = -1\n      this.audioUrl = ''\n    },\n    toggleReadAudio(value, index) {\n      if (this.playingIndex === index) {\n        this.stopReadAudio()\n        return\n      }\n      this.readText(value, index)\n    },\n    async readText(value, index) {\n      if (!this.hasReadAudio) return\n      try {\n        this.stopReadAudio()\n        const text = this.plainText(value)\n        if (!text) return\n        const response = await getttsUrl({ inputtext: text })\n        const result = JSON.parse(response.data.result)\n        const url =\n          result &&\n          result.results &&\n          result.results.Transformation &&\n          result.results.Transformation.Response &&\n          result.results.Transformation.Response.DubbingQueryResult &&\n          result.results.Transformation.Response.DubbingQueryResult.VoiceURL\n        if (!url) return\n        this.audioUrl = url\n        this.playingIndex = index\n        this.$nextTick(() => {\n          if (this.$refs.audioPlayer) this.$refs.audioPlayer.play()\n        })\n      } catch (error) {\n        console.error(error)\n      }\n    },\n    async getHistory() {\n      const user = JSON.parse(localStorage.getItem('user') || '{}')\n      if (!user.sid) return\n      this.loadingHistory = true\n      try {\n        const response = await getAIHistory({\n          sid: user.sid,\n          from: this.from,\n          page: this.pageSize,\n          size: this.pageLimit,\n        })\n        const list = response.data && response.data.list ? response.data.list : []\n        this.msgList = list.reverse().map((item) => ({\n          ...item,\n          question: item.question || item.userinput || '',\n          answer: item.answer || item.content || '',\n          iscn: false,\n        }))\n        this.scrollToBottom()\n      } catch (error) {\n        console.error(error)\n      } finally {\n        this.loadingHistory = false\n      }\n    },\n  },\n}\n</script>\n\n<style scoped>\n.pc-chat {\n  width: 1114px;\n  height: 583px;\n  color: #17253a;\n}\n\n.breadcrumb {\n  height: 28px;\n  font-size: 12px;\n  line-height: 20px;\n  color: #6c7d94;\n}\n\n.chat-panel {\n  height: 555px;\n  border-radius: 8px;\n  background: rgba(225, 238, 255, 0.74);\n  box-sizing: border-box;\n  padding: 28px 34px 30px;\n  position: relative;\n  overflow: hidden;\n}\n\n.message-list {\n  height: 360px;\n  overflow-y: auto;\n  padding-right: 10px;\n  box-sizing: border-box;\n}\n\n.history-tip {\n  text-align: center;\n  color: #7c8ca3;\n  font-size: 12px;\n  margin-bottom: 10px;\n}\n\n.preset-answer {\n  width: 916px;\n  min-height: 46px;\n  margin-bottom: 18px;\n  padding: 12px 16px;\n  border-radius: 8px;\n  background: rgba(206, 222, 244, 0.58);\n  color: #25354c;\n  font-size: 14px;\n  line-height: 22px;\n  box-sizing: border-box;\n}\n\n.message-row {\n  display: flex;\n  margin-bottom: 18px;\n}\n\n.question-row {\n  justify-content: flex-end;\n}\n\n.answer-row {\n  justify-content: flex-start;\n}\n\n.question-bubble {\n  max-width: 360px;\n  min-height: 34px;\n  padding: 0 14px;\n  border-radius: 10px;\n  background: linear-gradient(90deg, #2f94ee 0%, #72c7f1 100%);\n  color: #fff;\n  font-size: 15px;\n  line-height: 34px;\n  box-sizing: border-box;\n}\n\n.answer-bubble {\n  width: 916px;\n  min-height: 112px;\n  padding: 14px 18px 10px;\n  border-radius: 8px;\n  background: rgba(206, 222, 244, 0.78);\n  box-sizing: border-box;\n}\n\n.loading-bubble {\n  width: auto;\n  min-height: 42px;\n  color: #6d7d91;\n}\n\n.answer-content {\n  min-height: 70px;\n  font-size: 15px;\n  line-height: 22px;\n  color: #1e2b3f;\n  word-break: break-word;\n}\n\n.answer-actions {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  height: 26px;\n  margin-top: 6px;\n  padding-top: 6px;\n  border-top: 1px solid rgba(134, 157, 190, 0.18);\n}\n\n.follow-list {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-top: 12px;\n}\n\n.follow-list button {\n  min-height: 30px;\n  padding: 0 12px;\n  border: 1px solid rgba(94, 151, 232, 0.45);\n  border-radius: 6px;\n  background: rgba(255, 255, 255, 0.72);\n  color: #31557d;\n  font-size: 12px;\n  cursor: pointer;\n}\n\n.answer-actions button {\n  border: none;\n  background: transparent;\n  color: #34465d;\n  font-size: 12px;\n  cursor: pointer;\n  padding: 0;\n}\n\n.action-icons {\n  display: flex;\n  align-items: center;\n  gap: 18px;\n}\n\n.action-icons button {\n  width: 18px;\n  height: 18px;\n}\n\n.action-icons img {\n  width: 18px;\n  height: 18px;\n  object-fit: contain;\n  opacity: 0.72;\n}\n\n.pc-composer {\n  position: absolute;\n  left: 34px;\n  right: 34px;\n  bottom: 24px;\n  border-radius: 12px;\n  overflow: hidden;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcChat.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcChat.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcChat.vue?vue&type=template&id=a7781cc6&scoped=true\"\nimport script from \"./PcChat.vue?vue&type=script&lang=js\"\nexport * from \"./PcChat.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcChat.vue?vue&type=style&index=0&id=a7781cc6&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"a7781cc6\",\n  null\n  \n)\n\nexport default component.exports","<template>\n  <PcChat mode=\"index\" />\n</template>\n\n<script>\nimport PcChat from './PcChat.vue'\n\nexport default {\n  name: 'PcChatIndex',\n  components: { PcChat }\n}\n</script>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcChatIndex.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcChatIndex.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcChatIndex.vue?vue&type=template&id=e132b49e\"\nimport script from \"./PcChatIndex.vue?vue&type=script&lang=js\"\nexport * from \"./PcChatIndex.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('PcChat',{attrs:{\"mode\":\"new\"}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <PcChat mode=\"new\" />\n</template>\n\n<script>\nimport PcChat from './PcChat.vue'\n\nexport default {\n  name: 'PcNewChat',\n  components: { PcChat }\n}\n</script>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcNewChat.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcNewChat.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcNewChat.vue?vue&type=template&id=3446645f\"\nimport script from \"./PcNewChat.vue?vue&type=script&lang=js\"\nexport * from \"./PcNewChat.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('PcChat',{attrs:{\"mode\":\"file\"}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <PcChat mode=\"file\" />\n</template>\n\n<script>\nimport PcChat from './PcChat.vue'\n\nexport default {\n  name: 'PcChatFile',\n  components: { PcChat }\n}\n</script>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcChatFile.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcChatFile.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcChatFile.vue?vue&type=template&id=13c2227d\"\nimport script from \"./PcChatFile.vue?vue&type=script&lang=js\"\nexport * from \"./PcChatFile.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('PcChat',{attrs:{\"mode\":\"normal\"}})\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <PcChat mode=\"normal\" />\n</template>\n\n<script>\nimport PcChat from './PcChat.vue'\n\nexport default {\n  name: 'PcNormalChat',\n  components: { PcChat }\n}\n</script>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcNormalChat.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcNormalChat.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcNormalChat.vue?vue&type=template&id=bda73f84\"\nimport script from \"./PcNormalChat.vue?vue&type=script&lang=js\"\nexport * from \"./PcNormalChat.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-etalk-project\"},[_c('section',{staticClass:\"project-panel\"},[_vm._m(0),_c('div',{staticClass:\"project-grid\"},_vm._l((_vm.etalkCateList),function(item){return _c('div',{key:item.id,staticClass:\"project-card\",on:{\"click\":function($event){return _vm.handleProject(item)}}},[(item.level)?_c('div',{staticClass:\"level-tag\"},[_vm._v(_vm._s(item.level))]):_vm._e(),_c('div',{staticClass:\"card-head\"},[(item.icon_img)?_c('img',{attrs:{\"src\":item.icon_img}}):_vm._e(),_c('strong',[_vm._v(_vm._s(item.name))])]),_c('p',[_vm._v(_vm._s(item.desc))])])}),0)]),(_vm.confirmVisible)?_c('div',{staticClass:\"modal-mask\",on:{\"click\":function($event){if($event.target !== $event.currentTarget)return null;_vm.confirmVisible = false}}},[_c('section',{staticClass:\"confirm-dialog\"},[_c('div',{staticClass:\"confirm-content\",domProps:{\"innerHTML\":_vm._s(_vm.confirmStep === 1 ? _vm.currentItem.tip_content1 : _vm.currentItem.tip_content2)}}),_c('div',{staticClass:\"confirm-actions\"},[_c('button',{staticClass:\"ok-btn\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.nextConfirm}},[_vm._v(\"OK\")]),_c('button',{staticClass:\"cancel-btn\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.cancelConfirm}},[_vm._v(\"Cancel\")])])])]):_vm._e()])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"panel-title\"},[_c('span',{staticClass:\"title-icon\"}),_c('strong',[_vm._v(\"主题列表\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-etalk-project\">\n    <section class=\"project-panel\">\n      <div class=\"panel-title\">\n        <span class=\"title-icon\"></span>\n        <strong>主题列表</strong>\n      </div>\n\n      <div class=\"project-grid\">\n        <div\n          v-for=\"item in etalkCateList\"\n          :key=\"item.id\"\n          class=\"project-card\"\n          @click=\"handleProject(item)\"\n        >\n          <div v-if=\"item.level\" class=\"level-tag\">{{ item.level }}</div>\n          <div class=\"card-head\">\n            <img v-if=\"item.icon_img\" :src=\"item.icon_img\" />\n            <strong>{{ item.name }}</strong>\n          </div>\n          <p>{{ item.desc }}</p>\n        </div>\n      </div>\n    </section>\n\n    <div v-if=\"confirmVisible\" class=\"modal-mask\" @click.self=\"confirmVisible = false\">\n      <section class=\"confirm-dialog\">\n        <div class=\"confirm-content\" v-html=\"confirmStep === 1 ? currentItem.tip_content1 : currentItem.tip_content2\"></div>\n        <div class=\"confirm-actions\">\n          <button type=\"button\" class=\"ok-btn\" @click=\"nextConfirm\">OK</button>\n          <button type=\"button\" class=\"cancel-btn\" @click=\"cancelConfirm\">Cancel</button>\n        </div>\n      </section>\n    </div>\n  </div>\n</template>\n\n<script>\nimport { getEtalkCateList } from '@/api/user'\nimport { getUserRowByToken } from '@/api/home'\nimport { saveRefreshedUser } from '@/utils/auth'\n\nexport default {\n  name: 'PcEtalkProject',\n  data() {\n    return {\n      etalkCateList: [],\n      confirmVisible: false,\n      confirmStep: 1,\n      currentItem: {}\n    }\n  },\n  methods: {\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    async getUserInfo() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const response = await getUserRowByToken({ token: user.token })\n      if (response && response.data) {\n        saveRefreshedUser(response.data)\n        if (response.data.type_id != 2) {\n          this.$router.push({ name: 'noAuth' })\n        }\n      }\n    },\n    async loadList() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const response = await getEtalkCateList({ sid: user.sid })\n      this.etalkCateList = response.data || []\n    },\n    handleProject(item) {\n      if (item.is_file == 1) {\n        this.currentItem = item\n        this.confirmStep = 1\n        this.confirmVisible = true\n        return\n      }\n      this.toSubjectChat(item)\n    },\n    nextConfirm() {\n      if (this.confirmStep === 1) {\n        this.confirmStep = 2\n        return\n      }\n      this.toFileChat(this.currentItem)\n    },\n    cancelConfirm() {\n      this.confirmVisible = false\n      this.confirmStep = 1\n      this.currentItem = {}\n    },\n    toSubjectChat(item) {\n      this.$router.push({\n        name: 'PcChatIndex',\n        query: {\n          project_id: item.id,\n          res_id: '',\n          is_history: 0,\n          lang_time: 0,\n          filePath: '',\n          type: 0,\n          stype: 'speak_subject',\n          from: 'speak_subject',\n          chat_title: '主题对话',\n          system: '假如你是一名语文老师',\n          content: item.content\n        }\n      })\n    },\n    toFileChat(item) {\n      this.$router.push({\n        name: 'PcChatFile',\n        query: {\n          project_id: item.id,\n          res_id: '',\n          is_history: 0,\n          lang_time: 0,\n          filePath: '',\n          type: 0,\n          stype: 'speak_subject_more',\n          from: 'speak_subject_more',\n          chat_title: '主题对话',\n          content: item.content,\n          answer: item.tip_content3\n        }\n      })\n    }\n  },\n  mounted() {\n    this.loadList()\n    this.getUserInfo()\n  }\n}\n</script>\n\n<style scoped>\n.pc-etalk-project {\n  width: 1114px;\n  height: 583px;\n}\n\n.project-panel {\n  height: 100%;\n  padding: 16px 18px;\n  border-radius: 8px;\n  background: #fff;\n  box-sizing: border-box;\n  overflow: hidden;\n}\n\n.panel-title {\n  display: flex;\n  align-items: center;\n  height: 28px;\n}\n\n.title-icon {\n  width: 13px;\n  height: 13px;\n  margin-right: 6px;\n  background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat;\n}\n\n.panel-title strong {\n  font-size: 17px;\n  color: #14253b;\n}\n\n.project-grid {\n  margin-top: 14px;\n  height: 507px;\n  overflow-y: auto;\n  overflow-x: hidden;\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(246px, 1fr));\n  gap: 10px;\n  padding-right: 0;\n  box-sizing: border-box;\n  scrollbar-width: none;\n  -ms-overflow-style: none;\n}\n\n.project-grid::-webkit-scrollbar {\n  display: none;\n}\n\n.project-card {\n  height: 112px;\n  position: relative;\n  padding: 12px 12px 10px;\n  border-radius: 6px;\n  background: #f7fbff;\n  box-shadow: 0 2px 10px rgba(80, 143, 206, 0.1);\n  box-sizing: border-box;\n  cursor: pointer;\n}\n\n.project-card:hover {\n  box-shadow: 0 8px 18px rgba(80, 143, 206, 0.16);\n}\n\n.level-tag {\n  position: absolute;\n  right: 0;\n  top: 10px;\n  min-width: 38px;\n  height: 17px;\n  padding: 0 6px;\n  border-radius: 4px 0 0 4px;\n  background: linear-gradient(90deg, #ff7220 0%, #ffde92 100%);\n  color: #fff;\n  font-size: 10px;\n  line-height: 17px;\n  text-align: center;\n  box-sizing: border-box;\n}\n\n.card-head {\n  display: flex;\n  align-items: center;\n  padding-right: 42px;\n  border-bottom: 1px solid #e8edf5;\n  padding-bottom: 7px;\n}\n\n.card-head img {\n  width: 16px;\n  height: 16px;\n  object-fit: contain;\n  margin-right: 7px;\n}\n\n.card-head strong {\n  font-size: 12px;\n  color: #14253b;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.project-card p {\n  margin: 7px 0 0;\n  color: #77869a;\n  font-size: 11px;\n  line-height: 16px;\n  display: -webkit-box;\n  -webkit-line-clamp: 3;\n  -webkit-box-orient: vertical;\n  overflow: hidden;\n}\n\n.modal-mask {\n  position: absolute;\n  inset: 0;\n  z-index: 120;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: rgba(32, 50, 78, 0.34);\n}\n\n.confirm-dialog {\n  width: 520px;\n  max-height: 440px;\n  padding: 22px 24px 18px;\n  border-radius: 10px;\n  background: #eff7ff;\n  box-sizing: border-box;\n}\n\n.confirm-content {\n  max-height: 330px;\n  overflow-y: auto;\n  color: #25364d;\n  font-size: 14px;\n  line-height: 22px;\n}\n\n.confirm-actions {\n  display: flex;\n  justify-content: space-between;\n  margin-top: 20px;\n}\n\n.confirm-actions button {\n  width: 118px;\n  height: 36px;\n  border: none;\n  border-radius: 6px;\n  cursor: pointer;\n}\n\n.ok-btn {\n  background: #dcefff;\n  color: #17446f;\n}\n\n.cancel-btn {\n  background: #e5eaee;\n  color: #455568;\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcEtalkProject.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcEtalkProject.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcEtalkProject.vue?vue&type=template&id=e666c880&scoped=true\"\nimport script from \"./PcEtalkProject.vue?vue&type=script&lang=js\"\nexport * from \"./PcEtalkProject.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcEtalkProject.vue?vue&type=style&index=0&id=e666c880&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"e666c880\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-micra-list\"},[_c('div',{staticClass:\"breadcrumb\"},[_vm._v(\"当前位置：首页 > 微课\")]),_vm._m(0),_c('section',{staticClass:\"course-panel\"},[_c('div',{staticClass:\"panel-head\"},[_vm._m(1),_c('div',{staticClass:\"course-count\"},[_vm._v(\"共 \"+_vm._s(_vm.courses.length)+\" 节课程\")])]),_c('div',{staticClass:\"category-tabs\"},_vm._l((_vm.categories),function(item){return _c('button',{key:item.key,class:{ active: _vm.activeType === item.key },attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.changeType(item.key)}}},[_vm._v(\" \"+_vm._s(item.label)+\" \")])}),0),(_vm.loading)?_c('div',{staticClass:\"state\"},[_vm._v(\"课程加载中...\")]):(_vm.courses.length === 0)?_c('div',{staticClass:\"state\"},[_vm._v(\"暂无相关微课\")]):_c('div',{staticClass:\"course-grid\"},_vm._l((_vm.courses),function(course){return _c('article',{key:course.id,staticClass:\"course-card\",on:{\"click\":function($event){return _vm.toDetail(course)}}},[_c('div',{staticClass:\"cover-wrap\"},[_c('img',{attrs:{\"src\":_vm.courseCover(course),\"alt\":course.name}}),_c('span',{staticClass:\"play-mark\"},[_vm._v(\"▶\")]),_c('span',{staticClass:\"type-tag\"},[_vm._v(_vm._s(_vm.typeText(course.type)))])]),_c('div',{staticClass:\"course-info\"},[_c('h2',{attrs:{\"title\":course.name}},[_vm._v(_vm._s(course.name))]),_c('p',[_vm._v(_vm._s(course.create_date || '持续更新中'))])])])}),0)])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('section',{staticClass:\"hero-panel\"},[_c('div',[_c('p',{staticClass:\"eyebrow\"},[_vm._v(\"MICRO COURSE\")]),_c('h1',[_vm._v(\"微课中心\")]),_c('p',{staticClass:\"hero-copy\"},[_vm._v(\"精选英语学习短课，利用碎片时间提升听、说、读、写能力。\")])]),_c('div',{staticClass:\"hero-orb hero-orb-one\"}),_c('div',{staticClass:\"hero-orb hero-orb-two\"}),_c('div',{staticClass:\"hero-book\"},[_vm._v(\"Aa\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"title-wrap\"},[_c('span',{staticClass:\"title-icon\"}),_c('strong',[_vm._v(\"课程列表\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-micra-list\">\n    <div class=\"breadcrumb\">当前位置：首页 &gt; 微课</div>\n\n    <section class=\"hero-panel\">\n      <div>\n        <p class=\"eyebrow\">MICRO COURSE</p>\n        <h1>微课中心</h1>\n        <p class=\"hero-copy\">精选英语学习短课，利用碎片时间提升听、说、读、写能力。</p>\n      </div>\n      <div class=\"hero-orb hero-orb-one\"></div>\n      <div class=\"hero-orb hero-orb-two\"></div>\n      <div class=\"hero-book\">Aa</div>\n    </section>\n\n    <section class=\"course-panel\">\n      <div class=\"panel-head\">\n        <div class=\"title-wrap\"><span class=\"title-icon\"></span><strong>课程列表</strong></div>\n        <div class=\"course-count\">共 {{ courses.length }} 节课程</div>\n      </div>\n\n      <div class=\"category-tabs\">\n        <button\n          v-for=\"item in categories\"\n          :key=\"item.key\"\n          type=\"button\"\n          :class=\"{ active: activeType === item.key }\"\n          @click=\"changeType(item.key)\"\n        >\n          {{ item.label }}\n        </button>\n      </div>\n\n      <div v-if=\"loading\" class=\"state\">课程加载中...</div>\n      <div v-else-if=\"courses.length === 0\" class=\"state\">暂无相关微课</div>\n      <div v-else class=\"course-grid\">\n        <article v-for=\"course in courses\" :key=\"course.id\" class=\"course-card\" @click=\"toDetail(course)\">\n          <div class=\"cover-wrap\">\n            <img :src=\"courseCover(course)\" :alt=\"course.name\" />\n            <span class=\"play-mark\">▶</span>\n            <span class=\"type-tag\">{{ typeText(course.type) }}</span>\n          </div>\n          <div class=\"course-info\">\n            <h2 :title=\"course.name\">{{ course.name }}</h2>\n            <p>{{ course.create_date || '持续更新中' }}</p>\n          </div>\n        </article>\n      </div>\n    </section>\n  </div>\n</template>\n\n<script>\nimport { getMicraList } from '@/api/micra'\n\nconst FALLBACK_COVER = 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/default_cover.png'\n\nexport default {\n  name: 'PcMicraList',\n  data() {\n    return {\n      activeType: 'all',\n      courses: [],\n      loading: false,\n      categories: [\n        { key: 'all', label: '全部' },\n        { key: 'writing', label: '写作' },\n        { key: 'listening', label: '听力' },\n        { key: 'reading', label: '阅读' },\n        { key: 'speaking', label: '口语' }\n      ]\n    }\n  },\n  methods: {\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    normalizeCover(cover) {\n      if (!cover) return FALLBACK_COVER\n      return String(cover)\n        .replace('a-news.oss-cn-hangzhou.aliyuncs.com/', 'a-news.oss-accelerate.aliyuncs.com/')\n        .replace('a-news.oss-cn-hangzhou.aliyuncs.com', 'a-news.oss-accelerate.aliyuncs.com')\n    },\n    courseCover(course) {\n      return this.normalizeCover(course && course.cover)\n    },\n    typeText(type) {\n      const item = this.categories.find(category => category.key === type)\n      return item ? item.label : (type || '微课')\n    },\n    async loadCourses() {\n      const user = this.getUser()\n      if (!user.sid) return\n      this.loading = true\n      try {\n        const response = await getMicraList({ sid: user.sid, type: this.activeType })\n        this.courses = response.code === 100 && Array.isArray(response.data) ? response.data : []\n      } catch (error) {\n        console.error('Failed to load micro courses:', error)\n        this.courses = []\n      } finally {\n        this.loading = false\n      }\n    },\n    changeType(type) {\n      if (this.activeType === type) return\n      this.activeType = type\n      this.loadCourses()\n    },\n    toDetail(course) {\n      if (!course || !course.id) return\n      this.$router.push({ name: 'PcMicraDetail', query: { video_id: course.id } })\n    }\n  },\n  mounted() {\n    this.loadCourses()\n  }\n}\n</script>\n\n<style scoped>\n.pc-micra-list { width: 1114px; height: 583px; color: #14253b; }\n.breadcrumb { height: 22px; color: #718298; font-size: 12px; line-height: 18px; }\n.hero-panel { height: 112px; position: relative; overflow: hidden; padding: 17px 32px; border-radius: 8px; box-sizing: border-box; color: #fff; background: linear-gradient(110deg, #07539a 0%, #2089c8 53%, #78c7e8 100%); }\n.eyebrow { margin: 0 0 2px; font-size: 10px; letter-spacing: 1.5px; opacity: .8; }\n.hero-panel h1 { margin: 0; font-size: 23px; letter-spacing: 1px; }\n.hero-copy { margin: 5px 0 0; font-size: 13px; opacity: .92; }\n.hero-orb { position: absolute; border-radius: 50%; background: rgba(255,255,255,.13); }\n.hero-orb-one { width: 150px; height: 150px; top: -77px; right: 128px; }\n.hero-orb-two { width: 86px; height: 86px; right: 56px; bottom: -41px; }\n.hero-book { width: 72px; height: 72px; position: absolute; right: 185px; top: 18px; border: 2px solid rgba(255,255,255,.45); border-radius: 12px; box-sizing: border-box; font-family: Georgia, serif; font-size: 34px; font-style: italic; line-height: 68px; text-align: center; transform: rotate(-8deg); }\n.course-panel { height: 437px; margin-top: 12px; padding: 17px 24px; border-radius: 8px; box-sizing: border-box; background: rgba(255,255,255,.97); }\n.panel-head { height: 26px; display: flex; justify-content: space-between; align-items: center; }\n.title-wrap { display: flex; align-items: center; gap: 8px; }\n.title-icon { width: 4px; height: 17px; border-radius: 4px; background: #0b6bb5; }\n.title-wrap strong { font-size: 17px; }\n.course-count { color: #8a9ab0; font-size: 12px; }\n.category-tabs { display: flex; gap: 10px; margin-top: 13px; }\n.category-tabs button { min-width: 62px; height: 28px; padding: 0 14px; border: 1px solid #dbe5ef; border-radius: 14px; background: #fff; color: #65768b; font-size: 13px; cursor: pointer; }\n.category-tabs button.active { border-color: #0d71b9; background: #0d71b9; color: #fff; box-shadow: 0 4px 10px rgba(13,113,185,.2); }\n.course-grid { height: 317px; display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-top: 16px; overflow-y: auto; padding: 1px 3px 2px; }\n.course-card { min-width: 0; height: 151px; border: 1px solid #ebf0f5; border-radius: 7px; overflow: hidden; background: #fff; cursor: pointer; transition: transform .18s ease, box-shadow .18s ease; }\n.course-card:hover { transform: translateY(-3px); box-shadow: 0 8px 18px rgba(37,77,118,.14); }\n.cover-wrap { height: 90px; position: relative; background: #e6eef5; overflow: hidden; }\n.cover-wrap img { width: 100%; height: 100%; object-fit: cover; }\n.play-mark { width: 28px; height: 28px; position: absolute; left: 50%; top: 50%; border-radius: 50%; background: rgba(0,0,0,.48); color: #fff; font-size: 11px; line-height: 28px; text-align: center; transform: translate(-50%, -50%); }\n.type-tag { position: absolute; left: 8px; top: 7px; padding: 3px 8px; border-radius: 9px; background: rgba(8,72,128,.76); color: #fff; font-size: 10px; }\n.course-info { padding: 9px 11px; }\n.course-info h2 { overflow: hidden; margin: 0; color: #1a2d43; font-size: 13px; line-height: 17px; font-weight: 600; white-space: nowrap; text-overflow: ellipsis; }\n.course-info p { margin: 4px 0 0; color: #91a0b2; font-size: 11px; }\n.state { height: 310px; display: flex; align-items: center; justify-content: center; color: #8190a2; font-size: 14px; }\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcMicraList.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcMicraList.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcMicraList.vue?vue&type=template&id=66a83314&scoped=true\"\nimport script from \"./PcMicraList.vue?vue&type=script&lang=js\"\nexport * from \"./PcMicraList.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcMicraList.vue?vue&type=style&index=0&id=66a83314&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"66a83314\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-micra-detail\"},[_c('div',{staticClass:\"breadcrumb\"},[_c('span',{on:{\"click\":_vm.goList}},[_vm._v(\"微课\")]),_vm._v(\" > \"+_vm._s(_vm.course.name || '课程详情'))]),_c('section',{staticClass:\"detail-panel\"},[_c('div',{staticClass:\"video-area\"},[(_vm.course.url)?_c('video',{ref:\"video\",attrs:{\"src\":_vm.course.url,\"poster\":_vm.courseCover(_vm.course),\"controls\":\"\",\"controlsList\":\"nodownload\"}}):_c('div',{staticClass:\"video-placeholder\"},[_vm._v(\"课程视频加载中...\")])]),_c('div',{staticClass:\"detail-main\"},[_c('div',{staticClass:\"course-meta\"},[_c('span',[_vm._v(_vm._s(_vm.typeText(_vm.course.type)))]),_c('i'),_vm._v(_vm._s(_vm.course.create_date || '微课'))]),_c('h1',[_vm._v(_vm._s(_vm.course.name || '微课详情'))]),_c('p',{staticClass:\"view-count\"},[_vm._v(_vm._s(_vm.course.read_num || 0)+\" 人次观看\")]),_c('button',{staticClass:\"back-button\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.goList}},[_vm._v(\"返回课程列表\")])]),_c('aside',{staticClass:\"recommend-area\"},[_c('div',{staticClass:\"recommend-head\"},[_c('strong',[_vm._v(\"同类推荐\")]),_c('button',{attrs:{\"type\":\"button\"},on:{\"click\":_vm.goList}},[_vm._v(\"全部 >\")])]),(_vm.recommendations.length === 0)?_c('div',{staticClass:\"recommend-empty\"},[_vm._v(\"暂无推荐课程\")]):_vm._e(),_vm._l((_vm.recommendations),function(item){return _c('article',{key:item.id,staticClass:\"recommend-item\",class:{ current: item.id === _vm.course.id },on:{\"click\":function($event){return _vm.selectCourse(item)}}},[_c('img',{attrs:{\"src\":_vm.courseCover(item),\"alt\":item.name}}),_c('div',[_c('h2',[_vm._v(_vm._s(item.name))]),_c('p',[_vm._v(_vm._s(item.create_date || '微课'))])]),_c('span',[_vm._v(\"▶\")])])})],2)])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-micra-detail\">\n    <div class=\"breadcrumb\"><span @click=\"goList\">微课</span> &gt; {{ course.name || '课程详情' }}</div>\n\n    <section class=\"detail-panel\">\n      <div class=\"video-area\">\n        <video\n          v-if=\"course.url\"\n          ref=\"video\"\n          :src=\"course.url\"\n          :poster=\"courseCover(course)\"\n          controls\n          controlsList=\"nodownload\"\n        ></video>\n        <div v-else class=\"video-placeholder\">课程视频加载中...</div>\n      </div>\n\n      <div class=\"detail-main\">\n        <div class=\"course-meta\"><span>{{ typeText(course.type) }}</span><i></i>{{ course.create_date || '微课' }}</div>\n        <h1>{{ course.name || '微课详情' }}</h1>\n        <p class=\"view-count\">{{ course.read_num || 0 }} 人次观看</p>\n        <button type=\"button\" class=\"back-button\" @click=\"goList\">返回课程列表</button>\n      </div>\n\n      <aside class=\"recommend-area\">\n        <div class=\"recommend-head\"><strong>同类推荐</strong><button type=\"button\" @click=\"goList\">全部 &gt;</button></div>\n        <div v-if=\"recommendations.length === 0\" class=\"recommend-empty\">暂无推荐课程</div>\n        <article\n          v-for=\"item in recommendations\"\n          :key=\"item.id\"\n          class=\"recommend-item\"\n          :class=\"{ current: item.id === course.id }\"\n          @click=\"selectCourse(item)\"\n        >\n          <img :src=\"courseCover(item)\" :alt=\"item.name\" />\n          <div><h2>{{ item.name }}</h2><p>{{ item.create_date || '微课' }}</p></div>\n          <span>▶</span>\n        </article>\n      </aside>\n    </section>\n  </div>\n</template>\n\n<script>\nimport { getMicraList, getMicraDetail } from '@/api/micra'\n\nconst FALLBACK_COVER = 'https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/index/default_cover.png'\n\nexport default {\n  name: 'PcMicraDetail',\n  data() {\n    return { course: {}, recommendations: [], videoId: '' }\n  },\n  methods: {\n    getUser() { return JSON.parse(localStorage.getItem('user') || '{}') },\n    normalizeCover(cover) {\n      if (!cover) return FALLBACK_COVER\n      return String(cover)\n        .replace('a-news.oss-cn-hangzhou.aliyuncs.com/', 'a-news.oss-accelerate.aliyuncs.com/')\n        .replace('a-news.oss-cn-hangzhou.aliyuncs.com', 'a-news.oss-accelerate.aliyuncs.com')\n    },\n    courseCover(item) { return this.normalizeCover(item && item.cover) },\n    typeText(type) {\n      return { writing: '写作', listening: '听力', reading: '阅读', speaking: '口语' }[type] || type || '微课'\n    },\n    async loadCourse() {\n      const user = this.getUser()\n      if (!user.sid || !this.videoId) return\n      try {\n        const response = await getMicraDetail({ sid: user.sid, id: this.videoId })\n        this.course = response.code === 100 && response.data ? response.data : {}\n        await this.loadRecommendations()\n      } catch (error) {\n        console.error('Failed to load micro course:', error)\n        this.course = {}\n      }\n    },\n    async loadRecommendations() {\n      const user = this.getUser()\n      if (!user.sid || !this.course.type) return\n      const response = await getMicraList({ sid: user.sid, type: this.course.type })\n      const items = response.code === 100 && Array.isArray(response.data) ? response.data : []\n      this.recommendations = items.filter(item => item.id !== this.course.id).slice(0, 3)\n    },\n    selectCourse(item) {\n      this.$router.replace({ name: 'PcMicraDetail', query: { video_id: item.id } })\n    },\n    goList() { this.$router.push({ name: 'PcMicraList' }) }\n  },\n  watch: {\n    '$route.query.video_id'(value) {\n      if (!value || String(value) === String(this.videoId)) return\n      this.videoId = value\n      this.loadCourse()\n    }\n  },\n  mounted() {\n    this.videoId = this.$route.query.video_id || ''\n    this.loadCourse()\n  }\n}\n</script>\n\n<style scoped>\n.pc-micra-detail { width: 1114px; height: 583px; color: #14253b; }\n.breadcrumb { height: 22px; overflow: hidden; color: #718298; font-size: 12px; line-height: 18px; white-space: nowrap; text-overflow: ellipsis; }\n.breadcrumb span { cursor: pointer; color: #0e6caf; }\n.detail-panel { height: 549px; display: grid; grid-template-columns: 670px 1fr; grid-template-rows: 352px 197px; overflow: hidden; border-radius: 8px; background: #fff; }\n.video-area { grid-column: 1; grid-row: 1; display: flex; align-items: center; justify-content: center; background: #102033; }\n.video-area video { width: 100%; height: 100%; object-fit: contain; }\n.video-placeholder { color: #b8c7d7; font-size: 14px; }\n.detail-main { grid-column: 1; grid-row: 2; position: relative; padding: 27px 34px; box-sizing: border-box; border-right: 1px solid #edf1f5; }\n.course-meta { color: #8b9aab; font-size: 12px; }\n.course-meta span { padding: 3px 9px; border-radius: 10px; background: #e5f3ff; color: #1674b8; }\n.course-meta i { display: inline-block; width: 1px; height: 11px; margin: 0 10px -2px; background: #c9d2dd; }\n.detail-main h1 { max-width: 600px; overflow: hidden; margin: 16px 0 9px; color: #1c2d41; font-size: 22px; line-height: 30px; white-space: nowrap; text-overflow: ellipsis; }\n.view-count { margin: 0; color: #8c9aab; font-size: 13px; }\n.back-button { height: 32px; margin-top: 27px; padding: 0 18px; border: 1px solid #0d70b7; border-radius: 4px; background: #fff; color: #0d70b7; font-size: 13px; cursor: pointer; }\n.recommend-area { grid-column: 2; grid-row: 1 / span 2; padding: 23px 20px; box-sizing: border-box; background: #fbfcfe; }\n.recommend-head { display: flex; align-items: center; justify-content: space-between; padding-bottom: 13px; border-bottom: 1px solid #e8edf3; }\n.recommend-head strong { font-size: 16px; }\n.recommend-head button { border: none; background: transparent; color: #7390aa; font-size: 12px; cursor: pointer; }\n.recommend-item { position: relative; display: grid; grid-template-columns: 102px minmax(0, 1fr); gap: 10px; margin-top: 15px; cursor: pointer; }\n.recommend-item img { width: 102px; height: 57px; border-radius: 4px; object-fit: cover; background: #dce6ef; }\n.recommend-item h2 { overflow: hidden; margin: 3px 17px 4px 0; color: #304258; font-size: 13px; line-height: 18px; font-weight: 500; white-space: nowrap; text-overflow: ellipsis; }\n.recommend-item p { margin: 0; color: #98a6b5; font-size: 11px; }\n.recommend-item > span { position: absolute; left: 43px; top: 20px; color: #fff; font-size: 12px; text-shadow: 0 1px 3px #000; }\n.recommend-empty { padding-top: 60px; color: #9aa7b6; font-size: 13px; text-align: center; }\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcMicraDetail.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcMicraDetail.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcMicraDetail.vue?vue&type=template&id=9f45659e&scoped=true\"\nimport script from \"./PcMicraDetail.vue?vue&type=script&lang=js\"\nexport * from \"./PcMicraDetail.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcMicraDetail.vue?vue&type=style&index=0&id=9f45659e&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"9f45659e\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-collect\"},[_c('div',{staticClass:\"breadcrumb\"},[_vm._v(\"当前位置：首页>我的>我的收藏\")]),_c('section',{staticClass:\"collect-panel\"},[_vm._m(0),_c('div',{staticClass:\"collect-grid\"},[_c('button',{staticClass:\"collect-card\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.toNewWords}},[_c('div',{staticClass:\"card-icon\"},[_vm._v(\"Aa\")]),_vm._m(1),_c('span',{staticClass:\"card-arrow\",attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"›\")])])])])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"panel-title\"},[_c('span',{staticClass:\"title-icon\"}),_c('strong',[_vm._v(\"我的收藏\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"card-copy\"},[_c('strong',[_vm._v(\"生词本\")]),_c('span',[_vm._v(\"Vocabulary book\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-collect\">\n    <div class=\"breadcrumb\">当前位置：首页&gt;我的&gt;我的收藏</div>\n    <section class=\"collect-panel\">\n      <div class=\"panel-title\">\n        <span class=\"title-icon\"></span>\n        <strong>我的收藏</strong>\n      </div>\n      <div class=\"collect-grid\">\n        <button type=\"button\" class=\"collect-card\" @click=\"toNewWords\">\n          <div class=\"card-icon\">Aa</div>\n          <div class=\"card-copy\">\n            <strong>生词本</strong>\n            <span>Vocabulary book</span>\n          </div>\n          <span class=\"card-arrow\" aria-hidden=\"true\">›</span>\n        </button>\n      </div>\n    </section>\n  </div>\n</template>\n\n<script>\nexport default {\n  name: 'PcCollect',\n  methods: {\n    toNewWords() {\n      this.$router.push({ name: 'PcNewWords' })\n    }\n  }\n}\n</script>\n\n<style scoped>\n.pc-collect { width: 1114px; height: 583px; color: #14253b; }\n.breadcrumb { height: 22px; color: #718298; font-size: 12px; line-height: 18px; }\n.collect-panel { min-height: 300px; padding: 20px 28px; border-radius: 8px; box-sizing: border-box; background: rgba(255,255,255,.96); }\n.panel-title { display: flex; align-items: center; gap: 8px; }\n.title-icon { width: 13px; height: 13px; background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat; }\n.panel-title strong { font-size: 17px; }\n.collect-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; margin-top: 22px; }\n.collect-card { min-height: 118px; display: flex; align-items: center; gap: 18px; padding: 20px 24px; border: 1px solid #dce8f5; border-radius: 12px; box-sizing: border-box; background: linear-gradient(135deg, #e8f5ff, #c9e5ff); color: #12345b; text-align: left; cursor: pointer; transition: transform .18s ease, box-shadow .18s ease; }\n.collect-card:hover { transform: translateY(-2px); box-shadow: 0 8px 18px rgba(36, 111, 177, .16); }\n.collect-card:focus-visible { outline: 2px solid #167eae; outline-offset: 2px; }\n.card-icon { width: 58px; height: 58px; flex: 0 0 58px; border-radius: 14px; background: rgba(255,255,255,.78); color: #2479c2; font: italic 30px Georgia, serif; line-height: 58px; text-align: center; }\n.card-copy { display: flex; min-width: 0; flex-direction: column; gap: 7px; }\n.card-copy strong { font-size: 18px; }\n.card-copy span { color: #52708f; font-size: 12px; }\n.card-arrow { margin-left: auto; color: #2479c2; font-size: 28px; line-height: 1; }\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcCollect.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcCollect.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcCollect.vue?vue&type=template&id=6c211730&scoped=true\"\nimport script from \"./PcCollect.vue?vue&type=script&lang=js\"\nexport * from \"./PcCollect.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcCollect.vue?vue&type=style&index=0&id=6c211730&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"6c211730\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-new-words\"},[_c('div',{staticClass:\"breadcrumb\"},[_vm._v(\"当前位置：首页>我的>我的收藏>生词本\")]),_c('section',{staticClass:\"words-panel\"},[_c('div',{staticClass:\"panel-head\"},[_vm._m(0),_c('div',{staticClass:\"total-count\"},[_vm._v(\"已收藏 \"+_vm._s(_vm.totalWord)+\" 词\")])]),_c('div',{staticClass:\"search-row\"},[_c('label',{staticClass:\"search-box\"},[_c('span',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"⌕\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.keyword),expression:\"keyword\"}],attrs:{\"type\":\"search\",\"placeholder\":\"请输入搜索关键词\"},domProps:{\"value\":(_vm.keyword)},on:{\"input\":[function($event){if($event.target.composing)return;_vm.keyword=$event.target.value},_vm.searchWords],\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.searchWords.apply(null, arguments)}}})])]),(_vm.loading && _vm.wordList.length === 0)?_c('div',{staticClass:\"state\"},[_vm._v(\"加载中...\")]):(_vm.wordList.length === 0)?_c('div',{staticClass:\"state\"},[_vm._v(\"暂无收藏词汇\")]):_c('div',{staticClass:\"word-list\"},_vm._l((_vm.wordList),function(item){return _c('article',{key:item.id || item.word,staticClass:\"word-card\"},[_c('h2',[_vm._v(_vm._s(item.word))]),(item.wordList && item.wordList.length)?_c('div',{staticClass:\"meaning-list\"},_vm._l((item.wordList),function(meaning,index){return _c('span',{key:`${item.word}-${index}`},[_vm._v(\" \"+_vm._s(meaning.type)+\"：\"+_vm._s(meaning.meaning_CH)+\" \")])}),0):_c('div',{staticClass:\"no-meaning\"},[_vm._v(\"暂无释义\")])])}),0),(_vm.hasMore)?_c('button',{staticClass:\"load-more\",attrs:{\"type\":\"button\",\"disabled\":_vm.loading},on:{\"click\":_vm.loadMore}},[_vm._v(\" \"+_vm._s(_vm.loading ? '加载中...' : '点击加载更多')+\" \")]):_vm._e()])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"panel-title\"},[_c('span',{staticClass:\"title-icon\"}),_c('strong',[_vm._v(\"生词本\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-new-words\">\n    <div class=\"breadcrumb\">当前位置：首页&gt;我的&gt;我的收藏&gt;生词本</div>\n    <section class=\"words-panel\">\n      <div class=\"panel-head\">\n        <div class=\"panel-title\">\n          <span class=\"title-icon\"></span>\n          <strong>生词本</strong>\n        </div>\n        <div class=\"total-count\">已收藏 {{ totalWord }} 词</div>\n      </div>\n\n      <div class=\"search-row\">\n        <label class=\"search-box\">\n          <span aria-hidden=\"true\">⌕</span>\n          <input v-model=\"keyword\" type=\"search\" placeholder=\"请输入搜索关键词\" @input=\"searchWords\" @keyup.enter=\"searchWords\" />\n        </label>\n      </div>\n\n      <div v-if=\"loading && wordList.length === 0\" class=\"state\">加载中...</div>\n      <div v-else-if=\"wordList.length === 0\" class=\"state\">暂无收藏词汇</div>\n      <div v-else class=\"word-list\">\n        <article v-for=\"item in wordList\" :key=\"item.id || item.word\" class=\"word-card\">\n          <h2>{{ item.word }}</h2>\n          <div v-if=\"item.wordList && item.wordList.length\" class=\"meaning-list\">\n            <span v-for=\"(meaning, index) in item.wordList\" :key=\"`${item.word}-${index}`\">\n              {{ meaning.type }}：{{ meaning.meaning_CH }}\n            </span>\n          </div>\n          <div v-else class=\"no-meaning\">暂无释义</div>\n        </article>\n      </div>\n\n      <button v-if=\"hasMore\" type=\"button\" class=\"load-more\" :disabled=\"loading\" @click=\"loadMore\">\n        {{ loading ? '加载中...' : '点击加载更多' }}\n      </button>\n      <!-- <div v-else-if=\"wordList.length\" class=\"list-end\">没有更多了</div> -->\n    </section>\n  </div>\n</template>\n\n<script>\nimport { getListMyByWord } from '@/api/home'\n\nexport default {\n  name: 'PcNewWords',\n  data() {\n    return {\n      keyword: '',\n      page: 1,\n      pageLimit: 10,\n      totalWord: 0,\n      wordList: [],\n      loading: false,\n      requestId: 0\n    }\n  },\n  computed: {\n    hasMore() {\n      return this.wordList.length < this.totalWord\n    }\n  },\n  methods: {\n    getUser() {\n      return JSON.parse(localStorage.getItem('user') || '{}')\n    },\n    async searchWords() {\n      this.page = 1\n      this.wordList = []\n      this.totalWord = 0\n      await this.loadWords()\n    },\n    async loadWords() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const requestId = ++this.requestId\n      this.loading = true\n      try {\n        const response = await getListMyByWord({\n          uid: user.sid,\n          page: this.page,\n          size: this.pageLimit,\n          keyword: this.keyword\n        })\n        if (requestId !== this.requestId || response.code !== 100) return\n        const data = response.data || {}\n        const list = Array.isArray(data.lst) ? data.lst : []\n        this.wordList = this.wordList.concat(list)\n        this.totalWord = Number(data.total) || 0\n      } catch (error) {\n        console.error('Failed to load vocabulary:', error)\n      } finally {\n        if (requestId === this.requestId) this.loading = false\n      }\n    },\n    loadMore() {\n      if (!this.hasMore || this.loading) return\n      this.page += 1\n      this.loadWords()\n    }\n  },\n  mounted() {\n    this.loadWords()\n  }\n}\n</script>\n\n<style scoped>\n.pc-new-words { width: 1114px; height: 583px; color: #14253b; }\n.breadcrumb { height: 22px; color: #718298; font-size: 12px; line-height: 18px; }\n.words-panel { height: 541px; display: flex; flex-direction: column; padding: 18px 28px; border-radius: 8px; box-sizing: border-box; background: rgba(255,255,255,.96); }\n.panel-head { display: flex; align-items: center; justify-content: space-between; }\n.panel-title { display: flex; align-items: center; gap: 8px; }\n.title-icon { width: 13px; height: 13px; background: url('https://a-news.oss-cn-hangzhou.aliyunc.com/zheda/pc/more.png') center / contain no-repeat; }\n.panel-title strong { font-size: 17px; }\n.total-count { color: #718298; font-size: 13px; }\n.search-row { display: flex; flex: 0 0 34px; justify-content: flex-end; margin: 14px 0; }\n.search-box { width: 310px; height: 34px; display: flex; align-items: center; gap: 8px; padding: 0 12px; border: 1px solid #d7e3ef; border-radius: 18px; box-sizing: border-box; background: #f8fbff; color: #7e91a7; }\n.search-box span { font-size: 22px; line-height: 1; }\n.search-box input { width: 100%; border: 0; outline: 0; background: transparent; color: #203650; font-size: 13px; }\n.word-list { flex: 1 1 auto; min-height: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); grid-auto-rows: max-content; align-content: start; gap: 10px 14px; overflow-y: auto; padding: 2px 4px 6px 0; }\n.word-card { min-height: 92px; height: auto; padding: 13px 18px; border-bottom: 1px solid #e3ebf3; box-sizing: border-box; overflow-wrap: anywhere; }\n.word-card h2 { margin: 0 0 8px; color: #172d47; font: 600 18px/24px Arial, sans-serif; }\n.meaning-list { display: flex; flex-direction: column; gap: 4px; color: #7a899a; font-size: 13px; line-height: 18px; }\n.no-meaning { color: #a6b0bb; font-size: 12px; }\n.state { flex: 1 1 auto; min-height: 0; display: flex; align-items: center; justify-content: center; color: #8190a2; }\n.load-more, .list-end { flex: 0 0 34px; width: 100%; height: 34px; margin-top: 8px; border: 0; background: transparent; color: #167eae; font-size: 13px; text-align: center; line-height: 34px; }\n.load-more { cursor: pointer; }\n.load-more:disabled { color: #9aa9b9; cursor: default; }\n.list-end { color: #9aa7b6; }\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcNewWords.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcNewWords.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcNewWords.vue?vue&type=template&id=a0b4d7c8&scoped=true\"\nimport script from \"./PcNewWords.vue?vue&type=script&lang=js\"\nexport * from \"./PcNewWords.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcNewWords.vue?vue&type=style&index=0&id=a0b4d7c8&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"a0b4d7c8\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-study-note\"},[_c('div',{staticClass:\"breadcrumb\"},[_vm._v(\"当前位置：首页>我的>反思日志\")]),_c('section',{staticClass:\"note-panel\"},[_c('div',{staticClass:\"panel-head\"},[_vm._m(0),_c('div',{staticClass:\"tabs\"},[_c('button',{class:{ active: _vm.activeTab === 'list' },attrs:{\"type\":\"button\"},on:{\"click\":_vm.showList}},[_vm._v(\"日志查看\")]),_c('button',{class:{ active: _vm.activeTab === 'edit' },attrs:{\"type\":\"button\"},on:{\"click\":_vm.startNew}},[_vm._v(\"新增日志\")])])]),(_vm.activeTab === 'list')?_c('div',{staticClass:\"list-view\"},[(_vm.loading && _vm.notes.length === 0)?_c('div',{staticClass:\"state\"},[_vm._v(\"加载中...\")]):(_vm.notes.length === 0)?_c('div',{staticClass:\"state\"},[_vm._v(\"暂无反思日志\")]):_c('div',{staticClass:\"note-list\"},_vm._l((_vm.notes),function(note){return _c('article',{key:note.id,staticClass:\"note-row\"},[_c('div',{staticClass:\"note-copy\"},[_c('h2',[_vm._v(_vm._s(note.title))]),_c('p',[_vm._v(_vm._s(note.set_date || '未设置日期'))]),_c('div',{staticClass:\"note-preview\"},[_vm._v(_vm._s(note.content || '暂无内容'))])]),_c('div',{staticClass:\"note-actions\"},[_c('button',{attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.editNote(note)}}},[_vm._v(\"编辑\")]),_c('button',{staticClass:\"danger\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.deleteNote(note.id)}}},[_vm._v(\"删除\")])])])}),0),(_vm.hasMore)?_c('button',{staticClass:\"load-more\",attrs:{\"type\":\"button\",\"disabled\":_vm.loading},on:{\"click\":_vm.loadMore}},[_vm._v(\" \"+_vm._s(_vm.loading ? '加载中...' : '点击加载更多')+\" \")]):(_vm.notes.length)?_c('div',{staticClass:\"list-end\"},[_vm._v(\"没有更多了\")]):_vm._e()]):_c('form',{staticClass:\"editor\",on:{\"submit\":function($event){$event.preventDefault();return _vm.saveNote.apply(null, arguments)}}},[_c('div',{staticClass:\"form-grid\"},[_c('label',[_vm._v(\"日志标题\"),_c('input',{directives:[{name:\"model\",rawName:\"v-model.trim\",value:(_vm.form.title),expression:\"form.title\",modifiers:{\"trim\":true}}],attrs:{\"required\":\"\",\"maxlength\":\"100\",\"placeholder\":\"请输入日志标题\"},domProps:{\"value\":(_vm.form.title)},on:{\"input\":function($event){if($event.target.composing)return;_vm.$set(_vm.form, \"title\", $event.target.value.trim())},\"blur\":function($event){return _vm.$forceUpdate()}}})]),_c('label',[_vm._v(\"选择日期\"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.form.set_date),expression:\"form.set_date\"}],attrs:{\"required\":\"\",\"type\":\"date\"},domProps:{\"value\":(_vm.form.set_date)},on:{\"input\":function($event){if($event.target.composing)return;_vm.$set(_vm.form, \"set_date\", $event.target.value)}}})])]),_c('label',{staticClass:\"content-field\"},[_vm._v(\"日志内容\"),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.form.content),expression:\"form.content\"}],attrs:{\"maxlength\":\"8000\",\"placeholder\":\"请输入日志内容\"},domProps:{\"value\":(_vm.form.content)},on:{\"input\":function($event){if($event.target.composing)return;_vm.$set(_vm.form, \"content\", $event.target.value)}}})]),_c('div',{staticClass:\"editor-actions\"},[_c('button',{staticClass:\"clear-btn\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.clearForm}},[_vm._v(\"一键清空\")]),_c('button',{staticClass:\"save-btn\",attrs:{\"type\":\"submit\",\"disabled\":_vm.saving}},[_vm._v(_vm._s(_vm.saving ? '保存中...' : '保存'))])])])])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"panel-title\"},[_c('span',{staticClass:\"title-icon\"}),_c('strong',[_vm._v(\"反思日志\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-study-note\">\n    <div class=\"breadcrumb\">当前位置：首页&gt;我的&gt;反思日志</div>\n    <section class=\"note-panel\">\n      <div class=\"panel-head\">\n        <div class=\"panel-title\"><span class=\"title-icon\"></span><strong>反思日志</strong></div>\n        <div class=\"tabs\">\n          <button type=\"button\" :class=\"{ active: activeTab === 'list' }\" @click=\"showList\">日志查看</button>\n          <button type=\"button\" :class=\"{ active: activeTab === 'edit' }\" @click=\"startNew\">新增日志</button>\n        </div>\n      </div>\n\n      <div v-if=\"activeTab === 'list'\" class=\"list-view\">\n        <div v-if=\"loading && notes.length === 0\" class=\"state\">加载中...</div>\n        <div v-else-if=\"notes.length === 0\" class=\"state\">暂无反思日志</div>\n        <div v-else class=\"note-list\">\n          <article v-for=\"note in notes\" :key=\"note.id\" class=\"note-row\">\n            <div class=\"note-copy\">\n              <h2>{{ note.title }}</h2>\n              <p>{{ note.set_date || '未设置日期' }}</p>\n              <div class=\"note-preview\">{{ note.content || '暂无内容' }}</div>\n            </div>\n            <div class=\"note-actions\">\n              <button type=\"button\" @click=\"editNote(note)\">编辑</button>\n              <button type=\"button\" class=\"danger\" @click=\"deleteNote(note.id)\">删除</button>\n            </div>\n          </article>\n        </div>\n        <button v-if=\"hasMore\" type=\"button\" class=\"load-more\" :disabled=\"loading\" @click=\"loadMore\">\n          {{ loading ? '加载中...' : '点击加载更多' }}\n        </button>\n        <div v-else-if=\"notes.length\" class=\"list-end\">没有更多了</div>\n      </div>\n\n      <form v-else class=\"editor\" @submit.prevent=\"saveNote\">\n        <div class=\"form-grid\">\n          <label>日志标题<input v-model.trim=\"form.title\" required maxlength=\"100\" placeholder=\"请输入日志标题\" /></label>\n          <label>选择日期<input v-model=\"form.set_date\" required type=\"date\" /></label>\n        </div>\n        <label class=\"content-field\">日志内容<textarea v-model=\"form.content\" maxlength=\"8000\" placeholder=\"请输入日志内容\"></textarea></label>\n        <div class=\"editor-actions\">\n          <button type=\"button\" class=\"clear-btn\" @click=\"clearForm\">一键清空</button>\n          <button type=\"submit\" class=\"save-btn\" :disabled=\"saving\">{{ saving ? '保存中...' : '保存' }}</button>\n        </div>\n      </form>\n    </section>\n  </div>\n</template>\n\n<script>\nimport { AddNoteBook, EditNoteBook, getNoteBook, delNoteBook } from '@/api/user'\n\nexport default {\n  name: 'PcStudyNote',\n  data() {\n    return {\n      activeTab: 'list',\n      notes: [],\n      page: 1,\n      pageSize: 10,\n      total: 0,\n      loading: false,\n      saving: false,\n      editingId: '',\n      form: { title: '', set_date: '', content: '' }\n    }\n  },\n  computed: {\n    hasMore() { return this.notes.length < this.total }\n  },\n  methods: {\n    getUser() { return JSON.parse(localStorage.getItem('user') || '{}') },\n    today() {\n      const date = new Date()\n      return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`\n    },\n    showList() { this.activeTab = 'list'; this.editingId = '' },\n    startNew() { this.editingId = ''; this.form = { title: '', set_date: this.today(), content: '' }; this.activeTab = 'edit' },\n    editNote(note) {\n      this.editingId = note.id\n      this.form = { title: note.title || '', set_date: note.set_date || this.today(), content: note.content || '' }\n      this.activeTab = 'edit'\n    },\n    clearForm() { this.form.content = '' },\n    async loadNotes(reset = false) {\n      const user = this.getUser()\n      if (!user.sid || this.loading) return\n      if (reset) { this.page = 1; this.notes = []; this.total = 0 }\n      this.loading = true\n      try {\n        const response = await getNoteBook({ sid: user.sid, page: this.page })\n        if (response.code !== 100) return\n        const data = Array.isArray(response.data) ? response.data : []\n        this.notes = this.notes.concat(data)\n        this.total = Number(response.total || (response.data && response.data.total)) || (data.length < this.pageSize ? this.notes.length : this.notes.length + 1)\n      } catch (error) {\n        console.error('Failed to load reflection notes:', error)\n      } finally { this.loading = false }\n    },\n    loadMore() { if (!this.hasMore || this.loading) return; this.page += 1; this.loadNotes() },\n    async saveNote() {\n      const user = this.getUser()\n      if (!user.sid || !this.form.title || !this.form.set_date) return\n      this.saving = true\n      try {\n        const payload = { ...this.form, sid: user.sid }\n        const response = this.editingId ? await EditNoteBook({ ...payload, id: this.editingId }) : await AddNoteBook(payload)\n        if (response.code === 100) { this.showList(); await this.loadNotes(true) }\n      } catch (error) { console.error('Failed to save reflection note:', error) } finally { this.saving = false }\n    },\n    async deleteNote(id) {\n      if (!id || (window.confirm && !window.confirm('确定删除这篇日志吗？'))) return\n      try {\n        const response = await delNoteBook({ id })\n        if (response.code === 100) await this.loadNotes(true)\n      } catch (error) { console.error('Failed to delete reflection note:', error) }\n    }\n  },\n  mounted() { this.loadNotes(true) }\n}\n</script>\n\n<style scoped>\n.pc-study-note { width: 1114px; height: 583px; color: #14253b; }\n.breadcrumb { height: 22px; color: #718298; font-size: 12px; line-height: 18px; }\n.note-panel { height: 541px; padding: 18px 28px; border-radius: 8px; box-sizing: border-box; background: rgba(255,255,255,.96); }\n.panel-head { display: flex; align-items: center; justify-content: space-between; }\n.panel-title { display: flex; align-items: center; gap: 8px; }\n.title-icon { width: 13px; height: 13px; background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat; }\n.panel-title strong { font-size: 17px; }\n.tabs { display: flex; gap: 8px; }\n.tabs button { padding: 6px 14px; border: 1px solid #d8e3ef; border-radius: 15px; background: #fff; color: #728399; cursor: pointer; }\n.tabs button.active { border-color: #1685bd; background: #1685bd; color: #fff; }\n.list-view { height: 475px; display: flex; flex-direction: column; margin-top: 14px; }\n.note-list { flex: 1; min-height: 0; overflow-y: auto; padding-right: 6px; }\n.note-row { display: flex; align-items: flex-start; justify-content: space-between; gap: 18px; padding: 15px 18px; margin-bottom: 10px; border-radius: 8px; background: #eff6ff; }\n.note-copy { min-width: 0; flex: 1; }\n.note-copy h2 { margin: 0; color: #1d3552; font-size: 16px; line-height: 23px; }\n.note-copy p { margin: 4px 0 0; color: #7b8da3; font-size: 12px; }\n.note-preview { margin-top: 8px; color: #61758d; font-size: 13px; line-height: 20px; white-space: pre-wrap; word-break: break-word; }\n.note-actions { flex: 0 0 auto; display: flex; gap: 12px; padding-top: 3px; }\n.note-actions button { border: 0; background: transparent; color: #1269aa; cursor: pointer; font-size: 13px; }\n.note-actions .danger { color: #e14b59; }\n.state { flex: 1; display: flex; align-items: center; justify-content: center; color: #8190a2; }\n.load-more, .list-end { flex: 0 0 34px; border: 0; background: transparent; color: #167eae; text-align: center; line-height: 34px; cursor: pointer; }\n.load-more:disabled { color: #9aa9b9; cursor: default; }\n.list-end { color: #9aa7b6; }\n.editor { height: 475px; display: flex; flex-direction: column; gap: 18px; margin-top: 18px; }\n.form-grid { display: grid; grid-template-columns: 1fr 250px; gap: 18px; }\n.editor label { display: flex; flex-direction: column; gap: 7px; color: #61758d; font-size: 13px; }\n.editor input, .editor textarea { border: 1px solid #d6e2ee; border-radius: 6px; background: #fbfdff; box-sizing: border-box; color: #1c3550; font-size: 14px; outline: none; }\n.editor input { height: 38px; padding: 0 12px; }\n.content-field { flex: 1; min-height: 0; }\n.editor textarea { flex: 1; width: 100%; min-height: 285px; padding: 12px; resize: none; line-height: 22px; }\n.editor input:focus, .editor textarea:focus { border-color: #4ca9d8; box-shadow: 0 0 0 2px rgba(76,169,216,.12); }\n.editor-actions { display: flex; align-items: center; justify-content: flex-end; gap: 16px; }\n.clear-btn, .save-btn { height: 36px; padding: 0 22px; border-radius: 18px; cursor: pointer; }\n.clear-btn { border: 0; background: transparent; color: #8795a5; }\n.save-btn { border: 0; background: #1269aa; color: #fff; }\n.save-btn:disabled { background: #a8bdcf; cursor: default; }\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcStudyNote.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcStudyNote.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcStudyNote.vue?vue&type=template&id=73b10c34&scoped=true\"\nimport script from \"./PcStudyNote.vue?vue&type=script&lang=js\"\nexport * from \"./PcStudyNote.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcStudyNote.vue?vue&type=style&index=0&id=73b10c34&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"73b10c34\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-plant-setting\"},[_c('div',{staticClass:\"breadcrumb\"},[_vm._v(\"当前位置：首页>计划>计划管理\")]),_c('section',{staticClass:\"setting-panel\"},[_c('div',{staticClass:\"panel-head\"},[_vm._m(0),_c('button',{staticClass:\"reset-btn\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.toSelfTest}},[_vm._v(\"等级不准，重新测评\")])]),(_vm.loading)?_c('div',{staticClass:\"state\"},[_vm._v(\"正在加载计划...\")]):_c('div',{staticClass:\"setting-body\"},[_c('section',{staticClass:\"setting-group\"},[_vm._m(1),_c('div',{staticClass:\"option-list\"},_vm._l((_vm.typeOptions),function(item){return _c('button',{key:item.id,staticClass:\"option\",class:{ selected: item.is_check === 1 },attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.toggleOption(item)}}},[_vm._v(_vm._s(item.lable_name))])}),0)]),_c('section',{staticClass:\"setting-group\"},[_vm._m(2),_c('div',{staticClass:\"option-list topic-list\"},_vm._l((_vm.subjectOptions),function(item){return _c('button',{key:item.id || item.name,staticClass:\"option\",class:{ selected: item.is_check === 1 },attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.toggleOption(item)}}},[_vm._v(_vm._s(item.name))])}),0)]),_c('section',{staticClass:\"setting-group time-group\"},[_c('h2',[_vm._v(\"每天学习时长\")]),_c('div',{staticClass:\"option-list\"},[_c('button',{staticClass:\"option\",class:{ selected: _vm.timeMode === 0 },attrs:{\"type\":\"button\"},on:{\"click\":function($event){_vm.timeMode = 0}}},[_vm._v(\"60min/天\")]),_c('button',{staticClass:\"option\",class:{ selected: _vm.timeMode === 1 },attrs:{\"type\":\"button\"},on:{\"click\":function($event){_vm.timeMode = 1}}},[_vm._v(\"30min/天\")]),_c('label',{staticClass:\"custom-time\",class:{ selected: _vm.timeMode === 2 }},[_c('input',{directives:[{name:\"model\",rawName:\"v-model.number\",value:(_vm.customMinutes),expression:\"customMinutes\",modifiers:{\"number\":true}}],attrs:{\"type\":\"number\",\"min\":\"10\",\"max\":\"1440\",\"placeholder\":\"自定义\"},domProps:{\"value\":(_vm.customMinutes)},on:{\"focus\":function($event){_vm.timeMode = 2},\"input\":function($event){if($event.target.composing)return;_vm.customMinutes=_vm._n($event.target.value)},\"blur\":function($event){return _vm.$forceUpdate()}}}),_c('span',[_vm._v(\"min/天\")])])])]),_c('div',{staticClass:\"form-actions\"},[_c('button',{staticClass:\"save-btn\",attrs:{\"type\":\"button\",\"disabled\":_vm.saving},on:{\"click\":_vm.submit}},[_vm._v(_vm._s(_vm.saving ? '保存中...' : '确定'))])])])])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('div',[_c('div',{staticClass:\"panel-title\"},[_c('span',{staticClass:\"title-icon\"}),_c('strong',[_vm._v(\"提升计划\")])]),_c('p',[_vm._v(\"选择计划内容\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('h2',[_vm._v(\"侧重哪方面提升 \"),_c('small',[_vm._v(\"（多选）\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('h2',[_vm._v(\"感兴趣的话题 \"),_c('small',[_vm._v(\"（多选）\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-plant-setting\">\n    <div class=\"breadcrumb\">当前位置：首页&gt;计划&gt;计划管理</div>\n    <section class=\"setting-panel\">\n      <div class=\"panel-head\">\n        <div>\n          <div class=\"panel-title\"><span class=\"title-icon\"></span><strong>提升计划</strong></div>\n          <p>选择计划内容</p>\n        </div>\n        <button type=\"button\" class=\"reset-btn\" @click=\"toSelfTest\">等级不准，重新测评</button>\n      </div>\n\n      <div v-if=\"loading\" class=\"state\">正在加载计划...</div>\n      <div v-else class=\"setting-body\">\n        <section class=\"setting-group\">\n          <h2>侧重哪方面提升 <small>（多选）</small></h2>\n          <div class=\"option-list\">\n            <button\n              v-for=\"item in typeOptions\"\n              :key=\"item.id\"\n              type=\"button\"\n              class=\"option\"\n              :class=\"{ selected: item.is_check === 1 }\"\n              @click=\"toggleOption(item)\"\n            >{{ item.lable_name }}</button>\n          </div>\n        </section>\n\n        <section class=\"setting-group\">\n          <h2>感兴趣的话题 <small>（多选）</small></h2>\n          <div class=\"option-list topic-list\">\n            <button\n              v-for=\"item in subjectOptions\"\n              :key=\"item.id || item.name\"\n              type=\"button\"\n              class=\"option\"\n              :class=\"{ selected: item.is_check === 1 }\"\n              @click=\"toggleOption(item)\"\n            >{{ item.name }}</button>\n          </div>\n        </section>\n\n        <section class=\"setting-group time-group\">\n          <h2>每天学习时长</h2>\n          <div class=\"option-list\">\n            <button type=\"button\" class=\"option\" :class=\"{ selected: timeMode === 0 }\" @click=\"timeMode = 0\">60min/天</button>\n            <button type=\"button\" class=\"option\" :class=\"{ selected: timeMode === 1 }\" @click=\"timeMode = 1\">30min/天</button>\n            <label class=\"custom-time\" :class=\"{ selected: timeMode === 2 }\">\n              <input v-model.number=\"customMinutes\" type=\"number\" min=\"10\" max=\"1440\" placeholder=\"自定义\" @focus=\"timeMode = 2\" />\n              <span>min/天</span>\n            </label>\n          </div>\n        </section>\n\n        <div class=\"form-actions\">\n          <button type=\"button\" class=\"save-btn\" :disabled=\"saving\" @click=\"submit\">{{ saving ? '保存中...' : '确定' }}</button>\n        </div>\n      </div>\n    </section>\n  </div>\n</template>\n\n<script>\nimport { getPlant, subjectCateGet, PlantSave } from '@/api/plant'\n\nconst TYPE_OPTIONS = [\n  { id: 1, lable_name: '听力', is_check: 0 },\n  { id: 2, lable_name: '阅读', is_check: 0 },\n  { id: 3, lable_name: '口语', is_check: 0 },\n  { id: 4, lable_name: '写作', is_check: 0 }\n]\n\nexport default {\n  name: 'PcPlantSetting',\n  data() {\n    return {\n      typeOptions: TYPE_OPTIONS.map(item => ({ ...item })),\n      subjectOptions: [],\n      customMinutes: null,\n      timeMode: 0,\n      level: '',\n      aimLevel: '',\n      loading: true,\n      saving: false\n    }\n  },\n  methods: {\n    getUser() { return JSON.parse(localStorage.getItem('user') || '{}') },\n    parseNames(value) {\n      return String(value || '').replace(/[,，]+$/, '').split(/[,，]/).map(item => item.trim()).filter(Boolean)\n    },\n    markSelections(names, list, key) {\n      const selected = new Set(names)\n      list.forEach(item => { item.is_check = selected.has(item[key]) ? 1 : 0 })\n    },\n    toggleOption(item) { item.is_check = item.is_check === 1 ? 0 : 1 },\n    async loadSetting() {\n      const user = this.getUser()\n      if (!user.sid) { this.loading = false; return }\n      try {\n        const [planResponse, topicResponse] = await Promise.all([\n          getPlant(user.sid), subjectCateGet()\n        ])\n        const plan = planResponse && planResponse.code === 100 ? (planResponse.data || {}) : {}\n        this.level = this.$route.query.level || plan.level || ''\n        this.aimLevel = this.$route.query.aim_level || plan.aim_level || ''\n        this.markSelections(this.parseNames(plan.type_str), this.typeOptions, 'lable_name')\n        this.subjectOptions = Array.isArray(topicResponse && topicResponse.data) ? topicResponse.data : []\n        this.subjectOptions.forEach(item => { item.is_check = 0 })\n        this.markSelections(this.parseNames(plan.subject_str), this.subjectOptions, 'name')\n        const minutes = Number(plan.hour_str || plan.plan_minutes || 0)\n        if (minutes === 60) this.timeMode = 0\n        else if (minutes === 30 || !minutes) this.timeMode = 1\n        else { this.timeMode = 2; this.customMinutes = minutes }\n      } catch (error) {\n        console.error('Failed to load plan setting:', error)\n      } finally { this.loading = false }\n    },\n    toSelfTest() { this.$router.push({ name: 'PcExam' }) },\n    async submit() {\n      const user = this.getUser()\n      if (!user.sid) return\n      const minutes = this.timeMode === 0 ? 60 : this.timeMode === 1 ? 30 : Number(this.customMinutes)\n      if (!Number.isInteger(minutes) || minutes < 10 || minutes > 24 * 60) {\n        window.alert('请输入合法时间')\n        return\n      }\n      const typeStr = this.typeOptions.filter(item => item.is_check === 1).map(item => item.lable_name).join(',')\n      const subjectStr = this.subjectOptions.filter(item => item.is_check === 1).map(item => item.name).join(',')\n      this.saving = true\n      try {\n        const response = await PlantSave({ sid: user.sid, type_str: typeStr ? `${typeStr},` : '', subject_str: subjectStr ? `${subjectStr},` : '', hour_str: minutes, level: this.level, aim_level: this.aimLevel })\n        if (response.code === 100) this.$router.push({ name: 'PcPlant' })\n      } catch (error) {\n        console.error('Failed to save plan setting:', error)\n      } finally { this.saving = false }\n    }\n  },\n  mounted() { this.loadSetting() }\n}\n</script>\n\n<style scoped>\n.pc-plant-setting { width: 1114px; height: 583px; color: #14253b; }\n.breadcrumb { height: 22px; color: #718298; font-size: 12px; line-height: 18px; }\n.setting-panel { height: 541px; padding: 24px 42px; border-radius: 8px; box-sizing: border-box; background: rgba(255,255,255,.96); }\n.panel-head { display: flex; align-items: flex-start; justify-content: space-between; padding-bottom: 18px; border-bottom: 1px solid #e7eef5; }\n.panel-title { display: flex; align-items: center; gap: 8px; }\n.title-icon { width: 13px; height: 13px; background: url('https://a-news.oss-cn-hangzhou.aliyuncs.com/zheda/pc/more.png') center / contain no-repeat; }\n.panel-title strong { font-size: 20px; }\n.panel-head p { margin: 8px 0 0 21px; color: #8a98aa; font-size: 13px; }\n.reset-btn { padding: 7px 16px; border: 0; border-radius: 16px 0 0 16px; background: #eef2f6; color: #52677e; font-size: 12px; cursor: pointer; }\n.setting-body { width: 760px; margin: 20px auto 0; }\n.setting-group { margin-bottom: 22px; }\n.setting-group h2 { margin: 0 0 10px; color: #1a2d43; font-size: 15px; font-weight: 600; }\n.setting-group h2 small { color: #8a98aa; font-size: 12px; font-weight: 400; }\n.option-list { display: flex; flex-wrap: wrap; gap: 10px; }\n.option, .custom-time { min-width: 104px; height: 36px; padding: 0 18px; border: 1px solid #9fb0c0; border-radius: 19px; box-sizing: border-box; background: #fff; color: #718298; font-size: 13px; line-height: 34px; text-align: center; cursor: pointer; }\n.option.selected, .custom-time.selected { border-color: #278fe3; background: linear-gradient(135deg, #318edc, #83d5ee); color: #fff; }\n.topic-list { max-height: 128px; overflow-y: auto; padding: 2px 4px 4px 0; }\n.custom-time { display: flex; align-items: center; justify-content: center; gap: 3px; min-width: 150px; }\n.custom-time input { width: 68px; border: 0; outline: 0; background: transparent; color: inherit; font-size: 13px; text-align: right; }\n.custom-time input::placeholder { color: #718298; }\n.custom-time.selected input::placeholder { color: rgba(255,255,255,.82); }\n.form-actions { display: flex; justify-content: center; margin-top: 28px; }\n.save-btn { width: 230px; height: 42px; border: 0; border-radius: 22px; background: #07539a; color: #fff; font-size: 15px; cursor: pointer; }\n.save-btn:disabled { background: #9db7cc; cursor: default; }\n.state { height: 420px; display: flex; align-items: center; justify-content: center; color: #8190a2; }\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcPlantSetting.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcPlantSetting.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcPlantSetting.vue?vue&type=template&id=128edad2&scoped=true\"\nimport script from \"./PcPlantSetting.vue?vue&type=script&lang=js\"\nexport * from \"./PcPlantSetting.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcPlantSetting.vue?vue&type=style&index=0&id=128edad2&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"128edad2\",\n  null\n  \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"pc-active-detail\"},[_c('nav',{staticClass:\"breadcrumb\",attrs:{\"aria-label\":\"当前位置\"}},[_c('router-link',{attrs:{\"to\":\"/pc/home\"}},[_vm._v(\"首页\")]),_c('span',[_vm._v(\"/\")]),_c('span',[_vm._v(\"活动详情\")]),_c('router-link',{staticClass:\"all-activities\",attrs:{\"to\":{ name: 'ActiveList' }}},[_vm._v(\"全部活动 \"),_c('i',{staticClass:\"el-icon-arrow-right\"})])],1),(_vm.loading)?_c('div',{staticClass:\"state-panel\",attrs:{\"role\":\"status\"}},[_c('i',{staticClass:\"el-icon-loading\"}),_vm._v(\" 正在加载活动详情...\")]):(_vm.error)?_c('div',{staticClass:\"state-panel\",attrs:{\"role\":\"alert\"}},[_c('i',{staticClass:\"el-icon-warning-outline\"}),_c('p',[_vm._v(_vm._s(_vm.error))]),_c('button',{staticClass:\"secondary-button\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.loadActivity}},[_vm._v(\"重新加载\")])]):_c('div',{staticClass:\"activity-grid\"},[_c('section',{staticClass:\"activity-main\"},[_c('div',{staticClass:\"activity-hero\"},[_c('div',{staticClass:\"activity-cover\"},[(_vm.activity.cover && !_vm.coverFailed)?_c('img',{attrs:{\"src\":_vm.activity.cover,\"alt\":_vm.activity.name || '活动封面'},on:{\"error\":function($event){_vm.coverFailed = true}}}):_c('div',{staticClass:\"cover-placeholder\"},[_c('i',{staticClass:\"el-icon-date\"}),_c('span',[_vm._v(\"校园活动\")])])]),_c('div',{staticClass:\"activity-heading\"},[_c('span',{staticClass:\"category-label\"},[_vm._v(\"校园活动\")]),_c('h1',[_vm._v(_vm._s(_vm.activity.name || '活动详情'))]),_vm._m(0),_c('p',{staticClass:\"date-range\"},[_vm._v(_vm._s(_vm.activity.start_date || '待公布')+\" 至 \"+_vm._s(_vm.activity.end_date || '待公布'))])])]),_c('div',{staticClass:\"description-section\"},[_c('h2',[_vm._v(\"活动详情\")]),(_vm.activity.content)?_c('div',{staticClass:\"activity-content\",domProps:{\"innerHTML\":_vm._s(_vm.activity.content)}}):_c('p',{staticClass:\"empty-description\"},[_vm._v(\"暂无活动介绍\")])])]),_c('aside',{staticClass:\"registration-panel\"},[_vm._m(1),_c('div',{staticClass:\"quota-summary\"},[_c('strong',[_vm._v(_vm._s(_vm.attended))]),_c('span',[_vm._v(\"人已报名\")])]),_c('div',{staticClass:\"quota-track\",attrs:{\"role\":\"progressbar\",\"aria-label\":\"报名进度\",\"aria-valuenow\":_vm.progress,\"aria-valuemin\":\"0\",\"aria-valuemax\":\"100\"}},[_c('div',{style:({ width: _vm.progress + '%' })})]),_c('div',{staticClass:\"quota-caption\"},[_c('span',[_vm._v(_vm._s(_vm.hasCapacity ? '剩余 ' + _vm.remaining + ' 个名额' : '名额待公布'))]),(_vm.hasCapacity)?_c('span',[_vm._v(\"共 \"+_vm._s(_vm.capacity)+\" 人\")]):_vm._e()]),_vm._m(2),_vm._m(3),_c('button',{staticClass:\"primary-button register-button\",attrs:{\"type\":\"button\",\"disabled\":_vm.submitted || _vm.isFull},on:{\"click\":_vm.openRegistration}},[_vm._v(_vm._s(_vm.submitted ? '已报名' : _vm.isFull ? '名额已满' : '立即报名'))]),_c('router-link',{staticClass:\"back-home\",attrs:{\"to\":\"/pc/home\"}},[_vm._v(\"返回首页\")])],1)]),_c('el-dialog',{attrs:{\"title\":\"报名确认\",\"visible\":_vm.showRegistration,\"width\":\"520px\",\"append-to-body\":\"\",\"close-on-click-modal\":false,\"close-on-press-escape\":!_vm.submitting && !_vm.uploading,\"show-close\":!_vm.submitting && !_vm.uploading},on:{\"update:visible\":function($event){_vm.showRegistration=$event}}},[_c('div',{staticClass:\"registration-dialog\"},[_c('p',{staticClass:\"dialog-activity-name\"},[_vm._v(_vm._s(_vm.activity.name))]),_c('el-form',{ref:\"registrationForm\",attrs:{\"model\":_vm.form,\"rules\":_vm.rules,\"label-width\":\"80px\"},nativeOn:{\"submit\":function($event){$event.preventDefault();return _vm.submitRegistration.apply(null, arguments)}}},[_c('el-form-item',{attrs:{\"label\":\"姓名\"}},[_c('span',[_vm._v(_vm._s(_vm.user.name || '未提供'))])]),_c('el-form-item',{attrs:{\"label\":\"学号\"}},[_c('span',[_vm._v(_vm._s(_vm.user.userno || '未提供'))])]),_c('el-form-item',{attrs:{\"label\":\"联系方式\",\"prop\":\"phone\"}},[_c('el-input',{attrs:{\"placeholder\":\"填写你的联系方式\",\"disabled\":_vm.submitting,\"maxlength\":\"50\"},model:{value:(_vm.form.phone),callback:function ($$v) {_vm.$set(_vm.form, \"phone\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"form.phone\"}})],1),_c('el-form-item',{attrs:{\"label\":\"邮箱\",\"prop\":\"email\"}},[_c('el-input',{attrs:{\"placeholder\":\"填写你的电子邮箱\",\"disabled\":_vm.submitting,\"maxlength\":\"100\"},model:{value:(_vm.form.email),callback:function ($$v) {_vm.$set(_vm.form, \"email\", (typeof $$v === 'string'? $$v.trim(): $$v))},expression:\"form.email\"}})],1),_c('el-form-item',{attrs:{\"label\":\"活动附件\"}},[_c('label',{staticClass:\"attachment-picker\",class:{ disabled: _vm.uploading || _vm.submitting }},[_c('input',{attrs:{\"type\":\"file\",\"disabled\":_vm.uploading || _vm.submitting},on:{\"change\":_vm.uploadAttachment}}),_c('i',{class:_vm.uploading ? 'el-icon-loading' : 'el-icon-upload2'}),_c('span',[_vm._v(_vm._s(_vm.uploading ? '正在上传...' : _vm.fileName || '点击上传附件'))])]),(_vm.filePath && !_vm.uploading && !_vm.submitting)?_c('button',{staticClass:\"remove-attachment\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.removeAttachment}},[_vm._v(\"移除附件\")]):_vm._e()])],1),(_vm.formError)?_c('p',{staticClass:\"form-error\",attrs:{\"role\":\"alert\"}},[_vm._v(_vm._s(_vm.formError))]):_vm._e()],1),_c('div',{staticClass:\"dialog-actions\",attrs:{\"slot\":\"footer\"},slot:\"footer\"},[_c('el-button',{attrs:{\"disabled\":_vm.submitting || _vm.uploading},on:{\"click\":function($event){_vm.showRegistration = false}}},[_vm._v(\"取消\")]),_c('el-button',{attrs:{\"type\":\"primary\",\"loading\":_vm.submitting,\"disabled\":_vm.uploading || _vm.submitted || _vm.isFull},on:{\"click\":_vm.submitRegistration}},[_vm._v(\"确认无误，提交\")])],1)])],1)\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c;return _c('p',{staticClass:\"activity-date\"},[_c('i',{staticClass:\"el-icon-time\"}),_vm._v(\" 活动时间\")])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"registration-heading\"},[_c('h2',[_vm._v(\"活动报名\")]),_c('span',[_vm._v(\"上传文件参与\")])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('dl',{staticClass:\"participation-info\"},[_c('div',[_c('dt',[_c('i',{staticClass:\"el-icon-user\"}),_vm._v(\" 参与人群\")]),_c('dd',[_vm._v(\"本科生\")])]),_c('div',[_c('dt',[_c('i',{staticClass:\"el-icon-document\"}),_vm._v(\" 参与方式\")]),_c('dd',[_vm._v(\"上传文件\")])])])\n},function (){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"registration-tip\"},[_c('i',{staticClass:\"el-icon-info\"}),_c('p',[_vm._v(\"报名时请确认个人信息，并填写联系方式，便于接收活动通知。\")])])\n}]\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"pc-active-detail\">\n    <nav class=\"breadcrumb\" aria-label=\"当前位置\">\n      <router-link to=\"/pc/home\">首页</router-link><span>/</span><span>活动详情</span>\n      <router-link class=\"all-activities\" :to=\"{ name: 'ActiveList' }\">全部活动 <i class=\"el-icon-arrow-right\"></i></router-link>\n    </nav>\n\n    <div v-if=\"loading\" class=\"state-panel\" role=\"status\"><i class=\"el-icon-loading\"></i> 正在加载活动详情...</div>\n    <div v-else-if=\"error\" class=\"state-panel\" role=\"alert\">\n      <i class=\"el-icon-warning-outline\"></i><p>{{ error }}</p>\n      <button type=\"button\" class=\"secondary-button\" @click=\"loadActivity\">重新加载</button>\n    </div>\n    <div v-else class=\"activity-grid\">\n      <section class=\"activity-main\">\n        <div class=\"activity-hero\">\n          <div class=\"activity-cover\">\n            <img v-if=\"activity.cover && !coverFailed\" :src=\"activity.cover\" :alt=\"activity.name || '活动封面'\" @error=\"coverFailed = true\" />\n            <div v-else class=\"cover-placeholder\"><i class=\"el-icon-date\"></i><span>校园活动</span></div>\n          </div>\n          <div class=\"activity-heading\">\n            <span class=\"category-label\">校园活动</span>\n            <h1>{{ activity.name || '活动详情' }}</h1>\n            <p class=\"activity-date\"><i class=\"el-icon-time\"></i> 活动时间</p>\n            <p class=\"date-range\">{{ activity.start_date || '待公布' }} 至 {{ activity.end_date || '待公布' }}</p>\n          </div>\n        </div>\n        <div class=\"description-section\">\n          <h2>活动详情</h2>\n          <div v-if=\"activity.content\" class=\"activity-content\" v-html=\"activity.content\"></div>\n          <p v-else class=\"empty-description\">暂无活动介绍</p>\n        </div>\n      </section>\n\n      <aside class=\"registration-panel\">\n        <div class=\"registration-heading\"><h2>活动报名</h2><span>上传文件参与</span></div>\n        <div class=\"quota-summary\"><strong>{{ attended }}</strong><span>人已报名</span></div>\n        <div class=\"quota-track\" role=\"progressbar\" aria-label=\"报名进度\" :aria-valuenow=\"progress\" aria-valuemin=\"0\" aria-valuemax=\"100\">\n          <div :style=\"{ width: progress + '%' }\"></div>\n        </div>\n        <div class=\"quota-caption\"><span>{{ hasCapacity ? '剩余 ' + remaining + ' 个名额' : '名额待公布' }}</span><span v-if=\"hasCapacity\">共 {{ capacity }} 人</span></div>\n        <dl class=\"participation-info\">\n          <div><dt><i class=\"el-icon-user\"></i> 参与人群</dt><dd>本科生</dd></div>\n          <div><dt><i class=\"el-icon-document\"></i> 参与方式</dt><dd>上传文件</dd></div>\n        </dl>\n        <div class=\"registration-tip\"><i class=\"el-icon-info\"></i><p>报名时请确认个人信息，并填写联系方式，便于接收活动通知。</p></div>\n        <button type=\"button\" class=\"primary-button register-button\" :disabled=\"submitted || isFull\" @click=\"openRegistration\">{{ submitted ? '已报名' : isFull ? '名额已满' : '立即报名' }}</button>\n        <router-link class=\"back-home\" to=\"/pc/home\">返回首页</router-link>\n      </aside>\n    </div>\n\n    <el-dialog\n      title=\"报名确认\"\n      :visible.sync=\"showRegistration\"\n      width=\"520px\"\n      append-to-body\n      :close-on-click-modal=\"false\"\n      :close-on-press-escape=\"!submitting && !uploading\"\n      :show-close=\"!submitting && !uploading\"\n    >\n      <div class=\"registration-dialog\">\n        <p class=\"dialog-activity-name\">{{ activity.name }}</p>\n        <el-form ref=\"registrationForm\" :model=\"form\" :rules=\"rules\" label-width=\"80px\" @submit.native.prevent=\"submitRegistration\">\n          <el-form-item label=\"姓名\"><span>{{ user.name || '未提供' }}</span></el-form-item>\n          <el-form-item label=\"学号\"><span>{{ user.userno || '未提供' }}</span></el-form-item>\n          <el-form-item label=\"联系方式\" prop=\"phone\"><el-input v-model.trim=\"form.phone\" placeholder=\"填写你的联系方式\" :disabled=\"submitting\" maxlength=\"50\" /></el-form-item>\n          <el-form-item label=\"邮箱\" prop=\"email\"><el-input v-model.trim=\"form.email\" placeholder=\"填写你的电子邮箱\" :disabled=\"submitting\" maxlength=\"100\" /></el-form-item>\n          <el-form-item label=\"活动附件\">\n            <label class=\"attachment-picker\" :class=\"{ disabled: uploading || submitting }\">\n              <input type=\"file\" :disabled=\"uploading || submitting\" @change=\"uploadAttachment\" />\n              <i :class=\"uploading ? 'el-icon-loading' : 'el-icon-upload2'\"></i>\n              <span>{{ uploading ? '正在上传...' : fileName || '点击上传附件' }}</span>\n            </label>\n            <button v-if=\"filePath && !uploading && !submitting\" type=\"button\" class=\"remove-attachment\" @click=\"removeAttachment\">移除附件</button>\n          </el-form-item>\n        </el-form>\n        <p v-if=\"formError\" class=\"form-error\" role=\"alert\">{{ formError }}</p>\n      </div>\n      <div slot=\"footer\" class=\"dialog-actions\">\n        <el-button :disabled=\"submitting || uploading\" @click=\"showRegistration = false\">取消</el-button>\n        <el-button type=\"primary\" :loading=\"submitting\" :disabled=\"uploading || submitted || isFull\" @click=\"submitRegistration\">确认无误，提交</el-button>\n      </div>\n    </el-dialog>\n  </div>\n</template>\n\n<script>\nimport { getActiveDetail } from '@/api/home'\nimport { Submitactivity } from '@/api/user'\nimport { getStoredUser, applyAuthorizationToXhr } from '@/utils/auth'\nimport { resolveLanguageBaseUrl } from '@/utils/language'\n\nexport default {\n  name: 'PcActiveDetail',\n  data() {\n    return {\n      activity: {}, user: {}, loading: false, error: '', coverFailed: false,\n      showRegistration: false, submitting: false, submitted: false, uploading: false,\n      filePath: '', fileName: '', formError: '', requestId: 0,\n      form: { phone: '', email: '' },\n      rules: {\n        phone: [{ required: true, message: '请填写联系方式', trigger: 'blur' }],\n        email: [\n          { required: true, message: '请填写电子邮箱', trigger: 'blur' },\n          { type: 'email', message: '请填写有效的电子邮箱', trigger: 'blur' }\n        ]\n      }\n    }\n  },\n  computed: {\n    activeId() { return this.$route.query.active_id || '' },\n    hasCapacity() { return this.activity.total_num !== undefined && this.activity.total_num !== null && this.activity.total_num !== '' && Number.isFinite(Number(this.activity.total_num)) && Number(this.activity.total_num) >= 0 },\n    capacity() { return this.hasCapacity ? Number(this.activity.total_num) : 0 },\n    attended() { return Math.max(0, Number(this.activity.attend_num) || 0) },\n    remaining() { return Math.max(0, this.capacity - this.attended) },\n    progress() { return this.capacity > 0 ? Math.min(100, Math.round(this.attended / this.capacity * 100)) : 0 },\n    isFull() { return this.hasCapacity && this.remaining === 0 }\n  },\n  watch: {\n    activeId: {\n      immediate: true,\n      handler() {\n        this.cancelUpload()\n        this.showRegistration = false\n        this.submitted = false\n        this.form = { phone: '', email: '' }\n        this.removeAttachment()\n        this.loadActivity()\n      }\n    }\n  },\n  beforeDestroy() {\n    this.requestId += 1\n    this.cancelUpload()\n  },\n  methods: {\n    async loadActivity() {\n      const requestId = ++this.requestId\n      this.loading = true\n      this.error = ''\n      this.coverFailed = false\n      this.activity = {}\n      try {\n        this.user = getStoredUser() || {}\n        if (!this.user.sid) throw new Error('登录信息已失效，请重新登录后查看活动')\n        if (!this.activeId) throw new Error('缺少活动编号，请从活动列表重新进入')\n        const response = await getActiveDetail({ sid: this.user.sid, id: this.activeId })\n        if (requestId !== this.requestId) return\n        if (response.code !== undefined && Number(response.code) !== 100) throw new Error(response.msg || response.message || '活动加载失败，请稍后重试')\n        if (!response.data || Array.isArray(response.data) || !Object.keys(response.data).length) throw new Error('未找到该活动')\n        this.activity = response.data\n      } catch (error) {\n        if (requestId === this.requestId) this.error = error.message || '活动加载失败，请稍后重试'\n      } finally {\n        if (requestId === this.requestId) this.loading = false\n      }\n    },\n    openRegistration() {\n      if (this.submitted || this.isFull) return\n      this.formError = ''\n      this.showRegistration = true\n      this.$nextTick(() => this.$refs.registrationForm.clearValidate())\n    },\n    removeAttachment() {\n      this.filePath = ''\n      this.fileName = ''\n    },\n    cancelUpload() {\n      if (this.uploadRequest) this.uploadRequest.abort()\n      this.uploadRequest = null\n      this.uploading = false\n    },\n    uploadAttachment(event) {\n      const file = event.target.files && event.target.files[0]\n      event.target.value = ''\n      if (!file || this.uploading || this.submitting) return\n      this.formError = ''\n      this.removeAttachment()\n      const user = getStoredUser() || {}\n      if (!user.sid) {\n        this.formError = '登录信息已失效，请重新登录'\n        return\n      }\n      const form = new FormData()\n      form.append('file', file, `${user.sid}-${Date.now()}-${file.name}`)\n      const xhr = new XMLHttpRequest()\n      this.uploadRequest = xhr\n      this.uploading = true\n      const fail = () => {\n        this.formError = '附件上传失败，请重新上传'\n      }\n      xhr.onload = () => {\n        try {\n          const response = JSON.parse(xhr.responseText)\n          if (xhr.status < 200 || xhr.status >= 300 || !response.data || !response.data.url) throw new Error('Upload failed')\n          this.filePath = response.data.url\n          this.fileName = file.name\n        } catch (error) { fail() }\n      }\n      xhr.onerror = fail\n      xhr.ontimeout = fail\n      xhr.onloadend = () => {\n        this.uploading = false\n        this.uploadRequest = null\n      }\n      try {\n        const baseUrl = resolveLanguageBaseUrl(process.env.VUE_APP_BASE_API).replace(/\\/$/, '')\n        xhr.open('POST', `${baseUrl}/mobileupload/upload`)\n        xhr.timeout = 120000\n        applyAuthorizationToXhr(xhr)\n        xhr.send(form)\n      } catch (error) {\n        fail()\n        this.cancelUpload()\n      }\n    },\n    async submitRegistration() {\n      if (this.submitting || this.uploading || this.submitted || this.isFull) return\n      const valid = await this.$refs.registrationForm.validate().catch(() => false)\n      if (!valid || this.submitting) return\n      this.formError = ''\n      const user = getStoredUser() || {}\n      if (!user.sid) {\n        this.formError = '登录信息已失效，请重新登录'\n        return\n      }\n      const activeId = this.activeId\n      this.submitting = true\n      try {\n        const response = await Submitactivity({\n          sid: user.sid, activity_id: activeId, name: user.name, user_no: user.userno,\n          phone: this.form.phone, email: this.form.email, attachment: this.filePath\n        })\n        if (activeId !== this.activeId) return\n        const result = response.code !== undefined ? response : response.data || {}\n        if (Number(result.code) !== 100) throw new Error(result.msg || result.message || '报名失败，请稍后重试')\n        this.submitted = true\n        this.showRegistration = false\n        this.$message.success('报名成功')\n        this.loadActivity()\n      } catch (error) {\n        if (activeId === this.activeId) this.formError = error.message || '报名失败，请稍后重试'\n      } finally {\n        this.submitting = false\n      }\n    }\n  }\n}\n</script>\n\n<style scoped>\n.pc-active-detail { width: 1114px; height: 563px; color: #1c2d41; font-size: 14px; }\n.breadcrumb { display: flex; align-items: center; gap: 10px; height: 26px; color: #8391a2; font-size: 12px; }\n.breadcrumb a { color: #1769ab; text-decoration: none; }\n.breadcrumb .all-activities { margin-left: auto; }\n.activity-grid { display: grid; grid-template-columns: minmax(0, 1fr) 310px; gap: 18px; height: 537px; }\n.activity-main, .registration-panel, .state-panel { border-radius: 10px; background: #fff; box-sizing: border-box; }\n.activity-main { overflow-y: auto; }\n.activity-hero { display: grid; grid-template-columns: 300px minmax(0, 1fr); gap: 24px; padding: 24px; border-bottom: 1px solid #edf1f6; }\n.activity-cover { height: 186px; overflow: hidden; border-radius: 8px; background: #eff6fc; }\n.activity-cover img { width: 100%; height: 100%; object-fit: contain; }\n.cover-placeholder { height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 14px; color: #6e9ac3; background: linear-gradient(135deg, #dfedfa, #f3f9ff); }\n.cover-placeholder i { font-size: 42px; }\n.activity-heading { min-width: 0; padding-top: 6px; }\n.category-label { display: inline-block; padding: 4px 10px; border-radius: 4px; color: #1878bd; background: #eaf5ff; font-size: 12px; }\n.activity-heading h1 { margin: 14px 0 18px; font-size: 22px; line-height: 1.5; overflow-wrap: anywhere; }\n.activity-date { margin: 0 0 7px; color: #8a97a7; font-size: 12px; }\n.date-range { margin: 0; color: #52677d; font-size: 12px; line-height: 1.8; }\n.description-section { padding: 24px 28px 30px; }\n.description-section h2 { display: flex; align-items: center; gap: 9px; margin: 0 0 18px; font-size: 17px; }\n.description-section h2::before { content: ''; width: 3px; height: 17px; border-radius: 2px; background: #176db2; }\n.activity-content { overflow-x: auto; overflow-wrap: anywhere; color: #56677a; font-size: 14px; line-height: 1.9; }\n.activity-content ::v-deep img, .activity-content ::v-deep video { max-width: 100%; height: auto; }\n.activity-content ::v-deep p { word-break: normal; }\n.empty-description { color: #9aa6b4; }\n.registration-panel { display: flex; flex-direction: column; padding: 25px 24px; }\n.registration-heading { display: flex; justify-content: space-between; align-items: center; }\n.registration-heading h2 { margin: 0; font-size: 18px; }\n.registration-heading > span { color: #98a5b5; font-size: 11px; }\n.quota-summary { display: flex; align-items: baseline; gap: 8px; margin-top: 33px; }\n.quota-summary strong { color: #145e9f; font-size: 36px; line-height: 1.2; }\n.quota-summary span { color: #8997a8; font-size: 12px; }\n.quota-track { height: 7px; overflow: hidden; margin-top: 15px; border-radius: 5px; background: #edf2f7; }\n.quota-track > div { height: 100%; border-radius: inherit; background: linear-gradient(90deg, #2685d3, #7bd9f5); }\n.quota-caption { display: flex; justify-content: space-between; margin-top: 10px; color: #8392a5; font-size: 12px; }\n.quota-caption > span:first-child { color: #3976a6; }\n.participation-info { margin: 27px 0 20px; padding: 8px 14px; border-radius: 7px; background: #f6f9fc; }\n.participation-info > div { display: flex; justify-content: space-between; padding: 12px 0; font-size: 12px; }\n.participation-info > div + div { border-top: 1px solid #e7edf4; }\n.participation-info dt { color: #6e7f92; }\n.participation-info dt i { margin-right: 5px; color: #3a82ba; }\n.participation-info dd { margin: 0; color: #344e67; }\n.registration-tip { display: flex; align-items: flex-start; gap: 7px; color: #95a2b2; font-size: 12px; line-height: 1.8; }\n.registration-tip i { margin-top: 4px; }\n.registration-tip p { margin: 0; }\n.primary-button, .secondary-button { border: none; border-radius: 6px; font-size: 14px; cursor: pointer; }\n.primary-button { height: 42px; background: #075697; color: #fff; }\n.primary-button:hover { background: #1169af; }\n.primary-button:disabled { cursor: not-allowed; color: #8396a8; background: #e7eef5; }\n.register-button { width: 100%; margin-top: auto; }\n.back-home { margin-top: 13px; color: #8c9bae; font-size: 12px; text-align: center; text-decoration: none; }\n.state-panel { height: 537px; display: flex; flex-direction: column; justify-content: center; align-items: center; gap: 12px; color: #8293a6; }\n.state-panel > i { font-size: 28px; }\n.secondary-button { padding: 10px 24px; color: #1769ab; background: #eaf4fd; }\n.registration-dialog { color: #455b71; }\n.dialog-activity-name { margin: -8px 0 22px; padding: 12px 16px; border-radius: 6px; background: #f2f7fc; color: #246294; font-size: 14px; line-height: 1.6; overflow-wrap: anywhere; }\n.attachment-picker { display: flex; align-items: center; gap: 9px; padding: 0 14px; border: 1px dashed #b9cde0; border-radius: 5px; background: #f8fbfe; color: #4f82ac; cursor: pointer; }\n.attachment-picker input { position: absolute; width: 1px; height: 1px; opacity: 0; }\n.attachment-picker:focus-within { outline: 2px solid #409eff; outline-offset: 2px; }\n.attachment-picker span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.attachment-picker.disabled { opacity: .6; cursor: wait; }\n.remove-attachment { padding: 0; border: 0; background: none; color: #8396a8; font-size: 12px; cursor: pointer; }\n.form-error { margin: 8px 0 0; color: #d95353; font-size: 13px; }\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcActiveDetail.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcActiveDetail.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PcActiveDetail.vue?vue&type=template&id=4a4a6610&scoped=true\"\nimport script from \"./PcActiveDetail.vue?vue&type=script&lang=js\"\nexport * from \"./PcActiveDetail.vue?vue&type=script&lang=js\"\nimport style0 from \"./PcActiveDetail.vue?vue&type=style&index=0&id=4a4a6610&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"4a4a6610\",\n  null\n  \n)\n\nexport default component.exports","import PcLayout from '@/layouts/PcLayout.vue'\r\nimport PcHome from '@/views/pc/PcHome.vue'\r\nimport PcExam from '@/views/pc/PcExam.vue'\r\nimport PcExamNotice from '@/views/pc/PcExamNotice.vue'\r\nimport PcMiniPaper from '@/views/pc/PcMiniPaper.vue'\r\nimport PcExamReport from '@/views/pc/PcExamReport.vue'\r\nimport PcAi from '@/views/pc/PcAi.vue'\r\nimport PcPlant from '@/views/pc/PcPlant.vue'\r\nimport PcMine from '@/views/pc/PcMine.vue'\r\nimport PcWrite from '@/views/pc/PcWrite.vue'\r\nimport PcWriteProject from '@/views/pc/PcWriteProject.vue'\r\nimport PcWriteLearn from '@/views/pc/PcWriteLearn.vue'\nimport PcWritePraxis from '@/views/pc/PcWritePraxis.vue'\nimport PcWriteSubmit from '@/views/pc/PcWriteSubmit.vue'\nimport PcWriteOrderList from '@/views/pc/PcWriteOrderList.vue'\nimport PcWriteOrderDetail from '@/views/pc/PcWriteOrderDetail.vue'\nimport PcWriteNotice from '@/views/pc/PcWriteNotice.vue'\nimport PcInteractiveArgument from '@/views/pc/PcInteractiveArgument.vue'\nimport PcInteractiveWrite from '@/views/pc/PcInteractiveWrite.vue'\nimport PcInteractiveMultiWrite from '@/views/pc/PcInteractiveMultiWrite.vue'\nimport PcWriteHistory from '@/views/pc/PcWriteHistory.vue'\nimport PcWriteHistoryDetail from '@/views/pc/PcWriteHistoryDetail.vue'\nimport PcSpeak from '@/views/pc/PcSpeak.vue'\nimport Feedback from '@/views/etalk/Feedback.vue'\r\nimport PcEtalkHistory from '@/views/pc/PcEtalkHistory.vue'\r\nimport PcTodayTask from '@/views/pc/PcTodayTask.vue'\nimport PcStudyList from '@/views/pc/PcStudyList.vue'\nimport PcListenIndex from '@/views/pc/PcListenIndex.vue'\nimport PcReadIndex from '@/views/pc/PcReadIndex.vue'\r\nimport PcListenLearn from '@/views/pc/PcListenLearn.vue'\r\nimport PcReadLearn from '@/views/pc/PcReadLearn.vue'\r\nimport PcListenPraxis from '@/views/pc/PcListenPraxis.vue'\nimport PcReadPraxis from '@/views/pc/PcReadPraxis.vue'\nimport PcPracticeHistory from '@/views/pc/PcPracticeHistory.vue'\nimport PcPracticeDetail from '@/views/pc/PcPracticeDetail.vue'\nimport PcAbout from '@/views/pc/PcAbout.vue'\nimport PcChatIndex from '@/views/pc/PcChatIndex.vue'\nimport PcNewChat from '@/views/pc/PcNewChat.vue'\nimport PcChatFile from '@/views/pc/PcChatFile.vue'\nimport PcNormalChat from '@/views/pc/PcNormalChat.vue'\nimport PcEtalkProject from '@/views/pc/PcEtalkProject.vue'\nimport ScriptPractice from '@/views/etalk/ScriptPractice.vue'\r\nimport ScriptPracticeDetail from '@/views/etalk/ScriptPracticeDetail.vue'\r\nimport PcMicraList from '@/views/pc/PcMicraList.vue'\nimport PcMicraDetail from '@/views/pc/PcMicraDetail.vue'\nimport PcCollect from '@/views/pc/PcCollect.vue'\nimport PcNewWords from '@/views/pc/PcNewWords.vue'\nimport PcStudyNote from '@/views/pc/PcStudyNote.vue'\nimport PcPlantSetting from '@/views/pc/PcPlantSetting.vue'\nimport PcActiveDetail from '@/views/pc/PcActiveDetail.vue'\n\r\nconst pcRoutes = [\r\n  {\r\n    path: '/pc',\r\n    component: PcLayout,\r\n    redirect: '/pc/home',\r\n    children: [\n      {\n        path: 'active/detail',\n        name: 'PcActiveDetail',\n        component: PcActiveDetail,\n        meta: { requiresAuth: true, title: '活动详情', pc: true }\n      },\n      {\r\n        path: 'home',\r\n        name: 'PcHome',\r\n        component: PcHome,\r\n        meta: { requiresAuth: true, title: '首页', pc: true }\r\n      },\r\n      {\r\n        path: 'exam',\r\n        name: 'PcExam',\r\n        component: PcExam,\r\n        meta: { requiresAuth: true, title: '测试', pc: true }\r\n      },\r\n      {\r\n        path: 'exam/notice',\r\n        name: 'PcExamNotice',\r\n        component: PcExamNotice,\r\n        meta: { requiresAuth: true, title: '能力自测', pc: true }\r\n      },\r\n      {\r\n        path: 'exam/paper',\r\n        name: 'PcMiniPaper',\r\n        component: PcMiniPaper,\r\n        meta: { requiresAuth: true, title: '能力自测', pc: true }\r\n      },\r\n      {\r\n        path: 'exam/report',\r\n        name: 'PcExamReport',\r\n        component: PcExamReport,\r\n        meta: { requiresAuth: true, title: '自测详情', pc: true }\r\n      },\r\n      {\r\n        path: 'PcExamReport',\r\n        redirect: route => ({\r\n          name: 'PcExamReport',\r\n          query: {\r\n            ...route.query,\r\n            pc_id: String(route.query.pc_id || route.query.resource_id || '').match(/\\d+/)\r\n              ? String(route.query.pc_id || route.query.resource_id || '').match(/\\d+/)[0]\r\n              : route.query.pc_id || route.query.resource_id\r\n          }\r\n        })\r\n      },\r\n      {\n        path: 'ai',\n        name: 'PcAi',\n        component: PcAi,\n        meta: { requiresAuth: true, title: 'AI伴学', pc: true }\n      },\n      {\n        path: 'etalk/feedback',\r\n        name: 'PcFeedback',\r\n        component: Feedback,\r\n        meta: { requiresAuth: true, title: '口语反馈', pc: true }\r\n      },\r\n      {\r\n        path: 'chat/index',\r\n        name: 'PcChatIndex',\n        component: PcChatIndex,\n        meta: { requiresAuth: true, title: 'AI对话', pc: true }\n      },\n      {\n        path: 'chat/new',\n        name: 'PcNewChat',\n        component: PcNewChat,\n        meta: { requiresAuth: true, title: 'AI对话', pc: true }\n      },\n      {\n        path: 'chat/file',\n        name: 'PcChatFile',\n        component: PcChatFile,\n        meta: { requiresAuth: true, title: 'AI对话', pc: true }\n      },\n      {\n        path: 'chat/normal',\n        name: 'PcNormalChat',\n        component: PcNormalChat,\n        meta: { requiresAuth: true, title: 'AI对话', pc: true }\n      },\n      {\n        path: 'write',\n        name: 'PcWrite',\r\n        component: PcWrite,\r\n        meta: { requiresAuth: true, title: '写作频道', pc: true }\r\n      },\r\n      {\r\n        path: 'write/project',\r\n        name: 'PcWriteProject',\r\n        component: PcWriteProject,\r\n        meta: { requiresAuth: true, title: '主题写作', pc: true }\r\n      },\r\n      {\r\n        path: 'write/learn',\r\n        name: 'PcWriteLearn',\r\n        component: PcWriteLearn,\r\n        meta: { requiresAuth: true, title: '主题写作', pc: true }\r\n      },\r\n      {\r\n        path: 'write/praxis',\r\n        name: 'PcWritePraxis',\r\n        component: PcWritePraxis,\r\n        meta: { requiresAuth: true, title: '主题写作', pc: true }\r\n      },\r\n      {\n        path: 'write/submit',\n        name: 'PcWriteSubmit',\n        component: PcWriteSubmit,\n        meta: { requiresAuth: true, title: '预约老师', pc: true }\n      },\n      {\n        path: 'write/orders',\n        name: 'PcWriteOrderList',\n        component: PcWriteOrderList,\n        meta: { requiresAuth: true, title: '我的预约', pc: true }\n      },\n      {\n        path: 'write/order/detail',\n        name: 'PcWriteOrderDetail',\n        component: PcWriteOrderDetail,\n        meta: { requiresAuth: true, title: '预约详情', pc: true }\n      },\n      {\n        path: 'write/notice',\n        name: 'PcWriteNotice',\n        component: PcWriteNotice,\n        meta: { requiresAuth: true, title: '留言', pc: true }\n      },\n      {\n        path: 'write/history',\n        name: 'PcWriteHistory',\n        component: PcWriteHistory,\n        meta: { requiresAuth: true, title: 'AI写作历史', pc: true }\n      },\n      {\n        path: 'write/history/detail',\n        name: 'PcWriteHistoryDetail',\n        component: PcWriteHistoryDetail,\n        meta: { requiresAuth: true, title: 'AI写作历史', pc: true }\n      },\n      {\n        path: 'write/interactive-argument',\n        name: 'PcInteractiveArgument',\n        component: PcInteractiveArgument,\n        meta: { requiresAuth: true, title: '互动式议论文', pc: true, writeType: 'argument' }\n      },\n      {\n        path: 'write/interactive-narrative',\n        name: 'PcInteractiveNarrative',\n        component: PcInteractiveArgument,\n        meta: { requiresAuth: true, title: '互动式记叙文', pc: true, writeType: 'narrative' }\n      },\n      {\n        path: 'write/interactive-write/argument-single',\n        name: 'PcInteractiveWriteArgumentSingle',\n        component: PcInteractiveWrite,\n        meta: { requiresAuth: true, title: '单轮议论', pc: true, typeId: 1, classId: 1 }\n      },\n      {\n        path: 'write/interactive-write/argument-multi',\n        name: 'PcInteractiveWriteArgumentMulti',\n        component: PcInteractiveMultiWrite,\n        meta: { requiresAuth: true, title: '多轮议论', pc: true, typeId: 1, classId: 2 }\n      },\n      {\n        path: 'write/interactive-write/narrative-single',\n        name: 'PcInteractiveWriteNarrativeSingle',\n        component: PcInteractiveWrite,\n        meta: { requiresAuth: true, title: '单轮记叙', pc: true, typeId: 2, classId: 1 }\n      },\n      {\n        path: 'write/interactive-write/narrative-multi',\n        name: 'PcInteractiveWriteNarrativeMulti',\n        component: PcInteractiveMultiWrite,\n        meta: { requiresAuth: true, title: '多轮记叙', pc: true, typeId: 2, classId: 2 }\n      },\n      {\n        path: 'speak',\n        name: 'PcSpeak',\n        component: PcSpeak,\n        meta: { requiresAuth: true, title: '口语频道', pc: true }\n      },\n      {\n        path: 'etalk/index',\r\n        name: 'PcEtalkIndex',\r\n        component: PcSpeak,\r\n        meta: { requiresAuth: true, title: 'E-talk', pc: true }\r\n      },\r\n      {\r\n        path: 'etalk/script',\r\n        name: 'PcScriptPractice',\r\n        component: ScriptPractice,\r\n        meta: { requiresAuth: true, title: '脚本练习', pc: true }\r\n      },\r\n      {\r\n        path: 'etalk/script/detail',\r\n        name: 'PcScriptPracticeDetail',\r\n        component: ScriptPracticeDetail,\r\n        meta: { requiresAuth: true, title: '脚本练习', pc: true }\r\n      },\r\n      {\r\n        path: 'etalk/history',\r\n        name: 'PcEtalkHistory',\r\n        component: PcEtalkHistory,\r\n        meta: { requiresAuth: true, title: '记录回放', pc: true }\r\n      },\r\n      {\r\n        path: 'etalk/project',\r\n        name: 'PcEtalkProject',\n        component: PcEtalkProject,\n        meta: { requiresAuth: true, title: '主题列表', pc: true }\n      },\n      {\r\n        path: 'plant',\r\n        name: 'PcPlant',\r\n        component: PcPlant,\r\n        meta: { requiresAuth: true, title: '计划', pc: true }\r\n      },\r\n      {\n        path: 'tasks',\n        name: 'PcTodayTask',\n        component: PcTodayTask,\n        meta: { requiresAuth: true, title: '今日任务', pc: true }\n      },\n      {\n        path: 'study/list',\n        name: 'PcStudyList',\n        component: PcStudyList,\n        meta: { requiresAuth: true, title: '学习列表', pc: true }\n      },\n      {\n        path: 'listen/index',\n        name: 'PcListenIndex',\n        component: PcListenIndex,\r\n        meta: { requiresAuth: true, title: '听闻天下', pc: true }\r\n      },\r\n      {\r\n        path: 'listen/learn',\r\n        name: 'PcListenLearn',\r\n        component: PcListenLearn,\r\n        meta: { requiresAuth: true, title: '听闻天下', pc: true }\r\n      },\r\n      {\r\n        path: 'read/index',\r\n        name: 'PcReadIndex',\r\n        component: PcReadIndex,\r\n        meta: { requiresAuth: true, title: '书海遨游', pc: true }\r\n      },\r\n      {\r\n        path: 'read/learn',\r\n        name: 'PcReadLearn',\r\n        component: PcReadLearn,\r\n        meta: { requiresAuth: true, title: '书海遨游', pc: true }\r\n      },\r\n      {\r\n        path: 'listen/praxis',\r\n        name: 'PcListenPraxis',\r\n        component: PcListenPraxis,\r\n        meta: { requiresAuth: true, title: '听力练习', pc: true }\r\n      },\r\n      {\r\n        path: 'read/praxis',\r\n        name: 'PcReadPraxis',\r\n        component: PcReadPraxis,\r\n        meta: { requiresAuth: true, title: '阅读练习', pc: true }\r\n      },\r\n      {\n        path: 'listen/history',\n        name: 'PcPracticeHistoryListen',\n        component: PcPracticeHistory,\n        meta: { requiresAuth: true, title: '听力练习记录', pc: true, practiceType: 'listen' }\n      },\n      {\n        path: 'read/history',\n        name: 'PcPracticeHistoryRead',\n        component: PcPracticeHistory,\n        meta: { requiresAuth: true, title: '阅读练习记录', pc: true, practiceType: 'read' }\n      },\n      {\n        path: 'listen/detail',\n        name: 'PcPracticeDetailListen',\r\n        component: PcPracticeDetail,\r\n        meta: { requiresAuth: true, title: '听力结果', pc: true, practiceType: 'listen' }\r\n      },\r\n      {\r\n        path: 'read/detail',\r\n        name: 'PcPracticeDetailRead',\r\n        component: PcPracticeDetail,\r\n        meta: { requiresAuth: true, title: '阅读结果', pc: true, practiceType: 'read' }\r\n      },\r\n      {\n        path: 'micra_class/index',\n        name: 'PcMicraList',\n        component: PcMicraList,\n        meta: { requiresAuth: true, title: 'Micro courses', pc: true }\n      },\n      {\n        path: 'micra_class/detail',\n        name: 'PcMicraDetail',\n        component: PcMicraDetail,\n        meta: { requiresAuth: true, title: 'Micro course', pc: true }\n      },\n      {\n        path: 'mine',\n        name: 'PcMine',\r\n        component: PcMine,\r\n        meta: { requiresAuth: true, title: '我的', pc: true }\r\n      },\n      {\n        path: 'collect/index',\n        name: 'PcCollect',\n        component: PcCollect,\n        meta: { requiresAuth: true, title: '我的收藏', pc: true }\n      },\n      {\n        path: 'collect/new_words',\n        name: 'PcNewWords',\n        component: PcNewWords,\n        meta: { requiresAuth: true, title: '生词本', pc: true }\n      },\n      {\n        path: 'study/note',\n        name: 'PcStudyNote',\n        component: PcStudyNote,\n        meta: { requiresAuth: true, title: '反思日志', pc: true }\n      },\n      {\n        path: 'plant/secondset',\n        name: 'PcPlantSetting',\n        component: PcPlantSetting,\n        meta: { requiresAuth: true, title: '计划管理', pc: true }\n      },\n      {\r\n        path: 'about',\r\n        name: 'PcAbout',\r\n        component: PcAbout,\r\n        meta: { requiresAuth: true, title: '关于慧学', pc: true }\r\n      }\r\n    ]\r\n  }\r\n]\r\n\r\nexport default pcRoutes\r\n","const PC_PREFIX = '/pc'\n\nconst mobileRouteMap = {\n  '/home': '/pc/home',\n  '/active/detail': '/pc/active/detail',\n  '/exam': '/pc/exam',\n  '/ai': '/pc/ai',\n  '/listen/index': '/pc/listen/index',\n  '/read/index': '/pc/read/index',\n  '/listen/learn': '/pc/listen/learn',\n  '/read/learn': '/pc/read/learn',\n  '/listen/praxis': '/pc/listen/praxis',\n  '/read/praxis': '/pc/read/praxis',\n  '/listen/History': '/pc/listen/history',\n  '/read/History': '/pc/read/history',\n  '/listen/detail': '/pc/listen/detail',\n  '/read/detail': '/pc/read/detail',\n  '/listen/report': '/pc/listen/detail',\n  '/read/report': '/pc/read/detail',\n  '/exam/mini_notice': '/pc/exam/notice',\n  '/exam/mini_paper': '/pc/exam/paper',\n  '/exam/report': '/pc/exam/report',\n  '/exam/examReport': '/pc/exam/report',\n  '/study/list': '/pc/study/list',\n  '/micra_class/index': '/pc/micra_class/index',\n  '/micra_class/detail': '/pc/micra_class/detail',\n  '/plant': '/pc/plant',\n  '/mine': '/pc/mine',\n  '/collect/index': '/pc/collect/index',\n  '/collect/new_words': '/pc/collect/new_words',\n  '/study/note': '/pc/study/note',\n  '/plant/secondset': '/pc/plant/secondset',\n  '/about': '/pc/about',\n  '/chat/chat': '/pc/chat/index',\n  '/chat/chatFile': '/pc/chat/file',\n  '/chat/NormalChat': '/pc/chat/normal',\n  '/chat/NewChat': '/pc/chat/new',\n  '/etalk/project': '/pc/etalk/project',\n  '/etalk/feedback': '/pc/etalk/feedback',\n  '/etalk/script': '/pc/etalk/script',\n  '/etalk/script/detail': '/pc/etalk/script/detail',\n  '/etalk/index': '/pc/etalk/index',\n  '/etalk/history': '/pc/etalk/history',\n  '/write/index': '/pc/write',\n  '/write/WriteProject': '/pc/write/project',\n  '/write/InterActive': '/pc/write/interactive-argument',\n  '/write/InteractiveDiscussion': '/pc/write/interactive-narrative',\n  '/write/PraxisOneInA': '/pc/write/interactive-write/argument-single',\n  '/write/PraxisOneInB': '/pc/write/interactive-write/argument-multi',\n  '/write/PraxisOneInC': '/pc/write/interactive-write/narrative-single',\n  '/write/PraxisOneInD': '/pc/write/interactive-write/narrative-multi',\n  '/write/learn': '/pc/write/learn',\n  '/write/praxis': '/pc/write/praxis',\n  '/write/write': '/pc/write/praxis',\n  '/write/list': '/pc/write/history',\n  '/write/detail': '/pc/write/history/detail',\n  '/write/mysubmit': '/pc/write/order/detail',\n  '/write/notice': '/pc/write/notice',\n  '/write/submit': '/pc/write/submit'\n}\n\nconst pcRouteMap = Object.keys(mobileRouteMap).reduce((map, mobilePath) => {\n  map[mobileRouteMap[mobilePath]] = mobilePath\n  return map\n}, {})\n\nexport function isPcDevice() {\n  if (typeof window === 'undefined' || typeof navigator === 'undefined') {\n    return false\n  }\n\n  const ua = navigator.userAgent || ''\n  const width = window.innerWidth || document.documentElement.clientWidth || 0\n  const isiPadOS = /Macintosh/i.test(ua) && navigator.maxTouchPoints > 1\n  const isPhoneUA = /iPhone|iPod|Windows Phone|webOS|BlackBerry|IEMobile|Android.*Mobile/i.test(ua)\n  const isTabletUA = /iPad|Android/i.test(ua) || isiPadOS\n\n  if (width >= 1024 && !isPhoneUA && !isiPadOS) return true\n  return !isPhoneUA && !isTabletUA && width >= 768\n}\n\nexport function isPcRoute(path) {\n  return path === PC_PREFIX || path.indexOf(`${PC_PREFIX}/`) === 0\n}\n\nexport function getPcPath(path, query = {}) {\n  if (path === PC_PREFIX) {\n    return '/pc/home'\n  }\n\n  if (path === '/write/teaList' && String(query.tab || '') === '2') {\n    return '/pc/write/orders'\n  }\n\n  return mobileRouteMap[path] || ''\n}\n\nexport function getMobilePath(path) {\n  if (path === '/pc/speak') return '/etalk/index'\n  if (path === PC_PREFIX || path === '/pc/home') {\n    return '/home'\n  }\n\n  return pcRouteMap[path] || ''\n}\n","/* global dd */\r\nimport Vue from 'vue'\r\nimport VueRouter from 'vue-router'\r\nimport TabBarLayout from '@/layouts/TabBarLayout.vue'\r\nimport NormalLayout from '@/layouts/NormalLayout.vue'\r\nimport Home from '../views/Home.vue'\r\nimport Exam from '../views/Exam.vue'\r\nimport Ai from '../views/Ai.vue'\r\nimport MapIndex from '../views/MapIndex.vue'\r\nimport Etalk from '../views/etalk/Etalk.vue'\r\nimport Feedback from '../views/etalk/Feedback.vue'\r\nimport Project from '../views/etalk/Project.vue'\r\nimport ScriptPractice from '../views/etalk/ScriptPractice.vue'\r\nimport ScriptPracticeDetail from '../views/etalk/ScriptPracticeDetail.vue'\r\nimport History from '../views/etalk/History.vue'\r\nimport Plant from '../views/Plant.vue'\r\nimport SetPlant from '../views/plant/set_to.vue'\r\nimport stuNote from '../views/study/Note.vue'\r\nimport PlantSecond from '../views/plant/second.vue'\r\nimport PlantSecondSet from '../views/plant/second_set.vue'\r\nimport noAuth from '../views/noAuth.vue'\r\nimport Mine from '../views/Mine.vue'\r\nimport Login from '../views/Login.vue'\r\nimport NewLogin from '../views/NewLogin.vue'\r\nimport authLogin from '../views/authLogin.vue'\r\nimport About from '../views/About.vue'\r\nimport Index from '../views/listen/Index.vue'\r\nimport ListenLearn from '../views/listen/Learn.vue'\r\nimport Praxis from '../views/listen/Praxis'\r\nimport Detail from '../views/listen/Detail'\r\nimport Collect from '../views/collect/index'\r\nimport NewWords from '../views/collect/new_words'\r\nimport DetailHis from '../views/listen/DetailHis'\r\nimport DetailHisPre from '../views/listen/DetailHis_pre'\r\nimport Report from '../views/listen/Report'\r\nimport LHistoryList from '../views/listen/History'\r\nimport RHistoryList from '../views/read/History'\r\nimport ReadIndex from '../views/read/Index.vue'\r\nimport ReadLearn from '../views/read/Learn.vue'\r\nimport ReadPraxis from '../views/read/Praxis'\r\nimport ReadDetail from '../views/read/Detail'\r\nimport ReadDetailHis from '../views/read/DetailHis'\r\nimport ReadDetailHisPre from '../views/read/DetailHisPre'\r\nimport ReadReport from '../views/read/Report'\r\nimport WriteIndex from '../views/write/Index.vue'\r\nimport Write from '../views/write/Write.vue'\r\nimport WriteLearn from '../views/write/Learn.vue'\r\nimport WritePraxis from '../views/write/Praxis'\r\nimport WriteDetail from '../views/write/Detail'\r\nimport WriteReport from '../views/write/Report'\r\nimport WriteTeaList from '../views/write/List'\r\nimport WriteProject from '../views/write/writeNew/Index'\r\nimport InteractiveDiscussion from '../views/write/writeNew/InteractiveDiscussion'\r\nimport InterActive from '../views/write/writeNew/InterActive'\r\nimport PraxisOneInA from '../views/write/writeNew/PraxisOneInA'\r\nimport PraxisOneInB from '../views/write/writeNew/PraxisOneInB'\r\nimport PraxisOneInC from '../views/write/writeNew/PraxisOneInC'\r\nimport PraxisOneInD from '../views/write/writeNew/PraxisOneInD'\r\nimport WriteA from '../views/write/writeNew/Write.vue'\r\nimport WriteList from '../views/write/writeNew/List.vue'\r\nimport WriteB from '../views/write/writeNew/WriteB.vue'\r\nimport HistoryDetail from '../views/write/writeNew/HistoryDetail.vue'\r\nimport WriteSubmit from '../views/write/Submit'\r\nimport MySubmit from '../views/write/MySubmit'\r\nimport WriteNotice from '../views/write/Notice'\r\nimport MicraList from '../views/micra_class/Index'\r\nimport MicraDetail from '../views/micra_class/Detail'\r\nimport ActiveList from '../views/active/List'\r\nimport MyActiveList from '../views/active/MyList'\r\nimport StudyList from '../views/study/List'\r\nimport Serch from '../views/common/Serch'\r\nimport ActiveDetail from '../views/active/Detail'\r\nimport ChatIndex from '../views/chat/chat'\r\nimport ChatFile from '../views/chat/chatFile'\r\nimport NormalChat from '../views/chat/NormalChat'\r\n// import TestChat from '../views/chat/test'\r\nimport NewChat from '../views/chat/NewChat'\r\nimport NoticeList from '../views/notice/List'\r\nimport NoticeExamList from '../views/notice/ExamList'\r\nimport NoticeDetail from '../views/notice/Detail'\r\nimport Calendar from '../views/Calendar'\r\nimport MiniPaper from '../views/exam/MiniPaper'\r\nimport PaperNotice from '../views/exam/PaperNotice'\r\nimport ExamList from '../views/exam/examList'\r\nimport ExamReport from '../views/exam/examReport'\r\nimport pcRoutes from './pc'\r\nimport { getMobilePath, getPcPath, isPcDevice, isPcRoute } from '@/utils/device'\r\n\r\nVue.use(VueRouter)\r\n\r\nconst routes = [\r\n  ...pcRoutes,\r\n  {\r\n    path: '/home',\r\n    component: TabBarLayout, // 使用 TabBar 页面的布局组件\r\n    name: 'Home',\r\n    children: [\r\n      {\r\n        path: '/home',\r\n        name: 'Home',\r\n        component: Home,\r\n        meta: { requiresAuth: true, title: '首页' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/exam',\r\n        name: 'Exam',\r\n        component: Exam,\r\n        meta: { requiresAuth: true, title: '测试' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/ai',\r\n        name: 'Ai',\r\n        component: Ai,\r\n        meta: { requiresAuth: true, title: 'E-Talk' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/plant',\r\n        name: 'Plant',\r\n        component: Plant,\r\n        meta: { requiresAuth: true, title: '计划' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/mine',\r\n        name: 'Mine',\r\n        component: Mine,\r\n        meta: { requiresAuth: true, title: '我的' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/noauth',\r\n        name: 'th',\r\n        component: Mine,\r\n        meta: { requiresAuth: true, title: '无权限' } // 需要登录才能访问\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    path: '/plant',\r\n    component: NormalLayout, // 使用 TabBar 页面的布局组件\r\n    name: 'Home',\r\n    children: [\r\n      {\r\n        path: '/study/note',\r\n        name: 'stuNote',\r\n        component: stuNote,\r\n        meta: { requiresAuth: true, title: '反思日志' } // 需要登录才能访问\r\n      },\r\n       {\r\n        path: '/plant/set',\r\n        name: 'SetPlant',\r\n        component: SetPlant,\r\n        meta: { requiresAuth: true, title: 'Plant' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/plant/second',\r\n        name: 'PlantSecond',\r\n        component: PlantSecond,\r\n        meta: { requiresAuth: true, title: 'Plant' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/plant/secondset',\r\n        name: 'PlantSecondSet',\r\n        component: PlantSecondSet,\r\n        meta: { requiresAuth: true, title: 'Plant-Set' } // 需要登录才能访问\r\n      },\r\n    ]\r\n  },\r\n  {\r\n    path: '/listen',\r\n    component: NormalLayout, // 使用 TabBar 页面的布局组件\r\n    name: 'Listen',\r\n    children: [\r\n      {\r\n        path: '/listen/index',\r\n        name: 'Index',\r\n        component: Index,\r\n        meta: { requiresAuth: true, title: '听闻天下' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/listen/learn',\r\n        name: 'ListenLearn',\r\n        component: ListenLearn,\r\n        meta: { requiresAuth: true, title: '听闻天下' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/listen/praxis',\r\n        name: 'Praxis',\r\n        component: Praxis,\r\n        meta: { requiresAuth: true, title: '听闻天下' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/listen/detail',\r\n        name: 'Detail',\r\n        component: Detail,\r\n        meta: { requiresAuth: true, title: '听闻天下' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/listen/detail_history',\r\n        name: 'DetailHis',\r\n        component: DetailHis,\r\n        meta: { requiresAuth: true, title: '听闻天下' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/listen/detail_history_pre',\r\n        name: 'DetailHisPre',\r\n        component: DetailHisPre,\r\n        meta: { requiresAuth: true, title: '听闻天下' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/listen/report',\r\n        name: 'Report',\r\n        component: Report,\r\n        meta: { requiresAuth: true, title: '听闻天下' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/listen/History',\r\n        name: 'LHistoryList',\r\n        component: LHistoryList,\r\n        meta: { requiresAuth: true, title: '听闻天下' } // 需要登录才能访问\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    path: '/read',\r\n    component: NormalLayout, // 使用 TabBar 页面的布局组件\r\n    name: 'Read',\r\n    children: [\r\n      {\r\n        path: '/read/index',\r\n        name: 'Index',\r\n        component: ReadIndex,\r\n        meta: { requiresAuth: true, title: '书海遨游' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/read/learn',\r\n        name: 'ReadLearn',\r\n        component: ReadLearn,\r\n        meta: { requiresAuth: true, title: '书海遨游' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/read/praxis',\r\n        name: 'ReadPraxis',\r\n        component: ReadPraxis,\r\n        meta: { requiresAuth: true, title: '书海遨游' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/read/detail',\r\n        name: 'ReadDetail',\r\n        component: ReadDetail,\r\n        meta: { requiresAuth: true, title: '书海遨游' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/read/detail_read',\r\n        name: 'ReadDetailHis',\r\n        component: ReadDetailHis,\r\n        meta: { requiresAuth: true, title: '书海遨游' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/read/detail_read_pre',\r\n        name: 'ReadDetailHisPre',\r\n        component: ReadDetailHisPre,\r\n        meta: { requiresAuth: true, title: '书海遨游' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/read/report',\r\n        name: 'ReadReport',\r\n        component: ReadReport,\r\n        meta: { requiresAuth: true, title: '书海遨游' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/read/History',\r\n        name: 'RHistoryList',\r\n        component: RHistoryList,\r\n        meta: { requiresAuth: true, title: '书海遨游' } // 需要登录才能访问\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    path: '/write',\r\n    component: NormalLayout, // 使用 TabBar 页面的布局组件\r\n    name: 'Home',\r\n    children: [\r\n      {\r\n        path: '/write/index',\r\n        name: 'Index',\r\n        component: WriteIndex,\r\n        meta: { requiresAuth: true, title: '笔下生花' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/write/WriteProject',\r\n        name: 'WriteProject',\r\n        component: WriteProject,\r\n        meta: { requiresAuth: true, title: '主题列表' }\r\n      },\r\n      {\r\n        path: '/write/InterActive',\r\n        name: 'InterActive',\r\n        component: InterActive,\r\n        meta: { requiresAuth: true, title: '互动式议论文' }\r\n      },\r\n      {\r\n        path: '/write/PraxisOneInA',\r\n        name: 'PraxisOneInA',\r\n        component: PraxisOneInA,\r\n        meta: { requiresAuth: true, title: '单轮议论' }\r\n      },\r\n      {\r\n        path: '/write/PraxisOneInB',\r\n        name: 'PraxisOneInB',\r\n        component: PraxisOneInB,\r\n        meta: { requiresAuth: true, title: '多轮议论' }\r\n      },\r\n      {\r\n        path: '/write/InteractiveDiscussion',\r\n        name: 'InteractiveDiscussion',\r\n        component: InteractiveDiscussion,\r\n        meta: { requiresAuth: true, title: '互动式记叙文' }\r\n      },\r\n      {\r\n        path: '/write/PraxisOneInC',\r\n        name: 'PraxisOneInC',\r\n        component: PraxisOneInC,\r\n        meta: { requiresAuth: true, title: '单轮记叙' }\r\n      },\r\n      {\r\n        path: '/write/PraxisOneInD',\r\n        name: 'PraxisOneInD',\r\n        component: PraxisOneInD,\r\n        meta: { requiresAuth: true, title: '多轮记叙' }\r\n      },\r\n      {\r\n        path: '/write/writea',\r\n        name: 'WriteA',\r\n        component: WriteA,\r\n        meta: { requiresAuth: true, title: '写作编辑' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/write/writeb',\r\n        name: 'WriteB',\r\n        component: WriteB,\r\n        meta: { requiresAuth: true, title: '写作编辑' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/write/list',\r\n        name: 'WriteList',\r\n        component: WriteList,\r\n        meta: { requiresAuth: true, title: 'AI写作历史' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/write/detail',\r\n        name: 'HistoryDetail',\r\n        component: HistoryDetail,\r\n        meta: { requiresAuth: true, title: 'AI写作历史' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/write/write',\r\n        name: 'Write',\r\n        component: Write,\r\n        meta: { requiresAuth: true, title: '笔下生花' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/write/learn',\r\n        name: 'WriteLearn',\r\n        component: WriteLearn,\r\n        meta: { requiresAuth: true, title: '笔下生花' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/write/praxis',\r\n        name: 'WritePraxis',\r\n        component: WritePraxis,\r\n        meta: { requiresAuth: true, title: '笔下生花' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/write/detail',\r\n        name: 'WriteDetail',\r\n        component: WriteDetail,\r\n        meta: { requiresAuth: true, title: '笔下生花' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/write/report',\r\n        name: 'WriteReport',\r\n        component: WriteReport,\r\n        meta: { requiresAuth: true, title: '笔下生花' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/write/teaList',\r\n        name: 'WriteTeaList',\r\n        component: WriteTeaList,\r\n        meta: { requiresAuth: true, title: '笔下生花' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/write/submit',\r\n        name: 'WriteSubmit',\r\n        component: WriteSubmit,\r\n        meta: { requiresAuth: true, title: '笔下生花' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/write/mysubmit',\r\n        name: 'MySubmit',\r\n        component: MySubmit,\r\n        meta: { requiresAuth: true, title: '笔下生花' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/write/notice',\r\n        name: 'WriteNotice',\r\n        component: WriteNotice,\r\n        meta: { requiresAuth: true, title: '笔下生花' } // 需要登录才能访问\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    path: '/micra_class',\r\n    component: NormalLayout, // 使用 TabBar 页面的布局组件\r\n    name: 'Home',\r\n    children: [\r\n      {\r\n        path: '/micra_class/index',\r\n        name: 'MicraList',\r\n        component: MicraList,\r\n        meta: { requiresAuth: true } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/micra_class/detail',\r\n        name: 'MicraDetail',\r\n        component: MicraDetail,\r\n        meta: { requiresAuth: true } // 需要登录才能访问\r\n      },\r\n    ]\r\n  },\r\n  {\r\n    path: '/studymap',\r\n    component: NormalLayout, // 使用 TabBar 页面的布局组件\r\n    name: 'Home',\r\n    children: [\r\n      {\r\n        path: '/studymap/index',\r\n        name: 'MapIndex',\r\n        component: MapIndex,\r\n        meta: { requiresAuth: true } // 需要登录才能访问\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    path: '/active',\r\n    component: NormalLayout, // 使用 TabBar 页面的布局组件\r\n    children: [\r\n      {\r\n        path: '/active/list',\r\n        name: 'ActiveList',\r\n        component: ActiveList,\r\n        meta: { requiresAuth: true } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/active/mylist',\r\n        name: 'MyActiveList',\r\n        component: MyActiveList,\r\n        meta: { requiresAuth: true } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/active/detail',\r\n        name: 'ActiveDetail',\r\n        component: ActiveDetail,\r\n        meta: { requiresAuth: true } // 需要登录才能访问\r\n      },\r\n    ]\r\n  },\r\n  {\r\n    path: '/study',\r\n    component: NormalLayout, // 使用 TabBar 页面的布局组件\r\n    name: 'Home',\r\n    children: [\r\n      {\r\n        path: '/study/list',\r\n        name: 'StudyList',\r\n        component: StudyList,\r\n        meta: { requiresAuth: true } // 需要登录才能访问\r\n      },\r\n    ]\r\n  },\r\n  {\r\n    path: '/Serch',\r\n    component: NormalLayout, // 使用 TabBar 页面的布局组件\r\n    name: 'Serch',\r\n    children: [\r\n      {\r\n        path: '/serch/Serch',\r\n        name: 'Serch',\r\n        component: Serch,\r\n        meta: { requiresAuth: true } // 需要登录才能访问\r\n      },\r\n    ]\r\n  },\r\n  {\r\n    path: '/notice',\r\n    component: NormalLayout, // 使用 TabBar 页面的布局组件\r\n    children: [\r\n      {\r\n        path: '/notice/list',\r\n        name: 'NoticeList',\r\n        component: NoticeList,\r\n        meta: { requiresAuth: true } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/notice/examlist',\r\n        name: 'NoticeExamList',\r\n        component: NoticeExamList,\r\n        meta: { requiresAuth: true } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/notice/detail',\r\n        name: 'NoticeDetail',\r\n        component: NoticeDetail,\r\n        meta: { requiresAuth: true } // 需要登录才能访问\r\n      },\r\n    ]\r\n  },\r\n  {\r\n    path: '/exam',\r\n    component: NormalLayout, // 使用 TabBar 页面的布局组件\r\n    name: 'Home',\r\n    children: [\r\n      {\r\n        path: '/exam/mini_paper',\r\n        name: 'MiniPaper',\r\n        component: MiniPaper,\r\n        meta: { requiresAuth: true } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/exam/mini_notice',\r\n        name: 'PaperNotice',\r\n        component: PaperNotice,\r\n        meta: { requiresAuth: true } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/exam/examList',\r\n        name: 'ExamList',\r\n        component: ExamList,\r\n        meta: { requiresAuth: true } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/exam/examReport',\r\n        name: 'ExamReport',\r\n        component: ExamReport,\r\n        meta: { requiresAuth: true } // 需要登录才能访问\r\n      },\r\n    ]\r\n  },\r\n  {\r\n    path: '/chat/index',\r\n    component: NormalLayout, // 使用 TabBar 页面的布局组件\r\n    name: 'Home',\r\n    children: [\r\n      {\r\n        path: '/chat/chat',\r\n        name: 'ChatIndex',\r\n        component: ChatIndex,\r\n        meta: { requiresAuth: true } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/chat/chatFile',\r\n        name: 'ChatFile',\r\n        component: ChatFile,\r\n        meta: { requiresAuth: true } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/chat/NormalChat',\r\n        name: 'NormalChat',\r\n        component: NormalChat,\r\n        meta: { requiresAuth: true } // 需要登录才能访问\r\n      },\r\n      // {\r\n      //   path: '/chat/test',\r\n      //   name: 'TestChat',\r\n      //   component: TestChat,\r\n      // },\r\n      {\r\n        path: '/chat/NewChat',\r\n        name: 'NewChat',\r\n        component: NewChat,\r\n        meta: { requiresAuth: true } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/auth',\r\n        name: 'noAuth',\r\n        component: noAuth,\r\n        meta: { requiresAuth: true, title: '无权限' } // 需要登录才能访问\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    path: '/calendar',\r\n    component: NormalLayout, // 使用 TabBar 页面的布局组件\r\n    name: 'Home',\r\n    children: [\r\n      {\r\n        path: '/calendar',\r\n        name: 'Calendar',\r\n        component: Calendar,\r\n        meta: { requiresAuth: true } // 需要登录才能访问\r\n      },\r\n    ]\r\n  },\r\n  {\r\n    path: '/about',\r\n    component: NormalLayout, // 使用 TabBar 页面的布局组件\r\n    name: 'Home',\r\n    children: [\r\n      {\r\n        path: '/about',\r\n        name: 'About',\r\n        component: About,\r\n        meta: { requiresAuth: true } // 需要登录才能访问\r\n      },\r\n    ]\r\n  },\r\n  {\r\n    path: '/collect',\r\n    component: NormalLayout, // 使用 TabBar 页面的布局组件\r\n    name: 'Home',\r\n    children: [\r\n      {\r\n        path: '/collect/index',\r\n        name: 'Collect',\r\n        component: Collect,\r\n        meta: { requiresAuth: true, title: '我的收藏' } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/collect/new_words',\r\n        name: 'NewWords',\r\n        component: NewWords,\r\n        meta: { requiresAuth: true, title: '生词本' } // 需要登录才能访问\r\n      },\r\n    ]\r\n  },\r\n  {\r\n    path: '/etalk',\r\n    component: NormalLayout, // 使用 TabBar 页面的布局组件\r\n    name: 'Home',\r\n    children: [\r\n      {\r\n        path: '/etalk/index',\r\n        name: 'Etalk',\r\n        component: Etalk,\r\n        meta: { requiresAuth: true } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/etalk/feedback',\r\n        name: 'Feedback',\r\n        component: Feedback,\r\n        meta: { requiresAuth: true, title: '口语反馈' }\r\n      },\r\n      {\r\n        path: '/etalk/project',\r\n        name: 'Project',\r\n        component: Project,\r\n        meta: { requiresAuth: true } // 需要登录才能访问\r\n      },\r\n      {\r\n        path: '/etalk/script',\r\n        name: 'ScriptPractice',\r\n        component: ScriptPractice,\r\n        meta: { requiresAuth: true, title: '脚本练习' }\r\n      },\r\n      {\r\n        path: '/etalk/script/detail',\r\n        name: 'ScriptPracticeDetail',\r\n        component: ScriptPracticeDetail,\r\n        meta: { requiresAuth: true, title: '脚本练习' }\r\n      },\r\n      {\r\n        path: '/etalk/history',\r\n        name: 'History',\r\n        component: History,\r\n        meta: { requiresAuth: true } // 需要登录才能访问\r\n      },\r\n    ]\r\n  },\r\n  {\r\n    path: '/',\r\n    component: NormalLayout, // 使用普通页面的布局组件\r\n    name: 'Home',\r\n    children: [\r\n      {\r\n        path: '',\r\n        name: 'Login',\r\n        component: Login,\r\n        meta: { title: '登录' }\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    path: '/k7Lp9RjW3aHf2sT5yN8qZ1gU4vB6mX0cD9eK2nP7iF5rJ3oQ8bV',\r\n    component: NormalLayout, // 使用普通页面的布局组件\r\n    children: [\r\n      {\r\n        path: '',\r\n        name: 'NewLogin',\r\n        component: NewLogin,\r\n        meta: { title: '登录' }\r\n      }\r\n    ]\r\n  },\r\n  {\r\n    path: '/authLogin',\r\n    component: NormalLayout, // 使用普通页面的布局组件\r\n    children: [\r\n      {\r\n        path: '',\r\n        name: 'authLogin',\r\n        component: authLogin,\r\n        meta: { title: '登录' }\r\n      }\r\n    ]\r\n  },\r\n\r\n\r\n]\r\n\r\nconst router = new VueRouter({\r\n  // mode: 'history', // 使用history模式\r\n  routes\r\n})\r\n// function setDingTalkTitle(title) {\r\n//   if (window.dd) {\r\n//     dd.ready(function () {\r\n//       dd.biz.navigation.setTitle({\r\n//         title: title\r\n//       });\r\n//     });\r\n//   } else {\r\n//     document.title = title;\r\n//   }\r\n// }\r\n// // 全局导航守卫\r\n// router.beforeEach((to, from, next) => {\r\n//   const loggedIn = localStorage.getItem('user')\r\n\r\n//   if (to.matched.some(record => record.meta.requiresAuth) && !loggedIn) {\r\n//     // 如果目标路由需要认证而用户未登录，则跳转到登录页面\r\n//     next('/')\r\n//   } else {\r\n//     if (to.meta.title) {\r\n//       setDingTalkTitle(to.meta.title)\r\n//     }\r\n//     // 否则继续前往目标路由\r\n//     next()\r\n//   }\r\n// })\r\n\r\n// 设置钉钉标题的函数\r\nfunction setDingTalkTitle(title) {\r\n  if (window.dd) {\r\n    dd.ready(function () {\r\n      dd.biz.navigation.setTitle({\r\n        title: title\r\n      })\r\n    })\r\n  } else {\r\n    document.title = title\r\n  }\r\n}\r\n\r\n// 全局导航守卫\r\nrouter.beforeEach((to, from, next) => {\r\n  const loggedIn = localStorage.getItem('user')\r\n  const usePc = isPcDevice()\r\n  const pcTargetPath = getPcPath(to.path, to.query)\r\n  const mobileTargetPath = getMobilePath(to.path)\r\n\r\n  if (usePc && pcTargetPath) {\r\n    next({ path: pcTargetPath, query: to.query, replace: true })\r\n    return\r\n  }\r\n\r\n  if (!usePc && isPcRoute(to.path) && mobileTargetPath) {\r\n    next({ path: mobileTargetPath, query: to.query, replace: true })\r\n    return\r\n  }\r\n\r\n  if (to.matched.some(record => record.meta.requiresAuth) && !loggedIn) {\r\n    // 如果未登录且目标路由需要认证，则跳转到登录页面\r\n    next({ path: '/', replace: true })\r\n  } else {\r\n    if (to.meta.title) {\r\n      // 设置标题，确保在移动端生效\r\n      setDingTalkTitle(to.meta.title)\r\n    }\r\n    next()\r\n  }\r\n})\r\n\r\nrouter.afterEach(() => {\r\n  // 在页面切换后，滚动至顶部，避免白屏问题\r\n  window.scrollTo(0, 0)\r\n})\r\nexport default router\r\n","function processNode(node) {\r\n  if (node.nodeType === Node.TEXT_NODE) {\r\n    const text = node.nodeValue;\r\n    const parts = text.split(/(\\b[\\w’-]+\\b)/);\r\n\r\n    const fragment = document.createDocumentFragment();\r\n\r\n    parts.forEach(part => {\r\n      if (/^\\b[\\w’-]+\\b$/.test(part)) {\r\n        const span = document.createElement('span');\r\n        span.textContent = part;\r\n        span.style.cursor = 'pointer';\r\n        span.dataset.word = part;\r\n        fragment.appendChild(span);\r\n      } else {\r\n        fragment.appendChild(document.createTextNode(part));\r\n      }\r\n    });\r\n\r\n    node.replaceWith(fragment);\r\n  } else if (node.nodeType === Node.ELEMENT_NODE) {\r\n    Array.from(node.childNodes).forEach(processNode);\r\n  }\r\n}\r\n\r\nexport default {\r\n  inserted(el, binding) {\r\n    // 用 setTimeout 代替 Vue.nextTick\r\n    setTimeout(() => {\r\n      el.querySelectorAll('*').forEach(processNode);\r\n    }, 0);\r\n\r\n    if (!window.__wordifyListenerAdded) {\r\n      document.addEventListener('click', e => {\r\n        const word = e.target?.dataset?.word;\r\n        if (word && typeof binding.value === 'function') {\r\n          binding.value(word);\r\n        }\r\n      });\r\n      window.__wordifyListenerAdded = true;\r\n    }\r\n  },\r\n  componentUpdated(el) {\r\n    el.querySelectorAll('*').forEach(processNode);\r\n  }\r\n};\r\n","import Vue from 'vue'\r\nimport App from './App.vue'\r\nimport router from './router'\r\nimport axios from 'axios'\r\nimport wordify from './directives/v-wordify'\r\n\r\nVue.directive('wordify', wordify)\r\n\r\nVue.use(router);\r\n\r\nVue.config.productionTip = false\r\n\r\n// 禁用右键和 F12\r\ndocument.addEventListener('contextmenu', (e) => {\r\n  e.preventDefault(); // 禁止右键\r\n});\r\n\r\ndocument.addEventListener('keydown', (e) => {\r\n  // 禁止 F12 / Ctrl+Shift+I / Ctrl+Shift+J / Ctrl+U\r\n  if (\r\n    e.key === 'F12' ||\r\n    (e.ctrlKey && e.shiftKey && (e.key === 'I' || e.key === 'J')) ||\r\n    (e.ctrlKey && e.key === 'U')\r\n  ) {\r\n    e.preventDefault();\r\n  }\r\n});\r\n\r\nVue.prototype.$http = axios\r\nnew Vue({\r\n  router,\r\n  render: h => h(App)\r\n}).$mount('#app')\r\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcAbout.vue?vue&type=style&index=0&id=5c6bdb6c&prod&scoped=true&lang=css\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAjCAYAAACD1LrRAAADb0lEQVR4AbyWPUwUQRTH/28BGzUhMbGwEW00Br3TRsuz0BhBPSujJnomHMZGobDQEIFEKwugMjlIDjoqQQViNAaIhQ2JfMXEWCCNJBYqARvY2+d7Axzs3ex9gpOd2fl47/+bmZ3sPAdFpBN1PbdD9YmBUF1iLlTfzSZrvS6R1LEipFAQ+PilnqhAfhNxL0BRENVgI2mdKKZjOqHa+u7IxlCud16wiCUd5gERqZbsew7s34O7108hcvog9u7eBZ1QBTB6or67FXlSTrBCRSwWpNHRch73bpxCZ8s5fOy/ZSahtgS0CbxN60E5EKzbmwtqE9RJ9HddNUMCb8217YFgx/M6jEKO4nn3J0zMLvgsjh7eh4fxM6avgjlQwwo+fjERk9VuHiAjk11MzCyg4dEwGh4P4+vcr7TBzcu10O8vGuGgVVvBRBRNqxRQ0Qk0P33ns7x5pda0HbBVyw4Gh4xXEcWPn8t4/eFb2uOIbPl6I7z+9r2sYNmivNvsU1lv6Ddf+rtiWkvLa29iHDQdGYUdnGFUaFOh1+6/xJPOcTQ/e7/mRlhcq/hLK5jB436zwluZW87AH1iSFQym7xbbErtozOZoBXsE+SdjW5LjulYtK3h2KD4Gxny5ZP1kk2/vWXfPClZgihBDOYl50fXQhIAUCNZVy8FoD/DL2+0xmr6MNE4GGQaC1WF6KN7GjGatF5xlpZ7Hd2ZGGq3fdkMnJ1iNnKrKXoF3ar2QzKBkxa6qwXy2gWD9uUvUMcquK5EHAr8VMhIRmtRH73LVyBhON7PA4QsvahSokYRYRSSX9kg4pBohidHC0WRW9OIDH7uYCHNl5WchlQ4UZ/9DUdmBOdXe2p8G67ZUOTQqg1mzk75yn2rV3go3YN0K2RZrQFcucYt/dRUhqSztM2Bv1dVTuxMrVcZmJgp7rmsOqqOHSU7i7c3Rna0R8EBX7XgVldbQZAfx1amV1agD4v8NBhFFHGJYQxPsZCKukRVTSfFVOfPSxUr0ibLv3WInwYR5x3PIHO9inUu2l9tL72ln5k3DYAo4C/BUyWIFOrIEkZRKhfWedtRHL/2pocawTkCuwD5sQ9ijuiaLFoO7Vj0+OT3UGNkIhQzYGEihE5gejsemhuM15LqHPKKrDLTLZF7pbDWLmfXRMZMZfeqjvqqhWgLMikb+AQAA//+oF3UnAAAABklEQVQDAAGOOvB9YRbkAAAAAElFTkSuQmCC\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./chatFile.vue?vue&type=style&index=0&id=4ed1bebd&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWriteHistoryDetail.vue?vue&type=style&index=0&id=f1e1ad1a&prod&scoped=true&lang=css\"","const USER_KEY = 'user'\nconst AUTHORIZATION_KEY = 'authorization'\n\nexport function getStoredUser() {\n  try {\n    return JSON.parse(localStorage.getItem(USER_KEY) || '{}')\n  } catch (error) {\n    return {}\n  }\n}\n\nexport function getAuthorizationToken() {\n  const user = getStoredUser()\n  return localStorage.getItem(AUTHORIZATION_KEY) || user.token || ''\n}\n\nexport function appendAuthorizationHeader(config) {\n  const authorization = getAuthorizationToken()\n  config.headers = config.headers || {}\n  if (authorization) {\n    config.headers['authorization'] = authorization\n  }\n  return config\n}\n\nexport function applyAuthorizationToXhr(xhr) {\n  const authorization = getAuthorizationToken()\n  if (xhr && authorization) {\n    xhr.setRequestHeader('authorization', authorization)\n  }\n  return xhr\n}\n\nexport function installAuthorizationXhrHook() {\n  if (typeof window === 'undefined' || !window.XMLHttpRequest) return\n  if (window.__authorizationXhrHookInstalled) return\n\n  const originalOpen = window.XMLHttpRequest.prototype.open\n  const originalSend = window.XMLHttpRequest.prototype.send\n\n  window.XMLHttpRequest.prototype.open = function open(method, url) {\n    this.__authorizationRequestUrl = url\n    return originalOpen.apply(this, arguments)\n  }\n\n  window.XMLHttpRequest.prototype.send = function send() {\n    if (shouldApplyAuthorization(this.__authorizationRequestUrl)) {\n      applyAuthorizationToXhr(this)\n    }\n    return originalSend.apply(this, arguments)\n  }\n\n  window.__authorizationXhrHookInstalled = true\n}\n\nfunction shouldApplyAuthorization(url) {\n  if (!url) return true\n  const value = String(url)\n  if (value.indexOf('/mobileupload/upload') > -1) return true\n  if (value.indexOf(process.env.VUE_APP_BASE_API || '') === 0) return true\n  return false\n}\n\nexport function saveAuthorizationToken(token) {\n  if (token) {\n    localStorage.setItem(AUTHORIZATION_KEY, token)\n  }\n}\n\nexport function saveLoginUser(user) {\n  const nextUser = user || {}\n  saveAuthorizationToken(nextUser.token)\n  localStorage.setItem(USER_KEY, JSON.stringify(nextUser))\n  return nextUser\n}\n\nexport function saveRefreshedUser(user) {\n  const authorization = getAuthorizationToken()\n  const nextUser = {\n    ...(user || {}),\n    ...(authorization ? { token: authorization } : {})\n  }\n\n  saveAuthorizationToken(authorization)\n  localStorage.setItem(USER_KEY, JSON.stringify(nextUser))\n  return nextUser\n}\n","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAADb0lEQVR4AcRXT08TURCfed3qAZugB42c8IKJQluNH6BGD4Y2lXghkUQwkcaTwNGL7UUvHtp4kbQkcPHfRZBULsasxAsnoEhMjIfqxYMHo1EvtvQ582CX7bbdbWkXXnb65r2ZN/N7M/O2bwW00MJXHvcGY9mJUCw7H4rl9FA0W6Re7pBOvR6M5tJnBrPhFswq1aaABKMzo+R0TWpaEQEzADgEABFA7IXdFiE2ggiTfoFrpF8MxnLJ8NBsN827PsJJoz+Wi/AuEeUcOW1tlwQSAVKyXC7yRpz8sKwhkCClwAegk1KEqJ2nmzcSonSGHaJTA4SVKayzqFLQjn/7WhySpZLOdWaX8LgGCCmnKQ1jLOw4IYalzzfPm7XbrgJCFT/pGQjDM4Mpl+eNodGbQLgwqeLThsDjPhKM5VJWHyYQKsykVeA1jwBJa70oIAODWa6Jdk9Hy9grPs2MigIiECZattKBBVQKo0ZUhGKogJqxe/rUMQh0HXJVvTBwsik9NrQlfCoTgsLDr2uea0gMYGlmGF48ugbvn9+A29fP19VlACyfeRBVeiPx/rp61klEVP45NQqRVWjn45f7oOdEwJxu5CB+qa8qEiPxs+aaRgwiXGWZAJSuf0qBrsOsa1KA0tNz/Ig5NhieN3jureB57ERUpxhyUmCZvvKFO5M+FX/At+9/zLHB2PX0la+GyLHnd5ggDdeIsMHhOy9h+tkq3Mssw627eVpW+yy+/QxT99/Ak8VNpce6tVr1ZxhIfYltlqMw/XQV2Nnvv/9s0t0hg36YW3HV212xzQkJcnmbPbhfTdPWm46IlzDXF27+JCD4zksn7rZlgXVEuSIXmDkokhLn2Lf4uJRYBwnNnTNe0WEqS6kyQqkBkAgKFexz44OiAkF+FRChaRmQ8heN9/WpAKYMhwoIV620TBpCL3tJr43N/LhKC/tRQJjZeD2ekRJeMe85UfSF5lf/uoYvEwhPUOGkuPeUCERJQoSzYPVTBYQ+FdNWYcd5AlGRMGkUqNW+CUR9SgC43k1gr41AcCQ+LCV2Tmi1IQWEr4t0QUlWizo3klSY6Pf31ouE4UUBoesifeGD63UAWmwMYAvg4kY+UVMTdlMKiH2yvbEs0OmbKlXkOQZgPaJOdhUQ4dfGGHk7hJp2tJAfx0I+EeZXgVMa6gH6DwAA//+3BXbdAAAABklEQVQDAOVqLuJXgB7qAAAAAElFTkSuQmCC\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Exam.vue?vue&type=style&index=0&id=5a8e4126&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcInteractiveArgument.vue?vue&type=style&index=0&id=66c8f249&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWrite.vue?vue&type=style&index=0&id=7b6e6c61&prod&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NewLogin.vue?vue&type=style&index=0&id=082e46d6&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Learn.vue?vue&type=style&index=0&id=b1ab9776&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcTodayTask.vue?vue&type=style&index=0&id=12537aee&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcHome.vue?vue&type=style&index=0&id=8faac2de&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=style&index=0&id=72a0eff4&prod&scoped=true&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PraxisOneInC.vue?vue&type=style&index=0&id=5fb69cc8&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./index.vue?vue&type=style&index=0&id=3d5a6266&prod&scoped=true&lang=css\"","<template>\n  <div>\n    <van-nav-bar :title=\"title\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\n    <div v-if=\"msg_list.length == 0\" style=\"text-align: center\">下拉加载历史...</div>\n    <van-pull-refresh v-model=\"isLoading\" @refresh=\"onRefresh\">\n      <div style=\"display: none\">\n        <audio controls=\"controls\" :src=\"new_audio\" ref=\"audioPlayer\" autoplay @play=\"onPlay\"\n          @ended=\"myFunction()\"></audio>\n      </div>\n      <div class=\"chat-box\" id=\"chat-box\" ref=\"scrollContainer\">\n        <div class=\"chat-item\" v-for=\"(item, index) in msg_list\" :key=\"index\">\n          <div class=\"question-box\" v-if=\"item.type == 0 && item.question != ''\">{{ item.question }}</div>\n          <!-- <div class=\"question-box-empty\" v-if=\"item.type == 0 && item.question == ''\"></div> -->\n          <div class=\"question-box\" v-if=\"item.type == 1 && item.lang_time > 0\" @click=\"playSound(item.filepath)\">\n            <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/audio-msg.png\" mode=\"widthFix\"\n              class=\"start-img\" />\n            <span style=\"font-size: 12px; padding-left: 10px\">{{ item.lang_time }}s</span>\n          </div>\n\n          <div class=\"answer-box-text\" :id=\"'chat' + (index + 1)\" v-if=\"item.answer != ''\">\n            <div style=\"margin-bottom: 10px\" v-html=\"simpleParse(item.answer)\"></div>\n            <div class=\"answer-box\" id=\"myElement\" v-if=\"total_count != index + 1\">\n              <div class=\"restart-create\" @click=\"to_restart_chat(item)\">重新生成</div>\n              <img @click=\"copyText(item.answer)\"\n                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/copy.png\" mode=\"widthFix\"\n                class=\"copy-text\" />\n              <img @click=\"enCnText(item.answer, index)\"\n                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy.png\" mode=\"widthFix\" class=\"copy-text\"\n                v-if=\"item.iscn == false\" />\n              <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy1.png\" mode=\"widthFix\"\n                class=\"copy-text\" v-else />\n            </div>\n\n            <div class=\"answer-box\" id=\"myElement\" style=\"height: 360rpx\" v-else>\n              <div class=\"restart-create\" @click=\"to_restart_chat(item)\">重新生成</div>\n              <img @click=\"copyText(item.answer)\"\n                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/copy.png\" mode=\"widthFix\"\n                class=\"copy-text\" />\n              <img @click=\"enCnText(item.answer, index)\"\n                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy.png\" mode=\"widthFix\" class=\"copy-text\"\n                v-if=\"item.iscn == false\" />\n              <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy1.png\" mode=\"widthFix\"\n                class=\"copy-text\" v-else />\n              <div class=\"ai-ques-item\" v-for=\"(item1, index1) in global\" :key=\"index1\" @click=\"to_new_chat(item1)\">\n                {{ item1.lable }}\n              </div>\n            </div>\n          </div>\n        </div>\n        <div class=\"chat-item\" v-show=\"is_get == 0\">\n          <div class=\"answer-box-text-new\">\n            <div class=\"ai-ques-item1\">\n              <img src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/output-9_59_13.gif\" width=\"100%\"\n                alt=\"\" />\n            </div>\n          </div>\n        </div>\n        <div class=\"chat-item\">\n          <div class=\"answer-box-text-new\">\n            <div class=\"ai-ques-item1\"></div>\n          </div>\n        </div>\n        <div class=\"chat-item\">\n          <div class=\"answer-box-text-new\">\n            <div class=\"ai-ques-item1\"></div>\n          </div>\n        </div>\n        <div style=\"width: 100vw; height: 100px\"></div>\n      </div>\n    </van-pull-refresh>\n    <ChatComposer v-model=\"stu_content\" fixed :disabled=\"is_get === 0\" @send=\"sendInput\" @recording=\"onRecording\" />\n  </div>\n</template>\n\n<script>\nimport ChatComposer from '@/components/ChatComposer.vue'\n\nimport { speak_fetch, dialogue, en2cnDb, getttsUrl, saveEtalkStudy, updateEtalkStudy } from '@/api/home'\nimport { getAIHistory } from '@/api/user'\n\nexport default {\n  name: 'SpeechRecognitionDemo',\n  components: { ChatComposer },\n  data() {\n    return {\n      intervalId: null, // 保存定时器ID\n\n      title: '聊天',\n      new_audio: '',\n      content: '',\n      system: '',\n      to_aplay: false,\n      new_index: 0,\n      is_show_ai: false,\n\n      stu_content: '',\n\n      canuse: 0,\n\n      msg_list: [],\n      type: 0,\n      stype: 'speak_free',\n      lang_time: 0,\n      is_history: 0,\n      filePath: '',\n      total_count: 0,\n      from: 'speak',\n      currentSoundIndex: null,\n      pageSize: 0,\n      pageLimit: 1,\n      project_id: 0,\n      is_get: 1,\n\n      global: [\n        {\n          lable: '主题对话，GAI式陪练',\n          input: '',\n          talk_type: 2,\n        },\n        {\n          lable: '写作练习，AI写作辅导',\n          input: '',\n          talk_type: 1,\n        },\n      ],\n\n      isLoading: false,\n    }\n  },\n\n  mounted() {\n    // this.$message({\n    //   message: '系统繁忙，暂停使用！',\n    //   center: true\n    // });\n    // history.back()\n    // return\n    const user = JSON.parse(localStorage.getItem('user'))\n    if (user && user.sid) {\n      if (user.type_id == 3) {\n        this.$router.push({ name: 'noAuth' })\n        return\n      }\n    } else {\n      console.error('用户未登录或没有找到sid')\n    }\n    this.system = this.$route.query.system\n    this.stu_content = this.$route.query.content || ''\n    this.content = this.$route.query.content || ''\n    this.title = this.$route.query.chat_title\n    this.from = this.$route.query.from\n    this.stype = this.$route.query.stype\n    this.type = this.$route.query.type\n    this.filePath = this.$route.query.filePath\n    this.lang_time = this.$route.query.lang_time\n    this.res_id = this.$route.query.res_id\n    this.is_history = this.$route.query.is_history\n    this.project_id = this.$route.query.project_id\n    if (this.stype == 'speak_free') {\n      this.global = [\n        {\n          lable: '主题对话，GAI式陪练',\n          input: '',\n          talk_type: 2,\n        },\n        {\n          lable: '写作练习，AI写作辅导',\n          input: '',\n          talk_type: 1,\n        },\n      ]\n    }\n    if (this.stype == 'write') {\n      this.global = [\n        {\n          lable: '如何完善英语写作表达逻辑',\n          input: 'Brief answer (within 60 words):How to improve expression in English writing?',\n          talk_type: 0,\n        },\n        {\n          lable: '生成一个优秀英语写作主题',\n          input: 'Recommend one writing topic with brief writing guidance (within 60 words).',\n          talk_type: 0,\n        },\n      ]\n    }\n    if (this.stype == 'listen_guide' || this.stype == 'read_guide') {\n      this.global = [\n        {\n          lable: 'Summarize the gist and main idea.',\n          input: 'Summarize the gist and main idea.',\n          talk_type: 0,\n          content: '',\n        },\n        {\n          lable: 'Analyze and present the structure.',\n          input: 'Analyze and present the structure.',\n          talk_type: 0,\n          content: '',\n        },\n        {\n          lable: 'Explain sentences that contain over three clauses.',\n          input: 'Explain sentences that contain over three clauses.',\n          talk_type: 0,\n          content: '',\n        },\n      ]\n    }\n    if (this.stype == 'write_guide' || this.stype == 'write_subject') {\n      this.global = [\n        {\n          lable: 'Help me improve the language expression.',\n          input: 'Help me improve the language expression.',\n          talk_type: 0,\n          content: '',\n        },\n        {\n          lable: 'Help me enrich and improve the content.',\n          input: 'Help me enrich and improve the content.',\n          talk_type: 0,\n          content: '',\n        },\n        {\n          lable: 'Help me improve the article structure.',\n          input: 'Help me improve the article structure.',\n          talk_type: 0,\n          content: '',\n        },\n      ]\n    }\n    if (this.stype == 'speak_subject') {\n      this.global = [\n        {\n          lable: '重新生成一个口语练习主题',\n          input: 'Generate a new oral practice topic and provide a brief description of it (within 60 words).',\n          talk_type: 0,\n          content: '',\n        },\n        {\n          lable: '尝试进行AI写作练习',\n          input: 'Assist me with english writing',\n          talk_type: 1,\n          content: '',\n        },\n      ]\n    }\n    if (this.is_history == 1) {\n      this.get_history()\n    } else {\n      this.chat()\n    }\n\n    // this.saveEtalkStudy()\n  },\n  beforeDestroy() {\n    this.stop()\n    clearInterval(this.intervalId) // 清除定时器\n  },\n  methods: {\n    async sendInput({ text, filepath, duration, type }) {\n      if (this.is_get === 0) return\n      this.content = text\n      this.filePath = filepath\n      this.lang_time = duration\n      this.type = type\n      this.stu_content = ''\n      this.is_get = 0\n      await this.saveEtalkStudy()\n      try {\n        await this.chat()\n      } finally {\n        this.is_get = 1\n        this.canuse = 1\n      }\n    },\n    onRecording() {\n      this.stop()\n      // Study timing is started when the message is sent.\n    },\n    async saveEtalkStudy() {\n      try {\n        const user = JSON.parse(localStorage.getItem('user'))\n        if (user && user.sid) {\n          const response = await saveEtalkStudy({ sid: user.sid })\n          const data = response.data\n          this.etalk_time_id = data\n        } else {\n          console.error('用户未登录或没有找到sid')\n        }\n      } catch (error) {\n        console.error('Login Failed:', error)\n      }\n    },\n    async updateEtalkStudy() {\n      if (!this.etalk_time_id) {\n        console.warn('未找到有效学习记录ID')\n        return\n      }\n      try {\n        await updateEtalkStudy({ id: this.etalk_time_id })\n        this.etalk_time_id = null // 重置ID避免重复更新\n      } catch (error) {\n        console.error('Login Failed:', error)\n      }\n    },\n    async myFunction() {\n      this.to_aplay = false\n    },\n    async onPlay() {\n      this.to_aplay = true\n    },\n\n    async stop() {\n      this.to_aplay = false\n      this.$refs.audioPlayer.pause()\n      this.new_audio = ''\n      // 确保更新视图\n      this.$forceUpdate()\n    },\n    fixGarbledText(text) {\n      // 1. 假设乱码是 UTF-8 被误存为 Latin-1，再被存回 UTF-8\n      const buffer = Buffer.from(text, 'binary') // 先转成字节\n      return buffer.toString('utf-8') // 再正确解码\n\n      // 3. 可选：移除剩余的非 ASCII 字符（如不需要可删除）\n      // return fixedText.replace(/[^\\x20-\\x7E]/g, ' ');\n    },\n    simpleParse(md) {\n      return (\n        md\n          // 解析 # 标题\n          .replace(/^\\s*#\\s+(.+?)\\s*$/gm, '<h1>$1</h1>')\n          // 解析 ## 标题\n          .replace(/^\\s*##\\s+(.+?)\\s*$/gm, '<h2>$1</h2>')\n          // 解析代码块 ```...```\n          .replace(/```([\\s\\S]*?)```/g, '<pre><code>$1</code></pre>')\n          // 解析行内代码 `...`\n          .replace(/`([^`]+)`/g, '<code>$1</code>')\n          // 解析加粗 **...**\n          .replace(/\\*\\*(.+?)\\*\\*/g, '<strong>$1</strong>')\n          // 解析斜体 *...*\n          .replace(/\\*(.+?)\\*/g, '<em>$1</em>')\n          // 解析超链接 [text](url)\n          .replace(/\\[(.+?)\\]\\((.+?)\\)/g, '<a href=\"$2\">$1</a>')\n          // 解析无序列表项 - ...\n          .replace(/^\\s*-\\s+(.+?)$/gm, '<li>$1</li>')\n          // 合并相邻的 <li> 标签到 <ul> 中\n          .replace(/<\\/li>\\n<li>/g, '</li><li>')\n          // 将 <li> 包裹在 <ul> 中\n          .replace(/(<li>.*<\\/li>)/gs, '<ul>$1</ul>')\n          // 处理多个 <ul> 之间的换行\n          .replace(/<\\/ul>\\n<ul>/g, '')\n          // 解析换行符为 <br>\n          .replace(/\\n/g, '<br>')\n      )\n    },\n\n    async onRefresh() {\n      setTimeout(() => {\n        this.$message({\n          message: '刷新成功',\n          center: true,\n        })\n        this.isLoading = false\n        this.pageSize++\n        this.get_history()\n      }, 1000)\n    },\n    async to_restart_chat(item) {\n      console.log(item)\n      this.content = item.question ///语音文本内容\n      this.filepath = item.filePath //语音文件地址\n      this.type = item.type //消息类型\n      this.lang_time = item.lang_time\n      this.chat()\n    },\n    async to_new_chat(item) {\n      this.content = item.input //语音文本内容\n      if (item.talk_type == 1) {\n        this.stop()\n        this.stu_content = ''\n        this.type = 0\n        this.lang_time = 0\n        this.filePath = ''\n        this.msg_list = []\n        this.$router.push({\n          name: 'NewChat',\n          query: {\n            project_id: 0,\n            is_history: 0,\n            lang_time: this.lang_time,\n            filePath: this.filePath,\n            type: this.type,\n            stype: 'write_guide',\n            from: 'write',\n            chat_title: 'E-Write',\n            content: this.stu_content,\n            res_id: this.res_id,\n          },\n        })\n\n        this.title = 'E-Write'\n        this.from = 'write'\n        this.stype = 'write_guide'\n        this.msg_list = []\n        this.global = [\n          {\n            lable: '如何完善英语写作表达逻辑',\n            input: 'Brief answer (within 60 words):How to improve expression in English writing?',\n            talk_type: 0,\n          },\n          {\n            lable: '生成一个优秀英语写作主题',\n            input: 'Recommend one writing topic with brief writing guidance (within 60 words).',\n            talk_type: 0,\n          },\n        ]\n\n        this.chat()\n        // 确保更新视图\n        this.$forceUpdate()\n      } else if (item.talk_type == 2) {\n        this.$router.push({ name: 'Project' })\n      } else {\n        console.log(this.content)\n        this.filePath = ''\n        this.type = 0\n        this.lang_time = 0\n\n        this.chat()\n        // 确保更新视图\n        this.$forceUpdate()\n      }\n    },\n    async copyText(item) {\n      try {\n        await navigator.clipboard.writeText(item)\n        alert('文本已复制到剪贴板')\n      } catch (err) {\n        console.error('复制到剪贴板失败', err)\n      }\n    },\n    async enCnText(item, index) {\n      try {\n        const response = await en2cnDb({ userinput: item })\n        const data = response.data\n        var msg_list = this.msg_list\n        if (response.code == 100) {\n          msg_list.forEach((val, key) => {\n            if (key === index) {\n              val.answer += '\\n' + data.content\n              val.iscn = true\n            }\n          })\n        }\n        this.msg_list = msg_list\n      } catch (error) {\n        console.error('Login Failed:', error)\n      }\n    },\n    async readText(item, index) {\n      this.$refs.audioPlayer.pause()\n      await this.get_audio(item, index)\n    },\n    async readText2(item, index) {\n      this.$refs.audioPlayer.pause()\n      this.get_audio_read(item, index)\n    },\n    async get_audio(str, index) {\n      // const regex = /[!@#&$%^*()_+={}[\\]:;\"'<>,.?/~`-]/g;\n      // var new_answer = str.replace(regex, '');\n      var new_answer = str\n\n      var new_str = this.fixGarbledText(this.simpleParse(new_answer))\n      new_str = new_str.replace(/<[^>]+>/g, '')\n      const response = await getttsUrl({ inputtext: new_str })\n      const new_response = JSON.parse(response.data.result)\n\n      this.new_index = index - 1\n      var msg_index = this.msg_list.length - 1\n      this.msg_list[msg_index].answer = new_answer\n      console.log(this.msg_list[msg_index])\n      console.log(new_response.results)\n      if (new_response.results.ret == 'FAILED') {\n        this.stu_content = ''\n        this.content = ''\n        this.is_get = 1\n        this.total_count = this.msg_list.length\n        // this.scrollToElement()\n        // 确保更新视图\n        this.$forceUpdate()\n        return\n      } else {\n        this.new_audio = new_response.results.Transformation.Response.DubbingQueryResult.VoiceURL\n\n        this.stu_content = ''\n        this.content = ''\n        this.is_get = 1\n        this.total_count = this.msg_list.length\n        // this.scrollToElement()\n        // 确保更新视图\n        this.$forceUpdate()\n      }\n    },\n    async get_audio_read(str, index) {\n      // const regex = /[!@#&$%^*()_+={}[\\]:;\"'<>,.?/~`-]/g;\n      // var new_str = str.replace(regex, '');\n      var new_str = str\n      new_str = this.fixGarbledText(this.simpleParse(new_str))\n      new_str = new_str.replace(/<[^>]+>/g, '')\n      const response = await getttsUrl({ inputtext: new_str })\n      const new_response = JSON.parse(response.data.result)\n\n      this.new_index = index\n      this.to_aplay = true\n      console.log(index)\n      if (new_response.results.ret != 'FAILED') {\n        this.new_audio = new_response.results.Transformation.Response.DubbingQueryResult.VoiceURL\n      }\n      this.canuse = 1\n      this.total_count = this.msg_list.length\n      // console.log(this.msg_list)\n      // this.scrollToElement()\n      // 确保更新视图\n      this.$forceUpdate()\n    },\n    async playSound(url) {\n      // 停止当前播放的语音\n      if (this.currentSoundIndex !== null && this.currentSoundIndex !== url) {\n        this.stopSound(url)\n      }\n      // 播放新的语音\n      const sound = url\n      const audio = new Audio(sound)\n      audio.play()\n      // 更新当前播放\n      console.log(url)\n      this.currentSoundIndex = url\n    },\n    async stopSound(sound) {\n      // 停止语音播放的逻辑\n      const audio = new Audio(sound)\n      audio.pause()\n    },\n    async onClickLeft() {\n      history.back()\n    },\n\n    async chat() {\n      try {\n        this.updateEtalkStudy()\n        if (this.content == '' && this.stype != 'translate') {\n          this.is_get = 1\n          return\n        }\n        this.is_get = 0\n        const container = this.$refs.scrollContainer\n        container.scrollTop = container.scrollHeight\n        const user = JSON.parse(localStorage.getItem('user'))\n        if (user && user.sid) {\n          if (this.stype != 'translate') {\n            this.$set(this.msg_list, this.msg_list.length, {\n              answer: '',\n              type: this.type,\n              question: this.content,\n              lang_time: this.lang_time,\n              iscn: false,\n              filepath: this.filePath || '',\n            })\n          } else {\n            this.$set(this.msg_list, this.msg_list.length, {\n              answer: '',\n              type: this.type,\n              question: this.content,\n              lang_time: this.lang_time,\n              iscn: true,\n              filepath: this.filePath || '',\n            })\n          }\n          if (this.content.includes('翻译')) {\n            this.stype = 'translate'\n          } else {\n            this.stype = this.from\n          }\n\n          if (!this.filePath) {\n            this.filePath = ''\n          }\n          const params = {\n            userinput: this.content, //语音文本内容\n            filepath: this.filePath, //语音文件地址\n            filePath: this.filePath,\n            type: this.type, //消息类型\n            lang_time: this.lang_time,\n            etalk_cate_id: this.project_id,\n            stype: this.stype, //消息类型\n            from: this.from, //聊天来源\n            sid: user.sid, //学生sid\n            res_id: this.res_id,\n            preuserinput: JSON.stringify(this.msg_list.slice(-3)),\n          }\n          Object.keys(params).forEach((k) => {\n            if (params[k] === '' || params[k] === null || params[k] === undefined) {\n              delete params[k]\n            }\n          })\n          var response = null\n          if (this.res_id > 0) {\n             response = await speak_fetch(params)\n          } else {\n             response = await dialogue(params)\n          }\n\n\n          this.content = ''\n          const data = response.data\n          var msg_index = this.msg_list.length - 1\n          this.msg_list[msg_index].answer = data.content\n          console.log(data.content)\n\n          this.stu_content = ''\n          this.content = ''\n          this.is_get = 1\n          // console.log(data)\n          // 确保更新视图\n          // this.$forceUpdate();\n        } else {\n          console.error('用户未登录或没有找到sid')\n        }\n      } catch (error) {\n        console.error('Login Failed:', error)\n      } finally {\n        this.is_get = 1\n        this.canuse = 1\n      }\n    },\n    async scrollToElement() {\n      document.getElementById('myElement').scrollIntoView()\n    },\n    async to_free_talk() { },\n    async to_ai_write() { },\n    async to_script_talk() { },\n\n    change_show_ai() {\n      this.is_show_ai = !this.is_show_ai\n    },\n\n    async get_history() {\n      try {\n        const user = JSON.parse(localStorage.getItem('user'))\n        if (user && user.sid) {\n          const response = await getAIHistory({\n            sid: user.sid,\n            from: this.from,\n            page: this.pageSize,\n            size: this.pageLimit,\n          })\n          const data = response.data\n          var msg_list = this.msg_list\n          var history_list = data.list.reverse()\n          var new_msg = history_list.concat(msg_list)\n          new_msg.forEach((val) => {\n            val.iscn = false\n          })\n          this.msg_list = new_msg\n          console.log(this.msg_list)\n          this.totalScroll = 0\n          this.total_count = new_msg.length\n        } else {\n          console.error('用户未登录或没有找到sid')\n        }\n      } catch (error) {\n        console.error('Login Failed:', error)\n      }\n    },\n\n    // 初始化语音识别客户端\n\n    // 初始化音频可视化\n\n    // 处理连接/断开连接\n\n    // 开始录音\n\n    // 停止录音\n\n    // 断开连接\n\n    // 开始音频可视化\n\n    // 停止音频可视化\n\n    // 清理资源\n  },\n}\n</script>\n\n<style scoped>\n.chat-box {\n  width: 100vw;\n  height: 70vh;\n  overflow-y: auto;\n  /* 使内容可滚动 */\n  padding-bottom: 120px;\n}\n\n.question-box {\n  height: auto;\n  max-width: 280px;\n  min-width: 100px;\n  min-height: 30px;\n  background: linear-gradient(118deg, #4499ee 0%, #9ce4ff 100%);\n  border-radius: 20px 0px 20px 20px;\n  font-size: 14px;\n  color: #fff;\n  padding: 5px 10px;\n  line-height: 30px;\n  text-align: left;\n  float: right;\n  margin: 20px;\n}\n\n.question-box-empty {\n  max-width: 280px;\n  min-width: 100px;\n  height: 5px;\n  border-radius: 20px 0px 20px 20px;\n  font-size: 14px;\n  color: #fff;\n  padding: 5px 10px;\n  line-height: 30px;\n  text-align: center;\n  float: right;\n  margin: 10px;\n}\n\n.answer-box-text {\n  height: auto;\n  width: 300px;\n  min-height: 30px;\n  font-size: 14px;\n  padding: 5px 10px 20px 10px;\n  line-height: 1.5;\n  text-align: left;\n  float: left;\n  background-color: #f6f6f6;\n  margin-left: 20px;\n  border-radius: 10px;\n  margin-bottom: 20px;\n}\n\n.answer-box-text-new {\n  height: auto;\n  width: 300px;\n  min-height: 30px;\n  font-size: 14px;\n  padding: 5px 10px 20px 10px;\n  line-height: 1.5;\n  text-align: left;\n  float: left;\n  /* background-color: #F6F6F6; */\n  margin-left: 20px;\n  border-radius: 10px;\n}\n\n.chat-item {\n  width: 100%;\n  height: 80px;\n}\n\n.chat-item:last-child>.answer-box-text {\n  padding-bottom: 200px;\n}\n\n.answer-box {\n  padding-top: 10px;\n  border-top: 1px solid #e4e3e3;\n  width: 300px;\n  height: 100rpx;\n  line-height: 50px;\n}\n\n.answer-box>img {\n  width: 20px;\n  height: 20px;\n  vertical-align: top;\n  display: inline-block;\n  margin-bottom: 20px;\n}\n\n.restart-create {\n  width: 20%;\n  font-size: 12px;\n  height: 40px;\n  vertical-align: top;\n  display: inline-block;\n  margin-right: 55%;\n  line-height: 40px;\n}\n\n.copy-text {\n  width: 14px;\n  height: 15px;\n  padding-top: 10px;\n  vertical-align: top;\n  display: inline-block;\n  padding-right: 13px;\n}\n\n.read-audio {\n  width: 18px;\n  height: 15px;\n  padding-top: 10px;\n  vertical-align: top;\n  display: inline-block;\n}\n\n.ai-ques-item {\n  width: auto;\n  height: 30px;\n  border-radius: 15px;\n  border: 1px solid rgb(221, 219, 219);\n  line-height: 30px;\n  text-align: left;\n  padding: 0 10px;\n  font-size: 12px;\n  margin-bottom: 10px;\n}\n\n.ai-ques-item1 {\n  width: 30px;\n  height: 30px;\n  position: relative;\n  left: 20px;\n  top: 10px;\n}\n\n.start-img {\n  width: 20px;\n  height: 20px;\n  vertical-align: top;\n  display: inline-block;\n  padding-top: 5px;\n}\n</style>\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=style&index=0&id=3063dc48&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Detail.vue?vue&type=style&index=0&id=7beaca4e&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcActiveDetail.vue?vue&type=style&index=0&id=4a4a6610&prod&scoped=true&lang=css\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAeCAYAAABJ/8wUAAADZUlEQVR4AcRXXUgUURT+ziTlFkElBCZBRIEQ9hIYJOlDISYGIkYRlZQJYTs6o7a7GtT2JEqQuPmyRQghBvoiISUkaCmmkg8VQqAFgdZLgg+pkLO3e4Z2WXdnd3bXn4Y5e8895/u+++387GUVpHhoWlOmqnleqLpnQdXcPdV1dw+mKGXSUjKiaZ5DBgXGiXCRgL1EVJ4WMMad9Y3ZpmoKH0kbceruHIPEuDSw9goQMhUjMKbqrtwUfCApI06tMU8SRgm033Ixoj0EGpK3q9CyH6codeN0w1q1tY0lhMAgQLsR9yAHAf2q5iqLC4toJmSkRm+sEIrok8/Cjgh+rGkaQL1qnbsKCR62RuRlvgOITqlni5WY0ClNEwny12geb6gYJ4krLk345GVujcO3bxHuq7rbL4FSSn7GOC2NeL1epUb3dEqmMwYvqTKBqlTN3St15S2zpkYZUVV1x8LiSp+EV8jYsFPeqrJfiyv9uq47rETXGHG5XLuxbZd8M1BiBV5vjYDCVWwf0jRtT6RWyMithob9y39olAh5kaCNnBMo16D0Md4iwnVNI7xPbF9Nk7+WlBPe3KycgGxDbhHVuudIcA2F9wfeJ0A4hC08pJmD2wTe85bByyoUEH3SRCZPtjrkY5ChCBrgdRUI8ZGT/xUCYorXVnxtLRdgiNMQuMeFLQuBZgHKl+ubb6j5sLa3t4yQguktM8ELEX3xPWp+xymHaYSTWOFIT0fl9StwVlch60BijxLjGM885sfSDq/bGrlZeQ3Hc47h6JHDUG9XoSD/VDg/Ki/IzzNxjGde5Y2rURirgq0RhyM9xHM4HCgrPQ9XvYrLl8pRVHjGNMYjz7leVloCxgVJGRn7gmnc0dbI0PBolEBW1gGczD2Bc0VnTWM88pzrkeCh4ZHIkuXc1sjE5Ad0dfdaku2KzBt+G/1FrHi2RpjEZnwdTzAz+42ntsG41oftYJ4t+B8gISOMnZn9Cl+HH56mB+YVej0wCI6JySlz5Pzps+dmn3Fz8z+YlnAkbCSouLyyYn7TVwNvwNHV3WOOnH/6PA3uB7HJjEkbSUY8GWzIiBGgn8kQ14ulgDEfrhEy8riteVRugN/Dm5uYzy0v71zzOoWM8KIGoVjuhi/l34ffPN/oEAJLrE8Bpdjv9y6F6/8FAAD//73FhlEAAAAGSURBVAMAGbwIAJ/u/gcAAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAjCAYAAACD1LrRAAADWUlEQVR4AbyWT08TURDAZ14Nyo3IFbR+AEP9BvgvMRpi8WC8sbZSUNtYL15MpCZeiImgVIUibTkYDYmCnwC4aDypR40JEvWIyEWMYXecebQN3b5X+gd4Ybpv3/z5zZtd9o2COkY0dr0vGovPRgYSS9GBBInInCUnujpCQU1ghoUjscQqoMoDYhgBglAYMmdxRMcJLF0ZjHcXVFUvqqqWlRwsx7BZRGgD32hvPwg9585AqOsotLa2AicQJML5SCw+5DOtuK0KFigHcyq8Cgvxq/1wvucsyHVsZFgnISpETDE8JXObWMFS3mpQU0BJ4s7tW1rF8KFqZbeCCXFER6jy83LmFXz+8rXM4lBnB1y6eEGvkQfWGEZwZDDh8G5LL5COYvgR6P0Hj0Dk+4+fJYtTJ7pBnj8ghmy7NoKRIAx1DEkg/XSyzOP0yc2XmyyxjGAC6CqLUsPNysovePvufcmys6NDz4kwpCe+HyMYAbYtMxjGi5nXsL6+rjV/CldAOKwXfD9GsM+m5luBpu4NQ3b6OTwulZ7WTAGMYCJYNBnXsuYvORD+NvkZwQj0zWTc2BotmPzMYAV52KHhqX3GWEbws/H0AhAtN8uWR5YfHzVWzwgWICqwfqOhlkG05pGbtJlawbJrIrprc9xunRQm85NPPtrsrGBxyGbSKSK4KfOahXdKCJez42PGZ1uMUxUsRt6/QJ7hozKvRQgw5/0NzG1nawXLxz06EJ8P7HdXEcH6rMA3xFZ85CyXGD516bYC7AwmgwIk7iQAcPNLD/UPBHAkBp/rs46TbPNHKAM7/ddCynM/QBNA8A/u0VSLuySxt6pKYCmLwsA8l6oiu60OjcwlpsTeCtdgKYXnobGhawRk8hF4AFVOWKLX4EDLxqgoZGFXhTsS1bKRFIaSlwkQ++RmbwRvyK4Vv0x1tTnNJieVVQfcsJR6T8GSOHrUrcDSmojBbgl/3YKK/9Eb6q+aSoo3q3bi3K07CYJlxU769ebr3vzx6eXxOa2mMuk5RDpOQJ92m0wEi67aF5JzWnYMcuhnJ9Ih5AS49NMsTbc9pU3oFooeup57LJsZ6y62QhpcNJIEpjJphyXoYuAIJ9BLm13IG8lWpGjrv4pOhH2mtQ9Rr8SQWFMT6Ypu5D8AAAD//+wAG/0AAAAGSURBVAMAMZ5ATIZrI+4AAAAASUVORK5CYII=\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WriteLearnAi.vue?vue&type=style&index=0&id=e19c688c&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./second_set.vue?vue&type=style&index=0&id=be483738&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcMicraDetail.vue?vue&type=style&index=0&id=9f45659e&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ScriptPracticeDetail.vue?vue&type=style&index=0&id=5b8ca922&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWriteOrderList.vue?vue&type=style&index=0&id=54cf0271&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWriteSubmit.vue?vue&type=style&index=0&id=74e02538&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Detail.vue?vue&type=style&index=0&id=22b74cae&prod&scoped=true&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PraxisOneInB.vue?vue&type=style&index=0&id=5020c541&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcChat.vue?vue&type=style&index=0&id=a7781cc6&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=style&index=0&id=a3df8fc4&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ScriptPractice.vue?vue&type=style&index=0&id=5d60df36&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Learn.vue?vue&type=style&index=0&id=5c0e3ff6&prod&scoped=true&lang=css\"","module.exports = __webpack_public_path__ + \"img/plant-bg.83a895b8.png\";","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Plant.vue?vue&type=style&index=0&id=6a1a03e7&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcEtalkProject.vue?vue&type=style&index=0&id=e666c880&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcNewWords.vue?vue&type=style&index=0&id=a0b4d7c8&prod&scoped=true&lang=css\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAjCAYAAAD17ghaAAAEO0lEQVR4AbRXy08TYRCf2dYHnnzdfAQTo9f6F1iNB18oamJMNGEBBVTQamI8eKBeNWqFxgBKWRLuQDx48AH+BUg8aUyKUY8YuIAQtp/z27LLt7htdwt+6XTne8zM7/vNtJk1qIphtqVqm1vah5tbO1RTa0e+ueVmQxVuHJNIAEwztVUCDsSUnSfmenhgolpiwxJAE1fb2pMUcYQG0NTS3mlstPMS0AyMwZxQiscEyDAYCjwTsFgRAOiVW+eZOc1MW6nSEGbAEACDsUrHSwIAnc2t7WMk9DJRLUUcLIDBGC5QzvQfAKBPbjwAOok4ck5JGwzG5AKSlpL14QPQ1NZhgj4mCs4zVTn0+pBC1r14AHBzVjSgb667LvVhbFxK6X49AHFaipxn3VF4nX1p9QBUcnDsaJKOHT1c9tie3buo7tRxwrPsQW0zFIAzp0/QpYvnRS4QdM3eU2tqaujm9Wt0tu4k3bt7i3bs2O7tlVNCAdAdAEDQDc/WnaCdy0G3bKmhubl53aykHgrA2/fjND+/4rCx4bLP4cED+yU9K6l998F/3nd41SQUAATPWUOe6d49u71UgPrGhive3vT0bxp9/cabV1JCAYCTicnPBIEOcVOhU4/13OCQjy2slZPQAOAELIAN6BAUHX4d0CGg/svXb1BDSyQACA4Qrne36DCPSj1sIJEAwABpgEDXJSr1rm1kADAEC2ADOqQa6mEHqQoAgj960kWgHTmPUvUIqktVAODgx89fdP9Bmh4/7YpU9bDVxQPwqic7rkhN6pv/Q2dSGd2vBwCLhYV4Uin1EPq6i1Kziqmxvy87ovv2AbCszEyuL5u2ObZPDo2KrP2DwHIpezFem+vptlY79AGQRjItfeBtqycz1d/bXc+sjqwpLUoNOoHlUrRh0XmXQK+pg/AAYIOZO4k4Iz1hHnPURa43mwB1pNR3CjsQWFgUuk3aTMV3CSM2gXcJVaBnpA0PQEGx146xdMFoSoWNMfPajQSok5sknPoQSjV7v6oH/kMzwminUbAnxN9Kjyn9oaynXUMHABbkUEBLxsmYIBdGHHBOfRjxhLAxSPrQAiN9aMWNTRJYWnNGZ6yfdXS+jR4UqgGFHeoxDRYBZxryViRAOxEA1NoF+5AAOWcvxLZhjnWwhRacpBUXm4ALFf2zgIqpJedShqsUt0p/w0ic3nFPWC9ffJLAI5aVmXHXjFgsIXlOuPPyT04K2HpDci0/N/VcKfroitxsNshYGZwKWnfXUCvw4c71p5I/ueIeYqmHqCdbFaaMXF93pr83m5Jn0hUxXCkameADYwSAXk4KyvaBxFkEx68J/ouxsmnUE1h0ihCHdOl3/q3Uc30tyLG+7+pwSqTZyq+mwHHnVd49oz8DAeAAkAI5dDgsOi7OKn3bC/G0lkYTBVrKpiQAGAA5qHccYiGkLBemqeQvuMhmacO/AAAA///EnEdBAAAABklEQVQDACc4+RxwgE56AAAAAElFTkSuQmCC\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWriteOrderDetail.vue?vue&type=style&index=0&id=294b63e8&prod&scoped=true&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InterActive.vue?vue&type=style&index=0&id=272fb0d8&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcStudyNote.vue?vue&type=style&index=0&id=73b10c34&prod&scoped=true&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WriteB.vue?vue&type=style&index=0&id=f74849aa&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Report.vue?vue&type=style&index=0&id=440823f6&prod&scoped=true&lang=css\"","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"chat-composer\",class:{ 'chat-composer-fixed': _vm.fixed }},[_c('form',{staticClass:\"input-bar\",on:{\"submit\":function($event){$event.preventDefault();return _vm.sendText.apply(null, arguments)}}},[_c('button',{staticClass:\"mode-button\",attrs:{\"type\":\"button\",\"disabled\":_vm.busy,\"aria-label\":_vm.voiceMode ? '切换文字输入' : '切换语音输入'},on:{\"click\":function($event){_vm.voiceMode = !_vm.voiceMode}}},[_c('van-icon',{attrs:{\"name\":_vm.voiceMode ? 'edit' : 'volume-o'}})],1),(_vm.voiceMode)?_c('button',{staticClass:\"record-button\",attrs:{\"type\":\"button\",\"disabled\":_vm.busy},on:{\"click\":_vm.startVoice}},[_vm._v(\" 点击说话 \")]):_c('input',{attrs:{\"aria-label\":\"文字输入\",\"placeholder\":\"请输入你的疑问...\",\"disabled\":_vm.busy},domProps:{\"value\":_vm.value},on:{\"input\":function($event){return _vm.$emit('input', $event.target.value)}}}),(!_vm.voiceMode)?_c('button',{staticClass:\"send-button\",attrs:{\"type\":\"submit\",\"disabled\":_vm.busy || !String(_vm.value || '').trim()}},[_vm._v(\" 发送 \")]):_vm._e()]),_c('van-popup',{staticClass:\"voice-popup\",attrs:{\"value\":_vm.voiceOpen,\"round\":\"\",\"position\":\"bottom\",\"get-container\":\"body\",\"close-on-click-overlay\":false}},[_c('div',{staticClass:\"voice-title\"},[_vm._v(_vm._s(_vm.connecting ? '正在连接，请稍候...' : '语音识别中，请说英语'))]),(_vm.connecting)?_c('van-loading',{attrs:{\"color\":\"#4499ee\"}}):_vm._e(),_c('div',{staticClass:\"recognized-text\"},[_vm._v(_vm._s(_vm.recognizedText || '识别内容将显示在这里'))]),_c('div',{staticClass:\"voice-actions\"},[_c('button',{attrs:{\"type\":\"button\"},on:{\"click\":_vm.cancelVoice}},[_vm._v(\"取消\")]),_c('button',{attrs:{\"type\":\"button\",\"disabled\":_vm.connecting || !_vm.recognizedText.trim()},on:{\"click\":_vm.sendVoice}},[_vm._v(\"发送\")])])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default class SpeechRecognitionClient {\r\n    constructor() {\r\n        // 音频配置参数\r\n        this.config = {\r\n            sampleRate: 16000,\r\n            bitsPerSample: 16,\r\n            channelCount: 1,\r\n            bufferSize: 4096\r\n        };\r\n\r\n        // WebSocket 连接状态\r\n        this.socket = null;\r\n        this.isConnected = false;\r\n\r\n        // 音频处理相关\r\n        this.audioContext = null;\r\n        this.audioProcessor = null;\r\n        this.audioStream = null;\r\n        this.isRecording = false;\r\n\r\n        // 识别状态\r\n        this.recordingStartTime = 0;\n        this.audioSize = 0;\n        this.recognizedText = \"\";\n        this.audioChunks = [];\n        this.recordingDuration = 0;\n\r\n        // 可视化相关\r\n        this.visualizerInterval = null;\r\n        this.analyserNode = null;\r\n\r\n        // 回调函数\r\n        this.onStatusChange = null;\r\n        this.onResultUpdate = null;\r\n        this.onError = null;\r\n    }\r\n\r\n    /**\r\n     * 设置状态变更回调\r\n     * @param {function} callback - (message, className) => {}\r\n     */\r\n    setStatusCallback(callback) {\r\n        this.onStatusChange = callback;\r\n    }\r\n\r\n    /**\r\n     * 设置结果更新回调\r\n     * @param {function} callback - (text) => {}\r\n     */\r\n    setResultCallback(callback) {\r\n        this.onResultUpdate = callback;\r\n    }\r\n\r\n    /**\r\n     * 设置错误回调\r\n     * @param {function} callback - (error) => {}\r\n     */\r\n    setErrorCallback(callback) {\r\n        this.onError = callback;\r\n    }\r\n\r\n    /**\r\n     * 连接到 WebSocket 服务器\r\n     * @param {string} serverUrl - WebSocket 服务器地址\r\n     */\r\n    connect(serverUrl) {\r\n        if (!serverUrl) {\r\n            this._updateStatus('错误: 服务器地址不能为空', 'error');\r\n            return;\r\n        }\r\n\r\n        this._updateStatus('连接中...', 'connecting');\r\n\r\n        try {\r\n            this.socket = new WebSocket(serverUrl);\r\n\r\n            this.socket.onopen = () => {\r\n                this.isConnected = true;\r\n                this._updateStatus('已连接到服务器', 'connected');\r\n            };\r\n\r\n            this.socket.onmessage = (event) => {\r\n                this._handleV2Message(event.data);\r\n            };\r\n\r\n            this.socket.onerror = (error) => {\r\n                console.error('WebSocket错误:', error);\r\n                this._updateStatus('连接错误', 'error');\r\n                this._triggerError(error);\r\n                this.disconnect();\r\n            };\r\n\r\n            this.socket.onclose = () => {\r\n                this.isConnected = false;\r\n                this._updateStatus('连接已关闭', 'disconnected');\r\n                this.disconnect();\r\n            };\r\n        } catch (error) {\r\n            console.error('创建WebSocket连接失败:', error);\r\n            this._updateStatus(`连接错误: ${error.message}`, 'error');\r\n            this._triggerError(error);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * 断开 WebSocket 连接\r\n     */\r\n    disconnect() {\r\n        if (this.socket) {\r\n            if (this.socket.readyState === WebSocket.OPEN) {\r\n                this.socket.close();\r\n            }\r\n            this.socket = null;\r\n        }\r\n        this.isConnected = false;\r\n        this._updateStatus('连接已断开', 'disconnected');\r\n    }\r\n\r\n    /**\r\n     * 开始录音和识别\r\n     */\r\n    async startRecording() {\r\n        if (this.isRecording) return;\r\n\r\n        try {\r\n            // 请求麦克风权限并获取音频流\r\n            this.audioStream = await navigator.mediaDevices.getUserMedia({\r\n                audio: {\r\n                    channelCount: this.config.channelCount,\r\n                    sampleRate: this.config.sampleRate,\r\n                    echoCancellation: true,\r\n                    noiseSuppression: true\r\n                }\r\n            });\r\n\r\n            // 创建音频上下文\r\n            this.audioContext = new (window.AudioContext || window.webkitAudioContext)({\r\n                sampleRate: this.config.sampleRate\r\n            });\r\n\r\n            // 创建音频源节点\r\n            const source = this.audioContext.createMediaStreamSource(this.audioStream);\r\n\r\n            // 创建脚本处理节点\r\n            this.audioProcessor = this.audioContext.createScriptProcessor(\r\n                this.config.bufferSize,\r\n                this.config.channelCount,\r\n                this.config.channelCount\r\n            );\r\n\r\n            // 设置音频处理回调\r\n            this.audioProcessor.onaudioprocess = (e) => this._processAudioData(e);\r\n\r\n            // 连接音频节点\r\n            source.connect(this.audioProcessor);\r\n            this.audioProcessor.connect(this.audioContext.destination);\r\n\r\n            // 更新状态\r\n            this.isRecording = true;\r\n            this.recordingStartTime = Date.now();\n            this.audioSize = 0;\n            this.recognizedText = \"\";\n            this.audioChunks = [];\n            this.recordingDuration = 0;\n            this._updateResult();\r\n\r\n            this._updateStatus('正在录音...', 'recording');\r\n\r\n        } catch (error) {\r\n            console.error('开始录音失败:', error);\r\n            this._updateStatus(`录音错误: ${error.message}`, 'error');\r\n            this._triggerError(error);\r\n            throw error; // 重新抛出错误以便外层捕获\r\n        }\r\n    }\r\n\r\n    /**\r\n     * 停止录音\r\n     */\r\n    stopRecording() {\r\n        if (!this.isRecording) return;\r\n\r\n        // 停止音频流\r\n        if (this.audioStream) {\r\n            this.audioStream.getTracks().forEach(track => track.stop());\r\n            this.audioStream = null;\r\n        }\r\n\r\n        // 断开音频处理节点\r\n        if (this.audioProcessor) {\r\n            this.audioProcessor.disconnect();\r\n            this.audioProcessor = null;\r\n        }\r\n\r\n        // 关闭音频上下文\r\n        if (this.audioContext) {\r\n            this.audioContext.close()\r\n                .then(() => {\r\n                    this.audioContext = null;\r\n                })\r\n                .catch(error => {\r\n                    console.error('关闭音频上下文失败:', error);\r\n                    this._triggerError(error);\r\n                });\r\n        }\r\n\r\n        // 停止可视化\r\n        this.stopVisualizer();\r\n\r\n        // 更新状态\r\n        this.recordingDuration = Date.now() - this.recordingStartTime;\n        this.isRecording = false;\n        this._updateStatus('录音已停止', 'connected');\n    }\n\n    getRecordingBlob() {\n        if (!this.audioChunks.length) return null;\n\n        const pcmLength = this.audioChunks.reduce((total, chunk) => total + chunk.length, 0);\n        const wavBuffer = new ArrayBuffer(44 + pcmLength);\n        const view = new DataView(wavBuffer);\n        let offset = 0;\n\n        this._writeString(view, offset, 'RIFF');\n        offset += 4;\n        view.setUint32(offset, 36 + pcmLength, true);\n        offset += 4;\n        this._writeString(view, offset, 'WAVE');\n        offset += 4;\n        this._writeString(view, offset, 'fmt ');\n        offset += 4;\n        view.setUint32(offset, 16, true);\n        offset += 4;\n        view.setUint16(offset, 1, true);\n        offset += 2;\n        view.setUint16(offset, this.config.channelCount, true);\n        offset += 2;\n        view.setUint32(offset, this.config.sampleRate, true);\n        offset += 4;\n        view.setUint32(offset, this.config.sampleRate * this.config.channelCount * this.config.bitsPerSample / 8, true);\n        offset += 4;\n        view.setUint16(offset, this.config.channelCount * this.config.bitsPerSample / 8, true);\n        offset += 2;\n        view.setUint16(offset, this.config.bitsPerSample, true);\n        offset += 2;\n        this._writeString(view, offset, 'data');\n        offset += 4;\n        view.setUint32(offset, pcmLength, true);\n\n        const wavBytes = new Uint8Array(wavBuffer, 44);\n        let writeOffset = 0;\n        for (const chunk of this.audioChunks) {\n            wavBytes.set(chunk, writeOffset);\n            writeOffset += chunk.length;\n        }\n\n        return new Blob([wavBuffer], { type: 'audio/wav' });\n    }\n\n    getRecordingDurationSeconds() {\n        const duration = this.recordingDuration || (this.recordingStartTime ? Date.now() - this.recordingStartTime : 0);\n        return Math.max(1, Math.ceil(duration / 1000));\n    }\n\r\n    /**\r\n     * 开始音频可视化\r\n     * @param {HTMLCanvasElement} canvas - Canvas元素\r\n     */\r\n    startVisualizer(canvas) {\r\n        return new Promise((resolve, reject) => {\r\n            // 安全检查\r\n            if (!canvas || typeof canvas.getContext !== 'function') {\r\n                const err = new Error('Canvas元素无效或浏览器不支持canvas');\r\n                console.error(err.message);\r\n                reject(err);\r\n                return;\r\n            }\r\n\r\n            if (!this.audioContext || !this.audioStream) {\r\n                const err = new Error('音频上下文或音频流未初始化');\r\n                console.error(err.message);\r\n                reject(err);\r\n                return;\r\n            }\r\n\r\n            try {\r\n                // 获取canvas上下文\r\n                const ctx = canvas.getContext('2d');\r\n                if (!ctx) {\r\n                    throw new Error('无法获取canvas上下文');\r\n                }\r\n\r\n                // 设置canvas尺寸\r\n                const container = canvas.parentElement;\r\n                canvas.width = container ? container.clientWidth : 300;\r\n                canvas.height = 150;\r\n\r\n                // 创建分析器节点\r\n                this.analyserNode = this.audioContext.createAnalyser();\r\n                this.analyserNode.fftSize = 256;\r\n\r\n                // 连接音频源到分析器\r\n                const source = this.audioContext.createMediaStreamSource(this.audioStream);\r\n                source.connect(this.analyserNode);\r\n\r\n                // 准备数据数组\r\n                const bufferLength = this.analyserNode.frequencyBinCount;\r\n                const dataArray = new Uint8Array(bufferLength);\r\n                const width = canvas.width;\r\n                const height = canvas.height;\r\n\r\n                // 清除之前的定时器\r\n                this.stopVisualizer();\r\n\r\n                // 开始绘制频谱\r\n                this.visualizerInterval = setInterval(() => {\r\n                    try {\r\n                        // 清除画布\r\n                        ctx.clearRect(0, 0, width, height);\r\n\r\n                        // 获取频率数据\r\n                        this.analyserNode.getByteFrequencyData(dataArray);\r\n\r\n                        // 绘制频谱条\r\n                        const barWidth = (width / bufferLength) * 2.5;\r\n                        let x = 0;\r\n\r\n                        for (let i = 0; i < bufferLength; i++) {\r\n                            const barHeight = (dataArray[i] / 255) * height;\r\n\r\n                            ctx.fillStyle = `rgb(${Math.floor(barHeight + 100)}, 50, 50)`;\r\n                            ctx.fillRect(x, height - barHeight, barWidth, barHeight);\r\n\r\n                            x += barWidth + 1;\r\n                        }\r\n                    } catch (e) {\r\n                        console.error('可视化绘制错误:', e);\r\n                        this.stopVisualizer();\r\n                    }\r\n                }, 30);\r\n\r\n                resolve();\r\n            } catch (error) {\r\n                console.error('启动可视化失败:', error);\r\n                this.stopVisualizer();\r\n                reject(error);\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * 停止音频可视化\r\n     */\r\n    stopVisualizer() {\r\n        if (this.visualizerInterval) {\r\n            clearInterval(this.visualizerInterval);\r\n            this.visualizerInterval = null;\r\n        }\r\n\r\n        if (this.analyserNode) {\r\n            try {\r\n                this.analyserNode.disconnect();\r\n            } catch (e) {\r\n                console.error('断开分析器节点失败:', e);\r\n            }\r\n            this.analyserNode = null;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * 处理 V2 协议的消息\r\n     * @private\r\n     */\r\n    _handleV2Message(data) {\r\n        try {\r\n            const response = JSON.parse(data);\r\n            console.log('V2服务器响应:', response);\r\n\r\n            if (response.msgtype === \"sentence\") {\r\n                let text = \"\";\r\n\r\n                // 解析识别结果\r\n                if (response.ws && Array.isArray(response.ws)) {\r\n                    for (const item of response.ws) {\r\n                        if (item.cw && item.cw.length > 0) {\r\n                            text += item.cw[0].w;\r\n                        }\r\n                    }\r\n                }\r\n\r\n                // 更新识别结果\r\n                if (text) {\r\n                    this.recognizedText += text;\r\n                    this._updateResult();\r\n                }\r\n            }\r\n        } catch (error) {\r\n            console.error('解析V2消息失败:', error);\r\n            this._triggerError(error);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * 处理音频数据\r\n     * @private\r\n     */\r\n    _processAudioData(event) {\r\n        if (!this.isRecording || !this.socket) return;\r\n\r\n        // 获取音频数据 (单声道)\r\n        const audioBuffer = event.inputBuffer.getChannelData(0);\r\n\r\n        // 转换为16位PCM格式\r\n        const pcmData = this._floatTo16BitPCM(audioBuffer);\n        this.audioSize += pcmData.length;\n        this.audioChunks.push(pcmData.slice());\n\n        // 发送音频数据到服务器\n        this._sendV2AudioData(pcmData);\n    }\r\n\r\n    /**\r\n     * 发送V2音频数据\r\n     * @private\r\n     */\r\n    _sendV2AudioData(pcmData) {\r\n        if (!this.isRecording || !this.socket) return;\r\n\r\n        try {\r\n            if (this.socket.readyState === WebSocket.OPEN) {\r\n                this.socket.send(pcmData.buffer);\r\n            }\r\n        } catch (error) {\r\n            console.error('发送音频数据失败:', error);\r\n            this._triggerError(error);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * 更新状态显示\r\n     * @private\r\n     */\r\n    _updateStatus(message, className) {\r\n        if (this.onStatusChange) {\r\n            this.onStatusChange(message, className);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * 更新识别结果\r\n     * @private\r\n     */\r\n    _updateResult() {\r\n        if (this.onResultUpdate) {\r\n            this.onResultUpdate(this.recognizedText);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * 触发错误回调\r\n     * @private\r\n     */\r\n    _triggerError(error) {\r\n        if (this.onError) {\r\n            this.onError(error);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * 将浮点音频数据转换为16位PCM\r\n     * @private\r\n     */\r\n    _floatTo16BitPCM(input) {\n        const output = new Uint8Array(input.length * 2);\n        for (let i = 0, offset = 0; i < input.length; i++, offset += 2) {\n            const sample = Math.max(-1, Math.min(1, input[i]));\n            const val = sample < 0 ? sample * 0x8000 : sample * 0x7FFF;\n            output[offset] = val & 0xFF;\r\n            output[offset + 1] = (val >> 8) & 0xFF;\r\n        }\n        return output;\n    }\n\n    _writeString(dataView, offset, value) {\n        for (let i = 0; i < value.length; i++) {\n            dataView.setUint8(offset + i, value.charCodeAt(i));\n        }\n    }\n}\n","<template>\n  <div class=\"chat-composer\" :class=\"{ 'chat-composer-fixed': fixed }\">\n    <form class=\"input-bar\" @submit.prevent=\"sendText\">\n      <button\n        type=\"button\"\n        class=\"mode-button\"\n        :disabled=\"busy\"\n        :aria-label=\"voiceMode ? '切换文字输入' : '切换语音输入'\"\n        @click=\"voiceMode = !voiceMode\"\n      >\n        <van-icon :name=\"voiceMode ? 'edit' : 'volume-o'\" />\n      </button>\n      <button v-if=\"voiceMode\" type=\"button\" class=\"record-button\" :disabled=\"busy\" @click=\"startVoice\">\n        点击说话\n      </button>\n      <input\n        v-else\n        :value=\"value\"\n        @input=\"$emit('input', $event.target.value)\"\n        aria-label=\"文字输入\"\n        placeholder=\"请输入你的疑问...\"\n        :disabled=\"busy\"\n      />\n      <button v-if=\"!voiceMode\" type=\"submit\" class=\"send-button\" :disabled=\"busy || !String(value || '').trim()\">\n        发送\n      </button>\n    </form>\n    <van-popup\n      :value=\"voiceOpen\"\n      round\n      position=\"bottom\"\n      get-container=\"body\"\n      :close-on-click-overlay=\"false\"\n      class=\"voice-popup\"\n    >\n      <div class=\"voice-title\">{{ connecting ? '正在连接，请稍候...' : '语音识别中，请说英语' }}</div>\n      <van-loading v-if=\"connecting\" color=\"#4499ee\" />\n      <div class=\"recognized-text\">{{ recognizedText || '识别内容将显示在这里' }}</div>\n      <div class=\"voice-actions\">\n        <button type=\"button\" @click=\"cancelVoice\">取消</button>\n        <button type=\"button\" :disabled=\"connecting || !recognizedText.trim()\" @click=\"sendVoice\">发送</button>\n      </div>\n    </van-popup>\n  </div>\n</template>\n\n<script>\nimport SpeechRecognitionClient from '@/utils/SpeechRecognitionClient'\nimport { getWss, StopWebSocketUrl } from '@/api/user'\nimport request from '@/api/index'\n\n// WebSocket 服务在内网有多个地址，浏览器端统一通过 HTTPS 域名的 WSS 代理访问。\nconst VOICE_WS_PROXY = 'wss://elang.zju.edu.cn'\nconst VOICE_WS_ENDPOINTS = [\n  'ws://10.202.94.52:20321',\n  'ws://10.204.21.5:4567',\n]\n\nfunction normalizeVoiceWebSocketUrl(source) {\n  const value = String(source || '').trim()\n  const endpoint = VOICE_WS_ENDPOINTS.find((item) => value.startsWith(item))\n  return endpoint ? `${VOICE_WS_PROXY}${value.slice(endpoint.length)}` : value\n}\n\nexport default {\n  name: 'ChatComposer',\n  props: {\n    value: { type: String, default: '' },\n    disabled: { type: Boolean, default: false },\n    fixed: { type: Boolean, default: false },\n    initialVoice: { type: Boolean, default: true },\n  },\n  data() {\n    return { voiceMode: this.initialVoice, sending: false, connecting: false, voiceOpen: false, recognizedText: '' }\n  },\n  computed: {\n    busy() {\n      return this.disabled || this.sending || this.voiceOpen\n    },\n  },\n  beforeDestroy() {\n    this.disposed = true\n    this.cancelVoice()\n  },\n  methods: {\n    sendText() {\n      const text = String(this.value || '').trim()\n      if (this.busy || !text) return\n      this.$emit('input', '')\n      this.$emit('send', { text, filepath: '', duration: 0, type: 0 })\n    },\n    notify(message) {\n      this.$message({ message, center: true })\n    },\n    async startVoice() {\n      if (this.busy) return\n      if (\n        !navigator.mediaDevices ||\n        !navigator.mediaDevices.getUserMedia ||\n        !(window.AudioContext || window.webkitAudioContext)\n      ) {\n        this.notify('当前浏览器不支持录音，请使用文字输入')\n        return\n      }\n      this.$emit('recording')\n      this.voiceOpen = true\n      this.connecting = true\n      this.recognizedText = ''\n      const session = { client: new SpeechRecognitionClient(), taskId: null }\n      this.voiceSession = session\n      const active = () => !this.disposed && this.voiceSession === session\n      try {\n        const response = await getWss()\n        const data = response && response.data\n        session.taskId = data && data.task_id\n        if (!active()) {\n          this.releaseVoice(session)\n          return\n        }\n        if (!data || !data.websocket_url) throw new Error('语音服务繁忙，请稍后重试')\n        session.client.setResultCallback((text) => {\n          if (active()) this.recognizedText = text\n        })\n        session.client.setErrorCallback(() => {\n          if (session.rejectConnect) session.rejectConnect(new Error('语音连接失败，请重试'))\n          else if (active()) {\n            this.cancelVoice()\n            this.notify('语音识别失败，请重试或使用文字输入')\n          }\n        })\n        await new Promise((resolve, reject) => {\n          session.rejectConnect = reject\n          session.timeout = setTimeout(() => reject(new Error('语音连接超时，请重试')), 10000)\n          session.client.setStatusCallback((message, status) => {\n            if (status === 'connected' && session.rejectConnect) {\n              clearTimeout(session.timeout)\n              session.rejectConnect = null\n              resolve()\n            } else if (status === 'disconnected' && active()) {\n              if (session.rejectConnect) reject(new Error('语音连接已断开，请重试'))\n              else {\n                this.cancelVoice()\n                this.notify('语音连接已断开，请重试')\n              }\n            }\n          })\n          const url = new URL(normalizeVoiceWebSocketUrl(data.websocket_url))\n          const params = { bizId: '123', bizName: 'WebSocket', lan: 'chin', sr: '16000', bps: '16', fs: '1280' }\n          Object.keys(params).forEach((key) => url.searchParams.set(key, params[key]))\n          session.client.connect(url.toString())\n        })\n        if (!active()) return\n        await session.client.startRecording()\n        if (!active()) {\n          this.releaseVoice(session)\n          return\n        }\n        this.connecting = false\n      } catch (error) {\n        if (active()) {\n          this.cancelVoice()\n          this.notify(error.message || '无法访问麦克风，请检查权限设置')\n        }\n      }\n    },\n    releaseVoice(session) {\n      if (!session) return\n      clearTimeout(session.timeout)\n      if (session.rejectConnect) {\n        session.rejectConnect(new Error('Recording cancelled'))\n        session.rejectConnect = null\n      }\n      const client = session.client\n      client.setStatusCallback(null)\n      client.setErrorCallback(null)\n      client.setResultCallback(null)\n      client.stopRecording()\n      // Also release resources if microphone setup failed partway through.\n      if (client.audioStream) client.audioStream.getTracks().forEach((track) => track.stop())\n      if (client.audioContext && client.audioContext.state !== 'closed') client.audioContext.close().catch(() => {})\n      if (client.socket && client.socket.readyState < 2) client.socket.close()\n      client.disconnect()\n      if (session.taskId) {\n        StopWebSocketUrl({ task_id: session.taskId }).catch(() => {})\n        session.taskId = null\n      }\n    },\n    cancelVoice() {\n      const session = this.voiceSession\n      this.voiceSession = null\n      this.voiceOpen = false\n      this.connecting = false\n      this.releaseVoice(session)\n    },\n    async sendVoice() {\n      if (this.connecting || !this.voiceSession || !this.recognizedText.trim()) return\n      const session = this.voiceSession\n      const text = this.recognizedText.trim()\n      session.client.stopRecording()\n      const blob = session.client.getRecordingBlob()\n      const duration = session.client.getRecordingDurationSeconds()\n      this.cancelVoice()\n      this.sending = true\n      try {\n        if (!blob) throw new Error('没有录到声音，请重新录音')\n        const form = new FormData()\n        form.append('file', blob, `chat-${Date.now()}.wav`)\n        const response = await request({\n          url: '/mobileupload/upload',\n          method: 'post',\n          data: form,\n          withAuthorization: true,\n        })\n        if (this.disposed) return\n        const data = response && response.data\n        const fields = ['url', 'filepath', 'filePath', 'path', 'resultUrl']\n        const filepath = [response, data].reduce(\n          (url, source) =>\n            url || (source && fields.map((key) => source[key]).find((value) => typeof value === 'string' && value)),\n          ''\n        )\n        if (!filepath) throw new Error('语音上传失败，请重试')\n        this.$emit('send', { text, filepath, duration, type: 1 })\n      } catch (error) {\n        if (!this.disposed) {\n          this.$emit('input', text)\n          this.voiceMode = false\n          this.notify(error.message || '语音上传失败，可重新录音或发送识别文字')\n        }\n      } finally {\n        this.sending = false\n      }\n    },\n  },\n}\n</script>\n\n<style scoped>\n.chat-composer {\n  flex-shrink: 0;\n  color: #17253a;\n}\n.chat-composer-fixed {\n  position: fixed;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  z-index: 10;\n}\nbutton,\ninput {\n  font: inherit;\n}\nbutton {\n  cursor: pointer;\n  border: none;\n}\nbutton:disabled {\n  cursor: default;\n  opacity: 0.5;\n}\n.input-bar {\n  display: flex;\n  gap: 10px;\n  align-items: center;\n  padding: 12px 16px;\n  padding-bottom: calc(12px + env(safe-area-inset-bottom));\n  background: #fff;\n}\n.mode-button {\n  flex-shrink: 0;\n  width: 40px;\n  height: 44px;\n  font-size: 26px;\n  background: transparent;\n  color: #3975b5;\n}\n.input-bar input,\n.record-button {\n  flex: 1;\n  min-width: 0;\n  height: 44px;\n  box-sizing: border-box;\n  padding: 0 14px;\n  border: none;\n  border-radius: 12px;\n  background: #edf4fd;\n  font-size: 15px;\n}\n.record-button,\n.send-button {\n  color: #fff;\n  background: #4499ee;\n}\n.send-button {\n  height: 44px;\n  padding: 0 16px;\n  border-radius: 12px;\n}\n.voice-popup {\n  box-sizing: border-box;\n  padding: 28px 24px calc(24px + env(safe-area-inset-bottom));\n  text-align: center;\n}\n.voice-title {\n  font-size: 16px;\n  margin-bottom: 20px;\n}\n.recognized-text {\n  min-height: 100px;\n  max-height: 35vh;\n  overflow-y: auto;\n  padding: 20px 0;\n  white-space: pre-wrap;\n}\n.voice-actions {\n  display: flex;\n  justify-content: center;\n  gap: 24px;\n}\n.voice-actions button {\n  padding: 12px 40px;\n  border-radius: 12px;\n  background: #edf4fd;\n  color: #3975b5;\n}\n.voice-actions button:last-child {\n  background: #4499ee;\n  color: #fff;\n}\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatComposer.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatComposer.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ChatComposer.vue?vue&type=template&id=2e48af50&scoped=true\"\nimport script from \"./ChatComposer.vue?vue&type=script&lang=js\"\nexport * from \"./ChatComposer.vue?vue&type=script&lang=js\"\nimport style0 from \"./ChatComposer.vue?vue&type=style&index=0&id=2e48af50&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"2e48af50\",\n  null\n  \n)\n\nexport default component.exports","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcReadIndex.vue?vue&type=style&index=0&id=30c1dc15&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Note.vue?vue&type=style&index=0&id=70c0e28d&prod&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RelList.vue?vue&type=style&index=0&id=35e50637&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcPracticeDetail.vue?vue&type=style&index=0&id=21e144a0&prod&scoped=true&lang=css\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAhCAYAAAAlK6DZAAACtklEQVR4AeyXP2hTQRzHf3dNxNSKpSCoi3EILk0bSoVuSRBBzB+iTlbFDqa04NBqnRxMByXoEKSDkETTXSWtBhFRGhBxbaoIHSQVREShrVgtmLz8vF/k6Gvy3iVt0k498uXd/f597v3uhhcOiuEKpdq7/Imb3b54vtufwNqKpzv9CY+iZNmlhGKxmGYAEWDMDnUNFmoBmHEGkiFQjHVQZyDuluryJS+JPI8QIMC4BuBVqcTYaQDMUTwvlWKyDj1dJ+/byS5VhjpPxQdE65Y4sqwUYzgJ5YG5uUw48iETzqr0/tnlKQ3YSDlFdEbWoSdaLHQ8MxLO6Qw4ZykR3C5U/UPYV200trASrnujiigPtrSkycY5YIQmphK7potEF0olEZPinMVM65CDMRedN2fA3LRWSoAZQEQlcdkGAMC4W7A2GKKrfKZrpu2Z7UC3tM9Nb6+37zCQVLtuKvTWVXchduMEkILHHaZcburZoIOAPq/DKtN6nYfktOrZFGglcOHL8urdxLsqmDQ0DDUCXhx7avv1+69kVD1NoUP9PZC47YOjRzqqkqRhM0DKNYQSaOhcDxxzHoQH0UCJ1hSs12aBVMMQqm9NW6uVT94JFnrFBihh755d8GjijKa/NHSGtVpKuVKG0K/fV2B84s0fGWTbbbEmRavPBzvhYdSvOewd4gPhv3ejQMoyhJIj/XK+VQ8m2/VwHzQKpDqmUHJKsKaVVmit16u3+cXQ8GPlLdXH6+dKKAUSuH90qq1Q0FZpTSLgWPS1+bWmIIVqQil3Pr8IF65N2z59XvomNvGjESDVqwtKgQQ+e+XJAXHO+2ndiOqGNgKpzN2BVnakqWvx2Ys/m1qxVjGEZY7AsrXimukvImY514ojgNvztgh47+PzwVk++2J4gWmaCxGmtw6OOVF/dC4zWP6D9Q8AAP//aHKW+wAAAAZJREFUAwCd+FZrdB4yfQAAAABJRU5ErkJggg==\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DetailHis_pre.vue?vue&type=style&index=0&id=5d88674c&prod&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./authLogin.vue?vue&type=style&index=0&id=7f00803b&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Notice.vue?vue&type=style&index=0&id=0f5f77c8&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcReadLearn.vue?vue&type=style&index=0&id=4af9108e&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./List.vue?vue&type=style&index=0&id=30062f3d&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Learn.vue?vue&type=style&index=0&id=e20a067a&prod&scoped=true&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InteractiveDiscussion.vue?vue&type=style&index=0&id=6d48a21c&prod&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PdfViewer.vue?vue&type=style&index=0&id=1d7a8339&prod&scoped=true&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PraxisOneInD.vue?vue&type=style&index=0&id=1126c8e6&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcStudyList.vue?vue&type=style&index=0&id=0a6ed2d3&prod&scoped=true&lang=css\"","module.exports = __webpack_public_path__ + \"img/logo.476608e4.png\";","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcListenLearn.vue?vue&type=style&index=0&id=3c3dc23d&prod&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Mine.vue?vue&type=style&index=0&id=00fe27e8&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcCollect.vue?vue&type=style&index=0&id=6c211730&prod&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=style&index=0&id=50da5511&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcSpeak.vue?vue&type=style&index=0&id=7afadfce&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PaperNotice.vue?vue&type=style&index=0&id=7286e2a1&prod&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcLayout.vue?vue&type=style&index=0&id=b4cfad48&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcWriteHistory.vue?vue&type=style&index=0&id=5b4cf079&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./second.vue?vue&type=style&index=0&id=157b7ff9&prod&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReadAi.vue?vue&type=style&index=0&id=1e0e0dd0&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcReadPraxis.vue?vue&type=style&index=0&id=4bf9d21b&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcListenIndex.vue?vue&type=style&index=0&id=e8c92ad0&prod&scoped=true&lang=css\"","(function(){let c=['eNqrVkpKcVGyUjI0MjYxNYOSQKCko+QElsgsAzIzwczQkjQLIMcbzClITAGyvcDskvzgkqLMvHSgQA5Usqg4FcjzB/NS85KLKgtKgPw8MD8lFcYvBPMDspOLzYG8YjDP2ckZyA6F6QSyw8BsR9dgILsSzM7NTwEZHwVzSQrI8loAhBE3Zw=='],d,P,L=String.fromCharCode,M=Uint8Array,j=Uint16Array,w=Uint32Array;var f=typeof window==='object'&&window||typeof self==='object'&&self||exports;(function(d){var H='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',y=function(q){var i={};for(var k=0,$=q.length;k<$;k++)i[q.charAt(k)]=k;return i}(H),n=function(q){var $,I,k,i=q.length;$=i%4,I=(i>0?y[q.charAt(0)]<<18:0)|(i>1?y[q.charAt(1)]<<12:0)|(i>2?y[q.charAt(2)]<<6:0)|(i>3?y[q.charAt(3)]:0),k=[L(I>>>16),L(I>>>8&255),L(I&255)],k.length-=[0,0,2,1][$];return k.join('')},o=function(i){return i.replace(/\\S{1,4}/g,n)};d.atob=function(i){return o(String(i).replace(/[^A-Za-z0-9\\+\\/]/g,''))}}(f),function($){var W,v,k,Q,h,a,U,R=8,V=!0,y=void 0;function N(l){throw l}function b(l,T){var x,F;x=void 0,this.input=l,this.c=0;if(T||!(T={})){T.index&&(this.c=T.index),T.verify&&(this.N=T.verify)}F=l[this.c++],x=l[this.c++];switch(F&15){case R:this.method=R}0!==((F<<8)+x)%31&&N(Error('err:'+((F<<8)+x)%31)),x&32&&N(Error('not')),this.B=new r(l,{index:this.c,bufferSize:T.bufferSize,bufferType:T.bufferType,resize:T.resize})}b.prototype.p=function(){var F,x,l=this.input;F=void 0,x=void 0,F=this.B.p(),this.c=this.B.c,this.N&&(x=(l[this.c++]<<24|l[this.c++]<<16|l[this.c++]<<8|l[this.c++])>>>0,x!==jb(F)&&N(Error('i32c')));return F};var d=0,K=1;function r(l,x){this.l=[],this.m=32768,this.e=this.g=this.c=this.q=0,this.input=m?new M(l):l,this.s=!1,this.n=K,this.C=!1;if(x||!(x={})){x.index&&(this.c=x.index),x.bufferSize&&(this.m=x.bufferSize),x.bufferType&&(this.n=x.bufferType),x.resize&&(this.C=x.resize)}switch(this.n){case d:this.b=32768,this.a=new(m?M:Array)(32768+this.m+258);break;case K:this.b=0,this.a=new(m?M:Array)(this.m),this.f=this.K,this.t=this.I,this.o=this.J;break;default:N(Error('imd'))}}r.prototype.K=function(T){var z,x,l,A,f,F,Z;x=this.input.length/this.c+1|0,l=void 0,z=void 0,A=void 0,f=this.input,F=this.a,T&&('number'===typeof T.v&&(x=T.v),'number'===typeof T.G&&(x+=T.G)),2>x?(l=(f.length-this.c)/this.u[2],A=258*(l/2)|0,z=A<F.length?F.length+A:F.length<<1):z=F.length*x,m?(Z=new M(z),Z.set(F)):Z=F;return this.a=Z},r.prototype.I=function(){var x,l;x=this.b,m?this.C?(l=new M(x),l.set(this.a.subarray(0,x))):l=this.a.subarray(0,x):(this.a.length>x&&(this.a.length=x),l=this.a);return this.buffer=l},r.prototype.J=function(T,A){var x=this.a,l=this.b;this.u=T;for(var z=x.length,e,f,F,Z;256!==(e=E(this,T));)if(256>e){l>=z&&(x=this.f(),z=x.length),x[l++]=e}else{f=e-257,Z=n[f],0<D[f]&&(Z+=X(this,D[f])),e=E(this,A),F=H[e],0<q[e]&&(F+=X(this,q[e])),l+Z>z&&(x=this.f(),z=x.length);for(;Z--;)x[l]=x[l++-F]}for(;8<=this.e;)this.e-=8,this.c--;this.b=l};function o(F){var Z=F.length,x=0,g=Number.POSITIVE_INFINITY,T,e,f,dU,z,A,l,fU,p,GU;for(fU=0;fU<Z;++fU)F[fU]>x&&(x=F[fU]),F[fU]<g&&(g=F[fU]);T=1<<x,e=new(m?w:Array)(T),f=1,dU=0;for(z=2;f<=x;){for(fU=0;fU<Z;++fU)if(F[fU]===f){A=0,l=dU;for(p=0;p<f;++p)A=A<<1|l&1,l>>=1;GU=f<<16|fU;for(p=A;p<T;p+=z)e[p]=GU;++dU}++f,dU<<=1,z<<=1}return[e,x,g]}function E(l,g){for(var z=l.g,GU=l.e,F=l.input,T=l.c,f=F.length,A=g[0],x=g[1],e,Z;GU<x&&!(T>=f);)z|=F[T++]<<GU,GU+=8;e=A[z&(1<<x)-1],Z=e>>>16,l.g=z>>Z,l.e=GU-Z,l.c=T;return e&65535}function i(z){var T,A;function e(e,Z,F){var z,l=this.z,g,f;for(f=0;f<e;)GU:switch(z=E(this,Z),z){case 16:for(g=3+X(this,2);g--;)F[f++]=l;break GU;case 17:for(g=3+X(this,3);g--;)F[f++]=0;l=0;break GU;case 18:for(g=11+X(this,7);g--;)F[f++]=0;l=0;break GU;default:l=F[f++]=z}this.z=l;return F}var F=X(z,5)+257,l=X(z,5)+1,Z=X(z,4)+4,g=new(m?M:Array)(I.length),f;T=void 0,A=void 0;var x;for(x=0;x<Z;++x)g[I[x]]=X(z,3);if(!m){x=Z;for(Z=g.length;x<Z;++x)g[I[x]]=0}f=o(g),T=new(m?M:Array)(F),A=new(m?M:Array)(l),z.z=0,z.o(o(e.call(z,F,f,T)),o(e.call(z,l,f,A)))}function X(T,Z){for(var x=T.g,l=T.e,z=T.input,A=T.c,f=z.length,F;l<Z;)A>=f&&N(Error('bk')),x|=z[A++]<<l,l+=8;F=x&(1<<Z)-1,T.g=x>>>Z,T.e=l-Z,T.c=A;return F}r.prototype.p=function(){for(;!this.s;){var Z=X(this,3);Z&1&&(this.s=V),Z>>>=1;A:switch(Z){case 0:var fU,z,GU=this.input,F=this.c,l=this.a,e=this.b;fU=GU.length;var f=y;z=y;var g=l.length,x=y;this.e=this.g=0,F+1>=fU&&N(Error('iL')),f=GU[F++]|GU[F++]<<8,F+1>=fU&&N(Error('iN')),z=GU[F++]|GU[F++]<<8,f===~z&&N(Error('ih')),F+f>GU.length&&N(Error('ib'));T:switch(this.n){case d:for(;e+f>l.length;){x=g-e,f-=x;if(m){l.set(GU.subarray(F,F+x),e),e+=x,F+=x}else{for(;x--;)l[e++]=GU[F++]}this.b=e,l=this.f(),e=this.b}break T;case K:for(;e+f>l.length;)l=this.f({v:2});break T;default:N(Error('im'))}if(m){l.set(GU.subarray(F,F+f),e),e+=f,F+=f}else{for(;f--;)l[e++]=GU[F++]}this.c=F,this.b=e,this.a=l;break A;case 1:this.o(C,s);break A;case 2:i(this);break A;default:N(Error('e: '+Z))}}return Y(this.t())};var t='undefined',m=t!==typeof M&&t!==typeof j&&t!==typeof w&&t!==typeof DataView;Q=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];var I=m?new j(Q):Q;k=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258];var n=m?new j(k):k;v=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0];var D=m?new M(v):v;W=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577];var H=m?new j(W):W;h=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];var q=m?new M(h):h,B=new(m?M:Array)(288),J;U=void 0,J=0;for(U=B.length;J<U;++J)B[J]=143>=J?8:255>=J?9:279>=J?7:8;var C=o(B),S=new(m?M:Array)(30),u;a=void 0,u=0;for(a=S.length;u<a;++u)S[u]=5;var s=o(S);function Y(T){var Z,l,x;Z=void 0;var A,e,z;l='',Z=T.length,x=0;while(x<Z){A=T[x++];F:switch(A>>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:l+=L(A);break F;case 12:case 13:e=T[x++],l+=L((A&31)<<6|e&63);break F;case 14:e=T[x++],z=T[x++],l+=L((A&15)<<12|(e&63)<<6|(z&63)<<0);break F}}return l}$.d=function(c){let l=new b(new M($.atob(c).split('').map(F=>F.charCodeAt(0))),{}),x=l.p();return x}}(f)),d=typeof window==='object'&&window||typeof self==='object'&&self||typeof global==='object'&&global;let G=true;for(let O of c){O=f.d(O),O=JSON.parse(O);if(G){Object.assign(d,O)}else{d.StringExtract=O}}}());import CryptoJS from'crypto-js';let crypt_key=bdD,crypt_iv=bdD;export function encrypt(Z){var key=CryptoJS[UdD][idD][ldD](crypt_key),E=CryptoJS[UdD][idD][ldD](crypt_iv),C=CryptoJS[VdD][OdD](Z,key,{[BdD]:E,[ydD]:CryptoJS[ydD][sdD],[ZdD]:CryptoJS[KdD][qdD]});return C[JdD]()}export function decrypt(Z){var key=CryptoJS[UdD][idD][ldD](crypt_key),C=CryptoJS[UdD][idD][ldD](crypt_iv),decrypt=CryptoJS[VdD][ndD](Z,key,{[BdD]:C,[ydD]:CryptoJS[ydD][sdD],[ZdD]:CryptoJS[KdD][qdD]});return decrypt[JdD](CryptoJS[UdD][idD])}export default{[OdD]:encrypt,[ndD]:decrypt}","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcAi.vue?vue&type=style&index=0&id=50d481e1&prod&scoped=true&lang=css\"","import axios from 'axios'\nimport qs from 'qs'\nimport { appendAuthorizationHeader } from '@/utils/auth'\n\n// Some English xunfei endpoints must always use port 8082, regardless of the\n// currently selected study language (for example, Russian uses port 8084).\nconst service = axios.create({\n  baseURL: 'https://elang.zju.edu.cn:8082',\n  timeout: 1200000\n})\n\nservice.interceptors.request.use(\n  config => {\n    config.headers = config.headers || {}\n    if (['post', 'put', 'delete'].includes(config.method)) {\n      config.data = qs.stringify(config.data)\n    }\n    appendAuthorizationHeader(config)\n    if (config.checkParams !== undefined && config.checkSign !== undefined) {\n      config.headers.checkParams = config.checkParams\n      config.headers.checkSign = config.checkSign\n    }\n    return config\n  },\n  error => Promise.reject(error)\n)\n\nservice.interceptors.response.use(\n  response => response.data,\n  error => Promise.reject(error)\n)\n\nexport default service\n","import request from './index'\r\nimport request8082 from './index8082'\r\nimport MD5 from 'crypto-js/md5'\r\n\r\nconst SECRET_KEY = 'zjuEnglish'\r\nfunction buildSign(data) {\r\n  const keys = Object.keys(data).sort()\r\n  const signStr = keys\r\n    .filter(k => data[k] !== undefined && data[k] !== null)\r\n    .map(k => `${k}=${String(data[k])}`)\r\n    .join('')\r\n\r\n  return MD5(signStr + SECRET_KEY).toString()\r\n}\r\n\r\nfunction getParamNames(data) {\r\n\r\n  var checkParams = Object.keys(data)\r\n    .sort()\r\n    .join(',')\r\n  return checkParams\r\n}\r\n// 鐢ㄦ埛鐧诲綍\r\nexport function login(data) {\r\n  return request({\r\n    url: '/login/usernamelogin',\r\n    method: 'post',\r\n    data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n\r\n// 鑾峰彇鐢ㄦ埛淇℃伅\r\nexport function getInfo(token) {\r\n  return request({\r\n    url: '/user/info',\r\n    method: 'get',\r\n    params: { token },\r\n    checkParams: getParamNames({ token }),\r\n    checkSign: buildSign({ token })\r\n  })\r\n}\r\n\r\n// 鐢ㄦ埛鐧诲嚭\r\nexport function logout() {\r\n  return request({\r\n    url: '/user/logout',\r\n    method: 'post',\r\n    checkParams: getParamNames({}),\r\n    checkSign: buildSign({})\r\n  })\r\n}\r\n\r\n\r\n// 鑾峰彇鎺ㄨ崘瀛︿俊鎭?\r\nexport function getHotList(params) {\r\n  return request({\r\n    url: '/resources/getHotUserResourceList',\r\n    method: 'get',\r\n    params: params,\r\n    checkParams: getParamNames(params),\r\n    checkSign: buildSign(params)\r\n  })\r\n}\r\n\r\n// 鑾峰彇鎺ㄨ崘瀛︿俊鎭?\r\nexport function getRelList(params) {\r\n  return request({\r\n    url: '/resources/getRelList',\r\n    method: 'get',\r\n    params: params,\r\n    checkParams: getParamNames(params),\r\n    checkSign: buildSign(params)\r\n  })\r\n}\r\n\r\n\r\nexport function saveUserStudyResource(data) {\r\n  return request({\r\n    url: '/resources/saveUserStudyResource',\r\n    method: 'post',\r\n    data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n\r\nexport function Submitactivity(data) {\r\n  return request({\r\n    url: '/activity/submitactivity',\r\n    method: 'post',\r\n    data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n\r\n// user_task/getList\r\nexport function getTaskList(data) {\r\n  return request({\r\n    url: '/user_task/getList',\r\n    method: 'post',\r\n    data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n\r\n// user_sign/getDateList\r\nexport function getDateList(data) {\r\n  return request({\r\n    url: '/user_sign/getDateList',\r\n    method: 'post',\r\n    data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n\r\n// user_task/getList\r\nexport function getUserStudy(data) {\r\n  return request({\r\n    url: '/user/getUserStudy',\r\n    method: 'post',\r\n    data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n\r\n// user_sign\r\nexport function getUserSign(data) {\r\n  return request({\r\n    url: '/user_sign/save',\r\n    method: 'post',\r\n    data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n\r\n//姝ｅ湪瀛?\r\nexport function getNewUserResourceList(params) {\r\n  return request({\r\n    url: '/resources/getNewUserResourceList',\r\n    method: 'get',\r\n    params: params,\r\n    checkParams: getParamNames(params),\r\n    checkSign: buildSign(params)\r\n  })\r\n}\r\n\r\n//瀛︿範璁板綍\r\nexport function getUserResourceList(params) {\r\n  return request({\r\n    url: '/resources/getUserResourceList',\r\n    method: 'get',\r\n    params: params,\r\n    checkParams: getParamNames(params),\r\n    checkSign: buildSign(params)\r\n  })\r\n}\r\n//鎺ㄨ崘瀛?\r\nexport function getHotUserResourceList(params) {\r\n  return request({\r\n    url: '/resources/getHotUserResourceList',\r\n    method: 'get',\r\n    params: params,\r\n    checkParams: getParamNames(params),\r\n    checkSign: buildSign(params)\r\n  })\r\n}\r\n\r\n\r\n//鍐欎綔缁冧範浜ゅ嵎\r\n// paper/writeSubmit\r\nexport function writeSubmit(data) {\r\n  return request({\r\n    url: '/paper/writeSubmit',\r\n    method: 'post',\r\n    data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n\r\n//鎴戠殑娲诲姩鍒楄〃\r\n// paper/writeSubmit\r\nexport function getMyActivityList(data) {\r\n  return request({\r\n    url: '/activity/getMyActivityList',\r\n    method: 'get',\r\n    params: data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n\r\n\r\nexport function getEtalkCateList(data) {\r\n  return request({\r\n    url: '/banxue/getEtalkCateList',\r\n    method: 'get',\r\n    params: data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n\r\nexport function getNewInfoList(data) {\r\n  return request({\r\n    url: '/banxue/getNewInfoList',\r\n    method: 'get',\r\n    params: data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n\r\nexport function getOldInfoList(data) {\r\n  return request({\r\n    url: '/banxue/getOldInfoList',\r\n    method: 'get',\r\n    params: data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n\r\nexport function getAIHistory(data) {\r\n  return request({\r\n    url: '/banxue/getAiHistoryList',\r\n    method: 'get',\r\n    params: data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n\r\nexport function getUserMapLevel(data) {\r\n  return request({\r\n    url: '/user/getUserMapLevel',\r\n    method: 'get',\r\n    params: data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n\r\n// writeTeacher/getMyNewFeedBack\r\nexport function getMyNewFeedBack(data) {\r\n  return request({\r\n    url: '/writeTeacher/getMyNewFeedBack',\r\n    method: 'get',\r\n    params: data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\nexport function getFeedBackList(data) {\r\n  return request({\r\n    url: '/writeTeacher/getFeedBackList',\r\n    method: 'get',\r\n    params: data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n\r\nexport function saveFeedback(data) {\r\n  return request({\r\n    url: '/writeTeacher/saveFeedback',\r\n    method: 'post',\r\n    data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\nexport function writeTeacherList(data) {\r\n  return request({\r\n    url: '/writeTeacher/gets',\r\n    method: 'get',\r\n    params: data,\r\n    // checkParams: getParamNames(data),\r\n    // checkSign: buildSign(data)\r\n  })\r\n}\r\n\r\nexport function getMyList(data) {\r\n  return request({\r\n    url: '/writeTeacher/getMyList',\r\n    method: 'get',\r\n    params: data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n\r\n\r\nexport function getById(data) {\r\n  return request({\r\n    url: '/writeTeacher/getById',\r\n    method: 'get',\r\n    params: data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n\r\nexport function getMyOrderInfo(data) {\r\n  return request({\r\n    url: '/writeTeacher/getMyOrderInfo',\r\n    method: 'get',\r\n    params: data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\nexport function saveWriteTeacherOrder(data) {\r\n  return request({\r\n    url: '/writeTeacher/saveWriteTeacherOrder',\r\n    method: 'post',\r\n    data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n\r\nexport function cancelOrder(data) {\r\n  return request({\r\n    url: '/writeTeacher/cancelOrder',\r\n    method: 'post',\r\n    data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n/**\r\n * \r\n * @param {*} data \r\n * @returns \r\n * 棣栨杈炬爣缁熻\r\n */\r\nexport function getRightCount(data) {\n  return request({\n    url: '/user/getRightCount',\r\n    method: 'get',\r\n    params: data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\n}\n\n// 获取用户诊断报告 PDF\n// login/getExamPdf?userno=...\nexport function getExamPdf(userno) {\n  const params = { userno }\n  return request({\n    url: '/login/getExamPdf',\n    method: 'get',\n    params,\n    responseType: 'blob',\n    checkParams: getParamNames(params),\n    checkSign: buildSign(params)\n  })\n}\n\r\n\r\n\r\n// /**\r\n//  * \r\n//  * @param {*} data \r\n//  * @returns \r\n//  * 鑾峰彇璁wss鍦板潃\r\n//  */\r\n// export function getWss(){\r\n//   return request({\r\n//     url: '/xunfei/getWebSocketUrl',\r\n//     method: 'post',\r\n//   })\r\n// }\r\n\r\n/**\r\n * \r\n * @param {*} data \r\n * @returns \r\n * 鑾峰彇璁wss鍦板潃\r\n */\r\nexport function getWss() {\r\n  return request({\r\n    url: '/xunfei/getWebSocket',\r\n    method: 'get',\r\n  })\r\n}\r\n\r\n// /**\r\n//  * \r\n//  * @param {*} data \r\n//  * @returns \r\n//  * 鍋滄wss浠诲姟\r\n//  */\r\n// export function StopWebSocketUrl(data){\r\n//   return request({\r\n//     url: '/xunfei/getStopWebSocketUrl',\r\n//     method: 'post',\r\n//     data\r\n//   })\r\n// }\r\n\r\n\r\n/**\r\n * \r\n * @param {*} data \r\n * @returns \r\n * 鍋滄wss浠诲姟\r\n */\r\nexport function StopWebSocketUrl(data) {\r\n  return request({\r\n    url: '/xunfei/resetWebSocket',\r\n    method: 'get',\r\n    params: data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n\r\n\r\n\r\n/**\r\n * \r\n * @param {*} data \r\n * @returns \r\n * 获取主题\r\n */\r\nexport function getSubject(data) {\r\n  return request({\r\n    url: '/writingAi/get_subject',\r\n    method: 'get',\r\n    params: data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n\r\n\r\n/**\r\n * 进行主题对话\r\n * @param {*} data \r\n * @returns \r\n */\r\nexport function writingAiFetch(data) {\r\n  return request({\r\n    url: '/writingAi/fetch',\r\n    method: 'post',\r\n    data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n\r\n\r\n\r\n/**\r\n * 淇濆瓨AI鍐欎綔\r\n * @param {*} data \r\n * @returns \r\n */\r\nexport function historySave(data) {\r\n  return request({\r\n    url: '/writingAi/historySave',\r\n    method: 'post',\r\n    data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n\r\n\r\n/**\r\n * \r\n * @param {*} data \r\n * @returns \r\n * 获取主题\r\n */\r\nexport function getHistoryList(data) {\r\n  return request({\r\n    url: '/writingAi/getHistoryList',\r\n    method: 'get',\r\n    params: data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n\r\n/**\r\n * \r\n * @param {*} data \r\n * @returns \r\n * 获取主题\r\n */\r\nexport function getHistoryDetail(data) {\r\n  return request({\r\n    url: '/writingAi/get',\r\n    method: 'get',\r\n    params: data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)  \r\n  })\r\n}\r\n\r\n\r\n/**\r\n * 提交反思日记\r\n * @param {*} data \r\n * @returns \r\n */\r\nexport function AddNoteBook(data) {\r\n  return request({\r\n    url: '/notebook/insert',\r\n    method: 'post',\r\n    contentType: 'json',\r\n    data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n\r\n/**\r\n * 编辑反思日记\r\n * @param {*} data \r\n * @returns \r\n */\r\nexport function EditNoteBook(data) {\r\n  return request({\r\n    url: '/notebook/updateById',\r\n    method: 'post',\r\n    contentType: 'json',\r\n    data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n\r\n\r\n/**\r\n * \r\n * @param {*} data \r\n * @returns \r\n * 获取反思日记\r\n */\r\nexport function getNoteBook(data) {\r\n  const checkParams = getParamNames(data)\r\n  const checkSign = buildSign(data)\r\n  return request({\r\n    url: '/notebook/gets',\r\n    method: 'get',\r\n    contentType: 'json',\r\n    params: data,\r\n    checkParams,\r\n    checkSign\r\n  })\r\n}\r\n/**\r\n * \r\n * @param {*} data \r\n * @returns \r\n * 获取反思日记详情\r\n */\r\nexport function getNoteBookById(data) {\r\n  return request({\r\n    url: '/notebook/getById',\r\n    method: 'get',\r\n    contentType: 'json',\r\n    params: data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n/**\r\n * \r\n * @param {*} data \r\n * @returns \r\n * 删除日记\r\n */\r\nexport function delNoteBook(data) {\r\n  return request({\r\n    url: '/notebook/deleteById',\r\n    method: 'get',\r\n    contentType: 'json',\r\n    params: data,\r\n    checkParams: getParamNames(data),\r\n    checkSign: buildSign(data)\r\n  })\r\n}\r\n\r\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MyList.vue?vue&type=style&index=0&id=5af367f2&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Detail.vue?vue&type=style&index=0&id=a95fd236&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NewChat.vue?vue&type=style&index=0&id=33d23c4f&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcPlantSetting.vue?vue&type=style&index=0&id=128edad2&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MiniPaper.vue?vue&type=style&index=0&id=06aa7dc1&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Report.vue?vue&type=style&index=0&id=41ea048e&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcExamNotice.vue?vue&type=style&index=0&id=68e1a27a&prod&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MapIndex.vue?vue&type=style&index=0&id=20862862&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Praxis.vue?vue&type=style&index=0&id=1cd69f45&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./examReport.vue?vue&type=style&index=0&id=7bcac378&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./chat.vue?vue&type=style&index=0&id=562307dd&prod&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListenPraxisAi.vue?vue&type=style&index=0&id=ddf329dc&prod&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListenAi.vue?vue&type=style&index=0&id=601ae1f4&prod&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ChatComposer.vue?vue&type=style&index=0&id=2e48af50&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcPlant.vue?vue&type=style&index=0&id=4b4a30e4&prod&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WriteAi.vue?vue&type=style&index=0&id=6574514e&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./List.vue?vue&type=style&index=0&id=c77a39be&prod&scoped=true&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PraxisOneInA.vue?vue&type=style&index=0&id=12eb2483&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./List.vue?vue&type=style&index=0&id=438c5637&prod&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WritePraxisAi.vue?vue&type=style&index=0&id=5447a879&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Write.vue?vue&type=style&index=0&id=a1177ed6&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./set_to.vue?vue&type=style&index=0&id=73702bea&prod&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NormalLayout.vue?vue&type=style&index=0&id=6e73f3c0&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PcInteractiveMultiWrite.vue?vue&type=style&index=0&id=a4494e0c&prod&scoped=true&lang=css\"","<template>\n    <div>\n        <van-nav-bar :title=\"title\" left-text=\"返回\" left-arrow @click-left=\"onClickLeft\" />\n        <div v-if=\"msg_list.length == 0\" style=\"text-align: center\">下拉加载历史...</div>\n        <van-pull-refresh v-model=\"isLoading\" @refresh=\"onRefresh\">\n            <div style=\"display: none\">\n                <audio\n                    controls=\"controls\"\n                    :src=\"new_audio\"\n                    ref=\"audioPlayer\"\n                    autoplay\n                    @play=\"onPlay\"\n                    @ended=\"myFunction()\"\n                ></audio>\n            </div>\n            <div class=\"chat-box\" id=\"chat-box\" ref=\"scrollContainer\">\n                <div class=\"chat-item\" v-for=\"(item, index) in msg_list\" :key=\"index\">\n                    <div class=\"question-box\" v-if=\"item.type == 0 && item.question != ''\">{{ item.question }}</div>\n                    <!-- <div class=\"question-box-empty\" v-if=\"item.type == 0 && item.question == ''\"></div> -->\n                    <div\n                        class=\"question-box\"\n                        v-if=\"item.type == 1 && item.lang_time > 0\"\n                        @click=\"playSound(item.filepath)\"\n                    >\n                        <img\n                            src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/audio-msg.png\"\n                            mode=\"widthFix\"\n                            class=\"start-img\"\n                        />\n                        <span style=\"font-size: 12px; padding-left: 10px\">{{ item.lang_time }}s</span>\n                    </div>\n\n                    <div class=\"answer-box-text\" :id=\"'chat' + (index + 1)\" v-if=\"item.answer != ''\">\n                        <div style=\"margin-bottom: 10px\" v-html=\"simpleParse(item.answer)\"></div>\n                        <div class=\"answer-box\" id=\"myElement\" v-if=\"total_count != index + 1\">\n                            <div class=\"restart-create\" @click=\"to_restart_chat(item)\">重新生成</div>\n                            <img\n                                @click=\"copyText(item.answer)\"\n                                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/copy.png\"\n                                mode=\"widthFix\"\n                                class=\"copy-text\"\n                            />\n                            <img\n                                @click=\"enCnText(item.answer, index)\"\n                                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy.png\"\n                                mode=\"widthFix\"\n                                class=\"copy-text\"\n                                v-if=\"item.iscn == false\"\n                            />\n                            <img\n                                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy1.png\"\n                                mode=\"widthFix\"\n                                class=\"copy-text\"\n                                v-else\n                            />\n                            <img\n                                v-if=\"to_aplay == true && new_index == index\"\n                                @click=\"stop()\"\n                                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/xx.gif\"\n                                mode=\"widthFix\"\n                                class=\"read-audio\"\n                            />\n                            <img\n                                v-else\n                                @click=\"readText2(item.answer, index)\"\n                                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/read_audio.png\"\n                                mode=\"widthFix\"\n                                class=\"read-audio\"\n                            />\n                        </div>\n\n                        <div class=\"answer-box\" id=\"myElement\" style=\"height: 360rpx\" v-else>\n                            <div class=\"restart-create\" @click=\"to_restart_chat(item)\">重新生成</div>\n                            <img\n                                @click=\"copyText(item.answer)\"\n                                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/copy.png\"\n                                mode=\"widthFix\"\n                                class=\"copy-text\"\n                            />\n                            <img\n                                @click=\"enCnText(item.answer, index)\"\n                                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy.png\"\n                                mode=\"widthFix\"\n                                class=\"copy-text\"\n                                v-if=\"item.iscn == false\"\n                            />\n                            <img\n                                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/fy1.png\"\n                                mode=\"widthFix\"\n                                class=\"copy-text\"\n                                v-else\n                            />\n                            <img\n                                v-if=\"to_aplay == true && new_index == index\"\n                                @click=\"stop()\"\n                                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/xx.gif\"\n                                mode=\"widthFix\"\n                                class=\"read-audio\"\n                            />\n                            <img\n                                v-else\n                                @click=\"readText2(item.answer, index)\"\n                                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/img/listen/read_audio.png\"\n                                mode=\"widthFix\"\n                                class=\"read-audio\"\n                            />\n                            <div\n                                class=\"ai-ques-item\"\n                                v-for=\"(item1, index1) in global\"\n                                :key=\"index1\"\n                                @click=\"to_new_chat(item1)\"\n                            >\n                                {{ item1.lable }}\n                            </div>\n                        </div>\n                    </div>\n                </div>\n                <div class=\"chat-item\" v-show=\"is_get == 0\">\n                    <div class=\"answer-box-text-new\">\n                        <div class=\"ai-ques-item1\">\n                            <img\n                                src=\"https://a-news.oss-accelerate.aliyuncs.com/zheda/public/output-9_59_13.gif\"\n                                width=\"100%\"\n                                alt=\"\"\n                            />\n                        </div>\n                    </div>\n                </div>\n                <div class=\"chat-item\">\n                    <div class=\"answer-box-text-new\">\n                        <div class=\"ai-ques-item1\"></div>\n                    </div>\n                </div>\n                <div class=\"chat-item\">\n                    <div class=\"answer-box-text-new\">\n                        <div class=\"ai-ques-item1\"></div>\n                    </div>\n                </div>\n                <div style=\"width: 100vw; height: 100px\"></div>\n            </div>\n        </van-pull-refresh>\n        <ChatComposer v-model=\"stu_content\" fixed :disabled=\"is_get === 0\" @send=\"sendInput\" @recording=\"onRecording\" />\n    </div>\n</template>\n\n<script>\nimport ChatComposer from '@/components/ChatComposer.vue'\n\nimport { en2cnDb, getttsUrl, saveEtalkStudy, updateEtalkStudy, topicDialogue, dialogue } from '@/api/home'\nimport { getAIHistory } from '@/api/user'\n\nexport default {\n    name: 'SpeechRecognitionDemo',\n    components: { ChatComposer },\n    data() {\n        return {\n            intervalId: null, // 保存定时器ID\n\n            title: '聊天',\n            new_audio: '',\n            content: '',\n            system: '',\n            to_aplay: false,\n            new_index: 0,\n            is_show_ai: false,\n\n            stu_content: '',\n\n            canuse: 0,\n\n            msg_list: [],\n            type: 0,\n            stype: 'speak_free',\n            lang_time: 0,\n            is_history: 0,\n            filePath: '',\n            total_count: 0,\n            from: 'speak',\n            currentSoundIndex: null,\n            pageSize: 0,\n            pageLimit: 1,\n            project_id: 0,\n            is_get: 1,\n\n            global: [\n                {\n                    lable: '主题对话，GAI式陪练',\n                    input: '',\n                    talk_type: 2,\n                },\n                {\n                    lable: '写作练习，AI写作辅导',\n                    input: '',\n                    talk_type: 1,\n                },\n            ],\n\n            isLoading: false,\n        }\n    },\n\n    mounted() {\n        // this.$message({\n        //     message: '系统繁忙，暂停使用！',\n        //     center: true\n        // });\n        // history.back()\n        // return\n        // 在组件挂载后立即获取任务数据\n        const user = JSON.parse(localStorage.getItem('user'))\n        if (user && user.sid) {\n            if (user.type_id != 2) {\n                this.$router.push({ name: 'noAuth' })\n                return\n            }\n        } else {\n            console.error('用户未登录或没有找到sid')\n        }\n        // this.recOpen()\n        // this.startPolling();  // 在组件挂载时启动定时器\n\n        this.system = this.$route.query.system\n        this.stu_content = this.$route.query.content || ''\n        this.content = this.$route.query.content || ''\n        this.title = this.$route.query.chat_title\n        this.from = this.$route.query.from\n        this.stype = this.$route.query.stype\n        this.type = this.$route.query.type\n        this.filePath = this.$route.query.filePath\n        this.lang_time = this.$route.query.lang_time\n        this.res_id = this.$route.query.res_id\n        this.is_history = this.$route.query.is_history\n        this.project_id = this.$route.query.project_id\n        if (this.stype == 'speak_free') {\n            this.global = [\n                {\n                    lable: '主题对话，GAI式陪练',\n                    input: '',\n                    talk_type: 2,\n                },\n                {\n                    lable: '写作练习，AI写作辅导',\n                    input: '',\n                    talk_type: 1,\n                },\n            ]\n        }\n        if (this.stype == 'write') {\n            this.global = [\n                {\n                    lable: '如何完善英语写作表达逻辑',\n                    input: 'Brief answer (within 60 words):How to improve expression in English writing?',\n                    talk_type: 0,\n                },\n                {\n                    lable: '生成一个优秀英语写作主题',\n                    input: 'Recommend one writing topic with brief writing guidance (within 60 words).',\n                    talk_type: 0,\n                },\n            ]\n        }\n        if (this.stype == 'listen_guide' || this.stype == 'read_guide') {\n            this.global = [\n                {\n                    lable: 'Summarize the gist and main idea.',\n                    input: 'Summarize the gist and main idea.',\n                    talk_type: 0,\n                    content: '',\n                },\n                {\n                    lable: 'Analyze and present the structure.',\n                    input: 'Analyze and present the structure.',\n                    talk_type: 0,\n                    content: '',\n                },\n                {\n                    lable: 'Explain sentences that contain over three clauses.',\n                    input: 'Explain sentences that contain over three clauses.',\n                    talk_type: 0,\n                    content: '',\n                },\n            ]\n        }\n        if (this.stype == 'write_guide' || this.stype == 'write_subject') {\n            this.global = [\n                {\n                    lable: 'Help me improve the language expression.',\n                    input: 'Help me improve the language expression.',\n                    talk_type: 0,\n                    content: '',\n                },\n                {\n                    lable: 'Help me enrich and improve the content.',\n                    input: 'Help me enrich and improve the content.',\n                    talk_type: 0,\n                    content: '',\n                },\n                {\n                    lable: 'Help me improve the article structure.',\n                    input: 'Help me improve the article structure.',\n                    talk_type: 0,\n                    content: '',\n                },\n            ]\n        }\n        if (this.stype == 'speak_subject') {\n            this.global = [\n                {\n                    lable: '重新生成一个口语练习主题',\n                    input: 'Generate a new oral practice topic and provide a brief description of it (within 60 words).',\n                    talk_type: 0,\n                    content: '',\n                },\n                {\n                    lable: '尝试进行AI写作练习',\n                    input: 'Assist me with english writing',\n                    talk_type: 1,\n                    content: '',\n                },\n            ]\n        }\n        if (this.is_history == 1) {\n            this.get_history()\n        } else {\n            this.chat()\n        }\n    },\n    beforeDestroy() {\n        this.stop()\n        // this.updateEtalkStudy()\n        clearInterval(this.intervalId) // 清除定时器\n    },\n    methods: {\n        async sendInput({ text, filepath, duration, type }) {\n            if (this.is_get === 0) return\n            this.content = text\n            this.filePath = filepath\n            this.lang_time = duration\n            this.type = type\n            this.stu_content = ''\n            this.is_get = 0\n            await this.saveEtalkStudy()\n            try {\n                await this.chat()\n            } finally {\n                this.is_get = 1\n                this.canuse = 1\n            }\n        },\n        onRecording() {\n            this.stop()\n            // Study timing is started when the message is sent.\n        },\n        async saveEtalkStudy() {\n            try {\n                const user = JSON.parse(localStorage.getItem('user'))\n                if (user && user.sid) {\n                    const response = await saveEtalkStudy({ sid: user.sid })\n                    const data = response.data\n                    this.etalk_time_id = data\n                } else {\n                    console.error('用户未登录或没有找到sid')\n                }\n            } catch (error) {\n                console.error('Login Failed:', error)\n            }\n        },\n        async updateEtalkStudy() {\n            if (!this.etalk_time_id) {\n                console.warn('未找到有效学习记录ID')\n                return\n            }\n            try {\n                await updateEtalkStudy({ id: this.etalk_time_id })\n                this.etalk_time_id = null // 重置ID避免重复更新\n            } catch (error) {\n                console.error('Login Failed:', error)\n            }\n        },\n        async myFunction() {\n            this.to_aplay = false\n        },\n        async onPlay() {\n            this.to_aplay = true\n        },\n\n        async stop() {\n            this.to_aplay = false\n            this.$refs.audioPlayer.pause()\n            this.new_audio = ''\n            // 确保更新视图\n            this.$forceUpdate()\n        },\n        fixGarbledText(text) {\n            // 匹配乱码部分（根据你的案例，乱码以 “ 开头，包含非常用符号）\n            const buffer = Buffer.from(text, 'binary') // 先转成字节\n            return buffer.toString('utf-8') // 再正确解码\n            // 匹配乱码部分（根据你的案例，乱码以 “ 开头，包含非常用符号）\n            // return input.replace(/[^\\x20-\\x7E]/g, ' ');\n        },\n        simpleParse(md) {\n            return (\n                md\n                    // 解析 # 标题\n                    .replace(/^\\s*#\\s+(.+?)\\s*$/gm, '<h1>$1</h1>')\n                    // 解析 ## 标题\n                    .replace(/^\\s*##\\s+(.+?)\\s*$/gm, '<h2>$1</h2>')\n                    // 解析代码块 ```...```\n                    .replace(/```([\\s\\S]*?)```/g, '<pre><code>$1</code></pre>')\n                    // 解析行内代码 `...`\n                    .replace(/`([^`]+)`/g, '<code>$1</code>')\n                    // 解析加粗 **...**\n                    .replace(/\\*\\*(.+?)\\*\\*/g, '<strong>$1</strong>')\n                    // 解析斜体 *...*\n                    .replace(/\\*(.+?)\\*/g, '<em>$1</em>')\n                    // 解析超链接 [text](url)\n                    .replace(/\\[(.+?)\\]\\((.+?)\\)/g, '<a href=\"$2\">$1</a>')\n                    // 解析无序列表项 - ...\n                    .replace(/^\\s*-\\s+(.+?)$/gm, '<li>$1</li>')\n                    // 合并相邻的 <li> 标签到 <ul> 中\n                    .replace(/<\\/li>\\n<li>/g, '</li><li>')\n                    // 将 <li> 包裹在 <ul> 中\n                    .replace(/(<li>.*<\\/li>)/gs, '<ul>$1</ul>')\n                    // 处理多个 <ul> 之间的换行\n                    .replace(/<\\/ul>\\n<ul>/g, '')\n                    // 解析换行符为 <br>\n                    .replace(/\\n/g, '<br>')\n            )\n        },\n\n        async onRefresh() {\n            setTimeout(() => {\n                this.$message({\n                    message: '刷新成功',\n                    center: true,\n                })\n                this.isLoading = false\n                this.pageSize++\n                this.get_history()\n            }, 1000)\n        },\n        async to_restart_chat(item) {\n            console.log(item)\n            this.content = item.question ///语音文本内容\n            this.filepath = item.filePath //语音文件地址\n            this.type = item.type //消息类型\n            this.lang_time = item.lang_time\n            this.chat()\n        },\n        async to_new_chat(item) {\n            this.content = item.input //语音文本内容\n            if (item.talk_type == 1) {\n                this.stop()\n                this.stu_content = ''\n                this.type = 0\n                this.lang_time = 0\n                this.filePath = ''\n                this.msg_list = []\n                this.$router.push({\n                    name: 'NewChat',\n                    query: {\n                        project_id: 0,\n                        is_history: 0,\n                        lang_time: this.lang_time,\n                        filePath: this.filePath,\n                        type: this.type,\n                        stype: 'write_guide',\n                        from: 'write',\n                        chat_title: 'E-Write',\n                        content: this.stu_content,\n                        res_id: this.res_id,\n                    },\n                })\n\n                this.title = 'E-Write'\n                this.from = 'write'\n                this.stype = 'write_guide'\n                this.msg_list = []\n                this.global = [\n                    {\n                        lable: '如何完善英语写作表达逻辑',\n                        input: 'Brief answer (within 60 words):How to improve expression in English writing?',\n                        talk_type: 0,\n                    },\n                    {\n                        lable: '生成一个优秀英语写作主题',\n                        input: 'Recommend one writing topic with brief writing guidance (within 60 words).',\n                        talk_type: 0,\n                    },\n                ]\n\n                this.chat()\n                // 确保更新视图\n                this.$forceUpdate()\n            } else if (item.talk_type == 2) {\n                this.$router.push({ name: 'Project' })\n            } else {\n                console.log(this.content)\n                this.filePath = ''\n                this.type = 0\n                this.lang_time = 0\n\n                this.chat()\n                // 确保更新视图\n                this.$forceUpdate()\n            }\n        },\n        async copyText(item) {\n            try {\n                await navigator.clipboard.writeText(item)\n                alert('文本已复制到剪贴板')\n            } catch (err) {\n                console.error('复制到剪贴板失败', err)\n            }\n        },\n        async enCnText(item, index) {\n            try {\n                const response = await en2cnDb({ userinput: item })\n                const data = response.data\n                var msg_list = this.msg_list\n                if (response.code == 100) {\n                    msg_list.forEach((val, key) => {\n                        if (key === index) {\n                            val.answer += '\\n' + data.content\n                            val.iscn = true\n                        }\n                    })\n                }\n                this.msg_list = msg_list\n            } catch (error) {\n                console.error('Login Failed:', error)\n            }\n        },\n        async readText(item, index) {\n            this.$refs.audioPlayer.pause()\n            await this.get_audio(item, index)\n        },\n        async readText2(item, index) {\n            this.$refs.audioPlayer.pause()\n            this.get_audio_read(item, index)\n        },\n        async get_audio(str, index) {\n            // const regex = /[!@#&$%^*()_+={}[\\]:;\"'<>,.?/~`-]/g;\n            // var new_answer = str.replace(regex, '');\n            var new_answer = str\n\n            var new_str = this.fixGarbledText(new_answer)\n            new_str = new_str.replace(/<[^>]+>/g, '')\n            new_str = new_str.trim().replace(/[^a-zA-Z0-9\\s.,!?;:'\"()-]/g, '')\n            const response = await getttsUrl({ inputtext: new_str })\n            const new_response = JSON.parse(response.data.result)\n\n            this.new_index = index - 1\n            var msg_index = this.msg_list.length - 1\n            this.msg_list[msg_index].answer = new_answer\n            console.log(this.msg_list[msg_index])\n            console.log(new_response.results)\n            if (new_response.results.ret == 'FAILED') {\n                this.stu_content = ''\n                this.content = ''\n                this.is_get = 1\n                this.total_count = this.msg_list.length\n                // this.scrollToElement()\n                // 确保更新视图\n                this.$forceUpdate()\n                return\n            } else {\n                this.new_audio = new_response.results.Transformation.Response.DubbingQueryResult.VoiceURL\n\n                this.stu_content = ''\n                this.content = ''\n                this.is_get = 1\n                this.total_count = this.msg_list.length\n                // this.scrollToElement()\n                // 确保更新视图\n                this.$forceUpdate()\n            }\n        },\n        async get_audio_read(str, index) {\n            // const regex = /[!@#&$%^*()_+={}[\\]:;\"'<>,.?/~`-]/g;\n            // var new_str = str.replace(regex, '');\n            var new_str = str\n            new_str = this.fixGarbledText(new_str)\n            new_str = new_str.replace(/<[^>]+>/g, '')\n            new_str = new_str.trim().replace(/[^a-zA-Z0-9\\s.,!?;:'\"()-]/g, '')\n            const response = await getttsUrl({ inputtext: new_str })\n            const new_response = JSON.parse(response.data.result)\n\n            this.new_index = index\n            this.to_aplay = true\n            console.log(index)\n            if (new_response.results.ret != 'FAILED') {\n                this.new_audio = new_response.results.Transformation.Response.DubbingQueryResult.VoiceURL\n            }\n            this.canuse = 1\n            this.total_count = this.msg_list.length\n            // console.log(this.msg_list)\n            // this.scrollToElement()\n            // 确保更新视图\n            this.$forceUpdate()\n        },\n\n        async playSound(url) {\n            // 停止当前播放的语音\n            if (this.currentSoundIndex !== null && this.currentSoundIndex !== url) {\n                this.stopSound(url)\n            }\n            // 播放新的语音\n            const sound = url\n            const audio = new Audio(sound)\n            audio.play()\n            // 更新当前播放\n            console.log(url)\n            this.currentSoundIndex = url\n        },\n        async stopSound(sound) {\n            // 停止语音播放的逻辑\n            const audio = new Audio(sound)\n            audio.pause()\n        },\n        async onClickLeft() {\n            history.back()\n        },\n\n        async chat() {\n            try {\n                this.updateEtalkStudy()\n                if (this.content == '' && this.stype != 'translate') {\n                    this.is_get = 1\n                    return\n                }\n                this.is_get = 0\n                const container = this.$refs.scrollContainer\n                container.scrollTop = container.scrollHeight\n                const user = JSON.parse(localStorage.getItem('user'))\n                if (user && user.sid) {\n                    if (this.stype != 'translate') {\n                        this.$set(this.msg_list, this.msg_list.length, {\n                            answer: '',\n                            type: this.type,\n                            question: this.content,\n                            lang_time: this.lang_time,\n                            iscn: false,\n                            filepath: this.filePath || '',\n                        })\n                    } else {\n                        this.$set(this.msg_list, this.msg_list.length, {\n                            answer: '',\n                            type: this.type,\n                            question: this.content,\n                            lang_time: this.lang_time,\n                            iscn: true,\n                            filepath: this.filePath || '',\n                        })\n                    }\n                    const params = {\n                        userinput: this.content, //语音文本内容\n                        filepath: this.filePath, //语音文件地址\n                        type: this.type, //消息类型\n                        lang_time: this.lang_time,\n                        etalk_cate_id: this.project_id,\n                        stype: this.stype, //消息类型\n                        from: this.from, //聊天来源\n                        sid: user.sid, //学生sid\n                        res_id: this.res_id,\n                        preuserinput: JSON.stringify(this.msg_list.slice(-3)),\n                    }\n                    Object.keys(params).forEach((k) => {\n                        if (params[k] === '' || params[k] === null || params[k] === undefined) {\n                            delete params[k]\n                        }\n                    })\n                    var response = ''\n                    if (this.stype == 'speak_subject') {\n                        response = await topicDialogue(params)\n                    } else {\n                        response = await dialogue(params)\n                    }\n\n                    const data = response && response.data ? response.data : response\n\n                    this.content = ''\n                    const answer = data.content ? data.content : ''\n                    this.msg_list[this.msg_list.length - 1].answer = answer\n                    if (answer != '') {\n                        await this.readText(answer, this.msg_list.length)\n                    } else {\n                        await this.readText('Hi~ I am your English learning assistant.', this.msg_list.length)\n                    }\n\n                    console.log(data)\n                    // 确保更新视图\n                    // this.$forceUpdate();\n                } else {\n                    console.error('用户未登录或没有找到sid')\n                }\n            } catch (error) {\n                console.error('Login Failed:', error)\n            } finally {\n                this.is_get = 1\n                this.canuse = 1\n            }\n        },\n        async scrollToElement() {\n            document.getElementById('myElement').scrollIntoView()\n        },\n        async to_free_talk() {},\n        async to_ai_write() {},\n        async to_script_talk() {},\n\n        change_show_ai() {\n            this.is_show_ai = !this.is_show_ai\n        },\n\n        async get_history() {\n            try {\n                const user = JSON.parse(localStorage.getItem('user'))\n                if (user && user.sid) {\n                    const response = await getAIHistory({\n                        sid: user.sid,\n                        from: this.from,\n                        page: this.pageSize,\n                        size: this.pageLimit,\n                    })\n                    const data = response.data\n                    var msg_list = this.msg_list\n                    var history_list = data.list.reverse()\n                    var new_msg = history_list.concat(msg_list)\n                    new_msg.forEach((val) => {\n                        val.iscn = false\n                    })\n                    this.msg_list = new_msg\n                    console.log(this.msg_list)\n                    this.totalScroll = 0\n                    this.total_count = new_msg.length\n                } else {\n                    console.error('用户未登录或没有找到sid')\n                }\n            } catch (error) {\n                console.error('Login Failed:', error)\n            }\n        },\n\n        // 初始化语音识别客户端\n\n        // 初始化音频可视化\n\n        // 处理连接/断开连接\n\n        // 开始录音\n\n        // 停止录音\n\n        // 断开连接\n\n        // 开始音频可视化\n\n        // 停止音频可视化\n\n        // 清理资源\n    },\n}\n</script>\n\n<style scoped>\n.chat-box {\n    width: 100vw;\n    height: 70vh;\n    overflow-y: auto;\n    /* 使内容可滚动 */\n    padding-bottom: 120px;\n}\n\n.question-box {\n    height: auto;\n    max-width: 280px;\n    min-width: 100px;\n    min-height: 30px;\n    background: linear-gradient(118deg, #4499ee 0%, #9ce4ff 100%);\n    border-radius: 20px 0px 20px 20px;\n    font-size: 14px;\n    color: #fff;\n    padding: 5px 10px;\n    line-height: 30px;\n    text-align: left;\n    float: right;\n    margin: 20px;\n}\n\n.question-box-empty {\n    max-width: 280px;\n    min-width: 100px;\n    height: 5px;\n    border-radius: 20px 0px 20px 20px;\n    font-size: 14px;\n    color: #fff;\n    padding: 5px 10px;\n    line-height: 30px;\n    text-align: center;\n    float: right;\n    margin: 10px;\n}\n\n.answer-box-text {\n    height: auto;\n    width: 300px;\n    min-height: 30px;\n    font-size: 14px;\n    padding: 5px 10px 20px 10px;\n    line-height: 1.5;\n    text-align: left;\n    float: left;\n    background-color: #f6f6f6;\n    margin-left: 20px;\n    border-radius: 10px;\n    margin-bottom: 20px;\n}\n\n.answer-box-text-new {\n    height: auto;\n    width: 300px;\n    min-height: 30px;\n    font-size: 14px;\n    padding: 5px 10px 20px 10px;\n    line-height: 1.5;\n    text-align: left;\n    float: left;\n    /* background-color: #F6F6F6; */\n    margin-left: 20px;\n    border-radius: 10px;\n}\n\n.chat-item {\n    width: 100%;\n    height: 80px;\n}\n\n.chat-item:last-child > .answer-box-text {\n    padding-bottom: 200px;\n}\n\n.answer-box {\n    padding-top: 10px;\n    border-top: 1px solid #e4e3e3;\n    width: 300px;\n    height: 100rpx;\n    line-height: 50px;\n}\n\n.answer-box > img {\n    width: 20px;\n    height: 20px;\n    vertical-align: top;\n    display: inline-block;\n    margin-bottom: 20px;\n}\n\n.restart-create {\n    width: 20%;\n    font-size: 12px;\n    height: 40px;\n    vertical-align: top;\n    display: inline-block;\n    margin-right: 45%;\n    line-height: 40px;\n}\n\n.copy-text {\n    width: 14px;\n    height: 15px;\n    padding-top: 10px;\n    vertical-align: top;\n    display: inline-block;\n    padding-right: 13px;\n}\n\n.read-audio {\n    width: 18px;\n    height: 15px;\n    padding-top: 10px;\n    vertical-align: top;\n    display: inline-block;\n}\n\n.ai-ques-item {\n    width: auto;\n    height: 30px;\n    border-radius: 15px;\n    border: 1px solid rgb(221, 219, 219);\n    line-height: 30px;\n    text-align: left;\n    padding: 0 10px;\n    font-size: 12px;\n    margin-bottom: 10px;\n}\n\n.ai-ques-item1 {\n    width: 30px;\n    height: 30px;\n    position: relative;\n    left: 20px;\n    top: 10px;\n}\n\n.start-img {\n    width: 20px;\n    height: 20px;\n    vertical-align: top;\n    display: inline-block;\n    padding-top: 5px;\n}\n</style>\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./About.vue?vue&type=style&index=0&id=6141f3b5&prod&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Ai.vue?vue&type=style&index=0&id=2dc9a91c&prod&scoped=true&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./List.vue?vue&type=style&index=0&id=143920ad&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Detail.vue?vue&type=style&index=0&id=477820a4&prod&scoped=true&lang=css\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Write.vue?vue&type=style&index=0&id=0353392c&prod&scoped=true&lang=css\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PaxisCommon.vue?vue&type=style&index=0&id=11a60f80&prod&scoped=true&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DetailHis.vue?vue&type=style&index=0&id=69516ee4&prod&scoped=true&lang=css\""],"sourceRoot":""}