Parcourir la source

Merge branch 'beta'

lsc il y a 1 an
Parent
commit
b595ad6dd9
41 fichiers modifiés avec 3996 ajouts et 3076 suppressions
  1. 1 1
      dist/index.html
  2. 0 0
      dist/static/css/app.2192b50d94532bb08c26fe5fa650eb40.css
  3. 0 0
      dist/static/css/app.2192b50d94532bb08c26fe5fa650eb40.css.map
  4. 0 0
      dist/static/css/app.854f119a5bb58743bf6d1fc4108802ca.css
  5. 0 0
      dist/static/css/app.854f119a5bb58743bf6d1fc4108802ca.css.map
  6. BIN
      dist/static/img/model6-1-2.e0e3a50.png
  7. BIN
      dist/static/img/model6-1.5fc18af.png
  8. BIN
      dist/static/img/model6-2.9bb3b2b.png
  9. BIN
      dist/static/img/model6-3.dac4e87.png
  10. 0 0
      dist/static/js/app.c948d2cc59a0d2fdd93b.js
  11. 0 0
      dist/static/js/app.c948d2cc59a0d2fdd93b.js.map
  12. 0 0
      dist/static/js/manifest.571c38d63f24b1ae9e16.js.map
  13. 0 0
      dist/static/js/vendor.ee476e38463461edca63.js
  14. 0 0
      dist/static/js/vendor.ee476e38463461edca63.js.map
  15. 742 6
      package-lock.json
  16. 1 0
      package.json
  17. BIN
      src/assets/icon/ppt/model6-1-2.png
  18. BIN
      src/assets/icon/ppt/model6-1.png
  19. BIN
      src/assets/icon/ppt/model6-2.png
  20. BIN
      src/assets/icon/ppt/model6-3.png
  21. 402 100
      src/components/pages/aiAddCourse/addCourse.vue
  22. 630 128
      src/components/pages/aiAddCourse/aiCreateDialog.vue
  23. 1 1
      src/components/pages/aiAddCourse/aiCreateVideoDialog.vue
  24. 2 2
      src/components/pages/aiAddCourse/aiDialog.vue
  25. 2 1
      src/components/pages/aiAddCourse/templateDialog.vue
  26. 1 0
      src/components/pages/classroomObservation/components/analysis.vue
  27. 25 2
      src/components/pages/classroomObservation/components/analysisItem.vue
  28. 116 90
      src/components/pages/classroomObservation/components/chatArea.vue
  29. 5 1
      src/components/pages/classroomObservation/components/mdView.vue
  30. 1222 2045
      src/components/pages/classroomObservation/components/messageArea.vue
  31. 706 665
      src/components/pages/classroomObservation/index.vue
  32. 66 14
      src/components/pages/components/worksDetail2.vue
  33. 24 2
      src/components/pages/course.vue
  34. 5 3
      src/components/pages/dataBoardNew/course/index.vue
  35. 3 3
      src/components/pages/dataBoardNew/project/chartList/bar/teacherStudent.vue
  36. 4 2
      src/components/pages/dataBoardNew/project/index.vue
  37. 25 2
      src/components/pages/dataBoardNew/school/courseNum/index.vue
  38. 1 0
      src/components/pages/dataBoardNew/school/index.vue
  39. 4 4
      src/components/pages/dataBoardNew/student/index.vue
  40. 1 1
      src/components/pages/dataBoardNew/teacher/index.vue
  41. 7 3
      src/components/pages/test/shareBox/index.vue

+ 1 - 1
dist/index.html

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

Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/static/css/app.2192b50d94532bb08c26fe5fa650eb40.css


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/static/css/app.2192b50d94532bb08c26fe5fa650eb40.css.map


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/static/css/app.854f119a5bb58743bf6d1fc4108802ca.css


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/static/css/app.854f119a5bb58743bf6d1fc4108802ca.css.map


BIN
dist/static/img/model6-1-2.e0e3a50.png


BIN
dist/static/img/model6-1.5fc18af.png


BIN
dist/static/img/model6-2.9bb3b2b.png


BIN
dist/static/img/model6-3.dac4e87.png


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/static/js/app.c948d2cc59a0d2fdd93b.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/static/js/app.c948d2cc59a0d2fdd93b.js.map


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/static/js/manifest.571c38d63f24b1ae9e16.js.map


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/static/js/vendor.ee476e38463461edca63.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
dist/static/js/vendor.ee476e38463461edca63.js.map


+ 742 - 6
package-lock.json

@@ -36,6 +36,7 @@
         "lodash": "^4.17.21",
         "markdown-it": "^13.0.2",
         "opencc-js": "^1.0.5",
+        "papaparse": "^5.4.1",
         "pdfjs-dist": "^2.5.207",
         "pptxgenjs": "^3.12.0",
         "qrcodejs2": "^0.0.2",
@@ -134,6 +135,64 @@
       "resolved": "https://registry.npmmirror.com/@gar/promisify/-/promisify-1.1.3.tgz",
       "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw=="
     },
+    "node_modules/@jridgewell/gen-mapping": {
+      "version": "0.3.5",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+      "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
+      "peer": true,
+      "dependencies": {
+        "@jridgewell/set-array": "^1.2.1",
+        "@jridgewell/sourcemap-codec": "^1.4.10",
+        "@jridgewell/trace-mapping": "^0.3.24"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/resolve-uri": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+      "peer": true,
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/set-array": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+      "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+      "peer": true,
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/source-map": {
+      "version": "0.3.6",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.6.tgz",
+      "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
+      "peer": true,
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.3.5",
+        "@jridgewell/trace-mapping": "^0.3.25"
+      }
+    },
+    "node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+      "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+      "peer": true
+    },
+    "node_modules/@jridgewell/trace-mapping": {
+      "version": "0.3.25",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+      "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+      "peer": true,
+      "dependencies": {
+        "@jridgewell/resolve-uri": "^3.1.0",
+        "@jridgewell/sourcemap-codec": "^1.4.14"
+      }
+    },
     "node_modules/@npmcli/fs": {
       "version": "1.1.1",
       "resolved": "https://registry.npmmirror.com/@npmcli/fs/-/fs-1.1.1.tgz",
@@ -237,11 +296,46 @@
         "node": ">= 6"
       }
     },
+    "node_modules/@types/eslint": {
+      "version": "8.56.10",
+      "resolved": "https://registry.npmmirror.com/@types/eslint/-/eslint-8.56.10.tgz",
+      "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==",
+      "peer": true,
+      "dependencies": {
+        "@types/estree": "*",
+        "@types/json-schema": "*"
+      }
+    },
+    "node_modules/@types/eslint-scope": {
+      "version": "3.7.7",
+      "resolved": "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
+      "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
+      "peer": true,
+      "dependencies": {
+        "@types/eslint": "*",
+        "@types/estree": "*"
+      }
+    },
+    "node_modules/@types/estree": {
+      "version": "0.0.51",
+      "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-0.0.51.tgz",
+      "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==",
+      "peer": true
+    },
     "node_modules/@types/json-schema": {
       "version": "7.0.11",
       "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.11.tgz",
       "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ=="
     },
+    "node_modules/@types/node": {
+      "version": "20.14.11",
+      "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.14.11.tgz",
+      "integrity": "sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==",
+      "peer": true,
+      "dependencies": {
+        "undici-types": "~5.26.4"
+      }
+    },
     "node_modules/@types/q": {
       "version": "1.5.4",
       "resolved": "https://registry.npm.taobao.org/@types/q/download/@types/q-1.5.4.tgz?cache=0&sync_timestamp=1613379600130&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fq%2Fdownload%2F%40types%2Fq-1.5.4.tgz",
@@ -272,6 +366,164 @@
       "resolved": "https://registry.npm.taobao.org/@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/@webassemblyjs/ast": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.1.tgz",
+      "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==",
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/helper-numbers": "1.11.1",
+        "@webassemblyjs/helper-wasm-bytecode": "1.11.1"
+      }
+    },
+    "node_modules/@webassemblyjs/floating-point-hex-parser": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz",
+      "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==",
+      "peer": true
+    },
+    "node_modules/@webassemblyjs/helper-api-error": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz",
+      "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==",
+      "peer": true
+    },
+    "node_modules/@webassemblyjs/helper-buffer": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz",
+      "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==",
+      "peer": true
+    },
+    "node_modules/@webassemblyjs/helper-numbers": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz",
+      "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==",
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/floating-point-hex-parser": "1.11.1",
+        "@webassemblyjs/helper-api-error": "1.11.1",
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "node_modules/@webassemblyjs/helper-wasm-bytecode": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz",
+      "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==",
+      "peer": true
+    },
+    "node_modules/@webassemblyjs/helper-wasm-section": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz",
+      "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==",
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/ast": "1.11.1",
+        "@webassemblyjs/helper-buffer": "1.11.1",
+        "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+        "@webassemblyjs/wasm-gen": "1.11.1"
+      }
+    },
+    "node_modules/@webassemblyjs/ieee754": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz",
+      "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==",
+      "peer": true,
+      "dependencies": {
+        "@xtuc/ieee754": "^1.2.0"
+      }
+    },
+    "node_modules/@webassemblyjs/leb128": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz",
+      "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==",
+      "peer": true,
+      "dependencies": {
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "node_modules/@webassemblyjs/utf8": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz",
+      "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==",
+      "peer": true
+    },
+    "node_modules/@webassemblyjs/wasm-edit": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz",
+      "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==",
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/ast": "1.11.1",
+        "@webassemblyjs/helper-buffer": "1.11.1",
+        "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+        "@webassemblyjs/helper-wasm-section": "1.11.1",
+        "@webassemblyjs/wasm-gen": "1.11.1",
+        "@webassemblyjs/wasm-opt": "1.11.1",
+        "@webassemblyjs/wasm-parser": "1.11.1",
+        "@webassemblyjs/wast-printer": "1.11.1"
+      }
+    },
+    "node_modules/@webassemblyjs/wasm-gen": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz",
+      "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==",
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/ast": "1.11.1",
+        "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+        "@webassemblyjs/ieee754": "1.11.1",
+        "@webassemblyjs/leb128": "1.11.1",
+        "@webassemblyjs/utf8": "1.11.1"
+      }
+    },
+    "node_modules/@webassemblyjs/wasm-opt": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz",
+      "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==",
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/ast": "1.11.1",
+        "@webassemblyjs/helper-buffer": "1.11.1",
+        "@webassemblyjs/wasm-gen": "1.11.1",
+        "@webassemblyjs/wasm-parser": "1.11.1"
+      }
+    },
+    "node_modules/@webassemblyjs/wasm-parser": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz",
+      "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==",
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/ast": "1.11.1",
+        "@webassemblyjs/helper-api-error": "1.11.1",
+        "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+        "@webassemblyjs/ieee754": "1.11.1",
+        "@webassemblyjs/leb128": "1.11.1",
+        "@webassemblyjs/utf8": "1.11.1"
+      }
+    },
+    "node_modules/@webassemblyjs/wast-printer": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz",
+      "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==",
+      "peer": true,
+      "dependencies": {
+        "@webassemblyjs/ast": "1.11.1",
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "node_modules/@xtuc/ieee754": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+      "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+      "peer": true
+    },
+    "node_modules/@xtuc/long": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz",
+      "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+      "peer": true
+    },
     "node_modules/abbrev": {
       "version": "1.1.1",
       "resolved": "https://registry.npmmirror.com/abbrev/-/abbrev-1.1.1.tgz",
@@ -2066,8 +2318,7 @@
     "node_modules/buffer-from": {
       "version": "1.1.2",
       "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",
-      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
-      "dev": true
+      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
     },
     "node_modules/buffer-indexof": {
       "version": "1.1.1",
@@ -2567,6 +2818,15 @@
         "node": ">=10"
       }
     },
