JayChou 2 months ago
commit adacb8a7f3
  1. 227
      pnpm-lock.yaml
  2. 7
      src/api/index.ts
  3. BIN
      src/assets/images/DialogBg.png
  4. BIN
      src/assets/images/btn1.png
  5. BIN
      src/assets/images/btn2.png
  6. BIN
      src/assets/images/space1.png
  7. BIN
      src/assets/images/space2.png
  8. BIN
      src/assets/images/space3.png
  9. 205
      src/layout/knowledgePage.vue
  10. 452
      src/layout/loginPage.vue
  11. 370
      src/layout/spacePage.vue
  12. 156
      src/layout/studyPage.vue
  13. 18
      src/router/index.ts
  14. 47
      src/views/largeDataScreen/home.vue
  15. 167
      src/views/target/index.vue

@ -126,6 +126,12 @@ importers:
unplugin-vue-components:
specifier: ^28.4.1
version: 28.4.1(@babel/parser@7.24.7)(vue@3.4.29(typescript@5.2.2))
unplugin-auto-import:
specifier: ^19.1.1
version: 19.1.1(@vueuse/core@10.11.0(vue@3.4.29(typescript@5.2.2)))
unplugin-vue-components:
specifier: ^28.4.1
version: 28.4.1(@babel/parser@7.24.7)(vue@3.4.29(typescript@5.2.2))
vite:
specifier: ^5.3.1
version: 5.3.1(@types/node@20.14.9)(less@4.2.2)(sass@1.77.6)
@ -398,6 +404,9 @@ packages:
'@jridgewell/sourcemap-codec@1.5.0':
resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
'@jridgewell/sourcemap-codec@1.5.0':
resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
'@kjgl77/datav-vue3@1.7.3':
resolution: {integrity: sha512-8zNu2zDXylDS6aL8SNDR7/h4ccO2LnBg/KbTwOeF7p9hqiRW9TR7Zd/e8baYnJPb9tAwYOubzWTQnjUTdtE8dA==}
@ -689,6 +698,12 @@ packages:
confbox@0.2.1:
resolution: {integrity: sha512-hkT3yDPFbs95mNCy1+7qNKC6Pro+/ibzYxtM2iqEigpf0sVw+bg4Zh9/snjsBcf990vfIsg5+1U7VyiyBb3etg==}
confbox@0.1.8:
resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
confbox@0.2.1:
resolution: {integrity: sha512-hkT3yDPFbs95mNCy1+7qNKC6Pro+/ibzYxtM2iqEigpf0sVw+bg4Zh9/snjsBcf990vfIsg5+1U7VyiyBb3etg==}
copy-anything@2.0.6:
resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==}
@ -713,6 +728,15 @@ packages:
supports-color:
optional: true
debug@4.4.0:
resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
engines: {node: '>=6.0'}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
supports-color:
optional: true
decode-uri-component@0.2.2:
resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==}
engines: {node: '>=0.10'}
@ -774,6 +798,10 @@ packages:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
escape-string-regexp@5.0.0:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
estree-walker@2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
@ -783,6 +811,12 @@ packages:
exsolve@1.0.4:
resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==}
estree-walker@3.0.3:
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
exsolve@1.0.4:
resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==}
extend@3.0.2:
resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
@ -918,6 +952,9 @@ packages:
js-tokens@9.0.1:
resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
js-tokens@9.0.1:
resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
json5@1.0.2:
resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
hasBin: true
@ -944,6 +981,10 @@ packages:
resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==}
engines: {node: '>=14'}
local-pkg@1.1.1:
resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==}
engines: {node: '>=14'}
lodash-es@4.17.21:
resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
@ -963,6 +1004,9 @@ packages:
magic-string@0.30.17:
resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
magic-string@0.30.17:
resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
make-dir@2.1.0:
resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
engines: {node: '>=6'}
@ -996,12 +1040,18 @@ packages:
mlly@1.7.4:
resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==}
mlly@1.7.4:
resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==}
mousetrap@1.6.5:
resolution: {integrity: sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA==}
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
nanoid@3.3.7:
resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
@ -1046,6 +1096,9 @@ packages:
pathe@2.0.3:
resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
pathe@2.0.3:
resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
picocolors@1.0.1:
resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
@ -1057,6 +1110,10 @@ packages:
resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
engines: {node: '>=12'}
picomatch@4.0.2:
resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
engines: {node: '>=12'}
pify@4.0.1:
resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
engines: {node: '>=6'}
@ -1125,6 +1182,9 @@ packages:
quansync@0.2.10:
resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==}
quansync@0.2.10:
resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==}
readdirp@3.6.0:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
@ -1181,6 +1241,9 @@ packages:
scule@1.3.0:
resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==}
scule@1.3.0:
resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==}
semver@5.7.2:
resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
hasBin: true
@ -1222,6 +1285,9 @@ packages:
strip-literal@3.0.0:
resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==}
strip-literal@3.0.0:
resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==}
supports-color@0.2.0:
resolution: {integrity: sha512-tdCZ28MnM7k7cJDJc7Eq80A9CsRFAAOZUy41npOZCs++qSjfIy7o5Rh46CBk+Dk5FbKJ33X3Tqg4YrV07N5RaA==}
engines: {node: '>=0.10.0'}
@ -1239,6 +1305,10 @@ packages:
resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==}
engines: {node: '>=12.0.0'}
tinyglobby@0.2.12:
resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==}
engines: {node: '>=12.0.0'}
to-fast-properties@2.0.0:
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
engines: {node: '>=4'}
@ -1258,6 +1328,9 @@ packages:
ufo@1.5.4:
resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
ufo@1.5.4:
resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
undici-types@5.26.5:
resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
@ -1298,6 +1371,43 @@ packages:
resolution: {integrity: sha512-Q0YDhwViJaSnHf1cxLf+/VKhmfdr/ZAS/RL2GQVO0cAbAfJAVUef2bvNu+veyWcEPNwsTlFmMiFLjf8Xeqog8g==}
engines: {node: '>=18.12.0'}
unimport@4.1.2:
resolution: {integrity: sha512-oVUL7PSlyVV3QRhsdcyYEMaDX8HJyS/CnUonEJTYA3//bWO+o/4gG8F7auGWWWkrrxBQBYOO8DKe+C53ktpRXw==}
engines: {node: '>=18.12.0'}
unplugin-auto-import@19.1.1:
resolution: {integrity: sha512-sCGZZrSR1Bc8RfN8Q0RUDxXtC20rdAt7UB4lDyq8MNtKVHiXXh+5af6Nz4JRp9Q+7HjnbgQfQox0TkEymjdUAQ==}
engines: {node: '>=14'}
peerDependencies:
'@nuxt/kit': ^3.2.2
'@vueuse/core': '*'
peerDependenciesMeta:
'@nuxt/kit':
optional: true
'@vueuse/core':
optional: true
unplugin-utils@0.2.4:
resolution: {integrity: sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==}
engines: {node: '>=18.12.0'}
unplugin-vue-components@28.4.1:
resolution: {integrity: sha512-niGSc0vJD9ueAnsqcfAldmtpkppZ09B6p2G1dL7X5S8KPdgbk1P+txPwaaDCe7N+eZh2VG1aAypLXkuJs3OSUg==}
engines: {node: '>=14'}
peerDependencies:
'@babel/parser': ^7.15.8
'@nuxt/kit': ^3.2.2
vue: 2 || 3
peerDependenciesMeta:
'@babel/parser':
optional: true
'@nuxt/kit':
optional: true
unplugin@2.2.1:
resolution: {integrity: sha512-Q0YDhwViJaSnHf1cxLf+/VKhmfdr/ZAS/RL2GQVO0cAbAfJAVUef2bvNu+veyWcEPNwsTlFmMiFLjf8Xeqog8g==}
engines: {node: '>=18.12.0'}
urix@0.1.0:
resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==}
deprecated: Please see https://github.com/lydell/urix#deprecated
@ -1384,6 +1494,9 @@ packages:
webpack-virtual-modules@0.6.2:
resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
webpack-virtual-modules@0.6.2:
resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
@ -1580,6 +1693,8 @@ snapshots:
'@jridgewell/sourcemap-codec@1.5.0': {}
'@jridgewell/sourcemap-codec@1.5.0': {}
'@kjgl77/datav-vue3@1.7.3(vue@3.4.29(typescript@5.2.2))':
dependencies:
'@jiaminghi/c-render': 0.4.3
@ -1886,6 +2001,10 @@ snapshots:
confbox@0.2.1: {}
confbox@0.1.8: {}
confbox@0.2.1: {}
copy-anything@2.0.6:
dependencies:
is-what: 3.14.1
@ -1903,6 +2022,10 @@ snapshots:
de-indent@1.0.2: {}
debug@4.4.0:
dependencies:
ms: 2.1.3
debug@4.4.0:
dependencies:
ms: 2.1.3
@ -2000,6 +2123,8 @@ snapshots:
escape-string-regexp@5.0.0: {}
escape-string-regexp@5.0.0: {}
estree-walker@2.0.2: {}
estree-walker@3.0.3:
@ -2008,6 +2133,12 @@ snapshots:
exsolve@1.0.4: {}
estree-walker@3.0.3:
dependencies:
'@types/estree': 1.0.5
exsolve@1.0.4: {}
extend@3.0.2: {}
fdir@6.4.3(picomatch@4.0.2):
@ -2121,6 +2252,8 @@ snapshots:
js-tokens@9.0.1: {}
js-tokens@9.0.1: {}
json5@1.0.2:
dependencies:
minimist: 1.2.8
@ -2159,6 +2292,12 @@ snapshots:
pkg-types: 2.1.0
quansync: 0.2.10
local-pkg@1.1.1:
dependencies:
mlly: 1.7.4
pkg-types: 2.1.0
quansync: 0.2.10
lodash-es@4.17.21: {}
lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21):
@ -2177,6 +2316,10 @@ snapshots:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
magic-string@0.30.17:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
make-dir@2.1.0:
dependencies:
pify: 4.0.1
@ -2204,6 +2347,13 @@ snapshots:
minimist@1.2.8: {}
mlly@1.7.4:
dependencies:
acorn: 8.14.1
pathe: 2.0.3
pkg-types: 1.3.1
ufo: 1.5.4
mlly@1.7.4:
dependencies:
acorn: 8.14.1
@ -2215,6 +2365,8 @@ snapshots:
ms@2.1.3: {}
ms@2.1.3: {}
nanoid@3.3.7: {}
natives@1.1.6: {}
@ -2245,12 +2397,16 @@ snapshots:
pathe@2.0.3: {}
pathe@2.0.3: {}
picocolors@1.0.1: {}
picomatch@2.3.1: {}
picomatch@4.0.2: {}
picomatch@4.0.2: {}
pify@4.0.1:
optional: true
@ -2330,6 +2486,8 @@ snapshots:
quansync@0.2.10: {}
quansync@0.2.10: {}
readdirp@3.6.0:
dependencies:
picomatch: 2.3.1
@ -2384,6 +2542,8 @@ snapshots:
scule@1.3.0: {}
scule@1.3.0: {}
semver@5.7.2:
optional: true
@ -2417,6 +2577,10 @@ snapshots:
dependencies:
js-tokens: 9.0.1
strip-literal@3.0.0:
dependencies:
js-tokens: 9.0.1
supports-color@0.2.0: {}
supports-color@2.0.0: {}
@ -2430,6 +2594,11 @@ snapshots:
fdir: 6.4.3(picomatch@4.0.2)
picomatch: 4.0.2
tinyglobby@0.2.12:
dependencies:
fdir: 6.4.3(picomatch@4.0.2)
picomatch: 4.0.2
to-fast-properties@2.0.0: {}
to-regex-range@5.0.1:
@ -2442,8 +2611,64 @@ snapshots:
ufo@1.5.4: {}
ufo@1.5.4: {}
undici-types@5.26.5: {}
unimport@4.1.2:
dependencies:
acorn: 8.14.1
escape-string-regexp: 5.0.0
estree-walker: 3.0.3
local-pkg: 1.1.1
magic-string: 0.30.17
mlly: 1.7.4
pathe: 2.0.3
picomatch: 4.0.2
pkg-types: 1.3.1
scule: 1.3.0
strip-literal: 3.0.0
tinyglobby: 0.2.12
unplugin: 2.2.1
unplugin-utils: 0.2.4
unplugin-auto-import@19.1.1(@vueuse/core@10.11.0(vue@3.4.29(typescript@5.2.2))):
dependencies:
local-pkg: 1.1.1
magic-string: 0.30.17
picomatch: 4.0.2
unimport: 4.1.2
unplugin: 2.2.1
unplugin-utils: 0.2.4
optionalDependencies:
'@vueuse/core': 10.11.0(vue@3.4.29(typescript@5.2.2))
unplugin-utils@0.2.4:
dependencies:
pathe: 2.0.3
picomatch: 4.0.2
unplugin-vue-components@28.4.1(@babel/parser@7.24.7)(vue@3.4.29(typescript@5.2.2)):
dependencies:
chokidar: 3.6.0
debug: 4.4.0
local-pkg: 1.1.1
magic-string: 0.30.17
mlly: 1.7.4
tinyglobby: 0.2.12
unplugin: 2.2.1
unplugin-utils: 0.2.4
vue: 3.4.29(typescript@5.2.2)
optionalDependencies:
'@babel/parser': 7.24.7
transitivePeerDependencies:
- supports-color
unplugin@2.2.1:
dependencies:
acorn: 8.14.1
webpack-virtual-modules: 0.6.2
unimport@4.1.2:
dependencies:
acorn: 8.14.1
@ -2552,6 +2777,8 @@ snapshots:
webpack-virtual-modules@0.6.2: {}
webpack-virtual-modules@0.6.2: {}
wrappy@1.0.2: {}
zrender@5.6.1:

