11wqe1 il y a 5 mois
Parent
commit
000f08070e

+ 305 - 0
src/assets/css/markdownCssCopy.css

@@ -0,0 +1,305 @@
+.zxtTxt ul ul ul {
+    list-style-type: square
+}
+
+.zxtTxt ul ul {
+    list-style-type: circle
+}
+
+.zxtTxt ul {
+    list-style-type: disc
+}
+
+.zxtTxt ol,.zxtTxt ul {
+    padding-left: 2em;
+    margin-top: 0;
+    margin-bottom: 16px
+}
+
+.zxtTxt li+li {
+    margin-top: .25em
+}
+
+.zxtTxt audio {
+    max-width: 100%
+}
+
+.zxtTxt audio:focus {
+    outline: none
+}
+
+.zxtTxt video {
+    max-height: 90vh;
+    max-width: 100%
+}
+
+.zxtTxt img {
+    max-width: 100%
+}
+
+.zxtTxt img.emoji {
+    cursor: auto;
+    max-width: 20px;
+    vertical-align: sub
+}
+
+.zxtTxt h1, .zxtTxt h2 {
+    padding-bottom: 0.3em;
+    border-bottom: 1px solid #eaecef;
+}
+
+.zxtTxt hr {
+    background-color: #eaecef;
+}
+
+.zxtTxt blockquote {
+    color: #6a737d;
+    border-left: .25em solid #eaecef
+}
+
+.zxtTxt iframe {
+    border: 1px solid #d1d5da
+}
+
+.zxtTxt table tr {
+    border-top: 1px solid #c6cbd1;
+    background-color: #fafbfc
+}
+
+.zxtTxt table td, .zxtTxt table th {
+    border: 1px solid #dfe2e5
+}
+
+.zxtTxt table tbody tr:nth-child(2n) {
+    background-color: #fff
+}
+
+.zxtTxt code:not(.hljs):not(.highlight-chroma) {
+    background-color: rgba(27, 31, 35, .05);
+}
+
+.zxtTxt kbd {
+    color: #24292e;
+    background-color: #fafbfc;
+    border: solid 1px #d1d5da;
+    box-shadow: inset 0 -1px 0 #d1d5da;
+}
+
+.vditor-speech {
+    background-color: #f6f8fa;
+    border: 1px solid #d1d5da;
+    color: #586069;
+}
+
+.vditor-speech--current, .vditor-speech:hover {
+    color: #4285f4;
+}
+
+.vditor-linkcard a {
+    background-color: #f6f8fa;
+}
+
+.vditor-linkcard a:visited .vditor-linkcard__abstract {
+    color: rgba(88, 96, 105, 0.36);
+}
+
+.vditor-linkcard__title {
+    color: #24292e;
+}
+
+.vditor-linkcard__abstract {
+    color: #586069;
+}
+
+.vditor-linkcard__site {
+    color: #4285f4;
+}
+
+.vditor-linkcard__image {
+    background-color: rgba(88, 96, 105, 0.36);
+}
+
+
+.zxtTxt h1,.zxtTxt h2,.zxtTxt h3,.zxtTxt h4,.zxtTxt h5,.zxtTxt h6 {
+    margin-top: 24px;
+    margin-bottom: 16px;
+    font-weight: 600;
+    line-height: 1.25
+}
+
+.zxtTxt h1:hover .vditor-anchor svg,.zxtTxt h2:hover .vditor-anchor svg,.zxtTxt h3:hover .vditor-anchor svg,.zxtTxt h4:hover .vditor-anchor svg,.zxtTxt h5:hover .vditor-anchor svg,.zxtTxt h6:hover .vditor-anchor svg {
+    visibility: visible
+}
+
+.zxtTxt h1 {
+    font-size: 1.75em
+}
+
+.zxtTxt h2 {
+    font-size: 1.55em
+}
+
+.zxtTxt h3 {
+    font-size: 1.38em
+}
+
+.zxtTxt h4 {
+    font-size: 1.25em
+}
+
+.zxtTxt h5 {
+    font-size: 1.13em
+}
+
+.zxtTxt h6 {
+    font-size: 1em
+}
+
+.zxtTxt hr {
+    height: 2px;
+    padding: 0;
+    margin: 24px 0;
+    background-color: #eaecef;
+    border: 0
+}
+
+.zxtTxt p {
+    margin-top: 0;
+    margin-bottom: 16px
+}
+
+.zxtTxt blockquote {
+    padding: 0 1em;
+    color: #6a737d;
+    border-left: .25em solid #eaecef;
+    margin: 0 0 16px 0
+}
+
+.zxtTxt blockquote>:first-child {
+    margin-top: 0
+}
+
+.zxtTxt blockquote>:last-child {
+    margin-bottom: 0
+}
+
+.zxtTxt ins>iframe {
+    border: 0
+}
+
+.zxtTxt iframe {
+    border: 1px solid #d1d5da;
+    max-width: 100%;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box
+}
+
+.zxtTxt iframe.iframe__video {
+    min-width: 80%;
+    min-height: 36vh
+}
+
+.zxtTxt table {
+    border-collapse: collapse;
+    empty-cells: show;
+    margin-bottom: 16px;
+    overflow: auto;
+    border-spacing: 0;
+    display: block;
+    word-break: keep-all;
+    width: 100%
+}
+
+.zxtTxt table tr {
+    background-color: #fafbfc;
+    border-top: 1px solid #c6cbd1
+}
+
+.zxtTxt table td,.zxtTxt table th {
+    padding: 6px 13px;
+    border: 1px solid #dfe2e5;
+    word-break: normal;
+    white-space: nowrap
+}
+
+.zxtTxt table td:first-child:after,.zxtTxt table th:first-child:after {
+    content: "";
+    display: inline-block;
+    vertical-align: top;
+    min-height: 24px
+}
+
+.zxtTxt table th {
+    font-weight: 600
+}
+
+.zxtTxt table tbody tr:nth-child(2n) {
+    background-color: #fff
+}
+
+.zxtTxt code:not(.hljs):not(.highlight-chroma) {
+    padding: .2em .4em;
+    margin: 0;
+    font-size: 85%;
+    border-radius: 3px;
+    font-family: mononoki,Consolas,Liberation Mono,Menlo,Courier,monospace,Apple Color Emoji,Segoe UI Emoji,Noto Color Emoji,Segoe UI Symbol,Android Emoji,EmojiSymbols;
+    word-break: break-word;
+    background-size: 20px 20px;
+    white-space: pre-wrap
+}
+
+.zxtTxt pre {
+    margin: 1em 0
+}
+
+.zxtTxt pre>code {
+    margin: 0;
+    font-size: 85%;
+    padding: .5em;
+    border-radius: 5px;
+    display: block;
+    overflow: auto;
+    white-space: pre;
+    font-family: mononoki,Consolas,Liberation Mono,Menlo,Courier,monospace,Apple Color Emoji,Segoe UI Emoji,Noto Color Emoji,Segoe UI Symbol,Android Emoji,EmojiSymbols;
+    background-size: 20px 20px;
+    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8AgMAAABHkjHhAAAACVBMVEWAgIBaWlo+Pj7rTFvWAAAAA3RSTlMHCAw+VhR4AAAA+klEQVQoz4WSMW7EQAhFPxKWNh2FCx+HkaZI6RRb5DYbyVfIJXLKDCFoMbaTKSw/8ZnPAPjaH2xgZcUNUDADD7D9LtDBCLZ45fbkvo/30K8yeI64pPwl6znd/3n/Oe93P3ho9qeh72btTFzqkz0rsJle8Zr81OLEwZ1dv/713uWqvu2pl+k0fy7MWtj9r/tN5q/02z89qa/L4Dc2LvM93kezPfXlME/O86EbY/V9GB9ePX8G1/6W+/9h1dq/HGfTfzT3j/xNo7522Bfnqe5jO/fvhVthlfk434v3iO9zG/UOphyPeinPl1J8Gtaa7xPTa/Dk+RIs4deMvwGvcGsmsCvJ0AAAAABJRU5ErkJggg==);
+    word-break: normal;
+    word-wrap: normal
+}
+
+.zxtTxt pre:hover div.vditor-copy {
+    display: block
+}
+
+
+.zxtTxt kbd {
+    display: inline-block;
+    padding: 3px 5px;
+    font: 11px Consolas,Liberation Mono,Menlo,Courier,monospace;
+    line-height: 10px;
+    color: #24292e;
+    vertical-align: middle;
+    background-color: #fafbfc;
+    border: 1px solid #d1d5da;
+    border-radius: 3px;
+    -webkit-box-shadow: inset 0 -1px 0 #d1d5da;
+    box-shadow: inset 0 -1px 0 #d1d5da
+}
+
+.zxtTxt summary {
+    cursor: pointer
+}
+
+.zxtTxt summary:focus {
+    outline: none
+}
+
+.zxtTxt svg {
+    height: auto;
+    width: auto;
+    stroke-width: initial
+}
+
+.zxtTxt blockquote:last-child,.zxtTxt hr:last-child,.zxtTxt ol:last-child,.zxtTxt p:last-child,.zxtTxt pre:last-child,.zxtTxt ul:last-child {
+    margin-bottom: 0
+}

