Browse Source

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

SanHQin 5 months ago
parent
commit
ddb97670c7

+ 1 - 1
dist/index.html

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

File diff suppressed because it is too large
+ 0 - 0
dist/static/css/app.0f28d7073930cf3d7d86bee217effab0.css


File diff suppressed because it is too large
+ 0 - 0
dist/static/css/app.0f28d7073930cf3d7d86bee217effab0.css.map


File diff suppressed because it is too large
+ 0 - 0
dist/static/css/app.da0e45b98d63998db09b9c47bf9c3a0a.css


File diff suppressed because it is too large
+ 0 - 0
dist/static/css/app.da0e45b98d63998db09b9c47bf9c3a0a.css.map


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/app.b92f1db6abfc85f801a1.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/app.b92f1db6abfc85f801a1.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/manifest.571c38d63f24b1ae9e16.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/vendor.5ba3fd24c1c61a653d00.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/vendor.5ba3fd24c1c61a653d00.js.map


+ 95 - 3
package-lock.json

@@ -8,6 +8,8 @@
       "name": "cocoroboworkpc",
       "version": "1.0.0",
       "dependencies": {
+        "@vue-office/docx": "^1.6.2",
+        "@vue/composition-api": "^1.7.2",
         "axios": "^0.21.1",
         "cacache": "^16.1.1",
         "clipboard": "^2.0.10",
@@ -372,11 +374,35 @@
         "@popperjs/core": "^2.5.4"
       }
     },
