소스 검색

Merge branch 'beta' of https://git.cocorobo.cn/CocoRoboLabs/pbl-teacher-table into beta

SanHQin 1 년 전
부모
커밋
dfe9d45805
30개의 변경된 파일480개의 추가작업 그리고 127개의 파일을 삭제
  1. 1 1
      dist/index.html
  2. 0 0
      dist/static/css/app.3642dc61e8cabacb9563c73f7ef5aaf9.css
  3. 0 0
      dist/static/css/app.3642dc61e8cabacb9563c73f7ef5aaf9.css.map
  4. BIN
      dist/static/img/model1-1.2fc4af6.png
  5. BIN
      dist/static/img/model1-2.da48629.png
  6. BIN
      dist/static/img/model2-1.8ad6cb8.png
  7. BIN
      dist/static/img/model2-2.8ab1c6a.png
  8. BIN
      dist/static/img/model3-1.f3a0951.png
  9. BIN
      dist/static/img/model3-2.ae0e676.png
  10. BIN
      dist/static/img/model4-1.aace97d.png
  11. BIN
      dist/static/img/model4-2.3808468.png
  12. BIN
      dist/static/img/model5-1.fdea1d0.png
  13. BIN
      dist/static/img/model5-2.96b6109.png
  14. 0 0
      dist/static/js/app.0b6b79e4bb7fbbf7d529.js
  15. 0 0
      dist/static/js/app.0b6b79e4bb7fbbf7d529.js.map
  16. 0 0
      dist/static/js/manifest.571c38d63f24b1ae9e16.js.map
  17. BIN
      src/assets/icon/ppt/model1-1.png
  18. BIN
      src/assets/icon/ppt/model1-2.png
  19. BIN
      src/assets/icon/ppt/model2-1.png
  20. BIN
      src/assets/icon/ppt/model2-2.png
  21. BIN
      src/assets/icon/ppt/model3-1.png
  22. BIN
      src/assets/icon/ppt/model3-2.png
  23. BIN
      src/assets/icon/ppt/model4-1.png
  24. BIN
      src/assets/icon/ppt/model4-2.png
  25. 96 36
      src/components/pages/aiAddCourse/addCourse.vue
  26. 143 54
      src/components/pages/aiAddCourse/aiCreateDialog.vue
  27. 1 1
      src/components/pages/aiAddCourse/aiCreateVideoDialog.vue
  28. 164 5
      src/components/pages/test/examine/conpoments/personPage.vue
  29. 26 4
      src/components/pages/test/examine/conpoments/targetPage.vue
  30. 49 26
      src/components/pages/testPerson/examine/index.vue

+ 1 - 1
dist/index.html

@@ -32,7 +32,7 @@
       width: 100%;
       background: #e6eaf0;
       font-family: '黑体';