+ 88 - 0
src/components/pages/components/exjsmind.vue

@@ -0,0 +1,88 @@
+<template>
+  <div >
+    <div ref="jsm" style="width: 100%;"></div>
+  </div>
+</template>
+
+<script>
+import jsMind from "jsmind";
+import "jsmind/style/jsmind.css";
+
+export default {
+
+  props: {
+    treeData: {
+      type: Object
+    },
+		keyL:{
+			type:String,
+			default:""
+		},
+  },
+  data() {
+    return {};
+  },
+  mounted() {
+    this.createMindMap();
+  },
+  watch: {
+    keyL(nl, ol) {
+      console.log('88888888888888888888');
+      
+      this.createMindMap();
+    }
+  },
+  methods: {
+    // 素养发展总览思维导图的渲染
+    createMindMap() {
+      const options = {
+        container: this.$refs.jsm,
+        editable: false, // 可选,是否启用编辑
+        theme: "primary",
+        view: {
+          line_width: 2 // 思维导图线条的粗细
+          // line_color: this.lineColor, // 思维导图线条的颜色
+        },
+        shortcut: {
+          enable: true // 禁用快捷键
+        },
+        layout: {
+          hspace: 20, // 节点之间的水平间距
+          vspace: 10, // 节点之间的垂直间距
+          pspace: 13 // 节点与连接线之间的水平间距(用于容纳节点收缩/展开控制器)
+        },
+        mode: "side" // 显示模式,子节点只分布在根节点右侧
+      };
+
+      // 使用 new 关键字创建 jsMind 实例
+      const jm = new jsMind(options);
+      // console.log('jm',jm);
+
+      // 调用 show 方法显示思维导图
+      jm.show({
+        meta: {
+          name: "jsmind",
+          author: "hizzgdev@163.com",
+          version: "0.2"
+        },
+        format: "node_tree",
+        data: this.treeData
+      });
+
+      let elements = this.$refs.jsm.getElementsByClassName("jsmind-inner")[0];
+
+      let sw = (700 / jm.view.size.w).toFixed(2);
+
+
+      elements.style.height = `${jm.view.size.h * sw}px`;
+      elements.style.width = `${jm.view.size.w * sw}px`;
+
+      jm.view.minZoom = sw; //
+      jm.view.setZoom(jm.view.minZoom); // 应用最小缩放级别
+      jm.view.show(); // 重绘思维导图以应用缩放变化
+    }
+  },
+};
+</script>
+
+<style scoped></style>

