Explorar o código

feat:完成行为记录工作,可从写作页面导出

白白 hai 1 ano
pai
achega
52e652d040

+ 96 - 1
package-lock.json

@@ -20,7 +20,8 @@
         "pinia-plugin-persistedstate": "^3.2.1",
         "vue": "^3.4.29",
         "vue-demi": "^0.14.10",
-        "vue-router": "^4.3.3"
+        "vue-router": "^4.3.3",
+        "xlsx": "^0.18.5"
       },
       "devDependencies": {
         "@rushstack/eslint-patch": "^1.8.0",
@@ -1678,6 +1679,14 @@
         "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
       }
     },
+    "node_modules/adler-32": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmmirror.com/adler-32/-/adler-32-1.3.1.tgz",
+      "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==",
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
     "node_modules/ajv": {
       "version": "6.12.6",
       "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz",
@@ -1839,6 +1848,18 @@
         "node": ">=6"
       }
     },
+    "node_modules/cfb": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmmirror.com/cfb/-/cfb-1.2.2.tgz",
+      "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==",
+      "dependencies": {
+        "adler-32": "~1.3.0",
+        "crc-32": "~1.2.0"
+      },
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
     "node_modules/chalk": {
       "version": "4.1.2",
       "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
@@ -1878,6 +1899,14 @@
         "node": ">=0.8"
       }
     },
+    "node_modules/codepage": {
+      "version": "1.15.0",
+      "resolved": "https://registry.npmmirror.com/codepage/-/codepage-1.15.0.tgz",
+      "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==",
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
     "node_modules/color-convert": {
       "version": "2.0.1",
       "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
@@ -1924,6 +1953,17 @@
       "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz",
       "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
     },
+    "node_modules/crc-32": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz",
+      "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==",
+      "bin": {
+        "crc32": "bin/crc32.njs"
+      },
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
     "node_modules/cross-spawn": {
       "version": "7.0.3",
       "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -2577,6 +2617,14 @@
         "node": ">= 6"
       }
     },
+    "node_modules/frac": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/frac/-/frac-1.1.2.tgz",
+      "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==",
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
     "node_modules/fs.realpath": {
       "version": "1.0.0",
       "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -3882,6 +3930,17 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/ssf": {
+      "version": "0.11.2",
+      "resolved": "https://registry.npmmirror.com/ssf/-/ssf-0.11.2.tgz",
+      "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==",
+      "dependencies": {
+        "frac": "~1.1.2"
+      },
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
     "node_modules/string_decoder": {
       "version": "1.1.1",
       "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -4201,6 +4260,22 @@
         "node": ">= 8"
       }
     },
+    "node_modules/wmf": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/wmf/-/wmf-1.0.2.tgz",
+      "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==",
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
+    "node_modules/word": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmmirror.com/word/-/word-0.3.0.tgz",
+      "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==",
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
     "node_modules/word-wrap": {
       "version": "1.2.5",
       "resolved": "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.5.tgz",
@@ -4216,6 +4291,26 @@
       "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
       "dev": true
     },
+    "node_modules/xlsx": {
+      "version": "0.18.5",
+      "resolved": "https://registry.npmmirror.com/xlsx/-/xlsx-0.18.5.tgz",
+      "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==",
+      "dependencies": {
+        "adler-32": "~1.3.0",
+        "cfb": "~1.2.1",
+        "codepage": "~1.15.0",
+        "crc-32": "~1.2.1",
+        "ssf": "~0.11.2",
+        "wmf": "~1.0.1",
+        "word": "~0.3.0"
+      },
+      "bin": {
+        "xlsx": "bin/xlsx.njs"
+      },
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
     "node_modules/xml-name-validator": {
       "version": "4.0.0",
       "resolved": "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz",

+ 2 - 1
package.json

@@ -24,7 +24,8 @@
     "pinia-plugin-persistedstate": "^3.2.1",
     "vue": "^3.4.29",
     "vue-demi": "^0.14.10",
-    "vue-router": "^4.3.3"
+    "vue-router": "^4.3.3",
+    "xlsx": "^0.18.5"
   },
   "devDependencies": {
     "@rushstack/eslint-patch": "^1.8.0",

+ 3 - 3
src/components/AIChatter/AIChatter.vue

@@ -199,7 +199,7 @@
   watch(() => props.messages, (newMessages:any) => {
     if (newMessages)
       data.messages = newMessages;
-    console.log(newMessages)
+    // console.log(newMessages)
     handleMessageList()
     nextTick(scrollToEnd);
   });
@@ -282,7 +282,7 @@
 
   // 处理ai对话显示异常问题
   const handleMessageList = () => {
-    console.log(data.messages)
+    // console.log(data.messages)
     let count1 = 0
     let count2 = 1
     let userNum = 0
@@ -324,7 +324,7 @@
         }
       }
     }
-    console.log(messageList)
+    // console.log(messageList)
   }
 
   // const recordKeyUp = (event:any) => {