@ -65,5 +65,12 @@ export const saveReport = (data: any) => {
url: "/xnRecords/saveSummarize",
method: "post",
data
})}
//获取实验目标
export const getExperiment = ()=>{
return request({
url:'/experimental/xnExperimental/selectExperimental',
method:'get',
})
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

@ -0,0 +1,205 @@
<template>
<div class="container-bgc">
<div class="top">
<div class="title">{{ setting.title }}</div>
</div>
<!-- 右边箭头 -->
<button class="submit-right" @click="SubRight"></button>
<!-- 左边按钮 -->
<button class="submit-left" @click="SubLeft"></button>
<div class="question-body">
<div class="question">知识点学习</div>
<el-scrollbar height="200px">
<div class="txt" v-html="Text"></div>
</el-scrollbar>
</div>
<div class="submit-buttons">
<!-- <button class="submit-btn" @click="reset">退出</button> -->
<!-- <button class="submit-btn" @click="enter">进入仿真实验</button> -->
<router-link class="submit-btn" to="">退出</router-link>
<router-link class="submit-btn" to="/program">进入仿真实验</router-link>
</div>
</div>
</template>
<script lang="ts" setup>
import settingStore from "@/store/modules/setting";
import { getExperiment } from '@/api/index'
import { ref, computed, onMounted, onUnmounted } from "vue"
import { useRouter } from 'vue-router';
const setting = settingStore();
//
const SubLeft = () => {
}
//
const SubRight = () => {
}
const Text = ref()
const getContent = async () => {
const res: any = await getExperiment();
// console.log(res.result.purposeRequirements,'res')
Text.value = res.result.purposeRequirements
console.log(Text.value);
}
onMounted(() => { getContent() });
</script>
<style lang="scss" scoped>
.container-bgc {
position: relative;
width: 100%;
// height: 1000px;
min-height: 100vh;
// background-color: #091d22;
background: url("@/assets/images/bg3.png") no-repeat;
background-size: cover;
.submit-right {
background: url("@/assets/images/right.png") no-repeat;
background-size: contain;
width: 60px;
/* 按钮宽度 */
height: 60px;
/* 按钮高度 */
border: none;
cursor: pointer;
position: absolute;
right: 0;
/* 紧靠右部 */
top: 40%;
/* 垂直居中*/
}
.submit-left {
background: url("@/assets/images/left.png") no-repeat;
background-size: contain;
width: 60px;
/* 按钮宽度 */
height: 60px;
/* 按钮高度 */
border: none;
cursor: pointer;
position: absolute;
left: 0;
/* 紧靠左部 */
top: 40%;
/* 垂直居中*/
}
.top {
width: 100%;
height: 75px;
text-align: center;
font-size: 42px;
line-height: 75px;
font-style: italic;
background: url("@/assets/images/topbgc.png") no-repeat;
background-size: cover;
.title {
color: #fff;
}
}
.question-body {
background: url("@/assets/images/FakeAnimateForPrototype.png") no-repeat center center;
/* 添加 background-position */
background-size: 99%;
/* 确保背景图片覆盖整个元素 */
width: 1100px;
/* 100% 宽度以确保背景图片完全显示 */
height: 600px;
/* 固定高度 */
margin-top: 100px;
margin-left: auto;
margin-right: auto;
padding-left: 50px;
padding-right: 50px;
padding-top: 30px;
.question {
font-size: 42px;
/* 字体大小 */
text-align: center;
/* 水平居中 */
letter-spacing: 3px;
/* 字符间距,单位可以是 px、em 等 */
margin-top: 45px;
margin-bottom: 20px;
color: #fff;
}
.scrollbar-demo-item {
display: flex;
align-items: center;
justify-content: center;
height: 50px;
margin: 20px;
margin-top: 30px;
text-align: center;
border-radius: 4px;
background: var(--el-color-primary-light-9);
color: var(--el-color-primary);
}
.txt {
margin-top: 28px;
margin-left: 20px;
margin-right: 20px;
font-size: 18px;
/* 字体大小 */
font-family: Consolas, sans-serif;
/* 字体样式 */
letter-spacing: 1.5px;
/* 字符间距,单位可以是 px、em 等 */
line-height: 1.5;
/* 行间距,1.5 表示字体大小的 1.5 倍 */
color: #9b9a9a;
}
}
.submit-buttons {
display: flex;
/* 使用 Flexbox 布局 */
flex-direction: row;
/* 水平排列按钮 */
justify-content: center;
/* 水平居中 */
gap: 450px;
/* 按钮之间的间距 */
margin-top: 10px;
}
.submit-btn {
background: url("@/assets/images/Button.png") center;
background-size: contain;
/* 确保背景图片覆盖整个元素 */
background-color: transparent;
/* 背景颜色设置为透明 */
border: none;
/* 移除边框 */
cursor: pointer;
/* 鼠标悬停时显示手型 */
width: 300px;
height: 41px;
font-size: 17px;
font-weight: bold;
/* 文字加粗 */
color: #fff;
display: flex;
align-items: center;
/* 垂直居中 */
justify-content: center;
/* 水平居中 */
text-decoration: none
}
}
</style>

@ -4,229 +4,231 @@
<div class="title">{{ setting.title }}</div>
</div>
<div class="main-content">
<el-row style="display: flex; justify-content: center">
<el-col>
<el-form :rules="rules" :model="formModel" ref="formRef" size="large" autocomplete="off" v-if="isRegister">
<el-form-item prop="username" class="custom-form-item">
<div style="display: flex; align-items: center; color: pink">
<div class="left" style="display: flex; align-items: center;width: 90px;">
<div style="padding-right: 10px; color: #1084c1">
<el-icon class="bold-icon">
<User />
</el-icon>
<div class="middle-content">
<div class="errorBtn" @click="clickErrorBtn"></div>
<el-row style="display: flex; justify-content: center">
<el-col>
<el-form :rules="rules" :model="formModel" ref="formRef" size="large" autocomplete="off" v-if="isRegister">
<el-form-item prop="username" class="custom-form-item">
<div style="display: flex; align-items: center; color: pink">
<div class="left" style="display: flex; align-items: center;width: 90px;">
<div style="padding-right: 10px; color: #1084c1">
<el-icon class="bold-icon">
<User />
</el-icon>
</div>
<div style="padding-right: 10px; color: #2592a1">用户账号</div>
</div>
<div style="padding-right: 10px; color: #2592a1">用户账号</div>
</div>
<div class="right">
<el-input v-model="formModel.username" style="border-color: #20bec8;"
placeholder="请输入用户账号"></el-input>
</div>
</div>
</el-form-item>
<el-form-item prop="password">
<div style="display: flex; align-items: center;">
<div class="left" style="display: flex; align-items: center ;width: 90px;">
<div style="padding-right: 10px; color: #1084c1">
<el-icon class="bold-icon">
<Lock />
</el-icon>
<div class="right">
<el-input v-model="formModel.username" style="border-color: #20bec8;"
placeholder="请输入用户账号"></el-input>
</div>
<div style="padding-right: 10px; color: #2592a1">用户密码</div>
</div>
<div class="right">
<el-input type="password" v-model="formModel.password" style="border-color: #20bec8"
placeholder="请输入密码" show-password></el-input>
</div>
</div>
</el-form-item>
<el-form-item prop="repassword">
<div style="display: flex; align-items: center;">
<div class="left" style="display: flex; align-items: center ;width: 90px;">
<div style="padding-right: 10px; color: #1084c1">
<el-icon class="bold-icon">
<Lock />
</el-icon>
</el-form-item>
<el-form-item prop="password">
<div style="display: flex; align-items: center;">
<div class="left" style="display: flex; align-items: center ;width: 90px;">
<div style="padding-right: 10px; color: #1084c1">
<el-icon class="bold-icon">
<Lock />
</el-icon>
</div>
<div style="padding-right: 10px; color: #2592a1">用户密码</div>
</div>
<div class="right">
<el-input type="password" v-model="formModel.password" style="border-color: #20bec8"
placeholder="请输入密码" show-password></el-input>
</div>
<div style="padding-right: 10px; color: #2592a1">确认密码</div>
</div>
<div class="right">
<el-input type="password" v-model="formModel.repassword" style="border-color: #20bec8"
placeholder="请再次输入密码" show-password></el-input>
</div>
</div>
</el-form-item>
<el-form-item prop="name" class="custom-form-item">
<div style="display: flex; align-items: center; color: pink">
<div class="left" style="display: flex; align-items: center;width: 90px;">
<div style="padding-right: 10px; color: #1084c1">
<el-icon class="bold-icon">
<Stamp />
</el-icon>
</el-form-item>
<el-form-item prop="repassword">
<div style="display: flex; align-items: center;">
<div class="left" style="display: flex; align-items: center ;width: 90px;">
<div style="padding-right: 10px; color: #1084c1">
<el-icon class="bold-icon">
<Lock />
</el-icon>
</div>
<div style="padding-right: 10px; color: #2592a1">确认密码</div>
</div>
<div class="right">
<el-input type="password" v-model="formModel.repassword" style="border-color: #20bec8"
placeholder="请再次输入密码" show-password></el-input>
</div>
<div style="padding-right: 10px; color: #2592a1">姓名</div>
</div>
<div class="right">
<el-input v-model="formModel.name" style="border-color: #20bec8;" placeholder="请输入姓名"></el-input>
</el-form-item>
<el-form-item prop="name" class="custom-form-item">
<div style="display: flex; align-items: center; color: pink">
<div class="left" style="display: flex; align-items: center;width: 90px;">
<div style="padding-right: 10px; color: #1084c1">
<el-icon class="bold-icon">
<Stamp />
</el-icon>
</div>
<div style="padding-right: 10px; color: #2592a1">姓名</div>
</div>
<div class="right">
<el-input v-model="formModel.name" style="border-color: #20bec8;" placeholder="请输入姓名"></el-input>
</div>
</div>
</div>
</el-form-item>
</el-form-item>
<el-form-item prop="clssid">
<div style="display: flex; align-items: center;">
<div class="left" style="display: flex; align-items: center ;width: 90px;">
<div style="padding-right: 10px; color: #1084c1">
<el-icon class="bold-icon">
<Avatar />
</el-icon>
<el-form-item prop="clssid">
<div style="display: flex; align-items: center;">
<div class="left" style="display: flex; align-items: center ;width: 90px;">
<div style="padding-right: 10px; color: #1084c1">
<el-icon class="bold-icon">
<Avatar />
</el-icon>
</div>
<div style="padding-right: 10px; color: #2592a1">班级</div>
</div>
<div style="padding-right: 10px; color: #2592a1">班级</div>
</div>
<div class="right">
<el-cascader placeholder="请选择所属班级" :props="props" style="width: 142%; height: 0.2344rem"
v-model="formModel.clssid" @change="handleChange" />
</div>
</div>
</el-form-item>
<!-- <el-cascader :props="props" style="width: 100%; height: 0.2344rem" v-model="formModel.clssid" /> -->
<el-form-item prop="studentNumb">
<div style="display: flex; align-items: center;">
<div class="left" style="display: flex; align-items: center ;width: 90px;">
<div style="padding-right: 10px; color: #1084c1">
<el-icon class="bold-icon">
<Avatar />
</el-icon>
<div class="right">
<el-cascader placeholder="请选择所属班级" :props="props" style="width: 142%; height: 0.2344rem"
v-model="formModel.clssid" @change="handleChange" />
</div>
<div style="padding-right: 10px; color: #2592a1">学号</div>
</div>
<div class="right">
<el-input v-model="formModel.studentNumb" style="border-color: #20bec8"
placeholder="请输入学号"></el-input>
</div>
</div>
</el-form-item>
<el-form-item prop="mobile">
<div style="display: flex; align-items: center;">
<div class="left" style="display: flex; align-items: center ;width: 90px;">
<div style="padding-right: 10px; color: #1084c1">
<el-icon class="bold-icon">
<Iphone />
</el-icon>
</el-form-item>
<!-- <el-cascader :props="props" style="width: 100%; height: 0.2344rem" v-model="formModel.clssid" /> -->
<el-form-item prop="studentNumb">
<div style="display: flex; align-items: center;">
<div class="left" style="display: flex; align-items: center ;width: 90px;">
<div style="padding-right: 10px; color: #1084c1">
<el-icon class="bold-icon">
<Avatar />
</el-icon>
</div>
<div style="padding-right: 10px; color: #2592a1">学号</div>
</div>
<div class="right">
<el-input v-model="formModel.studentNumb" style="border-color: #20bec8"
placeholder="请输入学号"></el-input>
</div>
<div style="padding-right: 10px; color: #2592a1">手机号</div>
</div>
<div class="right">
<el-input v-model="formModel.mobile" style="border-color: #20bec8" placeholder="请输入手机号"></el-input>
</div>
</div>
</el-form-item>
<el-form-item>
<div style="display: flex; align-items: center;">
<div class="left" style="display: flex; align-items: center ;width: 90px;">
<div style="padding-right: 10px; color: #1084c1">
<el-icon class="bold-icon">
<Grid />
</el-icon>
</el-form-item>
<el-form-item prop="mobile">
<div style="display: flex; align-items: center;">
<div class="left" style="display: flex; align-items: center ;width: 90px;">
<div style="padding-right: 10px; color: #1084c1">
<el-icon class="bold-icon">
<Iphone />
</el-icon>
</div>
<div style="padding-right: 10px; color: #2592a1">手机号</div>
</div>
<div class="right">
<el-input v-model="formModel.mobile" style="border-color: #20bec8" placeholder="请输入手机号"></el-input>
</div>
<div style="padding-right: 10px; color: #2592a1">验证码</div>
</div>
<div class="right">
<div class="captcha">
<el-input v-model="formModel.captcha" style="height: 0.2344rem" maxlength="4" />
<div class="code" @click="getcodeinfo">
<img :src="codeUrl" alt="" srcset="" />
</el-form-item>
<el-form-item>
<div style="display: flex; align-items: center;">
<div class="left" style="display: flex; align-items: center ;width: 90px;">
<div style="padding-right: 10px; color: #1084c1">
<el-icon class="bold-icon">
<Grid />
</el-icon>
</div>
<div style="padding-right: 10px; color: #2592a1">验证码</div>
</div>
<div class="right">
<div class="captcha">
<el-input v-model="formModel.captcha" style="height: 0.2344rem" maxlength="4" />
<div class="code" @click="getcodeinfo">
<img :src="codeUrl" alt="" srcset="" />
</div>
</div>
</div>
</div>
</div>
</el-form-item>
<el-form-item style="margin-bottom: -30px;">
<el-button style="color: #3ad7e2; background-color: #0e2e5e; width: 165px" class="button" type="primary"
auto-insert-space @click="register">
注册
</el-button>
<el-button style="color: #3ad7e2; background-color: #0e2e5e; width: 165px" class="button" type="primary"
auto-insert-space @click="toLogin">
返回到登录页
</el-button>
</el-form-item>
<el-form-item> </el-form-item>
<!-- <el-form-item class="flex">
</el-form-item>
<el-form-item>
<el-button style="color: #3ad7e2; background-color: #0e2e5e; width: 152px;margin-top: 10px;"
class="button" type="primary" auto-insert-space @click="register">
注册
</el-button>
<el-button style="color: #3ad7e2; background-color: #0e2e5e; width: 155px;margin-top: 10px;"
class="button" type="primary" auto-insert-space @click="toLogin">
返回到登录页
</el-button>
</el-form-item>
<el-form-item> </el-form-item>
<!-- <el-form-item class="flex">
<el-link type="info" :underline="false" @click="isRegister = false">
返回
</el-link>
</el-form-item> -->
</el-form>
<el-form :model="formModel" :rules="rules" ref="formRef" size="large" autocomplete="off" v-else
class="custom-form">
<el-form-item prop="username" class="custom-form-item">
<div style="display: flex; align-items: center; color: pink">
<div class="left" style="display: flex; align-items: center;width: 90px;">
<div style="padding-right: 10px; color: #1084c1">
<el-icon class="bold-icon">
<User />
</el-icon>
</el-form>
<el-form style="margin-bottom: 90px;" :model="formModel" :rules="rules" ref="formRef" size="large"
autocomplete="off" v-else class="custom-form">
<el-form-item prop="username" class="custom-form-item">
<div style="display: flex; align-items: center;">
<div class="left" style="display: flex; align-items: center;width: 90px;">
<div style="padding-right: 10px; color: #1084c1">
<el-icon class="bold-icon">
<User />
</el-icon>
</div>
<div style="padding-right: 10px; color: #2592a1">用户名</div>
</div>
<div style="padding-right: 10px; color: #2592a1">用户名</div>
</div>
<div class="right">
<el-input v-model="formModel.username" style="border-color: #20bec8;" placeholder="请输入用户名"></el-input>
</div>
</div>
</el-form-item>
<el-form-item prop="studentNumb">
<div style="display: flex; align-items: center;">
<div class="left" style="display: flex; align-items: center ;width: 90px;">
<div style="padding-right: 10px; color: #1084c1">
<el-icon class="bold-icon">
<Avatar />
</el-icon>
<div class="right">
<el-input v-model="formModel.username" style="height: 0.2344rem ;width: 250px;"
placeholder="请输入用户名"></el-input>
</div>
<div style="padding-right: 10px; color: #2592a1">学号</div>
</div>
<div class="right">
<el-input v-model="formModel.studentNumb" style="border-color: #20bec8"
placeholder="请输入学号"></el-input>
</div>
</div>
</el-form-item>
<el-form-item prop="password">
<div style="display: flex; align-items: center;">
<div class="left" style="display: flex; align-items: center ;width: 90px;">
<div style="padding-right: 10px; color: #1084c1">
<el-icon class="bold-icon">
<Lock />
</el-icon>
</el-form-item>
<el-form-item prop="studentNumb">
<div style="display: flex; align-items: center;">
<div class="left" style="display: flex; align-items: center ;width: 90px;">
<div style="padding-right: 10px; color: #1084c1">
<el-icon class="bold-icon">
<Avatar />
</el-icon>
</div>
<div style="padding-right: 10px; color: #2592a1">学号</div>
</div>
<div class="right">
<el-input v-model="formModel.studentNumb" style="height: 0.2344rem;width: 250px;"
placeholder="请输入学号"></el-input>
</div>
<div style="padding-right: 10px; color: #2592a1">密码</div>
</div>
<div class="right">
<el-input type="password" v-model="formModel.password" style="border-color: #20bec8"
placeholder="请输入密码"></el-input>
</div>
</div>
</el-form-item>
<el-form-item>
<div style="display: flex; align-items: center;">
<div class="left" style="display: flex; align-items: center ;width: 90px;">
<div style="padding-right: 10px; color: #1084c1">
<el-icon class="bold-icon">
<Grid />
</el-icon>
</el-form-item>
<el-form-item prop="password">
<div style="display: flex; align-items: center;">
<div class="left" style="display: flex; align-items: center ;width: 90px;">
<div style="padding-right: 10px; color: #1084c1">
<el-icon class="bold-icon">
<Lock />
</el-icon>
</div>
<div style="padding-right: 10px; color: #2592a1">密码</div>
</div>
<div class="right">
<el-input type="password" v-model="formModel.password" style="height: 0.2344rem;width: 250px;"
placeholder="请输入密码"></el-input>
</div>
<div style="padding-right: 10px; color: #2592a1">验证码</div>
</div>
<div class="right">
<div class="captcha">
<el-input v-model="formModel.captcha" style="height: 0.2344rem" maxlength="4" />
<div class="code" @click="getcodeinfo">
<img :src="codeUrl" alt="" srcset="" />
</el-form-item>
<el-form-item>
<div style="display: flex; align-items: center;">
<div class="left" style="display: flex; align-items: center ;width: 90px;">
<div style="padding-right: 10px; color: #1084c1">
<el-icon class="bold-icon">
<Grid />
</el-icon>
</div>
<div style="padding-right: 10px; color: #2592a1">验证码</div>
</div>
<div class="right">
<div class="captcha">
<el-input v-model="formModel.captcha" style="height: 0.2344rem;width: 250px;" maxlength="4" />
<div class="code" @click="getcodeinfo">
<img :src="codeUrl" alt="" srcset="" />
</div>
</div>
</div>
</div>
</div>
</el-form-item>
<!-- <el-form-item label="验证码">
</el-form-item>
<!-- <el-form-item label="验证码">
<div class="captcha">
<el-input v-model="formModel.captcha" style="height: 0.2344rem" maxlength="4" />
<div class="code" @click="getcodeinfo">
@ -234,14 +236,17 @@
</div>
</div>
</el-form-item> -->
<el-form-item>
<el-button class="hexagon-button" type="primary" auto-insert-space @click="login">登录</el-button>
<el-button class="hexagon-button" type="primary" auto-insert-space @click="toRegister">去注册</el-button>
</el-form-item>
</el-form>
</el-col>
<el-col :span="12" :xs="0"></el-col>
</el-row>
<el-form-item>
<el-button style="margin:30px 50px 0px 20px;" class="hexagon-button" type="primary" auto-insert-space
@click="login">登录</el-button>
<el-button style="margin:30px 0px 0px 0;" class="hexagon-button" type="primary" auto-insert-space
@click="toRegister">去注册</el-button>
</el-form-item>
</el-form>
</el-col>
<el-col :span="12" :xs="0"></el-col>
</el-row>
</div>
</div>
</div>
</template>
@ -404,16 +409,8 @@ const register = async () => {
getcodeinfo()
}
// getcodeinfo()
// console.log(11111);
// ElMessage.warning(res.message)
// console.log(res)
};
const codeUrl = ref("");
const getcodeinfo = async () => {
@ -422,11 +419,6 @@ const getcodeinfo = async () => {
console.log(codeUrl.value);
};
getcodeinfo();
// import { useRouter } from 'vue-router'
// const router = useRouter()
// const goToPage=()=>{
// router.push('/')
// }
//
const login = async () => {
await formRef.value.validate();
@ -450,6 +442,10 @@ const toLogin = () => {
isRegister.value = false
getcodeinfo();
}
const clickErrorBtn=()=>{
console.log('aaa');
}
</script>
<style lang="less" scoped>
@ -459,7 +455,7 @@ const toLogin = () => {
// height: 1080px;
min-height: 100vh;
background-color: #091d22;
background: url("../assets//images/bg2.png") no-repeat;
background: url("../assets//images/bg1.png") no-repeat;
background-size: cover;
.top {
@ -482,11 +478,31 @@ const toLogin = () => {
display: flex;
justify-content: center;
align-items: center;
height: 1000px;
min-height: 100vh;
margin: 0;
background: url("../assets/images/login.png") no-repeat;
background-position: center;
background-size: 50% auto;
// margin: 0;
.middle-content{
position: relative;
width: 60%;
height:80%;
display: flex;
justify-content: center;
align-items: center;
// background-color: pink;
background: url("../assets/images/login.png") no-repeat;
background-position: 59% -7px;
background-size: 75% auto;
}
.errorBtn{
position: absolute;
top: 30px;
right: 122px;
width: 50px;
height: 50px;
background-color: transparent;
clip-path: polygon(100% 0, 0 0, 100% 100%);
cursor: pointer;
}
}
.captcha {
@ -520,7 +536,7 @@ const toLogin = () => {
width: 180px;
height: 50px;
/* 使用clip-path定义按钮形状 */
clip-path: polygon(15% 0, 85% 0, 100% 50%, 85% 100%, 15% 100%, 0 50%);
// clip-path: polygon(15% 0, 85% 0, 100% 50%, 85% 100%, 15% 100%, 0 50%);
/* 模拟边框效果 */
box-shadow: 0 0 0 2px cyan;
background-color: #14213d;
@ -537,6 +553,8 @@ const toLogin = () => {
// }
.el-input {
width: 300px;
height: 36px;
}
:deep(.el-form-item__error) {

@ -0,0 +1,370 @@
<template>
<div class="login_container">
<div class="top">
<div class="loginBtn">
<p @click="loginFn">{{ user.token ? '已登录' : '登录/注册' }}</p>
</div>
<div class="title">{{ setting.title }}</div>
</div>
<div class="main-content">
<div class="personal-center">
<div class="leftBox">
<h2>个人中心</h2>
<p>学生8527</p>
<button class="btn1" @click="handleHomeClick">首页</button>
<button class="btn2" @click="handleRecordClick">学习/成绩记录</button>
<button class="btn3" @click="handlePasswordClick">密码管理</button>
</div>
<div class="rightBoxes">
<div class="topBox">
<el-form style="margin:30px 0 0 200px;" :rules="rules" :model="formModel" ref="formRef"
size="large" autocomplete="off">
<el-form-item prop="username" class="custom-form-item">
<div class="left" style="width: 60px;color: #fbfdfd;">
用户账号
</div>
<div class="right">
<el-input v-model="formModel.username" style="border-color: #20bec8;"></el-input>
</div>
</el-form-item>
<el-form-item prop="name" class="custom-form-item">
<div style="display: flex; align-items: center; color: pink">
<div class="left" style="width: 60px;color: #fbfdfd;">
姓名
</div>
<div class="right">
<el-input v-model="formModel.name" style="border-color: #20bec8;"></el-input>
</div>
</div>
</el-form-item>
<el-form-item prop="clssid" class="custom-form-item">
<div class="left" style="width: 60px;color: #fbfdfd;">
班级
</div>
<div class="right">
<el-input v-model="formModel.clssid" style="border-color: #20bec8;"></el-input>
</div>
</el-form-item>
</el-form>
</div>
<div class="bottomBox">
<el-form size="large" style="margin:30px 0 0 265px;" :rules="rules" :model="formModel">
<el-form-item prop="studentNumb">
<div style="display: flex; align-items: center;">
<div class="left" style="width: 60px;color: #fbfdfd;">
学号
</div>
<div class="right">
<el-input v-model="formModel.studentNumb"
style="border-color: #20bec8"></el-input>
</div>
</div>
</el-form-item>
<el-form-item prop="mobile">
<div style="display: flex; align-items: center;">
<div class="left" style="width: 60px;color: #fbfdfd;">
手机号
</div>
<div class="right">
<el-input v-model="formModel.mobile" style="border-color: #20bec8"></el-input>
</div>
</div>
</el-form-item>
<el-form-item prop="score">
<div style="display: flex; align-items: center;">
<div class="left" style="width: 60px;color: #fbfdfd;">
成绩
</div>
<div class="right">
<el-input v-model="formModel.score" style="border-color: #20bec8"></el-input>
</div>
</div>
</el-form-item>
</el-form>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup lang="ts" name="spacePage">
import { ref } from "vue"
import { useRouter } from 'vue-router'
import settingStore from "@/store/modules/setting";
const setting = settingStore();
import userStore from '@/store/modules/user';
const router = useRouter()
const user = userStore();
const loginFn = () => {
router.push('/login')
}
const handleHomeClick = () => {
//
console.log('首页按钮被点击');
router.push('/studyPage')
};
const handleRecordClick = () => {
console.log('学习/成绩记录按钮被点击');
};
const handlePasswordClick = () => {
console.log('密码管理按钮被点击');
};
const formRef = ref();
const formModel = ref({
username: "",
name: "",
clssid: '',
studentNumb: "",
mobile: '',
score: ''
});
const rules = {
username: [
{ required: true, message: "请输入用户名", trigger: "blur" },
{
min: 5,
max: 30,
message: "用户名长度最小五位最大三十位",
trigger: ["change", "blur"],
},
],
studentNumb: [
{ required: true, message: "请输入学号", trigger: "blur" },
{
min: 5,
max: 11,
message: "学号长度最小五位最大十一位",
trigger: ["change", "blur"],
},
],
name: [{ required: true, message: "请输入姓名", trigger: "blur" }],
clssid: [
{ required: true, message: "请选择所属班级", trigger: "blur" },
],
mobile: [
{ required: true, message: "请输入手机号", trigger: "blur" },
{
pattern: /^1[3-9]\d{9}$/,
message: "手机号格式不正确",
trigger: ["change", "blur"],
},
],
score:[
{ required: true, message: "成绩", trigger: "blur" },
]
};
</script>
<style lang="less" scoped>
.login_container {
position: relative;
width: 100%;
// height: 1080px;
min-height: 100vh;
background-color: #091d22;
background: url("../assets//images/bg3.png") no-repeat;
background-size: cover;
.top {
width: 100%;
height: 75px;
text-align: center;
font-size: 42px;
line-height: 75px;
font-style: italic;
background: url("../assets/images/topbgc.png") no-repeat;
// background-position: center bottom -10px;
background-size: cover;
.title {
color: #fff;
}
.loginBtn {
position: absolute;
/* 清除浮动影响 */
float: left;
/* 向左浮动 */
top: 10px;
left: 230px;
border: 1px solid #33FEFE;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
width: 142px;
height: 40px;
line-height: 37px;
background: linear-gradient(to bottom, #08B9C1, #0758B8);
transform: skew(-30deg);
cursor: pointer;
/* 在X轴方向倾斜 -30 度 */
border-radius: 5%;
p {
transform: skew(30deg);
/* 反向倾斜,抵消父元素的变形 */
font-size: 18px;
color: #fff;
}
}
}
}
.main-content {
display: flex;
justify-content: center;
align-items: center;
.personal-center {
display: flex;
width: 1800px;
height: 600px;
margin-top: 150px;
justify-content: space-evenly;
.leftBox {
position: relative;
width: 550px;
height: 600px;
background: url("../assets/images/space1.png") no-repeat;
transform: skewX(-5deg);
margin-right: -150px;
// flex-direction: column;
background-size: 98%;
h2 {
position: absolute;
top: 6px;
left: 60%;
transform: translateX(-50%);
color: #ededd8;
font-size: 16px;
font-weight: 700;
height: 40px;
line-height: 40px;
font-size: 20px;
}
p {
position: absolute;
top: 28%;
left: 55%;
transform: translateX(-50%);
color: #fdeda0;
font-size: 20px;
font-weight: 700;
height: 40px;
line-height: 40px;
}
.btn1,
.btn2,
.btn3 {
display: block;
width: 200px;
height: 55px;
background-color: #e9ddab;
margin: 25px auto;
border: none;
border-radius: 5px;
color: #333;
font-size: 20px;
font-weight: 700;
transform: skewX(-17deg);
}
.btn1 {
position: absolute;
top: 268px;
left: 31%;
}
.btn2 {
position: absolute;
left: 26%;
top: 360px;
}
.btn3 {
position: absolute;
left: 22%;
top: 453px;
}
}
.rightBoxes {
width: 1200px;
height: 600px;
// background-color: skyblue;
// flex: 1;
display: flex;
justify-content: space-around;
flex-direction: column;
transform: skewX(-17deg);
.topBox {
// width: 800px;
// height: 300px;
flex: 1;
background-color: lightgreen;
background: url("../assets/images/space2.png") no-repeat;
background-size: 98%;
// display: flex;
// justify-content: center;
// align-items: center;
transform: skewX(15deg);
.el-input {
width: 450px;
height: 50px;
}
:deep(.el-form-item__error) {
left: 90px;
}
}
.bottomBox {
margin-top: 36px;
flex: 1;
// width: 800px;
// height: 200px;
background-color: lightcoral;
background: url("../assets/images/space3.png") no-repeat;
background-size: 98%;
// display: flex;
// justify-content: center;
// align-items: center;
transform: skewX(15deg);
.el-input {
width: 450px;
height: 50px;
}
:deep(.el-form-item__error) {
left: 90px;
}
}
}
}
}
// .personal-center {
// background-color: #003366;
// padding: 20px;
// color: white;
// border-radius: 10px;
// transform: skewX(-15deg);
// display: flex;
// }</style>

@ -0,0 +1,156 @@
<template>
<div class="login_container">
<div class="top">
<div class="loginBtn">
<p @click="loginFn">{{ user.token ? '已登录' : '登录/注册' }}</p>
</div>
<div class="title">{{ setting.title }}</div>
</div>
<div class="main-content">
<div class="box" :style="{ backgroundImage: isBox1Clicked ? `url(${btn1})` : `url(${btn2})` }"
@click="handleBoxClick(1)">
知识点学习
</div>
<div class="box" :style="{ backgroundImage: isBox2Clicked ? `url(${btn1})` : `url(${btn2})` }"
@click="handleBoxClick(2)">学习</div>
<div class="box" :style="{ backgroundImage: isBox3Clicked ? `url(${btn1})` : `url(${btn2})` }"
style="margin-bottom: 80px;" @click="handleBoxClick(3)">仿真实验</div>
</div>
</div>
</template>
<script setup lang="ts" name="studyPage">
import { ref } from "vue"
import { useRouter } from 'vue-router'
import settingStore from "@/store/modules/setting";
const setting = settingStore();
import userStore from '@/store/modules/user';
import btn1 from '@/assets/images/btn1.png'
import btn2 from '@/assets/images/btn2.png'
console.log(btn1, 'btn1');
const router = useRouter()
const user = userStore();
const loginFn = () => {
router.push('/login')
}
const isBox1Clicked = ref(false);
const isBox2Clicked = ref(false);
const isBox3Clicked = ref(false);
const handleBoxClick = (boxNumber) => {
isBox1Clicked.value = false;
isBox2Clicked.value = false;
isBox3Clicked.value = false;
switch (boxNumber) {
case 1:
isBox1Clicked.value = true;
// router.push('/page1'); // /page1
break;
case 2:
isBox2Clicked.value = true;
// router.push('/page2');
break;
case 3:
isBox3Clicked.value = true;
// router.push('/page3');
break;
default:
break;
}
};
</script>
<style lang="less" scoped>
.login_container {
position: relative;
width: 100%;
// height: 1080px;
min-height: 100vh;
background-color: #091d22;
background: url("../assets//images/bg1.png") no-repeat;
background-size: cover;
.top {
width: 100%;
height: 75px;
text-align: center;
font-size: 42px;
line-height: 75px;
font-style: italic;
background: url("../assets/images/topbgc.png") no-repeat;
// background-position: center bottom -10px;
background-size: cover;
.title {
color: #fff;
}
.loginBtn {
position: absolute;
/* 清除浮动影响 */
float: left;
/* 向左浮动 */
top: 10px;
left: 230px;
border: 1px solid #33FEFE;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
width: 142px;
height: 40px;
line-height: 37px;
background: linear-gradient(to bottom, #08B9C1, #0758B8);
transform: skew(-30deg);
cursor: pointer;
/* 在X轴方向倾斜 -35 度 */
border-radius: 5%;
p {
transform: skew(30deg);
/* 反向倾斜,抵消父元素的变形 */
font-size: 18px;
color: #fff;
}
}
}
}
.main-content {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
margin: 0;
// background: url("../assets/images/login.png") no-repeat;
background-position: center;
background-size: 50% auto;
flex-direction: column;
.box {
width: 520px;
height: 162px;
// background-color: #007BFF;
// background: url("../assets/images/btn2.png") no-repeat;
background-repeat: no-repeat;
margin: 30px 0 0 25px;
cursor: pointer;
background-repeat: no-repeat;
background-size: contain;
/* 让图片完整显示在盒子内 */
background-position: center;
/* 图片在盒子中水平和垂直居中 */
display: flex;
/* 使用 flex 布局 */
justify-content: center;
/* 水平居中 */
// align-items: center;
/* 垂直居中 */
color: white;
/* 设置文字颜色 */
text-align: center;
/* 文本居中对齐 */
font-size: 49px;
font-weight: 700;
line-height: 190px;
}
}
</style>

@ -37,11 +37,29 @@ const routerList: any = [
name: 'SubjectTest',
component: () => import('@/views/subjectTest/index.vue'),
},
{
path: '/target', // 实验目标(简介)
name: 'Target',
component: () => import('@/views/target/index.vue'),
},
{
path: '/login',
name: 'Login',
component: () => import('@/layout/loginPage.vue')
},
{
path:'/studyPage',
name:'StudyPage',
component: () => import('@/layout/studyPage.vue')
},{
path: '/spacePage',
name: 'SpacePage',
component:()=>import('@/layout/spacePage.vue')
},{
path: '/knowledgePage',
name: 'KnowledgePage',
component: () => import('@/layout/knowledgePage.vue')
},
];

@ -490,7 +490,21 @@
Instruments将在遵循保密协议的前提下使用您的搜索查询来改进搜索结果和相关性
</div>
</div>
<div class="step7" v-show="installationStep === 7">
<div class="step6" v-show="installationStep === 7">
<div class="title">产品通知</div>
<div class="tip">请查看所选配置的相关信息</div>
<div class="item">
安装须知本协议具合同效力在你方下载软件和/或完成软件安装过程之前请仔细阅读本协议一旦你方下载和/或点击相应的按钮从而完成软件安装过程即表示你方同意本协议条款并愿意受本协议的约束若你方不愿意成为本协议的当事方并不接受本协议所有条款和条件的约束请点击相应的按钮取消安装过程即不要安装或使用软件并在收到软件之日起三十(30)日内将软件(及所有随附书面材料及其包装)退还至获取该软件的地点所有退还事宜都应遵守退还发生时适用的NI退还政策.com/info并输入信息代码expm69查询
<br>定义 在本协议中下列术语的含义如下本National Instruments许可适用于软件LabVIEW 204
</div>
<div class="radio-container">
<el-radio-group v-model="radio1">
<el-radio value="接受" size="large">我接受上述2条许可协议</el-radio>
<el-radio value="不接受" size="large">我不接受某些许可协议</el-radio>
</el-radio-group>
</div>
</div>
<div class="step8" v-show="installationStep === 8">
<p class="name">总进度</p>
<el-progress
:text-inside="true"
@ -501,7 +515,7 @@
<p class="name">复制新文件</p>
<el-progress :percentage="100" status="success" :stroke-width="20" />
</div>
<div class="step7" v-show="installationStep === 8">
<div class="step8" v-show="installationStep === 9">
<p class="name">总进度</p>
<el-progress
:text-inside="true"
@ -516,6 +530,26 @@
<template #footer>
<div class="dialog-footer">
<el-button
v-show="installationStep === 11"
@click="Installation = false"
style="background-color: #f3f3f3; color: #000000; border-color: #ccc"
>稍后重启(A)</el-button
>
<el-button
v-show="installationStep === 11"
type="primary"
@click="Completed"
style="background-color: #0052d9; color: #fff; border: 0"
>
关闭计算机(S)
</el-button>
<el-button
v-show="installationStep === 11"
@click="Installation = false"
style="background-color: #f3f3f3; color: #000000; border-color: #ccc"
>重新启动(R)</el-button
>
<el-button
v-show="installationStep === 5"
@click="Installation = false"
@ -529,17 +563,19 @@
>磁盘占用</el-button
>
<el-button
v-show="installationStep === 6"
v-show="installationStep === 6||installationStep === 7||installationStep === 8||installationStep === 9"
@click="Installation = false"
style="background-color: #f3f3f3; color: #000000; border-color: #ccc"
>保存文件</el-button
>
<el-button
v-if="installationStep === 11 ==false"
@click="Installation = false"
style="background-color: #f3f3f3; color: #000000; border-color: #ccc"
>上一步</el-button
>
<el-button
v-if="installationStep === 11 ==false"
type="primary"
@click="setInstallationStep"
style="background-color: #0052d9; color: #fff; border: 0"
@ -547,6 +583,7 @@
下一步
</el-button>
<el-button
v-if="installationStep === 11 ==false"
type="primary"
@click="Installation = false"
style="background-color: #f3f3f3; color: #000000; border-color: #ccc"
@ -761,6 +798,10 @@ const setInstallationStep = (): void => {
Installation.value = false;
Popup.value = true;
}
if(installationStep.value == 11){
Installation.value = true
Popup.value = false
}
};
const Completed = (): void => {
Popup.value = false;

@ -0,0 +1,167 @@
<template>
<div class="container-bgc">
<div class="top">
<div class="title">{{ setting.title }}</div>
</div>
<!-- 右边箭头 -->
<button class="submit-right" @click="SubRight"></button>
<!-- 左边按钮 -->
<button class="submit-left" @click="SubLeft"></button>
<div class="question-body">
<div class="question" >实验目标</div>
<el-scrollbar height="330px"> <div class="txt" v-html="Text"></div> </el-scrollbar>
</div>
<div class="submit-buttons">
<!-- <button class="submit-btn" @click="reset">退出</button> -->
<!-- <button class="submit-btn" @click="enter">进入仿真实验</button> -->
<router-link class="submit-btn" to="">退出</router-link>
<router-link class="submit-btn" to="/program">进入仿真实验</router-link>
</div>
</div>
</template>
<script lang="ts" setup>
import settingStore from "@/store/modules/setting";
import {getExperiment} from '@/api/index'
import { ref,computed,onMounted, onUnmounted} from "vue"
import { useRouter } from 'vue-router';
const setting = settingStore();
//
const SubLeft =()=>{
}
//
const SubRight =()=>{
}
const Text = ref()
const getContent = async()=>{
const res:any = await getExperiment();
// console.log(res.result.purposeRequirements,'res')
Text.value = res.result.purposeRequirements
console.log(Text.value);
}
onMounted(() => {getContent()});
</script>
<style lang="scss" scoped>
.container-bgc {
position: relative;
width: 100%;
// height: 1000px;
min-height: 100vh;
// background-color: #091d22;
background: url("@/assets/images/bg3.png") no-repeat;
background-size: cover;
.submit-right{
background: url("@/assets/images/right.png") no-repeat;
background-size: contain;
width: 60px; /* 按钮宽度 */
height: 60px; /* 按钮高度 */
border: none;
cursor: pointer;
position: absolute;
right: 0; /* 紧靠右部 */
top: 40%; /* 垂直居中*/
}
.submit-left{
background: url("@/assets/images/left.png") no-repeat;
background-size: contain;
width: 60px; /* 按钮宽度 */
height: 60px; /* 按钮高度 */
border: none;
cursor: pointer;
position: absolute;
left: 0; /* 紧靠左部 */
top: 40%; /* 垂直居中*/
}
.top {
width: 100%;
height: 75px;
text-align: center;
font-size: 42px;
line-height: 75px;
font-style: italic;
background: url("@/assets/images/topbgc.png") no-repeat;
background-size: cover;
.title {
color: #fff;
}
}
.question-body {
background: url("@/assets/images/FakeAnimateForPrototype.png") no-repeat center center; /* 添加 background-position */
background-size: contain; /* 确保背景图片覆盖整个元素 */
width: 1100px; /* 100% 宽度以确保背景图片完全显示 */
height: 500px; /* 固定高度 */
margin-top: 100px;
margin-left: auto;
margin-right: auto;
padding-left: 50px;
padding-right: 50px;
padding-top: 30px;
.question{
font-size: 42px; /* 字体大小 */
text-align: center; /* 水平居中 */
letter-spacing: 3px; /* 字符间距,单位可以是 px、em 等 */
margin-bottom: 30px;
color: #fff;
}
.scrollbar-demo-item {
display: flex;
align-items: center;
justify-content: center;
height: 50px;
margin: 10px;
text-align: center;
border-radius: 4px;
background: var(--el-color-primary-light-9);
color: var(--el-color-primary);
}
.txt {
margin-top: 18px;
margin-left: 20px;
margin-right: 20px;
font-size: 18px; /* 字体大小 */
font-family: Consolas, sans-serif; /* 字体样式 */
letter-spacing: 1.5px; /* 字符间距,单位可以是 px、em 等 */
line-height: 1.5; /* 行间距,1.5 表示字体大小的 1.5 倍 */
color: #9b9a9a;
}
}
.submit-buttons {
display: flex; /* 使用 Flexbox 布局 */
flex-direction: row; /* 水平排列按钮 */
justify-content: center; /* 水平居中 */
gap: 450px; /* 按钮之间的间距 */
margin-top: 50px;
}
.submit-btn {
background: url("@/assets/images/Button.png") center;
background-size: contain; /* 确保背景图片覆盖整个元素 */
background-color: transparent; /* 背景颜色设置为透明 */
border: none; /* 移除边框 */
cursor: pointer; /* 鼠标悬停时显示手型 */
width: 300px;
height: 41px;
font-size: 17px;
font-weight: bold; /* 文字加粗 */
color: #fff;
display: flex;
align-items: center; /* 垂直居中 */
justify-content: center; /* 水平居中 */
text-decoration: none
}
}
</style>
Loading…
Cancel
Save