+    "node_modules/chrome-trace-event": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
+      "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
+      "peer": true,
+      "engines": {
+        "node": ">=6.0"
+      }
+    },
     "node_modules/cipher-base": {
       "version": "1.0.4",
       "resolved": "https://registry.npm.taobao.org/cipher-base/download/cipher-base-1.0.4.tgz",
@@ -5333,6 +5593,12 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/es-module-lexer": {
+      "version": "0.9.3",
+      "resolved": "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz",
+      "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==",
+      "peer": true
+    },
     "node_modules/es-to-primitive": {
       "version": "1.2.1",
       "resolved": "https://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.1.tgz",
@@ -5469,6 +5735,19 @@
         "node": ">=0.4.0"
       }
     },
+    "node_modules/eslint-scope": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz",
+      "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+      "peer": true,
+      "dependencies": {
+        "esrecurse": "^4.3.0",
+        "estraverse": "^4.1.1"
+      },
+      "engines": {
+        "node": ">=8.0.0"
+      }
+    },
     "node_modules/esprima": {
       "version": "2.7.3",
       "resolved": "https://registry.npm.taobao.org/esprima/download/esprima-2.7.3.tgz",
@@ -6388,6 +6667,12 @@
         "node": ">= 6"
       }
     },
+    "node_modules/glob-to-regexp": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+      "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+      "peer": true
+    },
     "node_modules/global": {
       "version": "4.3.2",
       "resolved": "https://registry.npm.taobao.org/global/download/global-4.3.2.tgz",
@@ -7809,6 +8094,44 @@
       "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
       "dev": true
     },
+    "node_modules/jest-worker": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz",
+      "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
+      "peer": true,
+      "dependencies": {
+        "@types/node": "*",
+        "merge-stream": "^2.0.0",
+        "supports-color": "^8.0.0"
+      },
+      "engines": {
+        "node": ">= 10.13.0"
+      }
+    },
+    "node_modules/jest-worker/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "peer": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-worker/node_modules/supports-color": {
+      "version": "8.1.1",
+      "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz",
+      "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/supports-color?sponsor=1"
+      }
+    },
     "node_modules/jquery": {
       "version": "3.6.0",
       "resolved": "https://registry.npm.taobao.org/jquery/download/jquery-3.6.0.tgz",
@@ -8156,7 +8479,7 @@
     },
     "node_modules/lodash": {
       "version": "4.17.21",
-      "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
       "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
     },
     "node_modules/lodash-es": {
@@ -8874,6 +9197,12 @@
       "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
       "dev": true
     },
+    "node_modules/merge-stream": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz",
+      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+      "peer": true
+    },
     "node_modules/methods": {
       "version": "1.1.2",
       "resolved": "https://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz",
@@ -10843,6 +11172,11 @@
       "resolved": "https://registry.npm.taobao.org/pako/download/pako-1.0.11.tgz?cache=0&sync_timestamp=1610209004795&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpako%2Fdownload%2Fpako-1.0.11.tgz",
       "integrity": "sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8="
     },
+    "node_modules/papaparse": {
+      "version": "5.4.1",
+      "resolved": "https://registry.npmmirror.com/papaparse/-/papaparse-5.4.1.tgz",
+      "integrity": "sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw=="
+    },
     "node_modules/parallel-transform": {
       "version": "1.2.0",
       "resolved": "https://registry.npmmirror.com/parallel-transform/-/parallel-transform-1.2.0.tgz",
@@ -11001,6 +11335,12 @@
       "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==",
       "devOptional": true
     },
+    "node_modules/picocolors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.1.tgz",
+      "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
+      "peer": true
+    },
     "node_modules/picomatch": {
       "version": "2.2.2",
       "resolved": "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.2.tgz?cache=0&sync_timestamp=1584790434095&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpicomatch%2Fdownload%2Fpicomatch-2.2.2.tgz",
@@ -16147,6 +16487,52 @@
       "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
       "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
     },
+    "node_modules/terser": {
+      "version": "5.31.3",
+      "resolved": "https://registry.npmmirror.com/terser/-/terser-5.31.3.tgz",
+      "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==",
+      "peer": true,
+      "dependencies": {
+        "@jridgewell/source-map": "^0.3.3",
+        "acorn": "^8.8.2",
+        "commander": "^2.20.0",
+        "source-map-support": "~0.5.20"
+      },
+      "bin": {
+        "terser": "bin/terser"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/terser/node_modules/acorn": {
+      "version": "8.12.1",
+      "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.12.1.tgz",
+      "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
+      "peer": true,
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/terser/node_modules/commander": {
+      "version": "2.20.3",
+      "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz",
+      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+      "peer": true
+    },
+    "node_modules/terser/node_modules/source-map-support": {
+      "version": "0.5.21",
+      "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz",
+      "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+      "peer": true,
+      "dependencies": {
+        "buffer-from": "^1.0.0",
+        "source-map": "^0.6.0"
+      }
+    },
     "node_modules/text-segmentation": {
       "version": "1.0.3",
       "resolved": "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz",
@@ -18887,6 +19273,55 @@
       "resolved": "https://registry.npmmirror.com/@gar/promisify/-/promisify-1.1.3.tgz",
       "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw=="
     },
+    "@jridgewell/gen-mapping": {
+      "version": "0.3.5",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+      "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
+      "peer": true,
+      "requires": {
+        "@jridgewell/set-array": "^1.2.1",
+        "@jridgewell/sourcemap-codec": "^1.4.10",
+        "@jridgewell/trace-mapping": "^0.3.24"
+      }
+    },
+    "@jridgewell/resolve-uri": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+      "peer": true
+    },
+    "@jridgewell/set-array": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+      "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+      "peer": true
+    },
+    "@jridgewell/source-map": {
+      "version": "0.3.6",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.6.tgz",
+      "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
+      "peer": true,
+      "requires": {
+        "@jridgewell/gen-mapping": "^0.3.5",
+        "@jridgewell/trace-mapping": "^0.3.25"
+      }
+    },
+    "@jridgewell/sourcemap-codec": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+      "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+      "peer": true
+    },
+    "@jridgewell/trace-mapping": {
+      "version": "0.3.25",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+      "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+      "peer": true,
+      "requires": {
+        "@jridgewell/resolve-uri": "^3.1.0",
+        "@jridgewell/sourcemap-codec": "^1.4.14"
+      }
+    },
     "@npmcli/fs": {
       "version": "1.1.1",
       "resolved": "https://registry.npmmirror.com/@npmcli/fs/-/fs-1.1.1.tgz",
@@ -18961,11 +19396,46 @@
       "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
       "dev": true
     },
+    "@types/eslint": {
+      "version": "8.56.10",
+      "resolved": "https://registry.npmmirror.com/@types/eslint/-/eslint-8.56.10.tgz",
+      "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==",
+      "peer": true,
+      "requires": {
+        "@types/estree": "*",
+        "@types/json-schema": "*"
+      }
+    },
+    "@types/eslint-scope": {
+      "version": "3.7.7",
+      "resolved": "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
+      "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
+      "peer": true,
+      "requires": {
+        "@types/eslint": "*",
+        "@types/estree": "*"
+      }
+    },
+    "@types/estree": {
+      "version": "0.0.51",
+      "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-0.0.51.tgz",
+      "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==",
+      "peer": true
+    },
     "@types/json-schema": {
       "version": "7.0.11",
       "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.11.tgz",
       "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ=="
     },
+    "@types/node": {
+      "version": "20.14.11",
+      "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.14.11.tgz",
+      "integrity": "sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==",
+      "peer": true,
+      "requires": {
+        "undici-types": "~5.26.4"
+      }
+    },
     "@types/q": {
       "version": "1.5.4",
       "resolved": "https://registry.npm.taobao.org/@types/q/download/@types/q-1.5.4.tgz?cache=0&sync_timestamp=1613379600130&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fq%2Fdownload%2F%40types%2Fq-1.5.4.tgz",
@@ -18996,6 +19466,164 @@
       "resolved": "https://registry.npm.taobao.org/@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="
     },
+    "@webassemblyjs/ast": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.11.1.tgz",
+      "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==",
+      "peer": true,
+      "requires": {
+        "@webassemblyjs/helper-numbers": "1.11.1",
+        "@webassemblyjs/helper-wasm-bytecode": "1.11.1"
+      }
+    },
+    "@webassemblyjs/floating-point-hex-parser": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz",
+      "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==",
+      "peer": true
+    },
+    "@webassemblyjs/helper-api-error": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz",
+      "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==",
+      "peer": true
+    },
+    "@webassemblyjs/helper-buffer": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz",
+      "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==",
+      "peer": true
+    },
+    "@webassemblyjs/helper-numbers": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz",
+      "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==",
+      "peer": true,
+      "requires": {
+        "@webassemblyjs/floating-point-hex-parser": "1.11.1",
+        "@webassemblyjs/helper-api-error": "1.11.1",
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "@webassemblyjs/helper-wasm-bytecode": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz",
+      "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==",
+      "peer": true
+    },
+    "@webassemblyjs/helper-wasm-section": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz",
+      "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==",
+      "peer": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.11.1",
+        "@webassemblyjs/helper-buffer": "1.11.1",
+        "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+        "@webassemblyjs/wasm-gen": "1.11.1"
+      }
+    },
+    "@webassemblyjs/ieee754": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz",
+      "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==",
+      "peer": true,
+      "requires": {
+        "@xtuc/ieee754": "^1.2.0"
+      }
+    },
+    "@webassemblyjs/leb128": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz",
+      "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==",
+      "peer": true,
+      "requires": {
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "@webassemblyjs/utf8": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz",
+      "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==",
+      "peer": true
+    },
+    "@webassemblyjs/wasm-edit": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz",
+      "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==",
+      "peer": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.11.1",
+        "@webassemblyjs/helper-buffer": "1.11.1",
+        "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+        "@webassemblyjs/helper-wasm-section": "1.11.1",
+        "@webassemblyjs/wasm-gen": "1.11.1",
+        "@webassemblyjs/wasm-opt": "1.11.1",
+        "@webassemblyjs/wasm-parser": "1.11.1",
+        "@webassemblyjs/wast-printer": "1.11.1"
+      }
+    },
+    "@webassemblyjs/wasm-gen": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz",
+      "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==",
+      "peer": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.11.1",
+        "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+        "@webassemblyjs/ieee754": "1.11.1",
+        "@webassemblyjs/leb128": "1.11.1",
+        "@webassemblyjs/utf8": "1.11.1"
+      }
+    },
+    "@webassemblyjs/wasm-opt": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz",
+      "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==",
+      "peer": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.11.1",
+        "@webassemblyjs/helper-buffer": "1.11.1",
+        "@webassemblyjs/wasm-gen": "1.11.1",
+        "@webassemblyjs/wasm-parser": "1.11.1"
+      }
+    },
+    "@webassemblyjs/wasm-parser": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz",
+      "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==",
+      "peer": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.11.1",
+        "@webassemblyjs/helper-api-error": "1.11.1",
+        "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+        "@webassemblyjs/ieee754": "1.11.1",
+        "@webassemblyjs/leb128": "1.11.1",
+        "@webassemblyjs/utf8": "1.11.1"
+      }
+    },
+    "@webassemblyjs/wast-printer": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz",
+      "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==",
+      "peer": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.11.1",
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "@xtuc/ieee754": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+      "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+      "peer": true
+    },
+    "@xtuc/long": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz",
+      "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+      "peer": true
+    },
     "abbrev": {
       "version": "1.1.1",
       "resolved": "https://registry.npmmirror.com/abbrev/-/abbrev-1.1.1.tgz",
@@ -20577,8 +21205,7 @@
     "buffer-from": {
       "version": "1.1.2",
       "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",
-      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
-      "dev": true
+      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
     },
     "buffer-indexof": {
       "version": "1.1.1",
@@ -20965,6 +21592,12 @@
       "resolved": "https://registry.npmmirror.com/chownr/-/chownr-2.0.0.tgz",
       "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="
     },
+    "chrome-trace-event": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
+      "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
+      "peer": true
+    },
     "cipher-base": {
       "version": "1.0.4",
       "resolved": "https://registry.npm.taobao.org/cipher-base/download/cipher-base-1.0.4.tgz",
@@ -23327,6 +23960,12 @@
         "unbox-primitive": "^1.0.0"
       }
     },
