11wqe1 1 tuần trước cách đây
mục cha
commit
5dcdfb7658

+ 6 - 2
src/components/pages/components/exportDataDialog.vue

@@ -1222,7 +1222,7 @@ export default {
       // 生生互动被动结束
 
       // 工具类大分类
-      hd: [10, 65],
+      hd: [10, 65,72],
       sw: [7, 1, 52, 3, 48],
       xz: [49],
       cp: [4, 45, 15, 16, 50, 41, 47],
@@ -1630,6 +1630,9 @@ export default {
             res.data[12].forEach(e => {
               e.content = JSON.parse(e.content);
             });
+            res.data[14].forEach(e => {
+              e.content = JSON.parse(e.content);
+            });
             res.data[10].forEach(e => {
               e.content = JSON.parse(e.content);
             });
@@ -1645,7 +1648,8 @@ export default {
               ...res.data[9],
               ...res.data[10],
               ...res.data[11],
-              ...res.data[12]
+              ...res.data[12],
+              ...res.data[14],
             ];
 
             AreaAllWork.sort(function(a, b) {

+ 72 - 2
src/components/pages/components/exportWorksDialog.vue

@@ -150,6 +150,35 @@
                   </div>
                   <div class="answerTxt" v-html="l.content[0].text"></div>
                 </div>
+                <div v-if="l.tool[0] == 72">
+                  <div class="toolBlk">
+                    <img
+                    style="width: 44px;height: 44px;object-fit: contain;"
+                      :src="l.appJson.json.icon"
+                      alt=""
+                    />
+                    <div class="toolTit">
+                      <div>工具{{ lind + 1 }}:{{ l.appJson.name }}</div>
+                      <div>
+                        {{ l.appJson.detail }}
+                      </div>
+                    </div>
+                  </div>
+                  <div  style="margin-bottom: 20px;" v-for="(item,index) in l.content[0]" :key="index+'coco'">
+                        <div style="margin-bottom: 15px;font-size: 14px;font-weight: 600;color: #000;">第{{ index + 1}}阶段</div>
+                        <div v-for="(po,PInd) in item.messages" :key="PInd+'PInd'">
+                            <div class="left" v-if="po.role == 'assistant'">
+                                    <div class="TName">小可AI助手</div>:
+                                    <div class="con" v-html="MarkdownT(po.content)"></div>
+                            </div>
+
+                            <div class="left" v-if="po.role == 'user'">
+                                    <div class="TName">{{ worksDialogCon2.sName }}</div>:
+                                    <div class="con" v-html="po.content"></div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
                 <div v-if="l.tool[0] == 16 || l.tool[0] == 50">
                   <div class="toolBlk">
                     <img
@@ -778,6 +807,7 @@ import html2canvas from "html2canvas";
 import jspdf from "jspdf";
 import JSZip from "jszip";
 import exjsmind from "./exjsmind";
+import MarkdownIt from "markdown-it";
 
 export default {
   props: [
@@ -791,7 +821,7 @@ export default {
   components: {
     exjsmind
   },
-  data() {
+  data() { 
     return {
       workList: [],
       dyList: [],
@@ -828,6 +858,17 @@ export default {
     }
   },
   computed: {
+    MarkdownT() {
+      return function (c) {
+          let md = new MarkdownIt({
+            html: true, // 允许渲染 HTML
+            linkify: true, // 自动将URL链接转化为可点击链接
+            typographer: true, // 启用排版规则(如替换 `"` 为 “)
+          });
+            return c
+            ? md.render(c) : "";
+        };
+    },
     isStage() {
       return function(val) {
         let isShow = false;
@@ -1083,6 +1124,9 @@ export default {
             res.data[10].forEach(e => {
               e.content = JSON.parse(e.content);
             });
+            res.data[14].forEach(e => {
+              e.content = JSON.parse(e.content);
+            });
 
             let AreaAllWork = [
               ...res.data[1],
@@ -1095,7 +1139,8 @@ export default {
               ...res.data[9],
               ...res.data[10],
               ...res.data[11],
-              ...res.data[12]
+              ...res.data[12],
+              ...res.data[14],
             ];
 
             AreaAllWork.sort(function(a, b) {
@@ -1359,6 +1404,31 @@ export default {
 </script>
 
 <style scoped>
+.left{
+        display: flex;
+        justify-content: flex-start;
+        margin-bottom: 10px;
+        line-height: 25px;
+        flex: 1;
+        border-bottom: 1px  #e7e7e7 solid;
+    }
+    .TName{
+        /* font-size: 14px; */
+        color: #4472C4;
+        margin-bottom: 5px;
+        font-weight: 600;
+        width: 80px;
+        flex-shrink: 0;
+        font-size: 14px;
+        overflow: hidden;
+        white-space: nowrap;
+        text-overflow: ellipsis;
+    }
+    .con{
+        margin-left: 10px;
+        font-size: 12px;
+        color: #000;
+    }
 .pbl {
   width: 100%;
   height: 100%;

+ 78 - 2
src/components/pages/components/lookWork.vue

@@ -156,6 +156,7 @@
                   <div v-if="l.tool[0] == 52">
                     <div class="toolBlk">
                       <img
+                        style="width: 44px;height: 44px;object-fit: contain;"
                         src="../../../assets/icon/fourthToolList/text.png"
                         alt=""
                       />
@@ -168,6 +169,35 @@
                     </div>
                     <div class="answerTxt" v-html="l.content[0].text"></div>
                   </div>
+                  <div v-if="l.tool[0] == 72">
+                    <div class="toolBlk">
+                      <img
+                      style="width: 44px;height: 44px;object-fit: contain;"
+                        :src="l.appJson.json.icon"
+                        alt=""
+                      />
+                      <div class="toolTit">
+                        <div>工具{{ lind + 1 }}:{{ l.appJson.name }}</div>
+                        <div>
+                          {{ l.appJson.detail }}
+                        </div>
+                      </div>
+                    </div>
+                    <div  style="margin-bottom: 20px;" v-for="(item,index) in l.content[0]" :key="index+'coco'">
+                        <div style="margin-bottom: 15px;font-size: 14px;font-weight: 600;color: #000;">第{{ index + 1}}阶段</div>
+                        <div v-for="(po,PInd) in item.messages" :key="PInd+'PInd'">
+                            <div class="left" v-if="po.role == 'assistant'">
+                                    <div class="TName">小可AI助手</div>:
+                                    <div class="con" v-html="MarkdownT(po.content)"></div>
+                            </div>
+
+                            <div class="left" v-if="po.role == 'user'">
+                                    <div class="TName">{{ userName }}</div>:
+                                    <div class="con" v-html="po.content"></div>
+                            </div>
+                        </div>
+                    </div>
+                  </div>
                   <div v-if="l.tool[0] == 16 || l.tool[0] == 50">
                     <div class="toolBlk">
                       <img
@@ -786,6 +816,7 @@
 </template>
 
 <script>
+import MarkdownIt from "markdown-it";
 
 const getFile = url => {
   return new Promise((resolve, reject) => {
@@ -894,6 +925,17 @@ export default {
   },
 
   computed: {
+    MarkdownT() {
+      return function (c) {
+          let md = new MarkdownIt({
+            html: true, // 允许渲染 HTML
+            linkify: true, // 自动将URL链接转化为可点击链接
+            typographer: true, // 启用排版规则(如替换 `"` 为 “)
+          });
+            return c
+            ? md.render(c) : "";
+        };
+    },
     isStage() {
       return function(val) {
         let isShow = false;
@@ -1157,7 +1199,11 @@ export default {
             this.workEvaList = res.data[13];
 
             // console.log('res.data[0][0]',res.data[0][0]);
-            this.resData = JSON.parse(JSON.stringify(res.data[0][0]));
+            if (res.data[0] && res.data[0][0] && res.data[0][0].length) {
+                this.resData = JSON.parse(JSON.stringify(res.data[0][0]));
+            }else{
+              this.resData=[]
+            }
 
             this.courseName = res.data[0][0].course;
             this.CState = res.data[0][0].state;
@@ -1253,6 +1299,10 @@ export default {
               e.content = JSON.parse(e.content);
             });
 
+            res.data[14].forEach(e => {
+              e.content = JSON.parse(e.content);
+            });
+
             let AreaAllWork = [
               ...res.data[1],
               ...res.data[3],
@@ -1264,7 +1314,8 @@ export default {
               ...res.data[9],
               ...res.data[10],
               ...res.data[11],
-              ...res.data[12]
+              ...res.data[12],
+              ...res.data[14],
             ];
 
             AreaAllWork.sort(function(a, b) {
@@ -1379,6 +1430,31 @@ export default {
 </script>
 
 <style scoped>
+    .left{
+        display: flex;
+        justify-content: flex-start;
+        margin-bottom: 10px;
+        line-height: 25px;
+        flex: 1;
+        border-bottom: 1px  #e7e7e7 solid;
+    }
+    .TName{
+        /* font-size: 14px; */
+        color: #4472C4;
+        margin-bottom: 5px;
+        font-weight: 600;
+        width: 80px;
+        flex-shrink: 0;
+        font-size: 14px;
+        overflow: hidden;
+        white-space: nowrap;
+        text-overflow: ellipsis;
+    }
+    .con{
+        margin-left: 10px;
+        font-size: 12px;
+        color: #000;
+    }
 .eliP {
   overflow: hidden;
   white-space: nowrap;

+ 72 - 1
src/components/pages/components/report.vue

@@ -213,6 +213,35 @@
                       </div>
                       <div class="answerTxt" v-html="l.content[0].text"></div>
                     </div>
+                    <div v-if="l.tool[0] == 72">
+                    <div class="toolBlk">
+                      <img
+                      style="width: 44px;height: 44px;object-fit: contain;"
+                        :src="l.appJson.json.icon"
+                        alt=""
+                      />
+                      <div class="toolTit">
+                        <div>工具{{ lind + 1 }}:{{ l.appJson.name }}</div>
+                        <div>
+                          {{ l.appJson.detail }}
+                        </div>
+                      </div>
+                    </div>
+                    <div  style="margin-bottom: 20px;" v-for="(item,index) in l.content[0]" :key="index+'coco'">
+                        <div style="margin-bottom: 15px;font-size: 14px;font-weight: 600;color: #000;">第{{ index + 1}}阶段</div>
+                        <div v-for="(po,PInd) in item.messages" :key="PInd+'PInd'">
+                            <div class="left" v-if="po.role == 'assistant'">
+                                    <div class="TName">小可AI助手</div>:
+                                    <div class="con" v-html="MarkdownT(po.content)"></div>
+                            </div>
+
+                            <div class="left" v-if="po.role == 'user'">
+                                    <div class="TName">{{ userP.username }}</div>:
+                                    <div class="con" v-html="po.content"></div>
+                            </div>
+                        </div>
+                    </div>
+                  </div>
                     <div v-if="l.tool[0] == 16 || l.tool[0] == 50">
                       <div style="padding: 10px;box-sizing: border-box;">
                         <h1>{{ userP.username }}</h1>
@@ -1101,6 +1130,8 @@
 <script>
 import html2canvas from "html2canvas";
 import jspdf from "jspdf";
+import MarkdownIt from "markdown-it";
+
 export default {
   props: ["cid", "dataJson", "classArray"],
   data() {
@@ -1129,6 +1160,17 @@ export default {
     }
   },
   computed: {
+    MarkdownT() {
+      return function (c) {
+          let md = new MarkdownIt({
+            html: true, // 允许渲染 HTML
+            linkify: true, // 自动将URL链接转化为可点击链接
+            typographer: true, // 启用排版规则(如替换 `"` 为 “)
+          });
+            return c
+            ? md.render(c) : "";
+        };
+    },
     isStage() {
       return function(val) {
         let isShow = false;
@@ -1353,6 +1395,9 @@ export default {
           res.data[12].forEach(e => {
             e.content = JSON.parse(e.content);
           });
+          res.data[15].forEach(e => {
+              e.content = JSON.parse(e.content);
+            });
           res.data[10].forEach(e => {
             e.content = JSON.parse(e.content);
           });
@@ -1368,7 +1413,8 @@ export default {
             ...res.data[9],
             ...res.data[10],
             ...res.data[11],
-            ...res.data[12]
+            ...res.data[12],
+            ...res.data[15],
           ];
 
           AreaAllWork.sort(function(a, b) {
@@ -1461,6 +1507,31 @@ export default {
 </script>
 
 <style scoped>
+ .left{
+        display: flex;
+        justify-content: flex-start;
+        margin-bottom: 10px;
+        line-height: 25px;
+        flex: 1;
+        border-bottom: 1px  #e7e7e7 solid;
+    }
+    .TName{
+        /* font-size: 14px; */
+        color: #4472C4;
+        margin-bottom: 5px;
+        font-weight: 600;
+        width: 80px;
+        flex-shrink: 0;
+        font-size: 14px;
+        overflow: hidden;
+        white-space: nowrap;
+        text-overflow: ellipsis;
+    }
+    .con{
+        margin-left: 10px;
+        font-size: 12px;
+        color: #000;
+    }
 /* .r_box {
 } */
 .r_cbox {

+ 1 - 1
src/components/pages/components/studentReport.vue

@@ -44,7 +44,7 @@
         </div>
       </div>
       <div style="height:100%;min-width: 1100px;">
-        <LookWorks :id="courseid" :isStu="2" :studentId="userid" :key="userid.toString"></LookWorks>
+        <LookWorks :id="courseid" :isStu="2" :studentId="userid" :key="userid"></LookWorks>
 
         <!-- <worksDetail3 class="r_box" :cid="courseid" :uid="userid" :ooid="scoid"></worksDetail3> -->
       </div>

+ 1 - 0
src/components/pages/components/workData.vue

@@ -618,6 +618,7 @@ export default {
           let toolsJson = [];
           _data.forEach((item, index) => {
             workJson.push({ stage: item.stage, userid: item.userid });
+            console.log('item.rate',item.rate)
             scoreJson.push({ rate: JSON.parse(item.rate) });
           });
           _data2.forEach((item, index) => {

+ 49 - 1
src/components/pages/components/worksDetail2.vue

@@ -1607,6 +1607,7 @@
 import StudentData from "./studentData";
 import exportWorksDialog from "./exportWorksDialog";
 import Report from "./report";
+import MarkdownIt from "markdown-it";
 
 import pdf from "./vpdf";
 import htmlDocx from "html-docx-js/dist/html-docx";
@@ -1865,6 +1866,7 @@ export default {
     };
   },
   computed: {
+
     totalScore(){
       return function (val) {
         let sco = 0
@@ -1944,6 +1946,17 @@ export default {
     });
   },
   methods: {
+    MarkdownT(c) {
+      // return function (c) {
+          let md = new MarkdownIt({
+            html: true, // 允许渲染 HTML
+            linkify: true, // 自动将URL链接转化为可点击链接
+            typographer: true, // 启用排版规则(如替换 `"` 为 “)
+          });
+            return c
+            ? md.render(c) : "";
+        // };
+    },
     // 一键导出
     exportWorkPdf(){
       this.$confirm("是否导出全部学生作业?全部导出需要等待一会儿哦~", "提示", {
@@ -3460,6 +3473,9 @@ export default {
           var cocopiInfo = res.data[11]; //cocopi或源码编辑作业
           var wordInfo = res.data[12]; //文档作业
           var workEvaList = res.data[13];
+          
+          var cocoInfo = res.data[14];
+
           this.scopeId = res.data[2].length ? res.data[2][0].id : this.sInfo.id;
           var workJson = {
             img: [],
@@ -3476,6 +3492,8 @@ export default {
             bgInfo: [],
             cocopiInfo: [],
             wordInfo: [],
+            cocoInfo: [],
+
           };
 
           
@@ -3706,6 +3724,18 @@ export default {
               });
             }
           }
+          
+          for (var i = 0; i < cocoInfo.length; i++) {
+            if (cocoInfo[i].stage == w.stage && cocoInfo[i].task == w.task) {
+              var word = cocoInfo[i];
+              workJson.cocoInfo.push({
+                cocoInfo: JSON.parse(word.content),
+                score: cocoInfo[i].score
+                  ? JSON.parse(cocoInfo[i].score).wScore
+                  : cocoInfo[i].score,
+              });
+            }
+          }
 
           this.worksDetail = workJson;
 
@@ -3869,6 +3899,23 @@ export default {
             }
           }
 
+          var _coco = "";
+          if (workJson.cocoInfo.length > 0) {
+            var _word = "<h3>cocoFlow<h3>";
+            for (var i = 0; i < workJson.cocoInfo[0].cocoInfo[0].messages.length; i++) {
+                var _div = document.createElement("div");
+                var _div2 = document.createElement("div");
+
+                _div.innerHTML = `<h4 v-if="${workJson.cocoInfo[0].cocoInfo[0].messages[i].role == 'assistant'}">小可AI助手:${this.MarkdownT(workJson.cocoInfo[0].cocoInfo[0].messages[i].content)}</h4>
+                
+                `;
+                _div2.innerHTML = `<h4 v-if="${workJson.cocoInfo[0].cocoInfo[0].messages[i].role == 'user'}">${w.sName}:${workJson.cocoInfo[0].cocoInfo[0].messages[i].content}</h4>
+                `;
+                _coco += `<div>${_div.innerHTML}</div>`+`<div>${_div2.innerHTML}</div>`;
+            }
+          }
+
+
           var _html =
             _course +
             _title +
@@ -3881,7 +3928,8 @@ export default {
             _choose +
             _lccjInfo +
             _bg +
-            _word;
+            _word+
+            _coco;
           this.generate(_html,w);
         })
         .catch((err) => {