提交 1d99e640 authored 作者: 王鹏飞's avatar 王鹏飞

chore: update

上级 a9ec1dc6
...@@ -10,34 +10,36 @@ ...@@ -10,34 +10,36 @@
"dependencies": { "dependencies": {
"@element-plus/icons-vue": "^2.0.6", "@element-plus/icons-vue": "^2.0.6",
"@tinymce/tinymce-vue": "^5.0.0", "@tinymce/tinymce-vue": "^5.0.0",
"@vueuse/core": "^8.9.3", "@vueuse/core": "^8.9.4",
"axios": "^0.27.2", "axios": "^0.27.2",
"blueimp-md5": "^2.19.0", "blueimp-md5": "^2.19.0",
"element-plus": "^2.2.9", "element-plus": "^2.2.10",
"file-saver": "^2.0.5",
"pinia": "^2.0.16", "pinia": "^2.0.16",
"qs": "^6.11.0", "qs": "^6.11.0",
"video.js": "^7.19.2", "video.js": "^7.20.1",
"vue": "^3.2.37", "vue": "^3.2.37",
"vue-router": "^4.1.2" "vue-router": "^4.1.2"
}, },
"devDependencies": { "devDependencies": {
"@rushstack/eslint-patch": "^1.1.0", "@rushstack/eslint-patch": "^1.1.0",
"@types/blueimp-md5": "^2.18.0", "@types/blueimp-md5": "^2.18.0",
"@types/file-saver": "^2.0.5",
"@types/node": "^16.11.43", "@types/node": "^16.11.43",
"@types/qs": "^6.9.7", "@types/qs": "^6.9.7",
"@types/video.js": "^7.3.42", "@types/video.js": "^7.3.42",
"@vitejs/plugin-vue": "^3.0.0", "@vitejs/plugin-vue": "^3.0.1",
"@vue/eslint-config-typescript": "^11.0.0", "@vue/eslint-config-typescript": "^11.0.0",
"@vue/tsconfig": "^0.1.3", "@vue/tsconfig": "^0.1.3",
"ali-oss": "^6.17.1", "ali-oss": "^6.17.1",
"eslint": "^8.5.0", "eslint": "^8.5.0",
"eslint-plugin-vue": "^9.2.0", "eslint-plugin-vue": "^9.2.0",
"npm-run-all": "^4.1.5", "npm-run-all": "^4.1.5",
"sass": "^1.53.0", "sass": "^1.54.0",
"typescript": "~4.7.4", "typescript": "~4.7.4",
"unplugin-auto-import": "^0.9.3", "unplugin-auto-import": "^0.10.1",
"vite": "^3.0.2", "vite": "^3.0.2",
"vue-tsc": "^0.38.5" "vue-tsc": "^0.39.0"
} }
}, },
"node_modules/@antfu/utils": { "node_modules/@antfu/utils": {
...@@ -230,6 +232,12 @@ ...@@ -230,6 +232,12 @@
"integrity": "sha512-f4A+++lGZGJvVSgeyMkqA7BEf2BVQli6F+qEykKb49c5ieWQBkfpn6CP5c1IZr2Yi2Ofl6Fj+v0e1fN18Z8Cnw==", "integrity": "sha512-f4A+++lGZGJvVSgeyMkqA7BEf2BVQli6F+qEykKb49c5ieWQBkfpn6CP5c1IZr2Yi2Ofl6Fj+v0e1fN18Z8Cnw==",
"dev": true "dev": true
}, },
"node_modules/@types/file-saver": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.5.tgz",
"integrity": "sha512-zv9kNf3keYegP5oThGLaPk8E081DFDuwfqjtiTzm6PoxChdJ1raSuADf2YGCVIyrSynLrgc8JWv296s7Q7pQSQ==",
"dev": true
},
"node_modules/@types/json-schema": { "node_modules/@types/json-schema": {
"version": "7.0.11", "version": "7.0.11",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
...@@ -503,12 +511,12 @@ ...@@ -503,12 +511,12 @@
} }
}, },
"node_modules/@vitejs/plugin-vue": { "node_modules/@vitejs/plugin-vue": {
"version": "3.0.0", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-3.0.0.tgz", "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-3.0.1.tgz",
"integrity": "sha512-yWP34ArFh/jAeNUDkkLz/kVRLjf5ppJiq4L36f64Cp6dIrMQeYZGDP9xxdemlXfZR9ylN9JgHUl3GzfqOtgYDg==", "integrity": "sha512-Ll9JgxG7ONIz/XZv3dssfoMUDu9qAnlJ+km+pBA0teYSXzwPCIzS/e1bmwNYl5dcQGs677D21amgfYAnzMl17A==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": ">=14.18.0" "node": "^14.18.0 || >=16.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"vite": "^3.0.0", "vite": "^3.0.0",
...@@ -516,46 +524,66 @@ ...@@ -516,46 +524,66 @@
} }
}, },
"node_modules/@volar/code-gen": { "node_modules/@volar/code-gen": {
"version": "0.38.5", "version": "0.39.0",
"resolved": "https://registry.npmjs.org/@volar/code-gen/-/code-gen-0.38.5.tgz", "resolved": "https://registry.npmjs.org/@volar/code-gen/-/code-gen-0.39.0.tgz",
"integrity": "sha512-GRGhPKoNtRwZyn9M0b2buobeMR1Aj9zxZI0osanLG9vB9YCnJov1myxKU8EJV5NobpyspLIv1X6/BEHLZNsKig==", "integrity": "sha512-56ycx16FoeDrjVuQ2RKIRmk3paFuIG4eIZLMpxypGKOlhFxS9/nB2eumln2e1jVlnAWeTcFw5V1/eYpDTazHLA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@volar/source-map": "0.38.5" "@volar/source-map": "0.39.0"
} }
}, },
"node_modules/@volar/source-map": { "node_modules/@volar/source-map": {
"version": "0.38.5", "version": "0.39.0",
"resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-0.38.5.tgz", "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-0.39.0.tgz",
"integrity": "sha512-TyTLkOtAW/7qnl4Gabt4W4vcKPBPCBdaPLKwkMglKcaX70lPH2CIwZcPMJo6PAilbUVXcuX86xfgdncWDKKaZQ==", "integrity": "sha512-sV/eDeOjBwDJxrxwP/ifABvlOUzjpUpCbtbAhoc9hD9SrHlaDGrKtnmXdqgH5DNHIfm5aUpY0xojRvFFOubpuw==",
"dev": true "dev": true
}, },
"node_modules/@volar/typescript-faster": {
"version": "0.39.0",
"resolved": "https://registry.npmjs.org/@volar/typescript-faster/-/typescript-faster-0.39.0.tgz",
"integrity": "sha512-+NNY456ABrvXD2VsJGsH4BGQTWkSyWcUfdbcREqXD+g2GotW7UtkFMtNgu1ASXBhKl7oRdPuRk5wK9Edw2tW9A==",
"dev": true,
"dependencies": {
"semver": "^7.3.7"
}
},
"node_modules/@volar/vue-code-gen": { "node_modules/@volar/vue-code-gen": {
"version": "0.38.5", "version": "0.39.0",
"resolved": "https://registry.npmjs.org/@volar/vue-code-gen/-/vue-code-gen-0.38.5.tgz", "resolved": "https://registry.npmjs.org/@volar/vue-code-gen/-/vue-code-gen-0.39.0.tgz",
"integrity": "sha512-4t2bX2bCmmlyYwPLqfH3AJXj9Km79uRmCy81recc8LB8ZT2Z9hOFNBAnlGNcCeZAtVWtmHVV7sXJtQAJQxkWeg==", "integrity": "sha512-0KqocSt5o4TtmUngq+8tmWRfifgyE9eDzb4/1Ih7bl52T1RDdOOKkZ9GzP3zBic3N7lJHiOaLdGMXTK+IzAe7g==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@volar/code-gen": "0.38.5", "@volar/code-gen": "0.39.0",
"@volar/source-map": "0.38.5", "@volar/source-map": "0.39.0",
"@vue/compiler-core": "^3.2.37", "@vue/compiler-core": "^3.2.37",
"@vue/compiler-dom": "^3.2.37", "@vue/compiler-dom": "^3.2.37",
"@vue/shared": "^3.2.37" "@vue/shared": "^3.2.37"
} }
}, },
"node_modules/@volar/vue-typescript": { "node_modules/@volar/vue-language-core": {
"version": "0.38.5", "version": "0.39.0",
"resolved": "https://registry.npmjs.org/@volar/vue-typescript/-/vue-typescript-0.38.5.tgz", "resolved": "https://registry.npmjs.org/@volar/vue-language-core/-/vue-language-core-0.39.0.tgz",
"integrity": "sha512-Gobtg5gxR3bf/l1h300OWCWkvDQnOINgnxkDYiF8qdTBalW6qGsgGmq0uLBBDLaoahrfM7rqNd5QfJwGBgFXZg==", "integrity": "sha512-MnXnrIB7PtggLfKcLtg9I5X1i5FMCoTC+jYtR/j5RZU97boPbFi0lYLysCGPUXdP3w5taIXGPgfT8VnbLEkndQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@volar/code-gen": "0.38.5", "@volar/code-gen": "0.39.0",
"@volar/source-map": "0.38.5", "@volar/source-map": "0.39.0",
"@volar/vue-code-gen": "0.38.5", "@volar/vue-code-gen": "0.39.0",
"@vue/compiler-sfc": "^3.2.37", "@vue/compiler-sfc": "^3.2.37",
"@vue/reactivity": "^3.2.37" "@vue/reactivity": "^3.2.37"
} }
}, },
"node_modules/@volar/vue-typescript": {
"version": "0.39.0",
"resolved": "https://registry.npmjs.org/@volar/vue-typescript/-/vue-typescript-0.39.0.tgz",
"integrity": "sha512-RV+oHtkuta/kwskg02Ykp9qvDXpgDNF1EVgeGx42v1b65qMyAd5FgxOZxYYCzVV4DzVa6gH+C5YhuQXo4oEdog==",
"dev": true,
"dependencies": {
"@volar/code-gen": "0.39.0",
"@volar/typescript-faster": "0.39.0",
"@volar/vue-language-core": "0.39.0"
}
},
"node_modules/@vue/compiler-core": { "node_modules/@vue/compiler-core": {
"version": "3.2.37", "version": "3.2.37",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.37.tgz", "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.37.tgz",
...@@ -702,13 +730,13 @@ ...@@ -702,13 +730,13 @@
} }
}, },
"node_modules/@vueuse/core": { "node_modules/@vueuse/core": {
"version": "8.9.3", "version": "8.9.4",
"resolved": "https://registry.npmjs.org/@vueuse/core/-/core-8.9.3.tgz", "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-8.9.4.tgz",
"integrity": "sha512-q2pr3N7FPG7IBBhEXTYOJU+38VwKMLP5IfD33byzBV4Th7f1JHT4qPKvJrvr17knAefPRzNqgt9et+xFqaRlPQ==", "integrity": "sha512-B/Mdj9TK1peFyWaPof+Zf/mP9XuGAngaJZBwPaXBvU3aCTZlx3ltlrFFFyMV4iGBwsjSCeUCgZrtkEj9dS2Y3Q==",
"dependencies": { "dependencies": {
"@types/web-bluetooth": "^0.0.14", "@types/web-bluetooth": "^0.0.14",
"@vueuse/metadata": "8.9.3", "@vueuse/metadata": "8.9.4",
"@vueuse/shared": "8.9.3", "@vueuse/shared": "8.9.4",
"vue-demi": "*" "vue-demi": "*"
}, },
"funding": { "funding": {
...@@ -728,9 +756,9 @@ ...@@ -728,9 +756,9 @@
} }
}, },
"node_modules/@vueuse/core/node_modules/@vueuse/shared": { "node_modules/@vueuse/core/node_modules/@vueuse/shared": {
"version": "8.9.3", "version": "8.9.4",
"resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-8.9.3.tgz", "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-8.9.4.tgz",
"integrity": "sha512-foorYQAU3CGknAO1w9No/rpGBJmb7L74MPltnZAYxeBRfhsajjJYYgja+D5IT2vT+/a0NciISaVp3fDwMN1ocA==", "integrity": "sha512-wt+T30c4K6dGRMVqPddexEVLa28YwxW5OFIPmzUHICjphfAuBFTTdDoyqREZNDOFJZ44ARH1WWQNCUK8koJ+Ag==",
"dependencies": { "dependencies": {
"vue-demi": "*" "vue-demi": "*"
}, },
...@@ -751,9 +779,9 @@ ...@@ -751,9 +779,9 @@
} }
}, },
"node_modules/@vueuse/core/node_modules/vue-demi": { "node_modules/@vueuse/core/node_modules/vue-demi": {
"version": "0.13.4", "version": "0.13.5",
"resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.4.tgz", "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.5.tgz",
"integrity": "sha512-KP4lq9uSz0KZbaqCllRhnxMV3mYRsRWJfdsAhZyt5bV5O1RTpoeDptBRV9NOa/JgOpfaA9ane88VF7OjWNK/DA==", "integrity": "sha512-tO3K2bML3AwiHmVHeKCq6HLef2st4zBXIV5aEkoJl6HZ+gJWxWv2O8wLH8qrA3SX3lDoTDHNghLX1xZg83MXvw==",
"hasInstallScript": true, "hasInstallScript": true,
"bin": { "bin": {
"vue-demi-fix": "bin/vue-demi-fix.js", "vue-demi-fix": "bin/vue-demi-fix.js",
...@@ -776,9 +804,9 @@ ...@@ -776,9 +804,9 @@
} }
}, },
"node_modules/@vueuse/metadata": { "node_modules/@vueuse/metadata": {
"version": "8.9.3", "version": "8.9.4",
"resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-8.9.3.tgz", "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-8.9.4.tgz",
"integrity": "sha512-57gZZKtWAmcJaUBmciCohvmumVLz4+FnoVnWj7U5BWs5PC2/7gU9Z0/i1i9leDNeboAauFzAq7z1GjS8eYnT+w==", "integrity": "sha512-IwSfzH80bnJMzqhaapqJl9JRIiyQU0zsRGEgnxN6jhq7992cPUJIRfV+JHRIZXjYqbwt07E1gTEp0R0zPJ1aqw==",
"funding": { "funding": {
"url": "https://github.com/sponsors/antfu" "url": "https://github.com/sponsors/antfu"
} }
...@@ -1434,9 +1462,9 @@ ...@@ -1434,9 +1462,9 @@
"dev": true "dev": true
}, },
"node_modules/element-plus": { "node_modules/element-plus": {
"version": "2.2.9", "version": "2.2.10",
"resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.2.9.tgz", "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.2.10.tgz",
"integrity": "sha512-jYbL0JkCdv95rkT6trZJjCAizLPySa0qcd2cgq+57SKQnCZAcNDDq4GbTuFRnNavdoeCJnuM3HIficTIUpsMOQ==", "integrity": "sha512-hJ+LlbRN3POu4Idl1LXB+SHSWdi+wwmdsoDXdQT2ynGuwzZsMYiusOooYXyEsPlrizeLibdnNGNDx4TIjXQvUg==",
"dependencies": { "dependencies": {
"@ctrl/tinycolor": "^3.4.1", "@ctrl/tinycolor": "^3.4.1",
"@element-plus/icons-vue": "^2.0.6", "@element-plus/icons-vue": "^2.0.6",
...@@ -2299,6 +2327,11 @@ ...@@ -2299,6 +2327,11 @@
"node": "^10.12.0 || >=12.0.0" "node": "^10.12.0 || >=12.0.0"
} }
}, },
"node_modules/file-saver": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
"integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
},
"node_modules/file-uri-to-path": { "node_modules/file-uri-to-path": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz",
...@@ -3392,12 +3425,12 @@ ...@@ -3392,12 +3425,12 @@
} }
}, },
"node_modules/mlly": { "node_modules/mlly": {
"version": "0.5.4", "version": "0.5.5",
"resolved": "https://registry.npmjs.org/mlly/-/mlly-0.5.4.tgz", "resolved": "https://registry.npmjs.org/mlly/-/mlly-0.5.5.tgz",
"integrity": "sha512-gFlsLWCjVwu/LM/ZfYUkmnbBoz7eyBIMUwVQYDqhd8IvtNFDeZ95uwAyxHE2Xx7tQwePQaCo4fECZ9MWFEUTgQ==", "integrity": "sha512-2R4JT/SxRDPexomw4rmHYY/gWAGmL9Kkq1OR76Ua6w+P340a1aBDTWzKo2kAlxzrG82OdXs5VB9Lmcmyit0Obg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"pathe": "^0.3.1", "pathe": "^0.3.2",
"pkg-types": "^0.3.3" "pkg-types": "^0.3.3"
} }
}, },
...@@ -4414,9 +4447,9 @@ ...@@ -4414,9 +4447,9 @@
"dev": true "dev": true
}, },
"node_modules/sass": { "node_modules/sass": {
"version": "1.53.0", "version": "1.54.0",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.53.0.tgz", "resolved": "https://registry.npmjs.org/sass/-/sass-1.54.0.tgz",
"integrity": "sha512-zb/oMirbKhUgRQ0/GFz8TSAwRq2IlR29vOUJZOx0l8sV+CkHUfHa4u5nqrG+1VceZp7Jfj59SVW9ogdhTvJDcQ==", "integrity": "sha512-C4zp79GCXZfK0yoHZg+GxF818/aclhp9F48XBu/+bm9vXEVAYov9iU3FBVRMq3Hx3OA4jfKL+p2K9180mEh0xQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"chokidar": ">=3.0.0 <4.0.0", "chokidar": ">=3.0.0 <4.0.0",
...@@ -4917,9 +4950,9 @@ ...@@ -4917,9 +4950,9 @@
} }
}, },
"node_modules/unimport": { "node_modules/unimport": {
"version": "0.4.5", "version": "0.6.3",
"resolved": "https://registry.npmjs.org/unimport/-/unimport-0.4.5.tgz", "resolved": "https://registry.npmjs.org/unimport/-/unimport-0.6.3.tgz",
"integrity": "sha512-DnmiSt/HQIfhdcxOy4CGqwZDBh3WHg33euX1ge4X8hvquKBmw2PFvhoAJaBKxscOz0oYosoPoPT4tkDZWHhV0Q==", "integrity": "sha512-+DVHqCoOoJcmYRLUrKbKDs/Iq/is6m0K7rTdFJAV7/MfyvWCKeSuSOrLeONgLBd6yC6iZFEzdc8di7S27PQyoA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@rollup/pluginutils": "^4.2.1", "@rollup/pluginutils": "^4.2.1",
...@@ -4927,7 +4960,7 @@ ...@@ -4927,7 +4960,7 @@
"fast-glob": "^3.2.11", "fast-glob": "^3.2.11",
"local-pkg": "^0.4.2", "local-pkg": "^0.4.2",
"magic-string": "^0.26.2", "magic-string": "^0.26.2",
"mlly": "^0.5.4", "mlly": "^0.5.5",
"pathe": "^0.3.2", "pathe": "^0.3.2",
"scule": "^0.2.1", "scule": "^0.2.1",
"strip-literal": "^0.4.0", "strip-literal": "^0.4.0",
...@@ -5009,16 +5042,16 @@ ...@@ -5009,16 +5042,16 @@
} }
}, },
"node_modules/unplugin-auto-import": { "node_modules/unplugin-auto-import": {
"version": "0.9.3", "version": "0.10.1",
"resolved": "https://registry.npmjs.org/unplugin-auto-import/-/unplugin-auto-import-0.9.3.tgz", "resolved": "https://registry.npmjs.org/unplugin-auto-import/-/unplugin-auto-import-0.10.1.tgz",
"integrity": "sha512-S3fC/kp98v+HhELCCG4jm4fhd/BbXhhcmFxxQ/JHXefLPtz9WTCOsSq3pq7U4D94xJ0eyZOPo/56Y9iUf3kskw==", "integrity": "sha512-aBvlCOvkgZRceYDEIEpduD86XYCS1wV4atNeUtAZsNK7FSKRb0Nu073SYYAeU46IitK3GPeGd5BETtqz6It5Ng==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@antfu/utils": "^0.5.2", "@antfu/utils": "^0.5.2",
"@rollup/pluginutils": "^4.2.1", "@rollup/pluginutils": "^4.2.1",
"local-pkg": "^0.4.2", "local-pkg": "^0.4.2",
"magic-string": "^0.26.2", "magic-string": "^0.26.2",
"unimport": "^0.4.5", "unimport": "^0.6.3",
"unplugin": "^0.7.2" "unplugin": "^0.7.2"
}, },
"engines": { "engines": {
...@@ -5142,9 +5175,9 @@ ...@@ -5142,9 +5175,9 @@
} }
}, },
"node_modules/video.js": { "node_modules/video.js": {
"version": "7.19.2", "version": "7.20.1",
"resolved": "https://registry.npmjs.org/video.js/-/video.js-7.19.2.tgz", "resolved": "https://registry.npmjs.org/video.js/-/video.js-7.20.1.tgz",
"integrity": "sha512-+rV/lJ1bDoMW3SbYlRp0eC9//RgvfBpEQ0USOyx44tHVxVyMjq+G9jZoiulsDXaIp4BX9q5+/y87TbZUysXBHA==", "integrity": "sha512-QMuj+bjwvLId9SY8uBAjO9sw7pCDhdVzJtwsAwg1MdVLXgVuxhhSYswdsdsRk+YMssHtReopINclvDlTGTxMLA==",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.12.5", "@babel/runtime": "^7.12.5",
"@videojs/http-streaming": "2.14.2", "@videojs/http-streaming": "2.14.2",
...@@ -5304,12 +5337,13 @@ ...@@ -5304,12 +5337,13 @@
} }
}, },
"node_modules/vue-tsc": { "node_modules/vue-tsc": {
"version": "0.38.5", "version": "0.39.0",
"resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-0.38.5.tgz", "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-0.39.0.tgz",
"integrity": "sha512-AFlqvwpENOTTJxS1Gl1uG0ZVsvtGCbgv9d0i4fXk5Pnao/ETVwWewPEsj+4cPlwa5htO9WhK6qfWwoqcCqg0yQ==", "integrity": "sha512-Hjm1C8T4ooNb5UBUqe0h7uCvV7Ff5UlWG4YgATVYREodafA4WxZIjE8v8wUG8mtyBDSaXXmg0J592i4jo3olug==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@volar/vue-typescript": "0.38.5" "@volar/vue-language-core": "0.39.0",
"@volar/vue-typescript": "0.39.0"
}, },
"bin": { "bin": {
"vue-tsc": "bin/vue-tsc.js" "vue-tsc": "bin/vue-tsc.js"
...@@ -5601,6 +5635,12 @@ ...@@ -5601,6 +5635,12 @@
"integrity": "sha512-f4A+++lGZGJvVSgeyMkqA7BEf2BVQli6F+qEykKb49c5ieWQBkfpn6CP5c1IZr2Yi2Ofl6Fj+v0e1fN18Z8Cnw==", "integrity": "sha512-f4A+++lGZGJvVSgeyMkqA7BEf2BVQli6F+qEykKb49c5ieWQBkfpn6CP5c1IZr2Yi2Ofl6Fj+v0e1fN18Z8Cnw==",
"dev": true "dev": true
}, },
"@types/file-saver": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.5.tgz",
"integrity": "sha512-zv9kNf3keYegP5oThGLaPk8E081DFDuwfqjtiTzm6PoxChdJ1raSuADf2YGCVIyrSynLrgc8JWv296s7Q7pQSQ==",
"dev": true
},
"@types/json-schema": { "@types/json-schema": {
"version": "7.0.11", "version": "7.0.11",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
...@@ -5774,53 +5814,73 @@ ...@@ -5774,53 +5814,73 @@
} }
}, },
"@vitejs/plugin-vue": { "@vitejs/plugin-vue": {
"version": "3.0.0", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-3.0.0.tgz", "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-3.0.1.tgz",
"integrity": "sha512-yWP34ArFh/jAeNUDkkLz/kVRLjf5ppJiq4L36f64Cp6dIrMQeYZGDP9xxdemlXfZR9ylN9JgHUl3GzfqOtgYDg==", "integrity": "sha512-Ll9JgxG7ONIz/XZv3dssfoMUDu9qAnlJ+km+pBA0teYSXzwPCIzS/e1bmwNYl5dcQGs677D21amgfYAnzMl17A==",
"dev": true, "dev": true,
"requires": {} "requires": {}
}, },
"@volar/code-gen": { "@volar/code-gen": {
"version": "0.38.5", "version": "0.39.0",
"resolved": "https://registry.npmjs.org/@volar/code-gen/-/code-gen-0.38.5.tgz", "resolved": "https://registry.npmjs.org/@volar/code-gen/-/code-gen-0.39.0.tgz",
"integrity": "sha512-GRGhPKoNtRwZyn9M0b2buobeMR1Aj9zxZI0osanLG9vB9YCnJov1myxKU8EJV5NobpyspLIv1X6/BEHLZNsKig==", "integrity": "sha512-56ycx16FoeDrjVuQ2RKIRmk3paFuIG4eIZLMpxypGKOlhFxS9/nB2eumln2e1jVlnAWeTcFw5V1/eYpDTazHLA==",
"dev": true, "dev": true,
"requires": { "requires": {
"@volar/source-map": "0.38.5" "@volar/source-map": "0.39.0"
} }
}, },
"@volar/source-map": { "@volar/source-map": {
"version": "0.38.5", "version": "0.39.0",
"resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-0.38.5.tgz", "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-0.39.0.tgz",
"integrity": "sha512-TyTLkOtAW/7qnl4Gabt4W4vcKPBPCBdaPLKwkMglKcaX70lPH2CIwZcPMJo6PAilbUVXcuX86xfgdncWDKKaZQ==", "integrity": "sha512-sV/eDeOjBwDJxrxwP/ifABvlOUzjpUpCbtbAhoc9hD9SrHlaDGrKtnmXdqgH5DNHIfm5aUpY0xojRvFFOubpuw==",
"dev": true "dev": true
}, },
"@volar/typescript-faster": {
"version": "0.39.0",
"resolved": "https://registry.npmjs.org/@volar/typescript-faster/-/typescript-faster-0.39.0.tgz",
"integrity": "sha512-+NNY456ABrvXD2VsJGsH4BGQTWkSyWcUfdbcREqXD+g2GotW7UtkFMtNgu1ASXBhKl7oRdPuRk5wK9Edw2tW9A==",
"dev": true,
"requires": {
"semver": "^7.3.7"
}
},
"@volar/vue-code-gen": { "@volar/vue-code-gen": {
"version": "0.38.5", "version": "0.39.0",
"resolved": "https://registry.npmjs.org/@volar/vue-code-gen/-/vue-code-gen-0.38.5.tgz", "resolved": "https://registry.npmjs.org/@volar/vue-code-gen/-/vue-code-gen-0.39.0.tgz",
"integrity": "sha512-4t2bX2bCmmlyYwPLqfH3AJXj9Km79uRmCy81recc8LB8ZT2Z9hOFNBAnlGNcCeZAtVWtmHVV7sXJtQAJQxkWeg==", "integrity": "sha512-0KqocSt5o4TtmUngq+8tmWRfifgyE9eDzb4/1Ih7bl52T1RDdOOKkZ9GzP3zBic3N7lJHiOaLdGMXTK+IzAe7g==",
"dev": true, "dev": true,
"requires": { "requires": {
"@volar/code-gen": "0.38.5", "@volar/code-gen": "0.39.0",
"@volar/source-map": "0.38.5", "@volar/source-map": "0.39.0",
"@vue/compiler-core": "^3.2.37", "@vue/compiler-core": "^3.2.37",
"@vue/compiler-dom": "^3.2.37", "@vue/compiler-dom": "^3.2.37",
"@vue/shared": "^3.2.37" "@vue/shared": "^3.2.37"
} }
}, },
"@volar/vue-typescript": { "@volar/vue-language-core": {
"version": "0.38.5", "version": "0.39.0",
"resolved": "https://registry.npmjs.org/@volar/vue-typescript/-/vue-typescript-0.38.5.tgz", "resolved": "https://registry.npmjs.org/@volar/vue-language-core/-/vue-language-core-0.39.0.tgz",
"integrity": "sha512-Gobtg5gxR3bf/l1h300OWCWkvDQnOINgnxkDYiF8qdTBalW6qGsgGmq0uLBBDLaoahrfM7rqNd5QfJwGBgFXZg==", "integrity": "sha512-MnXnrIB7PtggLfKcLtg9I5X1i5FMCoTC+jYtR/j5RZU97boPbFi0lYLysCGPUXdP3w5taIXGPgfT8VnbLEkndQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"@volar/code-gen": "0.38.5", "@volar/code-gen": "0.39.0",
"@volar/source-map": "0.38.5", "@volar/source-map": "0.39.0",
"@volar/vue-code-gen": "0.38.5", "@volar/vue-code-gen": "0.39.0",
"@vue/compiler-sfc": "^3.2.37", "@vue/compiler-sfc": "^3.2.37",
"@vue/reactivity": "^3.2.37" "@vue/reactivity": "^3.2.37"
} }
}, },
"@volar/vue-typescript": {
"version": "0.39.0",
"resolved": "https://registry.npmjs.org/@volar/vue-typescript/-/vue-typescript-0.39.0.tgz",
"integrity": "sha512-RV+oHtkuta/kwskg02Ykp9qvDXpgDNF1EVgeGx42v1b65qMyAd5FgxOZxYYCzVV4DzVa6gH+C5YhuQXo4oEdog==",
"dev": true,
"requires": {
"@volar/code-gen": "0.39.0",
"@volar/typescript-faster": "0.39.0",
"@volar/vue-language-core": "0.39.0"
}
},
"@vue/compiler-core": { "@vue/compiler-core": {
"version": "3.2.37", "version": "3.2.37",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.37.tgz", "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.37.tgz",
...@@ -5944,36 +6004,36 @@ ...@@ -5944,36 +6004,36 @@
"requires": {} "requires": {}
}, },
"@vueuse/core": { "@vueuse/core": {
"version": "8.9.3", "version": "8.9.4",
"resolved": "https://registry.npmjs.org/@vueuse/core/-/core-8.9.3.tgz", "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-8.9.4.tgz",
"integrity": "sha512-q2pr3N7FPG7IBBhEXTYOJU+38VwKMLP5IfD33byzBV4Th7f1JHT4qPKvJrvr17knAefPRzNqgt9et+xFqaRlPQ==", "integrity": "sha512-B/Mdj9TK1peFyWaPof+Zf/mP9XuGAngaJZBwPaXBvU3aCTZlx3ltlrFFFyMV4iGBwsjSCeUCgZrtkEj9dS2Y3Q==",
"requires": { "requires": {
"@types/web-bluetooth": "^0.0.14", "@types/web-bluetooth": "^0.0.14",
"@vueuse/metadata": "8.9.3", "@vueuse/metadata": "8.9.4",
"@vueuse/shared": "8.9.3", "@vueuse/shared": "8.9.4",
"vue-demi": "*" "vue-demi": "*"
}, },
"dependencies": { "dependencies": {
"@vueuse/shared": { "@vueuse/shared": {
"version": "8.9.3", "version": "8.9.4",
"resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-8.9.3.tgz", "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-8.9.4.tgz",
"integrity": "sha512-foorYQAU3CGknAO1w9No/rpGBJmb7L74MPltnZAYxeBRfhsajjJYYgja+D5IT2vT+/a0NciISaVp3fDwMN1ocA==", "integrity": "sha512-wt+T30c4K6dGRMVqPddexEVLa28YwxW5OFIPmzUHICjphfAuBFTTdDoyqREZNDOFJZ44ARH1WWQNCUK8koJ+Ag==",
"requires": { "requires": {
"vue-demi": "*" "vue-demi": "*"
} }
}, },
"vue-demi": { "vue-demi": {
"version": "0.13.4", "version": "0.13.5",
"resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.4.tgz", "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.5.tgz",
"integrity": "sha512-KP4lq9uSz0KZbaqCllRhnxMV3mYRsRWJfdsAhZyt5bV5O1RTpoeDptBRV9NOa/JgOpfaA9ane88VF7OjWNK/DA==", "integrity": "sha512-tO3K2bML3AwiHmVHeKCq6HLef2st4zBXIV5aEkoJl6HZ+gJWxWv2O8wLH8qrA3SX3lDoTDHNghLX1xZg83MXvw==",
"requires": {} "requires": {}
} }
} }
}, },
"@vueuse/metadata": { "@vueuse/metadata": {
"version": "8.9.3", "version": "8.9.4",
"resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-8.9.3.tgz", "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-8.9.4.tgz",
"integrity": "sha512-57gZZKtWAmcJaUBmciCohvmumVLz4+FnoVnWj7U5BWs5PC2/7gU9Z0/i1i9leDNeboAauFzAq7z1GjS8eYnT+w==" "integrity": "sha512-IwSfzH80bnJMzqhaapqJl9JRIiyQU0zsRGEgnxN6jhq7992cPUJIRfV+JHRIZXjYqbwt07E1gTEp0R0zPJ1aqw=="
}, },
"@xmldom/xmldom": { "@xmldom/xmldom": {
"version": "0.7.5", "version": "0.7.5",
...@@ -6485,9 +6545,9 @@ ...@@ -6485,9 +6545,9 @@
"dev": true "dev": true
}, },
"element-plus": { "element-plus": {
"version": "2.2.9", "version": "2.2.10",
"resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.2.9.tgz", "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.2.10.tgz",
"integrity": "sha512-jYbL0JkCdv95rkT6trZJjCAizLPySa0qcd2cgq+57SKQnCZAcNDDq4GbTuFRnNavdoeCJnuM3HIficTIUpsMOQ==", "integrity": "sha512-hJ+LlbRN3POu4Idl1LXB+SHSWdi+wwmdsoDXdQT2ynGuwzZsMYiusOooYXyEsPlrizeLibdnNGNDx4TIjXQvUg==",
"requires": { "requires": {
"@ctrl/tinycolor": "^3.4.1", "@ctrl/tinycolor": "^3.4.1",
"@element-plus/icons-vue": "^2.0.6", "@element-plus/icons-vue": "^2.0.6",
...@@ -7051,6 +7111,11 @@ ...@@ -7051,6 +7111,11 @@
"flat-cache": "^3.0.4" "flat-cache": "^3.0.4"
} }
}, },
"file-saver": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
"integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
},
"file-uri-to-path": { "file-uri-to-path": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz",
...@@ -7889,12 +7954,12 @@ ...@@ -7889,12 +7954,12 @@
} }
}, },
"mlly": { "mlly": {
"version": "0.5.4", "version": "0.5.5",
"resolved": "https://registry.npmjs.org/mlly/-/mlly-0.5.4.tgz", "resolved": "https://registry.npmjs.org/mlly/-/mlly-0.5.5.tgz",
"integrity": "sha512-gFlsLWCjVwu/LM/ZfYUkmnbBoz7eyBIMUwVQYDqhd8IvtNFDeZ95uwAyxHE2Xx7tQwePQaCo4fECZ9MWFEUTgQ==", "integrity": "sha512-2R4JT/SxRDPexomw4rmHYY/gWAGmL9Kkq1OR76Ua6w+P340a1aBDTWzKo2kAlxzrG82OdXs5VB9Lmcmyit0Obg==",
"dev": true, "dev": true,
"requires": { "requires": {
"pathe": "^0.3.1", "pathe": "^0.3.2",
"pkg-types": "^0.3.3" "pkg-types": "^0.3.3"
} }
}, },
...@@ -8633,9 +8698,9 @@ ...@@ -8633,9 +8698,9 @@
"dev": true "dev": true
}, },
"sass": { "sass": {
"version": "1.53.0", "version": "1.54.0",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.53.0.tgz", "resolved": "https://registry.npmjs.org/sass/-/sass-1.54.0.tgz",
"integrity": "sha512-zb/oMirbKhUgRQ0/GFz8TSAwRq2IlR29vOUJZOx0l8sV+CkHUfHa4u5nqrG+1VceZp7Jfj59SVW9ogdhTvJDcQ==", "integrity": "sha512-C4zp79GCXZfK0yoHZg+GxF818/aclhp9F48XBu/+bm9vXEVAYov9iU3FBVRMq3Hx3OA4jfKL+p2K9180mEh0xQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"chokidar": ">=3.0.0 <4.0.0", "chokidar": ">=3.0.0 <4.0.0",
...@@ -9016,9 +9081,9 @@ ...@@ -9016,9 +9081,9 @@
} }
}, },
"unimport": { "unimport": {
"version": "0.4.5", "version": "0.6.3",
"resolved": "https://registry.npmjs.org/unimport/-/unimport-0.4.5.tgz", "resolved": "https://registry.npmjs.org/unimport/-/unimport-0.6.3.tgz",
"integrity": "sha512-DnmiSt/HQIfhdcxOy4CGqwZDBh3WHg33euX1ge4X8hvquKBmw2PFvhoAJaBKxscOz0oYosoPoPT4tkDZWHhV0Q==", "integrity": "sha512-+DVHqCoOoJcmYRLUrKbKDs/Iq/is6m0K7rTdFJAV7/MfyvWCKeSuSOrLeONgLBd6yC6iZFEzdc8di7S27PQyoA==",
"dev": true, "dev": true,
"requires": { "requires": {
"@rollup/pluginutils": "^4.2.1", "@rollup/pluginutils": "^4.2.1",
...@@ -9026,7 +9091,7 @@ ...@@ -9026,7 +9091,7 @@
"fast-glob": "^3.2.11", "fast-glob": "^3.2.11",
"local-pkg": "^0.4.2", "local-pkg": "^0.4.2",
"magic-string": "^0.26.2", "magic-string": "^0.26.2",
"mlly": "^0.5.4", "mlly": "^0.5.5",
"pathe": "^0.3.2", "pathe": "^0.3.2",
"scule": "^0.2.1", "scule": "^0.2.1",
"strip-literal": "^0.4.0", "strip-literal": "^0.4.0",
...@@ -9075,16 +9140,16 @@ ...@@ -9075,16 +9140,16 @@
} }
}, },
"unplugin-auto-import": { "unplugin-auto-import": {
"version": "0.9.3", "version": "0.10.1",
"resolved": "https://registry.npmjs.org/unplugin-auto-import/-/unplugin-auto-import-0.9.3.tgz", "resolved": "https://registry.npmjs.org/unplugin-auto-import/-/unplugin-auto-import-0.10.1.tgz",
"integrity": "sha512-S3fC/kp98v+HhELCCG4jm4fhd/BbXhhcmFxxQ/JHXefLPtz9WTCOsSq3pq7U4D94xJ0eyZOPo/56Y9iUf3kskw==", "integrity": "sha512-aBvlCOvkgZRceYDEIEpduD86XYCS1wV4atNeUtAZsNK7FSKRb0Nu073SYYAeU46IitK3GPeGd5BETtqz6It5Ng==",
"dev": true, "dev": true,
"requires": { "requires": {
"@antfu/utils": "^0.5.2", "@antfu/utils": "^0.5.2",
"@rollup/pluginutils": "^4.2.1", "@rollup/pluginutils": "^4.2.1",
"local-pkg": "^0.4.2", "local-pkg": "^0.4.2",
"magic-string": "^0.26.2", "magic-string": "^0.26.2",
"unimport": "^0.4.5", "unimport": "^0.6.3",
"unplugin": "^0.7.2" "unplugin": "^0.7.2"
}, },
"dependencies": { "dependencies": {
...@@ -9189,9 +9254,9 @@ ...@@ -9189,9 +9254,9 @@
} }
}, },
"video.js": { "video.js": {
"version": "7.19.2", "version": "7.20.1",
"resolved": "https://registry.npmjs.org/video.js/-/video.js-7.19.2.tgz", "resolved": "https://registry.npmjs.org/video.js/-/video.js-7.20.1.tgz",
"integrity": "sha512-+rV/lJ1bDoMW3SbYlRp0eC9//RgvfBpEQ0USOyx44tHVxVyMjq+G9jZoiulsDXaIp4BX9q5+/y87TbZUysXBHA==", "integrity": "sha512-QMuj+bjwvLId9SY8uBAjO9sw7pCDhdVzJtwsAwg1MdVLXgVuxhhSYswdsdsRk+YMssHtReopINclvDlTGTxMLA==",
"requires": { "requires": {
"@babel/runtime": "^7.12.5", "@babel/runtime": "^7.12.5",
"@videojs/http-streaming": "2.14.2", "@videojs/http-streaming": "2.14.2",
...@@ -9298,12 +9363,13 @@ ...@@ -9298,12 +9363,13 @@
} }
}, },
"vue-tsc": { "vue-tsc": {
"version": "0.38.5", "version": "0.39.0",
"resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-0.38.5.tgz", "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-0.39.0.tgz",
"integrity": "sha512-AFlqvwpENOTTJxS1Gl1uG0ZVsvtGCbgv9d0i4fXk5Pnao/ETVwWewPEsj+4cPlwa5htO9WhK6qfWwoqcCqg0yQ==", "integrity": "sha512-Hjm1C8T4ooNb5UBUqe0h7uCvV7Ff5UlWG4YgATVYREodafA4WxZIjE8v8wUG8mtyBDSaXXmg0J592i4jo3olug==",
"dev": true, "dev": true,
"requires": { "requires": {
"@volar/vue-typescript": "0.38.5" "@volar/vue-language-core": "0.39.0",
"@volar/vue-typescript": "0.39.0"
} }
}, },
"webpack-sources": { "webpack-sources": {
......
...@@ -15,33 +15,35 @@ ...@@ -15,33 +15,35 @@
"dependencies": { "dependencies": {
"@element-plus/icons-vue": "^2.0.6", "@element-plus/icons-vue": "^2.0.6",
"@tinymce/tinymce-vue": "^5.0.0", "@tinymce/tinymce-vue": "^5.0.0",
"@vueuse/core": "^8.9.3", "@vueuse/core": "^8.9.4",
"axios": "^0.27.2", "axios": "^0.27.2",
"blueimp-md5": "^2.19.0", "blueimp-md5": "^2.19.0",
"element-plus": "^2.2.9", "element-plus": "^2.2.10",
"file-saver": "^2.0.5",
"pinia": "^2.0.16", "pinia": "^2.0.16",
"qs": "^6.11.0", "qs": "^6.11.0",
"video.js": "^7.19.2", "video.js": "^7.20.1",
"vue": "^3.2.37", "vue": "^3.2.37",
"vue-router": "^4.1.2" "vue-router": "^4.1.2"
}, },
"devDependencies": { "devDependencies": {
"@rushstack/eslint-patch": "^1.1.0", "@rushstack/eslint-patch": "^1.1.0",
"@types/blueimp-md5": "^2.18.0", "@types/blueimp-md5": "^2.18.0",
"@types/file-saver": "^2.0.5",
"@types/node": "^16.11.43", "@types/node": "^16.11.43",
"@types/qs": "^6.9.7", "@types/qs": "^6.9.7",
"@types/video.js": "^7.3.42", "@types/video.js": "^7.3.42",
"@vitejs/plugin-vue": "^3.0.0", "@vitejs/plugin-vue": "^3.0.1",
"@vue/eslint-config-typescript": "^11.0.0", "@vue/eslint-config-typescript": "^11.0.0",
"@vue/tsconfig": "^0.1.3", "@vue/tsconfig": "^0.1.3",
"ali-oss": "^6.17.1", "ali-oss": "^6.17.1",
"eslint": "^8.5.0", "eslint": "^8.5.0",
"eslint-plugin-vue": "^9.2.0", "eslint-plugin-vue": "^9.2.0",
"npm-run-all": "^4.1.5", "npm-run-all": "^4.1.5",
"sass": "^1.53.0", "sass": "^1.54.0",
"typescript": "~4.7.4", "typescript": "~4.7.4",
"unplugin-auto-import": "^0.9.3", "unplugin-auto-import": "^0.10.1",
"vite": "^3.0.2", "vite": "^3.0.2",
"vue-tsc": "^0.38.5" "vue-tsc": "^0.39.0"
} }
} }
...@@ -63,8 +63,8 @@ export function getQuestionCategory(params: { project_tag: string }) { ...@@ -63,8 +63,8 @@ export function getQuestionCategory(params: { project_tag: string }) {
return httpRequest.get(`/api/qbs/admin/v2/question-category/tree/${params.project_tag}`, { params }) return httpRequest.get(`/api/qbs/admin/v2/question-category/tree/${params.project_tag}`, { params })
} }
// 获取试题分类 // 收藏/取消收藏
export function collectionResource(params: { export function collectionResource(data: {
course_id: string course_id: string
semester_id: string semester_id: string
chapter_id: string chapter_id: string
...@@ -73,5 +73,5 @@ export function collectionResource(params: { ...@@ -73,5 +73,5 @@ export function collectionResource(params: {
type: number type: number
status: number status: number
}) { }) {
return httpRequest.get('/api/saas/api/v1/collection/resource', { params }) return httpRequest.post('/api/saas/api/v1/collection/resource', data)
} }
<script setup lang="ts"> <script setup lang="ts">
interface Props { interface Props {
resource_type: number resourceType: number
type: string
} }
defineProps<Props>() defineProps<Props>()
</script> </script>
<template> <template>
<img src="@/assets/images/icon_chapter.png" /> <div class="icon-resource">
<img src="@/assets/images/icon_mp4.png" v-if="resourceType === 2" />
<img src="@/assets/images/icon_work.png" v-else-if="resourceType === 3" />
<img src="@/assets/images/icon_exam.png" v-else-if="resourceType === 9" />
<img src="@/assets/images/icon_doc.png" v-else />
<!-- <img src="@/assets/images/icon_ppt.png" v-else-if="resourceType === 10" />
<img src="@/assets/images/icon_rar.png" v-else-if="resourceType === 4" /> -->
</div>
</template> </template>
<style lang="scss">
.icon-resource {
display: inline-block;
img {
margin-right: 10px;
width: 14px;
}
}
</style>
import { collectionResource } from '@/api/base' import { collectionResource } from '@/api/base'
export function toggleCollectionResource(params) { export async function useCollectionResource(params: {
return collectionResource(params).then(res => { course_id: string
console.log(res) semester_id: string
}) chapter_id: string
section_id: string
source_id: string
type: number
status: number
}) {
const res = await collectionResource(params)
console.log(res)
} }
...@@ -21,11 +21,23 @@ export function topCourse(data: { id: string; status: number }) { ...@@ -21,11 +21,23 @@ export function topCourse(data: { id: string; status: number }) {
export function getCourse(params: { course_id: string; semester_id: string }) { export function getCourse(params: { course_id: string; semester_id: string }) {
return httpRequest.get(`/api/saas/api/v1/course/${params.course_id}/detail/${params.semester_id}`, { params }) return httpRequest.get(`/api/saas/api/v1/course/${params.course_id}/detail/${params.semester_id}`, { params })
} }
// 获取章节列表 // 获取章节列表
export function getChapterTreeList(data: { course_id: string; semester_id: string }) { export function getChapterTreeList(data: { course_id: string; semester_id: string }) {
return httpRequest.post('/api/saas/api/v1/chapter/tree', data) return httpRequest.post('/api/saas/api/v1/chapter/tree', data)
} }
// 收藏/取消收藏
export function collectionResource(data: {
course_id: string
semester_id: string
chapter_id: string
section_id: string
source_id: string
type: number
status: number
}) {
return httpRequest.post('/api/saas/api/v1/collection/resource', data)
}
// 获取大作业详情 // 获取大作业详情
export function getCourseWork(data: { course_id: string; semester_id: string }) { export function getCourseWork(data: { course_id: string; semester_id: string }) {
return httpRequest.post('/api/saas/api/v1/job/detail', data) return httpRequest.post('/api/saas/api/v1/job/detail', data)
......
<script setup lang="ts"> <script setup lang="ts">
import type { CourseType } from '@/types' import type { CourseListItemTypes } from '../types'
import { useMapStore } from '@/stores/map' import { useMapStore } from '@/stores/map'
import { topCourse } from '../api' import { topCourse } from '../api'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
interface Props { interface Props {
data: CourseType data: CourseListItemTypes
} }
const props = defineProps<Props>() const props = defineProps<Props>()
...@@ -28,7 +28,7 @@ const electiveTypeText = computed(() => { ...@@ -28,7 +28,7 @@ const electiveTypeText = computed(() => {
// 是否选中 // 是否选中
const isActive = computed(() => props.data.course_id === courseId) const isActive = computed(() => props.data.course_id === courseId)
// 置顶 // 置顶
function handleTop(data: CourseType) { function handleTop(data: CourseListItemTypes) {
topCourse({ id: data.id, status: data.is_top ? 0 : 1 }).then(() => { topCourse({ id: data.id, status: data.is_top ? 0 : 1 }).then(() => {
emit('change') emit('change')
ElMessage.success('操作成功') ElMessage.success('操作成功')
......
<!-- 学习 --> <!-- 学习 -->
<script setup lang="ts"> <script setup lang="ts">
import { Star } from '@element-plus/icons-vue' import type { CourseChapterTypes, CourseSectionTypes, CourseResourceTypes } from '../types'
import type { ChapterType } from '@/types' import ResourceIcon from '@/components/ResourceIcon.vue'
import * as api from '../api' import { getChapterTreeList, collectionResource } from '../api'
let chapterList = $ref<ChapterType[]>([])
let chapterList = $ref<CourseChapterTypes[]>([])
const { query } = useRoute() const { query } = useRoute()
const courseId = $ref(query.course_id as string) const courseId = $ref(query.course_id as string)
const semesterId = $ref(query.semester_id as string) const semesterId = $ref(query.semester_id as string)
...@@ -12,13 +13,35 @@ function fetchList() { ...@@ -12,13 +13,35 @@ function fetchList() {
if (!courseId || !semesterId) { if (!courseId || !semesterId) {
return return
} }
api.getChapterTreeList({ course_id: courseId, semester_id: semesterId }).then(res => { getChapterTreeList({ course_id: courseId, semester_id: semesterId }).then(res => {
chapterList = res.data.items chapterList = res.data.items
}) })
} }
onMounted(() => { onMounted(() => {
fetchList() fetchList()
}) })
// 是否可以收藏
function canCollection(data: CourseResourceTypes) {
return [4, 2, 10, 11, 3].includes(data.resource_type)
}
// 收藏/取消收藏
function toggleCollection(resource: CourseResourceTypes, section: CourseSectionTypes, chapter: CourseChapterTypes) {
// 资源类型: 1章节,2视频,3作业,4其他,6腾讯会议,9考试,10课件,11教案
// 收藏类型: 1其他, 2视频,3课件,4教案,5作业,6帖子
const typeMap: Record<number, number> = { 4: 1, 2: 2, 10: 3, 11: 4, 3: 5 }
collectionResource({
course_id: courseId,
semester_id: semesterId,
chapter_id: chapter.id,
section_id: section.id,
source_id: resource.resource_id,
type: typeMap[resource.resource_type],
status: resource.collection_count > 0 ? 0 : 1
}).then(res => {
resource.collection_count = resource.collection_count > 0 ? 0 : 1
console.log(res)
})
}
</script> </script>
<template> <template>
<el-collapse class="course-chapters"> <el-collapse class="course-chapters">
...@@ -28,16 +51,22 @@ onMounted(() => { ...@@ -28,16 +51,22 @@ onMounted(() => {
<el-collapse-item :name="section.id" v-for="section in item.sections" :key="section.id"> <el-collapse-item :name="section.id" v-for="section in item.sections" :key="section.id">
<template #title><i class="icon-chapter"></i>{{ item.name }}</template> <template #title><i class="icon-chapter"></i>{{ item.name }}</template>
<ul> <ul>
<li v-for="resource in section.resources" :key="resource.id"> <li class="course-resource-item" v-for="resource in section.resources" :key="resource.id">
<router-link <router-link
:to="`/course/player?course_id=${courseId}&section_id=${ :to="`/course/player?course_id=${courseId}&section_id=${
section.id section.id
}&semester_id=${semesterId}&&source_id=${resource.info?.source_id || ''}`" }&semester_id=${semesterId}&&source_id=${resource.info?.source_id || ''}`"
target="_blank" target="_blank"
> >
<ResourceIcon :resourceType="resource.resource_type" />
{{ resource.name }} {{ resource.name }}
</router-link> </router-link>
<el-icon><Star /></el-icon> <i
class="icon-star"
:class="!!resource.collection_count ? 'is-active' : ''"
@click="toggleCollection(resource, section, item)"
v-if="canCollection(resource)"
></i>
</li> </li>
</ul> </ul>
</el-collapse-item> </el-collapse-item>
...@@ -47,7 +76,7 @@ onMounted(() => { ...@@ -47,7 +76,7 @@ onMounted(() => {
</template> </template>
<style lang="scss" scoped> <style lang="scss" scoped>
li { .course-resource-item {
display: flex; display: flex;
align-items: center; align-items: center;
padding: 0 48px 0 60px; padding: 0 48px 0 60px;
...@@ -56,6 +85,21 @@ li { ...@@ -56,6 +85,21 @@ li {
border-bottom: 1px solid #e6e6e6; border-bottom: 1px solid #e6e6e6;
a { a {
flex: 1; flex: 1;
&:hover {
color: var(--main-color);
}
}
}
.icon-star {
display: inline-block;
width: 16px;
height: 16px;
background: url(@/assets/images/icon_star.png) no-repeat;
background-size: contain;
cursor: pointer;
&.is-active {
background: url(@/assets/images/icon_star_hover.png) no-repeat;
background-size: contain;
} }
} }
.icon-chapter { .icon-chapter {
...@@ -63,7 +107,7 @@ li { ...@@ -63,7 +107,7 @@ li {
display: inline-block; display: inline-block;
width: 12px; width: 12px;
height: 14px; height: 14px;
background: url(@/assets/images/icon_chapter.png); background: url(@/assets/images/icon_chapter.png) no-repeat;
background-size: contain; background-size: contain;
} }
.course-chapters { .course-chapters {
......
...@@ -37,9 +37,11 @@ const update = () => { ...@@ -37,9 +37,11 @@ const update = () => {
}) })
} }
// 获取作业 // 获取作业
let workInfo = $ref('')
function fetchInfo() { function fetchInfo() {
getCourseWork({ course_id: courseId, semester_id: semesterId }).then(res => { getCourseWork({ course_id: courseId, semester_id: semesterId }).then(res => {
const { detail } = res.data const { detail, essay } = res.data
workInfo = essay
Object.assign(form, detail) Object.assign(form, detail)
}) })
} }
...@@ -49,18 +51,52 @@ onMounted(() => { ...@@ -49,18 +51,52 @@ onMounted(() => {
</script> </script>
<template> <template>
<el-form ref="formRef" :model="form" :rules="rules" hide-required-asterisk label-position="top" disabled> <div class="course-work">
<el-form-item label="作业标题" prop="old_password"> <div class="course-work-item">
<el-input v-model="form.title" /> <h2>作业说明</h2>
</el-form-item> <div v-html="workInfo"></div>
<el-form-item label="作业正文" prop="password"> </div>
<el-input type="textarea" v-model="form.content" /> <div class="course-work-item">
</el-form-item> <h2>上传作业</h2>
<el-form-item label="上传附件" prop="password_r"> <el-form
<AppUpload v-model="form.attachments" disabled></AppUpload> ref="formRef"
</el-form-item> :model="form"
<el-form-item> :rules="rules"
<el-button type="primary" round auto-insert-space @click="handleSubmit">保存</el-button> hide-required-asterisk
</el-form-item> label-position="top"
</el-form> :disabled="disabled"
>
<el-form-item label="作业标题" prop="old_password">
<el-input v-model="form.title" />
</el-form-item>
<el-form-item label="作业正文" prop="password">
<el-input type="textarea" v-model="form.content" />
</el-form-item>
<el-form-item label="上传附件" prop="password_r">
<AppUpload v-model="form.attachments" :disabled="disabled"></AppUpload>
</el-form-item>
<div style="text-align: center">
<el-button type="primary" round auto-insert-space @click="handleSubmit">保存</el-button>
</div>
</el-form>
</div>
</div>
</template> </template>
<style lang="scss" scoped>
.course-work {
h2 {
font-size: 16px;
font-weight: 500;
line-height: 28px;
color: #333;
padding-bottom: 10px;
}
}
.course-work-item {
padding: 20px 0;
}
.course-work-item + .course-work-item {
border-top: 1px dashed #e6e6e6;
}
</style>
import type { CourseType, ChapterType, ResourceType } from '@/types'
export interface CourseListParamsTypes { export interface CourseListParamsTypes {
[key: string]: any [key: string]: any
elective_types: string[]
id: string id: string
semester_ids: string[] semester_ids: string[]
elective_types: string[] }
export interface CourseListItemTypes extends CourseType {
schedule: string
section?: ChapterType
semester_id: string
watch_video_length: number
}
// 课程章类型
export interface CourseChapterTypes {
id: string
name: string
resource_id: string
resource_type: number
sections: CourseSectionTypes[]
}
// 课程节类型
export interface CourseSectionTypes {
id: string
name: string
resource_id: string
resource_type: number
resources: CourseResourceTypes[]
}
// 课程资源类型
export interface CourseResourceTypes {
id: string
name: string
resource_id: string
resource_type: number
collection_count: number
info: ResourceType
} }
export interface PlayItemTypes { export interface PlayItemTypes {
......
<script setup lang="ts"> <script setup lang="ts">
import CourseListSearch from '../components/CourseListSearch.vue' import CourseListSearch from '../components/CourseListSearch.vue'
import CourseListItem from '../components/CourseListItem.vue' import CourseListItem from '../components/CourseListItem.vue'
import type { CourseType } from '@/types' import type { CourseListParamsTypes, CourseListItemTypes } from '../types'
import type { CourseListParamsTypes } from '../types'
import { getCourseList } from '../api' import { getCourseList } from '../api'
// 列表参数 // 列表参数
const listParams = reactive<CourseListParamsTypes>({ id: '', semester_ids: [], elective_types: [] }) const listParams = reactive<CourseListParamsTypes>({ id: '', semester_ids: [], elective_types: [] })
let courseList = $ref<CourseType[]>([]) let courseList = $ref<CourseListItemTypes[]>([])
// 获取课程列表 // 获取课程列表
function fetchList() { function fetchList() {
const params = Object.assign({}, listParams, { const params = Object.assign({}, listParams, {
......
...@@ -26,10 +26,7 @@ const electiveTypeText = computed(() => { ...@@ -26,10 +26,7 @@ const electiveTypeText = computed(() => {
const detail = reactive<CourseType>({ const detail = reactive<CourseType>({
id: '', id: '',
course_id: '', course_id: '',
semester_id: '',
schedule: '',
represent: '', represent: '',
watch_video_length: 0,
is_finished: 0, is_finished: 0,
is_top: 0, is_top: 0,
name: '', name: '',
......
import httpRequest from '@/utils/axios'
// 获取收藏列表
export function getCollectionList(params?: { type?: string; course_id?: string; semester_id?: string }) {
return httpRequest.get('/api/saas/api/v1/collection/list', { params })
}
// 收藏/取消收藏
export function collectionResource(data: {
course_id: string
semester_id: string
chapter_id: string
section_id: string
source_id: string
type: number
status: number
}) {
return httpRequest.post('/api/saas/api/v1/collection/resource', data)
}
// 获取所有课程
export function getCourseList() {
return httpRequest.get('/api/saas/api/v1/course/all')
}
import type { CourseType, ResourceType } from '@/types'
export interface CollectionType {
chapter_id: string
course_id: string
id: string
info: ResourceType
section_id: string
semester_id: string
semester: CollectionSemesterType
source_id: string
status: number
type: number
}
export interface CollectionSemesterType {
id: string
name: string
}
export type AllCourseType = Pick<CourseType, 'id' | 'name' | 'course_id' | 'cover' | 'semester'>
<script setup lang="ts"> <script setup lang="ts">
const tabValue = $ref('') import type { CollectionType, AllCourseType } from '../types'
import ResourceIcon from '@/components/ResourceIcon.vue'
import { Download } from '@element-plus/icons-vue'
import { saveAs } from 'file-saver'
import { getCollectionList, getCourseList, collectionResource } from '../api'
const tabs = $ref([ const tabs = $ref([
{ label: '全部', value: '' }, { label: '全部', value: '' },
{ label: '视频', value: '1' }, { label: '视频', value: '2' },
{ label: '课件', value: '2' }, { label: '课件', value: '3' },
{ label: '教案', value: '3' }, { label: '教案', value: '4' },
{ label: '作业', value: '4' }, { label: '作业', value: '5' },
{ label: '帖子', value: '5' }, { label: '帖子', value: '6' },
{ label: '其它资料', value: '6' } { label: '其它资料', value: '1' }
]) ])
// 收藏列表
const params = reactive({
type: '',
course_id: '',
semester_id: ''
})
let list = $ref<CollectionType[]>([])
function fetchList() {
getCollectionList(params).then(res => {
list = res.data.items?.map((item: CollectionType) => {
item.status = 1
return item
})
})
}
// 所有课程列表
let courseList = $ref<AllCourseType[]>([])
const courseActive = $ref()
function fetchCourseList() {
getCourseList().then(res => {
courseList = res.data.items || []
})
}
function handleCourseChange(data: AllCourseType) {
params.course_id = data.course_id || ''
params.semester_id = data.semester?.id || ''
fetchList()
}
onMounted(() => {
fetchList()
fetchCourseList()
})
// 收藏/取消收藏
function toggleCollection(data: CollectionType) {
collectionResource({
course_id: data.course_id,
semester_id: data.semester_id,
chapter_id: data.chapter_id,
section_id: data.section_id,
source_id: data.source_id,
type: data.type,
status: data.status ? 0 : 1
}).then(() => {
data.status = data.status ? 0 : 1
})
}
// 是否可以下载
function canDownload(type: number) {
return [1, 3, 4, 5].includes(type)
}
// 下载资源
function downloadFile(data: CollectionType) {
data.info.url && saveAs(data.info.url, data.info.name)
}
</script> </script>
<template> <template>
<AppCard> <AppCard>
<el-tabs v-model="tabValue"> <el-tabs v-model="params.type" @tab-change="fetchList">
<el-tab-pane v-for="item in tabs" :label="item.label" :name="item.value" :key="item.value"></el-tab-pane> <el-tab-pane v-for="item in tabs" :label="item.label" :name="item.value" :key="item.value"></el-tab-pane>
</el-tabs> </el-tabs>
<el-select></el-select> <el-select v-model="courseActive" placeholder="所属课程" @change="handleCourseChange" clearable value-key="id">
<el-option v-for="item in courseList" :key="item.id" :label="item.name" :value="item" />
</el-select>
<ul v-if="list.length">
<li class="collection-item" v-for="item in list" :key="item.id">
<p>
<router-link
:to="`/course/player?course_id=${item.course_id}&section_id=${item.section_id}&semester_id=${item.semester_id}&source_id=${item.info?.source_id}`"
target="_blank"
>
<ResourceIcon :resourceType="item.type" />
{{ item.info.name || item.info.paper_title }}
</router-link>
</p>
<div class="actions">
<i class="icon-star" :class="!!item.status ? 'is-active' : ''" @click="toggleCollection(item)"></i>
<i class="icon-download" @click="downloadFile(item)" v-if="canDownload(item.type)"><Download /></i>
</div>
</li>
</ul>
<el-empty description="暂无数据" v-else />
</AppCard> </AppCard>
</template> </template>
<style lang="scss" scoped>
.collection-item {
display: flex;
align-items: center;
height: 48px;
border-bottom: 1px solid #e6e6e6;
p {
flex: 1;
line-height: 48px;
}
&:hover {
color: var(--main-color);
}
.actions {
width: 60px;
display: flex;
align-items: center;
justify-content: space-between;
}
}
.icon-star {
display: inline-block;
width: 16px;
height: 16px;
background: url(@/assets/images/icon_star.png) no-repeat;
background-size: contain;
cursor: pointer;
&.is-active {
background: url(@/assets/images/icon_star_hover.png) no-repeat;
background-size: contain;
}
}
.icon-download {
display: inline-block;
width: 16px;
height: 16px;
cursor: pointer;
}
</style>
...@@ -8,41 +8,41 @@ export interface IMenuItem { ...@@ -8,41 +8,41 @@ export interface IMenuItem {
children?: IMenuItem[] children?: IMenuItem[]
} }
// 用户信息 // 用户类型
export interface UserType { export interface UserType {
avatar: string
email: string
id: string id: string
mobile: string mobile: string
name: string name: string
email: string
username: string username: string
avatar: string
} }
// 项目信息 // 项目类型
export interface ProjectType { export interface ProjectType {
id: string id: string
tab: string
name: string name: string
tab: string
} }
// 机构信息 // 机构类型
export interface OrganizationType { export interface OrganizationType {
contact_information: string
contact_name: string
id: string id: string
is_valid: 1 | 2
name: string name: string
contact_name: string
contact_information: string
validity_date: string validity_date: string
is_valid: 1 | 2
} }
// 角色信息 // 角色类型
export interface RoleType { export interface RoleType {
desc: string
id: string id: string
name: string name: string
desc: string
} }
// 权限信息 // 权限类型
export interface PermissionType { export interface PermissionType {
desc: string desc: string
effect_uris: string effect_uris: string
...@@ -50,33 +50,29 @@ export interface PermissionType { ...@@ -50,33 +50,29 @@ export interface PermissionType {
name: string name: string
parent_id: string parent_id: string
system_tag: number system_tag: number
type: number
tag: string tag: string
type: number
} }
// 课程信息 // 课程类型
export interface CourseType { export interface CourseType {
id: string
course_id: string course_id: string
semester_id: string cover: string
schedule: string credit: number
represent: string elective_type: number
watch_video_length: number id: string
is_finished: number is_finished: number
is_top: number is_top: number
lecturers?: LecturerType[]
name: string name: string
cover: string
elective_type: number
online_type: number online_type: number
section?: ChapterType
semester: SemesterType
credit: number
previous_preparation: string previous_preparation: string
represent: string
semester: SemesterType
target: string target: string
lecturers?: LecturerType[]
} }
// 章节信息 // 章节类型
export interface ChapterType { export interface ChapterType {
id: string id: string
name: string name: string
...@@ -85,7 +81,7 @@ export interface ChapterType { ...@@ -85,7 +81,7 @@ export interface ChapterType {
is_finished: number is_finished: number
} }
// 学期信息 // 学期类型
export interface SemesterType { export interface SemesterType {
id: string id: string
name: string name: string
...@@ -93,9 +89,22 @@ export interface SemesterType { ...@@ -93,9 +89,22 @@ export interface SemesterType {
end_time?: string end_time?: string
} }
// 讲师类型
export interface LecturerType { export interface LecturerType {
avatar: string
id: string id: string
name: string name: string
avatar: string
summarize: string summarize: string
} }
// 资源类型
export interface ResourceType {
id: string
knowledge_points: string
name: string
pdf?: string
url?: string
size: number
source_id: string
paper_title?: string
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论