+    "es-module-lexer": {
+      "version": "0.9.3",
+      "resolved": "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz",
+      "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==",
+      "peer": true
+    },
     "es-to-primitive": {
       "version": "1.2.1",
       "resolved": "https://registry.npm.taobao.org/es-to-primitive/download/es-to-primitive-1.2.1.tgz",
@@ -23447,6 +24086,16 @@
         "estraverse": "^4.1.1"
       }
     },
+    "eslint-scope": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz",
+      "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+      "peer": true,
+      "requires": {
+        "esrecurse": "^4.3.0",
+        "estraverse": "^4.1.1"
+      }
+    },
     "esprima": {
       "version": "2.7.3",
       "resolved": "https://registry.npm.taobao.org/esprima/download/esprima-2.7.3.tgz",
@@ -24169,6 +24818,12 @@
         "is-glob": "^4.0.1"
       }
     },
+    "glob-to-regexp": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+      "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+      "peer": true
+    },
     "global": {
       "version": "4.3.2",
       "resolved": "https://registry.npm.taobao.org/global/download/global-4.3.2.tgz",
@@ -25272,6 +25927,34 @@
       "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
       "dev": true
     },
+    "jest-worker": {
+      "version": "27.5.1",
+      "resolved": "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz",
+      "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
+      "peer": true,
+      "requires": {
+        "@types/node": "*",
+        "merge-stream": "^2.0.0",
+        "supports-color": "^8.0.0"
+      },
+      "dependencies": {
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "peer": true
+        },
+        "supports-color": {
+          "version": "8.1.1",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz",
+          "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+          "peer": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
     "jquery": {
       "version": "3.6.0",
       "resolved": "https://registry.npm.taobao.org/jquery/download/jquery-3.6.0.tgz",
@@ -25570,7 +26253,7 @@
     },
     "lodash": {
       "version": "4.17.21",
-      "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
       "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
     },
     "lodash-es": {
@@ -26186,6 +26869,12 @@
       "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
       "dev": true
     },
+    "merge-stream": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz",
+      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+      "peer": true
+    },
     "methods": {
       "version": "1.1.2",
       "resolved": "https://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz",
@@ -27716,6 +28405,11 @@
       "resolved": "https://registry.npm.taobao.org/pako/download/pako-1.0.11.tgz?cache=0&sync_timestamp=1610209004795&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpako%2Fdownload%2Fpako-1.0.11.tgz",
       "integrity": "sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8="
     },
+    "papaparse": {
+      "version": "5.4.1",
+      "resolved": "https://registry.npmmirror.com/papaparse/-/papaparse-5.4.1.tgz",
+      "integrity": "sha512-HipMsgJkZu8br23pW15uvo6sib6wne/4woLZPlFf3rpDyMe9ywEXUsuD7+6K9PRkJlVT51j/sCOYDKGGS3ZJrw=="
+    },
     "parallel-transform": {
       "version": "1.2.0",
       "resolved": "https://registry.npmmirror.com/parallel-transform/-/parallel-transform-1.2.0.tgz",
@@ -27850,6 +28544,12 @@
       "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==",
       "devOptional": true
     },
+    "picocolors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.1.tgz",
+      "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
+      "peer": true
+    },
     "picomatch": {
       "version": "2.2.2",
       "resolved": "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.2.tgz?cache=0&sync_timestamp=1584790434095&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpicomatch%2Fdownload%2Fpicomatch-2.2.2.tgz",
@@ -32022,6 +32722,42 @@
         }
       }
     },
+    "terser": {
+      "version": "5.31.3",
+      "resolved": "https://registry.npmmirror.com/terser/-/terser-5.31.3.tgz",
+      "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==",
+      "peer": true,
+      "requires": {
+        "@jridgewell/source-map": "^0.3.3",
+        "acorn": "^8.8.2",
+        "commander": "^2.20.0",
+        "source-map-support": "~0.5.20"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "8.12.1",
+          "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.12.1.tgz",
+          "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
+          "peer": true
+        },
+        "commander": {
+          "version": "2.20.3",
+          "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz",
+          "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+          "peer": true
+        },
+        "source-map-support": {
+          "version": "0.5.21",
+          "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz",
+          "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+          "peer": true,
+          "requires": {
+            "buffer-from": "^1.0.0",
+            "source-map": "^0.6.0"
+          }
+        }
+      }
+    },
     "text-segmentation": {
       "version": "1.0.3",
       "resolved": "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz",

+ 1 - 0
package.json

@@ -38,6 +38,7 @@
     "lodash": "^4.17.21",
     "markdown-it": "^13.0.2",
     "opencc-js": "^1.0.5",
+    "papaparse": "^5.4.1",
     "pdfjs-dist": "^2.5.207",
     "pptxgenjs": "^3.12.0",
     "qrcodejs2": "^0.0.2",

BIN
src/assets/icon/ppt/model6-1-2.png


BIN
src/assets/icon/ppt/model6-1.png


BIN
src/assets/icon/ppt/model6-2.png


BIN
src/assets/icon/ppt/model6-3.png


Fichier diff supprimé car celui-ci est trop grand
+ 402 - 100
src/components/pages/aiAddCourse/addCourse.vue


+ 630 - 128
src/components/pages/aiAddCourse/aiCreateDialog.vue

@@ -11,8 +11,8 @@
                 </el-radio-group>
             </div> -->
             <div class="t_box" v-if="steps == 1" style="height: 100%">
-                <textarea style="height: 100%;width:calc(100% - 260px)" rows="10" class="binfo_input binfo_textarea" cols
-                    placeholder="请生成大纲" v-model="outline"></textarea>
+                <textarea style="height: 100%;width:calc(100% - 260px)" rows="10" class="binfo_input binfo_textarea"
+                    cols placeholder="请生成大纲" v-model="outline"></textarea>
                 <div class="template_box">
                     <span class="title">选择模板</span>
                     <div class="template_list">
@@ -31,7 +31,7 @@
             <el-button @click="aiGet(2)" type="primary" :disabled="loading">重新生成大纲</el-button>
             <el-button @click="aiGet(1)" type="primary" :disabled="loading">{{
                 url ? "重新生成PPT" : "生成PPT"
-            }}</el-button>
+                }}</el-button>
             <el-button @click="steps = 1" type="primary" v-if="steps == 2">上一步</el-button>
             <el-button @click="steps = 2" type="primary" v-else-if="steps == 1 && url">下一步</el-button>
             <el-button @click="confirm" type="primary">确 定</el-button>