+    "node_modules/@vue-office/docx": {
+      "version": "1.6.2",
+      "resolved": "https://registry.npmmirror.com/@vue-office/docx/-/docx-1.6.2.tgz",
+      "integrity": "sha512-OHAoUHeY8nHjhWvwDhlPx+/rmRkxmqLpvPgtfCEOZ4H1c1LCdJ6eDbdV3152ww8dcdZ7fgGQu3fmSSaI7JwdpQ==",
+      "hasInstallScript": true,
+      "peerDependencies": {
+        "@vue/composition-api": "^1.7.1",
+        "vue": "^2.0.0 || >=3.0.0",
+        "vue-demi": "^0.14.6"
+      },
+      "peerDependenciesMeta": {
+        "@vue/composition-api": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/@vue/babel-helper-vue-jsx-merge-props": {
       "version": "1.2.1",
       "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.2.1.tgz?cache=0&sync_timestamp=1602851122331&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-helper-vue-jsx-merge-props%2Fdownload%2F%40vue%2Fbabel-helper-vue-jsx-merge-props-1.2.1.tgz",
       "integrity": "sha1-MWJKelBfsU2h1YAjclpMXycOaoE="
     },
+    "node_modules/@vue/composition-api": {
+      "version": "1.7.2",
+      "resolved": "https://registry.npmmirror.com/@vue/composition-api/-/composition-api-1.7.2.tgz",
+      "integrity": "sha512-M8jm9J/laYrYT02665HkZ5l2fWTK4dcVg3BsDHm/pfz+MjDYwX+9FUaZyGwEyXEDonQYRCo0H7aLgdklcIELjw==",
+      "peerDependencies": {
+        "vue": ">= 2.5 < 2.7"
+      }
+    },
     "node_modules/@webassemblyjs/ast": {
       "version": "1.11.1",
       "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.1.tgz",
@@ -17481,6 +17507,32 @@
       "resolved": "https://registry.npmmirror.com/vue-cookies/download/vue-cookies-1.7.4.tgz",
       "integrity": "sha1-0kHQoEMdoHlYN2UdELTXPnyNPo0="
     },
+    "node_modules/vue-demi": {
+      "version": "0.14.10",
+      "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz",
+      "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
+      "hasInstallScript": true,
+      "peer": true,
+      "bin": {
+        "vue-demi-fix": "bin/vue-demi-fix.js",
+        "vue-demi-switch": "bin/vue-demi-switch.js"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      },
+      "peerDependencies": {
+        "@vue/composition-api": "^1.0.0-rc.1",
+        "vue": "^3.0.0-0 || ^2.6.0"
+      },
+      "peerDependenciesMeta": {
+        "@vue/composition-api": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/vue-hot-reload-api": {
       "version": "2.3.4",
       "resolved": "https://registry.npmmirror.com/vue-hot-reload-api/download/vue-hot-reload-api-2.3.4.tgz?cache=0&sync_timestamp=1568190386192&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-hot-reload-api%2Fdownload%2Fvue-hot-reload-api-2.3.4.tgz",
@@ -19536,11 +19588,23 @@
         "@popperjs/core": "^2.5.4"
       }
     },
+    "@vue-office/docx": {
+      "version": "1.6.2",
+      "resolved": "https://registry.npmmirror.com/@vue-office/docx/-/docx-1.6.2.tgz",
+      "integrity": "sha512-OHAoUHeY8nHjhWvwDhlPx+/rmRkxmqLpvPgtfCEOZ4H1c1LCdJ6eDbdV3152ww8dcdZ7fgGQu3fmSSaI7JwdpQ==",
+      "requires": {}
+    },
     "@vue/babel-helper-vue-jsx-merge-props": {
       "version": "1.2.1",
       "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.2.1.tgz?cache=0&sync_timestamp=1602851122331&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-helper-vue-jsx-merge-props%2Fdownload%2F%40vue%2Fbabel-helper-vue-jsx-merge-props-1.2.1.tgz",
       "integrity": "sha1-MWJKelBfsU2h1YAjclpMXycOaoE="
     },
+    "@vue/composition-api": {
+      "version": "1.7.2",
+      "resolved": "https://registry.npmmirror.com/@vue/composition-api/-/composition-api-1.7.2.tgz",
+      "integrity": "sha512-M8jm9J/laYrYT02665HkZ5l2fWTK4dcVg3BsDHm/pfz+MjDYwX+9FUaZyGwEyXEDonQYRCo0H7aLgdklcIELjw==",
+      "requires": {}
+    },
     "@webassemblyjs/ast": {
       "version": "1.11.1",
       "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.1.tgz",
@@ -21819,6 +21883,8 @@
     "cocoroboworkpc": {
       "version": "file:",
       "requires": {
+        "@vue-office/docx": "^1.6.2",
+        "@vue/composition-api": "*",
         "autoprefixer": "^7.1.2",
         "axios": "^0.21.1",
         "babel-core": "^6.22.1",
@@ -21836,8 +21902,8 @@
         "copy-webpack-plugin": "^4.0.1",
         "css-loader": "^0.28.0",
         "dayjs": "^1.11.7",
-        "docxtemplater": "*",
-        "docxtemplater-image-module-free": "*",
+        "docxtemplater": "^3.50.0",
+        "docxtemplater-image-module-free": "^1.1.1",
         "echarts": "^5.4.2",
         "echarts-wordcloud": "^2.1.0",
         "element-china-area-data": "^5.0.2",
@@ -21872,7 +21938,7 @@
         "ora": "^1.2.0",
         "papaparse": "^5.4.1",
         "pdfjs-dist": "^2.5.207",
-        "pizzip": "*",
+        "pizzip": "^3.1.7",
         "portfinder": "^1.0.13",
         "postcss-import": "^11.0.0",
         "postcss-loader": "^2.0.8",
@@ -22143,11 +22209,23 @@
             "@popperjs/core": "^2.5.4"
           }
         },
+        "@vue-office/docx": {
+          "version": "1.6.2",
+          "resolved": "https://registry.npmmirror.com/@vue-office/docx/-/docx-1.6.2.tgz",
+          "integrity": "sha512-OHAoUHeY8nHjhWvwDhlPx+/rmRkxmqLpvPgtfCEOZ4H1c1LCdJ6eDbdV3152ww8dcdZ7fgGQu3fmSSaI7JwdpQ==",
+          "requires": {}
+        },
         "@vue/babel-helper-vue-jsx-merge-props": {
           "version": "1.2.1",
           "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.2.1.tgz?cache=0&sync_timestamp=1602851122331&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-helper-vue-jsx-merge-props%2Fdownload%2F%40vue%2Fbabel-helper-vue-jsx-merge-props-1.2.1.tgz",
           "integrity": "sha1-MWJKelBfsU2h1YAjclpMXycOaoE="
         },
+        "@vue/composition-api": {
+          "version": "1.7.2",
+          "resolved": "https://registry.npmmirror.com/@vue/composition-api/-/composition-api-1.7.2.tgz",
+          "integrity": "sha512-M8jm9J/laYrYT02665HkZ5l2fWTK4dcVg3BsDHm/pfz+MjDYwX+9FUaZyGwEyXEDonQYRCo0H7aLgdklcIELjw==",
+          "requires": {}
+        },
         "@webassemblyjs/ast": {
           "version": "1.11.1",
           "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.1.tgz",
@@ -36247,6 +36325,13 @@
           "resolved": "https://registry.npmmirror.com/vue-cookies/download/vue-cookies-1.7.4.tgz",
           "integrity": "sha1-0kHQoEMdoHlYN2UdELTXPnyNPo0="
         },
+        "vue-demi": {
+          "version": "0.14.10",
+          "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz",
+          "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
+          "peer": true,
+          "requires": {}
+        },
         "vue-hot-reload-api": {
           "version": "2.3.4",
           "resolved": "https://registry.npmmirror.com/vue-hot-reload-api/download/vue-hot-reload-api-2.3.4.tgz?cache=0&sync_timestamp=1568190386192&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-hot-reload-api%2Fdownload%2Fvue-hot-reload-api-2.3.4.tgz",
@@ -49531,6 +49616,13 @@
       "resolved": "https://registry.npmmirror.com/vue-cookies/download/vue-cookies-1.7.4.tgz",
       "integrity": "sha1-0kHQoEMdoHlYN2UdELTXPnyNPo0="
     },
+    "vue-demi": {
+      "version": "0.14.10",
+      "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz",
+      "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==",
+      "peer": true,
+      "requires": {}
+    },
     "vue-hot-reload-api": {
       "version": "2.3.4",
       "resolved": "https://registry.npmmirror.com/vue-hot-reload-api/download/vue-hot-reload-api-2.3.4.tgz?cache=0&sync_timestamp=1568190386192&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-hot-reload-api%2Fdownload%2Fvue-hot-reload-api-2.3.4.tgz",

+ 31 - 31
src/components/pages/aiAddCourse/addCourse.vue

@@ -9364,7 +9364,7 @@ ${_this.unitJson[0].chapterInfo[0].taskJson[index].taskDetail3.replaceAll('#',''
         session_name: uuidv4(),
         userId: this.userid,
         file_ids: [],
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       this.ajax
@@ -18193,7 +18193,7 @@ ${this.courseText && this.aiCallBack[0] == 2 ? '注意,优化原有的<参考
         userId: _this.userid,
         uid: _uuid,
         file_ids: fileid.length ? [...fileid] : '',
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       // let params = JSON.stringify({
@@ -18462,7 +18462,7 @@ ${this.courseText && this.aiCallBack[0] == 2 ? '注意,优化原有的<参考
         session_name: uuidv4(),
         userId: this.userid,
         file_ids: fileid.length ? [...fileid] : '',
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       this.ajax
@@ -18874,7 +18874,7 @@ ${this.courseText && this.aiCallBack[0] == 2 ? '注意,优化原有的<参考
         session_name: uuidv4(),
         userId: this.userid,
         file_ids: fileid.length ? [...fileid] : '',
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       this.ajax
@@ -19133,7 +19133,7 @@ ${this.courseText && this.aiCallBack[0] == 2 ? '注意,优化原有的<参考
         session_name: uuidv4(),
         userId: this.userid,
         file_ids: '',
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       this.ajax
@@ -19463,7 +19463,7 @@ ${this.courseText && this.aiCallBack[0] == 2 ? '注意,优化原有的<参考
         session_name: uuidv4(),
         userId: this.userid,
         file_ids: fileid.length ? [...fileid] : '',
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       this.ajax
@@ -19732,7 +19732,7 @@ ${this.courseText && this.aiCallBack[0] == 2 ? '注意,优化原有的<参考
         session_name: uuidv4(),
         userId: this.userid,
         file_ids: fileid.length ? [...fileid] : '',
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       this.ajax
@@ -19881,7 +19881,7 @@ ${this.courseText && this.aiCallBack[0] == 2 ? '注意,优化原有的<参考
         session_name: uuidv4(),
         userId: this.userid,
         file_ids: fileid.length ? [...fileid] : '',
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       this.ajax
@@ -19964,7 +19964,7 @@ ${this.courseText && this.aiCallBack[0] == 2 ? '注意,优化原有的<参考
         session_name: uuidv4(),
         userId: this.userid,
         file_ids: fileid.length ? [...fileid] : '',
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       this.ajax
@@ -20124,7 +20124,7 @@ ${this.courseText && this.aiCallBack[0] == 2 ? '注意,优化原有的<参考
         session_name: uuidv4(),
         userId: this.userid,
         file_ids: fileid.length ? [...fileid] : '',
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       this.ajax
@@ -20280,7 +20280,7 @@ ${_this.unitJson[0].chapterInfo[0].taskJson[task].taskDetail3.replaceAll('#','')
           session_name: uuidv4(),
           userId: this.userid,
           file_ids: fileid.length ? [...fileid] : '',
-          model: 'gpt-4o-2024-08-06',
+          model: 'gpt-4o-mini',
           temperature: this.mode == 3 ? 0.5 : 0.1,
         }
         this.ajax
@@ -20463,7 +20463,7 @@ ${_this.unitJson[0].chapterInfo[0].taskJson[_this.taskCount].taskDetail3.replace
         session_name: uuidv4(),
         userId: this.userid,
         file_ids: fileid.length ? [...fileid] : '',
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       this.ajax
@@ -20707,7 +20707,7 @@ ${_this.unitJson[0].chapterInfo[0].taskJson[_this.taskCount].taskDetail3.replace
         session_name: uuidv4(),
         userId: this.userid,
         file_ids: fileid.length ? [...fileid] : '',
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       this.ajax
@@ -20946,7 +20946,7 @@ ${msg}
         userId: _this.userid,
         uid: _uuid,
         file_ids: fileid.length ? [...fileid] : '',
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       // let params = JSON.stringify({
@@ -21146,7 +21146,7 @@ ${_this.languageSetting == 2 ? 'Sub-Criteria' : '评价标准'}:评价标准
         userId: _this.userid,
         uid: _uuid,
         file_ids: fileid.length ? [...fileid] : '',
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       // let params = JSON.stringify({
@@ -21288,7 +21288,7 @@ ${taskArray.length ? '其他任务大纲内容' + taskArray.join(',') : ''}
         userId: _this.userid,
         uid: _uuid,
         file_ids: fileid.length ? [...fileid] : '',
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       // let params = JSON.stringify({
@@ -21473,7 +21473,7 @@ ${_this.aiCallBack.taskDetail}
         userId: _this.userid,
         uid: _uuid,
         file_ids: fileid.length ? [...fileid] : '',
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       // let params = JSON.stringify({
@@ -21645,7 +21645,7 @@ ${msg} 输出格式和内容要求参考#格式与要求
         userId: _this.userid,
         uid: _uuid,
         file_ids: fileid.length ? [...fileid] : '',
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       // let params = JSON.stringify({
@@ -21858,7 +21858,7 @@ ${msg} 优化核心素养、目标、评价标准,输出格式和内容要求
         session_name: uuidv4(),
         userId: _this.userid,
         file_ids: fileid.length ? [...fileid] : '',
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       // let params = JSON.stringify({
@@ -22014,7 +22014,7 @@ ${_text2}`
         userId: _this.userid,
         uid: _uuid,
         file_ids: fileid.length ? [...fileid] : '',
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       // let params = JSON.stringify({
@@ -22231,7 +22231,7 @@ ${(_this.templateid == "4480d65a-1e48-11ef-bee5-005056b86db5" || _this.templatei
         userId: _this.userid,
         uid: _uuid,
         file_ids: fileid.length ? [...fileid] : '',
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       // let params = JSON.stringify({
@@ -22533,7 +22533,7 @@ ${this.aitype == 'aiCpote4' ? '## 目标层\n'+this.cpote['cpote3'] : ''}`
         userId: _this.userid,
         uid: _uuid,
         file_ids: fileid.length ? [...fileid] : '',
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       // let params = JSON.stringify({
@@ -22728,7 +22728,7 @@ ${this.teacherCourseText && this.aiCallBack == 2 ? '注意,优化原有的<参
         userId: _this.userid,
         uid: _uuid,
         file_ids: fileid.length ? [...fileid] : '',
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       // let params = JSON.stringify({
@@ -22929,7 +22929,7 @@ ${this.targetCourseText && this.aiCallBack == 2 ? '注意,优化原有的<参
         userId: _this.userid,
         uid: _uuid,
         file_ids: fileid.length ? [...fileid] : '',
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       // let params = JSON.stringify({
@@ -23134,7 +23134,7 @@ ${this.targetCourseText && this.aiCallBack == 2 ? '注意,优化原有的<参
         userId: _this.userid,
         uid: _uuid,
         file_ids: fileid.length ? [...fileid] : '',
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       // let params = JSON.stringify({
@@ -23345,7 +23345,7 @@ ${this.targetCourseText && this.aiCallBack == 2 ? '注意,优化原有的<参
         userId: _this.userid,
         uid: _uuid,
         file_ids: fileid.length ? [...fileid] : '',
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       // let params = JSON.stringify({
@@ -23557,7 +23557,7 @@ ${mclass.length ? '年级:' + mclass.join(",") : ''}`
         userId: _this.userid,
         uid: _uuid,
         file_ids: fileid.length ? [...fileid] : '',
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       // let params = JSON.stringify({
@@ -23644,7 +23644,7 @@ ${msg}
  `
       // let params = {
       //   // "model": "Chat",
-      //   model: 'gpt-4o-2024-08-06',
+      //   model: 'gpt-4o-mini',
       //   // model: "gpt-4o",
       //   temperature: this.mode == 3 ? 0.5 : 0.1,
       //   max_tokens: 4096,
@@ -23709,7 +23709,7 @@ ${msg}
         session_name: uuidv4(),
         userId: this.userid,
         file_ids: [],
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       this.ajax
@@ -23887,7 +23887,7 @@ ${msg}
         session_name: uuidv4(),
         userId: this.userid,
         file_ids: fileid.length ? [...fileid] : '',
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       this.ajax
@@ -23957,7 +23957,7 @@ ${msg}
         session_name: uuidv4(),
         userId: this.userid,
         file_ids: fileid.length ? [...fileid] : '',
-        model: 'gpt-4o-2024-08-06',
+        model: 'gpt-4o-mini',
         temperature: this.mode == 3 ? 0.5 : 0.1,
       }
       this.ajax

+ 11 - 1
src/components/pages/aiAddCourse/aiBoxRight.vue

@@ -3,6 +3,16 @@
     <div class="ai_body_dialog" ref="chatDialog">
       <div class="dialog_content" v-for="item in array" :key="item.uid">
         <div v-if="item.content" style="margin-left: auto;">
+          <div
+            class="ai_btn_box"
+            style="margin-left: auto;"
+            v-if="!pan(item.content).length"
+          >
+            <img
+              src="../../../assets/icon/course/pasete.png"
+              @click="onCopy(item.content)"
+            />
+          </div>
           <div class="content content2" v-html="item.content"></div>
           <div class="role">
             <img src="../../../assets/icon/new/role2.png" />
@@ -1922,7 +1932,7 @@ ${i.content}`
   background: #3681fc;
   color: #fff;
   border-radius: 8px 2px 8px 8px;
-  margin-left: auto;
+  /* margin-left: auto; */
 }
 
 .ai_body_select {

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

@@ -1,6 +1,6 @@
 <template>
     <div>
-        <el-dialog title="AI生成PPT" :visible.sync="dialogVisibleAiCreate2" :append-to-body="true" width="700px" :before-close="handleClose" class="dialog_diy">
+        <el-dialog :title="`任务${lineCount+1}的AI生成PPT`" :visible.sync="dialogVisibleAiCreate2" :append-to-body="true" width="700px" :before-close="handleClose" class="dialog_diy">
             <div style="height: 500px; padding: 15px" v-loading="loading" element-loading-text="小可正在努力生成中,请稍等...">
                 <div class="c_pub_button_confirm stopBtn" v-if="loading && stopPpt" @click="cancelAjax()">停止</div>
 

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

@@ -256,7 +256,7 @@ export default {
                 session_name: uuidv4(),
                 userId: _this.userid,
                 file_ids: [],
-                model: 'gpt-4o-2024-08-06',
+                model: 'gpt-4o-mini',
             }
             _this.ajax
                 .post("https://gpt4.cocorobo.cn/ai_agent_park_chat", parm)
@@ -311,7 +311,7 @@ export default {
 [{aid:""},{aid:""}]
 `
             let parm = {
-              model: 'gpt-4o-2024-08-06',
+              model: 'gpt-4o-mini',
               temperature: 0,
               max_tokens: 4096,
               top_p: 1,

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

@@ -342,7 +342,7 @@ Language: ${this.getLang()}
                 session_name: uuidv4(),
                 userId: _this.userid,
                 file_ids: fileid.length ? [...fileid] : '',
-                model: 'gpt-4o-2024-08-06',
+                model: 'gpt-4o-mini',
                 temperature: 0.1,
             }
             _this.ajax.post('https://gpt4.cocorobo.cn/ai_agent_park_chat', params, _this.cancelToken).then(function (response) {

+ 1348 - 0
src/components/pages/components/lookWork.vue

@@ -0,0 +1,1348 @@
+<template>
+  <div class="pbl" v-loading="loading">
+    <div class="titBri">
+      <div class="claInfo">
+        <img v-if="userImg" :src="userImg" alt="" />
+        <img
+          v-else
+          src="https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/static/img/portal.b3cf7fa.png"
+          alt=""
+        />
+        <span>{{ userName }}</span>
+        <span>{{ courseName }}</span>
+      </div>
+
+      <div>
+        <el-button type="primary" @click="upPer" size="small" v-if="positP > 0"
+          >上一个</el-button
+        >
+        <el-button
+          type="primary"
+          @click="nxtPer"
+          size="small"
+          v-if="positP < tableData.length - 1"
+          >下一个</el-button
+        >
+      </div>
+    </div>
+    <div class="pageCon">
+      <div class="rightBar">
+        <el-col style="width: 100%" :span="12">
+          <el-menu
+            default-active="2"
+            :default-openeds="['0']"
+            class="el-menu-vertical-demo"
+          >
+            <el-submenu
+              :index="i.id"
+              v-for="i in dyList"
+              :key="i.id"
+              :collapse="false"
+            >
+              <template slot="title">
+                <div class="eliP">
+                  {{ "第" + (i.id * 1 + 1) + "阶段" }}:{{ i.name }}
+                </div>
+              </template>
+              <el-menu-item-group>
+                <el-menu-item
+                  v-for="(k, kin) in i.taskList"
+                  :key="k.id"
+                  :index="k.id"
+                  style="display: flex; align-items: center"
+                >
+                  <div @click.stop="positT(k.id)" class="TitBti">
+                    任务{{ kin + 1 }}
+                  </div>
+                  <div @click.stop="positT(k.id)" class="eliP">
+                    {{ k.name }}
+                  </div>
+                </el-menu-item>
+              </el-menu-item-group>
+            </el-submenu>
+          </el-menu>
+        </el-col>
+      </div>
+
+      <div class="workCon">
+        <div>
+          <div
+            v-for="i in workList"
+            :key="i.id"
+            v-if="isStage(i.taskList)"
+            class="stageCon"
+          >
+            <div class="stageTit">阶段{{ i.id + 1 }}</div>
+
+            <div
+              v-for="(k, kIndex) in i.taskList"
+              :key="k.task + 'a'"
+              style="margin-bottom: 15px"
+              v-if="isTask(k.toolEList)"
+            >
+              <div
+                style="
+                    width: 100%;
+                    display: flex;
+                    justify-content: space-between;
+                    margin-bottom: 10px;
+                  "
+                :id="k.stage + '-' + k.task"
+              >
+                <div class="taskTitInd">
+                  <span class="TitBti">任务{{ k.task + 1 }}</span>
+                  <span>{{ k.taskTit }}</span>
+                </div>
+                <div></div>
+              </div>
+              <div v-if="k.taskDetail" class="taskBri">
+                {{ k.taskDetail }}
+              </div>
+              <div
+                v-for="(l, lind) in k.toolEList"
+                :key="lind + 'l'"
+                class="toolEListCon"
+              >
+                <div style="flex: 1" v-if="l.content && l.content.length">
+                  <div v-if="l.tool[0] == 15">
+                    <div class="toolBlk">
+                      <img
+                        src="../../../assets/icon/thirdToolList/answer.png"
+                        alt=""
+                      />
+                      <div class="toolTit">
+                        <div>工具{{ lind + 1 }}:问答工具</div>
+                        <div>提问:{{ l.content[0][0].answerTitle }}</div>
+                      </div>
+                    </div>
+                    <div class="answerTxt">
+                      回答:{{ l.content[0][0].answer }}
+                    </div>
+                  </div>
+                  <div v-if="l.tool[0] == 52">
+                    <div class="toolBlk">
+                      <img
+                        src="../../../assets/icon/fourthToolList/text.png"
+                        alt=""
+                      />
+                      <div class="toolTit">
+                        <div>工具{{ lind + 1 }}:文档工具</div>
+                        <div>
+                          根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
+                        </div>
+                      </div>
+                    </div>
+                    <div class="answerTxt" v-html="l.content[0].text"></div>
+                  </div>
+                  <div v-if="l.tool[0] == 16 || l.tool[0] == 50">
+                    <div class="toolBlk">
+                      <img
+                        v-if="l.tool[0] == 16"
+                        src="../../../assets/icon/thirdToolList/work.png"
+                        alt=""
+                      />
+                      <img
+                        v-if="l.tool[0] == 50"
+                        src="../../../assets/icon/thirdToolList/plwork.png"
+                        alt=""
+                      />
+                      <div class="toolTit">
+                        <div>
+                          工具{{ lind + 1 }}:{{
+                            l.tool[0] == 16 ? "作业提交" : "批量上传"
+                          }}
+                        </div>
+                        <div>
+                          根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
+                        </div>
+                      </div>
+                    </div>
+                    <div v-for="(i, codex) in l.content" :key="codex + 'co'">
+                      <div class="answerTxt" v-html="i"></div>
+                    </div>
+                  </div>
+                  <div
+                    v-if="l.tool[0] == 7 || l.tool[0] == 1 || l.tool[0] == 3"
+                  >
+                    <div class="toolBlk">
+                      <img
+                        v-if="l.tool[0] == 1"
+                        src="../../../assets/icon/secondToolList/whiteBoard.png"
+                        alt=""
+                      />
+                      <img
+                        v-if="l.tool[0] == 3"
+                        src="../../../assets/icon/secondToolList/mindMapping.png"
+                        alt=""
+                      />
+                      <img
+                        v-if="l.tool[0] == 7"
+                        src="../../../assets/icon/secondToolList/mindNetwork.png"
+                        alt=""
+                      />
+                      <div class="toolTit">
+                        <div>
+                          工具{{ lind + 1 }}:{{
+                            l.tool[0] == 1
+                              ? "电子白板"
+                              : l.tool[0] == 7
+                              ? "思维网格"
+                              : "思维导图"
+                          }}
+                        </div>
+                        <div>
+                          根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
+                        </div>
+                      </div>
+                    </div>
+                    <img style="max-width: 200px" :src="l.content[0]" alt="" />
+                    <div>{{ l.content[0] }}</div>
+                  </div>
+                  <div v-if="l.tool[0] == 48">
+                    <div class="toolBlk">
+                      <img
+                        src="../../../assets/icon/fourthToolList/table.png"
+                        alt=""
+                      />
+                      <div class="toolTit">
+                        <div>工具{{ lind + 1 }}:表格</div>
+                        <div>
+                          根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
+                        </div>
+                      </div>
+                    </div>
+                    <el-form>
+                      <div class="cont" v-html="l.content[0].text"></div>
+                    </el-form>
+                  </div>
+                  <div v-if="l.tool[0] == 4">
+                    <div class="toolBlk">
+                      <img
+                        src="../../../assets/icon/thirdToolList/ask.png"
+                        alt=""
+                      />
+                      <div class="toolTit">
+                        <div>工具{{ lind + 1 }}:问卷调查</div>
+                        <div>标题:{{ l.content[0][0].askJson.askTitle }}</div>
+                      </div>
+                    </div>
+
+                    <div
+                      style="margin-bottom: 5px"
+                      v-for="(i, index) in l.content[0][0].askJson.askJson"
+                      :key="index"
+                    >
+                      <div>题目:{{ i.askstitle }}</div>
+                      <el-radio-group
+                        v-if="!i.type"
+                        v-model="l.content[0][0].anwer[index]"
+                      >
+                        <el-radio
+                          v-for="(item2, checkIndex) in i.checkList"
+                          :key="checkIndex + 'b'"
+                          :label="checkIndex"
+                          disabled
+                        >
+                          {{ item2 }}
+                        </el-radio>
+                      </el-radio-group>
+                      <el-checkbox-group
+                        v-model="l.content[0][0].anwer[index]"
+                        v-else
+                      >
+                        <div class="radioBox">
+                          <el-checkbox
+                            v-for="(item2, checkIndex) in i.checkList"
+                            :key="checkIndex + 'c'"
+                            :label="checkIndex"
+                            disabled
+                          >
+                            {{ item2 }}
+                          </el-checkbox>
+                        </div>
+                      </el-checkbox-group>
+                    </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>
+                    </div>
+                    <div
+                      v-for="(i, index) in l.content[0].testJson"
+                      :key="index + 'm'"
+                    >
+                      <div>题目:{{ i.teststitle }}</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'
+                              ]"
+                            >
+                              <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
+                                  "
+                                >
+                                  <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
+                        src="../../../assets/icon/thirdToolList/select.png"
+                        alt=""
+                      />
+                      <div class="toolTit">
+                        <div>工具{{ lind + 1 }}:选择匹配</div>
+                        <div>
+                          根据前期的了解与实地调研对于项目的了解,进行思考与讨论提出问题。
+                        </div>
+                      </div>
+                    </div>
+                    <img
+                      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>
+                      <span style="margin-right: 10px">答案:</span>
+
+                      <span
+                        style="margin-right: 10px"
+                        v-for="(item, itInd) in l.content[0]"
+                        :key="itInd"
+                        >{{ itInd + 1 }}、{{ l.selectJson.select[item] }}</span
+                      >
+                    </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
+                        style="
+                            height: 20px;
+                            display: flex;
+                            align-items: center;
+                            flex-wrap: wrap;
+                          "
+                      >
+                        题目:
+                        <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>
+                      </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"
+                        >
+                          {{ i }}
+                        </div>
+                      </div>
+                      <div>
+                        正确答案:
+                        <span style="margin: 0 5px">{{
+                          i.addSentence.join(",")
+                        }}</span>
+                      </div>
+                    </div>
+                  </div>
+                </div>
+
+                <!-- 作业得分  -->
+                <div class="taskSco" v-if="l.content && l.content.length">
+                  <div class="taskScoTit">
+                    <div>
+                      作业得分:<span style="color: rgba(242, 161, 75, 1)">{{
+                        totalScore(l.rate)
+                      }}</span>
+                      分
+                    </div>
+                    <div>提交时间:{{ l.time }}</div>
+                  </div>
+
+                  <!-- 作业评分 -->
+                  <div class="taskScoCon">
+                    <!-- 分数详情与素养 -->
+                    <div
+                      v-if="l.eList"
+                      style="
+                          flex: 1;
+                          justify-content: space-between;
+                          display: flex;
+                          flex-wrap: wrap;
+                        "
+                    >
+                      <div style="width: 250px; margin: 0 20px 10px 0">
+                        <div class="taskScoConTit">分数详情</div>
+                        <div
+                          v-for="(wItem, ind) in l.eList"
+                          :key="ind + 's'"
+                          class="score_box"
+                          style="width: 100%"
+                        >
+                          <div
+                            style="
+                                display: flex;
+                                justify-content: space-between;
+                                min-width: 49%;
+                              "
+                          >
+                            <el-tooltip
+                              class="item"
+                              effect="dark"
+                              :content="wItem.detail"
+                              placement="top-start"
+                            >
+                              <div class="RootImgBlock">
+                                {{ wItem.detail }}
+                              </div>
+                            </el-tooltip>
+
+                            <el-rate
+                              class="rate_size"
+                              style="width: 120px"
+                              v-model="l.rate[wItem.detail]"
+                              @change="updateRate(i.id, k.task, lind)"
+                            ></el-rate>
+                          </div>
+                        </div>
+                      </div>
+
+                      <div v-if="l.eList" style="width: 250px">
+                        <div class="taskScoConTit">素养</div>
+                        <div class="WorkConSY">
+                          <div v-for="(wItem, ind) in l.eList" :key="ind + 's'">
+                            <el-tooltip
+                              class="item"
+                              effect="dark"
+                              :content="wItem.detail"
+                              placement="top-start"
+                            >
+                              <div class="RootImgBlockSy">
+                                {{ wItem.target }}
+                              </div>
+                            </el-tooltip>
+                          </div>
+                        </div>
+                      </div>
+                    </div>
+
+                    <!-- 评语 -->
+                    <div
+                      style="
+                          flex: 1;
+                          flex-shrink: 0;
+                          display: flex;
+                          flex-direction: column;
+                          margin-left: 10px;
+                        "
+                      v-if="l.rate.content || l.rate.comment"
+                    >
+                      <div class="taskScoConTit">评语</div>
+                      <div class="WorkCon">
+                        {{ l.rate.content || l.rate.comment }}
+                      </div>
+                    </div>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  props: ["id", "studentId"],
+  data() {
+    return {
+      barLeft: [],
+      // 房屋去除甲醛方法
+      //   cid: "aedd1571-7984-11ef-9b30-005056b86db5",
+      //   uid: "1b406ce7-3b32-11ee-91d8-005056b86db5",
+      cid: "",
+      uid: "",
+      userName: "",
+      userImg: "",
+
+      // 上一个下一个学生位置
+      positP: 0,
+
+      dyList: [],
+      courseName: "",
+      workList: [],
+      state: 0,
+      tableData: [],
+      loading: false
+    };
+  },
+  computed: {
+    isStage() {
+      return function(val) {
+        let isShow = false;
+
+        val.forEach(e => {
+          e.toolEList.forEach(i => {
+            if (i.content.length) {
+              isShow = true;
+            }
+          });
+        });
+
+        return isShow;
+      };
+    },
+    isTask() {
+      return function(val) {
+        let isShow = false;
+
+        val.forEach(e => {
+          if (e.content.length) {
+            isShow = true;
+          }
+        });
+
+        return isShow;
+      };
+    },
+    totalScore() {
+      return function(val) {
+        let valT = JSON.parse(JSON.stringify(val));
+        if (!valT) return "0.0";
+
+        delete valT.content;
+        delete valT.comment;
+
+        let data = Object.values(valT);
+
+        let new1 = data.reduce(function(pre, next, index) {
+          return pre + next * 1;
+        });
+
+        if (new1 == 0) return "0.0";
+
+        return (new1 / data.length).toFixed(1);
+      };
+    }
+  },
+  mounted() {
+    this.cid = JSON.parse(JSON.stringify(this.id));
+    this.uid = JSON.parse(JSON.stringify(this.studentId));
+
+    this.getWorks1();
+  },
+  methods: {
+    nxtPer() {
+      this.positP++;
+      this.uid = this.tableData[this.positP].userid;
+      this.exportPdfSet();
+    },
+    upPer() {
+      this.positP--;
+      this.uid = this.tableData[this.positP].userid;
+      this.exportPdfSet();
+    },
+    // 提交分数
+    updateRate(stage, task, tool) {
+       
+    let processedData = this.workList[stage].taskList[task].toolEList[tool].rate
+
+      console.log(stage, task, tool);
+      let params = {
+        cid: this.cid,
+        s: stage,
+        t: task,
+        tool: tool ? tool : "",
+        rate: JSON.stringify(processedData),
+        uid: this.uid
+      };
+      // return console.log(params);
+      this.ajax
+        .get(this.$store.state.api + "updateWorksEvaTwo", params)
+        .then(res => {
+
+        })
+        .catch(err => {
+          this.$message.error("评价失败");
+          console.error(err);
+        });
+    },
+    //获取作业
+    getWorks1() {
+      this.loading = true;
+      let params = {
+        cid: this.cid,
+        uname: "",
+        choseClass: "",
+        stage: "",
+        task: ""
+      };
+      this.ajax
+        .get(this.$store.state.api + "getCourseWorks6", params) //getCourseWorks4
+        .then(res => {
+          this.tableData = res.data[0];
+          console.log("this.tableData", this.tableData);
+
+          this.exportPdfSet();
+        })
+        .catch(err => {
+          console.error(err);
+        });
+    },
+
+    // 获取作业信息
+    async exportPdfSet(uid, con) {
+      this.loading = true;
+      this.tableData.forEach((e, i) => {
+        if (e.userid == this.uid) {
+          this.userName = e.sName;
+          this.userImg = e.img ? e.img : "";
+          this.positP = i;
+        }
+      });
+      let params = {
+        uid: this.uid,
+        cid: this.cid
+      };
+      return new Promise((resolve, reject) => {
+        this.ajax
+          .get(this.$store.state.api + "selectAllWorksDetail", params)
+          .then(res => {
+            var worksDetail = res.data[1];
+            var askInfo = res.data[3]; //问卷
+            var answerInfo = res.data[4]; //问答题
+            var pptInfo = res.data[5];
+            var chooseInfo = res.data[6]; //选择题
+            var pjInfo = res.data[7]; //个人评价作业
+            var xztkInfo = res.data[8]; //选择匹配作业
+            var lccjInfo = res.data[9]; //排序作业
+            var bgInfo = res.data[10]; //表格作业
+            var cocopiInfo = res.data[11]; //cocopi或源码编辑作业
+            var wordInfo = res.data[12]; //文档作业
+            this.workEvaList = res.data[13];
+
+            this.courseName = res.data[0][0].course;
+            this.state = res.data[0][0].state;
+
+            var dyJSON = JSON.parse(res.data[0][0].chapters);
+
+            let dyList = [];
+            for (var i = 0; i < dyJSON.length; i++) {
+              dyList.push({
+                name: dyJSON[i].dyName,
+                id: `${i}`,
+                taskList: []
+              });
+              var a = dyJSON[i].chapterInfo[0].taskJson;
+              for (var j = 0; j < a.length; j++) {
+                dyList[i].taskList.push({ name: a[j].task, id: i + "-" + j });
+              }
+            }
+            this.dyList = dyList;
+            console.log("this.dyList", this.dyList);
+
+            // console.log("this.workEvaList", this.workEvaList);
+
+            let framework = [];
+            if (res.data[0].length) {
+              let elistData = JSON.parse(res.data[0][0].chapters);
+              // console.log("elistData", JSON.parse(JSON.stringify(elistData)));
+
+              elistData.forEach((e, i) => {
+                framework[i] = {
+                  id: i,
+                  name: i.dyName ? i.dyName : "",
+                  taskList: []
+                };
+                e.chapterInfo[0].taskJson.forEach((k, kin) => {
+                  if (k.eList && k.eList.length) {
+                    k.toolChoose.forEach(y => {
+                      y.eList = k.eList;
+                    });
+                  }
+                  framework[i].taskList.push({
+                    stage: i,
+                    task: kin,
+                    taskTit: k.task ? k.task : "",
+                    taskDetail: k.taskDetail,
+                    toolEList: k.toolChoose
+                  });
+                });
+              });
+            }
+
+            res.data[3].forEach(e => {
+              e.content = JSON.parse(e.content);
+            });
+            res.data[4].forEach(e => {
+              e.content = JSON.parse(e.content);
+              // console.log('66666',e.content[0].answer);
+            });
+
+            res.data[6].forEach((k, i) => {
+              const element1 = JSON.parse(k.content)[0];
+              // console.log("JSON.parse(element1.content)[0]", element1);
+
+              let t = JSON.parse(k.content)[0].testJson;
+              // console.log("t", JSON.parse(JSON.stringify(t)));
+              // console.log("k", k);
+
+              // 处理学生选择答案
+              let e = [];
+              t.testJson.forEach((i, y) => {
+                e.push(element1.anwer[y]);
+              });
+              t.radio = e;
+
+              // 处理选项
+
+              k.content = t;
+            });
+
+            res.data[8].forEach((k, i) => {
+              k.content = k.content.split(",");
+            });
+
+            res.data[9].forEach(e => {
+              e.content = JSON.parse(e.content);
+            });
+
+            res.data[12].forEach(e => {
+              e.content = JSON.parse(e.content);
+            });
+            res.data[10].forEach(e => {
+              e.content = JSON.parse(e.content);
+            });
+
+            let AreaAllWork = [
+              ...res.data[1],
+              ...res.data[3],
+              ...res.data[4],
+              ...res.data[5],
+              ...res.data[6],
+              ...res.data[7],
+              ...res.data[8],
+              ...res.data[9],
+              ...res.data[10],
+              ...res.data[11],
+              ...res.data[12]
+            ];
+
+            AreaAllWork.sort(function(a, b) {
+              return a.stage - b.stage; //从小到大排序
+            });
+            // console.log("AreaAllWork", JSON.parse(JSON.stringify(AreaAllWork)));
+
+            framework.forEach(e => {
+              e.taskList.forEach((k, kin) => {
+                k.toolEList.forEach((l, lIndex) => {
+                  l.content = [];
+                  l.rate = "";
+                  l.time = "";
+                  // 将作业答案添加进数组里
+                  AreaAllWork.forEach((i, index) => {
+                    i.tool = i.tool ? i.tool : 0;
+                    if (
+                      k.stage == i.stage &&
+                      k.task == i.task &&
+                      lIndex == i.tool
+                    ) {
+                      l.content.push(i.content);
+                      l.time = i.tTime;
+                    }
+                  });
+
+                  // 将老师分数循环数组里
+                  this.workEvaList.forEach(p => {
+                    p.tool = p.tool ? p.tool : 0;
+                    if (
+                      k.stage == p.stage &&
+                      k.task == p.task &&
+                      lIndex == p.tool
+                    ) {
+                      //   console.log("JSON.parse(p.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;
+                    }
+                  });
+                });
+              });
+            });
+
+            // console.log("framework", JSON.parse(JSON.stringify(framework)));
+
+            this.workList = framework;
+            this.loading = false;
+          })
+          .catch(err => {
+            console.error(err);
+          });
+      });
+    },
+    // 点击任务滑动跳转
+    positT(val) {
+      let a = document.getElementById(val);
+      if (a) {
+        a.scrollIntoView({
+          behavior: "smooth" // 平滑滚动效果
+        });
+      } else {
+        this.$message.error("该任务暂时没提交作业");
+      }
+    },
+    // 点击阶段
+    positS(val) {
+      console.log(val);
+    }
+  }
+};
+</script>
+
+<style scoped>
+.eliP {
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+  width: 80%;
+}
+.pbl {
+  padding: 0 50px 20px;
+  box-sizing: border-box;
+  height: 100%;
+}
+.titBri {
+  height: 60px;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  position: sticky;
+  top: 0;
+}
+.claInfo {
+  display: flex;
+  align-items: center;
+  margin-left: 10px;
+}
+.claInfo span {
+  margin-left: 10px;
+}
+
+.claInfo img {
+  width: 35px;
+  border-radius: 50%;
+}
+.toolEListCon {
+  display: flex;
+  justify-content: space-between;
+  flex-shrink: 1;
+}
+.pageCon {
+  display: flex;
+  height: calc(100% - 60px);
+  padding-bottom: 50px;
+  box-sizing: border-box;
+}
+.rightBar {
+  width: 300px;
+  margin-right: 20px;
+  border-radius: 10px;
+  height: 100%;
+  overflow-y: auto;
+  background-color: #ffffff;
+}
+.workCon {
+  display: flex;
+  height: 100%;
+  flex: 1;
+  overflow-y: auto;
+  overflow-x: hidden;
+  border-radius: 10px;
+}
+
+.coverPage {
+  height: 743px;
+  background-color: #ccc;
+  position: relative;
+}
+.coverPageLogo {
+  padding: 10px;
+  width: 100%;
+  display: flex;
+  justify-content: flex-end;
+  box-sizing: border-box;
+  margin-bottom: 30px;
+}
+.coverPageFrom {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  width: 70%;
+  margin: 0 auto;
+}
+.coverPageFromTit {
+  font-size: 48px;
+  color: rgba(58, 59, 152, 1);
+  font-weight: 600;
+}
+.fromCss {
+  border: 1.5px dashed rgba(158, 208, 255, 1);
+  border-radius: 16px;
+  background-color: #fff;
+  padding: 24px 32px;
+  width: 300px;
+  color: rgba(35, 99, 205, 1);
+}
+.fromCss > div {
+  margin-bottom: 10px;
+  display: flex;
+}
+.fromCss > div > span {
+  flex-shrink: 0;
+  margin-right: 5px;
+  font-size: 16px;
+}
+.fromCss > div:last-child {
+  margin-bottom: 0;
+}
+.txt {
+  width: 100%;
+  border-bottom: 1px solid rgba(192, 210, 229, 1);
+  text-align: center;
+  color: #000;
+}
+.coverPageCon {
+  background-color: #e3edfe;
+  display: flex;
+  width: 100%;
+  flex-direction: column;
+  align-items: center;
+  /* padding: 0 30px; */
+  box-sizing: border-box;
+}
+.stageCon {
+  background-color: #fff;
+  padding: 15px 20px;
+  box-sizing: border-box;
+  margin-bottom: 10px;
+  border-radius: 8px;
+  width: 100%;
+}
+
+.a_addBox {
+  margin: 10px 0;
+  background: #fff;
+  padding: 0 15px;
+  /* max-height: 400px; */
+  /* max-height: 160px; */
+  /* overflow: auto; */
+}
+.redioStyle >>> .el-radio__label {
+  font-size: 18px;
+}
+
+.redioStyle5 >>> .el-radio__label {
+  font-size: 14px;
+  color: #06a7ff !important;
+}
+.redioStyle2 >>> .el-radio__label {
+  font-size: 14px;
+}
+
+.redioStyle3 >>> .el-checkbox__label {
+  font-size: 14px;
+  color: #06a7ff !important;
+}
+.redioStyle4 >>> .el-checkbox__label {
+  font-size: 14px;
+}
+.redioStyle4 >>> .el-checkbox-group {
+  margin: 0 5px;
+}
+.redioStyle3 >>> .el-checkbox-group {
+  margin: 0 5px;
+}
+.sortTool {
+  padding: 1px 3px;
+  border: 2px #5d89c4 solid;
+  margin: 0 5px;
+  min-width: 20px;
+  border-radius: 5px;
+  text-align: center;
+}
+/* table 样式 */
+.cont /deep/ table {
+  border-top: 1px solid #ccc;
+  border-left: 1px solid #ccc;
+}
+
+.cont /deep/ table td,
+.cont /deep/ table th {
+  border-bottom: 1px solid #ccc;
+  border-right: 1px solid #ccc;
+  padding: 15px 5px;
+  max-width: 0px;
+}
+
+.cont /deep/ table th {
+  border-bottom: 2px solid #ccc;
+  text-align: center;
+}
+
+.score_boxTit > span {
+  border-left: 3px solid rgba(54, 129, 252, 1);
+  padding-left: 5px;
+}
+.score_boxTit {
+  /* padding: 0 30px; */
+  box-sizing: border-box;
+  font-size: 14px;
+  font-weight: 600;
+  color: rgba(0, 0, 0, 0.9);
+}
+.inImg {
+  width: 100px;
+}
+.inImg > img {
+  width: 100%;
+  height: 100%;
+  object-fit: cover;
+}
+.radioBox {
+  display: flex;
+  flex-direction: column;
+}
+.radioBox >>> .el-radio {
+  display: flex;
+  align-items: center;
+  margin: 5px;
+}
+.radioBox >>> .el-checkbox {
+  display: flex;
+  align-items: center;
+  margin: 5px;
+}
+.RootImgBlock {
+  width: 50%;
+  white-space: nowrap;
+  overflow: hidden;
+  font-size: 12px;
+  text-overflow: ellipsis;
+}
+.RootImgBlockSy {
+  width: 300px;
+  white-space: nowrap;
+  overflow: hidden;
+  font-size: 12px;
+  text-overflow: ellipsis;
+}
+.score_box {
+  font-size: 14px !important;
+  margin-bottom: 15px;
+  margin: 5px 0;
+}
+.score_box:last-child {
+  margin-bottom: 0;
+}
+.worksTarget {
+  border-left: 3px solid rgba(54, 129, 252, 1);
+  font-size: 14px;
+  font-weight: 600;
+  color: rgba(0, 0, 0, 0.9);
+}
+.worksTarget > span {
+  margin-left: 5px;
+}
+.worksTargetCon {
+  background-color: #fff;
+  padding: 10px;
+  margin-top: 10px;
+  border-radius: 8px;
+  box-sizing: border-box;
+  font-size: 12px;
+}
+.worksTargetCon > div {
+  margin-bottom: 10px;
+}
+.worksTargetCon > div:last-child {
+  margin: 0 !important;
+}
+.stageTit {
+  text-align: left;
+  font-weight: 600;
+  font-size: 20px;
+  margin-bottom: 20px;
+  color: rgba(242, 161, 75, 1);
+  border-left: 5px rgba(242, 161, 75, 1) solid;
+  padding-left: 5px;
+}
+.taskTitInd {
+  font-size: 14px;
+}
+.TitBti {
+  background-color: rgba(242, 161, 75, 1);
+  color: #fff;
+  padding: 3px 5px;
+  border-radius: 4px;
+  margin-right: 5px;
+  box-sizing: border-box;
+  font-size: 12px;
+  height: 22px;
+  line-height: 16px;
+  text-align: center;
+}
+.taskTitInd span:nth-child(2) {
+  color: rgba(0, 0, 0, 0.9);
+  font-weight: 600;
+}
+.taskBri {
+  width: 100%;
+  background-color: rgba(253, 247, 243, 1);
+  padding: 10px 12px;
+  line-height: 20px;
+  box-sizing: border-box;
+  font-weight: PingFang SC;
+  font-size: 12px;
+  font-weight: 400;
+  border-radius: 4px;
+}
+.toolBlk {
+  display: flex;
+  height: 44px;
+  padding-left: 5px;
+  box-sizing: border-box;
+  margin: 15px 0;
+}
+.toolBlk img {
+  height: 100%;
+  margin-right: 8px;
+}
+.toolTit {
+  display: flex;
+  flex-direction: column;
+  justify-content: space-around;
+}
+.toolTit div:nth-child(1) {
+  font-family: PingFang SC;
+  font-size: 14px;
+  font-weight: 600;
+  text-align: left;
+  color: rgba(0, 0, 0, 0.9);
+  margin-right: 10px;
+}
+.toolTit div:nth-child(2) {
+  font-family: PingFang SC;
+  font-size: 10px;
+  font-weight: 400;
+  text-align: left;
+  color: rgba(0, 0, 0, 0.9);
+}
+.answerTxt {
+  font-size: 12px;
+  color: rgba(0, 0, 0, 0.6);
+  font-weight: 400;
+  line-height: 30px;
+}
+.taskSco {
+  background-color: rgba(253, 247, 243, 1);
+  border-radius: 8px;
+  padding: 10px 15px;
+  box-sizing: border-box;
+  margin: 15px 0 8px 25px;
+  width: 550px;
+}
+.taskScoTit {
+  display: flex;
+  justify-content: space-between;
+  margin: 0 0 20px;
+}
+.taskScoTit div:nth-child(1) {
+  color: rgba(0, 0, 0, 0.9);
+  font-family: PingFang SC;
+  font-size: 14px;
+  font-weight: 600;
+  text-align: left;
+}
+.taskScoTit div:nth-child(2) {
+  color: rgba(0, 0, 0, 0.6);
+  font-family: PingFang SC;
+  font-size: 12px;
+  font-weight: 400;
+}
+.taskScoCon {
+  display: flex;
+  justify-content: space-between;
+}
+
+.taskScoConTit {
+  text-align: left;
+  font-weight: 600;
+  font-size: 12px;
+  margin-bottom: 10px;
+  color: rgba(0, 0, 0, 0.9);
+  border-left: 5px rgba(242, 161, 75, 1) solid;
+  padding-left: 5px;
+}
+.WorkCon {
+  background-color: rgba(255, 255, 255, 0.9);
+  padding: 8px;
+  box-sizing: border-box;
+  border-radius: 8px;
+  font-family: PingFang SC;
+  font-size: 12px;
+  line-height: 20px;
+  font-weight: 400;
+  flex: 1;
+}
+.WorkConSY {
+  background-color: rgba(255, 255, 255, 0.9);
+  padding: 8px;
+  box-sizing: border-box;
+  border-radius: 8px;
+  font-family: PingFang SC;
+  font-size: 12px;
+  font-weight: 400;
+  width: 100%;
+  /* flex: 1; */
+}
+.WorkConSY div {
+  margin-bottom: 8px;
+}
+.WorkConSY div:last-child {
+  margin-bottom: 0;
+}
+</style>

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

@@ -261,7 +261,6 @@
 
 
         <el-dialog
-          title="查看作业"
           :visible.sync="dialogVisible3"
           :append-to-body="true"
           :before-close="handleClose"
@@ -272,16 +271,10 @@
         >
           <div slot="title" class="header-title">
             <div style="color: #fff">查看&批改</div>
-            <!-- <div style="position: absolute; top: 14px; right: 50px">
-              <img
-                src="../../../assets/full.png"
-                style="height: 14px; cursor: pointer"
-                alt=""
-                @click="fullTools"
-              />
-            </div> -->
           </div>
-          <div class="zyBoxC" ref="reportPdf">
+          <LookWork v-if="DState == 5" :id="id" :studentId="studentId" :key="studentId"></LookWork>
+
+          <div v-else class="zyBoxC" ref="reportPdf">
             <div class="courseTitle" v-if="allWorks.course">
               <div class="txName">
                 <div class="tx"><img :src="tx" alt="" /></div>
@@ -294,7 +287,7 @@
                   @click="getPdf"
                   >导出作业集</el-button
                 >
-              </div>
+          </div>
 
               <div class="topButton" v-if="tableData.length > 1">
                 <div>学生切换:</div>
@@ -1455,6 +1448,7 @@
         ></el-pagination>
       </div>
     </div>
+
     <el-dialog :visible.sync="pictureDialog" size="tiny">
       <img width="100%" :src="dialogImageUrl" alt />
     </el-dialog>
@@ -1579,9 +1573,11 @@ import htmlDocx from "html-docx-js/dist/html-docx";
 import saveAs from "file-saver";
 import html2canvas from "html2canvas";
 import jspdf from "jspdf";
+import LookWork from "./lookWork.vue";
 export default {
   components: {
     StudentData,
+    LookWork,
     pdf,
     exportWorksDialog
   },
@@ -2130,8 +2126,15 @@ export default {
       // this.getWorks();
     },
     lookWork(id, uid, type, index,con) {
+      console.log('con',con);
+
+     
+      
       this.scopeId1 = id;
       this.studentId = uid;
+      if (this.DState == 5) return this.dialogVisible3 = true
+      
+
       let params = {
         uid: uid,
         cid: this.id,

Some files were not shown because too many files changed in this diff