浏览代码

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

lsc 3 月之前
父节点
当前提交
b2e42e4565

+ 4 - 4
src/components/pages/components/exjsmind.vue

@@ -69,7 +69,7 @@ export default {
 
       let elements = this.$refs.jsm.getElementsByClassName("jsmind-inner")[0];
 
-      let sw = (815 / jm.view.size.w).toFixed(2);
+      let sw = (715 / jm.view.size.w).toFixed(2);
 
       elements.style.height = `${jm.view.size.h * sw}px`;
 
@@ -90,9 +90,9 @@ export default {
   /* align-items: center; */
   /* justify-content: center; */
   /* min-width: 20px; */
-  max-width: 250px;
-  overflow: hidden;
-  letter-spacing: 3px;
+  /* max-width: 250px; */
+  /* overflow: hidden; */
+  letter-spacing: 5px;
   font-size: 12px !important;
   /* flex-wrap: wrap; */
   /* white-space: wrap; */

文件差异内容过多而无法显示
+ 385 - 389
src/components/pages/components/exportDataDialog.vue


+ 267 - 277
src/components/pages/components/exportWorksDialog.vue

@@ -280,51 +280,90 @@
                   </div>
                 </div>
                 <div v-if="l.tool[0] == 45">
-                    <div class="toolBlk">
-                      <img
-                        src="../../../assets/icon/thirdToolList/choose.png"
-                        alt=""
-                      />
-                      <div class="toolTit">
-                        <div>工具{{ lind + 1 }}:选择题</div>
-                        <div>
-                          根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
-                        </div>
+                  <div class="toolBlk">
+                    <img
+                      src="../../../assets/icon/thirdToolList/choose.png"
+                      alt=""
+                    />
+                    <div class="toolTit">
+                      <div>工具{{ lind + 1 }}:选择题</div>
+                      <div>
+                        根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
                       </div>
                     </div>
+                  </div>
+                  <div
+                    v-for="(i, index) in l.content[0].testJson"
+                    :key="index + 'm'"
+                  >
+                    <div>
+                      题目:{{ i.teststitle }}
+                      <span
+                        v-if="
+                          JSON.stringify(l.content[0].radio[index]) ==
+                            JSON.stringify(i.answer)
+                        "
+                        style="color: #868ce4"
+                        >回答正确</span
+                      >
+                      <span v-else style="color: red">回答错误</span>
+                    </div>
                     <div
-                      v-for="(i, index) in l.content[0].testJson"
-                      :key="index + 'm'"
+                      v-if="i.type == 1"
+                      style="display: flex; flex-direction: column"
                     >
-                      <div>
-                        题目:{{ i.teststitle }}
-                        <span
-                          v-if="
-                            JSON.stringify(l.content[0].radio[index]) ==
-                              JSON.stringify(i.answer)
-                          "
-                          style="color: #868ce4"
-                          >回答正确</span
-                        >
-                        <span v-else style="color: red">回答错误</span>
-                      </div>
-                      <div
-                        v-if="i.type == 1"
-                        style="display: flex; flex-direction: column"
-                      >
-                        <el-radio-group v-model="l.content[0].radio[index]">
-                          <div class="radioBox">
-                            <el-radio
-                              v-for="(item2, checkIndex) in i.checkList"
-                              :key="checkIndex + 'b'"
-                              :label="checkIndex"
-                              disabled
-                              :class="[
-                                i.answer == checkIndex
-                                  ? 'redioStyle5'
-                                  : 'redioStyle2'
-                              ]"
+                      <el-radio-group v-model="l.content[0].radio[index]">
+                        <div class="radioBox">
+                          <el-radio
+                            v-for="(item2, checkIndex) in i.checkList"
+                            :key="checkIndex + 'b'"
+                            :label="checkIndex"
+                            disabled
+                            :class="[
+                              i.answer == checkIndex
+                                ? 'redioStyle5'
+                                : 'redioStyle2'
+                            ]"
+                          >
+                            <div
+                              v-if="
+                                item2 && item2.imgType && item2.imgType == 1
+                              "
                             >