@@ -111,17 +111,471 @@ export default {
             uJson: {},
             outline: "",
             steps: 1,
+            // templateList: [
+            //     // { img: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model1-11719468995661.png', img2: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model1-21719469026755.png',color:'17094F' },
+            //     // { img: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model2-11719469051869.png', img2: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model2-21719469040181.png',color:'052B37' },
+            //     // { img: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model3-11719469071576.png', img2: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model3-21719469092087.png',color:'1D5869' },
+            //     // { img: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model4-11719469106190.png', img2: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model-4-21719469125318.png',color:'372213' },
+            //     // { img: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model5-11719295908696.png', img2: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model5-21719295930345.png',color:'674D40' },
+            //     { img: require('../../../assets/icon/ppt/model1-1.png'), img2: require('../../../assets/icon/ppt/model1-2.png'),color:'17094F' },
+            //     { img: require('../../../assets/icon/ppt/model2-1.png'), img2: require('../../../assets/icon/ppt/model2-2.png'),color:'052B37' },
+            //     { img: require('../../../assets/icon/ppt/model3-1.png'), img2: require('../../../assets/icon/ppt/model3-2.png'),color:'1D5869' },
+            //     { img: require('../../../assets/icon/ppt/model4-1.png'), img2: require('../../../assets/icon/ppt/model4-2.png'),color:'372213' },
+            //     { img: require('../../../assets/icon/ppt/model5-1.png'), img2: require('../../../assets/icon/ppt/model5-2.png'),color:'674D40' },
+            // ],
             templateList: [
-                // { img: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model1-11719468995661.png', img2: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model1-21719469026755.png',color:'17094F' },
-                // { img: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model2-11719469051869.png', img2: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model2-21719469040181.png',color:'052B37' },
-                // { img: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model3-11719469071576.png', img2: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model3-21719469092087.png',color:'1D5869' },
-                // { img: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model4-11719469106190.png', img2: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model-4-21719469125318.png',color:'372213' },
-                // { img: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model5-11719295908696.png', img2: 'https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/model5-21719295930345.png',color:'674D40' },
-                { img: require('../../../assets/icon/ppt/model1-1.png'), img2: require('../../../assets/icon/ppt/model1-2.png'),color:'17094F' },
-                { img: require('../../../assets/icon/ppt/model2-1.png'), img2: require('../../../assets/icon/ppt/model2-2.png'),color:'052B37' },
-                { img: require('../../../assets/icon/ppt/model3-1.png'), img2: require('../../../assets/icon/ppt/model3-2.png'),color:'1D5869' },
-                { img: require('../../../assets/icon/ppt/model4-1.png'), img2: require('../../../assets/icon/ppt/model4-2.png'),color:'372213' },
-                { img: require('../../../assets/icon/ppt/model5-1.png'), img2: require('../../../assets/icon/ppt/model5-2.png'),color:'674D40' },
+                {
+                    img: require('../../../assets/icon/ppt/model1-1.png'),
+                    img1: {
+                        img: require('../../../assets/icon/ppt/model1-1.png'),
+                        setting: {
+                            x: "5%",
+                            y: 3,
+                            w: "90%",
+                            color: '17094F',
+                            fontSize: 38,
+                            align: "center",
+                        }
+                    },
+                    img2: [
+                        {
+                            img: require('../../../assets/icon/ppt/model1-2.png'),
+                            title: {
+                                x: "5%", // 横坐标
+                                y: 1.1,
+                                w: "90%",
+                                color: '17094F',
+                                bold: true,
+                                fontSize: 35, // 字号
+                                align: "center",
+                            },
+                            subTitle: {
+                                x: "5%", // 横坐标
+                                y: 1.8,
+                                w: "90%",
+                                color: "222222",
+                                fontSize: 20, // 字号
+                                align: "center",
+                            },
+                            content: {
+                                x: "20%", // 横坐标
+                                y: 3.2,
+                                w: "60%",
+                                color: "444444",
+                                fontSize: 18, // 字号
+                                align: "center",
+                            }
+                        }
+                    ],
+                    imgEnd: {
+                        img: require('../../../assets/icon/ppt/model1-1.png'),
+                        setting: {
+                            x: "5%",
+                            y: 3,
+                            w: "90%",
+                            color: '17094F',
+                            fontSize: 38,
+                            align: "center",
+                        }
+                    }
+                },
+                {
+                    img: require('../../../assets/icon/ppt/model2-1.png'),
+                    img1: {
+                        img: require('../../../assets/icon/ppt/model2-1.png'),
+                        setting: {
+                            x: "5%",
+                            y: 3,
+                            w: "90%",
+                            color: '052B37',
+                            fontSize: 38,
+                            align: "center",
+                        }
+                    },
+                    img2: [
+                        {
+                            img: require('../../../assets/icon/ppt/model2-2.png'),
+                            title: {
+                                x: "5%", // 横坐标
+                                y: 1.1,
+                                w: "90%",
+                                color: '052B37',
+                                bold: true,
+                                fontSize: 35, // 字号
+                                align: "center",
+                            },
+                            subTitle: {
+                                x: "5%", // 横坐标
+                                y: 1.8,
+                                w: "90%",
+                                color: "222222",
+                                fontSize: 20, // 字号
+                                align: "center",
+                            },
+                            content: {
+                                x: "20%", // 横坐标
+                                y: 3.2,
+                                w: "60%",
+                                color: "444444",
+                                fontSize: 18, // 字号
+                                align: "center",
+                            }
+                        }
+                    ],
+                    imgEnd: {
+                        img: require('../../../assets/icon/ppt/model2-1.png'),
+                        setting: {
+                            x: "5%",
+                            y: 3,
+                            w: "90%",
+                            color: '052B37',
+                            fontSize: 38,
+                            align: "center",
+                        }
+                    }
+                },
+                {
+                    img: require('../../../assets/icon/ppt/model3-1.png'),
+                    img1: {
+                        img: require('../../../assets/icon/ppt/model3-1.png'),
+                        setting: {
+                            x: "5%",
+                            y: 3,
+                            w: "90%",
+                            color: '1D5869',
+                            fontSize: 38,
+                            align: "center",
+                        }
+                    },
+                    img2: [
+                        {
+                            img: require('../../../assets/icon/ppt/model3-2.png'),
+                            title: {
+                                x: "5%", // 横坐标
+                                y: 1.1,
+                                w: "90%",
+                                color: '1D5869',
+                                bold: true,
+                                fontSize: 35, // 字号
+                                align: "center",
+                            },
+                            subTitle: {
+                                x: "5%", // 横坐标
+                                y: 1.8,
+                                w: "90%",
+                                color: "222222",
+                                fontSize: 20, // 字号
+                                align: "center",
+                            },
+                            content: {
+                                x: "20%", // 横坐标
+                                y: 3.2,
+                                w: "60%",
+                                color: "444444",
+                                fontSize: 18, // 字号
+                                align: "center",
+                            }
+                        }
+                    ],
+                    imgEnd: {
+                        img: require('../../../assets/icon/ppt/model3-1.png'),
+                        setting: {
+                            x: "5%",
+                            y: 3,
+                            w: "90%",
+                            color: '1D5869',
+                            fontSize: 38,
+                            align: "center",
+                        }
+                    }
+                },
+                {
+                    img: require('../../../assets/icon/ppt/model4-1.png'),
+                    img1: {
+                        img: require('../../../assets/icon/ppt/model4-1.png'),
+                        setting: {
+                            x: "5%",
+                            y: 3,
+                            w: "90%",
+                            color: '372213',
+                            fontSize: 38,
+                            align: "center",
+                        }
+                    },
+                    img2: [
+                        {
+                            img: require('../../../assets/icon/ppt/model4-2.png'),
+                            title: {
+                                x: "5%", // 横坐标
+                                y: 1.1,
+                                w: "90%",
+                                color: '372213',
+                                bold: true,
+                                fontSize: 35, // 字号
+                                align: "center",
+                            },
+                            subTitle: {
+                                x: "5%", // 横坐标
+                                y: 1.8,
+                                w: "90%",
+                                color: "222222",
+                                fontSize: 20, // 字号
+                                align: "center",
+                            },
+                            content: {
+                                x: "20%", // 横坐标
+                                y: 3.2,
+                                w: "60%",
+                                color: "444444",
+                                fontSize: 18, // 字号
+                                align: "center",
+                            }
+                        }
+                    ],
+                    imgEnd: {
+                        img: require('../../../assets/icon/ppt/model4-1.png'),
+                        setting: {
+                            x: "5%",
+                            y: 3,
+                            w: "90%",
+                            color: '372213',
+                            fontSize: 38,
+                            align: "center",
+                        }
+                    },
+                    color: '372213'
+                },
+                {
+                    img: require('../../../assets/icon/ppt/model5-1.png'),
+                    img1: {
+                        img: require('../../../assets/icon/ppt/model5-1.png'),
+                        setting: {
+                            x: "5%",
+                            y: 3,
+                            w: "90%",
+                            color: '674D40',
+                            fontSize: 38,
+                            align: "center",
+                        }
+                    },
+                    img2: [
+                        {
+                            img: require('../../../assets/icon/ppt/model5-2.png'),
+                            title: {
+                                x: "5%", // 横坐标
+                                y: 1.1,
+                                w: "90%",
+                                color: '674D40',
+                                bold: true,
+                                fontSize: 35, // 字号
+                                align: "center",
+                            },
+                            subTitle: {
+                                x: "5%", // 横坐标
+                                y: 1.8,
+                                w: "90%",
+                                color: "222222",
+                                fontSize: 20, // 字号
+                                align: "center",
+                            },
+                            content: {
+                                x: "20%", // 横坐标
+                                y: 3.2,
+                                w: "60%",
+                                color: "444444",
+                                fontSize: 18, // 字号
+                                align: "center",
+                            }
+                        }
+                    ],
+                    imgEnd: {
+                        img: require('../../../assets/icon/ppt/model5-1.png'),
+                        setting: {
+                            x: "5%",
+                            y: 3,
+                            w: "90%",
+                            color: '674D40',
+                            fontSize: 38,
+                            align: "center",
+                        }
+                    },
+                },
+                {
+                    img: require('../../../assets/icon/ppt/model6-1.png'),
+                    img1: {
+                        img: require('../../../assets/icon/ppt/model6-1-2.png'),
+                        setting: {
+                            x: "35%",
+                            y: 2.3,
+                            w: "60%",
+                            bold: true,
+                            color: 'EA7A93',
+                            fontSize: 38,
+                            align: "center",
+                        }
+                    },
+                    img2: [
+                        {
+                            img:require('../../../assets/icon/ppt/model6-2.png'),
+                            title: {
+                                x: "5%", // 横坐标
+                                y: 1.1,
+                                w: "90%",
+                                color: '4F73DA',
+                                bold: true,
+                                fontSize: 35, // 字号
+                                align: "center",
+                            },
+                            subTitle: {
+                                x: "5%", // 横坐标
+                                y: 1.8,
+                                w: "90%",
+                                color: "333333",
+                                fontSize: 20, // 字号
+                                align: "center",
+                            },
+                            content: {
+                                x: "20%", // 横坐标
+                                y: 3.2,
+                                w: "60%",
+                                color: "333333",
+                                fontSize: 18, // 字号
+                                align: "center",
+                            }
+                        },//内容页1
+                        {
+                            img: require('../../../assets/icon/ppt/model6-2.png'),
+                            title: {
+                                x: "2.5%", // 横坐标
+                                y: 2.3,
+                                w: "30%",
+                                color: 'ffffff',
+                                bold: true,
+                                fontSize: 35, // 字号
+                                align: "left",
+                            },
+                            subTitle: {
+                                x: "2.5%", // 横坐标
+                                y: 3.1,
+                                w: "30%",
+                                color: "ffffff",
+                                fontSize: 20, // 字号
+                                align: "left",
+                            },
+                            content: {
+                                x: "45%", // 横坐标
+                                y: 2.8,
+                                w: "45%",
+                                color: "333333",
+                                fontSize: 18, // 字号
+                                align: "left",
+                            },
+                            square: {
+                                x: 0,
+                                y: 0,
+                                w: "35%",
+                                h: "100%",
+                                fill: { color: "4F73DA" }
+                            },
+                            square2: {
+                                x: "35%",
+                                y: 0,
+                                w: "2.5%",
+                                h: "100%",
+                                fill: { color: "C2CFEF" }
+                            }
+                        },//内容页2
+                        {
+                            img: require('../../../assets/icon/ppt/model6-2.png'),
+                            title: {
+                                x: "5%", // 横坐标
+                                y: 1,
+                                w: "60%",
+                                color: '4F73DA',
+                                bold: true,
+                                fontSize: 35, // 字号
+                                align: "left",
+                            },
+                            subTitle: {
+                                x: "5%", // 横坐标
+                                y: 1.7,
+                                w: "60%",
+                                color: "333333",
+                                fontSize: 20, // 字号
+                                align: "left",
+                            },
+                            content: {
+                                x: "5%", // 横坐标
+                                y: 2.5,
+                                w: "60%",
+                                color: "333333",
+                                fontSize: 18, // 字号
+                                align: "left",
+                            },
+                            image: {
+                                x: "70%",
+                                y: "22%",
+                                w: "30%",
+                                h: "56%",
+                                sizing: "contain",
+                                path: require('../../../assets/icon/ppt/model6-3.png')
+                            },
+                        },//内容页3
+                        {
+                            img: require('../../../assets/icon/ppt/model6-2.png'),
+                            title: {
+                                x: 0, // 横坐标
+                                y: "30%",
+                                w: "35%",
+                                h: "40%",
+                                color: 'ffffff',
+                                bold: true,
+                                fontSize: 30, // 字号
+                                align: "right",
+                                fill: { color: "4F73DA"},
+                                margin: 10,
+                            },
+                            subTitle: {
+                                x: "37.5%", // 横坐标
+                                y: 1,
+                                w: "53%",
+                                color: "333333",
+                                fontSize: 20, // 字号
+                                align: "left",
+                            },
+                            content: {
+                                x: "37.5%", // 横坐标
+                                y: 2,
+                                w: "53%",
+                                color: "333333",
+                                fontSize: 18, // 字号
+                                align: "left",
+                            },
+                            square: {
+                                x: "5%",
+                                y: "10%",
+                                w: "90%",
+                                h: "80%",
+                                fill: { color: "ffffff" },
+                                line: {
+                                    width: '2',
+                                    color: "3B4564"
+                                }
+                            },
+                        }, //内容页5
+                    ],
+                    imgEnd: {
+                        img: require('../../../assets/icon/ppt/model6-1-2.png'),
+                        setting: {
+                            x: "35%",
+                            y: 2.3,
+                            w: "60%",
+                            color: 'EA7A93',
+                            fontSize: 38,
+                            align: "center",
+                        }
+                    },
+                },
             ],
             templateIndex: 0,
         };
@@ -131,6 +585,9 @@ export default {
             if (newValue) {
                 this.loading = false;
                 this.aiGet(2);
+                // this.templateIndex = 5
+                // this.createPpt();
+
             }
         },
     },