-    }</style><link href=./static/css/app.5084b426060481646e5988ec5efdba39.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.d5f0d79dbb0d92c052d4.js></script><script type=text/javascript src=./static/js/app.06b30b2ce84ecc895b51.js></script></body></html><script>function stopSafari() {
+    }</style><link href=./static/css/app.3642dc61e8cabacb9563c73f7ef5aaf9.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.d5f0d79dbb0d92c052d4.js></script><script type=text/javascript src=./static/js/app.0b6b79e4bb7fbbf7d529.js></script></body></html><script>function stopSafari() {
     //阻止safari浏览器双击放大功能
     let lastTouchEnd = 0  //更新手指弹起的时间
     document.documentElement.addEventListener("touchstart", function (event) {

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/static/css/app.3642dc61e8cabacb9563c73f7ef5aaf9.css


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/static/css/app.3642dc61e8cabacb9563c73f7ef5aaf9.css.map


BIN
dist/static/img/model1-1.2fc4af6.png


BIN
dist/static/img/model1-2.da48629.png


BIN
dist/static/img/model2-1.8ad6cb8.png


BIN
dist/static/img/model2-2.8ab1c6a.png


BIN
dist/static/img/model3-1.f3a0951.png


BIN
dist/static/img/model3-2.ae0e676.png


BIN
dist/static/img/model4-1.aace97d.png


BIN
dist/static/img/model4-2.3808468.png


BIN
dist/static/img/model5-1.fdea1d0.png


BIN
dist/static/img/model5-2.96b6109.png


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/static/js/app.0b6b79e4bb7fbbf7d529.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/static/js/app.0b6b79e4bb7fbbf7d529.js.map


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
dist/static/js/manifest.571c38d63f24b1ae9e16.js.map


BIN
src/assets/icon/ppt/model1-1.png


BIN
src/assets/icon/ppt/model1-2.png


BIN
src/assets/icon/ppt/model2-1.png


BIN
src/assets/icon/ppt/model2-2.png


BIN
src/assets/icon/ppt/model3-1.png


BIN
src/assets/icon/ppt/model3-2.png


BIN
src/assets/icon/ppt/model4-1.png


BIN
src/assets/icon/ppt/model4-2.png


+ 96 - 36
src/components/pages/aiAddCourse/addCourse.vue

@@ -13222,16 +13222,7 @@ ${this.templatePan.includes(this.templateid) ? '课程节数:'+this.courseJie+
 ${this.templatePan.includes(this.templateid) ? '课程时长:'+this.courseTime+'min' : ''}
 
 # Format example
-[
-        {
-          "task": "任务名称1",
-          "detail": "任务设计和评价标准"
-        },
-        {
-          "task": "任务名称2",
-          "detail": "任务设计和评价标准"
-        }
-]`
+[{"task": "任务名称1","detail": "任务设计和评价标准"},{"task": "任务名称2","detail": "任务设计和评价标准"}]`
 
         this.aiGet2(message, () => {
           this.loading = false
@@ -13309,16 +13300,7 @@ ${this.templateid == "4480d65a-1e48-11ef-bee5-005056b86db5" ? '## 目标层\n'+t
 
 
 ## Format example
-[
-  {
-    "task": "任务名称1",
-    "detail": "教案输出为文本格式就行"
-  },
-  {
-      "task": "任务名称2",
-      "detail": "教案输出为文本格式就行"
-  }
-]`
+[{"task": "任务名称1","detail": "教案输出为文本格式就行"},{"task": "任务名称2","detail": "教案输出为文本格式就行"}]`
         this.aiGet4(message, () => {
           this.loading = false
           this.isOutline2 = true
@@ -13651,7 +13633,26 @@ ${message} 以及##参考资料 以文本格式输出项目概况,驱动性问
           let data = response.data.FunctionResponse
           if (data.message) {
             console.log(data.message);
-            let dArray = JSON.parse(data.message.replaceAll('```json','').replaceAll('```',''))
+            let dArray = {}
+            try {
+              dArray = JSON.parse(data.message.replaceAll('```json','').replaceAll('```',''))
+            } catch (error) {
+                console.log("error_________________" + error);
+              try {
+                  let regex = new RegExp("(?<=```json)([\\s\\S]*?)(?=```)");
+                  let match = data.message.match(regex);
+                  dArray = JSON.parse(match[0]);
+
+
+                  // var message = data.message;
+                  // var jsonStart = message.indexOf("```json") + 7; // `+ 7` 是为了跳过 ```json
+                  // var jsonEnd = message.indexOf("```", jsonStart);
+                  // var jsonString = message.substring(jsonStart, jsonEnd).trim();
+                  // dArray = JSON.parse(jsonString);
+              } catch (error) {
+                console.log("error_________________" + error);
+              }
+            }
             _this.dArray = dArray
             _this.unitJson[0].chapterInfo[0].taskJson = []
 
@@ -13863,7 +13864,25 @@ ${message} 以及##参考资料 以文本格式输出项目概况,驱动性问
           let data = response.data.FunctionResponse
           if (data.message) {
             console.log(data.message);
-            let tArray = JSON.parse(data.message.replaceAll('```json','').replaceAll('```',''))
+            let tArray = {}
+            try {
+              tArray = JSON.parse(data.message.replaceAll('```json','').replaceAll('```',''))
+            } catch (error) {
+                console.log("error_________________" + error);
+              try {
+                  let regex = new RegExp("(?<=```json)([\\s\\S]*?)(?=```)");
+                  let match = data.message.match(regex);
+                  tArray = JSON.parse(match[0]);
+
+                  // var message = data.message;
+                  // var jsonStart = message.indexOf("```json") + 7; // `+ 7` 是为了跳过 ```json
+                  // var jsonEnd = message.indexOf("```", jsonStart);
+                  // var jsonString = message.substring(jsonStart, jsonEnd).trim();
+                  // tArray = JSON.parse(jsonString);
+              } catch (error) {
+                console.log("error_________________" + error);
+              }
+            }
 
             let toolsJson = {
               "电子白板": { tool: 1, type: 1 },
@@ -14028,7 +14047,26 @@ ${this.teacherText[task].detail.replaceAll('#','').replaceAll('*','').replaceAll
             if (data.message) {
               console.log(data.message);
               try {
-                let tArray = JSON.parse(data.message.replaceAll('```json','').replaceAll('```',''))
+                // let tArray = JSON.parse(data.message.replaceAll('```json','').replaceAll('```',''))
+                let tArray = {}
+                try {
+                  tArray = JSON.parse(data.message.replaceAll('```json','').replaceAll('```',''))
+                } catch (error) {
+                    console.log("error_________________" + error);
+                  try {
+                    let regex = new RegExp("(?<=```json)([\\s\\S]*?)(?=```)");
+                    let match = data.message.match(regex);
+                    tArray = JSON.parse(match[0]);
+
+                      // var message = data.message;
+                      // var jsonStart = message.indexOf("```json") + 7; // `+ 7` 是为了跳过 ```json
+                      // var jsonEnd = message.indexOf("```", jsonStart);
+                      // var jsonString = message.substring(jsonStart, jsonEnd).trim();
+                      // tArray = JSON.parse(jsonString);
+                  } catch (error) {
+                    console.log("error_________________" + error);
+                  }
+                }
                 resolve(tArray)
               } catch (error) {
                 if(type == 15){
@@ -14218,9 +14256,28 @@ ${this.teacherText[task].detail.replaceAll('#','').replaceAll('*','').replaceAll
           let data = response.data.FunctionResponse
           if (data.message) {
             console.log(data.message);
-            let dArray = JSON.parse(data.message.replaceAll('```json','').replaceAll('```',''))
+            // let dArray = JSON.parse(data.message.replaceAll('```json','').replaceAll('```',''))
+            let dArray = {}
+            try {
+              dArray = JSON.parse(data.message.replaceAll('```json','').replaceAll('```',''))
+            } catch (error) {
+                console.log("error_________________" + error);
+              try {
+                  let regex = new RegExp("(?<=```json)([\\s\\S]*?)(?=```)");
+                  let match = data.message.match(regex);
+                  dArray = JSON.parse(match[0]);
+
+                  // var message = data.message;
+                  // var jsonStart = message.indexOf("```json") + 7; // `+ 7` 是为了跳过 ```json
+                  // var jsonEnd = message.indexOf("```", jsonStart);
+                  // var jsonString = message.substring(jsonStart, jsonEnd).trim();
+                  // dArray = JSON.parse(jsonString);
+              } catch (error) {
+                console.log("error_________________" + error);
+              }
+            }
 
-            _this.teacherText = JSON.parse(data.message.replaceAll('```json','').replaceAll('```',''))
+            _this.teacherText = JSON.parse(JSON.stringify(dArray))
             if (_this.templateid == "4480d65a-1e48-11ef-bee5-005056b86db5") {
               _this.unitJson[0].chapterInfo[0].taskJson = []
               for (var i = 0; i < dArray.length; i++) {
@@ -14819,17 +14876,20 @@ ${msg} 优化评价维度和维度描述,输出格式和内容要求参考# 
               console.log("error_________________" + e);
               // _this.$message.error(data.message)
               try {
-                  // let _data = JSON.parse(data.message.match(/(?<=```json).*?(?=```)/)[0])
-                  var message = data.message;
-                  var jsonStart = message.indexOf("```json") + 7; // `+ 7` 是为了跳过 ```json
-                  var jsonEnd = message.indexOf("```", jsonStart);
-                  if (jsonStart !== -1 && jsonEnd !== -1) {
-                      var jsonString = message
-                          .substring(jsonStart, jsonEnd)
-                          .trim();
-                      var _data2 = JSON.parse(jsonString);
-                      _this.unitJson[0].chapterInfo[0].taskJson[_tindex2].eList = _data2
-                  }
+                let regex = new RegExp("(?<=```json)([\\s\\S]*?)(?=```)");
+                let match = data.message.match(regex);
+                _this.unitJson[0].chapterInfo[0].taskJson[_tindex2].eList = JSON.parse(match[0]);
+
+                // var message = data.message;
+                // var jsonStart = message.indexOf("```json") + 7; // `+ 7` 是为了跳过 ```json
+                // var jsonEnd = message.indexOf("```", jsonStart);
+                // if (jsonStart !== -1 && jsonEnd !== -1) {
+                //     var jsonString = message
+                //         .substring(jsonStart, jsonEnd)
+                //         .trim();
+                //     var _data2 = JSON.parse(jsonString);
+                //     _this.unitJson[0].chapterInfo[0].taskJson[_tindex2].eList = _data2
+                // }
               } catch (error) {
               }
           }

+ 143 - 54
src/components/pages/aiAddCourse/aiCreateDialog.vue

@@ -1,7 +1,7 @@
 <template>
     <el-dialog title="AI生成PPT" :visible.sync="dialogVisibleAiCreate" :append-to-body="true" width="700px"
         :before-close="handleClose" class="dialog_diy">
-        <div style="height: 500px; padding: 15px" v-loading="loading">
+        <div style="height: 500px; padding: 15px" v-loading="loading" element-loading-text="小可正在努力生成中,请稍等...">
             <!-- <div class="t_box">
                 <span>选择:</span>
                 <el-radio-group v-model="radio" @change="changeRadio">
@@ -11,8 +11,17 @@
                 </el-radio-group>
             </div> -->
             <div class="t_box" v-if="steps == 1" style="height: 100%">
-                <textarea style="height: 100%" rows="10" class="binfo_input binfo_textarea" cols placeholder="请生成大纲"
-                    v-model="outline"></textarea>
+                <textarea style="height: 100%;width:calc(100% - 260px)" rows="10" class="binfo_input binfo_textarea" cols
+                    placeholder="请生成大纲" v-model="outline"></textarea>
+                <div class="template_box">
+                    <span class="title">选择模板</span>
+                    <div class="template_list">
+                        <div class="template_item" :class="{ active: index == templateIndex }"
+                            v-for="(item, index) in templateList" :key="index" @click="changeTemplate(index)">
+                            <img :src="item.img" alt="" />
+                        </div>
+                    </div>
+                </div>
             </div>
             <div style="height: 100%" v-else>
                 <wOffice v-if="url" :url="url"></wOffice>
@@ -22,7 +31,7 @@
             <el-button @click="aiGet(2)" type="primary" :disabled="loading">重新生成大纲</el-button>
             <el-button @click="aiGet(1)" type="primary" :disabled="loading">{{
                 url ? "重新生成PPT" : "生成PPT"
-                }}</el-button>
+            }}</el-button>
             <el-button @click="steps = 1" type="primary" v-if="steps == 2">上一步</el-button>
             <el-button @click="steps = 2" type="primary" v-else-if="steps == 1 && url">下一步</el-button>
             <el-button @click="confirm" type="primary">确 定</el-button>
@@ -35,6 +44,7 @@
 import Pptxgen from "pptxgenjs";
 import wOffice from "../components/wOffice.vue";
 import { v4 as uuidv4 } from "uuid";
+import { color } from "highcharts";
 
 export default {
     components: {
@@ -59,7 +69,7 @@ export default {
         },
         CourseTypeJson: {
             type: Object,
-            default: ()=>({}),
+            default: () => ({}),
         }
     },
     // 根据用户给你的参考资料
@@ -93,11 +103,25 @@ export default {
             uJson: {},
             outline: "",
             steps: 1,
+            templateList: [
+                // { img: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model1-11719468995661.png', img2: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model1-21719469026755.png',color:'17094F' },
+                // { img: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model2-11719469051869.png', img2: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model2-21719469040181.png',color:'052B37' },
+                // { img: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model3-11719469071576.png', img2: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model3-21719469092087.png',color:'1D5869' },
+                // { img: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model4-11719469106190.png', img2: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model-4-21719469125318.png',color:'372213' },
+                // { img: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model5-11719295908696.png', img2: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model5-21719295930345.png',color:'674D40' },
+                { img: require('../../../assets/icon/ppt/model1-1.png'), img2: require('../../../assets/icon/ppt/model1-2.png'),color:'17094F' },
+                { img: require('../../../assets/icon/ppt/model2-1.png'), img2: require('../../../assets/icon/ppt/model2-2.png'),color:'052B37' },
+                { img: require('../../../assets/icon/ppt/model3-1.png'), img2: require('../../../assets/icon/ppt/model3-2.png'),color:'1D5869' },
+                { img: require('../../../assets/icon/ppt/model4-1.png'), img2: require('../../../assets/icon/ppt/model4-2.png'),color:'372213' },
+                { img: require('../../../assets/icon/ppt/model5-1.png'), img2: require('../../../assets/icon/ppt/model5-2.png'),color:'674D40' },
+            ],
+            templateIndex: 0,
         };
     },
     watch: {
         dialogVisibleAiCreate(newValue, oldValue) {
             if (newValue) {
+                this.loading = false;
                 this.aiGet(2);
             }
         },
@@ -209,13 +233,9 @@ Instruction: Based on the context, follow "Format example", write content.
 
 # Context 
 ## 任务
-将参考#参考资料,为教师生成这节课的教学ppt。PPT的内容主要是讲解该课程中所有可能涉及到的知识点,根据大纲内容生成ppt内容。
+将参考#大纲内容,为教师生成这节课的教学ppt。PPT的内容主要是讲解该课程中所有可能涉及到的知识点,根据大纲内容生成ppt内容。
 
-## 工作流
-1. 针对大纲中的每个知识点,生成200字左右的详细讲解。你的语气应该让小学或初中的学生清晰易懂的讲解。请尽可能的详细,这对我很重要。
-2. 针对大纲中的每个测试,详细设计不同测试题目,例如单选,多选,对错题等。
-
-# 每一页输出格式
+## 每一页输出格式
 - 页数:序列数字
 - 标题:学科概念(请从给你的大纲中摘取)
 - 子标题:知识点(请从给你的大纲中摘取)
@@ -226,13 +246,16 @@ Instruction: Based on the context, follow "Format example", write content.
 - 你不能输出违反伦理的内容
 
 ## 工作流
-1. 从用户提供的参考资料中提取5个最重要的学科概念,并输出。
-2. 分解每个学科概念为几个子知识点
-3. 简要描述每个知识点
-4.生成5个测试题以考察学生的掌握情况
+1. 针对大纲中的每个知识点,生成200字左右的详细讲解。你的语气应该让小学或初中的学生清晰易懂的讲解。请尽可能的详细,这对我很重要。
+2. 针对大纲中的每个测试,详细设计不同测试题目,例如单选,多选,对错题等。
+3.从用户提供的参考资料中提取5个最重要的学科概念,并输出。
+4.分解每个学科概念为几个子知识点
+5.简要描述每个知识点
+6.生成5个测试题以考察学生的掌握情况
+7.一个知识点一页,一个测试题一页
 
-## 参考资料
-${_this.outline}
+## 大纲内容
+${_this.outline.replaceAll('#','').replaceAll('*','').replaceAll('-','').replaceAll('\n','')}
 
 # Format example
 [{"page": "页码(数字)","title": "学科概念(请从给你的大纲中摘取)(标题)","task": "知识点(请从给你的大纲中摘取)(子标题)","points": "知识点讲解:针对大纲中的每个知识点,生成200字左右的详细讲解。你的语气应该让小学或初中的学生清晰易懂的讲解。你的讲解词在100 token左右。请尽可能的详细,这对我很重要。"}]`;
@@ -241,9 +264,9 @@ ${_this.outline}
 请根据参考资料,生成关于${this.courseName},为教师生成这节课的教学ppt的大纲,大纲的主要内容课程知识点的讲解与相关练习和测试。你的输出应该符合#输出格式
 
 # 工作流
-1. 从用户提供的参考资料中提取5个最重要的学科概念${mclass.length ? "(水平限制在{面向年级}中)" : ""},并输出。
-2. 分解每个学科概念为几个子知识点
-3. 简要描述每个知识点
+1.从用户提供的参考资料中提取5个最重要的学科概念${mclass.length ? "(水平限制在{面向年级}中)" : ""},并输出。
+2.分解每个学科概念为几个子知识点
+3.简要描述每个知识点
 4.生成5个测试题以考察学生的掌握情况
 
 ${mclass.length ? "#参考资料\n面向年级:" + mclass.join(",") : ""}
@@ -257,9 +280,9 @@ ${mclass.length ? "#参考资料\n面向年级:" + mclass.join(",") : ""}
   5.知识点:知识点5
 
 # 限制
-- 如果有参考资料请根据参考资料,如果没有无需根据参考资料进行。
-- 你不能输出错误的知识,如果你实在不清楚,输出“对不起,我不确定”
-- 你不能输出违反伦理的内容
+1.如果有参考资料请根据参考资料,如果没有无需根据参考资料进行,随意发挥
+2.你不能输出错误的知识。
+3.你不能输出违反伦理的内容。
 `;
             }
 
@@ -330,25 +353,32 @@ ${mclass.length ? "#参考资料\n面向年级:" + mclass.join(",") : ""}
                                 console.log("error_________________" + e);
                                 // _this.$message.error(data.message)
                                 try {
+                                    let regex = new RegExp("(?<=```json)([\\s\\S]*?)(?=```)");
+                                    let match = data.message.match(regex);
+                                    _data2 = JSON.parse(match[0]);
+                                    _this.createPpt(_data2);
+                                    _this.steps = 2;
+
                                     // let _data = JSON.parse(data.message.match(/(?<=```json).*?(?=```)/)[0])
-                                    var message = data.message;
-                                    var jsonStart = message.indexOf("```json") + 7; // `+ 7` 是为了跳过 ```json
-                                    var jsonEnd = message.indexOf("```", jsonStart);
-                                    if (jsonStart !== -1 && jsonEnd !== -1) {
-                                        var jsonString = message
-                                            .substring(jsonStart, jsonEnd)
-                                            .trim();
-                                        var _data2 = JSON.parse(jsonString);
-                                        _this.createPpt(_data2);
-                                        _this.steps = 2;
-                                    } else {
-                                        _this.$message.error("生成失败,正在重新生成");
-                                        _this.aiGet(type);
-                                    }
+
+                                    // var message = data.message;
+                                    // var jsonStart = message.indexOf("```json") + 7; // `+ 7` 是为了跳过 ```json
+                                    // var jsonEnd = message.indexOf("```", jsonStart);
+                                    // if (jsonStart !== -1 && jsonEnd !== -1) {
+                                    //     var jsonString = message
+                                    //         .substring(jsonStart, jsonEnd)
+                                    //         .trim();
+                                    //     var _data2 = JSON.parse(jsonString);
+                                    //     _this.createPpt(_data2);
+                                    //     _this.steps = 2;
+                                    // } else {
+                                    //     _this.$message.error("生成失败,正在重新生成");
+                                    //     _this.aiGet(type);
+                                    // }
                                 } catch (error) {
                                     _this.$message.error("生成失败,正在重新生成");
-                                    _this.aiGet(type);
                                     _this.loading = false;
+                                    _this.aiGet(type);
                                 }
                             }
                         } else {
@@ -367,12 +397,12 @@ ${mclass.length ? "#参考资料\n面向年级:" + mclass.join(",") : ""}
             // 1. 创建PPT
             const pres = new Pptxgen();
             const _slideTou = pres.addSlide();
-            _slideTou.background = { path: "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model5-11719295908696.png" }
+            _slideTou.background = { path: this.templateList[this.templateIndex].img }
             _slideTou.addText(this.courseName, {
                 x: "10%", // 横坐标
                 y: 3,
                 width: "90%",
-                color: "363636",
+                color: this.templateList[this.templateIndex].color,
                 fontSize: 38, // 字号
                 align: "center",
             });
@@ -380,18 +410,18 @@ ${mclass.length ? "#参考资料\n面向年级:" + mclass.join(",") : ""}
                 // 2. 创建一个PPT页面,每调用一次 pres.addSlide() 都可以生成一张新的页面
                 // 建议把每个页面的构造抽成一个个函数,然后通过函数调用生成新页面,代码不会很乱
                 const _slide = pres.addSlide();
-                _slide.background = { path: "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model5-21719295930345.png" }
-            
+                _slide.background = { path: this.templateList[this.templateIndex].img2 }
+
                 // 3. 调用addTetx(),在PPT页面中插入文字“Hello World from PptxGenJS...”
                 // 括号里面是对文字的配置,文字横坐标x为1.5,纵坐标y为1.5,字体颜色 363636……
                 // 关于坐标长度与px的转换 x 1 = 127~128px 左右
-                const page = i+1 > 10 ? i+1 : "0"+(i+1);
+                const page = i + 1 > 10 ? i + 1 : "0" + (i + 1);
                 const tempResult1 = page + " " + array[i].title;
                 _slide.addText(tempResult1, {
                     x: "10%", // 横坐标
                     y: 1.1,
                     width: "90%",
-                    color: "363636",
+                    color: this.templateList[this.templateIndex].color,
                     fontSize: 28, // 字号
                     align: "center",
                 });
@@ -400,43 +430,43 @@ ${mclass.length ? "#参考资料\n面向年级:" + mclass.join(",") : ""}
                     x: "10%", // 横坐标
                     y: 1.8,
                     width: "90%",
-                    color: "363636",
+                    color: "222222",
                     fontSize: 20, // 字号
                     align: "center",
                 });
                 let tempResult3 = '';
-                if(typeof array[i].points == 'object'){
+                if (typeof array[i].points == 'object') {
                     tempResult3 = array[i].points.join('\n')
-                }else {
+                } else {
                     tempResult3 = array[i].points
                 }
                 _slide.addText(tempResult3, {
                     x: "20%", // 横坐标
                     y: 3.2,
                     w: "60%",
-                    color: "363636",
+                    color: "444444",
                     fontSize: 18, // 字号
                     align: "center",
                 });
             }
             const _slideWei = pres.addSlide();
-            _slideWei.background = { path: "https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model5-11719295908696.png" }
+            _slideWei.background = { path: this.templateList[this.templateIndex].img }
             _slideWei.addText("谢谢观看,下课!", {
                 x: "10%", // 横坐标
                 y: 3,
                 width: "90%",
-                color: "363636",
+                color: this.templateList[this.templateIndex].color,
                 fontSize: 38, // 字号
                 align: "center",
             });
             // 获取PPTX文件的ArrayBuffer
-            
+
             // 保存为 Blob 并处理
             pres.write("blob").then((blob) => {
                 // 现在你有了一个 Blob 对象
                 console.log(blob);
 
-                const file = new File([blob], this.courseName+".pptx", {
+                const file = new File([blob], this.courseName + ".pptx", {
                     type: "application/vnd.openxmlformats-officedocument.presentationml.presentation",
                 });
                 console.log(pres);
@@ -494,6 +524,9 @@ ${mclass.length ? "#参考资料\n面向年级:" + mclass.join(",") : ""}
                     });
             }
         },
+        changeTemplate(index) {
+            this.templateIndex = index;
+        }
     },
 };
 </script>
@@ -564,13 +597,35 @@ ${mclass.length ? "#参考资料\n面向年级:" + mclass.join(",") : ""}
     font-family: "Microsoft YaHei";
 }
 
-.binfo_input:focus-visible {
-    border: 1.5px solid #3681fc !important;
+.binfo_textarea:focus-visible {
+  border: 1.5px solid #3681fc !important;
+}
+
+.binfo_textarea::-webkit-scrollbar {
+  /*滚动条整体样式*/
+  width: 6px;
+  /*高宽分别对应横竖滚动条的尺寸*/
+  height: 6px;
+}
+
+/*定义滚动条轨道 内阴影+圆角*/
+.binfo_textarea::-webkit-scrollbar {
+  border-radius: 10px;
+  background-color: #eee;
+}
+
+/*定义滑块 内阴影+圆角*/
+.binfo_textarea::-webkit-scrollbar-thumb {
+  border-radius: 10px;
+  -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
+  background-color: rgba(0, 0, 0, 0.1);
 }
 
 .t_box {
     display: flex;
     margin-bottom: 15px;
+    display: flex;
+    justify-content: space-between;
 }
 
 .t_box>span:nth-child(1) {
@@ -578,4 +633,38 @@ ${mclass.length ? "#参考资料\n面向年级:" + mclass.join(",") : ""}
     font-size: 16px;
     color: #000;
 }
+
+.template_box{
+    width: 250px;
+}
+.template_box > .title{
+    font-size: 18px;
+    margin-bottom: 10px;
+    display: block;
+}
+.template_list{
+    overflow: auto;
+    width: 100%;
+    height: calc(100% - 31px);
+}
+.template_item{
+    cursor: pointer;
+    width: 100%;
+    height: 165px;
+    overflow: hidden;
+    border-radius: 5px;
+    box-sizing: border-box;
+    border: 5px solid #e5e5e5ee;
+}
+.template_item + .template_item{
+    margin-top: 10px;
+}
+.template_item.active{
+    border: 5px solid #0061ff;
+}
+.template_item > img{
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+}
 </style>

+ 1 - 1
src/components/pages/aiAddCourse/aiCreateVideoDialog.vue

@@ -1,7 +1,7 @@
 <template>
     <el-dialog title="AI生成视频" :visible.sync="dialogVisibleAiCreateVideo" :append-to-body="true" width="700px"
         :before-close="handleClose" class="dialog_diy">
-        <div style="height: 500px;padding:15px" v-loading="loading">
+        <div style="height: 500px;padding:15px" v-loading="loading" element-loading-text="小可正在努力生成中,请稍等...">
             <div style="position: relative; width: 100%;height: 40px;margin-bottom: 10px;">
                 <el-input class="inputC" style="height: 100%;" placeholder="搜索视频关键字" v-model="detail"
                 @keyup.enter.native="aiGet()"></el-input>

+ 164 - 5
src/components/pages/test/examine/conpoments/personPage.vue

@@ -1,12 +1,72 @@
 <template>
   <div>
     <div v-if="pType==0">
-      按人员专任教师
+      <el-table
+        :data="tableData"
+        border
+        class="tableData"
+        style="width: 50%">
+        <el-table-column
+          prop="ordinal"
+          label="序号">
+        </el-table-column>
+        <el-table-column
+          prop="teachername"
+          label="教师姓名">
+        </el-table-column>
+        <el-table-column
+          prop="department"
+          label="教研室">
+        </el-table-column>
+        <el-table-column
+          prop="submissions"
+          label="提交情况">
+        </el-table-column>
+        <el-table-column
+          prop="schedule"
+          label="考核进度">
+        </el-table-column>
+        <el-table-column
+          prop="selffraction"
+          label="自评分数">
+        </el-table-column>
+        <el-table-column
+          prop="nucleusfraction"
+          label="考核分数">
+        </el-table-column>
+        <el-table-column
+        label="操作">
+          <template slot-scope="scope">
+            <div class="TabBtn" @click="lookPrize">查看</div>
+          </template>
+        </el-table-column>
+      </el-table>
     </div>
     <div v-if="pType==1">
       按人员班主任
     </div>
-  </div>
+
+     <!-- 点击查看 -->
+    <el-dialog
+      title=""
+      :visible.sync="diaIframe"
+      :append-to-body="true"
+      width="95%"
+      :before-close="handleClose"
+      class="dialog_diy"
+    >
+      <div style="height: 100%;">
+        <iframe
+          ref="viframe"
+          style="width: 100%; height: 99%; border: none"
+          :src="ifmUrl"
+        ></iframe>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="diaIframe = false">关 闭</el-button>
+      </span>
+    </el-dialog>
+</div>
 </template>
 
 <script>
@@ -19,8 +79,107 @@ export default {
     }
   },
   data() {
-    return {};
-  }
+    return {
+      diaIframe:false,
+      ifmUrl: "",
+      tableData: [{
+          ordinal: '12',
+          teachername: '王小虎',
+          department: '语文',
+          submissions: '是',
+          schedule: '√',
+          selffraction: '98.5',
+          nucleusfraction: '94.2',
+          rating:'评分'
+        }, {
+          ordinal: '12',
+          teachername: '王小虎',
+          department: '语文',
+          submissions: '是',
+          schedule: '√',
+          selffraction: '98.5',
+          nucleusfraction: '94.2',
+          rating:'评分'
+        }, {
+          ordinal: '12',
+          teachername: '王小虎',
+          department: '语文',
+          submissions: '是',
+          schedule: '√',
+          selffraction: '98.5',
+          nucleusfraction: '94.2',
+          rating:'评分'
+        },{
+          ordinal: '12',
+          teachername: '王小虎',
+          department: '语文',
+          submissions: '是',
+          schedule: '√',
+          selffraction: '98.5',
+          nucleusfraction: '94.2',
+          rating:'评分'
+        }]
+    };
+  },
+   methods: {
+        // 查看数据来源
+    lookPrize() {
+      this.diaIframe = true;
+    },
+    // 关闭弹框
+    handleClose(done) {
+      done();
+    },
+   }
 };
 </script>
-<style scoped></style>
+<style>
+.el-table td, .el-table th.is-leaf {
+  text-align:center;
+}
+</style>
+<style scoped>
+.TabBtn {
+  cursor: pointer;
+  color: #528df6;
+}
+
+.dialog_diy >>> .el-dialog {
+  height: 95%;
+  margin: 0 auto !important;
+  margin-top: 20px !important;
+  overflow: hidden;
+}
+
+.dialog_diy >>> .el-dialog__header {
+  background: #454545 !important;
+  padding: 25px 20px;
+}
+
+.dialog_diy >>> .el-dialog__body {
+  height: calc(100% - 124px);
+  box-sizing: border-box;
+  padding: 0px;
+}
+
+.dialog_diy >>> .el-dialog__title {
+  color: #fff;
+}
+
+.dialog_diy >>> .el-dialog__headerbtn {
+  top: 19px;
+}
+
+.dialog_diy >>> .el-dialog__headerbtn .el-dialog__close {
+  color: #fff;
+}
+
+.dialog_diy >>> .el-dialog__headerbtn .el-dialog__close:hover {
+  color: #fff;
+}
+
+.dialog_diy >>> .el-dialog__body,
+.dialog_diy >>> .el-dialog__footer {
+  background: #fafafa;
+}
+</style>

+ 26 - 4
src/components/pages/test/examine/conpoments/targetPage.vue

@@ -43,7 +43,7 @@
                   style="display: flex;justify-content: space-around;padding: 0 10px;box-sizing: border-box;"
                 >
                   <!-- <div class="TabBtn" @click="lookPrize">查看</div> -->
-                  <div class="TabBtn" @click="lookScore">评分</div>
+                  <div class="TabBtn" @click="lookScore(k.id)">评分</div>
                 </div>
               </div>
             </div>
@@ -180,6 +180,7 @@ export default {
       diaScore: false, //查看分数弹框
       ifmUrl: "", //数据来源地址
       tabLoad: false, //表格加载状态
+      secondId: "", //查看评分二级id
       userid: this.$route.query.userid, //用户id
       oid: this.$route.query.oid, //学校id
       org: this.$route.query.org, //组织id
@@ -1209,6 +1210,24 @@ export default {
   },
 
   methods: {
+    getSecondData() {
+      let params = {
+        oid: this.oid,
+        org: this.org,
+        type: this.pType
+      };
+      // console.log(params);
+      this.ajax
+        .get(this.$store.state.api + "selectTestExamineSecondData", params)
+        .then(res => {
+          let data = res.data[0];
+
+          console.log("selectTestExamineSecondData", res.data[0]);
+        })
+        .catch(error => {
+          console.log(error);
+        });
+    },
     // 获取数据计算审核进度,自评平均分,考核平均分
     getData() {
       let params = {
@@ -1243,7 +1262,7 @@ export default {
           // console.log("selectTestExamineBase", res.data[0][0]);
           this.tableJsonCon = JSON.parse(res.data[0][0].json);
           this.handleData();
-          this.getData()
+          this.getData();
 
           this.tabLoad = false;
         })
@@ -1288,10 +1307,13 @@ export default {
     },
     // 关闭弹框
     handleClose(done) {
+      this.page = 1;
       done();
     },
-    // 查看分数
-    lookScore() {
+    // 查看评分
+    lookScore(val) {
+      this.getSecondData();
+      this.secondId = val;
       this.diaScore = true;
     }
   }

+ 49 - 26
src/components/pages/testPerson/examine/index.vue

@@ -77,10 +77,17 @@
                     <div
                       v-for="(item2, index) in k.testid.test"
                       :key="item2.courseId"
-                      @click="lookPrize(item2.courseId)"
                       class="orgData"
                     >
-                      {{ item2.title }}:{{ item2.num }}份
+                      <div @click="lookPrize(item2.courseId)">
+                        {{ item2.title }}:{{ item2.num }}份
+                      </div>
+                      <div
+                        style="color: black;"
+                        @click="goFillIn(item2.courseId)"
+                      >
+                        去填写
+                      </div>
                     </div>
                   </div>
                 </div>
@@ -135,10 +142,17 @@
                     <div
                       v-for="(item2, index) in k.testid.test"
                       :key="item2.courseId"
-                      @click="lookPrize(item2.courseId)"
                       class="orgData"
                     >
-                      {{ item2.title }}:{{ item2.num }}份
+                      <div @click="lookPrize(item2.courseId)">
+                        {{ item2.title }}:{{ item2.num }}份
+                      </div>
+                      <div
+                        style="color: black;"
+                        @click="goFillIn(item2.courseId)"
+                      >
+                        去填写
+                      </div>
                     </div>
                   </div>
                 </div>
@@ -191,6 +205,7 @@ export default {
       userid: this.$route.query.userid, //用户id
       oid: this.$route.query.oid, //学校id
       org: this.$route.query.org, //组织id
+      role: this.$route.query.role,
       ifmUrl: "", //数据来源地址
       diaIframe: false //数据来源弹框
     };
@@ -206,6 +221,14 @@ export default {
     // console.log(JSON.stringify(this.TeaTabJson));
   },
   methods: {
+    goFillIn(val) {
+      this.$router.push(
+        `/doTest?cid=${val}&userid=${this.userid}&oid=${this.oid}&org=${this.org}&type=3&role=${this.role}`
+      );
+      // this.ifmUrl = `https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/#/checkToTest?cid=${val}&oid=${this.oid}&org=${this.org}&type=2&role=0&peopleId=${this.userid}`;
+      // this.ifmUrl = `https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/#/test?userid=${this.userid}&oid=45facc0a-1211-11ec-80ad-005056b86db5&org=&role=0`;
+      // this.diaIframe = true;
+    },
     // 提交
     Submit() {
       if (this.allData.type == 2) {
@@ -286,7 +309,7 @@ export default {
           this.ajax
             .post(this.$store.state.api + "addTestExamineWorks", params)
             .then(res => {
-              console.log('addTestExamineWorks',res);
+              console.log("addTestExamineWorks", res);
               this.getData();
               // console.log();
               // console.log("resresresres", res.data[0]);
@@ -325,28 +348,28 @@ export default {
             let val = JSON.parse(res.data[0][0].json);
 
             this.PageBaseData.forEach(e => {
-              val.forEach(i=>{
-                if (e.id==i.id) {
-                  e.name=i.name
-                  e.children.forEach(a=>{
-                    i.children.forEach(b=>{
-                      if (a.id==b.id) {
-                        a.name=b.name
-                        a.score=b.score
-                        a.sco1=b.sco1
-                        a.sco2=b.sco2
-                        a.evaStandard=b.evaStandard
-                        a.evaMethod=b.evaMethod
-                        a.cogSum=b.cogSum
-                        a.selfSummary=b.selfSummary
-                        a.dep=b.dep
-                        a.type=b.type
-                        a.testid=b.testid
+              val.forEach(i => {
+                if (e.id == i.id) {
+                  e.name = i.name;
+                  e.children.forEach(a => {
+                    i.children.forEach(b => {
+                      if (a.id == b.id) {
+                        a.name = b.name;
+                        a.score = b.score;
+                        a.sco1 = b.sco1;
+                        a.sco2 = b.sco2;
+                        a.evaStandard = b.evaStandard;
+                        a.evaMethod = b.evaMethod;
+                        a.cogSum = b.cogSum;
+                        a.selfSummary = b.selfSummary;
+                        a.dep = b.dep;
+                        a.type = b.type;
+                        a.testid = b.testid;
                       }
-                    })
-                  })
+                    });
+                  });
                 }
-              })
+              });
             });
 
             this.handleData();
@@ -355,7 +378,7 @@ export default {
             this.allData.type = 1;
             this.allData.rjson = "";
             this.handleData();
-            this.tabLoad = false
+            this.tabLoad = false;
           }
           // this.$forceUpdate();
           //  else {

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.