+                              <div
+                                class="inImg"
+                                @click.stop="previewImg(item2.src)"
+                              >
+                                <img
+                                  style="display: block"
+                                  :src="item2.src"
+                                  alt=""
+                                />
+                              </div>
+                            </div>
+                            <span v-else v-html="item2"></span>
+                          </el-radio>
+                        </div>
+                      </el-radio-group>
+                    </div>
+                    <div class="radioBox">
+                      <el-checkbox-group
+                        v-model="l.content[0].radio[index]"
+                        v-if="i.type == '2'"
+                      >
+                        <div class="radioBox">
+                          <el-checkbox
+                            v-for="(item2, checkIndex) in i.checkList"
+                            :key="checkIndex + 'c'"
+                            :label="checkIndex"
+                            disabled
+                            :class="[
+                              i.answer.includes(checkIndex)
+                                ? 'redioStyle3'
+                                : 'redioStyle4'
+                            ]"
+                          >
+                            <div style="display: flex">
                               <div
                                 v-if="
                                   item2 && item2.imgType && item2.imgType == 1
@@ -342,115 +381,74 @@
                                 </div>
                               </div>
                               <span v-else v-html="item2"></span>
-                            </el-radio>
-                          </div>
-                        </el-radio-group>
-                      </div>
-                      <div class="radioBox">
-                        <el-checkbox-group
-                          v-model="l.content[0].radio[index]"
-                          v-if="i.type == '2'"
-                        >
-                          <div class="radioBox">
-                            <el-checkbox
-                              v-for="(item2, checkIndex) in i.checkList"
-                              :key="checkIndex + 'c'"
-                              :label="checkIndex"
-                              disabled
-                              :class="[
-                                i.answer.includes(checkIndex)
-                                  ? 'redioStyle3'
-                                  : 'redioStyle4'
-                              ]"
-                            >
-                              <div style="display: flex">
-                                <div
-                                  v-if="
-                                    item2 && item2.imgType && item2.imgType == 1
-                                  "
-                                >
-                                  <div
-                                    class="inImg"
-                                    @click.stop="previewImg(item2.src)"
-                                  >
-                                    <img
-                                      style="display: block"
-                                      :src="item2.src"
-                                      alt=""
-                                    />
-                                  </div>
-                                </div>
-                                <span v-else v-html="item2"></span>
-                              </div>
-                            </el-checkbox>
-                          </div>
-                        </el-checkbox-group>
-                      </div>
-                    </div>
-                  </div>
-                  <!-- 选择匹配 -->
-                  <div v-if="l.tool[0] == 41">
-                    <div class="toolBlk">
-                      <img
-                        class="toolImg"
-                        src="../../../assets/icon/thirdToolList/select.png"
-                        alt=""
-                      />
-                      <div class="toolTit">
-                        <div>工具{{ lind + 1 }}:选择匹配</div>
-                        <div>
-                          根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
+                            </div>
+                          </el-checkbox>
                         </div>
-                      </div>
+                      </el-checkbox-group>
                     </div>
+                  </div>
+                </div>
+                <!-- 选择匹配 -->
+                <div v-if="l.tool[0] == 41">
+                  <div class="toolBlk">
                     <img
-                      @click.stop="previewImg(l.selectJson.url)"
-                      style="max-width: 200px"
-                      :src="l.selectJson.url"
+                      class="toolImg"
+                      src="../../../assets/icon/thirdToolList/select.png"
                       alt=""
                     />
-                    <div>
-                      <span style="margin-right: 10px">选项:</span
-                      ><span
-                        style="margin-right: 10px"
-                        v-for="(item, itInd) in l.selectJson.select"
-                        :key="itInd"
-                        >{{ item }}</span
-                      >
-                    </div>
-                    <div style="margin: 10px 0;">
-                      <span style="margin-right: 10px">回答:</span>
-
-                      <div
-                        style="margin-right: 10px"
-                        v-for="(item, itInd) in l.content[0]"
-                        :key="itInd"
-                      >
-                        选项{{ itInd + 1 }}:{{ l.selectJson.select[item] }}
-                        <span
-                          v-if="
-                            l.selectJson.answer[itInd] == l.content[0][itInd]
-                          "
-                          style="color: #868ce4"
-                          >回答正确</span
-                        >
-                        <span v-else style="color: red">回答错误</span>
+                    <div class="toolTit">
+                      <div>工具{{ lind + 1 }}:选择匹配</div>
+                      <div>
+                        根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
                       </div>
                     </div>