@@ -146,7 +603,7 @@ export default {
             if (this.url) {
                 this.$emit("createAiPpt", this.uJson);
             } else {
-                this.$message.error("请先生成ppt");
+                this.$message.error("请点击“生成PPT”按钮");
             }
         },
         changeRadio() {
@@ -241,79 +698,54 @@ Instruction: Based on the context, follow "Format example", write content.
 
 # Context 
 ## 任务
-将参考#大纲内容,为教师生成这节课的教学ppt。PPT的内容主要是讲解该课程中所有可能涉及到的知识点,根据大纲内容生成ppt内容。
+你会收到一节课的教学ppt大纲<大纲内容>,你需要细化大纲每个部分(除了测试题部分),生成详细每一页ppt的内容参考#每一页输出格式。 
 
-## 每一页输出格式
-- 页数:序列数字
-- 标题:学科概念(请从给你的大纲中摘取)
-- 子标题:知识点(请从给你的大纲中摘取)
-- 知识点讲解:针对大纲中的每个知识点,生成200字左右的详细讲解。你的语气应该让小学或初中的学生清晰易懂的讲解。你的讲解词在200 token左右。请尽可能的详细,这对我很重要。
-
-## 限制
-- 你不能输出错误的知识,如果你实在不清楚,修改大纲中的知识点。
-- 你不能输出违反伦理的内容
+# 目标
+生成教师可用直接拿来上课的ppt,ppt中用亲切的口吻告诉学生,他们该做什么,以及介绍相关的知识点(知识点需要详细的说明)。必要时使用bullet point。最终生成12页左右的ppt。
 
-## 工作流
-1. 针对大纲中的每个知识点,生成200字左右的详细讲解。你的语气应该让小学或初中的学生清晰易懂的讲解。请尽可能的详细,这对我很重要。
-2. 针对大纲中的每个测试,详细设计不同测试题目,例如单选,多选,对错题等。
-3.从用户提供的参考资料中提取5个最重要的学科概念,并输出。
-4.分解每个学科概念为几个子知识点
-5.简要描述每个知识点
-6.生成5个测试题以考察学生的掌握情况
-7.一个知识点一页,一个测试题一页
+# 每一页输出格式
+- 页数:序列数字
+- 标题:环节
+- 子标题:步骤或者知识点或测试题序号
+- 内容:用亲切的口吻告诉学生本步骤应做什么?或者是用亲切的口吻向学生介绍知识点,多条时可使用bullet point;或者是给学生测试题。
 
 ## 大纲内容
-${_this.outline.replaceAll('#','').replaceAll('*','').replaceAll('-','').replaceAll('\n','')}
+${_this.outline.replaceAll('#', '').replaceAll('*', '').replaceAll('-', '').replaceAll('\n', '')}
 
 # Format example
-[{"page": "页码(数字)","title": "学科概念(请从给你的大纲中摘取)(标题)","task": "知识点(请从给你的大纲中摘取)(子标题)","points": "知识点讲解:针对大纲中的每个知识点,生成200字左右的详细讲解。你的语气应该让小学或初中的学生清晰易懂的讲解。你的讲解词在100 token左右。请尽可能的详细,这对我很重要。"}]`;
+[{"page": "页码(数字)","title": "学科概念(请从给你的大纲中摘取)(标题)","task": "知识点(请从给你的大纲中摘取)(子标题)","points": "内容:用亲切的口吻告诉学生本步骤应做什么?或者是用亲切的口吻向学生介绍知识点,多条时可使用bullet point;或者是给学生测试题。"}]`;
             } else {
-                if(this.courseState == 4){
+                if (this.courseState == 4) {
                     message = `# 任务
 请根据参考资料,生成关于${this.courseName},为教师生成这节课的教学ppt的大纲,大纲的主要内容课程知识点的讲解与相关练习和测试。你的输出应该符合#输出格式
 
-# 工作流
-1.从用户提供的参考资料中提取3个最重要的学科概念${mclass.length ? "(水平限制在{面向年级}中)" : ""},并输出。
-2.分解每个学科概念为几个子知识点
-3.简要描述每个知识点
-4.生成3个测试题以考察学生的掌握情况
-
 ${mclass.length ? "#参考资料\n面向年级:" + mclass.join(",") : ""}
 
 # 输出格式
-- 标题:学科概念1
-  1.知识点:知识点1
-  2.知识点:知识点2
-  3.知识点:知识点3
+- 标题:
+  --步骤
+  --知识点
 
 # 限制
-1.如果有参考资料请根据参考资料,如果没有无需根据参考资料进行,随意发挥。
-2.你不能输出错误的知识。
-3.你不能输出违反伦理的内容。`;
-                }else if(this.courseState == 5){
+- 你不能输出错误的知识,如果你实在不清楚,输出“对不起,我不确定”
+- 你不能输出违反伦理的内容`;
+                } else if (this.courseState == 5) {
                     message = `# 任务
-根据参考资料,为教师生成该任务的教学ppt的大纲,大纲是针对该任务相关知识点的讲解与相关练习和测试。你的输出应该符合#输出格式
+请根据<任务教案>,为教师生成本的教学ppt的大纲,大纲包含各环节的步骤,学科知识点。
 
 # 参考资料
-任务教案:${_this.unitJson[0].chapterInfo[0].taskJson[_this.lineCount].taskDetail3.replaceAll('#','').replaceAll('*','').replaceAll('-','').replaceAll('\n','')}
+任务教案:${_this.unitJson[0].chapterInfo[0].taskJson[_this.lineCount].taskDetail3.replaceAll('#', '').replaceAll('*', '').replaceAll('-', '').replaceAll('\n', '')}
 ${mclass.length ? "面向年级:" + mclass.join(",") : ""}
 
-# 工作流
-1.从用户提供的参考资料中提取3个最重要的学科概念${mclass.length ? "(水平限制在{面向年级}中)" : ""},并输出。
-2.分解每个学科概念为几个子知识点
-3.简要描述每个知识点
-4.生成3个测试题以考察学生的掌握情况
-
 # 输出格式
-- 标题:学科概念1
-  1.知识点:知识点1
-  2.知识点:知识点2
-  3.知识点:知识点3
+- 标题:
+  --步骤
+  --知识点
 
 # 限制
-1.如果有参考资料请根据参考资料,如果没有无需根据参考资料进行,随意发挥。
-2.你不能输出错误的知识。
-3.你不能输出违反伦理的内容。`
+- 你不能输出错误的知识,如果你实在不清楚,输出“对不起,我不确定”
+- 你不能输出违反伦理的内容
+`
 
                 }
             }
@@ -425,78 +857,142 @@ ${mclass.length ? "面向年级:" + mclass.join(",") : ""}
                     console.log(error);
                 });
         },