Fichier diff supprimé car celui-ci est trop grand
+ 521 - 300
src/components/pages/components/exportDataDialog.vue


+ 119 - 22
src/components/pages/components/exportWorksDialog.vue

@@ -80,9 +80,14 @@
                 margin: 35px 0 20px;
               "
         >
-        {{ worksDialogCon2.course }}
+          {{ worksDialogCon2.course }}
         </div>
-        <div v-for="i in workList" :key="i.id" v-if="isStage(i.taskList)" class="stageCon">
+        <div
+          v-for="i in workList"
+          :key="i.id"
+          v-if="isStage(i.taskList)"
+          class="stageCon"
+        >
           <div class="stageTit">
             第{{ i.id * 1 + 1 }}阶段<span v-if="i.name">:{{ i.name }}</span>
           </div>
@@ -513,7 +518,7 @@
                           style="
                               display: flex;
                               justify-content: space-between;
-                              max-width: 100%;
+                              width: 100%;
                               min-width: 48%;
                             "
                         >
@@ -567,16 +572,22 @@
                         flex-direction: column;
                         margin-left: 10px;
                       "
-                    v-if="l.rate.content || l.rate.comment"
+                    v-if="l.rate.content"
                   >
                     <div class="taskScoConTit">评语</div>
                     <div class="WorkCon">
-                      {{ l.rate.content || l.rate.comment }}
+                      {{ l.rate.content }}
                     </div>
                   </div>
                 </div>
               </div>
             </div>