-                    <div>
-                      <span style="margin-right: 10px">答案:</span>
+                  </div>
+                  <img
+                    @click.stop="previewImg(l.selectJson.url)"
+                    style="max-width: 200px"
+                    :src="l.selectJson.url"
+                    alt=""
+                  />
+                  <div>
+                    <span style="margin-right: 10px">选项:</span
+                    ><span
+                      style="margin-right: 10px"
+                      v-for="(item, itInd) in l.selectJson.select"
+                      :key="itInd"
+                      >{{ item }}</span
+                    >
+                  </div>
+                  <div style="margin: 10px 0;">
+                    <span style="margin-right: 10px">回答:</span>
 
+                    <div
+                      style="margin-right: 10px"
+                      v-for="(item, itInd) in l.content[0]"
+                      :key="itInd"
+                    >
+                      选项{{ itInd + 1 }}:{{ l.selectJson.select[item] }}
                       <span
-                        style="margin-right: 10px"
-                        v-for="(item, itInd) in l.selectJson.answer"
-                        :key="itInd"
-                        >选项{{ itInd + 1 }}:{{
-                          l.selectJson.select[item]
-                        }}</span
+                        v-if="l.selectJson.answer[itInd] == l.content[0][itInd]"
+                        style="color: #868ce4"
+                        >回答正确</span
                       >
+                      <span v-else style="color: red">回答错误</span>
                     </div>
                   </div>
-                  <!-- <div v-if="l.tool[0] == 41">
+                  <div>
+                    <span style="margin-right: 10px">答案:</span>
+
+                    <span
+                      style="margin-right: 10px"
+                      v-for="(item, itInd) in l.selectJson.answer"
+                      :key="itInd"
+                      >选项{{ itInd + 1 }}:{{
+                        l.selectJson.select[item]
+                      }}</span
+                    >
+                  </div>
+                </div>
+                <!-- <div v-if="l.tool[0] == 41">
                     <div class="toolBlk">
                       <img
                         src="../../../assets/icon/thirdToolList/select.png"
@@ -489,76 +487,76 @@
                     </div>
                   </div> -->
 
-                  <!-- 排序 -->
-                  <div v-if="l.tool[0] == 47">
-                    <div class="toolBlk">
-                      <img
-                        src="../../../assets/icon/fourthToolList/conSentences.png"
-                        alt=""
-                      />
-                      <div class="toolTit">
-                        <div>工具{{ lind + 1 }}:排序</div>
-                        <div>
-                          根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
-                        </div>
+                <!-- 排序 -->
+                <div v-if="l.tool[0] == 47">
+                  <div class="toolBlk">
+                    <img
+                      src="../../../assets/icon/fourthToolList/conSentences.png"
+                      alt=""
+                    />
+                    <div class="toolTit">
+                      <div>工具{{ lind + 1 }}:排序</div>
+                      <div>
+                        根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
                       </div>
                     </div>
+                  </div>
+                  <div
+                    v-for="(i, index) in l.content[0]"
+                    :key="index"
+                    style="margin-bottom: 10px"
+                  >
                     <div
-                      v-for="(i, index) in l.content[0]"
-                      :key="index"
-                      style="margin-bottom: 10px"
-                    >
-                      <div
-                        style="
+                      style="
                             height: 20px;
                             display: flex;
                             align-items: center;
                             flex-wrap: wrap;
                           "
+                    >
+                      题目:
+                      <div
+                        class="sortTool"
+                        v-for="(i, index) in i.addSentence"
+                        :key="index"
                       >
