Browse Source

结算分析跳转购买已完成、错题界面(刚开始)、答题页面(差返回后端的数据还要改一下,时间到了要提交)

milestone-20251107-股票知识测评
chenzhen 2 months ago
parent
commit
88851daadb
  1. 201
      package-lock.json
  2. 1
      package.json
  3. BIN
      src/assets/buy.jpg
  4. BIN
      src/assets/false.jpg
  5. BIN
      src/assets/huiche.png
  6. BIN
      src/assets/result.jpg
  7. BIN
      src/assets/square.jpg
  8. BIN
      src/assets/true.jpg
  9. 7
      src/main.js
  10. 6
      src/router/index.js
  11. 42
      src/views/BuyView.vue
  12. 38
      src/views/HomeView.vue
  13. 175
      src/views/ProblemView.vue
  14. 348
      src/views/ReportView.vue
  15. 245
      src/views/ResultView.vue
  16. 114
      src/views/TestView.vue
  17. 997
      src/views/TextView.vue

201
package-lock.json

@ -8,6 +8,7 @@
"name": "evaluation-system",
"version": "0.1.0",
"dependencies": {
"axios": "^1.13.2",
"core-js": "^3.8.3",
"vue": "^2.6.14",
"vue-router": "^3.6.5"
@ -3201,6 +3202,12 @@
"integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
"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": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz",
@ -3247,6 +3254,17 @@
"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": {
"version": "8.4.1",
"resolved": "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.4.1.tgz",
@ -3579,7 +3597,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
"dev": true,
"dependencies": {
"es-errors": "^1.3.0",
"function-bind": "^1.1.2"
@ -3888,6 +3905,18 @@
"integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
"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": {
"version": "8.3.0",
"resolved": "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz",
@ -4657,6 +4686,15 @@
"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": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz",
@ -4820,7 +4858,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz",
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
"dev": true,
"dependencies": {
"call-bind-apply-helpers": "^1.0.1",
"es-errors": "^1.3.0",
@ -4950,7 +4987,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz",
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
"dev": true,
"engines": {
"node": ">= 0.4"
}
@ -4959,7 +4995,6 @@
"version": "1.3.0",
"resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz",
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
"dev": true,
"engines": {
"node": ">= 0.4"
}
@ -4974,7 +5009,6 @@
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
"dev": true,
"dependencies": {
"es-errors": "^1.3.0"
},
@ -4982,6 +5016,21 @@
"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": {
"version": "3.2.0",
"resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz",
@ -5838,7 +5887,6 @@
"version": "1.15.11",
"resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.11.tgz",
"integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
"dev": true,
"funding": [
{
"type": "individual",
@ -5854,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": {
"version": "0.2.0",
"resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz",
@ -5930,7 +5994,6 @@
"version": "1.1.2",
"resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz",
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
"dev": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@ -5963,7 +6026,6 @@
"version": "1.3.0",
"resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
"dev": true,
"dependencies": {
"call-bind-apply-helpers": "^1.0.2",
"es-define-property": "^1.0.1",
@ -5987,7 +6049,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz",
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
"dev": true,
"dependencies": {
"dunder-proto": "^1.0.1",
"es-object-atoms": "^1.0.0"
@ -6098,7 +6159,6 @@
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz",
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
"dev": true,
"engines": {
"node": ">= 0.4"
},
@ -6158,7 +6218,21 @@
"version": "1.1.0",
"resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz",
"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": {
"node": ">= 0.4"
},
@ -6176,7 +6250,6 @@
"version": "2.0.2",
"resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"dev": true,
"dependencies": {
"function-bind": "^1.1.2"
},
@ -7251,7 +7324,6 @@
"version": "1.1.0",
"resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
"dev": true,
"engines": {
"node": ">= 0.4"
}
@ -7354,7 +7426,6 @@
"version": "1.52.0",
"resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"dev": true,
"engines": {
"node": ">= 0.6"
}
@ -7363,7 +7434,6 @@
"version": "2.1.35",
"resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"dev": true,
"dependencies": {
"mime-db": "1.52.0"
},
@ -8840,6 +8910,12 @@
"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": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz",
@ -13661,6 +13737,11 @@
"integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
"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": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz",
@ -13681,6 +13762,16 @@
"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": {
"version": "8.4.1",
"resolved": "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.4.1.tgz",
@ -13922,7 +14013,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
"dev": true,
"requires": {
"es-errors": "^1.3.0",
"function-bind": "^1.1.2"
@ -14149,6 +14239,14 @@
"integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
"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": {
"version": "8.3.0",
"resolved": "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz",
@ -14689,6 +14787,11 @@
"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": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz",
@ -14814,7 +14917,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz",
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
"dev": true,
"requires": {
"call-bind-apply-helpers": "^1.0.1",
"es-errors": "^1.3.0",
@ -14919,14 +15021,12 @@
"es-define-property": {
"version": "1.0.1",
"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": {
"version": "1.3.0",
"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": {
"version": "1.7.0",
@ -14938,11 +15038,21 @@
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
"dev": true,
"requires": {
"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": {
"version": "3.2.0",
"resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz",
@ -15588,8 +15698,19 @@
"follow-redirects": {
"version": "1.15.11",
"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": {
"version": "0.2.0",
@ -15643,8 +15764,7 @@
"function-bind": {
"version": "1.1.2",
"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": {
"version": "1.0.1",
@ -15668,7 +15788,6 @@
"version": "1.3.0",
"resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
"dev": true,
"requires": {
"call-bind-apply-helpers": "^1.0.2",
"es-define-property": "^1.0.1",
@ -15686,7 +15805,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz",
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
"dev": true,
"requires": {
"dunder-proto": "^1.0.1",
"es-object-atoms": "^1.0.0"
@ -15764,8 +15882,7 @@
"gopd": {
"version": "1.2.0",
"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": {
"version": "4.2.11",
@ -15806,8 +15923,15 @@
"has-symbols": {
"version": "1.1.0",
"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": {
"version": "2.0.0",
@ -15819,7 +15943,6 @@
"version": "2.0.2",
"resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"dev": true,
"requires": {
"function-bind": "^1.1.2"
}
@ -16625,8 +16748,7 @@
"math-intrinsics": {
"version": "1.1.0",
"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": {
"version": "2.0.14",
@ -16701,14 +16823,12 @@
"mime-db": {
"version": "1.52.0",
"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": {
"version": "2.1.35",
"resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"dev": true,
"requires": {
"mime-db": "1.52.0"
}
@ -17743,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": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz",

1
package.json

@ -8,6 +8,7 @@
"lint": "vue-cli-service lint"
},
"dependencies": {
"axios": "^1.13.2",
"core-js": "^3.8.3",
"vue": "^2.6.14",
"vue-router": "^3.6.5"

BIN
src/assets/buy.jpg

After

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

BIN
src/assets/false.jpg

After

Width: 518  |  Height: 349  |  Size: 33 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/square.jpg

After

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

BIN
src/assets/true.jpg

After

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

7
src/main.js

@ -2,6 +2,13 @@ import Vue from '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

6
src/router/index.js

@ -7,6 +7,7 @@ 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)
@ -37,6 +38,11 @@ const routes = [
component: ReportView
},
{
path: '/buy',
name: 'BuyView',
component: BuyView
},
{
path: '/problem',
name: 'ProblemView',
component: ProblemView

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>

38
src/views/HomeView.vue

@ -1,18 +1,45 @@
<template>
<div>
<router-link to="/text" class="center">
<div class="center" @click="jumpPage">
<img src="../assets/enter.jpg" alt="进入测试" class="image">
</router-link>
</div>
</div>
</template>
<script>
import axios from 'axios';
export default {
name: 'App',
data() {
return {
activeTab: 'question'
}
},
methods:{
async jumpPage(){
const submissionData={
// jwcode:90098890,
jwcode:90098888
};
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>
@ -25,7 +52,6 @@ export default {
}
div {
position: relative;
min-height: 100vh;
display: flex;
justify-content: center;
@ -38,14 +64,12 @@ div {
.image {
position: absolute;
/* 方法1:使用具体像素值定位 */
bottom: 80px; /* 距离底部100px */
bottom: 80px;
right: 54%;
width: 200px; /* 初始大小 */
width: 200px;
height: 160px;
object-fit: contain;
transition: all 0.3s ease;
border-radius: 10px;
}
.center:hover .image {

175
src/views/ProblemView.vue

@ -0,0 +1,175 @@
<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="question-all">
<div v-for="problem in currentProblem" :key="problem.id" class="question-card">
<div class="question">
<span class="text">{{problem.id}}</span>{{ problem.stem }}
</div>
</div>
<div class="options">
<lable class="option">
<input type="radio">
</lable>
<lable class="option">
<input type="radio">
</lable>
<lable class="option">
<input type="radio">
</lable>
<lable class="option">
<input type="radio">
</lable>
</div>
</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: 'ReportView' });
}
}
}
</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;
}
.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-all{
display: flex;
flex-direction: column;
gap: 30px;
}
</style>

348
src/views/ReportView.vue

@ -0,0 +1,348 @@
<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>推荐课程是量能擒牛</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: null
};
},
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);
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>

245
src/views/ResultView.vue

@ -1,41 +1,81 @@
<template>
<div class="home">
<div class="top">
<router-link to="/"><img src="../assets/return.jpg" alt="返回" class="ret"></router-link>
<div @click="showConfirmDialog" class="ret-top">
<img src="../assets/return.jpg" alt="返回" class="ret">
</div>
<h1>📈股票知识评测系统</h1>
<p>全方面评估您的股票投资知识水平获取个性化学习建议</p>
</div>
<div class="content">
<p class="p1">恭喜您完成测评</p>
<!-- <el-icon-circle-check></el-icon-circle-check> -->
<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="p2">
<router-link to="/report">查看分析报告</router-link>
<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.path('/report');
}
this.$router.push('/report');
},
//
showConfirmDialog() {
this.showDialog = true;
},
//
closeDialog() {
this.showDialog = false;
},
// 退
confirmExit() {
this.showDialog = false;
//
this.$router.push('/');
},
}
}
</script>
<style>
<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;
@ -45,49 +85,190 @@
box-shadow: 0 10px 30px rgba(0,0,0,0.3);
position: relative;
overflow: hidden;
/* text-align: center; */
}
.top h1 {
font-size: 2.2em;
margin-bottom: 10px;
background: none;
}
.top p {
font-size: 1.1em;
opacity: 0.9;
background: none;
}
.ret{
.ret {
width: 30px;
height: 50px;
float: left;
}
.home {
min-height: 100vh;
width: 100%;
background-color: #24293c;
overflow: auto;
padding: 20px;
}
.content {
float: left;
width:100%;
height: 720px;
border: #183954 solid 2px;
height: 750px;
width: 100%;
min-height: 600px;
border: #274779 solid 2px;
border-radius: 10px;
color: #f1f5f9;
padding: 20px 40px 50px;
margin-right: 20px;
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);
}
.p1{
font-size: 40px;
.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;
}
.home .p2{
height: 100px;
width: 200px;
background-color: #22608b;
.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>

114
src/views/TestView.vue

@ -1,14 +1,28 @@
<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"></div>
<div class="schedule" :style="{ width: progress + '%' }"></div>
</div>
<div class="text">
<div class="question">1以下哪项不是股票的基本特征</div>
@ -70,33 +84,115 @@
</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;
/* background-color: #24293c; */
}
.home{
min-height: 100vh;
width: 100%;
background-color: #24293c;
overflow:auto;
padding: 10px;
}
.top{
background: linear-gradient(135deg, #0c4a6e 0%, #075985 100%);
background:#0c4a6e;
color: white;
padding: 30px;
margin-bottom: 30px;
/* box-shadow: 0 10px 30px rgba(0,0,0,0.3); */
margin-bottom: 10px;
position: relative;
overflow: hidden;
}
h1,p{
background: linear-gradient(135deg, #0c4a6e 0%, #075985 100%);
.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%;

997
src/views/TextView.vue
File diff suppressed because it is too large
View File

Loading…
Cancel
Save