-        createPpt(array) {
+        generateRandomNumber(min, max) {
+            // min 是随机数范围的最小值,max 是随机数范围的最大值
+            return Math.floor(Math.random() * (max - min + 1)) + min;
+        },
+        createPpt(arr) {
+            // let array = arr
+            let array = [
+                {
+                    "page": 1,
+                    "title": "引入阶段",
+                    "task": "课程背景",
+                    "points": "同学们,让我们一起了解一下这门有趣的熊猫课程吧!今天,我们将探索熊猫的生活环境,并尝试去理解这些环境是如何影响熊猫的生存的。"
+                },
+                {
+                    "page": 2,
+                    "title": "引入阶段",
+                    "task": "整体目标和任务要求",
+                    "points": "这门课程的主要目标是让大家了解熊猫生活的环境以及生存所需的关键因素。我们将完成一个任务,具体要求是观察、记录、绘制和制作模型哦!"
+                },
+                {
+                    "page": 3,
+                    "title": "引入阶段",
+                    "task": "驱动性问题",
+                    "points": "大家思考一下这样一个问题:‘熊猫的生活环境对它们的生存有何重要影响?’ 我们接下去的活动将帮助大家找到答案。"
+                },
+                {
+                    "page": 4,
+                    "title": "引入阶段",
+                    "task": "观察与记录技巧",
+                    "points": "今天我们会运用图片和视频,来帮助大家观察熊猫栖息地和它们所吃的竹子等特征。细心观察,并将所见的特征记录下来是非常重要的技能哦!"
+                },
+                {
+                    "page": 5,
+                    "title": "探究阶段",
+                    "task": "绘图工具和材料",
+                    "points": "现在我们分发绘图工具和材料,来学习基本的绘图和建模技巧吧!熟练掌握这些工具会帮助我们更好地记录和展示我们的观察结果。"
+                },
+                {
+                    "page": 6,
+                    "title": "探究阶段",
+                    "task": "观察和记录特征",
+                    "points": "让我们好好观察一下身边的常见物体,把它们的特征记录下来。这个过程会训练你们的观察力和手眼协调能力。"
+                },
+                {
+                    "page": 7,
+                    "title": "探究阶段",
+                    "task": "转换二维图像",
+                    "points": "接下来,我们要把记录的三维物体转化为二维图像。这个步骤非常有趣,大家可以尽情发挥自己的绘画天赋哦!"
+                },
+                {
+                    "page": 8,
+                    "title": "探究阶段",
+                    "task": "三维模型制作",
+                    "points": "现在我们提供一些简单的材料,比如纸张和纸板,示范一下如何制作三维模型。记住,比例和结构是模型制作的关键!"
+                },
+                {
+                    "page": 9,
+                    "title": "评估与反馈阶段",
+                    "task": "评估和检查",
+                    "points": "大家完成了任务后,我们来检查和评估你们的二维图像和三维模型。确保它们的结构合理、比例协调。"
+                },
+                {
+                    "page": 10,
+                    "title": "评估与反馈阶段",
+                    "task": "提出改进建议",
+                    "points": "针对你们完成的作品,我们会提出一些改进建议。大家也可以相互评价,分享制作经验,这样可以互相学习哦!"
+                },
+                {
+                    "page": 11,
+                    "title": "评估与反馈阶段",
+                    "task": "任务总结",
+                    "points": "最后,我们要总结这次任务的执行情况,并表扬表现特别突出的同学。希望大家都能有所收获,并继续努力!"
+                },
+                {
+                    "page": 12,
+                    "title": "练习",
+                    "task": "练习1:二维图像绘制",
+                    "points": "选择一件日常物品(如书本、杯子),观察其特征,尝试通过手绘将其转换为二维图像。示例:通过绘制书本的正面、侧面和顶面图,展示其主要特征和比例关系。"
+                },
+                {
+                    "page": 13,
+                    "title": "练习",
+                    "task": "练习2:三维模型制作",
+                    "points": "使用纸张和纸板制作简单的模型,比如一个基本的房子或盒子。关注其结构和比例哦! 示例:通过折叠和粘贴纸张,制作一个四面体,确保各个面的比例协调,结构稳定。"
+                }
+            ]
             // 1. 创建PPT
             const pres = new Pptxgen();
             const _slideTou = pres.addSlide();
-            _slideTou.background = { path: this.templateList[this.templateIndex].img }
+            _slideTou.background = { path: this.templateList[this.templateIndex].img1.img }
             let title = ''
-            if(this.courseState == 4){
+            if (this.courseState == 4) {
                 title = this.courseName
-            }else if(this.courseState == 5){
+            } else if (this.courseState == 5) {
                 title = this.unitJson[0].chapterInfo[0].taskJson[this.lineCount].task
             }
-            _slideTou.addText(title, {
-                x: "10%", // 横坐标
-                y: 3,
-                width: "90%",
-                color: this.templateList[this.templateIndex].color,
-                fontSize: 38, // 字号
-                align: "center",
-            });
+            _slideTou.addText(title, this.templateList[this.templateIndex].img1.setting);
             for (var i = 0; i < array.length; i++) {
                 // 2. 创建一个PPT页面,每调用一次 pres.addSlide() 都可以生成一张新的页面
                 // 建议把每个页面的构造抽成一个个函数,然后通过函数调用生成新页面,代码不会很乱
                 const _slide = pres.addSlide();
-                _slide.background = { path: this.templateList[this.templateIndex].img2 }
+                const randomNum = this.generateRandomNumber(0, (this.templateList[this.templateIndex].img2.length - 1))
+                let pContent = this.templateList[this.templateIndex].img2[randomNum]
+                _slide.background = { path: pContent.img }
 
                 // 3. 调用addTetx(),在PPT页面中插入文字“Hello World from PptxGenJS...”
                 // 括号里面是对文字的配置,文字横坐标x为1.5,纵坐标y为1.5,字体颜色 363636……
                 // 关于坐标长度与px的转换 x 1 = 127~128px 左右
                 const page = i + 1 > 10 ? i + 1 : "0" + (i + 1);
+
+                if(pContent.square){
+                    _slide.addText("", pContent.square);
+                    _slide.addText("", pContent.square2);
+                }
+                if(pContent.image){
+                    _slide.addImage(pContent.image);
+                }
                 const tempResult1 = page + " " + array[i].title;
-                _slide.addText(tempResult1, {
-                    x: "10%", // 横坐标
-                    y: 1.1,
-                    width: "90%",
-                    color: this.templateList[this.templateIndex].color,
-                    fontSize: 28, // 字号
-                    align: "center",
-                });
+                _slide.addText(tempResult1, pContent.title);
                 const tempResult2 = array[i].task;
-                _slide.addText(tempResult2, {
-                    x: "10%", // 横坐标
-                    y: 1.8,
-                    width: "90%",
-                    color: "222222",
-                    fontSize: 20, // 字号
-                    align: "center",
-                });
+                _slide.addText(tempResult2, pContent.subTitle);
                 let tempResult3 = '';
                 if (typeof array[i].points == 'object') {
-                    tempResult3 = array[i].points.join('\n')
+                    if (Array.isArray(array[i].points)) {
+                        tempResult3 = array[i].points.join('\n')
+                    } else {
+                        tempResult3 = JSON.stringify(array[i].points)
+                    }
                 } else {
                     tempResult3 = array[i].points
                 }
-                _slide.addText(tempResult3, {
-                    x: "20%", // 横坐标
-                    y: 3.2,
-                    w: "60%",
-                    color: "444444",
-                    fontSize: 18, // 字号
-                    align: "center",
-                });
+                _slide.addText(tempResult3, pContent.content);
             }
             const _slideWei = pres.addSlide();
-            _slideWei.background = { path: this.templateList[this.templateIndex].img }
-            _slideWei.addText("谢谢观看,下课!", {
-                x: "10%", // 横坐标
-                y: 3,
-                width: "90%",
-                color: this.templateList[this.templateIndex].color,
-                fontSize: 38, // 字号
-                align: "center",
-            });
+            _slideWei.background = { path: this.templateList[this.templateIndex].imgEnd.img }
+            _slideWei.addText("谢谢观看,下课!", this.templateList[this.templateIndex].imgEnd.setting);
             // 获取PPTX文件的ArrayBuffer
 
             // 保存为 Blob 并处理
@@ -636,27 +1132,27 @@ ${mclass.length ? "面向年级:" + mclass.join(",") : ""}
 }
 
 .binfo_textarea:focus-visible {
-  border: 1.5px solid #3681fc !important;
+    border: 1.5px solid #3681fc !important;
 }
 
 .binfo_textarea::-webkit-scrollbar {
-  /*滚动条整体样式*/
-  width: 6px;
-  /*高宽分别对应横竖滚动条的尺寸*/
-  height: 6px;
+    /*滚动条整体样式*/
+    width: 6px;
+    /*高宽分别对应横竖滚动条的尺寸*/
+    height: 6px;
 }
 
 /*定义滚动条轨道 内阴影+圆角*/
 .binfo_textarea::-webkit-scrollbar {
-  border-radius: 10px;
-  background-color: #eee;
+    border-radius: 10px;
+    background-color: #eee;
 }
 
 /*定义滑块 内阴影+圆角*/
 .binfo_textarea::-webkit-scrollbar-thumb {
-  border-radius: 10px;
-  -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
-  background-color: rgba(0, 0, 0, 0.1);
+    border-radius: 10px;
+    -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
+    background-color: rgba(0, 0, 0, 0.1);
 }
 
 .t_box {
@@ -672,20 +1168,23 @@ ${mclass.length ? "面向年级:" + mclass.join(",") : ""}
     color: #000;
 }
 
-.template_box{
+.template_box {
     width: 250px;
 }
-.template_box > .title{
+
+.template_box>.title {
     font-size: 18px;
     margin-bottom: 10px;
     display: block;
 }
-.template_list{
+
+.template_list {
     overflow: auto;
     width: 100%;
     height: calc(100% - 31px);
 }
-.template_item{
+
+.template_item {
     cursor: pointer;
     width: 100%;
     height: 165px;
@@ -694,13 +1193,16 @@ ${mclass.length ? "面向年级:" + mclass.join(",") : ""}
     box-sizing: border-box;
     border: 5px solid #e5e5e5ee;
 }
-.template_item + .template_item{
+
+.template_item+.template_item {
     margin-top: 10px;
 }
-.template_item.active{
+
+.template_item.active {
     border: 5px solid #0061ff;
 }
-.template_item > img{
+
+.template_item>img {
     width: 100%;
     height: 100%;
     object-fit: cover;

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

@@ -1,5 +1,5 @@
 <template>
-    <el-dialog title="AI生成视频" :visible.sync="dialogVisibleAiCreateVideo" :append-to-body="true" width="700px"
+    <el-dialog title="智能检索" :visible.sync="dialogVisibleAiCreateVideo" :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 style="position: relative; width: 100%;height: 40px;margin-bottom: 10px;">

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

@@ -6,12 +6,12 @@
                 <span :class="{active: type == 1}">基础创建</span>
             </div>
             <div class="ai_detail" v-if="type == 1">
-                <span class="title">{{text2 ? '生成任务提示词' : '默认的提示词'}}</span>
+                <span class="title">{{text2 ? '默认的提示词1' : '默认的提示词'}}</span>
                 <textarea rows="10" class="binfo_input binfo_textarea" cols v-model="text"
                       placeholder="请输入...."></textarea>
             </div>
             <div class="ai_detail" v-if="text2 && type == 1" style="margin-top: 10px;">
-                <span class="title">生成大纲描述提示词</span>
+                <span class="title">默认的提示词2</span>
                 <textarea rows="10" class="binfo_input binfo_textarea" cols v-model="text2"
                       placeholder="请输入...."></textarea>
             </div>

+ 2 - 1
src/components/pages/aiAddCourse/templateDialog.vue

@@ -47,7 +47,8 @@
                                 <div class="a-d-b-i-t-title">{{ item.name }}</div>
                             </el-tooltip>
                         </div>
-                        <div class="a-d-b-i-top" v-if="item.uname">创建人:{{ item.uname }}</div>
+                        <!-- <div class="a-d-b-i-top" v-if="item.uname">创建人:{{ item.uname }}</div> -->
+                        <div class="a-d-b-i-top" v-show="false">创建人:{{ item.uname }}</div>
                         <!-- <el-tooltip :content="item.detail" placement="top" effect="dark"> -->
                             <div class="a-d-b-i-bottom">{{ item.detail }}</div>
                         <!-- </el-tooltip> -->

+ 1 - 0
src/components/pages/classroomObservation/components/analysis.vue

@@ -18,6 +18,7 @@
 				ref="analysisItemRef"
 				v-if="(converter(item.jsonData.name)!=converter('词频词汇分析')) && ![converter('S-T分析:课堂时间分配'),converter('S-T分析:师生互动分析'),converter('S-T分析:教学模式分析')].includes(converter(item.jsonData.name)) "
 				:dialogTagDataList="dialogTagDataList"
+				:bmData="bmData"
 				:key="item.id"
 				:data="item"
 				:tid="tid"

+ 25 - 2
src/components/pages/classroomObservation/components/analysisItem.vue

@@ -173,7 +173,13 @@ export default {
 		showBrief:{
 			type:Boolean,
 			default:true,
-		}
+		},
+		bmData: {
+			type: Object,
+			default: () => {
+				return {};
+			},
+		},
 	},
 	data() {
 		return {
@@ -227,9 +233,26 @@ export default {
 				let assistant = this.dialogTagDataList.find(
 					(i) => i.title == this.data.jsonData.name
 				);
+
+				let _msg = `使用文件检索的方式完整的去分析文件内容,并请完全按照要求输出。`
+
+				if (!assistant.value) {
+					this.loading = false;
+					this.loadNum = 2;
+					return this.$message.error("未找到对应的AI助手");
+				}
+
+				if(assistant.value=='6b4a9650-48be-11ef-936b-12e77c4cb76b'){
+					_msg  = `使用文件检索的方式完整的去分析文件内容,并基于以下的课堂基本内容,使用cpote课程设计模型改编一堂同主题的课程。
+课堂名称:${this.bmData.courseName}  搜课年级:${this.bmData.grade}  授课科目:${this.bmData.subject}`
+					
+				}
+
+				// console.log('👇')
+				// return console.log(_msg)
 				let parm = {
 					assistant_id: assistant?assistant.value:null,
-					message:`使用文件检索的方式完整的去分析文件内容,并请完全按照要求输出。`,
+					message:_msg,
 					session_name: uuidv4(),
 					userId: this.userId,
 					file_ids: this.fileId?[this.fileId]:'',

+ 116 - 90
src/components/pages/classroomObservation/components/chatArea.vue

@@ -57,16 +57,25 @@
         v-model="editorBarData.content"
         v-if="pageStatus == 2 && !showIndexPage && editorBarData.type == '0'"
         v-loading="uploadFileLoading"
-        @change="changeEditor"
       >
-        <el-button
-          style="position: absolute; bottom: 20px; right: 100px; z-index: 10002"
-          type="primary"
-          @click.stop="generateActionTypesMap"
-          >自动编码</el-button
-        >
+        <el-popover placement="top" trigger="hover">
+          <el-button size="small" @click.stop="startContinuousJobs('role')">
+            说话人编码
+          </el-button>
+          <el-button size="small" @click.stop="startContinuousJobs('actionType')">
+            行为编码
+          </el-button>
+          <el-button
+            slot="reference"
+            style="position: absolute; bottom: 20px; right: 90px; z-index: 10002"
+            size="small"
+            type="primary"
+            >自动编码</el-button
+          >
+        </el-popover>
         <el-button
           style="position: absolute; bottom: 20px; right: 20px; z-index: 10002"
+          size="small"
           type="primary"
           @click.stop="saveEditorBar(true)"
           >保存</el-button
@@ -428,6 +437,7 @@ import EditorBar from "./wangEnduit";
 const lamejs = require("lamejs");
 import vpdf from "./vpdf";
 import _ from "lodash";
+import Papa from "papaparse";
 // const recorder = new Recorder({
 // 	sampleBits: 16, // 采样位数,支持 8 或 16,默认是16
 // 	sampleRate: 48000, // 采样率,支持 11025、16000、22050、24000、44100、48000,根据浏览器默认值,我的chrome是48000
@@ -459,7 +469,11 @@ const OPTIONS_GROUP = {
   ],
 };
 const ATTENTION_GROUP = {
-  default: "先根据说话人角色判断,再在对应角色的选项中选择选项",
+  default:
+    "- 先根据说话人角色判断,再在对应角色的选项中选择选项\n- 如果没有合适的选项,默认使用`老师其他`或者`学生其他`",
+};
+const ROLE_OPTIONS_GROUP = {
+  default: ["老师", "学生"],
 };
 
 // 自定义指令,用于处理点击外部区域的事件
@@ -686,7 +700,7 @@ export default {
       input.onchange = () => {
         this.uploadFileLoading = true;
         let file = input.files[0];
-        if (!/\.(wav|txt|pdf|xlsx|doc|docx)$/i.test(file.name)) {
+        if (!/\.(wav|txt|pdf|xlsx|doc|docx|csv)$/i.test(file.name)) {
           this.uploadFileLoading = false;
           return this.$message.info(
             "请上传.wav,.txt,.pdf,.xlsx,.doc,.docx,.csv格式的文件"
@@ -1804,8 +1818,8 @@ ${JSON.stringify(_list)}
             } else {
               // 判断是不是音频文件
               const audioRegex = /\.(mp3|wav|ogg|flac|m4a)$/i;
-              const txtRegex = /\.(txt)$/i;
-              const otherRegex = /\.(pdf|xlsx|doc|docx|csv)$/i;
+              const txtRegex = /\.(txt|csv)$/i;
+              const otherRegex = /\.(pdf|xlsx|doc|docx)$/i;
               // if (audioRegex.test(data.Location)) {
               // 	// console.log(data);
               // 	_this.uploadWavFileAndGetText(file)
@@ -1848,74 +1862,51 @@ ${JSON.stringify(_list)}
                         _this.controlsStatus = 2;
                         _this.showIndexPage = false;
                         _this.pageStatus = 2;
-                        // _this.transcriptionData.content += _res.data;
                         _this.editorBarData.type = "0";
-                        let _textData = _res.data;
+                        // _this.transcriptionData.content = _res.data;
                         if (flag) {
-                          let _result = `<table
-														border="0"
-														width="100%"
-														cellpadding="0"
-														cellspacing="0"
-														style="text-align: center"
-													>
-														<tbody>`;
-                          _textData.split("\n").forEach((item, index) => {
-                            if (index == _textData.split("\n").length - 1) return;
-                            if (index == 0) {
-                              _result += `<tr>`;
-                              if (
-                                item.split("").filter((char) => char === ",").length >= 6
-                              ) {
-                                item.split(",").forEach((item2, index2) => {
-                                  _result += `
-																			<th>${item2}</th>
-																		`;
-                                });
-                              } else {
-                                item
-                                  .trim()
-                                  .split(/\s+/)
-                                  .forEach((item2, index2) => {
-                                    _result += `
-																			<th>${item2}</td>
-																		`;
-                                  });
-                              }
-                              _result += `</tr>`;
-                              return;
-                            }
-                            _result += `<tr>`;
-                            if (
-                              item.split("").filter((char) => char === ",").length >= 6
-                            ) {
-                              item.split(",").forEach((item2, index2) => {
-                                _result += `
-																			<td>${item2}</td>
-																		`;
-                              });
-                            } else {
-                              item
-                                .trim()
-                                .split(/\s+/)
-                                .forEach((item2, index2) => {
-                                  _result += `
-																			<td>${item2}</td>
-																		`;
-                                });
-                            }
-
-                            _result += `</tr>`;
-                          });
-                          _result += `
-															</tbody>
-														</table>`;
-                          _this.editorBarData.content = _result;
+                          const arr = Papa.parse(_res.data, {
+                            header: false,
+                          }).data.slice(1);
+                          console.log(arr);
+                          const _editorBarDataContent = `<table
+                          border="0"
+                          width="100%"
+                          cellpadding="0"
+                          cellspacing="0"
+                          style="text-align: center"
+                        >
+                          <tbody>
+                            <tr>
+                              <th>序号</th>
+                              <th>开始时间</th>
+                              <th>结束时间</th>
+                              <th>发言内容</th>
+                              <th>时长</th>
+                              <th>说话人身份</th>
+                              <th>行为编码</th>
+                            </tr>
+                            ${arr
+                              .map(
+                                (row) => `
+                              <tr>
+                                <td>${_.get(row, 0, "")}</td>
+                                <td>${_.get(row, 1, "")}</td>
+                                <td>${_.get(row, 2, "")}</td>
+                                <td>${_.get(row, 3, "")}</td>
+                                <td>${_.get(row, 4, "")}</td>
+                                <td>${_.get(row, 5, "")}</td>
+                                <td>${_.get(row, 6, "")}</td>
+                              </tr>
+                              `
+                              )
+                              .join("\n")}
+                          </tbody>
+                        </table>`;
+                          _this.editorBarData.content = _editorBarDataContent;
                         } else {
-                          _this.editorBarData.content = _textData;
+                          _this.editorBarData.content = _res.data;
                         }
-
-                        // _this.transcriptionData.content = _res.data;
                         _this.editorBarData.url = "";
                         _this.saveEditorBar();
                       });
@@ -2092,8 +2083,7 @@ ${JSON.stringify(_list)}
 
         if (this.editorBarData.type == 0) {
           let _data = this.editorBarData.content;
-          let _div = document.createElement("div");
-          _div.innerHTML = _data;
+          let _div = document.createRange().createContextualFragment(_data);
           let _tableRows = _div.querySelectorAll(`table tbody tr`);
           _tableRows.forEach((i, index) => {
             while (i.cells.length > 7) {
@@ -2318,12 +2308,20 @@ ${JSON.stringify(_list)}
         this.$message.error(e);
       }
     },
-    async generateActionTypesMap() {
+    async startContinuousJobs(type /* role, actionType */) {
       const key = "default";
-      const appToken = "app-zOMxBqyEKoJSvW10e5SS0kgj";
-      // the default options
-      const options = OPTIONS_GROUP[key];
-      const attention = ATTENTION_GROUP[key];
+      const { appToken, options, attention } = {
+        role: {
+          appToken: "app-TonzLPv7rPG0EtnFKszOWjwt",
+          options: ROLE_OPTIONS_GROUP[key],
+          attention: undefined,
+        },
+        actionType: {
+          appToken: "app-zOMxBqyEKoJSvW10e5SS0kgj",
+          options: OPTIONS_GROUP[key],
+          attention: ATTENTION_GROUP[key],
+        },
+      }[type];
       const config = {
         headers: {
           Authorization: `Bearer ${appToken}`,
@@ -2357,11 +2355,12 @@ ${JSON.stringify(_list)}
         },
       };
       // large chunk size will cause token limit and slower
-      const chunkSize = 30;
+      const chunkSize = 10;
       this.actionTypesMap.jsonData[key] = Array.from({ length: tableRows.length }).fill(
         ""
       );
 
+      const jobsResult = [];
       const jobs = _.chunk(tableRows, chunkSize).map((rows, index) => {
         return async (pauseSignal) => {
           this.jobContext.progress.current = index * chunkSize;
@@ -2375,7 +2374,10 @@ ${JSON.stringify(_list)}
               inputs: {
                 // PERF better to just include `role` and `content` to minimize token cost
                 rows: JSON.stringify(
-                  rows.map((r) => [r.cells[3].textContent, r.cells[5].textContent])
+                  rows.map((r) => ({
+                    content: r.cells[3].textContent,
+                    role: r.cells[5].textContent,
+                  }))
                 ),
                 options: options.join(","),
                 attention,
@@ -2394,15 +2396,16 @@ ${JSON.stringify(_list)}
             throw err;
           }
           const chunkResult = _.get(res, ["data", "outputs", "result"], []);
-          this.actionTypesMap.jsonData[key].splice(
+          jobsResult.splice(
             index * chunkSize,
             rows.length,
-            ...chunkResult
+            ...Object.assign(new Array(rows.length), chunkResult.slice(0, rows.length))
           );
-          this.changeEditorBar({
-            transcriptionData: this.transcriptionData.content,
-            editorBarData: this.editorBarData,
-          });
+          // PERF dom更新太卡了
+          // this.changeEditorBar({
+          //   transcriptionData: this.transcriptionData.content,
+          //   editorBarData: this.editorBarData,
+          // });
         };
       });
       while (!this.jobContext.ctrl.signal.aborted && jobs.length > 0) {
@@ -2442,6 +2445,29 @@ ${JSON.stringify(_list)}
           }
         }
       }
+      if (type === "actionType") {
+        this.actionTypesMap.jsonData[key] = jobsResult;
+      } else if (type === "role") {
+        const _div = document.createRange().createContextualFragment(this.editorBarData.content);
+        const _table = _div.querySelector('table')
+        const _rows = _table.querySelectorAll(`tbody tr`);
+        const _actionTypes = []
+        _rows.forEach((i, index) => {
+          while (i.cells.length > 7) {
+            i.removeChild(i.lastElementChild);
+          }
+          if (index == 0) return;
+          const actionTypeCell = i.cells[6] && i.removeChild(i.cells[6]);
+          i.cells[5].textContent = jobsResult[index - 1]
+          _actionTypes.push(_.get(actionTypeCell, "textContent", ""));
+        });
+        this.actionTypesMap.jsonData[key] = _actionTypes;
+        this.editorBarData.content = _table.outerHTML;
+      }
+      this.changeEditorBar({
+        transcriptionData: this.transcriptionData.content,
+        editorBarData: this.editorBarData,
+      });
       this.jobContext = null;
     },
   },

+ 5 - 1
src/components/pages/classroomObservation/components/mdView.vue

@@ -31,7 +31,7 @@ const getFile = (url) => {
 		}
 		var s3 = new window.AWS.S3({ params: { Bucket: "ccrb" } });
 		let name = decodeURIComponent(
-			_url2.split("https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/")[1].replace(/\+/g, ' ')
+			_url2.split("https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/")[1]
 		);
 		var params = {
 			Bucket: "ccrb",
@@ -118,4 +118,8 @@ export default {
 .mdView>>>ol{
 	margin-left: 20px;
 }
+
+.mdView>>>ul{
+	margin-left: 20px;
+}
 </style>

Fichier diff supprimé car celui-ci est trop grand
+ 1222 - 2045
src/components/pages/classroomObservation/components/messageArea.vue


Fichier diff supprimé car celui-ci est trop grand
+ 706 - 665
src/components/pages/classroomObservation/index.vue


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

@@ -228,12 +228,19 @@
               />
             </div> -->
           </div>
-          <div class="zyBoxC">
+          <div class="zyBoxC" ref="reportPdf">
             <div class="courseTitle" v-if="allWorks.course">
               <div class="txName">
                 <div class="tx"><img :src="tx" alt="" /></div>
                 <div>{{ allWorks.sName }}</div>
                 <div>{{ allWorks.course }}</div>
+                <el-button
+                  type="primary"
+                  size="mini"
+                  style="margin-left: 15px;"
+                  @click="getPdf"
+                  >导出pdf</el-button
+                >
               </div>
 
               <div class="topButton" v-if="tableData.length > 1">
@@ -1582,6 +1589,8 @@ import StudentData from "./studentData";
 import pdf from "./vpdf";
 import htmlDocx from "html-docx-js/dist/html-docx";
 import saveAs from "file-saver";
+import html2canvas from "html2canvas";
+import jspdf from "jspdf";
 export default {
   components: {
     StudentData,
@@ -1851,6 +1860,49 @@ export default {
     });
   },
   methods: {
+    getPdf(){
+      let domHeight = this.$refs.reportPdf.offsetHeight;
+      console.log('this.$refs.reportPdf',this.$refs.reportPdf.offsetHeight);
+      let maxHeight = 64257;
+      html2canvas(this.$refs.reportPdf, {
+        useCORS: true, // 如果截图的内容里有图片,可能会有跨域的情况,加上这个参数,解决文件跨域问题
+        scale: (maxHeight/domHeight) > 1 ? 1: (maxHeight/domHeight)
+    }).then((canvas) => {
+        const contentWidth = canvas.width;
+        const contentHeight = canvas.height;
+
+        let pageHeight = contentWidth / 592.28 * 841.89;
+        let leftHeight = contentHeight;
+
+        //页面偏移
+        var position = 0;
+        //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
+        var imgWidth = 595.28; // A4 宽度
+        var imgHeight = 592.28/contentWidth * contentHeight; // A4总高度
+        var pageData = canvas.toDataURL('image/jpeg', 1.0);
+
+        var pdf = new jspdf('', 'pt', 'a4');
+
+        //有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89)
+        //当内容未超过pdf一页显示的范围,无需分页
+        // if (leftHeight < pageHeight) {
+            pdf.addImage(pageData, 'JPEG', 10, 0, imgWidth-20, imgHeight );
+        // } else {
+        //     while(leftHeight > 0) {
+        //         pdf.addImage(pageData, 'JPEG', 10, position, imgWidth-20, imgHeight)
+        //         leftHeight -= pageHeight;
+        //         position -= 841.89;
+        //         //避免添加空白页
+        //         if(leftHeight > 0) {
+        //             pdf.addPage();
+        //         }
+        //     }
+        // }
+        pdf.save('js.pdf')
+
+    })
+
+    },
 		changeClass(){//切换班级
 			this.searchWork2();
 			this.getCourseDetail()
@@ -3994,7 +4046,7 @@ export default {
   border-radius: 5px;
   width: 90%;
   box-shadow: 2px 2px 5px #909090;
-  overflow: auto;
+  /* overflow: auto; */
 }
 
 .sd_score .score_box {
@@ -4201,9 +4253,9 @@ export default {
   background: #ededed;
   display: flex;
   align-items: flex-start;
-  justify-content: center;
+  /* justify-content: center; */
   flex-direction: column;
-  height: calc(100% - 50px);
+  min-height: calc(100% - 50px);
 }
 
 .zyBox {
@@ -4550,7 +4602,7 @@ export default {
   flex-direction: row;
   flex-wrap: nowrap;
   align-items: flex-start;
-  height: 253px;
+  /* height: 253px; */
 }
 
 .left_top {
@@ -4571,12 +4623,12 @@ export default {
   align-items: flex-start;
   width: 100%;
   height: calc(100% - 60px);
-  overflow: auto;
+  /* overflow: auto; */
 }
 
 .right_score {
   min-width: 370px;
-  height: 351px;
+  min-height: 351px;
   margin-left: 10px;
 }
 
@@ -4765,9 +4817,9 @@ export default {
   display: flex;
   flex-direction: row;
   flex-wrap: nowrap;
-  align-items: flex-start;
+  /* align-items: flex-start; */
   width: 100%;
-  height: 351px;
+  /* height: 351px; */
   margin-bottom: 20px;
 }
 
@@ -4778,7 +4830,7 @@ export default {
   align-items: center;
   width: 100%;
   flex-wrap: nowrap;
-  overflow: auto;
+  /* overflow: auto; */
   /* height: 500px; */
   height: 100%;
 }
@@ -4893,9 +4945,9 @@ export default {
 }
 .radioBox {
   display: flex;
-  flex-direction: row;
-  flex-wrap: nowrap;
-  align-items: center;
+  flex-direction: column;
+  flex-wrap: wrap;
+  /* align-items: center; */
 }
 .radioBox > div {
   margin: 10px 0 0 10px;
@@ -4954,7 +5006,7 @@ export default {
 }
 .contentAuto {
   width: 100%;
-  height: 253px;
+  /* height: 253px; */
   overflow: auto;
 }
 .evalCss {

+ 24 - 2
src/components/pages/course.vue

@@ -461,11 +461,32 @@ export default {
       pTypeCheckName: [],
       btnDisplay: false,
       dialogVisibleTemplate: false,
-      orgArray:['1973f6c7-1561-11ee-91d8-005056b86db5','777559d2-7239-11ee-b98c-005056b86db5','884c5665-a453-46f3-b7b6-01d575290aa9','0fec3a8a-ad04-11ed-b13d-005056b86db5'],
-      oidArray:['f297fbdc-f0a0-11ee-b534-005056b86db5','45facc0a-1211-11ec-80ad-005056b86db5']
+      orgArray:[],
+      oidArray:[]
     };
   },
   methods: {
+    getAIJ(){
+      this.ajax
+        .get(this.$store.state.api + "getAIJ", "")
+        .then((res) => {
+          let oid = res.data[0];
+          let org = res.data[1];
+          let oidArray = []
+          let orgArray = []
+          for(var i = 0; i < oid.length; i++){
+            oidArray.push(oid[i].oid)
+          }
+          for(var i = 0; i < org.length; i++){
+            orgArray.push(org[i].oid)
+          }
+          this.orgArray = orgArray
+          this.oidArray = oidArray
+        })
+        .catch((err) => {
+          console.error(err);
+        });
+    },
 		// 分析按钮
 		shareCourse(courseId){
 			this.$refs.shareDialogRef.open(courseId)
@@ -1345,6 +1366,7 @@ export default {
     if (this.role == "1") {
       this.groupA = "4";
     }
+    this.getAIJ();
     this.page = 1;
     // this.selectType();
     this.selectAllType();

+ 5 - 3
src/components/pages/dataBoardNew/course/index.vue

@@ -63,7 +63,7 @@
             style="cursor: pointer; padding: 0 0 5px 0">
             作业数量
           </div>
-          <el-select v-if="skType == 0" v-model="lType" @change="typeChange1" class="selectBox" style="margin-left: auto">
+          <el-select v-if="skType == 0 && !oType" v-model="lType" @change="typeChange1" class="selectBox" style="margin-left: auto">
             <!-- <el-option label="全部" value="all"></el-option> -->
             <el-option label="年级" value="grade"></el-option>
             <el-option label="主题" value="theme"></el-option>
@@ -150,8 +150,8 @@
             </div>
           </div> -->
           <div class="dataBoard_check_box" v-if="skType == 0">
-            <div class="icon zz_icon2" :class="{ active: !oType }" @click="oType = false"><span>柱状图</span></div>
-            <div class="icon rl_icon" :class="{ active: oType }" @click="oType = true"><span>热力图</span></div>
+            <div class="icon zz_icon2" :class="{ active: !oType }" @click="oType = false,lType = 'grade',typeChange1()"><span>柱状图</span></div>
+            <div class="icon rl_icon" :class="{ active: oType }" @click="oType = true,lType = 'all',typeChange1()"><span>热力图</span></div>
           </div>
           <div class="dataBoard_check_box" v-if="skType == 1">
             <div class="icon zz_icon2" :class="{ active: oType2 }" @click="oType2 = true"><span>柱状图</span></div>
@@ -1332,6 +1332,8 @@ export default {
               } else if (courseList[i].course_teacher.split(",").length > 7) {
                 sevenPerson++;
               }
+            }else { 
+              twoPerson++;
             }
           }
 

+ 3 - 3
src/components/pages/dataBoardNew/project/chartList/bar/teacherStudent.vue

@@ -72,13 +72,13 @@ export default {
                     shadow: false
                 },
                 series: [{
-                    name: '教师负责',
+                    name: '教师协同',
                     data: []
                 }, {
-                    name: '学生负责',
+                    name: '学生主导',
                     data: []
                 }, {
-                    name: '师生负责',
+                    name: '师生主导',
                     data: []
                 }]
             }

+ 4 - 2
src/components/pages/dataBoardNew/project/index.vue

@@ -817,11 +817,13 @@ export default {
               _courseArray[i].subject.push({
                 name: _subject[j].name,
                 id: _subject[j].id,
-                course: 0
+                course: 0,
+                courseArray: []
               })
               for (var z = 0; z < _course.length; z++) {
-                if (_course[z].typeid.indexOf(_subject[j].id) != -1 && _courseArray[i].courseid.indexOf(_course[z].courseid) !== -1) {
+                if (_course[z].typeid.indexOf(_subject[j].id) != -1 && _courseArray[i].courseid.indexOf(_course[z].courseid) !== -1 && _courseArray[i].subject[j].courseArray.indexOf(_course[z].courseid) == -1) {
                   _courseArray[i].subject[j].course++
+                  _courseArray[i].subject[j].courseArray.push(_course[z].courseid)
                 }
               }
             }

+ 25 - 2
src/components/pages/dataBoardNew/school/courseNum/index.vue

@@ -73,12 +73,14 @@ export default {
               enabled: true,  //显示数量提示
               color: '#000000',
               formatter : function() {
-                var employee = this.point.series.chart.series[0].yData[this.point.index];
-                var optimizedEmployee = this.point.series.chart.series[1].yData[this.point.index];
+                var employee = this.point.series.chart.series[0].yData[this.point.index]; //上月
+                var optimizedEmployee = this.point.series.chart.series[1].yData[this.point.index]; //本月
+                var totalCourse = 0
                 var employeePercentage = 0;
                 if(optimizedEmployee > employee){
                   employeePercentage = ((optimizedEmployee - employee) / optimizedEmployee) * 100
                 }
+                console.log('weekCourse2',this.weekCourse2);
                 if (this.series.name === '本月课程总数') {
                   return  employeePercentage.toFixed(1) + '%';
                 } else {
@@ -92,12 +94,14 @@ export default {
           name: '上月课程总数',
           color: 'rgba(165,170,217,1)',
           data: [],
+          total: [],
           pointPadding: 0.3, // 通过 pointPadding 和 pointPlacement 控制柱子位置
           // pointPlacement: -0.2
         }, {
           name: '本月课程总数',
           color: 'rgba(126,86,134,.9)',
           data: [],
+          total: [],
           pointPadding: 0.4,
           // pointPlacement: -0.2
         },
@@ -142,6 +146,25 @@ export default {
         this.option.xAxis.categories.push(array[i].name)
         this.option.series[0].data.push(array[i].lastCourse)
         this.option.series[1].data.push(array[i].toCourse)
+        this.option.series[0].total.push(array[i].totalCourse)
+        this.option.series[1].total.push(array[i].totalCourse)
+      }
+
+      let _this = this
+      this.option.plotOptions.column.dataLabels.formatter = function() {
+        var employee = this.point.series.chart.series[0].yData[this.point.index]; //上月
+        var optimizedEmployee = this.point.series.chart.series[1].yData[this.point.index]; //本月
+        var totalCourse = 0
+        var employeePercentage = 0;
+        if(optimizedEmployee > employee){
+          employeePercentage = ((optimizedEmployee - employee) / optimizedEmployee) * 100
+        }
+        console.log('weekCourse2',_this.weekCourse2);
+        if (this.series.name === '本月课程总数') {
+          return  employeePercentage.toFixed(1) + '%';
+        } else {
+          return '';
+        }
       }
     }
   },

+ 1 - 0
src/components/pages/dataBoardNew/school/index.vue

@@ -925,6 +925,7 @@ export default {
               id: _grade[i].id,
               lastCourse: 0,
               toCourse: 0,
+              totalCourse: 0,
             });
             for (var z = 0; z < weekCourse.length; z++) {
               if (weekCourse[z].typeid == _grade[i].id) {

+ 4 - 4
src/components/pages/dataBoardNew/student/index.vue

@@ -328,7 +328,7 @@
                   ></el-progress>
                 </div>
               </div>
-              <div class="depth">
+              <!-- <div class="depth">
                 <span>协同合作</span>
                 <div>
                   <el-progress
@@ -340,7 +340,7 @@
                     color="#106BFF"
                   ></el-progress>
                 </div>
-              </div>
+              </div> -->
               <div class="depth">
                 <span>互动交流</span>
                 <div>
@@ -440,7 +440,7 @@
                   ></el-progress>
                 </div>
               </div>
-              <div class="depth">
+              <!-- <div class="depth">
                 <span>互动交流</span>
                 <div>
                   <el-progress
@@ -452,7 +452,7 @@
                     color="#106BFF"
                   ></el-progress>
                 </div>
-              </div>
+              </div> -->
             </div>
           </div>
         </div>

+ 1 - 1
src/components/pages/dataBoardNew/teacher/index.vue

@@ -533,7 +533,7 @@
     <div class="right">
       <div class="top" style="border-radius: 5px">
         <div class="titleBox" style="justify-content: space-between">
-          <div class="title">年级占比</div>
+          <div class="title">整体分布</div>
           <el-select v-model="cType4" @change="typeChange" class="selectBox">
             <!-- <el-option label="全部" value=""></el-option> -->
             <el-option label="年级" value="grade"></el-option>

+ 7 - 3
src/components/pages/test/shareBox/index.vue

@@ -74,10 +74,12 @@ export default {
             type: Object
         },
         TeachingValue: {
-            type: String
+            type: String,
+            default: ''
         },
         TeachName: {
-            type: Array
+            type: Array,
+            default: ''
         }
     },
     data() {
@@ -95,7 +97,8 @@ export default {
             if (this.TeachingValue == '') {
                 return this.testJson.juriP ? this.testJson.juriP : '所有人'
             }else{
-                return this.TeachName ? this.TeachName[0].name :'所有人'
+                // return this.testJson.juriP ? this.testJson.juriP : '所有人'
+                return this.TeachName ? this.TeachName[0].name : this.testJson.juriP ? this.testJson.juriP : '所有人'
             }
         }
     },
@@ -205,6 +208,7 @@ export default {
     },
     mounted(){
         console.log(top.origin);
+        console.log(this.testJson);
         // this.origin = top.origin
     },
 };

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