Преглед на файлове

学生端增加ai讲解知识点解读功能

dengshaobo преди 1 ден
родител
ревизия
9c04dcb7a6

+ 1 - 1
src/components/AiRobot.vue

@@ -290,7 +290,7 @@ export default {
       const messages = [
         {
           role: "system", //用户角色信息
-          content: "你是一位精通分析的教育专家,请帮我分析这份考试数据,要求保持原文核心逻辑和数据画像框架,语言更简洁精准、通俗易懂,贴合教育数据分析诊断的专业视角,同时确保上下文流畅,突出问题定位和教学改进相关的核心导向。"//角色提示词信息
+          content:"你是中学数学辅导老师,请针对下面的知识点,给中学生输出一份知识点解读。要求:1、语言通俗易懂,不要堆砌晦涩公式,适合学生预习复习看;2、结构分为三块:【是什么】:简单讲这个知识点到底在学什么,核心概念;【学了能干什么】:这个知识点考试用来解决什么类型题目;【注意易错点】:考试最容易踩坑、丢分的地方,2‑4条;3、输出简洁精炼,不要长篇大论,文本适合前端页面直接展示,不要markdown复杂格式,不要多余开场白;4、语气亲和,面向高中生,不要太学术晦涩。"
         },
         ...recentMessages
           .filter(msg => !msg.isStreaming) // 过滤掉仍在流式传输的消息

+ 4 - 2
src/store/modules/target.js

@@ -2,14 +2,16 @@
 let state = {
   subjectList:JSON.parse(localStorage.getItem('student_subjectList') || '[]'),//顶部筛选的科目列表
   subjectCode:'',//顶部筛选的科目
+  subjectName:'',//顶部筛选的科目名称
   gradesList:JSON.parse(localStorage.getItem('student_gradesList') || '[]'),//顶部筛选的年级列表
   levelCode:localStorage.getItem('student_level_code'),  //当前学段  
 };
 // 同步
 let mutations = {
   //设置筛选数据  
-  SetFilterSubjectCode(state, data) {
-    state.subjectCode = data;
+  SetFilterSubjectCode(state, item) {
+    state.subjectCode = item.subjectCode;
+    state.subjectName=item.subjectName;
   },
 
   // 设置科目列表,同时写入localStorage

+ 33 - 0
src/styles/common.scss

@@ -11184,4 +11184,37 @@ body {
     line-height: 25px;
 
   }
+}
+
+.question_no_data
+{
+    width: 100%;
+    height: calc(100vh - 264px);
+    // background-image: url("../assets/bg/mark_bg.png");
+    background-size: 100% auto;
+    background-position: 10px 50%;
+    background-repeat: no-repeat;
+    display: flex;
+    align-items: center;
+    .no_data_content 
+    {
+        width: 100%;
+        height: 288px;
+        background-image: url("../assets/bg/no_content_bg.png");
+        background-size: 240px 160px;
+        background-position: 50% 40%;
+        background-repeat: no-repeat;
+        min-height: 150px;
+        position: relative;
+        .no_data_text {
+          
+          font-weight: 400;
+          font-size: 14px;
+          color: #999999;
+          line-height: 13px;
+          text-align: center;
+          
+          padding-top: 220px;
+        }
+      }
 }

+ 11 - 2
src/views/targetImprove/components/TargetSubject.vue

@@ -65,7 +65,11 @@ export default {
               this.filtersData[0].list = list;
               this.filtersData[0].value = list[0].value;
               this.$store.commit('target/SetLevelCode',res.data.levelCode)
-              this.$store.commit('target/SetFilterSubjectCode',list[0].value )  
+              let obj={
+                subjectCode:list[0].value,
+                subjectName:list[0].label
+              };
+              this.$store.commit('target/SetFilterSubjectCode',obj )  
           }
       });
         
@@ -77,7 +81,12 @@ export default {
     {
       this.filtersData[e.index].value = e.value;
       console.log("打印筛选组件数据",e);
-      this.$store.commit('target/SetFilterSubjectCode', e.value)
+      let subjectItem=this.filtersData[0].list.find(item=>item.value==e.value);
+      let obj={
+        subjectCode:subjectItem.value,
+        subjectName:subjectItem.label
+      };
+      this.$store.commit('target/SetFilterSubjectCode', obj)
     },
   },
 };

+ 8 - 5
src/views/targetImprove/consolidate/index.vue

@@ -55,7 +55,7 @@
   
         <div class="search_content">
           <div class="content_left">
-            <span class="left_title">错题详情</span>  <span>共50道题</span>
+            <span class="left_title">错题详情</span>  <span>共{{questionList.length}}道题</span>
           </div>
           <div class="content_right">
             <el-button type="primary" >导出PDF</el-button>
@@ -67,6 +67,11 @@
         <div class="question_item" v-for="(item, index) in questionList" :key="index">
           <QuestionItem :question="item" :index="index+1"></QuestionItem>
         </div>
+        <div class="question_no_data" v-if="questionList.length==0">
+          <div class="no_data_content">
+            <div class="no_data_text">暂无数据</div>
+          </div>
+        </div>
 
         <div class="page_jg_20">
 
@@ -89,9 +94,7 @@ export default {
   },
   data() {
     return {
-      questionList: [
-        {},{},{},{},{},{},{}
-      ],
+      questionList: [],//错题列表
       courseList:[],//科目列表
       grades:[],//选择的年纪
       // gradeList:[],//年级列表
@@ -175,7 +178,7 @@ export default {
         console.log('打印错题列表', res)
         if(res.code == 200)
         {
-          this.questionList = res.data.records || [{},{},{},{},{},{},{}];
+          this.questionList = res.data.records || [];
         }
       });
     },

+ 14 - 2
src/views/targetImprove/practice/practiceAnswer.vue

@@ -22,7 +22,7 @@
                   题量:{{ item?.questionNum || "0" }}
                 </div>
               </div>
-              <div class="ai_explain">
+              <div class="ai_explain" @click="OpenAi(item)">
                 <img class="ai_icon" src="@/assets/icon_ai.png" />
                 <span>AI讲解</span>
               </div>
@@ -172,8 +172,9 @@ export default {
     QuestionItem,
   },
   computed: {
-    ...mapState("target", ["subjectCode", "levelCode"]),
+    ...mapState("target", ["subjectCode", "levelCode","subjectName"]),
   },
+  inject: ['openAiRobot'],//注入Ai机器人组件调用方法
   data() {
     return {
       waitList: [], //待练习知识点
@@ -226,6 +227,17 @@ export default {
     GetUploadUrl(){
       this.uploadUrl = `${base.prefix}/api/v1/student_upload/oss/upload_filesSele`;
     },
+
+    //打开AI解读
+    OpenAi(item)
+    {
+      console.log("打开AI解读",item);
+      console.log("this.subjectName",this.subjectName);
+
+      let content = "科目:"+this.subjectName+",知识点:"+item.knowledgeName;
+      this.openAiRobot(content);
+    },
+
     //待练习知识点
     GetStudentTargeWaitExercise() {
       this.$api.target