-                        题目:
-                        <div
-                          class="sortTool"
-                          v-for="(i, index) in i.addSentence"
-                          :key="index"
-                        >
-                          {{ i }}
-                        </div>
-                        <span
-                          v-if="
-                            JSON.stringify(i.chooseSenList) ==
-                              JSON.stringify(i.addSentence)
-                          "
-                          style="color: #868ce4"
-                          >回答正确</span
-                        >
-                        <span v-else style="color: red">回答错误</span>
+                        {{ i }}
                       </div>
-                      <div
-                        style="
+                      <span
+                        v-if="
+                          JSON.stringify(i.chooseSenList) ==
+                            JSON.stringify(i.addSentence)
+                        "
+                        style="color: #868ce4"
+                        >回答正确</span
+                      >
+                      <span v-else style="color: red">回答错误</span>
+                    </div>
+                    <div
+                      style="
                             margin: 10px 0;
                             display: flex;
                             align-items: center;
                             flex-wrap: wrap;
                           "
+                    >
+                      学生回答:
+                      <div
+                        class="sortTool"
+                        v-for="(i, index) in i.chooseSenList"
+                        :key="index"
                       >
-                        学生回答:
-                        <div
-                          class="sortTool"
-                          v-for="(i, index) in i.chooseSenList"
-                          :key="index"
-                        >
-                          {{ i }}
-                        </div>
-                      </div>
-                      <div>
-                        答案:
-                        <span style="margin: 0 5px">{{
-                          i.addSentence.join(",")
-                        }}</span>
+                        {{ i }}
                       </div>
                     </div>
+                    <div>
+                      答案:
+                      <span style="margin: 0 5px">{{
+                        i.addSentence.join(",")
+                      }}</span>
+                    </div>
                   </div>
+                </div>
               </div>
 
               <!-- ai作业得分  -->
@@ -586,7 +584,7 @@
                 <div class="taskScoCon">
                   <!-- 分数详情与素养 -->
                   <div style="flex: 1; display: flex; flex-wrap: wrap">
-                    <div style="width: 375px; margin:0 20px 10px 0">
+                    <div style="width: 315px; margin:0 20px 10px 0">
                       <div class="taskScoConTit">分数详情</div>
                       <div
                         v-for="(wItem, ind) in l.eList"
@@ -655,14 +653,14 @@
                   </div>
                 </div>
               </div>
-             
+
               <!-- 阶段  -->
               <div
                 v-if="
-                    l.eList &&
+                  l.eList &&
                     l.eList.length &&
-                    CState != 5 && 
-                    CState != 6 && 
+                    CState != 5 &&
+                    CState != 6 &&
                     lind == k.toolEList.length - 1
                 "
                 class="taskSco"
@@ -681,7 +679,7 @@
                 <div class="taskScoCon">
                   <!-- 分数详情与素养 -->
                   <div style="flex: 1; display: flex; flex-wrap: wrap">
-                    <div style="width: 375px; margin:0 20px 10px 0">
+                    <div style="width: 315px; margin:0 20px 10px 0">
                       <div class="taskScoConTit">分数详情</div>
                       <div
                         v-for="(wItem, ind) in l.eList"
@@ -723,10 +721,12 @@
                             :content="wItem.target[wItem.target.length - 1]"
                             placement="top-start"
                           > -->
-                            <div class="RootImgBlockSy">
-                              <span v-if="wItem.target && wItem.target.length"> {{ wItem.target[wItem.target.length - 1] }}</span>
-                              <span v-else> {{ wItem.target }}</span>
-                            </div>
+                          <div class="RootImgBlockSy">
+                            <span v-if="wItem.target && wItem.target.length">
+                              {{ wItem.target[wItem.target.length - 1] }}</span
+                            >
+                            <span v-else> {{ wItem.target }}</span>
+                          </div>
                           <!-- </el-tooltip> -->
                         </div>
                       </div>
@@ -751,9 +751,8 @@
                   </div>
                 </div>
               </div>
-
             </div>
-          
+
             <!-- 思维导图 -->
             <div v-if="CState == 5 || CState == 6" class="taskTitInd">
               <div></div>
