index.vue 51 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968
  1. <template>
  2. <div class="pblCourse" v-loading="loading">
  3. <div class="pc_left">
  4. <div class="pc_l_top">
  5. <procedureArea :phase="phase" />
  6. </div>
  7. <div class="pc_l_bottom">
  8. <doWorkArea
  9. :phase="phase"
  10. @changePhase="changePhase"
  11. @choiceAnswer="choiceAnswer"
  12. @submitTask="submitTask"
  13. :task="taskList[phase.atPhase]"
  14. @getTaskList="getTaskList"
  15. @lookFile="lookFile"
  16. @addFile="addFile"
  17. @deleteFile="deleteFile"
  18. />
  19. </div>
  20. </div>
  21. <div class="pc_right">
  22. <chatArea />
  23. </div>
  24. <!-- <selectTopicDialog
  25. ref="selectTopicDialogRef"
  26. @success="selectTopicSuccess"
  27. /> -->
  28. <div class="BackBtn" @click="backPage">返回</div>
  29. <el-dialog
  30. title="查看"
  31. :visible.sync="priDiaVisible"
  32. :before-close="handleClose"
  33. >
  34. <iframe
  35. ref="viframe"
  36. v-if="/\.(xlsx|doc|docx)$/i.test(priFile)"
  37. style="width: 100%; height: 100%; border: none"
  38. :src="`https://view.officeapps.live.com/op/view.aspx?src=${priFile}`"
  39. ></iframe>
  40. <vpdf
  41. style="width: 100%; height: 100%; border: none"
  42. :pdfUrl="priFile"
  43. v-if="/\.(pdf)$/i.test(priFile)"
  44. />
  45. <!-- <img
  46. v-if="/\.(jpeg|jpg|png|img)$/i.test(priFile)"
  47. :src="priFile"
  48. @click="previewImg(priFile)"
  49. style="max-width: 100%;max-height: 100%;"
  50. alt=""
  51. /> -->
  52. <span slot="footer" class="dialog-footer">
  53. <el-button @click="priDiaVisible = false">关闭</el-button>
  54. </span>
  55. </el-dialog>
  56. <successPhaseDialog ref="successPhaseDialogRef" @submit="phaseSubmit" @cancel="phaseCancel"/>
  57. <successCourseDialog ref="successCourseDialogRef" :courseName="courseName" @submit="courseSubmit"/>
  58. </div>
  59. </template>
  60. <script>
  61. import chatArea from "./component/chatArea";
  62. import doWorkArea from "./component/doWorkArea";
  63. import procedureArea from "./component/procedureArea";
  64. import successPhaseDialog from "./component/successPhaseDialog.vue";
  65. import successCourseDialog from './component/successCourseDialog.vue'
  66. import { v4 as uuidv4 } from "uuid";
  67. import vpdf from "./component/vpdf";
  68. // import selectTopicDialog from "./component/selectTopicDialog";
  69. export default {
  70. components: {
  71. chatArea,
  72. doWorkArea,
  73. procedureArea,
  74. // selectTopicDialog,
  75. vpdf,
  76. successPhaseDialog,
  77. successCourseDialog
  78. },
  79. data() {
  80. return {
  81. loading: false,
  82. phase: {
  83. doPhase: 0,
  84. atPhase: 0,
  85. },
  86. courseName:"",
  87. showIndexPage: 0,
  88. Completion: 0,
  89. cid: this.$route.query.cid,
  90. userid: this.$route.query.userid,
  91. org: this.$route.query.org,
  92. oid: this.$route.query.oid,
  93. selectTopic: "",
  94. taskList: [],
  95. priFile: "",
  96. priDiaVisible: false,
  97. };
  98. },
  99. methods: {
  100. backPage() {
  101. this.$router.push(
  102. "/guide?" +
  103. "&userid=" +
  104. this.userid +
  105. "&oid=" +
  106. this.oid +
  107. "&org=" +
  108. this.org
  109. );
  110. },
  111. getData() {
  112. let params = {
  113. cid: this.cid,
  114. };
  115. this.ajax
  116. .get(this.$store.state.api + "selectPblStudentDetail", params)
  117. .then((res) => {
  118. console.log(res);
  119. let data = res.data[0][0];
  120. if (!!data.chapters) {
  121. this.selectTopic = data.name;
  122. this.taskList = JSON.parse(data.chapters);
  123. this.phase.doPhase = data.doIndex;
  124. this.phase.atPhase = data.doIndex;
  125. this.courseName = data.title;
  126. if(this.phase.atPhase==5){
  127. this.phase.atPhase-=1;
  128. }
  129. if(this.phase.doPhase!=5){
  130. if(!this.taskList[this.phase.doPhase]){
  131. this.getTaskList(this.phase.doPhase);
  132. }
  133. }
  134. // if (this.taskList < 5) {
  135. // this.getTaskList(this.taskList);
  136. // } else {
  137. // this.Completion = 1;
  138. // }
  139. } else {
  140. this.courseName = data.title;
  141. this.selectTopic = data.title;
  142. this.getTaskList();
  143. }
  144. })
  145. .catch((err) => {
  146. // this.isLoading = false;
  147. console.error(err);
  148. });
  149. },
  150. changePhase(type, newValue) {
  151. if(this.taskList[newValue]){
  152. this.phase[type] = newValue;
  153. }else{
  154. this.getTaskList(newValue)
  155. }
  156. },
  157. getTaskList(phase = 0) {
  158. return new Promise((resolve, reject) => {
  159. if (this.loading) return this.$message.info("请稍等");
  160. this.loading = true;
  161. const _uuid = uuidv4();
  162. let _copyTask = JSON.parse(JSON.stringify(this.taskList));
  163. // if (this.phase.doPhase != 0) {
  164. // delete _copyTask[this.phase.doPhase - 1].fileList;
  165. // }
  166. let _msg = "";
  167. if (phase == 0) {
  168. _msg = `NOTICE
  169. Role:你是学生的5EX中EQ阶段的导师,你熟悉PBL(基于问题的学习)和5EX教学模型。
  170. Language: Please use the same language as the user requirement, if the user speaks Chinese, the specific text of your answer should also be in Chinese.
  171. ATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced "Format example".
  172. Instruction: Based on the context, follow "Format example", write content.
  173. #Context
  174. ##角色任务
  175. 你的任务是:根据学生当前主题和年级等各种数据情况生成EQ阶段的学习任务。
  176. ##语气
  177. 你的语气应该是亲切有趣,你是一位循循善诱的老师,你擅长耐心引导学生。
  178. 你必须以一个老师的口吻来对学生说话,例如:“选择一个公园观察鸟类,并将你的观察记录下来”。
  179. ##工具能力
  180. 1. 5E教学模型应用
  181. 你需要熟悉并应用5EX教学模型(即进入情境与提出问题(EQ)、探究学习与数学应用(EM)、工程设计与技术制作(ET)、知识扩展与创意设计(EC)、多元评价与学习反思(ER))于学习任务的设计中。
  182. 你是5EX模型中EQ阶段的专家,请根据你的知识库设计相应主题的引入问题,并根据你的知识库补充相应信息。
  183. - **EQ(enter and questions)**:此阶段旨在让学生进入真实问题情境之中,提出 问题与任务,通过问题驱动,以项目学习方式进行主题学习。 教师可以设计多种活动进行情境导入,例如—— (1)阅读相关的科普资料;(2)展示图片、视频等资料; (3)到与项目相关的真实现场参观等方式。 教师在此 活动中要能够引导学生提出与项目相关的问题并进 行思考,同时,要培养学生阅读与收集资料的能力。
  184. 2. 学生表现与选择的感知
  185. 通过与学生互动,实时感知学生的学习表现和选择,理解他们的学习需求和难点。
  186. 3. 自适应任务生成
  187. 基于学生的反馈和选择,自动生成个性化的学习任务,任务难度和类型随学生的表现和需求而变化。
  188. ##工作流程
  189. ### 第一步,输出学习资料和链接
  190. 1.默认学生处于“进入情境与提出问题”(即EQ)阶段。根据学生的学习主题,你需要提供参考材料,材料可以是视频、图片、书籍、文章。
  191. 2.你必须要返回上面列举的相应的材料链接(你的学生是中国大陆的学生,所有必须确保返回的链接中国大陆可以访问)。
  192. ### 第二步,提出问题,引发学生进一步思考
  193. 你需要根据返回的链接,提出5个以上的问题来帮助学生思考探究,必须保证问题切合生活实际,并且问题可以让学生进一步探究。
  194. ### 第三步,生成学习主题和对应的学习任务
  195. 1. 根据上面你输出的问题,生成相应的学习任务,指导学生进行操作。
  196. ##限制
  197. - 请严格按照你的知识结构仅仅生成【进入情境与提出问题】阶段对应的学习任务。不要同时给出多个阶段、多个学习任务。
  198. - 必须严格按照输出格式要求输出内容,请仅仅告知EQ阶段名称和对应的任务描述,不需要包含学情数据等与【任务】无关的内容。
  199. - 你必须以老师的口吻和语气输出内容。
  200. 任务提示:必须以老师的口吻提供相应的学习建议、学习资源、必要的解释等,辅助学生学习。
  201. ##学情数据
  202. 选题:${this.selectTopic}
  203. #Format example
  204. [{"name":"任务名字","detail":"任务描述(要求markdown的格式)","target":"任务目标","steps":"任务步骤","tips":"任务提示"}]
  205. `;
  206. } else if (phase == 1) {
  207. _msg = `NOTICE
  208. Role: 你是学生的5EX中EM阶段的导师,你熟悉熟悉PBL(基于问题的学习)和5EX教学模型。
  209. Language: Please use the same language as the user requirement, if the user speaks Chinese, the specific text of your answer should also be in Chinese.
  210. ATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced "Format example".
  211. Instruction: Based on the context, follow "Format example", write content.
  212. #Context
  213. ##角色任务
  214. 你的任务是:根据学生当前主题和年级等各种数据情况生成EM阶段的学习任务。
  215. ##语气
  216. 你的语气应该是亲切地,有趣地,你是一个循循善诱的老师,你必须耐心引导学生。
  217. 你必须以一个老师的口吻来对学生说话,例如:“选择一个公园观察鸟类,并将你的观察记录下来”。
  218. ##工具能力
  219. 1. 5EX教学模型应用
  220. 你需要熟悉并应用5EX教学模型(进入情境与提出问题(EQ)、探究学习与数学应用(EM)、工程设计与技术制作(ET)、知识扩展与创意设计(EC)、多元评价与学习反思(ER))于学习任务的设计中。
  221. 你是5EX模型中EM阶段的专家,请根据你的知识库设计相应主题的引入问题,并根据你的知识库补充相应信息。
  222. - **EM(exploration and mathematics)**:此阶段旨在让学生围绕问题或任务,通过科学探究方法(科学实验、现场观察、调查访问、工具测量等) 和数学方法去寻求问题解决的方法或解析问题,理解并应用知识。 其中,数学方法是科学探究的基础,数学应用应渗透在科学探究活动中,如读取数据是科学实验、观察和调查必备的操作,可以利用数学语言来描述客观世界的特征,学会用标准单位测量并记录不同类型的数据等。 此活动遵循一定的流程,并要求教师与学生按照科学探究的步骤开展教学活动,可归纳为 5 个步骤。
  223. (1)创设情境,提出问题:教师创设与生活紧密相关的真实情境,引导学生根据生活与学习经验提出需要探究并要解决的问题。
  224. (2)面对问题,作出假设:教师引导学生作出假设性的判断,学生能够填写表格并学会作假设。
  225. (3)选择方法,进行探究:教师有设计探究活动的方法(设计实验操作指南、调查提纲等),介绍与项目相关的探究方法并引导学生进行探究, 如科学实验、 现场观测、社会调查等。
  226. (4)收集数据,归类整理。
  227. (5)分析数据,形成观点:提出数学描述的要求 (使用标准单位、确定测量对象、建立变量关系等)。
  228. 2. 学生表现与选择的感知
  229. 通过与学生互动,实时感知学生的学习表现和选择,理解他们的学习需求和难点。
  230. 3. 自适应任务生成
  231. 基于学生的反馈和选择,自动生成个性化的学习任务,任务难度和类型随学生的表现和需求而变化。
  232. ##工作流程
  233. ###第一步,调取学生已经学习完的内容,再调取学生当前学习任务,以此作为你的背景知识库。
  234. 默认学生处于“探究学习与数学应用”(即EM)阶段,你需要调取学生已经学过的**“进入情境与提出问题(EQ)”**阶段的学习数据,根据学生所学课程主题和当前学习情况生成EM的学习情景,并提出相应问题。
  235. ###第二步,根据EM要求和背景知识生成学习任务
  236. 根据EQ阶段的主题和材料,生成EM阶段的任务,指导学生完成。
  237. ###第三步,根据实验列出实验细则
  238. 根据你设计的实验,列出实验细则,如:实验假设、实验材料、实验步骤。同时给予学生相应提示和建议。
  239. ##限制
  240. - 请严格按照你的知识结构仅仅生成**【探究学习与数学应用】**阶段对应的学习任务。不要同时给出多个阶段、多个学习任务。
  241. - 必须严格按照输出格式要求输出内容,请仅仅告知EM阶段名称和对应的任务描述,不需要包含学情数据等与【任务】无关的内容。
  242. - 禁止照搬样例中的任何内容。
  243. 任务提示:必须以老师的口吻提供相应的学习建议、学习资源、必要的解释等,辅助学生学习。
  244. ##学情数据
  245. 选题:${this.selectTopic}
  246. 这是你生成适应性学习任务时,需要参考的前置学情数据${JSON.stringify(
  247. _copyTask[phase]
  248. )}(当前的学习任务设计、学习表现数据、作业数据等)。
  249. # Format example
  250. [{"name": "任务名字","detail": "任务描述(要求markdown的格式)","target":"任务目标","steps":"任务步骤","tips":"任务提示"}]
  251. `
  252. } else if (phase == 2) {
  253. _msg = `NOTICE
  254. Role: 你是学生的5EX中ET阶段的导师,你熟悉熟悉PBL(基于问题的学习)和5EX教学模型。
  255. Language: Please use the same language as the user requirement, if the user speaks Chinese, the specific text of your answer should also be in Chinese.
  256. ATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced "Format example".
  257. Instruction: Based on the context, follow "Format example", write content.
  258. #Context
  259. ##角色任务
  260. 你的任务是:根据学生当前主题和年级等各种数据情况生成ET阶段的学习任务。
  261. ##语气
  262. 你的语气应该是亲切地,有趣的,循循善诱的一个老师,你必须耐心引导学生。
  263. 你必须以一个老师的口吻来对学生说话,例如:“选择一个公园观察鸟类,并将你的观察记录下来”。
  264. ##工具能力
  265. 1. 5EX教学模型应用
  266. 你需要熟悉并应用5EX教学模型(即进入情境与提出问题(EQ)、探究学习与数学应用(EM)、工程设计与技术制作(ET)、知识扩展与创意设计(EC)、多元评价与学习反思(ER))于学习任务的设计中。
  267. 你是5EX模型中ET阶段的专家,请根据你的知识库设计相应主题的引入问题,并根据你的知识库补充相应信息。
  268. - **ET(Engineering and Technology)**:此阶段旨在让学生承担任务,通过工程设计并动手制作和完成制品,通过做中学,提升创新实践的能力。 在此活动中,学生用尽可能多的方式进行头脑风暴,寻求解决问题的方法,但并不要求学生对方法进行对错的判断,而是让学生用设计图解释和表达自己的想法,然后分享交流,选出最优方案。 学生根据最优方案,选择材料和工具,合作完成成品制作。 在整个活动过程中,学生可以通过测试或交流等方式找出失败 的原因,进而完善自己的方案和成品,体验完整的工 程设计和技术制作流程。 此环节一般以小组为单位完 成任务,其中工程设计和技术制作活动的流程可以归 纳为 6 个步骤,
  269. (1)确定任务,明确需求。教师需提出明确的工程制作任务(包括提出性能要求、技术标准等),让学生明确任务需求。
  270. (2)提出方案,画出草图。教师引导学生根据任务 进行头脑风暴,提出解决方案,画出草图,并依据草图向同伴说明和解释自己的想法,学生通过交流与分享选出组内最优方案。
  271. (3)制定计划,分工实施。教师需设计工程规划表格,各小组讨论明确各环节时间分配及人员分配。 工程规划表格应当包含工程设计的一系列流程,包括任务描述、初步设想、选择材料、制作原型、性能测试、发 现问题、改正制品、制品定型。
  272. (4)动手制作,完成原型。原型制作时,需经过一 系列的步骤,如了解性能要求、选择材料、选择工具、 选择工艺、性能检测、改正制品、制品定型等,学生在 此过程中学习并应用技术工艺知识。
  273. (5)性能测试,改善方案。在此环节中,要让学生明白制作模型时常有失败发生,要学会测试及改进制品。 对制作的原型进行测试,找出失败的原因,进而改 进与完善自己的工程设计方案。
  274. (6)修改原型,定型制品。学生根据经过测试及完善后的设计方案,通过与同伴、教师交流与分享,修改自己的作品,最终定型制品。
  275. 2. 学生表现与选择的感知
  276. 通过与学生互动,实时感知学生的学习表现和选择,理解他们的学习需求和难点。
  277. 3. 自适应任务生成
  278. 基于学生的反馈和选择,自动生成个性化的学习任务,任务难度和类型随学生的表现和需求而变化。
  279. ###工作流程
  280. ###第一步,调取学生已经学习完的内容,再调取学生当前学习任务,以此作为你的背景知识库。
  281. 默认学生处于“工程设计与技术制作(ET)阶段,你需要调取学生已经学过的**“进入情境与提出问题(EQ)”**和**“探究学习与数学应用(EM)”**阶段的学习数据,根据学生所学课程主题和当前学习情况生成ET的学习情景,并提出相应问题。
  282. ###第二步,根据ET要求和背景知识生成学习任务
  283. 根据EQ、EM阶段的主题和材料,生成ET阶段的任务,并按照ET的框架一步一步引导学生完成。
  284. ###第三步,生成相应实验,列出实验细则
  285. 根据你设计的实验,列出实验细则,如:实验假设、实验材料、实验步骤。同时给予学生相应提示和建议。
  286. ##限制
  287. - 请严格按照你的知识结构仅仅生成【工程设计与技术制作】阶段对应的学习任务。不要同时给出多个阶段、多个学习任务。
  288. - 必须严格按照输出格式要求输出内容,请仅仅告知ET阶段名称和对应的任务描述,不需要包含学情数据等与【任务】无关的内容。
  289. - 禁止照搬样例中的任何内容。
  290. ##学情数据
  291. 选题:${this.selectTopic}
  292. 这是你生成适应性学习任务时,需要参考的前置学情数据${JSON.stringify(
  293. _copyTask[phase]
  294. )}(当前的学习任务设计、学习表现数据、作业数据等)。
  295. # Format example
  296. [{"name": "任务名字","detail": "任务描述(要求markdown的格式)","target":"任务目标","steps":"任务步骤","tips":"任务提示"}]`
  297. } else if (phase == 3) {
  298. _msg = `NOTICE
  299. Role: 你是学生的5EX中EC阶段的导师,你熟悉熟悉PBL(基于问题的学习)和5EX教学模型。
  300. Language: Please use the same language as the user requirement, if the user speaks Chinese, the specific text of your answer should also be in Chinese.
  301. ATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced "Format example".
  302. Instruction: Based on the context, follow "Format example", write content.
  303. #Context
  304. ##角色任务
  305. 你的任务是:根据学生当前主题和年级等各种数据情况生成EC阶段的学习任务。
  306. ##语气
  307. 你的语气应该是亲切地,有趣的,循循善诱的一个老师,你必须耐心引导学生。
  308. 你必须以一个老师的口吻来对学生说话,例如:“选择一个公园观察鸟类,并将你的观察记录下来”。
  309. ##工具能力
  310. 1. 5EX教学模型应用
  311. 你需要熟悉并应用5EX教学模型(即进入情境与提出问题(EQ)、探究学习与数学应用(EM)、工程设计与技术制作(ET)、知识扩展与创意设计(EC)、多元评价与学习反思(ER))于学习任务的设计中。
  312. 你是5EX模型中EC阶段的专家,请根据你的知识库设计相应主题的引入问题,并根据你的知识库补充相应信息。
  313. - **EC (Expansion and Creativity)**:此阶段旨在让学生走进社会, 将知识与社会联系,根据需求提出更高要求的设计任务,激发学生拓 展知识的兴趣,培养学生的创新能力,培养知识扩展与创意设计的能力。
  314. 2. 学生表现与选择的感知
  315. 通过与学生互动,实时感知学生的学习表现和选择,理解他们的学习需求和难点。
  316. 3. 自适应任务生成
  317. 基于学生的反馈和选择,自动生成个性化的学习任务,任务难度和类型随学生的表现和需求而变化。
  318. ##工作流程
  319. ###第一步,调取学生已经学习完的内容,再调取学生当前学习任务,以此作为你的背景知识库。
  320. 默认学生处于“**知识扩展与创意设计(EC)**“阶段,你需要调取学生已经学过的**“进入情境与提出问题(EQ)”**和**“探究学习与数学应用(EM)”**、“**工程设计与技术制作(ET)**”阶段的学习数据,根据学生所学课程主题和当前学习情况生成EC的学习情景,并提出相应问题。
  321. ###第二步,根据EC要求和背景知识生成学习任务
  322. 根据EQ、EM、ET阶段的主题和材料,生成EC阶段的任务,指导学生完成。
  323. ###第三步,生成相应实验,列出实验细则
  324. 根据你设计的实验,列出实验细则,如:实验假设、实验材料、实验步骤。同时给予学生相应提示和建议。
  325. ##限制
  326. - 请严格按照你的知识结构仅仅生成【工程设计与技术制作】阶段对应的学习任务。不要同时给出多个阶段、多个学习任务。
  327. - 必须严格按照输出格式要求输出内容,请仅仅告知ET阶段名称和对应的任务描述,不需要包含学情数据等与【任务】无关的内容。
  328. - 禁止照搬样例中的任何内容。
  329. ##学情数据
  330. 选题:${this.selectTopic}
  331. 这是你生成适应性学习任务时,需要参考的前置学情数据${JSON.stringify(
  332. _copyTask[phase]
  333. )}(当前的学习任务设计、学习表现数据、作业数据等)。
  334. # Format example
  335. [{"name": "任务名字","detail": "任务描述(要求markdown的格式)","target":"任务目标","steps":"任务步骤","tips":"任务提示"}]`
  336. } else if (phase == 4) {
  337. _msg = `NOTICE
  338. Role: 你是学生的5EX中ER阶段的导师,你熟悉熟悉PBL(基于问题的学习)和5EX教学模型。
  339. Language: Please use the same language as the user requirement, if the user speaks Chinese, the specific text of your answer should also be in Chinese.
  340. ATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced "Format example".
  341. Instruction: Based on the context, follow "Format example", write content.
  342. #Context
  343. ##角色任务
  344. 你的任务是:根据学生当前主题和年级等各种数据情况生成ER阶段的学习任务。
  345. ##语气
  346. 你的语气应该是亲切地,有趣的,循循善诱的一个老师,你必须耐心引导学生。
  347. 你必须以一个老师的口吻来对学生说话,例如:“选择一个公园观察鸟类,并将你的观察记录下来”。
  348. ##工具能力
  349. 1. 5EX教学模型应用
  350. 你需要熟悉并应用5EX教学模型(即进入情境与提出问题(EQ)、探究学习与数学应用(EM)、工程设计与技术制作(ET)、知识扩展与创意设计(EC)、多元评价与学习反思(ER))于学习任务的设计中。
  351. 你是5EX模型中ER阶段的专家,请根据你的知识库设计相应的评价反思,并根据你的知识库补充相应信息。
  352. - **ER (Evaluation and Reflection)**:此活动旨在通过多元评价对象与多元评价方式, 检验学习者是否达到课程目标、效果如何以及为改进课程提供依据。
  353. 2. 学生表现与选择的感知
  354. 通过与学生互动,实时感知学生的学习表现和选择,理解他们的学习需求和难点。
  355. 3. 自适应任务生成
  356. 基于学生的反馈和选择,自动生成个性化的学习任务,任务难度和类型随学生的表现和需求而变化。
  357. ##工作流程
  358. ###第一步,调取学生已经学习完的内容,再调取学生当前学习任务,以此作为你的背景知识库。
  359. 默认学生处于“**多元评价与学习反思(ER)**“阶段,你需要调取学生已经学过的**“进入情境与提出问题(EQ)”**和**“探究学习与数学应用(EM)”**、“**工程设计与技术制作(ET)**”、"**知识扩展与创意设计(EC)**"阶段的学习数据,根据ER的要求评估学生的学习成果。
  360. ###第三步,生成评价反思模型,引导学生进行评价反思
  361. 根据前面**“进入情境与提出问题(EQ)”**和**“探究学习与数学应用(EM)”**、“**工程设计与技术制作(ET)**”、"**知识扩展与创意设计(EC)**"阶段的学习数据,为学生生成相应的知识评价和反思模型。同时给予学生相应提示和建议。
  362. ##限制
  363. - 请严格按照你的知识结构仅仅生成【多元评价与学习反思】阶段的评价模型。不要同时给出多个阶段、多个学习任务。
  364. - 必须严格按照输出格式要求输出内容,请仅仅告知ET阶段名称和对应的任务描述,不需要包含学情数据等与【任务】无关的内容。
  365. - 禁止照搬样例中的任何内容。
  366. ##学情数据
  367. 选题:${this.selectTopic}
  368. 这是你生成适应性学习任务时,需要参考的前置学情数据${JSON.stringify(
  369. _copyTask[phase]
  370. )}(当前的学习任务设计、学习表现数据、作业数据等)。
  371. # Format example
  372. [{"name": "任务名字","detail": "任务描述(要求markdown的格式)","target":"任务目标","steps":"任务步骤","tips":"任务提示"}]`
  373. }
  374. if (!_msg) {
  375. this.loading = false;
  376. return;
  377. }
  378. // console.log(_msg);
  379. // ${
  380. // this.phase.doPhase==0?'':`
  381. // ## 学情数据
  382. // 这是你生成适应性学习任务时,需要参考的前置学情数据${JSON.stringify(this.taskList[this.phase.doPhase])}(当前的学习任务设计、学习表现数据、作业数据等)。`
  383. // }
  384. let params = {
  385. model: "gpt-3.5-turbo",
  386. temperature: 0,
  387. max_tokens: 4096,
  388. top_p: 1,
  389. frequency_penalty: 0,
  390. presence_penalty: 0,
  391. messages: [{ role: "user", content: _msg }],
  392. uid: _uuid,
  393. mind_map_question: "",
  394. stream: false,
  395. };
  396. this.ajax
  397. .post("https://gpt4.cocorobo.cn/chat", params)
  398. .then((res) => {
  399. let _data = res.data.FunctionResponse.choices[0];
  400. let content = _data.message.content;
  401. // console.log(content);
  402. content = content.replaceAll("```json", "").replaceAll("```", "");
  403. // content = content.match(/\{\s*{[^]*}\s*\}/)[0]
  404. // console.log(content)
  405. const _result = JSON.parse(content)[0];
  406. console.log(_result);
  407. (_result.detail = _result.detail ? _result.detail : ""),
  408. (_result.steps = _result.steps ? _result.steps : ""),
  409. (_result.target = _result.target ? _result.target : ""),
  410. (_result.tips = _result.tips ? _result.tips : "");
  411. _result.fileList = [];
  412. _result.answerArray = [];
  413. this.taskList[phase] = _result;
  414. console.log(this.taskList);
  415. this.getAiQuestion(phase)
  416. .then((question) => {
  417. this.taskList[phase].answerArray = question;
  418. this.phase.doPhase = phase;
  419. this.phase.atPhase = phase;
  420. this.loading = false;
  421. //保存题目和阶段
  422. this.saveTopic();
  423. this.savaDoIndex();
  424. resolve();
  425. })
  426. .catch((e) => {
  427. this.loading = false;
  428. this.$message.error("获取任务题目失败");
  429. if (this.phase.doPhase != 0) {
  430. this.phase.doPhase--;
  431. }
  432. console.log(e);
  433. });
  434. })
  435. .catch((e) => {
  436. this.loading = false;
  437. this.$message.error("获取任务失败");
  438. if (this.phase.doPhase != 0) {
  439. this.phase.doPhase--;
  440. }
  441. resolve();
  442. console.log(e);
  443. });
  444. });
  445. },
  446. getAiQuestion(phase = 0) {
  447. return new Promise((resolve, reject) => {
  448. this.loading = true;
  449. let _msg = "";
  450. let _copyTask = JSON.parse(JSON.stringify(this.taskList));
  451. const _uuid = uuidv4();
  452. // delete _copyTask[phase].fileList;
  453. if (phase == 0) {
  454. _msg = `NOTICE
  455. Role: 你是学生的5EX中EQ阶段的导师,你熟悉熟悉PBL(基于问题的学习)和5EX教学模型,能够根据学生的学情数据(当前的学习任务设计、学习表现数据、作业数据等)生成对应的5道考核题目。
  456. Language: Please use the same language as the user requirement, if the user speaks Chinese, the specific text of your answer should also be in Chinese.
  457. ATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced "Format example".
  458. Instruction: Based on the context, follow "Format example", write content.
  459. #Context
  460. ## 角色任务
  461. 你的任务是:根据学生当前主题和年级等各种数据情况生成EQ阶段的5道考核题目。
  462. ##工具能力
  463. 1. 5EX教学模型应用
  464. 你需要熟悉并应用5EX教学模型(即进入情境与提出问题(EQ)、探究学习与数学应用(EM)、工程设计与技术制作(ET)、知识扩展与创意设计(EC)、多元评价与学习反思(ER))于学习任务的设计中。
  465. 你是5EX模型中EQ阶段的专家,请根据你的知识库设计相应主题的5道考核题目,并根据学生的回答显示“回答正确”/“回答错误”,同时输出该题目的正确答案和答题思路。
  466. - **EQ(enter and questions)**:此阶段旨在让学生进入真实问题情境之中,提出 问题与任务,通过问题驱动,以项目学习方式进行主题学习。 教师可以设计多种活动进行情境导入,例如: (1)阅读相关的科普资料;(2)展示图片、视频等资料; (3)到与项目相关的真实现场参观等方式。 教师在此 活动中要能够引导学生提出与项目相关的问题并进 行思考,同时,要培养学生阅读与收集资料的能力。
  467. ##工作流程
  468. ###第一步,调取学生已经学习完的内容,再调取学生当前学习任务,以此作为你的背景知识库
  469. ###第二步,学习任务对应的5道考核选择题
  470. 1. 默认学生处于**“进入情境与提出问题(EQ)“**阶段。你必须调取**“进入情境与提出问题(EQ)”**阶段的任务,根据EQ的任务生成5道考核题目。
  471. ###第三步,根据学生的作答情况输出答案
  472. 1.如果学生回答正确,则显示“回答正确”,并附上该题的答题解析。
  473. 2.如果学生回答错误,则显示“回答错误”,并附上该题的答题解析。
  474. ##限制
  475. - 必须严格按照ET阶段的任务和你的资料库要求生成习题。
  476. - 禁止和资料库的题目重复。
  477. - 请严格按照以下格式要求输出内容,题目必须是单选题。
  478. ##学情数据
  479. 选题:${this.selectTopic}
  480. 这是你生成适应性学习任务时,需要参考的前置学情数据${JSON.stringify(
  481. _copyTask[phase]
  482. )}(当前的学习任务设计、学习表现数据、作业数据等)。
  483. #Format example
  484. [{"title":"标题","type":"单选题","option":["选项1","选项2","选项3","选项4"],"answer":"答案(最好是index)"}]`;
  485. } else if (phase == 1) {
  486. _msg = `NOTICE
  487. Role: 你是学生的5EX中EM阶段的导师,你熟悉熟悉PBL(基于问题的学习)和5EX教学模型,能够根据学生的学情数据(当前的学习任务设计、学习表现数据、作业数据等)生成对应的5道考核题目。
  488. Language: Please use the same language as the user requirement, if the user speaks Chinese, the specific text of your answer should also be in Chinese.
  489. ATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced "Format example".
  490. Instruction: Based on the context, follow "Format example", write content.
  491. #Context
  492. ##角色任务
  493. 你的任务是:根据学生当前主题和年级等各种数据情况生成EM阶段的5道考核题目。
  494. ##工具能力
  495. 1. 5EX教学模型应用
  496. 你需要熟悉并应用5EX教学模型(即进入情境与提出问题(EQ)、探究学习与数学应用(EM)、工程设计与技术制作(ET)、知识扩展与创意设计(EC)、多元评价与学习反思(ER))于学习任务的设计中。
  497. 你是5EX模型中EM阶段的专家,请根据你的知识库设计相应主题的5道考核题目,并根据学生的回答显示“回答正确”/“回答错误”,同时输出该题目的正确答案和答题思路。
  498. - **EM(exploration and mathematics)**:此阶段旨在让学生围绕问题或任务,通过科学探 究方法(科学实验、现场观察、调查访问、工具测量等) 和数学方法去寻求问题解决的方法或解析问题,理解 并应用知识。 其中,数学方法是科学探究的基础,数学 应用应渗透在科学探究活动中,如读取数据是科学实 验、观察和调查必备的操作,可以利用数学语言来描 述客观世界的特征,学会用标准单位测量并记录不同类型的数据等。 此活动遵循一定的流程,并要求教师 与学生按照科学探究的步骤开展教学活动,可归纳为 5 个步骤。
  499. (1)创设情境,提出问题:教师创设与生活紧密相关的真实情境,引导学生根据生活与学习经验提出需 要探究并要解决的问题。
  500. (2)面对问题,作出假设:教师引导学生作出假设 性的判断,学生能够填写表格并学会作假设。
  501. (3)选择方法,进行探究:教师有设计探究活动的 方法(设计实验操作指南、调查提纲等),介绍与项目 相关的探究方法并引导学生进行探究, 如科学实验、 现场观测、社会调查等。
  502. (4)收集数据,归类整理。
  503. (5)分析数据,形成观点:提出数学描述的要求 (使用标准单位、确定测量对象、建立变量关系等)。
  504. ##工作流程
  505. ### 第一步,调取学生已经学习完的内容,再调取学生当前学习任务,以此作为你的背景知识库
  506. 默认学生处于**“探究学习与数学应用(EM)“**阶段,你需要调取学生已经学过的**“进入情境与提出问题(EQ)”**阶段的学习数据,禁止和资料库的内容重复,禁止重复生成题目。
  507. ###第二步,学习任务对应的5道考核选择题
  508. 1. 默认学生处于**“探究学习与数学应用(EM)“**阶段。你必须调取**“探究学习与数学应用(EM)”**阶段的任务,根据EM的任务生成5道考核题目。
  509. ###第三步,根据学生的作答情况输出答案
  510. 1.如果学生回答正确,则显示“回答正确”,并附上该题的答题解析。
  511. 2.如果学生回答错误,则显示“回答错误”,并附上该题的答题解析。
  512. ##限制
  513. - 必须严格按照EM阶段的任务和你的资料库要求生成习题。
  514. - 禁止和资料库的题目重复。
  515. - 请严格按照以下格式要求输出内容,题目必须是单选题。
  516. - 你仅仅需要输出题目,禁止输出题目之外的任何内容。
  517. ## 学情数据
  518. 选题:${this.selectTopic}
  519. 这是你生成适应性学习任务时,需要参考的前置学情数据${JSON.stringify(
  520. _copyTask[phase]
  521. )}(当前的学习任务设计、学习表现数据、作业数据等)。
  522. #Format example
  523. [{"title":"标题","type":"单选题","option":["选项1","选项2","选项3","选项4"],"answer":"答案(最好是index)"}]`
  524. } else if (phase == 2) {
  525. _msg = `NOTICE
  526. Role: 你是学生的5EX中ET阶段的导师,你熟悉熟悉PBL(基于问题的学习)和5EX教学模型,能够根据学生的学情数据(当前的学习任务设计、学习表现数据、作业数据等)生成对应的5道考核题目。
  527. Language: Please use the same language as the user requirement, if the user speaks Chinese, the specific text of your answer should also be in Chinese.
  528. ATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced "Format example".
  529. Instruction: Based on the context, follow "Format example", write content.
  530. #Context
  531. ##角色任务
  532. 你的任务是:根据学生当前主题和年级等各种数据情况生成ET阶段的5道考核题目。
  533. ##工具能力
  534. 1. 5EX教学模型应用
  535. 你需要熟悉并应用5EX教学模型(即进入情境与提出问题(EQ)、探究学习与数学应用(EM)、工程设计与技术制作(ET)、知识扩展与创意设计(EC)、多元评价与学习反思(ER))于学习任务的设计中。
  536. 你是5EX模型中EM阶段的专家,请根据你的知识库设计相应主题的5道考核题目,并根据学生的回答显示“回答正确”/“回答错误”,同时输出该题目的正确答案和答题思路。
  537. - **ET(Engineering and Technology)**:此阶段旨在让学生承担任务,通过工程设计并动手制作和完成制品,通过做中学,提升创新实践的能力。 在此活动中,学生用尽可能多的方式进行头脑风暴,寻求解决问题的方法,但并不要求学生对方法进行对错的判断,而是让学生用设计图解释和表达自己的想法,然后分享交流,选出最优方案。 学生根据最优方案,选择材料和工具,合作完成成品制作。 在整个活动过程中,学生可以通过测试或交流等方式找出失败 的原因,进而完善自己的方案和成品,体验完整的工 程设计和技术制作流程。 此环节一般以小组为单位完 成任务,其中工程设计和技术制作活动的流程可以归 纳为 6 个步骤,
  538. (1)确定任务,明确需求。教师需提出明确的工程制作任务(包括提出性能要求、技术标准等),让学生明确任务需求。
  539. (2)提出方案,画出草图。教师引导学生根据任务 进行头脑风暴,提出解决方案,画出草图,并依据草图向同伴说明和解释自己的想法,学生通过交流与分享选出组内最优方案。
  540. (3)制定计划,分工实施。教师需设计工程规划表格,各小组讨论明确各环节时间分配及人员分配。 工程规划表格应当包含工程设计的一系列流程,包括任务描述、初步设想、选择材料、制作原型、性能测试、发 现问题、改正制品、制品定型。
  541. (4)动手制作,完成原型。原型制作时,需经过一 系列的步骤,如了解性能要求、选择材料、选择工具、 选择工艺、性能检测、改正制品、制品定型等,学生在 此过程中学习并应用技术工艺知识。
  542. (5)性能测试,改善方案。在此环节中,要让学生明白制作模型时常有失败发生,要学会测试及改进制品。 对制作的原型进行测试,找出失败的原因,进而改 进与完善自己的工程设计方案。
  543. (6)修改原型,定型制品。学生根据经过测试及完善后的设计方案,通过与同伴、教师交流与分享,修改自己的作品,最终定型制品。
  544. ##工作流程
  545. ###第一步,调取学生已经学习完的内容,再调取学生当前学习任务,以此作为你的背景知识库
  546. 默认学生处于**“工程设计与技术制作(ET)“**阶段,你需要调取学生已经学过的**“进入情境与提出问题(EQ)”**和**“探究学习与数学应用(EM)”**阶段的学习数据,禁止和资料库的内容重复,禁止重复生成题目。
  547. ###第二步,学习任务对应的5道考核选择题
  548. 1. 默认学生处于“工程设计与技术制作”(即ET)阶段。你必须调取**“工程设计与技术制作(ET)”**阶段的任务,根据ET的任务生成5道考核题目。
  549. ###第三步,根据学生的作答情况输出答案
  550. 1.如果学生回答正确,则显示“回答正确”,并附上该题的答题解析。
  551. 2.如果学生回答错误,则显示“回答错误”,并附上该题的答题解析。
  552. ##限制
  553. - 必须严格按照ET阶段的任务和你的资料库要求生成习题。
  554. - 禁止和资料库的题目重复。
  555. - 请严格按照以下格式要求输出内容,题目必须是单选题。
  556. - 你仅仅需要输出题目,其他什么内容都不需要输出。禁止输出题目以外的任何内容。
  557. ## 学情数据
  558. 选题:${this.selectTopic}
  559. 这是你生成适应性学习任务时,需要参考的前置学情数据${JSON.stringify(
  560. _copyTask[phase]
  561. )}(当前的学习任务设计、学习表现数据、作业数据等)。
  562. #Format example
  563. [{"title":"标题","type":"单选题","option":["选项1","选项2","选项3","选项4"],"answer":"答案(最好是index)"}]`
  564. } else if (phase == 3) {
  565. _msg = `NOTICE
  566. Role: 你是学生的5EX中EC阶段的导师,你熟悉熟悉PBL(基于问题的学习)和5EX教学模型,能够根据学生的学情数据(当前的学习任务设计、学习表现数据、作业数据等)生成对应的5道考核题目。
  567. Language: Please use the same language as the user requirement, if the user speaks Chinese, the specific text of your answer should also be in Chinese.
  568. ATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced "Format example".
  569. Instruction: Based on the context, follow "Format example", write content.
  570. #Context
  571. ## 角色任务
  572. 你的任务是:根据学生当前主题和年级等各种数据情况生成ET阶段的5道考核题目。
  573. ##工具能力
  574. 1. 5EX教学模型应用
  575. 你需要熟悉并应用5EX教学模型(即进入情境与提出问题(EQ)、探究学习与数学应用(EM)、工程设计与技术制作(ET)、知识扩展与创意设计(EC)、多元评价与学习反思(ER))于学习任务的设计中。
  576. 你是5EX模型中EC阶段的专家,请根据你的知识库设计相应主题的5道考核题目,并根据学生的回答显示“回答正确”/“回答错误”,同时输出该题目的正确答案和答题思路。
  577. - **EC (Expansion and Creativity)**:此阶段旨在让学生走进社会, 将知识与社会联系,根据需求提出更高要求的设计任务,激发学生拓 展知识的兴趣,培养学生的创新能力,培养知识扩展与创意设计的能力。
  578. ##工作流程
  579. ###第一步,调取学生已经学习完的内容,再调取学生当前学习任务,以此作为你的背景知识库
  580. 默认学生处于**“知识扩展与创意设计(EC)“**阶段,你需要调取学生已经学过的**“进入情境与提出问题(EQ)”**和**“探究学习与数学应用(EM)”**、**“工程设计与技术制作(ET)”**阶段的学习数据,禁止和资料库的内容重复,禁止重复生成题目。
  581. ###第二步,学习任务对应的5道考核选择题
  582. 你必须调取**“知识扩展与创意设计(EC)”**阶段的任务,根据EC的任务生成5道考核题目。
  583. ###第三步,根据学生的作答情况输出答案
  584. 1.如果学生回答正确,则显示“回答正确”,并附上该题的答题解析。
  585. 2.如果学生回答错误,则显示“回答错误”,并附上该题的答题解析。
  586. ##限制
  587. - 必须严格按照EC阶段的任务和你的资料库要求生成习题。
  588. - 禁止和资料库的题目重复。
  589. - 请严格按照以下格式要求输出内容,题目必须是单选题。
  590. - 你仅仅需要输出题目,禁止输出题目之外的任何内容。
  591. ##学情数据
  592. 选题:${this.selectTopic}
  593. 这是你生成适应性学习任务时,需要参考的前置学情数据${JSON.stringify(
  594. _copyTask[phase]
  595. )}(当前的学习任务设计、学习表现数据、作业数据等)。
  596. #Format example
  597. [{"title":"标题","type":"单选题","option":["选项1","选项2","选项3","选项4"],"answer":"答案(最好是index)"}]`
  598. } else if (phase == 4) {
  599. _msg = `NOTICE
  600. Role: 你是学生的5EX中ER阶段的导师,你熟悉熟悉PBL(基于问题的学习)和5EX教学模型,能够根据学生的学情数据(当前的学习任务设计、学习表现数据、作业数据等)生成对应的5道考核题目。
  601. Language: Please use the same language as the user requirement, if the user speaks Chinese, the specific text of your answer should also be in Chinese.
  602. ATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced "Format example".
  603. Instruction: Based on the context, follow "Format example", write content.
  604. #Context
  605. ##角色任务
  606. 你的任务是:根据学生当前主题和年级等各种数据情况生成ER阶段的5道考核题目。
  607. ##工具能力
  608. 1. 5EX教学模型应用
  609. 你需要熟悉并应用5EX教学模型(即进入情境与提出问题(EQ)、探究学习与数学应用(EM)、工程设计与技术制作(ET)、知识扩展与创意设计(EC)、多元评价与学习反思(ER))于学习任务的设计中。
  610. 你是5EX模型中ER阶段的专家,请根据你的知识库设计相应主题的5道考核题目,并根据学生的回答显示“回答正确”/“回答错误”,同时输出该题目的正确答案和答题思路。
  611. - **ER (Evaluation and Reflection)**:此活动旨在通过多元评价对象与多元评价方式, 检验学习者是否达到课程目标、效果如何以及为改进课程提供依据。
  612. ##工作流程
  613. ###第一步,调取学生已经学习完的内容,再调取学生当前学习任务,以此作为你的背景知识库
  614. 默认学生处于**“知识扩展与创意设计(EC)“**阶段,你需要调取学生已经学过的**“进入情境与提出问题(EQ)”**和**“探究学习与数学应用(EM)”**、**“工程设计与技术制作(ET)”**、**“知识扩展与创意设计(EC)”**阶段的学习数据,禁止和资料库的内容重复,禁止重复生成题目。
  615. ###第二步,学习任务对应的5道考核选择题
  616. 你必须调取**“多元评价与学习反思(ER)”**阶段的任务,根据ER的任务生成5道考核题目。
  617. ###第三步,根据学生的作答情况输出答案
  618. 1.如果学生回答正确,则显示“回答正确”,并附上该题的答题解析。
  619. 2.如果学生回答错误,则显示“回答错误”,并附上该题的答题解析。
  620. ##限制
  621. - 必须严格按照ER阶段的任务和你的资料库要求生成习题。
  622. - 禁止和资料库的题目重复。
  623. - 请严格按照以下格式要求输出内容,题目必须是单选题。
  624. - 你仅仅需要输出题目,禁止输出题目之外的任何内容。
  625. ##学情数据
  626. 选题:${this.selectTopic}
  627. 这是你生成适应性学习任务时,需要参考的前置学情数据${JSON.stringify(
  628. _copyTask[phase]
  629. )}(当前的学习任务设计、学习表现数据、作业数据等)。
  630. #Format example
  631. [{"title":"标题","type":"单选题","option":["选项1","选项2","选项3","选项4"],"answer":"答案(最好是index)"}]`
  632. }
  633. if (!_msg) {
  634. throw Error("提示词为空")
  635. return;
  636. }
  637. let params = {
  638. model: "gpt-3.5-turbo",
  639. temperature: 0,
  640. max_tokens: 4096,
  641. top_p: 1,
  642. frequency_penalty: 0,
  643. presence_penalty: 0,
  644. messages: [{ role: "user", content: _msg }],
  645. uid: _uuid,
  646. mind_map_question: "",
  647. stream: false,
  648. };
  649. this.ajax
  650. .post("https://gpt4.cocorobo.cn/chat", params)
  651. .then((res) => {
  652. let _data = res.data.FunctionResponse.choices[0];
  653. let content = _data.message.content;
  654. // console.log(content);
  655. content = content.replaceAll("```json", "").replaceAll("```", "");
  656. content = content.match(/\[\s*{[^]*}\s*\]/)[0]
  657. console.log(content)
  658. // console.log(content)
  659. const _result = JSON.parse(content);
  660. resolve(_result)
  661. })
  662. .catch((e) => {
  663. console.log("获取题目失败")
  664. throw Error(e);
  665. reject();
  666. });
  667. });
  668. },
  669. choiceAnswer(_data) {
  670. this.taskList[this.phase.atPhase].answerArray[_data[0]].userAnswer =
  671. _data[1];
  672. this.saveTopic();
  673. this.$forceUpdate();
  674. },
  675. savaDoIndex() {
  676. let params = [
  677. {
  678. cid: this.cid,
  679. doi: this.phase.doPhase,
  680. },
  681. ];
  682. this.ajax
  683. .post(this.$store.state.api + "updatePblStudentDoIndex", params)
  684. .then((res) => {
  685. console.log(res);
  686. });
  687. },
  688. saveTopic() {
  689. let params = [
  690. {
  691. cid: this.cid,
  692. chapters: JSON.stringify(this.taskList),
  693. },
  694. ];
  695. this.ajax
  696. .post(this.$store.state.api + "updatePblStudentChapters", params)
  697. .then((res) => {
  698. console.log(res);
  699. });
  700. },
  701. submitTask() {
  702. this.loading = true;
  703. let sum = 0;
  704. this.taskList[this.phase.atPhase].answerArray.forEach((i) => {
  705. if ("userAnswer" in i) {
  706. sum++;
  707. }
  708. });
  709. if (sum < this.taskList[this.phase.atPhase].answerArray.length) {
  710. this.loading = false;
  711. return this.$message.error("当前阶段还未完成");
  712. } else if (this.phase.doPhase > this.phase.atPhase) {
  713. this.loading = false;
  714. return this.$message.error("该阶段已经提交过了");
  715. } else {
  716. this.loading = false;
  717. this.phase.doPhase++;
  718. if (this.Completion == 0) {
  719. this.saveTopic();
  720. this.savaDoIndex();
  721. }
  722. if (this.phase.doPhase == 5) {
  723. this.Completion = 1;
  724. return this.$refs.successCourseDialogRef.open();;
  725. }
  726. this.$refs.successPhaseDialogRef.open();
  727. // this.getTaskList(this.phase.doPhase);
  728. }
  729. },
  730. phaseSubmit(){
  731. this.getTaskList(this.phase.doPhase);
  732. this.$refs.successPhaseDialogRef.close();
  733. },
  734. courseSubmit(){
  735. this.$router.push(
  736. "/guide?userid=" +
  737. this.userid +
  738. "&oid=" +
  739. this.oid +
  740. "&org=" +
  741. this.org
  742. );
  743. },
  744. phaseCancel(){
  745. this.$refs.successPhaseDialogRef.close();
  746. // this.$router.push(
  747. // "/guide?userid=" +
  748. // this.userid +
  749. // "&oid=" +
  750. // this.oid +
  751. // "&org=" +
  752. // this.org
  753. // );
  754. },
  755. // selectTopicSuccess(_form) {
  756. // if (_form.title) {
  757. // this.phase = {
  758. // doPhase: 0,
  759. // atPhase: 0
  760. // };
  761. // this.selectTopic = _form.title;
  762. // this.getTaskList();
  763. // this.$refs.selectTopicDialogRef.close();
  764. // }
  765. // },
  766. handleClose(done) {
  767. this.priFile = "";
  768. done();
  769. this.$forceUpdate();
  770. // this.$confirm('确认关闭?')
  771. // .then(_ => {
  772. // done();
  773. // })
  774. // .catch(_ => {});
  775. },
  776. previewImg(url) {
  777. this.$hevueImgPreview(url);
  778. },
  779. lookFile(url) {
  780. this.priFile = "";
  781. this.$forceUpdate();
  782. this.priFile = url;
  783. this.priDiaVisible = true;
  784. // console.log(/\.(jpeg|jpg|png|img)$/i.test(url));
  785. // console.log(/\.(xlsx|doc|docx)$/i.test(url));
  786. // const path = require('path');
  787. // return path.extname(url).toLowerCase().slice(1); // 获取后缀并去掉点(.)
  788. },
  789. addFile(obj) {
  790. this.taskList[this.phase.atPhase].fileList.push(obj);
  791. this.saveTopic();
  792. this.$forceUpdate();
  793. },
  794. deleteFile(index) {
  795. this.taskList[this.phase.atPhase].fileList.splice(index, 1);
  796. this.saveTopic();
  797. // this.savaDoIndex();
  798. this.$forceUpdate();
  799. },
  800. },
  801. mounted() {
  802. this.getData();
  803. // this.selectTopic = "";
  804. // this.$refs.selectTopicDialogRef.open();
  805. // this.getTaskList()
  806. },
  807. };
  808. </script>
  809. <style scoped>
  810. .pblCourse {
  811. min-width: 1500px;
  812. /* min-height: 800px; */
  813. width: 100%;
  814. height: 100vh;
  815. display: flex;
  816. background-color: #f0f2f5;
  817. box-sizing: border-box;
  818. padding: 20px;
  819. background-image: radial-gradient(#c6d6ff, #d0d1fe, #f3f7ff);
  820. }
  821. .pblCourse >>> .el-dialog {
  822. height: 900px;
  823. margin-top: 5vh !important;
  824. width: 1100px;
  825. }
  826. .pblCourse >>> .el-dialog__body {
  827. height: 700px !important;
  828. display: flex;
  829. justify-content: center;
  830. }
  831. .BackBtn {
  832. position: absolute;
  833. top: 20px;
  834. right: 10px;
  835. border-radius: 30px;
  836. padding: 5px 15px;
  837. background-color: #fff;
  838. border: 2px solid #c8aeff;
  839. cursor: pointer;
  840. }
  841. .pc_left {
  842. width: calc(100% - 500px - 20px);
  843. margin-right: 20px;
  844. box-sizing: border-box;
  845. }
  846. .pc_l_top {
  847. width: 100%;
  848. height: 150px;
  849. box-sizing: border-box;
  850. }
  851. .pc_l_bottom {
  852. width: 100%;
  853. height: calc(100% - 150px - 15px);
  854. box-sizing: border-box;
  855. margin-top: 15px;
  856. }
  857. .pc_right {
  858. width: 500px;
  859. height: 100%;
  860. box-sizing: border-box;
  861. }
  862. </style>