+ 59 - 62
src/components/QuillEditor/Editor.vue

@@ -5,7 +5,6 @@
                  v-model:content="data.content"
                  :options="data.editorOption"
                  contentType="delta"
-                 @update:content="setValue()"
     />
   </div>
 </template>
@@ -22,7 +21,6 @@
 
   const content = ref('')
   const myQuillEditorRef = ref()
-  const fileBtn = ref()
 
   const data = reactive({
     content: ``,
@@ -45,50 +43,83 @@
     }
   })
 
-  // 抛出更改内容
-  const setValue = () => {
-    const html = toRaw(myQuillEditorRef.value).getHTML()
-    emitter.emit('get-html', html)
-    const text = toRaw(myQuillEditorRef.value).getText()
-    emitter.emit('get-text', text)
-    const content1 = toRaw(myQuillEditorRef.value).getContents()
-    emitter.emit('get-quill-content', content1)
+  /**
+   * 合并所有insert内容,因为存在attribute的缘故,原内容被分割成很多个insert
+   * @param ops
+   */
+  const processOps = (ops) => {
+    let combinedInsert = '';
+    ops.forEach(item => {
+      if (item.insert) {
+        combinedInsert += item.insert;
+      }
+    });
+    return combinedInsert
   }
 
 
   //初始化Quill及行为监控
   const initQuill = () => {
+
+    // 获取quill
     const quill = toRaw(myQuillEditorRef.value).getQuill()
+    // 加入工具栏
     if (myQuillEditorRef.value) {
       quill.getModule('toolbar')
     }
 
     // 文本变化监控
     quill.on(Quill.events.TEXT_CHANGE, (...args) => {
-      console.log("文本变化监控")
-      console.log(args)
+      const [delta, oldDelta, source] = args;
+      const deleteOps = delta.ops.filter(op => 'delete' in op);
+      // 直接将 ops 数组中的属性合并到一个对象
+      const opsObj = {};
+      delta.ops.forEach(op => {
+        Object.assign(opsObj, op);
+      });
+      delete opsObj.attributes;
+
       Object.assign(props.onTextChangeRef, {...args})
-      emitter.emit('change-record', {type: "TEXT_CHANGE", ...args["0"], time: dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss.SSS")})
-    })
+
+      if(deleteOps.length > 0){ //删除操作
+        // 获取删除操作的位置和长度
+        const deleteStart = delta.ops.find(op => 'delete' in op).retain || 0;   // 删除起始位置
+        const deleteLength = delta.ops.find(op => 'delete' in op).delete;       // 删除长度
+        const oldContent = processOps(args["1"].ops)// 原内容
+        // 提取被删除的具体内容
+        const deletedContent = oldContent.slice(deleteStart, deleteStart + deleteLength);
+
+        emitter.emit('change-record', {
+          type: "delete",
+          retain: 0,
+          ...opsObj,
+          oldContent,
+          deletedContent,
+          docLength: quill.getLength() - 1,
+          letterCount: (quill.getText().match(/[a-zA-Z\d\u4e00-\u9fa5]/g) || []).length
+        })
+      } else {
+        emitter.emit('change-record', {
+          type: "insert",
+          retain: 0,
+          ...opsObj,
+          docLength: quill.getLength() - 1,
+          letterCount: (quill.getText().match(/[a-zA-Z\d\u4e00-\u9fa5]/g) || []).length,
+          key: args["0"].ops.find(op => 'insert' in op).insert,
+        })
+      }
+    });
 
     // 光标变化监控
     quill.on(Quill.events.SELECTION_CHANGE, (...args) => {
-      console.log("光标变化监控")
-      console.log(args)
       Object.assign(props.onSelectionChangeRef, {...args})
-      emitter.emit('change-record', {type: "SELECTION_CHANGE", ...args["0"], time: dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss.SSS")})
+      emitter.emit('change-record', {
+        type: "cursor_move",
+        retain: args["0"].index,  // 将 index 属性重命名为 retain
+        length: args["0"].length, // 保留 length 属性
+        time: dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss.SSS")
+      });
     });
-
-    // 粘贴行为监控
-    quill.root.addEventListener('paste', function (event) {
-      console.log("粘贴行为监控")
-      var clipboardData = event.clipboardData;
-      if (clipboardData && clipboardData.types && clipboardData.types.includes('text/plain')) {
-        var pastedText = clipboardData.getData('text/plain');
-        console.log('粘贴的纯文本内容:', pastedText);
-        emitter.emit('change-record', {type: "COPY", ops: pastedText, time: dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss.SSS")})
-      }
-    })
   }
 
 // 初始化编辑器
@@ -96,40 +127,6 @@
     initQuill()
   });
 
-  /**
-   * 暂不启用
-   * 用于处理图片
-   * @param state
-   */
-  const imgHandler = (state) => {
-    if (state) {
-      fileBtn.value.click()
-    }
-  }
-
-  /**
-   * 暂不启用
-   * 用于文件上传
-   * @param e
-   */
-  const handleUpload = (e) => {
-    const files = Array.prototype.slice.call(e.target.files)
-    if (!files) {
-      return
-    }
-    const formdata = new FormData()
-    formdata.append('file', files[0])
-    backsite.uploadFile(formdata)  // 此处使用服务端提供上传接口
-        .then(res => {
-          if (res.data.url) {
-            const quill = toRaw(myQuillEditor.value).getQuill()
-            const length = quill.getSelection().index
-            quill.insertEmbed(length, 'image', res.data.url)
-            quill.setSelection(length + 1)
-          }
-        })
-  }
-
 </script>
 
 <style scoped lang="scss">

+ 215 - 51
src/components/QuillEditor/QuillEditor.vue

@@ -4,62 +4,226 @@
   Created Date: 2025-1-8
 -->
 <template>
-  <div class="editor-container">
-    <Editor :onTextChangeRef="lastChange" :onSelectionChangeRef="range" :onGetHTML="getHTML" :onGetText="getText" @updateValue="getMsg"/>
+  <div class="editor-container" @keydown="handleKeydown" @keyup="handleKeyup">
+    <Editor :onTextChangeRef="lastChange" :onSelectionChangeRef="range" :onGetHTML="getHTML" :onGetText="getText"/>
+    <el-button @click="download">导出</el-button>
   </div>
 </template>
 
 <script setup lang="ts">
-import "./QuillEditor.scss"
-import Editor from './Editor.vue';
-import { onUnmounted, reactive, ref, watch } from 'vue';
-import emitter from '@/utils/emitter';
-// import * as XLSX from 'xlsx'
-
-let range = reactive({})
-let lastChange = reactive({})
-let getHTML = ref("")
-let getText = ref("")
-let getQuillContent = reactive({})
-// 行为记录
-let changeRecordList = reactive([])
-
-
-const emailForm = reactive({
-  test_msg: '1'
-})
-
-const getMsg = (val) => {
-  emailForm.test_msg = val
-}
+  import "./QuillEditor.scss"
+  import Editor from './Editor.vue';
+  import { onUnmounted, reactive, ref, watch } from 'vue';
+  import emitter from '@/utils/emitter';
+  import dayjs from "dayjs";
+  import * as XLSX from 'xlsx'
+
+  let range = reactive({})
+  let lastChange = reactive({})
+  let getHTML = ref("")
+  let getText = ref("")
+  let getQuillContent = reactive({})
+
+  // 新增:用于存储每个按键的down事件信息
+  let keyEventMap = reactive({})
+  let keyEventRecordList = reactive([])
+  // 行为记录
+  let changeRecordList = reactive([])
+
+  emitter.on('change-record', (value) => {
+    changeRecordList.push(value)
+  })
+
+  const handleKeydown = (event: KeyboardEvent) => {
+    // 增加对Shift组合键的识别
+    // 在handleKeyup中增加对组合键的识别
+    let key = event.key
+    if (event.shiftKey && /^[0-9]$/.test(key)) {
+      key = "!@#$%^&*()"[parseInt(key) - 1]; // 映射Shift+数字到符号
+    } else if(event.shiftKey && /^[a-z]$/i.test(event.key) ){
+      key = event.key.toUpperCase()
+    }
+
+    // 存储down事件信息到keyEventMap中
+    if (!keyEventMap[key]) {
+      keyEventMap[key] = [];
+    }
+
+    // 将每次down事件信息存入数组
+    keyEventMap[key].push({
+      downKey: event.key,
+      startStamp: event.timeStamp,
+      startTime: dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss.SSS")
+    });
+
+  }
+
+  function formatMilliseconds(milliseconds) {
+    // 把毫秒数转换为秒
+    const totalSeconds = Math.floor(milliseconds / 1000);
+    // 计算小时数
+    const hours = Math.floor(totalSeconds / 3600);
+    // 计算剩余的秒数
+    const remainingSecondsAfterHours = totalSeconds % 3600;
+    // 计算分钟数
+    const minutes = Math.floor(remainingSecondsAfterHours / 60);
+    // 计算最终的秒数
+    const seconds = remainingSecondsAfterHours % 60;
+
+    // 格式化小时、分钟和秒,不足两位前面补 0
+    const formattedHours = String(hours).padStart(2, '0');
+    const formattedMinutes = String(minutes).padStart(2, '0');
+    const formattedSeconds = String(seconds).padStart(2, '0');
+
+    // 返回格式化后的字符串
+    return `${formattedHours}:${formattedMinutes}:${formattedSeconds}`;
+  }
+
+  const getPause = (i: number) => {
+    let result = 0
+    for(let k = i-1; k >= 0; k--){
+      if('startStamp' in changeRecordList[k]){
+        result = changeRecordList[k].startStamp
+        break
+      }
+    }
+    return result
+  }
+
+  const handleKeyup = (event: KeyboardEvent) => {
+    // console.log("keyup")
+    // console.log(event)
+    const realTime = dayjs(new Date()).format("YYYY-MM-DD HH:mm:ss.SSS")
+    const key = event.key;
+    // 处理所有与该按键key有关的keydown行为
+    while (keyEventMap[key] && keyEventMap[key].length > 0) {
+      // 取得keydown事件信息
+      const downEvent = keyEventMap[key].pop();
+      // console.log("keydown事件存储的信息")
+      // console.log(downEvent)
+      // 将keydown信息与keyup整合
+      const combinedEvent = {
+        timeKey: key,
+        startStamp: downEvent.startStamp | 0,
+        startClock: formatMilliseconds(downEvent.startStamp | 0),
+        startTime: downEvent.startTime,
+        endStamp: event.timeStamp | 0,
+        endClock: formatMilliseconds(event.timeStamp | 0),
+        endTime: realTime,
+        actionTime: (event.timeStamp | 0) - (downEvent.startStamp | 0)
+      };
+      // 将得到的key事件的完整信息保存
+      keyEventRecordList.push(combinedEvent);
+
+      // 根据key的信息对行为进行分析记录
+      // 包括
+      // 1.单个字母的键入
+      // 2.删除按键
+      // 3.复制
+      // 4.粘贴
+      // 5.换行
+
+      for (let i = changeRecordList.length - 1; i >= 0; i--) {
+        // 删除按键的记录
+        if (key === 'Backspace') {
+          if (changeRecordList[i].type === 'delete') {
+            changeRecordList[i] = {
+              ...changeRecordList[i],
+              ...combinedEvent,
+              pauseTime: combinedEvent.startStamp - getPause(i)
+            }
+            break
+          } else {
+            continue
+          }
+
+        }
+        // 粘贴
+        else if ((key === 'c' || key === 'C') && event.ctrlKey === true) {
+          changeRecordList[i] = {
+            ...changeRecordList[i],
+            ...combinedEvent,
+            pauseTime: combinedEvent.startStamp - getPause(i),
+            type: 'paste'
+          }
+          break
+        }
+        // 复制
+        else if ((key === 'v' || key === 'V') && event.ctrlKey === true) {
+          changeRecordList[i] = {
+            ...changeRecordList[i],
+            ...combinedEvent,
+            pauseTime: combinedEvent.startStamp - getPause(i),
+            type: 'copy'
+          }
+          break
+        }
+        // 换行
+        else if (key === 'Enter') {
+          changeRecordList[i] = {
+            ...changeRecordList[i],
+            ...combinedEvent,
+            pauseTime: combinedEvent.startStamp - getPause(i),
+          }
+          break
+        }
+        // 字母的键入
+        else if ('key' in changeRecordList[i] && changeRecordList[i].key === combinedEvent.timeKey) {
+          changeRecordList[i] = {
+            ...changeRecordList[i],
+            ...combinedEvent,
+            pauseTime: combinedEvent.startStamp - getPause(i)
+          }
+          break
+        }
+        // TODO: 处理输入法键入
+      }
+
+      // 所有key相关信息处理完毕,删除map
+      if (keyEventMap[key].length === 0) {
+        delete keyEventMap[key];
+      }
+    }
+  }
+
+  const download = () => {
+    //   const ws = XLSX.utils.json_to_sheet(flattenOps(changeRecordList))
+    const ws = XLSX.utils.json_to_sheet(changeRecordList)
+    /* 新建空workbook */
+    const wb = XLSX.utils.book_new()
+    /* 添加worksheet,当然你可以添加多个,这里我只添加一个 */
+    XLSX.utils.book_append_sheet(wb, ws, 'result')
+
+    const wbout = XLSX.write(wb, {
+      bookType: 'xlsx',
+      bookSST: true,
+      type: 'array'
+    })
+
+    let url = window.URL.createObjectURL(new Blob([wbout]))
+    let link = document.createElement('a')
+    link.style.display = 'none'
+    link.href = url
+    link.setAttribute('download', '测试数据' + '.xls')
+    document.body.appendChild(link)
+    link.click()
+    document.body.removeChild(link) //下载完成移除元素
+    window.URL.revokeObjectURL(url) //释放掉blob对象
+
+  }
+
+  // 监听 changeRecordList 数组变化
+  watch(
+      () => changeRecordList,
+      (newValue, oldValue) => {
+        console.log(changeRecordList);
+      },
+      { deep: true }
+  )
 
-emitter.on('get-html', (value: string) => {
-  console.log(value)
-  getHTML.value = value
-})
-
-emitter.on('get-text', (value: string) => {
-  console.log(value)
-  getText.value = value
-})
-
-emitter.on('get-quill-content', (value: Object) => {
-  console.log(value)
-  Object.assign(getQuillContent, value)
-})
-
-// 接收行为数据
-emitter.on('change-record', (value) => {
-  console.log(value)
-  changeRecordList.push(value)
-})
-
-onUnmounted(() => {
-  emitter.off('get-html')
-  emitter.off('get-text')
-  emitter.off('change-record')
-  emitter.off('get-quill-content')
-})
+  onUnmounted(() => {
+    emitter.off("change-record")
+  })
 
 </script>
 

+ 2 - 2
src/views/AIEvaluationPage/AIEvaluationPage.vue

@@ -229,7 +229,7 @@
     selectedVersion.value = version
     apis.getOverall(assignmentId,store.user.id,version)
         .then(res => {
-          console.log(res)
+          // console.log(res)
           data.overallEvaluation = res.data.data
         })
         .catch(err => {
@@ -238,7 +238,7 @@
         })
     apis.getSentence(assignmentId,store.user.id,version)
         .then(res => {
-          console.log(res)
+          // console.log(res)
           if(res.data.code === 200){
             data.sentenceEvaluationList = res.data.data
           } else {

+ 3 - 3
src/views/Home/component/Silder/index.vue

@@ -131,7 +131,7 @@ import * as path from "node:path";
   const getEvaluation = () => {
     apis.getOverall(props.engagement.assignmentId, store.user.id,props.engagement.version)
         .then(res => {
-          console.log(res)
+          // console.log(res)
           data.overallEvaluation = res.data.data
           loading.value = false;
         })
@@ -231,14 +231,14 @@ import * as path from "node:path";
       apis.getEvaluationVersionList(props.engagement.assignmentId, store.user.id)
           .then(res => {
             // 从未批改过
-            console.log(res.data.data.length === 0)
+            // console.log(res.data.data.length === 0)
             if(res.data.data.length === 0){
               showCorrectBtn.value = true
               showCorrectToPageBtn.value = false
             } else {
               showCorrectToPageBtn.value = true
               showCorrectBtn.value = (res.data.data[0].version !== props.engagement.version)
-              console.log(res.data.data)
+              // console.log(res.data.data)
             }
           })
           .catch(err => {