@@ -860,15 +859,15 @@ export default {
     totalScore() {
       return function(val) {
         let valT = JSON.parse(JSON.stringify(val));
-        
+
         if (!valT) return "0.0";
 
         delete valT.content;
         delete valT.comment;
-        console.log('valT',JSON.parse(JSON.stringify(val)));
+        console.log("valT", JSON.parse(JSON.stringify(val)));
 
         let data = Object.values(valT);
-        console.log('data',JSON.parse(JSON.stringify(data)));
+        console.log("data", JSON.parse(JSON.stringify(data)));
 
         let new1 = data.reduce(function(pre, next, index) {
           return pre + next * 1;
@@ -879,22 +878,21 @@ export default {
         return (new1 / data.length).toFixed(1);
       };
     },
-    workTime(){
+    workTime() {
       return function(val) {
-        if (!val.length) return ''
-        let TimeList = []
-        val.forEach(e=>{
+        if (!val.length) return "";
+        let TimeList = [];
+        val.forEach(e => {
           if (e.time) {
             const timestamp = new Date(e.time).getTime();
-            TimeList.push(timestamp)
+            TimeList.push(timestamp);
           }
-        })
-
-        console.log('TimeList',TimeList);
-        TimeList.sort(function(a,b){
-          return a-b;//从小到大排序
-        })
+        });
 
+        console.log("TimeList", TimeList);
+        TimeList.sort(function(a, b) {
+          return a - b; //从小到大排序
+        });
 
         return this.convertToTimestamp(TimeList[0]);
       };
@@ -902,52 +900,43 @@ export default {
   },
 
   methods: {
-      // 时间戳转时间
-      convertToTimestamp(val) {
+    // 时间戳转时间
+    convertToTimestamp(val) {
       const date = new Date(val);
 
       // 使用Date对象的方法获取年、月、日、时、分、秒
       const year = date.getFullYear();
-      const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需要加1
-      const day = String(date.getDate()).padStart(2, '0');
-      const hours = String(date.getHours()).padStart(2, '0');
-      const minutes = String(date.getMinutes()).padStart(2, '0');
-      const seconds = String(date.getSeconds()).padStart(2, '0');
+      const month = String(date.getMonth() + 1).padStart(2, "0"); // 月份从0开始,需要加1
+      const day = String(date.getDate()).padStart(2, "0");
+      const hours = String(date.getHours()).padStart(2, "0");
+      const minutes = String(date.getMinutes()).padStart(2, "0");
+      const seconds = String(date.getSeconds()).padStart(2, "0");
 
       // 格式化后的日期时间字符串
       const formattedDateTime = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
-      
-      return formattedDateTime
+
+      return formattedDateTime;
     },
     // 下载pdf文件
     getPdf() {
       const content = this.$refs.reportPdf;
-
-      html2canvas(content).then(canvas => {
-
+      const dpi = 300;
+      html2canvas(content, {
+        dpi: dpi, // 设置截图的分辨率
+        scale: dpi / 96 // 设置截图缩放比例,以适应pdf的dpi
+      }).then(canvas => {
         var contentWidth = canvas.width;
         var contentHeight = canvas.height;
 
-      
-          //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
-          var imgWidth = 595.28;
-          var imgHeight = (592.28 / contentWidth) * contentHeight;
-
-          var imgData = canvas.toDataURL("image/jpeg", 1.0);
-
-        const pdf = new jspdf("p", "pt", [
-            imgWidth,
-            imgHeight
-        ]);
-
-        pdf.addImage(
-          imgData,
-          "PNG",
-          0,
-          0,
-          imgWidth,
-          imgHeight
-        );
+        //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
+        var imgWidth = 595.28;
+        var imgHeight = (592.28 / contentWidth) * contentHeight;
+
+        var imgData = canvas.toDataURL("image/jpeg", 1.0);
+
+        const pdf = new jspdf("p", "pt", [imgWidth, imgHeight]);
+
+        pdf.addImage(imgData, "PNG", 0, 0, imgWidth, imgHeight);
         pdf.save(
           this.worksDialogCon2.course +
             "-作业集-" +
@@ -955,42 +944,31 @@ export default {
             ".pdf"
         );
       });
-
-  
     },
 
     // 压缩pdf
     async getPdf2() {
-  
       const content = this.$refs.reportPdf;
 
       return new Promise((resolve, reject) => {
-        html2canvas(content)
+        const dpi = 300;
+        html2canvas(content, {
+          dpi: dpi, // 设置截图的分辨率
+          scale: dpi / 96 // 设置截图缩放比例,以适应pdf的dpi
+        })
           .then(canvas => {
-
             var contentWidth = canvas.width;
             var contentHeight = canvas.height;
 
-      
             //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
             var imgWidth = 595.28;
             var imgHeight = (592.28 / contentWidth) * contentHeight;
 
             var imgData = canvas.toDataURL("image/jpeg", 1.0);
-          
-            const pdf = new jspdf("p", "pt", [
-              imgWidth,
-              imgHeight
-            ]);
-
-            pdf.addImage(
-              imgData,
-              "PNG",
-              0,
-              0,
-              imgWidth,
-              imgHeight
-            );
+
+            const pdf = new jspdf("p", "pt", [imgWidth, imgHeight]);
+
+            pdf.addImage(imgData, "PNG", 0, 0, imgWidth, imgHeight);
             var pdfData = {
               pdfName:
                 this.worksDialogCon2.course +
@@ -1162,16 +1140,27 @@ export default {
                     }
                   });
                   // 将没有提交作业,但是有评分标准的数据填上数据,防止报错
-                  if (!l.rate && l.eList && l.eList.length && (this.CState == 5 || this.CState == 6)) {
+                  if (
+                    !l.rate &&
+                    l.eList &&
+                    l.eList.length &&
+                    (this.CState == 5 || this.CState == 6)
+                  ) {
                     l.rate = { content: "" };
                     l.eList.forEach(elp => {
                       l.rate[elp.detail] = 0;
                     });
-                  }else if ((!l.rate && l.eList && l.eList.length && this.CState != 5 && this.CState != 6)) {
-                      l.rate = { content: "" };
-                      l.eList.forEach(elp => {
-                        l.rate[elp.value] = 0;
-                      });
+                  } else if (
+                    !l.rate &&
+                    l.eList &&
+                    l.eList.length &&
+                    this.CState != 5 &&
+                    this.CState != 6
+                  ) {
+                    l.rate = { content: "" };
+                    l.eList.forEach(elp => {
+                      l.rate[elp.value] = 0;
+                    });
                   }
                   // 将素养添加进treeData中
                   if (l.eList && l.eList.length) {
@@ -1211,7 +1200,7 @@ export default {
                               children: [
                                 {
                                   id: kind + "+" + elind + "+" + stind + "b",
-                                  topic: `工具${elind}`
+                                  topic: `工具${elind * 1 + 1}`
                                 }
                               ]
                             });
@@ -1220,7 +1209,7 @@ export default {
                               if (lc.topic == st.detail) {
                                 lc.children.push({
                                   id: kind + "+" + elind + "+" + stind + "b",
-                                  topic: `工具${elind}`
+                                  topic: `工具${elind * 1 + 1}`
                                 });
                               }
                             });
@@ -1384,7 +1373,7 @@ export default {
   position: relative;
 }
 .pdfCon {
-  width: 810pt;
+  width: 220mm;
   margin: auto;
   position: relative;
 }
@@ -1420,8 +1409,9 @@ export default {
 }
 .coverPage {
   /* height: 840pt; */
-  padding: 185px 8% 0;
+  padding: 150px 8% 0;
   background-color: #ccc;
+  box-sizing: border-box;
   position: relative;
   background-image: url("../../../assets/icon/exportPdfworks/bcg1.svg"),
     url("../../../assets/icon/exportPdfworks/bcg2.svg");
@@ -1494,7 +1484,7 @@ export default {
   background-color: #e3edfe;
   display: flex;
   flex-direction: column;
-  padding: 0 110px;
+  padding: 0 60px;
   padding-bottom: 100px;
   box-sizing: border-box;
   font-family: PingFang SC;

部分文件因为文件数量过多而无法显示