mirror of
https://github.com/wangdage12/Snap.Server.Web.git
synced 2026-02-17 10:02:08 +08:00
为登录页面添加粒子背景、添加主页
This commit is contained in:
480
package-lock.json
generated
480
package-lock.json
generated
@@ -8,6 +8,8 @@
|
|||||||
"name": "ht-web",
|
"name": "ht-web",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@tsparticles/slim": "^3.9.1",
|
||||||
|
"@tsparticles/vue3": "^3.0.1",
|
||||||
"axios": "^1.13.2",
|
"axios": "^1.13.2",
|
||||||
"element-plus": "^2.13.0",
|
"element-plus": "^2.13.0",
|
||||||
"pinia": "^3.0.4",
|
"pinia": "^3.0.4",
|
||||||
@@ -1395,6 +1397,484 @@
|
|||||||
"win32"
|
"win32"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"node_modules/@tsparticles/basic": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/basic/-/basic-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-ijr2dHMx0IQHqhKW3qA8tfwrR2XYbbWYdaJMQuBo2CkwBVIhZ76U+H20Y492j/NXpd1FUnt2aC0l4CEVGVGdeQ==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/matteobruni"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/tsparticles"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "buymeacoffee",
|
||||||
|
"url": "https://www.buymeacoffee.com/matteobruni"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1",
|
||||||
|
"@tsparticles/move-base": "3.9.1",
|
||||||
|
"@tsparticles/plugin-hex-color": "3.9.1",
|
||||||
|
"@tsparticles/plugin-hsl-color": "3.9.1",
|
||||||
|
"@tsparticles/plugin-rgb-color": "3.9.1",
|
||||||
|
"@tsparticles/shape-circle": "3.9.1",
|
||||||
|
"@tsparticles/updater-color": "3.9.1",
|
||||||
|
"@tsparticles/updater-opacity": "3.9.1",
|
||||||
|
"@tsparticles/updater-out-modes": "3.9.1",
|
||||||
|
"@tsparticles/updater-size": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/engine": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/engine/-/engine-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-DpdgAhWMZ3Eh2gyxik8FXS6BKZ8vyea+Eu5BC4epsahqTGY9V3JGGJcXC6lRJx6cPMAx1A0FaQAojPF3v6rkmQ==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/matteobruni"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/tsparticles"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "buymeacoffee",
|
||||||
|
"url": "https://www.buymeacoffee.com/matteobruni"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"hasInstallScript": true,
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/interaction-external-attract": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-attract/-/interaction-external-attract-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-5AJGmhzM9o4AVFV24WH5vSqMBzOXEOzIdGLIr+QJf4fRh9ZK62snsusv/ozKgs2KteRYQx+L7c5V3TqcDy2upg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/interaction-external-bounce": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-bounce/-/interaction-external-bounce-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-bv05+h70UIHOTWeTsTI1AeAmX6R3s8nnY74Ea6p6AbQjERzPYIa0XY19nq/hA7+Nrg+EissP5zgoYYeSphr85A==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/interaction-external-bubble": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-bubble/-/interaction-external-bubble-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-tbd8ox/1GPl+zr+KyHQVV1bW88GE7OM6i4zql801YIlCDrl9wgTDdDFGIy9X7/cwTvTrCePhrfvdkUamXIribQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/interaction-external-connect": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-connect/-/interaction-external-connect-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-sq8YfUNsIORjXHzzW7/AJQtfi/qDqLnYG2qOSE1WOsog39MD30RzmiOloejOkfNeUdcGUcfsDgpUuL3UhzFUOA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/interaction-external-grab": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-grab/-/interaction-external-grab-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-QwXza+sMMWDaMiFxd8y2tJwUK6c+nNw554+/9+tEZeTTk2fCbB0IJ7p/TH6ZGWDL0vo2muK54Njv2fEey191ow==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/interaction-external-pause": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-pause/-/interaction-external-pause-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-Gzv4/FeNir0U/tVM9zQCqV1k+IAgaFjDU3T30M1AeAsNGh/rCITV2wnT7TOGFkbcla27m4Yxa+Fuab8+8pzm+g==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/interaction-external-push": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-push/-/interaction-external-push-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-GvnWF9Qy4YkZdx+WJL2iy9IcgLvzOIu3K7aLYJFsQPaxT8d9TF8WlpoMlWKnJID6H5q4JqQuMRKRyWH8aAKyQw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/interaction-external-remove": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-remove/-/interaction-external-remove-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-yPThm4UDWejDOWW5Qc8KnnS2EfSo5VFcJUQDWc1+Wcj17xe7vdSoiwwOORM0PmNBzdDpSKQrte/gUnoqaUMwOA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/interaction-external-repulse": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-repulse/-/interaction-external-repulse-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-/LBppXkrMdvLHlEKWC7IykFhzrz+9nebT2fwSSFXK4plEBxDlIwnkDxd3FbVOAbnBvx4+L8+fbrEx+RvC8diAw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/interaction-external-slow": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-slow/-/interaction-external-slow-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-1ZYIR/udBwA9MdSCfgADsbDXKSFS0FMWuPWz7bm79g3sUxcYkihn+/hDhc6GXvNNR46V1ocJjrj0u6pAynS1KQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/interaction-particles-attract": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/interaction-particles-attract/-/interaction-particles-attract-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-CYYYowJuGwRLUixQcSU/48PTKM8fCUYThe0hXwQ+yRMLAn053VHzL7NNZzKqEIeEyt5oJoy9KcvubjKWbzMBLQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/interaction-particles-collisions": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/interaction-particles-collisions/-/interaction-particles-collisions-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-ggGyjW/3v1yxvYW1IF1EMT15M6w31y5zfNNUPkqd/IXRNPYvm0Z0ayhp+FKmz70M5p0UxxPIQHTvAv9Jqnuj8w==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/interaction-particles-links": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/interaction-particles-links/-/interaction-particles-links-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-MsLbMjy1vY5M5/hu/oa5OSRZAUz49H3+9EBMTIOThiX+a+vpl3sxc9AqNd9gMsPbM4WJlub8T6VBZdyvzez1Vg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/move-base": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/move-base/-/move-base-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-X4huBS27d8srpxwOxliWPUt+NtCwY+8q/cx1DvQxyqmTA8VFCGpcHNwtqiN+9JicgzOvSuaORVqUgwlsc7h4pQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/move-parallax": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/move-parallax/-/move-parallax-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-whlOR0bVeyh6J/hvxf/QM3DqvNnITMiAQ0kro6saqSDItAVqg4pYxBfEsSOKq7EhjxNvfhhqR+pFMhp06zoCVA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/plugin-easing-quad": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/plugin-easing-quad/-/plugin-easing-quad-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-C2UJOca5MTDXKUTBXj30Kiqr5UyID+xrY/LxicVWWZPczQW2bBxbIbfq9ULvzGDwBTxE2rdvIB8YFKmDYO45qw==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/matteobruni"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/tsparticles"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "buymeacoffee",
|
||||||
|
"url": "https://www.buymeacoffee.com/matteobruni"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/plugin-hex-color": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/plugin-hex-color/-/plugin-hex-color-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-vZgZ12AjUicJvk7AX4K2eAmKEQX/D1VEjEPFhyjbgI7A65eX72M465vVKIgNA6QArLZ1DLs7Z787LOE6GOBWsg==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/matteobruni"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/tsparticles"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "buymeacoffee",
|
||||||
|
"url": "https://www.buymeacoffee.com/matteobruni"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/plugin-hsl-color": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/plugin-hsl-color/-/plugin-hsl-color-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-jJd1iGgRwX6eeNjc1zUXiJivaqC5UE+SC2A3/NtHwwoQrkfxGWmRHOsVyLnOBRcCPgBp/FpdDe6DIDjCMO715w==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/matteobruni"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/tsparticles"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "buymeacoffee",
|
||||||
|
"url": "https://www.buymeacoffee.com/matteobruni"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/plugin-rgb-color": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/plugin-rgb-color/-/plugin-rgb-color-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-SBxk7f1KBfXeTnnklbE2Hx4jBgh6I6HOtxb+Os1gTp0oaghZOkWcCD2dP4QbUu7fVNCMOcApPoMNC8RTFcy9wQ==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/matteobruni"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/tsparticles"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "buymeacoffee",
|
||||||
|
"url": "https://www.buymeacoffee.com/matteobruni"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/shape-circle": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/shape-circle/-/shape-circle-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-DqZFLjbuhVn99WJ+A9ajz9YON72RtCcvubzq6qfjFmtwAK7frvQeb6iDTp6Ze9FUipluxVZWVRG4vWTxi2B+/g==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/shape-emoji": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/shape-emoji/-/shape-emoji-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-ifvY63usuT+hipgVHb8gelBHSeF6ryPnMxAAEC1RGHhhXfpSRWMtE6ybr+pSsYU52M3G9+TF84v91pSwNrb9ZQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/shape-image": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/shape-image/-/shape-image-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-fCA5eme8VF3oX8yNVUA0l2SLDKuiZObkijb0z3Ky0qj1HUEVlAuEMhhNDNB9E2iELTrWEix9z7BFMePp2CC7AA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/shape-line": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/shape-line/-/shape-line-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-wT8NSp0N9HURyV05f371cHKcNTNqr0/cwUu6WhBzbshkYGy1KZUP9CpRIh5FCrBpTev34mEQfOXDycgfG0KiLQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/shape-polygon": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/shape-polygon/-/shape-polygon-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-dA77PgZdoLwxnliH6XQM/zF0r4jhT01pw5y7XTeTqws++hg4rTLV9255k6R6eUqKq0FPSW1/WBsBIl7q/MmrqQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/shape-square": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/shape-square/-/shape-square-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-DKGkDnRyZrAm7T2ipqNezJahSWs6xd9O5LQLe5vjrYm1qGwrFxJiQaAdlb00UNrexz1/SA7bEoIg4XKaFa7qhQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/shape-star": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/shape-star/-/shape-star-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-kdMJpi8cdeb6vGrZVSxTG0JIjCwIenggqk0EYeKAwtOGZFBgL7eHhF2F6uu1oq8cJAbXPujEoabnLsz6mW8XaA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/slim": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/slim/-/slim-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-CL5cDmADU7sDjRli0So+hY61VMbdroqbArmR9Av+c1Fisa5ytr6QD7Jv62iwU2S6rvgicEe9OyRmSy5GIefwZw==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/matteobruni"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/tsparticles"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "buymeacoffee",
|
||||||
|
"url": "https://www.buymeacoffee.com/matteobruni"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/basic": "3.9.1",
|
||||||
|
"@tsparticles/engine": "3.9.1",
|
||||||
|
"@tsparticles/interaction-external-attract": "3.9.1",
|
||||||
|
"@tsparticles/interaction-external-bounce": "3.9.1",
|
||||||
|
"@tsparticles/interaction-external-bubble": "3.9.1",
|
||||||
|
"@tsparticles/interaction-external-connect": "3.9.1",
|
||||||
|
"@tsparticles/interaction-external-grab": "3.9.1",
|
||||||
|
"@tsparticles/interaction-external-pause": "3.9.1",
|
||||||
|
"@tsparticles/interaction-external-push": "3.9.1",
|
||||||
|
"@tsparticles/interaction-external-remove": "3.9.1",
|
||||||
|
"@tsparticles/interaction-external-repulse": "3.9.1",
|
||||||
|
"@tsparticles/interaction-external-slow": "3.9.1",
|
||||||
|
"@tsparticles/interaction-particles-attract": "3.9.1",
|
||||||
|
"@tsparticles/interaction-particles-collisions": "3.9.1",
|
||||||
|
"@tsparticles/interaction-particles-links": "3.9.1",
|
||||||
|
"@tsparticles/move-parallax": "3.9.1",
|
||||||
|
"@tsparticles/plugin-easing-quad": "3.9.1",
|
||||||
|
"@tsparticles/shape-emoji": "3.9.1",
|
||||||
|
"@tsparticles/shape-image": "3.9.1",
|
||||||
|
"@tsparticles/shape-line": "3.9.1",
|
||||||
|
"@tsparticles/shape-polygon": "3.9.1",
|
||||||
|
"@tsparticles/shape-square": "3.9.1",
|
||||||
|
"@tsparticles/shape-star": "3.9.1",
|
||||||
|
"@tsparticles/updater-life": "3.9.1",
|
||||||
|
"@tsparticles/updater-rotate": "3.9.1",
|
||||||
|
"@tsparticles/updater-stroke-color": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/updater-color": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/updater-color/-/updater-color-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-XGWdscrgEMA8L5E7exsE0f8/2zHKIqnTrZymcyuFBw2DCB6BIV+5z6qaNStpxrhq3DbIxxhqqcybqeOo7+Alpg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/updater-life": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/updater-life/-/updater-life-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-Oi8aF2RIwMMsjssUkCB6t3PRpENHjdZf6cX92WNfAuqXtQphr3OMAkYFJFWkvyPFK22AVy3p/cFt6KE5zXxwAA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/updater-opacity": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/updater-opacity/-/updater-opacity-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-w778LQuRZJ+IoWzeRdrGykPYSSaTeWfBvLZ2XwYEkh/Ss961InOxZKIpcS6i5Kp/Zfw0fS1ZAuqeHwuj///Osw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/updater-out-modes": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/updater-out-modes/-/updater-out-modes-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-cKQEkAwbru+hhKF+GTsfbOvuBbx2DSB25CxOdhtW2wRvDBoCnngNdLw91rs+0Cex4tgEeibkebrIKFDDE6kELg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/updater-rotate": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/updater-rotate/-/updater-rotate-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-9BfKaGfp28JN82MF2qs6Ae/lJr9EColMfMTHqSKljblwbpVDHte4umuwKl3VjbRt87WD9MGtla66NTUYl+WxuQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/updater-size": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/updater-size/-/updater-size-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-3NSVs0O2ApNKZXfd+y/zNhTXSFeG1Pw4peI8e6z/q5+XLbmue9oiEwoPy/tQLaark3oNj3JU7Q903ZijPyXSzw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/updater-stroke-color": {
|
||||||
|
"version": "3.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/updater-stroke-color/-/updater-stroke-color-3.9.1.tgz",
|
||||||
|
"integrity": "sha512-3x14+C2is9pZYTg9T2TiA/aM1YMq4wLdYaZDcHm3qO30DZu5oeQq0rm/6w+QOGKYY1Z3Htg9rlSUZkhTHn7eDA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "3.9.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tsparticles/vue3": {
|
||||||
|
"version": "3.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tsparticles/vue3/-/vue3-3.0.1.tgz",
|
||||||
|
"integrity": "sha512-BxaSZ0wtxq33SDsrqLkLWoV88Jd5BnBoYjyVhKSNzOLOesCiG8Z5WQC1QZGTez79l/gBe0xaCDF0ng1e2iKJvA==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/matteobruni"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/tsparticles"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "buymeacoffee",
|
||||||
|
"url": "https://www.buymeacoffee.com/matteobruni"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@tsparticles/engine": "^3.0.3",
|
||||||
|
"vue": "^3.3.13"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@types/estree": {
|
"node_modules/@types/estree": {
|
||||||
"version": "1.0.8",
|
"version": "1.0.8",
|
||||||
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
|
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
|
||||||
|
|||||||
@@ -9,6 +9,8 @@
|
|||||||
"preview": "vite preview"
|
"preview": "vite preview"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@tsparticles/slim": "^3.9.1",
|
||||||
|
"@tsparticles/vue3": "^3.0.1",
|
||||||
"axios": "^1.13.2",
|
"axios": "^1.13.2",
|
||||||
"element-plus": "^2.13.0",
|
"element-plus": "^2.13.0",
|
||||||
"pinia": "^3.0.4",
|
"pinia": "^3.0.4",
|
||||||
|
|||||||
BIN
public/HT_logo.png
Normal file
BIN
public/HT_logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1008 KiB |
1
public/README.md
Normal file
1
public/README.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Copyright © 2025 DGP Studio, All Rights Reserved.
|
||||||
95
src/components/Header.vue
Normal file
95
src/components/Header.vue
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
<template>
|
||||||
|
<div class="app-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<img :src="appIcon" alt="App Icon" class="app-icon" />
|
||||||
|
<span class="app-name">{{ appName }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<template v-for="action in headerActions" :key="action.id">
|
||||||
|
<component
|
||||||
|
:is="action.component || 'el-button'"
|
||||||
|
v-bind="action.props"
|
||||||
|
@click="action.onClick"
|
||||||
|
class="header-action-btn"
|
||||||
|
>
|
||||||
|
<template v-if="action.icon">
|
||||||
|
<el-icon>
|
||||||
|
<component :is="action.icon" />
|
||||||
|
</el-icon>
|
||||||
|
</template>
|
||||||
|
<span>{{ action.label }}</span>
|
||||||
|
</component>
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { computed } from 'vue'
|
||||||
|
|
||||||
|
interface HeaderAction {
|
||||||
|
id: string
|
||||||
|
label: string
|
||||||
|
icon?: any
|
||||||
|
component?: any
|
||||||
|
props?: Record<string, any>
|
||||||
|
onClick: () => void
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
appIcon?: string
|
||||||
|
appName?: string
|
||||||
|
actions?: HeaderAction[]
|
||||||
|
}
|
||||||
|
|
||||||
|
const props = withDefaults(defineProps<Props>(), {
|
||||||
|
appIcon: '/vite.svg',
|
||||||
|
appName: 'Snap Hutao Web',
|
||||||
|
actions: () => []
|
||||||
|
})
|
||||||
|
|
||||||
|
const headerActions = computed(() => props.actions)
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.app-header {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 16px 32px;
|
||||||
|
background: var(--header-bg);
|
||||||
|
border-bottom: 1px solid var(--border-color);
|
||||||
|
min-height: 70px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-left {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.app-icon {
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
border-radius: 8px;
|
||||||
|
object-fit: contain;
|
||||||
|
}
|
||||||
|
|
||||||
|
.app-name {
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--text-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-right {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-action-btn {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 6px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -2,8 +2,8 @@
|
|||||||
<el-container class="layout">
|
<el-container class="layout">
|
||||||
<el-aside :width="isCollapse ? '64px' : '200px'" class="aside">
|
<el-aside :width="isCollapse ? '64px' : '200px'" class="aside">
|
||||||
<div class="logo" :class="{ collapsed: isCollapse }">
|
<div class="logo" :class="{ collapsed: isCollapse }">
|
||||||
<span v-if="!isCollapse">Vite Admin</span>
|
<span v-if="!isCollapse">Snap Hutao Web</span>
|
||||||
<span v-else>VA</span>
|
<span v-else></span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<el-menu
|
<el-menu
|
||||||
|
|||||||
@@ -8,6 +8,9 @@ import '@/styles/index.scss'
|
|||||||
import App from './App.vue'
|
import App from './App.vue'
|
||||||
import router from './router'
|
import router from './router'
|
||||||
import { useThemeStore } from './stores/theme'
|
import { useThemeStore } from './stores/theme'
|
||||||
|
import Particles from '@tsparticles/vue3'
|
||||||
|
import { loadSlim } from '@tsparticles/slim'
|
||||||
|
import type { Engine } from '@tsparticles/engine'
|
||||||
|
|
||||||
|
|
||||||
const app = createApp(App)
|
const app = createApp(App)
|
||||||
@@ -16,7 +19,11 @@ const pinia = createPinia()
|
|||||||
app.use(pinia)
|
app.use(pinia)
|
||||||
app.use(router)
|
app.use(router)
|
||||||
app.use(ElementPlus)
|
app.use(ElementPlus)
|
||||||
|
app.use(Particles, {
|
||||||
|
init: async (engine: Engine) => {
|
||||||
|
await loadSlim(engine)
|
||||||
|
}
|
||||||
|
})
|
||||||
import '@/router/permission'
|
import '@/router/permission'
|
||||||
|
|
||||||
// 初始化主题
|
// 初始化主题
|
||||||
|
|||||||
@@ -9,11 +9,16 @@ const routes = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/',
|
path: '/',
|
||||||
|
component: () => import('@/views/home/index.vue'),
|
||||||
|
meta: { hidden: true }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/dashboard',
|
||||||
component: DefaultLayout,
|
component: DefaultLayout,
|
||||||
redirect: '/dashboard',
|
redirect: '/dashboard/home',
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: 'dashboard',
|
path: 'home',
|
||||||
component: () => import('@/views/dashboard/index.vue'),
|
component: () => import('@/views/dashboard/index.vue'),
|
||||||
meta: { title: '首页', icon: 'House' },
|
meta: { title: '首页', icon: 'House' },
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -6,7 +6,8 @@ router.beforeEach(async (to, _ , next) => {
|
|||||||
|
|
||||||
// 未登录
|
// 未登录
|
||||||
if (!userStore.token) {
|
if (!userStore.token) {
|
||||||
if (to.path === '/login') {
|
// 主页(/)允许未登录访问
|
||||||
|
if (to.path === '/' || to.path === '/login') {
|
||||||
next()
|
next()
|
||||||
} else {
|
} else {
|
||||||
next('/login')
|
next('/login')
|
||||||
|
|||||||
219
src/views/home/index.vue
Normal file
219
src/views/home/index.vue
Normal file
@@ -0,0 +1,219 @@
|
|||||||
|
<template>
|
||||||
|
<div class="home-page">
|
||||||
|
<Header
|
||||||
|
:app-icon="appIcon"
|
||||||
|
:app-name="appName"
|
||||||
|
:actions="headerActions"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<div class="home-content">
|
||||||
|
<div class="hero-section">
|
||||||
|
<img :src="appIcon" alt="App Icon" class="hero-icon" />
|
||||||
|
<h1 class="hero-title">{{ appName }}</h1>
|
||||||
|
<p class="hero-description">
|
||||||
|
{{ appDescription }}
|
||||||
|
</p>
|
||||||
|
<div class="hero-buttons">
|
||||||
|
<template v-for="button in heroButtons" :key="button.id">
|
||||||
|
<el-button
|
||||||
|
:type="button.type || 'primary'"
|
||||||
|
:size="button.size || 'large'"
|
||||||
|
@click="button.onClick"
|
||||||
|
>
|
||||||
|
<el-icon v-if="button.icon">
|
||||||
|
<component :is="button.icon" />
|
||||||
|
</el-icon>
|
||||||
|
<span>{{ button.label }}</span>
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from 'vue'
|
||||||
|
import { useRouter } from 'vue-router'
|
||||||
|
import { Setting, Document, ChatDotRound } from '@element-plus/icons-vue'
|
||||||
|
import Header from '@/components/Header.vue'
|
||||||
|
import { ElMessage } from 'element-plus'
|
||||||
|
|
||||||
|
const router = useRouter()
|
||||||
|
|
||||||
|
// 配置项
|
||||||
|
const appIcon = ref('/HT_logo.png')
|
||||||
|
const appName = ref('Snap Hutao')
|
||||||
|
const appDescription = ref('胡桃工具箱是一款以 MIT 协议开源的原神工具箱,专为现代化 Windows 平台设计,旨在改善桌面端玩家的游戏体验。')
|
||||||
|
|
||||||
|
// 页头右侧按钮配置
|
||||||
|
const headerActions = ref([
|
||||||
|
{
|
||||||
|
id: 'github',
|
||||||
|
label: 'GitHub 仓库',
|
||||||
|
icon: Document,
|
||||||
|
component: 'el-button',
|
||||||
|
props: {
|
||||||
|
type: 'default',
|
||||||
|
link: true
|
||||||
|
},
|
||||||
|
onClick: () => {
|
||||||
|
window.open('https://github.com/wangdage12/Snap.Hutao', '_blank')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'discord',
|
||||||
|
label: '加入 Discord 服务器',
|
||||||
|
icon: ChatDotRound,
|
||||||
|
component: 'el-button',
|
||||||
|
props: {
|
||||||
|
type: 'default',
|
||||||
|
link: true
|
||||||
|
},
|
||||||
|
onClick: () => {
|
||||||
|
window.open('https://discord.gg/ucH3mgeWpQ', '_blank')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'console',
|
||||||
|
label: '控制台',
|
||||||
|
icon: Setting,
|
||||||
|
component: 'el-button',
|
||||||
|
props: {
|
||||||
|
type: 'primary'
|
||||||
|
},
|
||||||
|
onClick: () => {
|
||||||
|
router.push('/dashboard')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
])
|
||||||
|
|
||||||
|
// 主页中心按钮配置
|
||||||
|
const heroButtons = ref([
|
||||||
|
{
|
||||||
|
id: 'btn1',
|
||||||
|
label: '快速开始',
|
||||||
|
type: 'primary',
|
||||||
|
size: 'large',
|
||||||
|
icon: undefined,
|
||||||
|
onClick: () => {
|
||||||
|
window.open('https://github.com/wangdage12/Snap.Hutao', '_blank')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'btn2',
|
||||||
|
label: '查看文档',
|
||||||
|
type: 'default',
|
||||||
|
size: 'large',
|
||||||
|
icon: undefined,
|
||||||
|
onClick: () => {
|
||||||
|
// window.open('https://github.com/wangdage12/Snap.Server.Web', '_blank')
|
||||||
|
ElMessage.info('文档正在编写中,敬请期待!')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
])
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.home-page {
|
||||||
|
min-height: 100vh;
|
||||||
|
background: var(--main-bg);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.home-content {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 40px 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-section {
|
||||||
|
text-align: center;
|
||||||
|
max-width: 800px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-icon {
|
||||||
|
width: 120px;
|
||||||
|
height: 120px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
border-radius: 20px;
|
||||||
|
object-fit: contain;
|
||||||
|
animation: float 3s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes float {
|
||||||
|
0%, 100% {
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
transform: translateY(-10px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-title {
|
||||||
|
font-size: 48px;
|
||||||
|
font-weight: 700;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
color: var(--text-color);
|
||||||
|
background: linear-gradient(135deg, var(--aside-active), #67c23a);
|
||||||
|
-webkit-background-clip: text;
|
||||||
|
-webkit-text-fill-color: transparent;
|
||||||
|
background-clip: text;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-description {
|
||||||
|
font-size: 18px;
|
||||||
|
color: var(--text-color);
|
||||||
|
line-height: 1.6;
|
||||||
|
margin-bottom: 40px;
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-buttons {
|
||||||
|
display: flex;
|
||||||
|
gap: 16px;
|
||||||
|
justify-content: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-buttons .el-button {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 6px;
|
||||||
|
padding: 16px 32px;
|
||||||
|
font-size: 16px;
|
||||||
|
border-radius: 8px;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-buttons .el-button:hover {
|
||||||
|
transform: translateY(-2px);
|
||||||
|
box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.app-header {
|
||||||
|
padding: 12px 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-title {
|
||||||
|
font-size: 36px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-description {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-buttons {
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: stretch;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-buttons .el-button {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -1,7 +1,12 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="login-container">
|
<div class="login-container">
|
||||||
|
<!-- 粒子动画背景 -->
|
||||||
|
<vue-particles
|
||||||
|
id="tsparticles"
|
||||||
|
:options="particleOptions"
|
||||||
|
/>
|
||||||
<el-card class="login-card">
|
<el-card class="login-card">
|
||||||
<h2 class="title">系统登录</h2>
|
<h2 class="title">Snap Hutao服务器管理-登录</h2>
|
||||||
|
|
||||||
<el-form
|
<el-form
|
||||||
ref="loginFormRef"
|
ref="loginFormRef"
|
||||||
@@ -49,6 +54,7 @@ import { webLoginApi } from '@/api/auth'
|
|||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vue-router'
|
||||||
import { useUserStore } from '@/stores/user'
|
import { useUserStore } from '@/stores/user'
|
||||||
|
|
||||||
|
|
||||||
// 表单实例
|
// 表单实例
|
||||||
const loginFormRef = ref<FormInstance>()
|
const loginFormRef = ref<FormInstance>()
|
||||||
|
|
||||||
@@ -104,6 +110,81 @@ const handleLogin = async () => {
|
|||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 粒子配置选项
|
||||||
|
const particleOptions = ref({
|
||||||
|
background: {
|
||||||
|
color: "#0d0d0d"
|
||||||
|
},
|
||||||
|
fpsLimit: 60,
|
||||||
|
|
||||||
|
particles: {
|
||||||
|
number: {
|
||||||
|
value: 200,
|
||||||
|
density: {
|
||||||
|
enable: true,
|
||||||
|
area: 800
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
color: {
|
||||||
|
value: "#00bcd4"
|
||||||
|
},
|
||||||
|
|
||||||
|
shape: {
|
||||||
|
type: "circle"
|
||||||
|
},
|
||||||
|
|
||||||
|
opacity: {
|
||||||
|
value: 0.6
|
||||||
|
},
|
||||||
|
|
||||||
|
size: {
|
||||||
|
value: 2
|
||||||
|
},
|
||||||
|
|
||||||
|
move: {
|
||||||
|
enable: true,
|
||||||
|
speed: 0.6,
|
||||||
|
direction: "none",
|
||||||
|
outModes: "out"
|
||||||
|
},
|
||||||
|
|
||||||
|
links: {
|
||||||
|
enable: true,
|
||||||
|
distance: 120,
|
||||||
|
color: "#00bcd4",
|
||||||
|
opacity: 0.4,
|
||||||
|
width: 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
interactivity: {
|
||||||
|
events: {
|
||||||
|
onHover: {
|
||||||
|
enable: true,
|
||||||
|
mode: "grab"
|
||||||
|
},
|
||||||
|
onClick: {
|
||||||
|
enable: true,
|
||||||
|
mode: "push"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
modes: {
|
||||||
|
grab: {
|
||||||
|
distance: 180,
|
||||||
|
links: {
|
||||||
|
opacity: 0.6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
push: {
|
||||||
|
quantity: 4
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
detectRetina: true
|
||||||
|
})
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
@@ -117,12 +198,15 @@ const handleLogin = async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.login-card {
|
.login-card {
|
||||||
width: 360px;
|
width: 400px;
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
|
position: relative;
|
||||||
|
z-index: 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
Reference in New Issue
Block a user