+            <!-- 思维导图 -->
+            <div class="taskTitInd">
+              <div></div>
+              <span>任务评价体系</span>
+            </div>
+            <exjsmind :treeData="k.treeData" :keyL="(k.task).toString()"></exjsmind>
           </div>
         </div>
         <div style="display: flex;justify-content: flex-end;width: 100%;">
@@ -592,9 +603,13 @@
 import html2canvas from "html2canvas";
 import jspdf from "jspdf";
 import JSZip from "jszip";
+import exjsmind from "./exjsmind";
 
 export default {
   props: ["uid", "cid", "worksDialog", "worksDialogCon", "digNum"],
+  components: {
+    exjsmind
+  },
   data() {
     return {
       workList: [],
@@ -631,25 +646,25 @@ export default {
   },
   computed: {
     isStage() {
-      return function (val) {
-        let isShow = false
-        
-        val.forEach(e=>{
-          e.toolEList.forEach(i=>{
+      return function(val) {
+        let isShow = false;
+
+        val.forEach(e => {
+          e.toolEList.forEach(i => {
             if (i.content.length) {
-              isShow = true
+              isShow = true;
             }
-          })
-        })
+          });
+        });
 
         return isShow;
       };
     },
     isTask() {
-      return function (val) {
+      return function(val) {
         let isShow = false;
 
-        val.forEach((e) => {
+        val.forEach(e => {
           if (e.content.length) {
             isShow = true;
           }
@@ -667,7 +682,6 @@ export default {
         delete valT.comment;
 
         let data = Object.values(valT);
-        console.log("data", data);
 
         let new1 = data.reduce(function(pre, next, index) {
           return pre + next * 1;
@@ -808,7 +822,12 @@ export default {
                     task: kin,
                     taskTit: k.task ? k.task : "",
                     taskDetail: k.taskDetail,
-                    toolEList: k.toolChoose
+                    toolEList: k.toolChoose,
+                    treeData: {
+                      id: "0",
+                      topic: k.task ? k.task : "任务" + i,
+                      children: []
+                    }
                   });
                 });
               });
@@ -871,7 +890,7 @@ export default {
             // console.log("AreaAllWork", JSON.parse(JSON.stringify(AreaAllWork)));
 
             framework.forEach(e => {
-              e.taskList.forEach(k => {
+              e.taskList.forEach((k, kin) => {
                 k.toolEList.forEach((l, lIndex) => {
                   l.content = [];
                   l.rate = "";
@@ -886,19 +905,87 @@ export default {
                     ) {
                       l.content.push(i.content);
                       l.time = i.tTime;
-
                     }
                   });
 
                   // 分数循环
                   this.workEvaList.forEach(p => {
-                    p.tool = p.tool ? p.tool : 0
+                    p.tool = p.tool ? p.tool : 0;
                     if (
                       k.stage == p.stage &&
                       k.task == p.task &&
                       lIndex == p.tool
                     ) {
-                      l.rate = JSON.parse(p.rate);
+                      let rateCopy = JSON.parse(p.rate);
+                      for (const key in rateCopy) {
+                        if (key != "content") {
+                          rateCopy[key] = rateCopy[key] * 1;
+                        }
+                      }
+                      l.rate = rateCopy;
+                    }
+                  });
+                  // 将没有提交作业,但是有评分标准的数据填上数据,防止报错
+                  if (!l.rate && l.eList && l.eList.length) {
+                    l.rate = { content: "" };
+                    l.eList.forEach(elp => {
+                      l.rate[elp.detail] = 0;
+                    });
+                  }
+                  // 将素养添加进treeData中
+                  if (l.eList && l.eList.length) {
+                    l.eList.forEach((itemE, itemEInd) => {
+                      let arr6 = k.treeData.children.some(
+                        item => item.topic == itemE.target
+                      );
+                      if (!arr6) {
+                        k.treeData.children.push({
+                          id: kin + "+" + lIndex + "+" + itemEInd,
+                          topic: itemE.target,
+                          children: []
+                        });
+                      }
+                    });
+                  }
+                });
+              });
+            });
+            framework.forEach(e => {
+              e.taskList.forEach((k, kind) => {
+                k.treeData.children.forEach(l => {
+                  k.toolEList.forEach((el, elind) => {
+                    if (el.eList) {
+                      el.eList.forEach((st, stind) => {
+                        // console.log(l.topic, st.target, l.topic == st.target);
+
+                        if (l.topic == st.target) {
+                          let res3 = l.children.filter(function(item, index) {
+                            return item.topic == st.detail;
+                          });
+
+                          if (!res3.length) {
+                            l.children.push({
+                              id: kind + "+" + elind + "+" + stind + "c",
+                              topic: st.detail,
+                              children: [
+                                {
+                                  id: kind + "+" + elind + "+" + stind + "b",
+                                  topic: `工具${elind}`
+                                }
+                              ]
+                            });
+                          } else {
+                            l.children.forEach(lc => {
+                              if (lc.topic == st.detail) {
+                                lc.children.push({
+                                  id: kind + "+" + elind + "+" + stind + "b",
+                                  topic: `工具${elind}`
+                                });
+                              }
+                            });
+                          }
+                        }
+                      });
                     }
                   });
                 });
@@ -914,7 +1001,7 @@ export default {
 
             setTimeout(() => {
               return resolve();
-            }, 1000);
+            }, 1500);
           })
           .catch(err => {
             console.error(err);
@@ -970,6 +1057,7 @@ export default {
         this.worksDialogCon2 = this.tableData[i];
         await this.getCourseDetail();
         await this.exportPdfSet();
+
         let a = await this.getPdf2();
         pdfList.push(a);
       }
@@ -1326,6 +1414,8 @@ export default {
 }
 .taskTitInd {
   font-size: 14px;
+  display: flex;
+  align-items: center;
 }
 .taskTitInd span:nth-child(1) {
   background-color: rgba(242, 161, 75, 1);
@@ -1336,6 +1426,13 @@ export default {
   box-sizing: border-box;
   font-size: 12px;
 }
+.taskTitInd div {
+  background-color: rgba(242, 161, 75, 1);
+  width: 15px;
+  height: 15px;
+  border-radius: 50%;
+  margin-right: 10px;
+}
 .taskTitInd span:nth-child(2) {
   color: rgba(0, 0, 0, 0.9);
   font-weight: 600;

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

@@ -583,8 +583,15 @@
 
 <script>
 export default {
-  props: ["id", "studentId"],
-
+  props: {
+    id: {
+      type: String
+    },
+		studentId:{
+			type:String,
+			default:""
+		},
+  },
   data() {
     return {
       barLeft: [],
@@ -607,6 +614,7 @@ export default {
       loading: false
     };
   },
+  
   computed: {
     isStage() {
       return function(val) {
@@ -662,6 +670,17 @@ export default {
 
     this.getWorks1();
   },
+  watch: {
+    
+    studentId(newL,oldL){
+      console.log('6666666666666666666666666666666666666666');
+
+      this.cid = JSON.parse(JSON.stringify(this.id));
+      this.uid = JSON.parse(JSON.stringify(this.studentId));
+
+      this.getWorks1();
+    }
+  },
   methods: {
     // 下一个
     nxtPer() {

+ 11 - 4
src/components/pages/components/worksDetail2.vue

@@ -24,7 +24,7 @@
         <!-- chooseDy
         chooseTask-->
         <div class="student_search">
-          <div>课程筛选</div>
+          <div>筛选</div>
           <div style="display: flex; width: 90%">
 
 
@@ -2103,6 +2103,7 @@ export default {
       }
     },
     handleClose(done) {
+      this.studentId =""
       done();
     },
     tableRowClassName({ row, rowIndex }) {
@@ -2128,11 +2129,17 @@ export default {
     lookWork(id, uid, type, index,con) {
       console.log('con',con);
 
-     
-      
       this.scopeId1 = id;
       this.studentId = uid;
-      if (this.DState == 5) return this.dialogVisible3 = true
+
+      if (this.DState == 5) {
+        this.$nextTick(()=>{
+          this.dialogVisible3 = true
+        })
+        return
+      }
+      
+            
       
 
       let params = {

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

@@ -327,7 +327,7 @@
     
     
     <el-dialog
-      title="自定义导出报告"
+      title="自定义导出作业"
       :visible.sync="dialogVisibleBao"
       :append-to-body="true"
       width="550px"

+ 2 - 0
src/main.js

@@ -21,6 +21,8 @@ import hevueImgPreview from './components/tools/hevue-img-preview'
 import './assets/css/button.css'
 import './assets/css/dialog.css'
 import './assets/css/markdownCss.css'
+import './assets/css/markdownCssCopy.css'
+
 import VueAudio from 'vue-audio-better'
 
 const echarts = require('echarts');

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff