10 Commits

  1. 299
      package-lock.json
  2. 4
      package.json
  3. 70
      src/App.vue
  4. BIN
      src/assets/buy.jpg
  5. BIN
      src/assets/enter.jpg
  6. BIN
      src/assets/false.jpg
  7. BIN
      src/assets/home.jpg
  8. BIN
      src/assets/huiche.png
  9. BIN
      src/assets/result.jpg
  10. BIN
      src/assets/return.jpg
  11. BIN
      src/assets/square.jpg
  12. BIN
      src/assets/true.jpg
  13. 10
      src/main.js
  14. 58
      src/router/index.js
  15. 42
      src/views/BuyView.vue
  16. 82
      src/views/HomeView.vue
  17. 0
      src/views/OneView.vue
  18. 435
      src/views/ProblemView.vue
  19. 350
      src/views/ReportView.vue
  20. 274
      src/views/ResultView.vue
  21. 275
      src/views/TestView.vue
  22. 1942
      src/views/TextHtml.html
  23. 851
      src/views/TextView.vue

299
package-lock.json

@ -8,8 +8,10 @@
"name": "evaluation-system", "name": "evaluation-system",
"version": "0.1.0", "version": "0.1.0",
"dependencies": { "dependencies": {
"axios": "^1.13.2",
"core-js": "^3.8.3", "core-js": "^3.8.3",
"vue": "^2.6.14"
"vue": "^2.6.14",
"vue-router": "^3.6.5"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.12.16", "@babel/core": "^7.12.16",
@ -64,6 +66,7 @@
"resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.28.5.tgz", "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.28.5.tgz",
"integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
"dev": true, "dev": true,
"peer": true,
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.27.1", "@babel/code-frame": "^7.27.1",
"@babel/generator": "^7.28.5", "@babel/generator": "^7.28.5",
@ -2445,6 +2448,7 @@
"resolved": "https://registry.npmmirror.com/@vue/cli-service/-/cli-service-5.0.9.tgz", "resolved": "https://registry.npmmirror.com/@vue/cli-service/-/cli-service-5.0.9.tgz",
"integrity": "sha512-yTX7GVyM19tEbd+y5/gA6MkVKA6K61nVYHYAivD61Hx6odVFmQsaC3/R3cWAHM1P5oVKCevBbumPljbT+tFG2w==", "integrity": "sha512-yTX7GVyM19tEbd+y5/gA6MkVKA6K61nVYHYAivD61Hx6odVFmQsaC3/R3cWAHM1P5oVKCevBbumPljbT+tFG2w==",
"dev": true, "dev": true,
"peer": true,
"dependencies": { "dependencies": {
"@babel/helper-compilation-targets": "^7.12.16", "@babel/helper-compilation-targets": "^7.12.16",
"@soda/friendly-errors-webpack-plugin": "^1.8.0", "@soda/friendly-errors-webpack-plugin": "^1.8.0",
@ -2951,6 +2955,7 @@
"resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.15.0.tgz", "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.15.0.tgz",
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"dev": true, "dev": true,
"peer": true,
"bin": { "bin": {
"acorn": "bin/acorn" "acorn": "bin/acorn"
}, },
@ -3005,6 +3010,7 @@
"resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true, "dev": true,
"peer": true,
"dependencies": { "dependencies": {
"fast-deep-equal": "^3.1.1", "fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0", "fast-json-stable-stringify": "^2.0.0",
@ -3196,6 +3202,12 @@
"integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
"dev": true "dev": true
}, },
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
"license": "MIT"
},
"node_modules/at-least-node": { "node_modules/at-least-node": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz", "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz",
@ -3242,6 +3254,17 @@
"postcss": "^8.1.0" "postcss": "^8.1.0"
} }
}, },
"node_modules/axios": {
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz",
"integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==",
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.6",
"form-data": "^4.0.4",
"proxy-from-env": "^1.1.0"
}
},
"node_modules/babel-loader": { "node_modules/babel-loader": {
"version": "8.4.1", "version": "8.4.1",
"resolved": "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.4.1.tgz", "resolved": "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.4.1.tgz",
@ -3498,6 +3521,7 @@
"url": "https://github.com/sponsors/ai" "url": "https://github.com/sponsors/ai"
} }
], ],
"peer": true,
"dependencies": { "dependencies": {
"baseline-browser-mapping": "^2.8.19", "baseline-browser-mapping": "^2.8.19",
"caniuse-lite": "^1.0.30001751", "caniuse-lite": "^1.0.30001751",
@ -3573,7 +3597,6 @@
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
"dev": true,
"dependencies": { "dependencies": {
"es-errors": "^1.3.0", "es-errors": "^1.3.0",
"function-bind": "^1.1.2" "function-bind": "^1.1.2"
@ -3882,6 +3905,18 @@
"integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
"dev": true "dev": true
}, },
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"license": "MIT",
"dependencies": {
"delayed-stream": "~1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/commander": { "node_modules/commander": {
"version": "8.3.0", "version": "8.3.0",
"resolved": "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz", "resolved": "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz",
@ -4141,6 +4176,7 @@
"resolved": "https://registry.npmmirror.com/css-loader/-/css-loader-6.11.0.tgz", "resolved": "https://registry.npmmirror.com/css-loader/-/css-loader-6.11.0.tgz",
"integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==",
"dev": true, "dev": true,
"peer": true,
"dependencies": { "dependencies": {
"icss-utils": "^5.1.0", "icss-utils": "^5.1.0",
"postcss": "^8.4.33", "postcss": "^8.4.33",
@ -4226,6 +4262,7 @@
"resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true, "dev": true,
"peer": true,
"dependencies": { "dependencies": {
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1", "fast-uri": "^3.0.1",
@ -4649,6 +4686,15 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"license": "MIT",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/depd": { "node_modules/depd": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz", "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz",
@ -4812,7 +4858,6 @@
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz",
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
"dev": true,
"dependencies": { "dependencies": {
"call-bind-apply-helpers": "^1.0.1", "call-bind-apply-helpers": "^1.0.1",
"es-errors": "^1.3.0", "es-errors": "^1.3.0",
@ -4942,7 +4987,6 @@
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz",
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
"dev": true,
"engines": { "engines": {
"node": ">= 0.4" "node": ">= 0.4"
} }
@ -4951,7 +4995,6 @@
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz",
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
"dev": true,
"engines": { "engines": {
"node": ">= 0.4" "node": ">= 0.4"
} }
@ -4966,7 +5009,6 @@
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
"dev": true,
"dependencies": { "dependencies": {
"es-errors": "^1.3.0" "es-errors": "^1.3.0"
}, },
@ -4974,6 +5016,21 @@
"node": ">= 0.4" "node": ">= 0.4"
} }
}, },
"node_modules/es-set-tostringtag": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"get-intrinsic": "^1.2.6",
"has-tostringtag": "^1.0.2",
"hasown": "^2.0.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/escalade": { "node_modules/escalade": {
"version": "3.2.0", "version": "3.2.0",
"resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz", "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz",
@ -5004,6 +5061,7 @@
"integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
"deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
"dev": true, "dev": true,
"peer": true,
"dependencies": { "dependencies": {
"@babel/code-frame": "7.12.11", "@babel/code-frame": "7.12.11",
"@eslint/eslintrc": "^0.4.3", "@eslint/eslintrc": "^0.4.3",
@ -5181,6 +5239,7 @@
"resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true, "dev": true,
"peer": true,
"dependencies": { "dependencies": {
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1", "fast-uri": "^3.0.1",
@ -5828,7 +5887,6 @@
"version": "1.15.11", "version": "1.15.11",
"resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.11.tgz", "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.11.tgz",
"integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
"dev": true,
"funding": [ "funding": [
{ {
"type": "individual", "type": "individual",
@ -5844,6 +5902,22 @@
} }
} }
}, },
"node_modules/form-data": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
"integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
"license": "MIT",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"es-set-tostringtag": "^2.1.0",
"hasown": "^2.0.2",
"mime-types": "^2.1.12"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/forwarded": { "node_modules/forwarded": {
"version": "0.2.0", "version": "0.2.0",
"resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz", "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz",
@ -5920,7 +5994,6 @@
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz",
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
"dev": true,
"funding": { "funding": {
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
@ -5953,7 +6026,6 @@
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
"dev": true,
"dependencies": { "dependencies": {
"call-bind-apply-helpers": "^1.0.2", "call-bind-apply-helpers": "^1.0.2",
"es-define-property": "^1.0.1", "es-define-property": "^1.0.1",
@ -5977,7 +6049,6 @@
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz",
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
"dev": true,
"dependencies": { "dependencies": {
"dunder-proto": "^1.0.1", "dunder-proto": "^1.0.1",
"es-object-atoms": "^1.0.0" "es-object-atoms": "^1.0.0"
@ -6088,7 +6159,6 @@
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz",
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
"dev": true,
"engines": { "engines": {
"node": ">= 0.4" "node": ">= 0.4"
}, },
@ -6148,7 +6218,21 @@
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz",
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
"dev": true,
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-tostringtag": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
"license": "MIT",
"dependencies": {
"has-symbols": "^1.0.3"
},
"engines": { "engines": {
"node": ">= 0.4" "node": ">= 0.4"
}, },
@ -6166,7 +6250,6 @@
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz", "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"dev": true,
"dependencies": { "dependencies": {
"function-bind": "^1.1.2" "function-bind": "^1.1.2"
}, },
@ -7241,7 +7324,6 @@
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
"dev": true,
"engines": { "engines": {
"node": ">= 0.4" "node": ">= 0.4"
} }
@ -7344,7 +7426,6 @@
"version": "1.52.0", "version": "1.52.0",
"resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"dev": true,
"engines": { "engines": {
"node": ">= 0.6" "node": ">= 0.6"
} }
@ -7353,7 +7434,6 @@
"version": "2.1.35", "version": "2.1.35",
"resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"dev": true,
"dependencies": { "dependencies": {
"mime-db": "1.52.0" "mime-db": "1.52.0"
}, },
@ -7395,6 +7475,7 @@
"resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true, "dev": true,
"peer": true,
"dependencies": { "dependencies": {
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1", "fast-uri": "^3.0.1",
@ -8126,6 +8207,7 @@
"url": "https://github.com/sponsors/ai" "url": "https://github.com/sponsors/ai"
} }
], ],
"peer": true,
"dependencies": { "dependencies": {
"nanoid": "^3.3.11", "nanoid": "^3.3.11",
"picocolors": "^1.1.1", "picocolors": "^1.1.1",
@ -8828,6 +8910,12 @@
"node": ">= 0.10" "node": ">= 0.10"
} }
}, },
"node_modules/proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
"license": "MIT"
},
"node_modules/pseudomap": { "node_modules/pseudomap": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz", "resolved": "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz",
@ -10004,6 +10092,7 @@
"resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true, "dev": true,
"peer": true,
"dependencies": { "dependencies": {
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1", "fast-uri": "^3.0.1",
@ -10524,6 +10613,12 @@
"url": "https://github.com/chalk/chalk?sponsor=1" "url": "https://github.com/chalk/chalk?sponsor=1"
} }
}, },
"node_modules/vue-router": {
"version": "3.6.5",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.6.5.tgz",
"integrity": "sha512-VYXZQLtjuvKxxcshuRAwjHnciqZVoXAjTjcqBTz4rKc8qih9g9pI3hbDjmqXaHdgL3v8pV6P8Z335XvHzESxLQ==",
"license": "MIT"
},
"node_modules/vue-style-loader": { "node_modules/vue-style-loader": {
"version": "4.1.3", "version": "4.1.3",
"resolved": "https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz", "resolved": "https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz",
@ -10545,6 +10640,7 @@
"resolved": "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", "resolved": "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz",
"integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==",
"dev": true, "dev": true,
"peer": true,
"dependencies": { "dependencies": {
"de-indent": "^1.0.2", "de-indent": "^1.0.2",
"he": "^1.2.0" "he": "^1.2.0"
@ -10611,6 +10707,7 @@
"resolved": "https://registry.npmmirror.com/webpack/-/webpack-5.102.1.tgz", "resolved": "https://registry.npmmirror.com/webpack/-/webpack-5.102.1.tgz",
"integrity": "sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==", "integrity": "sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==",
"dev": true, "dev": true,
"peer": true,
"dependencies": { "dependencies": {
"@types/eslint-scope": "^3.7.7", "@types/eslint-scope": "^3.7.7",
"@types/estree": "^1.0.8", "@types/estree": "^1.0.8",
@ -10743,6 +10840,7 @@
"resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true, "dev": true,
"peer": true,
"dependencies": { "dependencies": {
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1", "fast-uri": "^3.0.1",
@ -10855,6 +10953,7 @@
"resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true, "dev": true,
"peer": true,
"dependencies": { "dependencies": {
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1", "fast-uri": "^3.0.1",
@ -10958,6 +11057,7 @@
"resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true, "dev": true,
"peer": true,
"dependencies": { "dependencies": {
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1", "fast-uri": "^3.0.1",
@ -11281,6 +11381,7 @@
"resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.28.5.tgz", "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.28.5.tgz",
"integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
"dev": true, "dev": true,
"peer": true,
"requires": { "requires": {
"@babel/code-frame": "^7.27.1", "@babel/code-frame": "^7.27.1",
"@babel/generator": "^7.28.5", "@babel/generator": "^7.28.5",
@ -11651,7 +11752,8 @@
"version": "7.21.0-placeholder-for-preset-env.2", "version": "7.21.0-placeholder-for-preset-env.2",
"resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
"integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
"dev": true
"dev": true,
"requires": {}
}, },
"@babel/plugin-syntax-decorators": { "@babel/plugin-syntax-decorators": {
"version": "7.27.1", "version": "7.27.1",
@ -13026,13 +13128,15 @@
"version": "5.0.9", "version": "5.0.9",
"resolved": "https://registry.npmmirror.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.9.tgz", "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.9.tgz",
"integrity": "sha512-AQhgGNFVd4Pu2crvS0a+hRckgrJv07gzOASdbLd3I72wkT43dd01MLRp8IBRRsu92t3MXenW86AZUCbQBz3//A==", "integrity": "sha512-AQhgGNFVd4Pu2crvS0a+hRckgrJv07gzOASdbLd3I72wkT43dd01MLRp8IBRRsu92t3MXenW86AZUCbQBz3//A==",
"dev": true
"dev": true,
"requires": {}
}, },
"@vue/cli-service": { "@vue/cli-service": {
"version": "5.0.9", "version": "5.0.9",
"resolved": "https://registry.npmmirror.com/@vue/cli-service/-/cli-service-5.0.9.tgz", "resolved": "https://registry.npmmirror.com/@vue/cli-service/-/cli-service-5.0.9.tgz",
"integrity": "sha512-yTX7GVyM19tEbd+y5/gA6MkVKA6K61nVYHYAivD61Hx6odVFmQsaC3/R3cWAHM1P5oVKCevBbumPljbT+tFG2w==", "integrity": "sha512-yTX7GVyM19tEbd+y5/gA6MkVKA6K61nVYHYAivD61Hx6odVFmQsaC3/R3cWAHM1P5oVKCevBbumPljbT+tFG2w==",
"dev": true, "dev": true,
"peer": true,
"requires": { "requires": {
"@babel/helper-compilation-targets": "^7.12.16", "@babel/helper-compilation-targets": "^7.12.16",
"@soda/friendly-errors-webpack-plugin": "^1.8.0", "@soda/friendly-errors-webpack-plugin": "^1.8.0",
@ -13464,19 +13568,22 @@
"version": "8.15.0", "version": "8.15.0",
"resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.15.0.tgz", "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.15.0.tgz",
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"dev": true
"dev": true,
"peer": true
}, },
"acorn-import-phases": { "acorn-import-phases": {
"version": "1.0.4", "version": "1.0.4",
"resolved": "https://registry.npmmirror.com/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", "resolved": "https://registry.npmmirror.com/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz",
"integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==",
"dev": true
"dev": true,
"requires": {}
}, },
"acorn-jsx": { "acorn-jsx": {
"version": "5.3.2", "version": "5.3.2",
"resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"dev": true
"dev": true,
"requires": {}
}, },
"acorn-walk": { "acorn-walk": {
"version": "8.3.4", "version": "8.3.4",
@ -13498,6 +13605,7 @@
"resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true, "dev": true,
"peer": true,
"requires": { "requires": {
"fast-deep-equal": "^3.1.1", "fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0", "fast-json-stable-stringify": "^2.0.0",
@ -13538,7 +13646,8 @@
"version": "3.5.2", "version": "3.5.2",
"resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
"dev": true
"dev": true,
"requires": {}
}, },
"ansi-colors": { "ansi-colors": {
"version": "4.1.3", "version": "4.1.3",
@ -13628,6 +13737,11 @@
"integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
"dev": true "dev": true
}, },
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"at-least-node": { "at-least-node": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz", "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz",
@ -13648,6 +13762,16 @@
"postcss-value-parser": "^4.2.0" "postcss-value-parser": "^4.2.0"
} }
}, },
"axios": {
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz",
"integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==",
"requires": {
"follow-redirects": "^1.15.6",
"form-data": "^4.0.4",
"proxy-from-env": "^1.1.0"
}
},
"babel-loader": { "babel-loader": {
"version": "8.4.1", "version": "8.4.1",
"resolved": "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.4.1.tgz", "resolved": "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.4.1.tgz",
@ -13842,6 +13966,7 @@
"resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.27.0.tgz", "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.27.0.tgz",
"integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==", "integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==",
"dev": true, "dev": true,
"peer": true,
"requires": { "requires": {
"baseline-browser-mapping": "^2.8.19", "baseline-browser-mapping": "^2.8.19",
"caniuse-lite": "^1.0.30001751", "caniuse-lite": "^1.0.30001751",
@ -13888,7 +14013,6 @@
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
"dev": true,
"requires": { "requires": {
"es-errors": "^1.3.0", "es-errors": "^1.3.0",
"function-bind": "^1.1.2" "function-bind": "^1.1.2"
@ -14115,6 +14239,14 @@
"integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
"dev": true "dev": true
}, },
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"requires": {
"delayed-stream": "~1.0.0"
}
},
"commander": { "commander": {
"version": "8.3.0", "version": "8.3.0",
"resolved": "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz", "resolved": "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz",
@ -14307,13 +14439,15 @@
"version": "6.4.1", "version": "6.4.1",
"resolved": "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", "resolved": "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz",
"integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==",
"dev": true
"dev": true,
"requires": {}
}, },
"css-loader": { "css-loader": {
"version": "6.11.0", "version": "6.11.0",
"resolved": "https://registry.npmmirror.com/css-loader/-/css-loader-6.11.0.tgz", "resolved": "https://registry.npmmirror.com/css-loader/-/css-loader-6.11.0.tgz",
"integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==",
"dev": true, "dev": true,
"peer": true,
"requires": { "requires": {
"icss-utils": "^5.1.0", "icss-utils": "^5.1.0",
"postcss": "^8.4.33", "postcss": "^8.4.33",
@ -14352,6 +14486,7 @@
"resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true, "dev": true,
"peer": true,
"requires": { "requires": {
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1", "fast-uri": "^3.0.1",
@ -14475,7 +14610,8 @@
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmmirror.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz", "resolved": "https://registry.npmmirror.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz",
"integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==",
"dev": true
"dev": true,
"requires": {}
}, },
"csso": { "csso": {
"version": "4.2.0", "version": "4.2.0",
@ -14651,6 +14787,11 @@
"object-keys": "^1.1.1" "object-keys": "^1.1.1"
} }
}, },
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
},
"depd": { "depd": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz", "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz",
@ -14776,7 +14917,6 @@
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz",
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
"dev": true,
"requires": { "requires": {
"call-bind-apply-helpers": "^1.0.1", "call-bind-apply-helpers": "^1.0.1",
"es-errors": "^1.3.0", "es-errors": "^1.3.0",
@ -14881,14 +15021,12 @@
"es-define-property": { "es-define-property": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz",
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
"dev": true
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="
}, },
"es-errors": { "es-errors": {
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz",
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
"dev": true
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="
}, },
"es-module-lexer": { "es-module-lexer": {
"version": "1.7.0", "version": "1.7.0",
@ -14900,11 +15038,21 @@
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
"dev": true,
"requires": { "requires": {
"es-errors": "^1.3.0" "es-errors": "^1.3.0"
} }
}, },
"es-set-tostringtag": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
"requires": {
"es-errors": "^1.3.0",
"get-intrinsic": "^1.2.6",
"has-tostringtag": "^1.0.2",
"hasown": "^2.0.2"
}
},
"escalade": { "escalade": {
"version": "3.2.0", "version": "3.2.0",
"resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz", "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz",
@ -14928,6 +15076,7 @@
"resolved": "https://registry.npmmirror.com/eslint/-/eslint-7.32.0.tgz", "resolved": "https://registry.npmmirror.com/eslint/-/eslint-7.32.0.tgz",
"integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
"dev": true, "dev": true,
"peer": true,
"requires": { "requires": {
"@babel/code-frame": "7.12.11", "@babel/code-frame": "7.12.11",
"@eslint/eslintrc": "^0.4.3", "@eslint/eslintrc": "^0.4.3",
@ -15142,6 +15291,7 @@
"resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true, "dev": true,
"peer": true,
"requires": { "requires": {
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1", "fast-uri": "^3.0.1",
@ -15548,8 +15698,19 @@
"follow-redirects": { "follow-redirects": {
"version": "1.15.11", "version": "1.15.11",
"resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.11.tgz", "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.11.tgz",
"integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
"dev": true
"integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="
},
"form-data": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
"integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"es-set-tostringtag": "^2.1.0",
"hasown": "^2.0.2",
"mime-types": "^2.1.12"
}
}, },
"forwarded": { "forwarded": {
"version": "0.2.0", "version": "0.2.0",
@ -15603,8 +15764,7 @@
"function-bind": { "function-bind": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz",
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
"dev": true
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
}, },
"functional-red-black-tree": { "functional-red-black-tree": {
"version": "1.0.1", "version": "1.0.1",
@ -15628,7 +15788,6 @@
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
"dev": true,
"requires": { "requires": {
"call-bind-apply-helpers": "^1.0.2", "call-bind-apply-helpers": "^1.0.2",
"es-define-property": "^1.0.1", "es-define-property": "^1.0.1",
@ -15646,7 +15805,6 @@
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz",
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
"dev": true,
"requires": { "requires": {
"dunder-proto": "^1.0.1", "dunder-proto": "^1.0.1",
"es-object-atoms": "^1.0.0" "es-object-atoms": "^1.0.0"
@ -15724,8 +15882,7 @@
"gopd": { "gopd": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz",
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
"dev": true
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="
}, },
"graceful-fs": { "graceful-fs": {
"version": "4.2.11", "version": "4.2.11",
@ -15766,8 +15923,15 @@
"has-symbols": { "has-symbols": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz",
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
"dev": true
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="
},
"has-tostringtag": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
"requires": {
"has-symbols": "^1.0.3"
}
}, },
"hash-sum": { "hash-sum": {
"version": "2.0.0", "version": "2.0.0",
@ -15779,7 +15943,6 @@
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz", "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"dev": true,
"requires": { "requires": {
"function-bind": "^1.1.2" "function-bind": "^1.1.2"
} }
@ -15980,7 +16143,8 @@
"version": "5.1.0", "version": "5.1.0",
"resolved": "https://registry.npmmirror.com/icss-utils/-/icss-utils-5.1.0.tgz", "resolved": "https://registry.npmmirror.com/icss-utils/-/icss-utils-5.1.0.tgz",
"integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
"dev": true
"dev": true,
"requires": {}
}, },
"ieee754": { "ieee754": {
"version": "1.2.1", "version": "1.2.1",
@ -16584,8 +16748,7 @@
"math-intrinsics": { "math-intrinsics": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
"dev": true
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="
}, },
"mdn-data": { "mdn-data": {
"version": "2.0.14", "version": "2.0.14",
@ -16660,14 +16823,12 @@
"mime-db": { "mime-db": {
"version": "1.52.0", "version": "1.52.0",
"resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"dev": true
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
}, },
"mime-types": { "mime-types": {
"version": "2.1.35", "version": "2.1.35",
"resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"dev": true,
"requires": { "requires": {
"mime-db": "1.52.0" "mime-db": "1.52.0"
} }
@ -16693,6 +16854,7 @@
"resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true, "dev": true,
"peer": true,
"requires": { "requires": {
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1", "fast-uri": "^3.0.1",
@ -17233,6 +17395,7 @@
"version": "8.5.6", "version": "8.5.6",
"resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz", "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz",
"integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"peer": true,
"requires": { "requires": {
"nanoid": "^3.3.11", "nanoid": "^3.3.11",
"picocolors": "^1.1.1", "picocolors": "^1.1.1",
@ -17275,25 +17438,29 @@
"version": "5.1.2", "version": "5.1.2",
"resolved": "https://registry.npmmirror.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", "resolved": "https://registry.npmmirror.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz",
"integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==",
"dev": true
"dev": true,
"requires": {}
}, },
"postcss-discard-duplicates": { "postcss-discard-duplicates": {
"version": "5.1.0", "version": "5.1.0",
"resolved": "https://registry.npmmirror.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", "resolved": "https://registry.npmmirror.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz",
"integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==",
"dev": true
"dev": true,
"requires": {}
}, },
"postcss-discard-empty": { "postcss-discard-empty": {
"version": "5.1.1", "version": "5.1.1",
"resolved": "https://registry.npmmirror.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", "resolved": "https://registry.npmmirror.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz",
"integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==",
"dev": true
"dev": true,
"requires": {}
}, },
"postcss-discard-overridden": { "postcss-discard-overridden": {
"version": "5.1.0", "version": "5.1.0",
"resolved": "https://registry.npmmirror.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", "resolved": "https://registry.npmmirror.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz",
"integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==",
"dev": true
"dev": true,
"requires": {}
}, },
"postcss-loader": { "postcss-loader": {
"version": "6.2.1", "version": "6.2.1",
@ -17380,7 +17547,8 @@
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmmirror.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", "resolved": "https://registry.npmmirror.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz",
"integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==",
"dev": true
"dev": true,
"requires": {}
}, },
"postcss-modules-local-by-default": { "postcss-modules-local-by-default": {
"version": "4.2.0", "version": "4.2.0",
@ -17439,7 +17607,8 @@
"version": "5.1.0", "version": "5.1.0",
"resolved": "https://registry.npmmirror.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", "resolved": "https://registry.npmmirror.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz",
"integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==",
"dev": true
"dev": true,
"requires": {}
}, },
"postcss-normalize-display-values": { "postcss-normalize-display-values": {
"version": "5.1.0", "version": "5.1.0",
@ -17694,6 +17863,11 @@
} }
} }
}, },
"proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
},
"pseudomap": { "pseudomap": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz", "resolved": "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz",
@ -18572,6 +18746,7 @@
"resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true, "dev": true,
"peer": true,
"requires": { "requires": {
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1", "fast-uri": "^3.0.1",
@ -18951,6 +19126,11 @@
} }
} }
}, },
"vue-router": {
"version": "3.6.5",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.6.5.tgz",
"integrity": "sha512-VYXZQLtjuvKxxcshuRAwjHnciqZVoXAjTjcqBTz4rKc8qih9g9pI3hbDjmqXaHdgL3v8pV6P8Z335XvHzESxLQ=="
},
"vue-style-loader": { "vue-style-loader": {
"version": "4.1.3", "version": "4.1.3",
"resolved": "https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz", "resolved": "https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz",
@ -18974,6 +19154,7 @@
"resolved": "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", "resolved": "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz",
"integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==",
"dev": true, "dev": true,
"peer": true,
"requires": { "requires": {
"de-indent": "^1.0.2", "de-indent": "^1.0.2",
"he": "^1.2.0" "he": "^1.2.0"
@ -19024,6 +19205,7 @@
"resolved": "https://registry.npmmirror.com/webpack/-/webpack-5.102.1.tgz", "resolved": "https://registry.npmmirror.com/webpack/-/webpack-5.102.1.tgz",
"integrity": "sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==", "integrity": "sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==",
"dev": true, "dev": true,
"peer": true,
"requires": { "requires": {
"@types/eslint-scope": "^3.7.7", "@types/eslint-scope": "^3.7.7",
"@types/estree": "^1.0.8", "@types/estree": "^1.0.8",
@ -19057,6 +19239,7 @@
"resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true, "dev": true,
"peer": true,
"requires": { "requires": {
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1", "fast-uri": "^3.0.1",
@ -19155,6 +19338,7 @@
"resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true, "dev": true,
"peer": true,
"requires": { "requires": {
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1", "fast-uri": "^3.0.1",
@ -19234,6 +19418,7 @@
"resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true, "dev": true,
"peer": true,
"requires": { "requires": {
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1", "fast-uri": "^3.0.1",
@ -19272,7 +19457,8 @@
"version": "8.18.3", "version": "8.18.3",
"resolved": "https://registry.npmmirror.com/ws/-/ws-8.18.3.tgz", "resolved": "https://registry.npmmirror.com/ws/-/ws-8.18.3.tgz",
"integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
"dev": true
"dev": true,
"requires": {}
} }
} }
}, },
@ -19374,7 +19560,8 @@
"version": "7.5.10", "version": "7.5.10",
"resolved": "https://registry.npmmirror.com/ws/-/ws-7.5.10.tgz", "resolved": "https://registry.npmmirror.com/ws/-/ws-7.5.10.tgz",
"integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
"dev": true
"dev": true,
"requires": {}
}, },
"y18n": { "y18n": {
"version": "5.0.8", "version": "5.0.8",

4
package.json

@ -8,8 +8,10 @@
"lint": "vue-cli-service lint" "lint": "vue-cli-service lint"
}, },
"dependencies": { "dependencies": {
"axios": "^1.13.2",
"core-js": "^3.8.3", "core-js": "^3.8.3",
"vue": "^2.6.14"
"vue": "^2.6.14",
"vue-router": "^3.6.5"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.12.16", "@babel/core": "^7.12.16",

70
src/App.vue

@ -1,28 +1,66 @@
<template> <template>
<div id="app">
<img alt="Vue logo" src="./assets/logo.png">
<HelloWorld msg="Welcome to Your Vue.js App"/>
<div>
<!-- <router-link to="/test" class="center">
<span class="text">进入测试系统</span>
</router-link> -->
<router-view></router-view>
</div> </div>
</template> </template>
<script> <script>
import HelloWorld from './components/HelloWorld.vue'
export default { export default {
name: 'App', name: 'App',
components: {
HelloWorld
data() {
return {
activeTab: 'question'
}
} }
} }
</script> </script>
<style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
<style scoped>
/* * {
margin: 0;
padding: 0;
box-sizing: border-box;
}
div{
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
background: #f5f5f5;
}
.center{
width: 300px;
height: 120px;
background: linear-gradient(135deg, #667eea 0%, #000000 100%);
border-radius: 15px;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
transition: all 0.3s ease;
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15);
border: 2px solid #2c3e50;
text-decoration: none;
}
.center:hover {
transform: translateY(-5px);
box-shadow: 0 12px 35px rgba(0, 0, 0, 0.2);
background: linear-gradient(135deg, #764ba2 0%, #000000 100%);
text-decoration: none;
} }
</style>
.text {
color: white;
font-size: 20px;
font-weight: bold;
text-align: center;
text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.5);
user-select: none;
} */
</style>

BIN
src/assets/buy.jpg

After

Width: 1920  |  Height: 970  |  Size: 593 KiB

BIN
src/assets/enter.jpg

After

Width: 792  |  Height: 159  |  Size: 54 KiB

BIN
src/assets/false.jpg

After

Width: 518  |  Height: 349  |  Size: 33 KiB

BIN
src/assets/home.jpg

After

Width: 1920  |  Height: 1040  |  Size: 713 KiB

BIN
src/assets/huiche.png

After

Width: 45  |  Height: 45  |  Size: 3.2 KiB

BIN
src/assets/result.jpg

After

Width: 485  |  Height: 397  |  Size: 34 KiB

BIN
src/assets/return.jpg

After

Width: 102  |  Height: 129  |  Size: 5.2 KiB

BIN
src/assets/square.jpg

After

Width: 452  |  Height: 273  |  Size: 34 KiB

BIN
src/assets/true.jpg

After

Width: 490  |  Height: 341  |  Size: 31 KiB

10
src/main.js

@ -1,8 +1,18 @@
import Vue from 'vue' import Vue from 'vue'
import App from './App.vue' import App from './App.vue'
// import router from '../src/router/index'
import router from './router/index'
import axios from 'axios'
// 配置 axios
Vue.prototype.$axios = axios
// 可选:配置默认 baseURL
axios.defaults.baseURL = 'http://192.168.40.41:8000'
Vue.config.productionTip = false Vue.config.productionTip = false
new Vue({ new Vue({
router,
render: h => h(App), render: h => h(App),
}).$mount('#app') }).$mount('#app')

58
src/router/index.js

@ -0,0 +1,58 @@
import Vue from 'vue'
import VueRouter from 'vue-router'
import TestView from '@/views/TestView.vue'
import TextView from '@/views/TextView.vue'
import ReportView from '@/views/ReportView.vue'
import ProblemView from '@/views/ProblemView.vue'
import ResultView from '@/views/ResultView.vue'
// import { component } from 'vue/types/umd'
import HomeView from '@/views/HomeView.vue'
import BuyView from '@/views/BuyView.vue'
Vue.use(VueRouter)
const routes = [
{
path: '/',
name: 'HomeView',
component: HomeView
},
{
path: '/test',
name: 'TestView',
component: TestView
},
{
path: '/text',
name: 'TextView',
component: TextView
},
{
path: '/result',
name: 'ResultView',
component: ResultView
},
{
path: '/report',
name: 'ReportView',
component: ReportView
},
{
path: '/buy',
name: 'BuyView',
component: BuyView
},
{
path: '/problem',
name: 'ProblemView',
component: ProblemView
}
]
const router = new VueRouter({
mode: 'history',
base: process.env.BASE_URL,
routes
})
export default router

42
src/views/BuyView.vue

@ -0,0 +1,42 @@
<template>
<div class="home">
<div class="enter" @click="enter">
<img src="../assets/huiche.png" alt="返回上一页" class="img1">
</div>
</div>
</template>
<script>
export default{
name:'BuyView',
data(){
return{
};
},
methods:{
enter(){
this.$router.push({
name:'ReportView'
})
}
}
}
</script>
<style scoped>
.home{
width: 100%;
height: 100%;
background-image: url('@/assets/buy.jpg');
color: white;
padding: 20px;
}
.enter{
position: relative;
top: 45px;
left: 360px;
}
.img1{
width: 70px;
height: 60px;
}
</style>

82
src/views/HomeView.vue

@ -0,0 +1,82 @@
<template>
<div class="home">
<img src="../assets/enter.jpg" alt="进入测试" class="image" @click="jumpPage">
</div>
</template>
<script>
import axios from 'axios';
export default {
name: 'App',
data() {
return {
activeTab: 'question'
}
},
methods:{
async jumpPage(){
const submissionData={
// jwcode:91000001,//
// jwcode:90098888,//
// jwcode:90098889,//
// jwcode:90098890,//
// jwcode:90098891,//
jwcode:90098892,//
// jwcode:90098893,//
// jwcode:90098894,//
};
localStorage.setItem('submissionData', JSON.stringify(submissionData));
console.log('存储的数据:', localStorage.getItem('submissionData'));
try{
const res = await axios.post('http://192.168.40.41:8000/api/knowledge/scores',submissionData);
this.score = res.data.data[0].score;
console.log(this.score);
if(this.score==null){
this.$router.push('/text');
}
else{
this.$router.push('/report');
}
}catch(err){
this.$router.push('/text');
}
}
},
async mounted(){
localStorage.removeItem('submissionData');
},
}
</script>
<style scoped>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.home {
position: relative;
min-height: 100vh;
display: flex;
background-image: url('@/assets/home.jpg');
background-size: cover;
background-position: center;
}
.image {
position: absolute;
width: 200px;
min-height: 160px;
max-height: 160px;
object-fit: contain;
bottom: 70px;
left: 682px;
/* left: 35.5%; */
}
.image:hover {
transform: scale(1.2);
filter: brightness(1.1);
}
</style>

0
src/views/OneView.vue

435
src/views/ProblemView.vue

@ -0,0 +1,435 @@
<script>
import axios from 'axios';
export default {
data() {
return {
problems: [],
showDialog: false,
currentPage: 1,
answers:{},
page:1,
}
},
computed:{
currentProblem() {
if (!this.problems || !this.problems.slice) {
return null;
}
const startIndex = (this.currentPage - 1) * 2;
return this.problems.slice(startIndex, startIndex + 2);
},
},
methods: {
jump() {
this.showDialog = true;
},
closeDialog() {
this.showDialog = false;
},
confirmExit() {
this.showDialog = false;
this.$router.push({ name: 'ReportView' });
},
async problemAnswers() {
const savedData = JSON.parse(localStorage.getItem('submissionData'));
console.log('第一个,存储的数据:', savedData.jwcode);
const submission = {
jwcode: savedData.jwcode
};
try{
const response = await axios.post('http://192.168.40.41:8000/api/knowledge/wrong-questions',submission);
this.problems = response.data.data.list;
console.log("完整响应:", response);
}catch(error){
console.error('获取错误问题失败:', error);
}
},
before(){
if(this.currentPage > 1){
this.currentPage--;
}
if(this.currentPage < 13){
this.page=1;
}
},
next(){
if(this.currentPage < 25){
this.currentPage++;
}
if(this.currentPage > 13){
this.page=2;
}
},
setAnswer(id, val) {
this.answers[id] = val;
},
getAnswer(id) {
return this.answers[id];
},
rightBefore(){
this.page=1;
},
rightNext(){
this.page=2;
},
toQuestion(index){
this.currentPage = Math.ceil(index/2);
},
getOption(problem,option) {
const userAnswer = problem.userAnswer;
const correctAnswer = problem.correctAnswer;
if(userAnswer === option){
if(correctAnswer !== option){
return 'red';
}
}
if (correctAnswer === option) {
return 'green';
}
},
getNumber(problem) {
if (!problem) return;
const userAnswer = problem.userAnswer;
const correctAnswer = problem.correctAnswer;
if (correctAnswer !== userAnswer) {
return 'red';
}
if (correctAnswer === userAnswer) {
return 'answered';
}
}
},
async mounted(){
await this.problemAnswers();
}
}
</script>
<template>
<div class="home">
<div class="top">
<div class="img-top" @click="jump">
<img src="../assets/return.jpg" alt="返回" class="img1">
</div>
<span>
<h1>📈股票知识评测系统</h1>
</span>
<p>全方面评估您的股票投资知识水平获取个性化学习建议</p>
</div>
<div class="popup-all popup-background" v-if="showDialog">
<div class="popup-content">
<h3>确认提示</h3>
<p>确定返回报告吗</p>
<div class="popup-buttons">
<button class="cancel-btn" @click="closeDialog">取消</button>
<button class="confirm-btn" @click="confirmExit">确定</button>
</div>
</div>
</div>
<div class="content">
<div class="block"></div>
<div class="question-all">
<div v-for="problem in currentProblem" :key="problem.id" class="left-question-card" >
<div class="question">
<span class="text">{{problem.question.id}}</span>{{ problem.question.stem }}
</div>
<div class="options">
<label class="option" :class="[{ 'selected': getAnswer(problem.question.id) === 'A' }, getOption(problem, 'A')]">
<input type="radio" :name="'answer' + problem.question.id" value="A"><span class="label">A. {{ problem.question.A }}</span>
</label>
<label class="option" :class="[{ 'selected': getAnswer(problem.question.id) === 'B' }, getOption(problem, 'B')]">
<input type="radio" :name="'answer' + problem.question.id" value="B"><span class="label">B. {{ problem.question.B }}</span>
</label>
<label class="option" :class="[{ 'selected': getAnswer(problem.question.id) === 'C' }, getOption(problem, 'C')]">
<input type="radio" :name="'answer' + problem.question.id" value="C"><span class="label">C. {{ problem.question.C }}</span>
</label>
<label class="option" :class="[{ 'selected': getAnswer(problem.question.id) === 'D' }, getOption(problem, 'D')]">
<input type="radio" :name="'answer' + problem.question.id" value="D"><span class="label">D. {{ problem.question.D }}</span>
</label>
</div>
</div>
</div>
<div class="buttons-left">
<button class="before-btn" @click="before" :disabled="currentPage === 1">
上一页
</button>
<span class="page"> {{ currentPage }} / 25 </span>
<button class="next-btn" @click="next" :disabled="currentPage === 25">
下一页
</button>
</div>
</div>
<div class="right">
<h3>📝 题目导航</h3>
<div class="right-question-card" v-show="page===1">
<div class="question-number normal" v-for="i in 25" :key="i" @click="toQuestion(i)" :class="getNumber(problems[i - 1])">
<span class="question-text">{{ i }}</span>
</div>
</div>
<div class="right-question-card" v-show="page===2">
<div class="question-number normal" v-for="i in 25" :key="i+25" @click="toQuestion(i+25)" :class="getNumber(problems[i + 24])">
<span class="question-text">{{ i+25 }}</span>
</div>
</div>
<div class="button-right">
<button class="right-before-btn" @click="rightBefore">上一页</button>
<button class="right-next-btn" @click="rightNext">下一页</button>
</div>
</div>
<div class="button-right-bottom">
<button class="right-bottom-btn" @click="jump">退出</button>
</div>
</div>
</template>
<style scoped>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.home{
min-height: 100vh;
width: 100%;
background-color: #24293c;
overflow:auto;
padding: 10px;
}
.top{
background:#0c4a6e;
color: white;
padding: 30px;
margin-bottom: 10px;
position: relative;
}
.img-top{
float: left;
}
.img-top:hover{
transform: scale(1.1);
}
.img1{
width: 30px;
height: 50px;
float: left;
}
h1{
margin-bottom: 10px;
background: none;
font-size: 2.2em;
}
p{
font-size: 1.2em;
margin-bottom: 10px;
background: none;
}
.popup-all{
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
z-index: 1000;
}
.popup-background{
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 125%;
background: rgba(0, 0, 0, 0.5);
backdrop-filter: blur(5px);
}
.popup-content{
background-color: #f1f5f9;
padding: 30px;
border-radius: 15px;
box-shadow: 0 20px 40px rgba(0,0,0,0.3);
width: 90%;
text-align: center;
}
.popup-buttons{
margin-top: 20px;
justify-content: center;
}
.cancel-btn,.confirm-btn{
border-radius: 10px;
border: transparent 0px ;
margin: 5px;
padding: 12px 30px;
font-size: 1em;
font-weight: bold;
}
.cancel-btn{
background: #f1f1f1;
color: #666;
}
.confirm-btn{
background: #ff4757;
color: white;
}
.content {
float: left;
width: calc(65% - 20px);
min-height: 920px;
border: #274779 solid 2px;
border-radius: 10px;
color: #f1f5f9;
padding: 20px 40px 50px;
margin-right: 20px;
background-color: #2a3147;
}
.block {
background: #38bdf8;
width: 90%;
height: 10px;
border-radius: 5px;
margin: 0 auto 30px;
overflow: hidden;
position: relative;
box-shadow: inset 0 0 10px rgba(0,0,0,0.3);
}
.question-all{
display: flex;
flex-direction: column;
gap: 30px;
}
.left-question-card{
border: #274779 solid 2px;
border-radius: 10px;
padding: 20px 40px;
background-color: #2f374d;
}
.question {
font-size: 1.3em;
line-height: 1.8;
margin-bottom: 25px;
color: #f1f5f9;
font-weight: 500;
}
.options {
display: flex;
flex-direction: column;
gap: 15px;
}
.option {
border: #183954 solid 2px;
border-radius: 10px;
padding: 12px 15px;
display: flex;
align-items: center;
cursor: pointer;
transition: all 0.3s ease;
background-color: #374151;
}
.option.red{
background-color: #ff4757;
}
.option.green{
background-color: #10b981;
}
.option input {
margin-right: 15px;
width: 18px;
height: 18px;
}
.option .label {
font-size: 1.1em;
color: #e5e7eb;
}
.buttons-left{
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 30px;
}
.before-btn,.next-btn{
padding: 10px 20px;
border-radius: 8px;
border: none;
background-color: #3b82f6;
color: white;
font-weight: bold;
display: flex;
align-items: center;
gap: 5px;
}
.before-btn:disabled,.next-btn:disabled {
background-color: #4b5563;
cursor: not-allowed;
}
.right {
float: right;
width: calc(35% - 20px);
border: #274779 solid 2px;
border-radius: 30px;
padding: 15px 0 15px 19px ;
margin-bottom: 20px;
background-color: #2f374d;
color: white;
}
.right h3{
font-size: xx-large;
padding-bottom: 15px;
margin-bottom: 15px;
border-bottom: 2px solid #274779;
}
.right-question-card {
display: grid;
grid-template-columns: repeat(5, 1fr);
gap: 10px;
margin: auto 30px;
}
.question-number {
width: 60px;
height: 50px;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
font-weight: bold;
cursor: pointer;
position: relative;
}
.right-question-card .question-number.red {
background-color: #ff4757;
border: 1px solid #991b1b;
color: white;
}
.question-number.normal {
background-color: #374151;
border: 1px solid #4b5563;
color: #e5e7eb;
}
.button-right{
display: flex;
margin: 30px 180px 5px;
gap: 20px;
}
.right-before-btn,.right-next-btn{
padding: 8px 15px;
border-radius: 8px;
border: none;
background-color: #3b82f6;
color: white;
font-weight: bold;
cursor: pointer;
margin: auto 20px;
}
.right-bottom-btn{
float: right;
height: 40px;
width: 100px;
border-radius: 8px;
background-color: #3b82f6;
color: white;
text-align: center;
line-height: 40px;
position:relative;
top: 350px;
}
</style>

350
src/views/ReportView.vue

@ -0,0 +1,350 @@
<template>
<div class="home">
<div class="top">
<div @click="showConfirmDialog" class="ret-top">
<img src="../assets/return.jpg" alt="返回" class="ret">
</div>
<h1>📈股票知识评测系统</h1>
<p>全方面评估您的股票投资知识水平获取个性化学习建议</p>
</div>
<div class="popup-block" v-if="showDialog">
<div class="popup-top" @click="closeDialog"></div>
<div class="popup-content">
<h3>确认提示</h3>
<p>确定要退出吗</p>
<div class="popup-buttons">
<button class="cancel-btn" @click="closeDialog">取消</button>
<button class="confirm-btn" @click="confirmExit">确定</button>
</div>
</div>
</div>
<div class="content">
<h1>系统分析报告</h1>
<div class="right">
<div class="right-top">
<img src="../assets/square.jpg" alt="柱状图展示....." class="img3">
<div class="right-top-left">
<div v-show="score!=100" >
<img src="../assets/false.jpg" alt="继续努力....." class="img1">
</div>
<div v-show="score==100" >
<img src="../assets/true.jpg" alt="你真棒....." class="img2">
</div>
<div>
<p style="font-size: 2.2em;text-align: center;">您的分数是{{this.score}}</p>
</div>
</div>
</div>
<div class="left">
<p>最好的投资是投资自己而最好的课程是是适合你的课程</p><br>
<p>人无法赚到认知以外的钱请根据测试结果聚焦你的核心短板进行强化扩大你的认知边界</p>
</div>
<div class="right-down">
<div v-show="score==100">
<p>恭喜您全部回答正确</p>
<p>接下还需巩固知识</p>
<p>推荐课程是量价时空综合量能擒牛价格破译</p>
</div>
<div v-show="score!=100">
<p>接下还需巩固知识</p>
<p>推荐课程是{{this.give}}</p>
</div>
</div>
</div>
<div class="content-button">
<button class="check-btn" @click="goCheck">查看错题</button>
<button class="buy-btn" @click="goBuy">前往购买</button>
</div>
</div>
</div>
</template>
<script scoped>
import axios from 'axios';
export default{
name: 'ReportView',
data() {
return {
showDialog:false,
score:0,
give: [],
};
},
methods:{
async getScore(){
const submissionData = JSON.parse(localStorage.getItem('submissionData'));
console.log('第一个'+submissionData);
try{
const res = await axios.post('http://192.168.40.41:8000/api/knowledge/scores',submissionData);
const resclass = await axios.post('http://192.168.40.41:8000/api/knowledge/course',submissionData);
this.give = resclass.data.data[0].cr_name.join('、');
this.score = res.data.data[0].score;
console.log('第二个'+this.score);
}catch(err){
console.log(err);
}
},
showConfirmDialog() {
this.showDialog = true;
},
closeDialog() {
this.showDialog = false;
},
confirmExit() {
this.showDialog = false;
this.$router.push('/');
},
goBuy() {
this.$router.push('/buy');
},
goCheck() {
this.$router.push('/problem');
},
},
async mounted(){
await this.getScore();
}
}
</script>
<style>
.ret{
width: 30px;
height: 50px;
float: left;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.top {
background: linear-gradient(135deg, #0c4a6e 100%);
color: white;
padding: 30px;
margin-bottom: 30px;
border-radius: 10px;
box-shadow: 0 10px 30px rgba(0,0,0,0.3);
position: relative;
overflow: hidden;
}
.top h1 {
font-size: 2.2em;
margin-bottom: 10px;
background: none;
}
.top p {
font-size: 1.1em;
opacity: 0.9;
background: none;
}
.home {
min-height: 100vh;
width: 100%;
background-color: #24293c;
overflow: auto;
padding: 20px;
}
.ret-top {
float: left;
cursor: pointer;
transition: transform 0.3s ease;
}
.ret-top:hover {
transform: scale(1.1);
}
.content{
border: #274779 solid 2px;
border-radius: 50px;
padding: 15px;
margin-bottom: 20px;
background-color: #2f374d;
padding: 30px;
color: white;
}
.left{
border: #274779 solid 2px;
border-radius: 50px;
padding: 15px;
margin-bottom: 20px;
background-color: #2f374d;
width: 30%;
top: 200px;
float: right;
margin: 10px 0;
padding: 20px;
color: #65befc;
}
.right-top{
border: #274779 solid 2px;
border-radius: 50px;
padding: 15px;
margin-bottom: 20px;
background-color: #2f374d;
width: 65%;
margin: 10px;
padding: 30px 40px;
float: left;
}
.img3{
width: 600px;
height: 400px;
float: left;
margin: auto;
}
.right-top-left{
float: right;
margin-right: 50px;
margin-top: 30px;
}
.right-down{
border: #274779 solid 2px;
border-radius: 50px;
padding: 15px;
margin-bottom: 20px;
background-color: #2f374d;
width: 65%;
height: 300px;
float: left;
margin: 10px;
padding-top: 40px;
padding-left: 60px;
clear: right;
}
.content::after {
content: "";
display: table;
clear: both;
}
.ret-top {
float: left;
cursor: pointer;
transition: transform 0.3s ease;
}
.ret-top:hover {
transform: scale(1.1);
}
.popup-block {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
z-index: 1000;
}
.popup-top {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
backdrop-filter: blur(5px);
}
.popup-content {
position: relative;
background: white;
padding: 30px;
border-radius: 15px;
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
max-width: 400px;
width: 90%;
text-align: center;
z-index: 1001;
animation: dialogSlideIn 0.3s ease-out;
}
.popup-content h3 {
color: #333;
margin-bottom: 15px;
font-size: 1.4em;
}
.popup-content p {
color: #666;
margin-bottom: 25px;
font-size: 2.2em;
line-height: 1.5;
}
.popup-buttons {
display: flex;
gap: 15px;
justify-content: center;
}
.cancel-btn, .confirm-btn {
padding: 12px 30px;
border: none;
border-radius: 8px;
font-size: 1em;
font-weight: bold;
cursor: pointer;
transition: all 0.3s ease;
min-width: 100px;
}
.cancel-btn {
background: #f1f1f1;
color: #666;
}
.cancel-btn:hover {
background: #e0e0e0;
}
.confirm-btn {
background: #ff4757;
color: white;
}
.confirm-btn:hover {
background: #ff3742;
transform: translateY(-2px);
}
.img1,.img2{
width: 270px;
height: 180px;
float: left;
margin: auto;
}
.right-down p{
font-size: 2.2em;
line-height: 1.5;
color: #65befc;
}
.left p{
font-size: 2.2em;
line-height: 1.5;
}
.content-button{
margin-top: 30px;
text-align: center;
}
.buy-btn,.check-btn{
position: relative;
top:200px;
padding: 12px 30px;
border: none;
border-radius: 8px;
font-size: 2em;
font-weight: bold;
cursor: pointer;
transition: all 0.3s ease;
min-width: 100px;
background-color: #22608b;
color: white;
margin:40px;
float: right;
}
</style>

274
src/views/ResultView.vue

@ -0,0 +1,274 @@
<template>
<div class="home">
<div class="top">
<div @click="showConfirmDialog" class="ret-top">
<img src="../assets/return.jpg" alt="返回" class="ret">
</div>
<h1>📈股票知识评测系统</h1>
<p>全方面评估您的股票投资知识水平获取个性化学习建议</p>
</div>
<div class="popup-block" v-if="showDialog">
<div class="popup-top" @click="closeDialog"></div>
<div class="popup-content">
<h3>确认提示</h3>
<p>还未查看分析报告确定要退出吗</p>
<div class="popup-buttons">
<button class="cancel-btn" @click="closeDialog">取消</button>
<button class="confirm-btn" @click="confirmExit">确定</button>
</div>
</div>
</div>
<div class="content">
<div class="block">
<div class="section">
<p class="p1">恭喜您完成测评</p>
<img src="../assets/result.jpg" alt="完成测评" class="result">
<div class="p2" @click="show">
<p>查看分析报告</p>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default{
name: 'ResultView',
data() {
return {
showDialog:false
};
},
methods:{
show(){
this.$router.push('/report');
},
//
showConfirmDialog() {
this.showDialog = true;
},
//
closeDialog() {
this.showDialog = false;
},
// 退
confirmExit() {
this.showDialog = false;
//
this.$router.push('/');
},
}
}
</script>
<style scoped>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.home {
min-height: 100vh;
width: 100%;
background-color: #24293c;
overflow: auto;
padding: 20px;
}
.top {
background: linear-gradient(135deg, #0c4a6e 100%);
color: white;
padding: 30px;
margin-bottom: 30px;
border-radius: 10px;
box-shadow: 0 10px 30px rgba(0,0,0,0.3);
position: relative;
overflow: hidden;
}
.top h1 {
font-size: 2.2em;
margin-bottom: 10px;
background: none;
}
.top p {
font-size: 1.1em;
opacity: 0.9;
background: none;
}
.ret {
width: 30px;
height: 50px;
float: left;
}
.content {
height: 750px;
width: 100%;
min-height: 600px;
border: #274779 solid 2px;
border-radius: 10px;
color: #f1f5f9;
padding: 40px 20px;
background-color: #2a3147;
display: flex;
align-items: center;
justify-content: center;
}
.block {
width: 100%;
max-width: 800px;
}
.section {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 30px;
text-align: center;
}
.p1 {
font-size: clamp(2rem, 5vw, 3.5rem);
font-weight: bold;
color: #f1f5f9;
text-align: center;
margin: 0;
text-shadow: 2px 2px 4px rgba(0,0,0,0.5);
}
.result {
width: min(210px, 30vw);
height: auto;
max-width: 100%;
display: block;
margin: 0 auto;
}
.p2 {
width: min(280px, 80vw);
height: 60px;
background: linear-gradient(135deg, #22608b, #2c7cb0);
color: white;
text-align: center;
border-radius: 12px;
font-size: 1.2rem;
display: flex;
align-items: center;
justify-content: center;
margin: 0 auto;
cursor: pointer;
transition: all 0.3s ease;
border: 2px solid rgba(255,255,255,0.1);
box-shadow: 0 4px 15px rgba(0,0,0,0.2);
}
.p2:hover {
transform: translateY(-3px);
box-shadow: 0 6px 20px rgba(0,0,0,0.3);
background: linear-gradient(135deg, #2c7cb0, #3498db);
}
.p2 p {
margin: 0;
font-weight: bold;
font-size: clamp(1rem, 3vw, 1.3rem);
}
.ret-top {
float: left;
cursor: pointer;
transition: transform 0.3s ease;
}
.ret-top:hover {
transform: scale(1.1);
}
.popup-block {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
z-index: 1000;
}
.popup-top {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
backdrop-filter: blur(5px);
}
.popup-content {
position: relative;
background: white;
padding: 30px;
border-radius: 15px;
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
max-width: 400px;
width: 90%;
text-align: center;
z-index: 1001;
animation: dialogSlideIn 0.3s ease-out;
}
.popup-content h3 {
color: #333;
margin-bottom: 15px;
font-size: 1.4em;
}
.popup-content p {
color: #666;
margin-bottom: 25px;
font-size: 1.1em;
line-height: 1.5;
}
.popup-buttons {
display: flex;
gap: 15px;
justify-content: center;
}
.cancel-btn, .confirm-btn {
padding: 12px 30px;
border: none;
border-radius: 8px;
font-size: 1em;
font-weight: bold;
cursor: pointer;
transition: all 0.3s ease;
min-width: 100px;
}
.cancel-btn {
background: #f1f1f1;
color: #666;
}
.cancel-btn:hover {
background: #e0e0e0;
}
.confirm-btn {
background: #ff4757;
color: white;
}
.confirm-btn:hover {
background: #ff3742;
transform: translateY(-2px);
}
</style>

275
src/views/TestView.vue

@ -0,0 +1,275 @@
<template>
<div class="home">
<div class="top">
<div class="img-top" @click="jump">
<img src="../assets/return.jpg" alt="返回" class="img1">
</div>
<span>
<h1>📈股票知识评测系统</h1>
</span>
<p>全方面评估您的股票投资知识水平获取个性化学习建议</p>
</div>
<div class="popup-all" v-if="showDialog">
<div class="popup-top" @click="closeDialog"></div>
<div class="popup-content">
<h3>确认提示</h3>
<p>您还未提交确定要退出吗</p>
<div class="popup-buttons">
<button class="cancel-btn" @click="closeDialog">取消</button>
<button class="confirm-btn" @click="confirmExit">确定</button>
</div>
</div>
</div>
<div class="content">
<div class="block">
<div class="schedule" :style="{ width: progress + '%' }"></div>
</div>
<div class="text">
<div class="question">1以下哪项不是股票的基本特征</div>
<div class="options">
<label class="option">
<input type="radio" name="answer1" value="A">
<span class="label">A. 收益性</span>
</label>
<label class="option">
<input type="radio" name="answer1" value="B">
<span class="label">B. 风险性</span>
</label>
<label class="option">
<input type="radio" name="answer1" value="C">
<span class="label">C. 流动性</span>
</label>
<label class="option">
<input type="radio" name="answer1" value="D">
<span class="label">D. 固定性</span>
</label>
</div>
</div>
<div class="text">
<div class="question">2以下哪项不是股票的基本特征</div>
<div class="options">
<label class="option">
<input type="radio" name="answer2" value="A">
<span class="label">A. 收益性</span>
</label>
<label class="option">
<input type="radio" name="answer2" value="B">
<span class="label">B. 风险性</span>
</label>
<label class="option">
<input type="radio" name="answer2" value="C">
<span class="label">C. 流动性</span>
</label>
<label class="option">
<input type="radio" name="answer2" value="D">
<span class="label">D. 固定性</span>
</label>
</div>
</div>
<div>
<button onclick="nextPage" class="nextpage">下一页 -></button>
</div>
</div>
<div class="right">
<div class="hour">
</div>
<div class="all">
</div>
<div class="statistics">
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
showDialog: false
}
},
methods: {
jump() {
this.showDialog = true;
},
closeDialog() {
this.showDialog = false;
},
confirmExit() {
this.showDialog = false;
this.$router.push({ name: 'HomeView' });
}
}
}
</script>
<style scoped>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.home{
min-height: 100vh;
width: 100%;
background-color: #24293c;
overflow:auto;
padding: 10px;
}
.top{
background:#0c4a6e;
color: white;
padding: 30px;
margin-bottom: 10px;
position: relative;
}
.img-top{
float: left;
}
.img-top:hover{
transform: scale(1.1);
}
.img1{
width: 30px;
height: 50px;
float: left;
}
h1{
margin-bottom: 10px;
background: none;
font-size: 2.2em;
}
p{
font-size: 1.2em;
margin-bottom: 10px;
background: none;
}
.popup-all{
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
z-index: 1000;
}
.popup-top{
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
backdrop-filter: blur(5px);
}
.popup-content{
background-color: #f1f5f9;
padding: 20px;
border-radius: 10px;
box-shadow: 0 0 10px rgba(0,0,0,0.3);
}
.popup-buttons{
margin-top: 20px;
display: flex;
justify-content: flex-end;
}
.cancel-btn{
background-color: #f1f5f9;
color: #24293c;
border-radius: 10px;
border: transparent 0px ;
margin: 5px;
padding: 5px 10px;
}
.confirm-btn{
background-color: #22608b;
color: #f1f5f9;
border-radius: 10px;
border: transparent 0px ;
margin: 5px;
padding: 5px 10px;
}
.block {
background: rgba(139, 141, 145, 0.7);
width: 90%;
height: 10px;
border-radius: 5px;
margin:auto;
overflow: hidden;
position: relative;
box-shadow: inset 0 0 10px rgba(0,0,0,0.3);
}
.schedule{
background: linear-gradient(90deg, #0ea5e9 0%, #38bdf8 100%);
height: 100%;
width: 15%;
transition: width 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);
position: relative;
}
.content{
float: left;
height: 100%;
width: 60%;
border: #183954 solid 2px;
border-radius: 10px;
color: #f1f5f9;
padding: 20px 40px 50px;
margin: 30px;
}
.question{
font-size: 1.3em;
line-height: 1.8;
margin-bottom: 25px;
color: #f1f5f9;
font-weight: 500;
}
.option{
border: #183954 solid 2px;
border-radius: 10px;
width: 70%;
padding: 5px;
margin: 3px;
}
.options {
display: flex;
flex-direction: column;
gap: 15px;
}
.text{
border: #183954 solid 2px;
border-radius: 10px;
padding: 20px 40px;
margin: 30px;
}
.hour,.all,.statistics{
width: 300px;
border: #183954 solid 2px;
border-radius: 10px;
padding: 5px;
margin: 3px;
}
.right{
float: right;
height: 100%;
width: 30%;
border: #183954 solid 2px;
border-radius: 10px;
color: #f1f5f9;
padding: 20px 40px 50px;
margin: 30px;
}
.nextpage{
width: 70px;
height: 30px;
background-color: #22608b;
color: #f1f5f9;
border-radius: 10px;
border: transparent 0px ;
margin: 5px;
float: right;
}
</style>

1942
src/views/TextHtml.html
File diff suppressed because it is too large
View File

851
src/views/TextView.vue

@ -0,0 +1,851 @@
<template>
<div class="home">
<div class="top">
<div @click="showConfirmDialog" class="ret-container">
<img src="../assets/return.jpg" alt="返回" class="ret">
</div>
<h1>📈股票知识评测系统</h1>
<p>全方面评估您的股票投资知识水平获取个性化学习建议</p>
</div>
<div class="confirm-dialog dialog-overlay" v-if="showDialog">
<div class="dialog-content">
<h3>确认提示</h3>
<p>您还未提交确定要退出吗</p>
<div class="dialog-buttons">
<button class="cancel-btn" @click="closeDialog">取消</button>
<button class="confirm-btn" @click="confirmExit">确定</button>
</div>
</div>
</div>
<div class="confirm-dialog dialog-overlay" v-if="showTeam">
<div class="dialog-content">
<h3>确认提示</h3>
<p>您确定要提交吗</p>
<div class="dialog-buttons">
<button class="cancel-btn" @click="closeSubmit">取消</button>
<button class="confirm-btn" @click="submitAnswers">确定</button>
</div>
</div>
</div>
<div class="clearfix">
<div class="content">
<div class="block">
<div class="schedule" :style="{ width: progress + '%' }"></div>
</div>
<div class="questions-container">
<div v-for="question in currentQuestions" :key="question.id" class="question-card">
<div class="question-header">
<div class="question">
<span class="text-lg font-bold mr-2">{{ question.id }}</span>
{{ question.stem }}
</div>
</div>
<div class="options">
<label
class="option"
:class="{ 'selected': getAnswer(question.id) === 'A' }"
@click="setAnswer(question.id, 'A')"
>
<input
type="radio"
:name="'answer' + question.id"
value="A"
:checked="getAnswer(question.id) === 'A'"
@change="setAnswer(question.id, 'A')"
>
<span class="label">A. {{ question.A }}</span>
</label>
<label
class="option"
:class="{ 'selected': getAnswer(question.id) === 'B' }"
@click="setAnswer(question.id, 'B')"
>
<input
type="radio"
:name="'answer' + question.id"
value="B"
:checked="getAnswer(question.id) === 'B'"
@change="setAnswer(question.id, 'B')"
>
<span class="label">B. {{ question.B }}</span>
</label>
<label
class="option"
:class="{ 'selected': getAnswer(question.id) === 'C' }"
@click="setAnswer(question.id, 'C')"
>
<input
type="radio"
:name="'answer' + question.id"
value="C"
:checked="getAnswer(question.id) === 'C'"
@change="setAnswer(question.id, 'C')"
>
<span class="label">C. {{ question.C }}</span>
</label>
<label
class="option"
:class="{ 'selected': getAnswer(question.id) === 'D' }"
@click="setAnswer(question.id, 'D')"
>
<input
type="radio"
:name="'answer' + question.id"
value="D"
:checked="getAnswer(question.id) === 'D'"
@change="setAnswer(question.id, 'D')"
>
<span class="label">D. {{ question.D }}</span>
</label>
</div>
</div>
</div>
<div class="nav-buttons">
<button
class="nav-btn prev"
@click="prevPage"
:disabled="currentPage === 1"
>
上一页
</button>
<span class="page-info"> {{ currentPage }} / {{ totalPages }} </span>
<button
class="nav-btn next"
@click="nextPage"
:disabled="currentPage === totalPages"
>
下一页
</button>
</div>
</div>
<div class="right">
<div class="time-module">
<div class="countdown"> {{ countdown }}</div>
</div>
<div class="question-nav">
<h3>📝 题目导航</h3>
<div class="question-grid" v-show="page === 1">
<div
class="question-number"
:class="getQuestionStatusClass(i)"
@click="goToPageByQuestion(i)"
v-for="i in 25"
:key="i"
>
<span class="question-text">{{ i }}</span>
</div>
</div>
<div class="question-grid" v-show="page === 2">
<div
class="question-number"
:class="getQuestionStatusClass(i + 25)"
@click="goToPageByQuestion(i + 25)"
v-for="i in 25"
:key="i + 25"
>
<span class="question-text">{{ i + 25 }}</span>
</div>
</div>
<div class="pagination">
<button
class="pagination-btn"
@click="changeNavPage(1)"
:class="{ active: page === 1 }"
>
上一页
</button>
<button
class="pagination-btn"
@click="changeNavPage(2)"
:class="{ active: page === 2 }"
>
下一页
</button>
</div>
</div>
<div class="statistics">
<h3>📊 答题统计</h3>
<div class="statistics-item">
<span class="statistics-label">答题进度:</span>
<span class="statistics-value">{{ answeredCount }}/{{ totalQuestions }}</span>
</div>
</div>
<button class="submit-btn" @click="closeTeamPrompt">🚀 提交试卷</button>
</div>
</div>
</div>
</template>
<script>
import axios from 'axios';
export default {
name: 'TextView',
data() {
return {
questions: [], //
currentPage: 1,
page: 1,
questionsPerPage: 2, // 2
answers: {},
startTime: new Date(),
countdownMinutes: 30,
countdown: '',
timer: null,
isSubmitted: false,
totalQuestions: 50, // 50
questionStates: {},
showDialog: false,
showTeam: false,
};
},
created() {
for (let i = 1; i <= this.totalQuestions; i++) {
this.$set(this.answers, i, 0)
}
},
computed: {
//
currentQuestions() {
const startIndex = (this.currentPage - 1) * this.questionsPerPage;
return [
this.questions[startIndex],
this.questions[startIndex + 1]
].filter(Boolean);
},
totalPages() {
return Math.ceil(this.questions.length / this.questionsPerPage);
},
answeredCount() {
return Object.keys(this.answers).filter(
key => this.answers[key] !== 0
).length
},
completionRate() {
return (this.answeredCount / this.totalQuestions) * 100;
},
progress() {
return this.completionRate;
},
// ID
currentQuestionIds() {
return this.currentQuestions.map(q => q ? q.id : null).filter(Boolean);
}
},
methods: {
//
async fetchQuestions() {
try {
const response = await axios.post('http://192.168.40.41:8000/api/knowledge/questions');
this.questions = response.data.data.list;
} catch (error) {
console.error('获取题目失败:', error);
}
},
// - 50
getDefaultQuestions() {
//
const defaultQuestions = [];
for (let i = 1; i <= 50; i++) {
defaultQuestions.push({
id: i,
stem: `这是第${i}个股票知识测试题目`,
A: `选项A - 第${i}`,
B: `选项B - 第${i}`,
C: `选项C - 第${i}`,
D: `选项D - 第${i}`
});
}
return defaultQuestions;
},
//
getQuestionIndex(questionId) {
// questions
const index = this.questions.findIndex(q => q.id === questionId);
return index !== -1 ? index + 1 : questionId;
},
//
showConfirmDialog() {
this.showDialog = true;
},
//
closeDialog() {
this.showDialog = false;
},
// 退
confirmExit() {
this.showDialog = false;
//
this.$router.push('/');
},
//
closeTeamPrompt() {
this.showTeam = true;
},
closeSubmit() {
this.showTeam = false;
},
// submitAnswers() {
// this.showTeam = false;
// },
//
getAnswer(questionId) {
return this.answers[questionId] || '';
},
//
setAnswer(questionId, answer) {
this.$set(this.answers, questionId, answer);
},
//
getQuestionStatusClass(questionNumber) {
const isCurrent = this.currentQuestionIds.includes(questionNumber);
const isAnswered = !!this.answers[questionNumber];
if (isCurrent) {
return 'current';
} else if (isAnswered) {
return 'answered';
} else {
return 'normal';
}
},
//
changeNavPage(newPage) {
this.page = newPage;
},
//
changePage(newPage) {
if (newPage >= 1 && newPage <= this.totalPages) {
this.currentPage = newPage;
// 25
const startQuestion = (newPage - 1) * this.questionsPerPage + 1;
this.page = Math.ceil(startQuestion / 25);
}
},
//
goToPageByQuestion(questionNumber) {
const page = Math.ceil(questionNumber / this.questionsPerPage);
this.changePage(page);
//
this.page = Math.ceil(questionNumber / 25);
},
//
prevPage() {
if (this.currentPage > 1) {
this.currentPage--;
}
},
//
nextPage() {
if (this.currentPage < this.totalPages) {
this.currentPage++;
}
},
//
updateCountdown() {
const now = new Date();
const elapsedMinutes = (now - this.startTime) / (1000 * 60);
const remainingMinutes = Math.max(0, this.countdownMinutes - elapsedMinutes);
const minutes = Math.floor(remainingMinutes).toString().padStart(2, '0');
const seconds = Math.floor((remainingMinutes % 1) * 60).toString().padStart(2, '0');
this.countdown = `${minutes}:${seconds}`;
//
if (remainingMinutes <= 0 && !this.isSubmitted) {
this.isSubmitted = true;
this.submitAnswers();
}
},
//
async submitAnswers() {
try {
if (Object.keys(this.answers).length === 0) {
this.showTeam=false;
return;
}
//
const formattedAnswers = Object.keys(this.answers).map(questionId => ({
questionId: parseInt(questionId),
userAnswer: this.answers[questionId]
}));
const savedData = JSON.parse(localStorage.getItem('submissionData'));
console.log('第一个,存储的数据:', localStorage.getItem('submissionData'));
const submission = {
jwcode: savedData.jwcode,
answers: formattedAnswers
};
console.log(submission);
//
const response = await axios.post('http://192.168.40.41:8000/api/knowledge/submit', submission);
console.log(submission);
//
this.$router.push({
name: 'ResultView',
query: {
score: response.data.data.score || 80,
total: this.totalQuestions,
timeUsed: this.getTimeUsed()
}
});
} catch (error) {
console.error('提交试卷失败:', error);
alert('提交失败,请重试');
this.isSubmitted = false;
}
},
//
getTimeUsed() {
const now = new Date();
const elapsedMinutes = (now - this.startTime) / (1000 * 60);
return Math.round(elapsedMinutes);
}
},
async mounted() {
//
await this.fetchQuestions();
//
this.timer = setInterval(() => {
this.updateCountdown();
}, 1000);
},
beforeDestroy() {
if (this.timer) {
clearInterval(this.timer);
}
}
};
</script>
<style scoped>
.questions-container {
display: flex;
flex-direction: column;
gap: 30px;
}
.ret{
width: 30px;
height: 50px;
float: left;
}
.page-info {
color: #e5e7eb;
font-weight: bold;
padding: 0 20px;
}
.question-grid {
display: grid;
grid-template-columns: repeat(5, 1fr);
gap: 10px;
margin: auto 30px;
}
.question-number {
width: 60px;
height: 50px;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
font-weight: bold;
cursor: pointer;
position: relative;
}
.question-number.normal {
background-color: #374151;
border: 1px solid #4b5563;
color: #e5e7eb;
}
.question-number.answered {
background-color: #10b981;
border: 1px solid #059669;
color: white;
}
.question-number.current {
background-color: #3b82f6;
border: 2px solid #2563eb;
color: white;
transform: scale(1.1);
}
.question-number:hover {
transform: scale(1.05);
}
.question-text {
z-index: 1;
}
.pagination-btn.active {
background-color: #2563eb;
transform: scale(1.05);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: #f5f7fa;
}
.home {
min-height: 100vh;
width: 100%;
background-color: #24293c;
overflow: auto;
padding: 20px;
}
.top {
background: linear-gradient(135deg, #0c4a6e 100%);
color: white;
padding: 30px;
margin-bottom: 30px;
border-radius: 10px;
box-shadow: 0 10px 30px rgba(0,0,0,0.3);
position: relative;
overflow: hidden;
}
.top h1 {
font-size: 2.2em;
margin-bottom: 10px;
background: none;
}
.top p {
font-size: 1.1em;
opacity: 0.9;
background: none;
}
.block {
background: rgba(139, 141, 145, 0.7);
width: 90%;
height: 10px;
border-radius: 5px;
margin: 0 auto 30px;
overflow: hidden;
position: relative;
box-shadow: inset 0 0 10px rgba(0,0,0,0.3);
}
.schedule {
background: linear-gradient(90deg, #0ea5e9 0%, #38bdf8 100%);
height: 100%;
width: 15%;
transition: width 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);
position: relative;
}
.content {
float: left;
width: calc(65% - 20px);
min-height: 920px;
border: #274779 solid 2px;
border-radius: 10px;
color: #f1f5f9;
padding: 20px 40px 50px;
margin-right: 20px;
background-color: #2a3147;
}
.question-card {
border: #274779 solid 2px;
border-radius: 10px;
padding: 20px 40px;
background-color: #2f374d;
}
.question-header {
margin-bottom: 20px;
}
.question {
font-size: 1.3em;
line-height: 1.8;
margin-bottom: 25px;
color: #f1f5f9;
font-weight: 500;
}
.options {
display: flex;
flex-direction: column;
gap: 15px;
}
.option {
border: #183954 solid 2px;
border-radius: 10px;
padding: 12px 15px;
display: flex;
align-items: center;
cursor: pointer;
transition: all 0.3s ease;
background-color: #374151;
}
.option:hover {
border-color: #3b82f6;
background-color: #4b5563;
}
.option input {
margin-right: 15px;
width: 18px;
height: 18px;
}
.option .label {
font-size: 1.1em;
color: #e5e7eb;
}
.option.selected {
border-color: #3b82f6;
background-color: rgba(59, 130, 246, 0.2);
}
.right {
float: right;
width: calc(35% - 20px);
color: #f1f5f9;
padding: 20px;
}
.time-module {
border: #274779 solid 2px;
border-radius: 30px;
padding: 15px;
margin-bottom: 20px;
background-color: #2f374d;
}
.question-nav {
border: #274779 solid 2px;
border-radius: 30px;
padding: 15px 0 15px 19px ;
margin-bottom: 20px;
background-color: #2f374d;
}
.statistics {
height: 150px;
border: #274779 solid 2px;
border-radius: 30px;
padding: 15px;
margin-bottom: 20px;
background-color: #2f374d;
}
.time-module h3, .question-nav h3, .statistics h3 {
margin-bottom: 15px;
color: #f1f5f9;
font-size: 1.2em;
border-bottom: 2px solid #274779;
padding-bottom: 10px;
}
.countdown {
font-size: 1.5em;
color: #f59e0b;
text-align: center;
}
.pagination {
display: flex;
/* justify-content: center; */
margin: 30px 148px 5px;
gap: 20px;
}
.pagination-btn {
padding: 8px 15px;
border-radius: 8px;
border: none;
background-color: #3b82f6;
color: white;
font-weight: bold;
cursor: pointer;
transition: all 0.3s ease;
margin: auto 20px;
}
.pagination-btn:hover {
background-color: #2563eb;
}
.pagination-btn:disabled {
background-color: #4b5563;
}
.nav-buttons {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 30px;
}
.nav-btn {
padding: 10px 20px;
border-radius: 8px;
border: none;
background-color: #3b82f6;
color: white;
font-weight: bold;
display: flex;
align-items: center;
gap: 5px;
}
.nav-btn:hover {
background-color: #2563eb;
}
.nav-btn.prev {
background-color: #3b82f6;;
}
.nav-btn.prev:hover {
background-color: #2563eb;
}
.nav-btn:disabled {
background-color: #4b5563;
cursor: not-allowed;
}
.statistics-item {
display: flex;
font-size: larger;
justify-content: space-between;
margin-top: 30px;
padding-top: 10px;
padding-bottom: 2px;
border-bottom: 2px solid #274779;
}
.statistics-label {
color: #e5e7eb;
}
.statistics-value {
font-weight: bold;
color: #3b82f6;
}
.submit-btn {
width: 100%;
padding: 15px;
border-radius: 10px;
border: none;
background-color: #10b981;
color: white;
font-size: 1.2em;
font-weight: bold;
cursor: pointer;
transition: all 0.3s ease;
margin-top: 20px;
display: block;
text-align: center;
text-decoration: none;
}
.submit-btn:hover {
background-color: #059669;
}
.clearfix::after {
content: "";
clear: both;
display: table;
}
.ret-container {
float: left;
cursor: pointer;
transition: transform 0.3s ease;
}
.ret-container:hover {
transform: scale(1.1);
}
.confirm-dialog {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
z-index: 1000;
}
.dialog-content {
position: relative;
background: white;
padding: 30px;
border-radius: 15px;
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
max-width: 400px;
width: 90%;
text-align: center;
z-index: 1001;
}
.dialog-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
backdrop-filter: blur(5px);
}
.dialog-content h3 {
color: #333;
margin-bottom: 15px;
font-size: 1.4em;
}
.dialog-content p {
color: #666;
margin-bottom: 25px;
font-size: 1.1em;
line-height: 1.5;
}
.dialog-buttons {
display: flex;
gap: 15px;
justify-content: center;
}
.cancel-btn, .confirm-btn {
padding: 12px 30px;
border: none;
border-radius: 8px;
font-size: 1em;
font-weight: bold;
cursor: pointer;
transition: all 0.3s ease;
min-width: 100px;
}
.cancel-btn {
background: #f1f1f1;
color: #666;
}
.cancel-btn:hover {
background: #e0e0e0;
}
.confirm-btn {
background: #ff4757;
color: white;
}
.confirm-btn:hover {
background: #ff3742;
transform: translateY(-2px);
}
</style>
Loading…
Cancel
Save