lsc 5 ay önce
ebeveyn
işleme
9c7f099ada

+ 1 - 1
dist/index.html

@@ -32,7 +32,7 @@
       width: 100%;
       background: #e6eaf0;
       font-family: '黑体';
-    }</style><link href=./static/css/app.92fc15c5674f3229ff8e994cf5744006.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.571c38d63f24b1ae9e16.js></script><script type=text/javascript src=./static/js/vendor.8db9a3f753f5644e3c5e.js></script><script type=text/javascript src=./static/js/app.46667317cf727bb6b265.js></script></body></html><script>function stopSafari() {
+    }</style><link href=./static/css/app.186fb724f8c3aee87a7b3c2276c597cb.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.571c38d63f24b1ae9e16.js></script><script type=text/javascript src=./static/js/vendor.8db9a3f753f5644e3c5e.js></script><script type=text/javascript src=./static/js/app.c8907aabb0a360172132.js></script></body></html><script>function stopSafari() {
     //阻止safari浏览器双击放大功能
     let lastTouchEnd = 0  //更新手指弹起的时间
     document.documentElement.addEventListener("touchstart", function (event) {

Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 0
dist/static/css/app.186fb724f8c3aee87a7b3c2276c597cb.css


Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 0
dist/static/css/app.186fb724f8c3aee87a7b3c2276c597cb.css.map


Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 0
dist/static/js/app.c8907aabb0a360172132.js


Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 0
dist/static/js/app.c8907aabb0a360172132.js.map


Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 0
dist/static/js/manifest.571c38d63f24b1ae9e16.js.map


+ 58 - 28
src/components/pages/aiAddCourse/addCourse.vue

@@ -6898,7 +6898,7 @@
     </aiDialog>
     <tipsDialog :dialogVisibleTips.sync="dialogVisibleTips" :tipsJson.sync="tipsJson" :aiJson="aiJson" :userid="userid"
       @retrunCourse="retrunCourse" :templateid.sync="templateid" @addWork="addWork"></tipsDialog>
-    <aiCreateDialog :dialogVisibleAiCreate.sync="dialogVisibleAiCreate" :courseName="courseName" @createAiPpt="createAiPpt" :infoData="infoData" :courseTypeId="courseTypeId" :CourseTypeJson="CourseTypeJson" :courseState="courseState" :lineCount="lineCount" :unitJson="unitJson"></aiCreateDialog>
+    <aiCreateDialog :languageSetting="languageSetting" :dialogVisibleAiCreate.sync="dialogVisibleAiCreate" :courseName="courseName" @createAiPpt="createAiPpt" :infoData="infoData" :courseTypeId="courseTypeId" :CourseTypeJson="CourseTypeJson" :courseState="courseState" :lineCount="lineCount" :unitJson="unitJson"></aiCreateDialog>
     <aiCreateVideoDialog :dialogVisibleAiCreateVideo.sync="dialogVisibleAiCreateVideo" :courseName="courseName" @createAiVideo="createAiVideo" :courseState="courseState" :lineCount="lineCount" :unitJson="unitJson"></aiCreateVideoDialog>
     <wpdf :dialogVisiblePdf.sync="dialogVisiblePdf" :url="wurl"></wpdf>
     <wOffice :dialogVisibleOffice.sync="dialogVisibleOffice" :url="wurl" ></wOffice>
@@ -17184,9 +17184,28 @@ ${(this.templateid == "4480d65a-1e48-11ef-bee5-005056b86db5" || this.templateid
       } else if (this.aitype == "aiTask3") {
         if(this.aiCallBack[0] == 'all'){
           for(var _task = 0; _task < this.unitJson[0].chapterInfo[0].taskJson.length; _task++){
-            let message1 = `NOTICE
+            if(!this.taskGLoading[_task]){
+              this.taskGLoading[_task] = []
+            }
+            this.taskGLoading[_task][0] = true
+            this.taskGLoading[_task][1] = true
+            // this.taskGLoading[_task][2] = true
+
+            // this.aiGetG323(message3, _task)
+          }
+
+          let ij = 0;
+          let _this = this
+          function processNext() {
+            if (ij < _this.unitJson[0].chapterInfo[0].taskJson.length) {
+              if(!_this.taskGLoading[ij][0]){
+                ij++;
+                processNext();
+                return;
+              }
+              let message1 = `NOTICE
 Role: 你是一名教师,你正在使用一个在线学习平台来教授学生,你已经完成了教案,你现在需要将教案变为学生上课用的任务单(work sheet)。该在线学习平台为每个任务提供了资源区(视频,ppt,阅读资料将放在这里),多种互动工具(学生点击工具即可上传他们的作业或者回答,这些互动工具类似kahoot一样允许教师轻松收集,统计,追踪学生作业),以及和任务绑定的目标和评价系统。
-Language: ${this.getLang()}
+Language: ${_this.getLang()}
 ATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced "Format example".
 Instruction: Based on the context, follow "Format example", write content.
 
@@ -17196,7 +17215,7 @@ ${msg}
  
 
 ## 参考资料
-教学任务教案:${this.unitJson[0].chapterInfo[0].taskJson[_task].taskDetail3.replaceAll('#','').replaceAll('*','').replaceAll('-','').replaceAll('\n','')}
+教学任务教案:${_this.unitJson[0].chapterInfo[0].taskJson[ij].taskDetail3.replaceAll('#','').replaceAll('*','').replaceAll('-','').replaceAll('\n','')}
 
 # 输出格式与要求
 任务描述(告诉学生他们需要做什么):
@@ -17210,7 +17229,7 @@ ${msg}
  
 let message2 = `NOTICE
 Role: 你是一名教师,你正在使用一个在线学习平台来教授学生,你已经完成了教案,你现在需要将教案变为学生上课用的任务单(work sheet)。该在线学习平台为每个任务提供了资源区(视频,ppt,阅读资料将放在这里),多种互动工具(学生点击工具即可上传他们的作业或者回答,这些互动工具类似kahoot一样允许教师轻松收集,统计,追踪学生作业),以及和任务绑定的目标和评价系统。
-Language: ${this.getLang()}
+Language: ${_this.getLang()}
 ATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced "Format example".
 Instruction: Based on the context, follow "Format example", write content.
 
@@ -17220,27 +17239,27 @@ ${msg2}
  
 
 ## 参考资料
-教学任务教案:${this.unitJson[0].chapterInfo[0].taskJson[_task].taskDetail3.replaceAll('#','').replaceAll('*','').replaceAll('-','').replaceAll('\n','')}
+教学任务教案:${_this.unitJson[0].chapterInfo[0].taskJson[ij].taskDetail3.replaceAll('#','').replaceAll('*','').replaceAll('-','').replaceAll('\n','')}
 
 # 输出格式与要求
 互动工具列表
-工具名:${this.languageSetting == 2 ? 'Diagram Tool' : '表格'}
+工具名:${_this.languageSetting == 2 ? 'Diagram Tool' : '表格'}
 工具指引:同学们,在完成本次STEM小车实验时,我们需要使用表格工具来记录和整理实验数据。表格工具就像一个电子版的记录本,它不仅可以帮助我们准确记录数据,还能自动计算和生成图表,方便我们分析实验结果。在第一行,每个单元格中输入我们要记录的变量名称,比如“时间(秒)”、“距离(米)”、“速度(米/秒)”等。接下来,在实验中,我们会把每次测试的结果依次填入相应的单元格中。记得每一行代表一次完整的实验测试哦。
 
-工具名:${this.languageSetting == 2 ? 'Document tool' : '文档'}
+工具名:${_this.languageSetting == 2 ? 'Document tool' : '文档'}
 工具指引:在实验数据整理好之后,我们接下来要用文档工具撰写实验报告。这份报告不仅是对我们实验的总结,也是展示我们分析和思考能力的好机会。文档工具就像一本电子笔记本,可以帮助我们把想法和数据清晰地展示出来。该份实验报告需要包括以下内容:1.实验背景: 简单介绍实验的目的,比如“我们这次实验的目的是通过小车演示,理解速度和加速度的关系”。用简洁的语言说明你为什么要做这个实验。\n2.实验方法: 详细描述你是如何进行实验的,包括实验步骤和使用的工具。例如,你可以写“我们将小车放在一个倾斜的平面上,记录它在不同时间间隔下的距离”。\n 3.数据分析: 这部分是核心内容。你可以将表格工具生成的图表插入到文档中,并解释图表显示的结果。例如,你可以写“从图表中可以看出,随着时间的增加,小车的速度逐渐加快,这说明……”。\n 4.结论与建议: 最后,总结你在实验中得出的结论,比如“小车在光滑表面上的加速度较大”,并提出一些改进实验或进一步研究的建议。
 
-工具名称:${this.languageSetting == 2 ? 'Choice tool' : '选择题'}
+工具名称:${_this.languageSetting == 2 ? 'Choice tool' : '选择题'}
 工具指引:同学们,老师想要考察一下你对“热传递”这一概念的理解和掌握程度。请仔细阅读每个问题,并给出准确的答案哦~
 
-${this.languageSetting == 2 ? '还有以下工具:Mind Map Tool、Spreadsheet tool、Q&A Tool' : ''}
+${_this.languageSetting == 2 ? '还有以下工具:Mind Map Tool、Spreadsheet tool、Q&A Tool' : ''}
 
 # Format example
 {"toolChoose":[{"tool":"工具名","detail":"工具描述"},{"tool":"工具名","detail":"工具描述"}]}`
 
 let message3 = `NOTICE
 Role: 你是一名教师,你正在使用一个在线学习平台来教授学生,你已经完成了教案,你现在需要将教案变为学生上课用的任务单(work sheet)。该在线学习平台为每个任务提供了资源区(视频,ppt,阅读资料将放在这里),多种互动工具(学生点击工具即可上传他们的作业或者回答,这些互动工具类似kahoot一样允许教师轻松收集,统计,追踪学生作业),以及和任务绑定的目标和评价系统。
-Language: ${this.getLang()}
+Language: ${_this.getLang()}
 ATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced "Format example".
 Instruction: Based on the context, follow "Format example", write content.
 
@@ -17250,7 +17269,7 @@ ${msg3}
  
 
 ## 参考资料
-教学任务教案:${this.unitJson[0].chapterInfo[0].taskJson[_task].taskDetail3.replaceAll('#','').replaceAll('*','').replaceAll('-','').replaceAll('\n','')}
+教学任务教案:${_this.unitJson[0].chapterInfo[0].taskJson[ij].taskDetail3.replaceAll('#','').replaceAll('*','').replaceAll('-','').replaceAll('\n','')}
 
 # 输出格式与要求
 核心素养:从教案中提取
@@ -17260,17 +17279,20 @@ ${msg3}
 # Format example
 {"elist":[{"value":"目标","detail":"评价标准",target:"核心素养","score":5},{"value":"目标","detail":"评价标准",target:"核心素养","score":5},{"value":"目标","detail":"评价标准",target:"核心素养","score":5}]}`
 
-
-            if(!this.taskGLoading[_task]){
-              this.taskGLoading[_task] = []
+              _this.aiGetG321(message1, ij, (callback2) => {
+                _this.aiGetG322(message2, ij, callback2);
+              }, () => {
+                // 回调函数,当前任务完成后执行
+                ij++;
+                processNext(); // 处理下一个任务
+              });
             }
-            this.taskGLoading[_task][0] = true
-            this.taskGLoading[_task][1] = true
-            // this.taskGLoading[_task][2] = true
-            this.aiGetG321(message1, _task)
-            this.aiGetG322(message2, _task)
-            // this.aiGetG323(message3, _task)
           }
+
+          processNext(); // 启动处理
+
+
+
         }else{
           let message1 = `NOTICE
 Role: 你是一名教师,你正在使用一个在线学习平台来教授学生,你已经完成了教案,你现在需要将教案变为学生上课用的任务单(work sheet)。该在线学习平台为每个任务提供了资源区(视频,ppt,阅读资料将放在这里),多种互动工具(学生点击工具即可上传他们的作业或者回答,这些互动工具类似kahoot一样允许教师轻松收集,统计,追踪学生作业),以及和任务绑定的目标和评价系统。
@@ -17354,8 +17376,9 @@ ${msg3}
           this.taskGLoading[this.aiCallBack[0]][0] = true
           this.taskGLoading[this.aiCallBack[0]][1] = true
           // this.taskGLoading[this.aiCallBack[0]][2] = true
-          this.aiGetG321(message1, this.aiCallBack[0])
-          this.aiGetG322(message2, this.aiCallBack[0])
+          this.aiGetG321(message1, this.aiCallBack[0], () => {
+            this.aiGetG322(message2, this.aiCallBack[0])
+          })
           // this.aiGetG323(message3, this.aiCallBack[0])
         }
         this.aiCallBack[1] ? this.aiCallBack[1]() : ''
@@ -18215,11 +18238,16 @@ ${this.courseText && this.aiCallBack[0] == 2 ? '注意,优化原有的<参考
         if(this.taskGLoading[index] && this.taskGLoading[index][0]){
           this.taskGLoading[index][0] = false
         }
+        setTimeout(() => {
+          if(!(this.taskCancelToken2 && this.taskCancelToken2[index])){
+            this.cancelAjax('aiTaskGL2', index)
+          }
+        }, 1000)
         this.$forceUpdate()
       }
       
       if(type == 'aiTaskGL2'){
-        this.$message.success("已经成功停止生成任务概述")
+        this.$message.success("已经成功停止生成任务工具")
         if(this.taskCancelToken2 && this.taskCancelToken2[index]){
           this.taskCancelToken2[index].cancel('Request canceled by the user.');
           this.taskCancelToken2[index] = null;
@@ -19362,7 +19390,7 @@ ${this.courseText && this.aiCallBack[0] == 2 ? '注意,优化原有的<参考
           console.log(error);
         });
     },
-    async aiGetG321(messages, index) {
+    async aiGetG321(messages, index, callback, callback2) {
       let _this = this
 
       let fileid = _this.isFileSearch ? [..._this.fileIds] : []
@@ -19431,20 +19459,21 @@ ${this.courseText && this.aiCallBack[0] == 2 ? '注意,优化原有的<参考
             _this.createTeacherAn(index);
           }
           
-          // callback ? callback() : ''
+          callback ? callback(callback2) : ''
           _this.taskGLoading[index][0] = false
           _this.taskCancelToken1[index] = null
           _this.$forceUpdate();
         })
         .catch((error) => {
           // _this.loading = false
+          callback ? callback(callback2) : ''
           _this.taskGLoading[index][0] = false
           _this.taskCancelToken1[index] = null
           _this.$forceUpdate();
           console.log(error);
         });
     },
-    async aiGetG322(messages, index) {
+    async aiGetG322(messages, index, callback) {
       let _this = this
 
       let fileid = _this.isFileSearch ? [..._this.fileIds] : []
@@ -19592,13 +19621,14 @@ ${this.courseText && this.aiCallBack[0] == 2 ? '注意,优化原有的<参考
             })
           }
           
-          // callback ? callback() : ''
+          callback ? callback() : ''
           _this.taskGLoading[index][1] = false
           _this.taskCancelToken2[index] = null
           _this.$forceUpdate();
         })
         .catch((error) => {
           // _this.loading = false
+          callback ? callback() : ''
           _this.taskGLoading[index][1] = false
           _this.taskCancelToken2[index] = null
           _this.$forceUpdate();

+ 15 - 9
src/components/pages/aiAddCourse/aiBoxRight.vue

@@ -774,10 +774,10 @@ ATTENTION: Use '##' to SPLIT SECTIONS, not '#'.Output format carefully reference
         this.faloading = true;
         if (_atRoleList.length > 0) {
           //有@角色
-          let _replaceText = `Language: ${this.getLang()}
-            Language: ${this.getLang()}
-            Language: ${this.getLang()}
-            ${message}`;
+          let _replaceText = `NOTICE
+Language: ${this.getLang()}
+
+${message}`;
           let _htmlText = message;
           _atRoleList.forEach(_i => {
             _replaceText = _replaceText.replaceAll(`@${_i.assistantName}`, ``);
@@ -878,7 +878,13 @@ ATTENTION: Use '##' to SPLIT SECTIONS, not '#'.Output format carefully reference
               if (i.content)
                 history.push({
                   role: "user",
-                  content: index == this.array.length - 1 ? message : i.content
+                  content: index == this.array.length - 1 ? `NOTICE
+Language: ${this.getLang()}
+
+${message}` : `NOTICE
+Language: ${this.getLang()}
+
+${i.content}`
                 });
               if (i.aiContent)
                 history.push({ role: "assistant", content: i.aiContent });
@@ -894,10 +900,10 @@ ATTENTION: Use '##' to SPLIT SECTIONS, not '#'.Output format carefully reference
 
           history = history.map(i => ({
             role: i.role,
-            content: `Language: ${this.getLang()}
-            Language: ${this.getLang()}
-            Language: ${this.getLang()}
-            ${i.content}`
+            content: `NOTICE
+Language: ${this.getLang()}
+
+${i.content}`
           }));
           this.$nextTick(() => {
             this.$refs.chatDialog.scrollTop = this.$refs.chatDialog.scrollHeight;

+ 29 - 4
src/components/pages/aiAddCourse/aiCreateDialog.vue

@@ -45,6 +45,12 @@
 import Pptxgen from "pptxgenjs";
 import wOffice from "../components/wOffice.vue";
 import { v4 as uuidv4 } from "uuid";
+var OpenCC = require("opencc-js");
+
+let converter2 = OpenCC.Converter({
+		from:'cn',
+		to:'hk'
+})
 
 export default {
     components: {
@@ -79,6 +85,10 @@ export default {
         },
         unitJson: {
             type: Array,
+        },
+        languageSetting: {
+            type: Number,
+            default: 0,
         }
     },
     // 根据用户给你的参考资料
@@ -834,6 +844,17 @@ export default {
         },
     },
     methods: {
+        getLang(){
+            let lang = ''
+            if(this.languageSetting == 0){
+                lang = 'Chinese.'
+            }else if(this.languageSetting == 1){
+                lang = 'Traditional Chinese.'
+            }else if(this.languageSetting == 2){
+                lang = 'English.'
+            }
+            return lang
+        },
         cancelAjax(){
             this.$message.success("已经成功停止")
             this.stopPpt.cancel('Request canceled by the user.');
@@ -942,7 +963,7 @@ export default {
                 message = `NOTICE
 Role: 你是ppt内容设计大师,能力是从用户提供的文件资料中提取最重要的学科概念作为ppt参考内容,最后根据Context要求的流程要求输出ppt内容。
 Output: Provide your output in json format.
-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.
+Language: ${this.getLang()}
 ATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced "Format example".
 Instruction: Based on the context, follow "Format example", write content.
 
@@ -966,7 +987,9 @@ ${_this.outline.replaceAll('#', '').replaceAll('*', '').replaceAll('-', '').repl
 [{"page": "页码(数字)","title": "学科概念(请从给你的大纲中摘取)(标题)","task": "知识点(请从给你的大纲中摘取)(子标题)","points": "内容:用亲切的口吻告诉学生本步骤应做什么?或者是用亲切的口吻向学生介绍知识点,多条时可使用bullet point;或者是给学生测试题。"}]`;
             } else {
                 if (this.courseState == 4) {
-                    message = `# 任务
+                    message = `NOTICE Language: ${this.getLang()}
+
+# 任务
 请根据参考资料,生成关于${this.courseName},为教师生成这节课的教学ppt的大纲,大纲的主要内容课程知识点的讲解与相关练习和测试。你的输出应该符合#输出格式
 
 ${mclass.length ? "#参考资料\n面向年级:" + mclass.join(",") : ""}
@@ -980,7 +1003,9 @@ ${mclass.length ? "#参考资料\n面向年级:" + mclass.join(",") : ""}
 - 你不能输出错误的知识,如果你实在不清楚,输出“对不起,我不确定”
 - 你不能输出违反伦理的内容`;
                 } else if (this.courseState == 5) {
-                    message = `# 任务
+                    message = `NOTICE Language: ${this.getLang()}
+
+# 任务
 请根据<任务教案>,为教师生成本的教学ppt的大纲,大纲包含各环节的步骤,学科知识点。
 
 # 参考资料
@@ -1044,7 +1069,7 @@ ${mclass.length ? "面向年级:" + mclass.join(",") : ""}
                     type == 1
                         ? "6063369f-289a-11ef-8bf4-12e77c4cb76b"
                         : "f8e1ebb2-2e0d-11ef-8bf4-12e77c4cb76b",
-                message: [{ type: "text", text: message.replaceAll('\n', " ") }],
+                message: [{ type: "text", text:this.languageSetting == 1 ? converter2(message.replaceAll('\n', " ")) : message.replaceAll('\n', " ")  }],
                 session_name: uuidv4(),
                 userId: this.userid,
                 file_ids: fileid.length ? [...fileid] : "",

+ 50 - 44
src/components/pages/synergyCourse/addCourse.vue

@@ -1749,54 +1749,56 @@
       </span>
     </el-dialog> -->
     <el-dialog title="添加协同成员" :visible.sync="dialogVisibleMember" :append-to-body="true" width="25%" height="80%"
-      :before-close="handleClose" class="addNewPP customWidth">
-      <div class="people">
-        <div class="people_top">
-          <div class="people_top_right">
-            <div class="people_search">
-              <el-input placeholder="搜索完整的姓名/账号(不含邮箱后缀)" v-model="searchTN" @keyup.enter.native="getTeacher"></el-input>
-              <div class="search_img" @click="getTeacher">
-                <img src="../../../assets/icon/search.png" alt />
+      :before-close="handleClose" class="addNewPP customWidth" >
+      <div v-loading="teacherLoading">
+        <div class="people">
+          <div class="people_top">
+            <div class="people_top_right">
+              <div class="people_search">
+                <el-input placeholder="搜索完整的姓名/账号(不含邮箱后缀)" v-model="searchTN" @keyup.enter.native="getTeacher"></el-input>
+                <div class="search_img" @click="getTeacher">
+                  <img src="../../../assets/icon/search.png" alt />
+                </div>
               </div>
             </div>
+            <div class="people_nav">选择成员</div>
           </div>
-          <div class="people_nav">选择成员</div>
-        </div>
-        <div class="t_j_box" style="
-            padding: 20px 0 0 25px;
-            width: calc(100% - 55px);
-            margin-left: 25px;
-          ">
-          <span>姓名</span>
-          <span>身份</span>
-          <span>账号</span>
-          <span>学校</span>
+          <div class="t_j_box" style="
+              padding: 20px 0 0 25px;
+              width: calc(100% - 55px);
+              margin-left: 25px;
+            ">
+            <span>姓名</span>
+            <span>身份</span>
+            <span>账号</span>
+            <span>学校</span>
+          </div>
+          <div style="margin-left:25px;">
+            <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange" style="display: flex;align-items: center;">全选</el-checkbox>
+          </div>
+          <el-checkbox-group v-model="checkboxList3" @change="handleCheckedTeacherJuriChange" class="people_name" v-if="teacherJuri.length">
+            <el-checkbox v-for="item in teacherJuri" :key="item.userid" :label="item.userid">
+              <div class="t_j_box">
+                <el-tooltip placement="top" :content="item.name ? item.name : '暂无姓名'">
+                  <span>{{ item.name ? item.name : "暂无姓名" }}</span>
+                </el-tooltip>
+                <span>{{ item.type == "1" ? "老师" : "学生" }}</span>
+                <el-tooltip placement="top" :content="item.username">
+                  <span>{{ item.username }}</span>
+                </el-tooltip>
+                <el-tooltip placement="top" :content="item.school">
+                  <span>{{ item.school }}</span>
+                </el-tooltip>
+              </div>
+            </el-checkbox>
+          </el-checkbox-group>
+          <div style="text-align: center; margin-top: 10px" v-else>暂无数据</div>
         </div>
-        <div style="margin-left:25px;">
-          <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange" style="display: flex;align-items: center;">全选</el-checkbox>
+        <div style="margin-top: 10px;" >
+          <el-pagination background layout="prev, pager, next" :page-size="pageSize" :total="total"
+            v-if="page && teacherJuri.length" style="padding-bottom: 20px"
+            @current-change="handleCurrentChange"></el-pagination>
         </div>
-        <el-checkbox-group v-model="checkboxList3" @change="handleCheckedTeacherJuriChange" class="people_name" v-if="teacherJuri.length">
-          <el-checkbox v-for="item in teacherJuri" :key="item.userid" :label="item.userid">
-            <div class="t_j_box">
-              <el-tooltip placement="top" :content="item.name ? item.name : '暂无姓名'">
-                <span>{{ item.name ? item.name : "暂无姓名" }}</span>
-              </el-tooltip>
-              <span>{{ item.type == "1" ? "老师" : "学生" }}</span>
-              <el-tooltip placement="top" :content="item.username">
-                <span>{{ item.username }}</span>
-              </el-tooltip>
-              <el-tooltip placement="top" :content="item.school">
-                <span>{{ item.school }}</span>
-              </el-tooltip>
-            </div>
-          </el-checkbox>
-        </el-checkbox-group>
-        <div style="text-align: center; margin-top: 10px" v-else>暂无数据</div>
-      </div>
-      <div style="margin-top: 10px;">
-        <el-pagination background layout="prev, pager, next" :page-size="pageSize" :total="total"
-          v-if="page && teacherJuri.length" style="padding-bottom: 20px"
-          @current-change="handleCurrentChange"></el-pagination>
       </div>
       <span slot="footer" class="dialog-footer">
         <el-button @click="page = 0;dialogVisibleMember = false;">取 消</el-button>
@@ -2946,10 +2948,11 @@ export default {
       imageList: [],
       heightPx: '100%',
       toolsData: JSON.parse(converter(JSON.stringify(toolsData))),
-      pageSize: 20,
+      pageSize: 200,
       total: 0,
       page: 0,
       isLoading2: false,
+      teacherLoading: false,
     };
   },
   directives: {
@@ -4682,6 +4685,7 @@ export default {
         });
     },
     getTeacher() {
+      this.teacherLoading = true;
       let params = {
         org:
           this.org && this.org != "undefined" && this.org != "null"
@@ -4712,8 +4716,10 @@ export default {
             }
           }
           this.teacherJuri = teacherJuri;
+          this.teacherLoading = false;
         })
         .catch((err) => {
+          this.teacherLoading = false;
           console.error(err);
         });
     },

+ 9 - 0
src/components/pages/test/dataCom/cascader.vue

@@ -143,14 +143,23 @@ export default {
             this.show = false
         },
         selectOption(option) {
+            if(this.checkF == option.id){
+                return
+            }
             console.log(option);
             this.checkF2 = '';
             this.teacher = []
             this.checkF = option.id;
             this.children = option.child;
+            if(option.child.length){
+                this.selectOption2(option.child[0])
+            }
             this.$forceUpdate();
         },
         selectOption2(option) {
+            if(this.checkF2 == option.id){
+                return
+            }
             this.checkF2 = option.id;
             this.teacher = []
             this.loading = true

+ 28 - 8
src/components/pages/test/dataCom/radarZong.vue

@@ -117,6 +117,8 @@ export default {
                         value: option.xdata2,
                         name: '平均得分率'
                     }
+                }else {
+                    this.option.series[0].data[1] = []
                 }
                 // this.option.series[0].data[0].value = option.xdata;
                 // 初始化雷达图
@@ -125,21 +127,36 @@ export default {
             });
         },
         setArray(array, type) {
-            this.ooption.sdata = Object.keys(array).map((item) => {
-                return {
-                    name: item,
-                    max: 100,
-                };
-            });
+            if(Object.keys(array).length){
+                this.ooption.sdata =  Object.keys(array).map((item) => {
+                    return {
+                        name: item,
+                        max: 100,
+                    };
+                });
+            }else if(this.evCourseArray.length){
+                this.ooption.sdata =  Object.keys(this.evCourseArray).map((item) => {
+                    return {
+                        name: item,
+                        max: 100,
+                    };
+                });
+                this.ooption.xdata = Object.keys(this.evCourseArray).map((item) => {
+                    return array[item].cogScore;
+                })
+                this.ooption.xdata2 = []
+            }
             if (type == 1) {
                 this.ooption.xdata = Object.keys(array).map((item) => {
                     return array[item].cogScore;
                 })
+                this.ooption.xdata2 = []
             }
             if (type == 2) {
-                this.ooption.xdata2 = Object.keys(array).map((item) => {
+
+                this.ooption.xdata2 = Object.keys(array).length ? Object.keys(array).map((item) => {
                     return array[item].cogScore;
-                })
+                }) : []
             }
             if (!this.chartObj) {
                 this.setChart(this.ooption);
@@ -176,6 +193,8 @@ export default {
                         value: this.ooption.xdata2,
                         name: '平均得分率'
                     }
+                }else {
+                    this.option.series[0].data[1] = []
                 }
                 this.chartObj.setOption(this.option);
             }
@@ -203,6 +222,7 @@ export default {
             handler(newValue, oldValue) {
                 this.ooption.xdata2 = [];
                 this.setArray(newValue, 2)
+                console.log(2222222222222222);
                 this.$forceUpdate();
             },
         },

+ 15 - 6
src/components/pages/test/databoard.vue

@@ -53,15 +53,15 @@
 
             </div>
             <div class="randarZong">
-                <radarZong :evCourseArray="zongJson" :evCourseArray2="zongJson2" v-if="teacherArray.length"></radarZong>
-                <radarZong :evCourseArray="zongJson" v-else></radarZong>
+                <radarZong :evCourseArray="zongJson" :evCourseArray2="zongJson2" v-if="checkSet"></radarZong>
+                <radarZong :evCourseArray="zongJson2" :evCourseArray2="{}" v-else></radarZong>
             </div>
             <div class="randarBox">
                 <div class="title">教师详情</div>
                 <div class="randarTeacher" v-for="(item, index) in tableData" :key="index">
                     <div class="randarTitle">
                         <span>{{ item.username }}</span>
-                        <span>{{ getScore(item.json) }}</span>
+                        <span>{{ item.score }}</span>
                     </div>
                     <div class="randar">
                         <radarTeacher :evCourseArray="zongJson2" :evCourseArray2="item.json"></radarTeacher>
@@ -221,7 +221,12 @@ export default {
                         zongJson[zongArray[i]].cogScore = (zongJson[zongArray[i]].cogScore / data.length).toFixed(0)
                     }
 
-                    this.tableData = _data;
+                    this.tableData = _data
+                        .filter((e) => {
+                            e.score = this.getScore(e.json);
+                            return e;
+                        })
+                        .sort((a, b) => b.score - a.score);
                     console.log(this.tableData);
                     this.zongJson = zongJson
                     this.zongJson2 = zongJson
@@ -247,7 +252,7 @@ export default {
             let checkSet = this.checkSet
             let _data = []
             let zongJson = {}
-            let data = this.data
+            let data = JSON.parse(JSON.stringify(this.data))
             if(this.teacherArray.length){
                 data = data.filter((e) => {
                     return this.teacherArray.includes(e.userid)
@@ -301,7 +306,11 @@ export default {
                 zongJson[zongArray[i]].evaScore = (zongJson[zongArray[i]].evaScore / data.length).toFixed(0)
                 zongJson[zongArray[i]].cogScore = (zongJson[zongArray[i]].cogScore / data.length).toFixed(0)
             }
-            this.tableData = _data;
+            this.tableData = _data.filter((e) => {
+                e.score = this.getScore(e.json);
+                return e;
+            })
+            .sort((a, b) => b.score - a.score);
             console.log(this.tableData);
             this.zongJson2 = zongJson
             console.log(zongJson);

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor