diff --git a/package.json b/package.json index e2dbb874..cf546b8e 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,7 @@ "qrcode": "^1.5.4", "sass": "^1.83.4", "tailwindcss": "^ 3.4.17", + "three": "^0.185.1", "vue": "^3.5.13", "vue-router": "^4.5.0", "vue-toastification": "^2.0.0-rc.5", @@ -103,6 +104,7 @@ "@types/node": "^20.1.4", "@types/nprogress": "^0.2.3", "@types/qrcode": "^1.5.6", + "@types/three": "^0.185.1", "@types/webfontloader": "^1.6.34", "@typescript-eslint/eslint-plugin": "^8.20.0", "@typescript-eslint/parser": "^8.20.0", diff --git a/src/components/misc/MetalLogo3D.vue b/src/components/misc/MetalLogo3D.vue new file mode 100644 index 00000000..459bac2a --- /dev/null +++ b/src/components/misc/MetalLogo3D.vue @@ -0,0 +1,461 @@ + + + + + diff --git a/src/pages/login.vue b/src/pages/login.vue index f1171b94..f237770a 100644 --- a/src/pages/login.vue +++ b/src/pages/login.vue @@ -4,7 +4,7 @@ import { useAuthStore, useUserStore } from '@/stores' import { authState, userState } from '@/stores/types' import api from '@/api' import router from '@/router' -import logo from '@images/logo.png' +import MetalLogo3D from '@/components/misc/MetalLogo3D.vue' import { bufferToBase64Url, base64UrlToUint8Array, urlBase64ToUint8Array } from '@/@core/utils/navigator' import { SUPPORTED_LOCALES, SupportedLocale } from '@/types/i18n' import { getCurrentLocale, setI18nLanguage } from '@/plugins/i18n' @@ -733,7 +733,7 @@ onUnmounted(() => {
-

MoviePilot

{{ t('login.welcomeBack') || 'Welcome Back' }}

@@ -1072,47 +1072,10 @@ onUnmounted(() => { justify-content: center; animation: logo-enter 700ms cubic-bezier(0.16, 1, 0.3, 1) 100ms both; margin-block-end: 8px; - - /* Logo 背后的柔光环 */ - &::before { - position: absolute; - z-index: -1; - border-radius: 50%; - animation: logo-pulse 4s ease-in-out infinite; - background: radial-gradient(circle, rgba(var(--v-theme-primary), 0.2) 0%, transparent 70%); - block-size: 120px; - content: ''; - inline-size: 120px; - } } .login-logo { - animation: logo-float 6s ease-in-out infinite; - filter: drop-shadow(0 8px 20px rgba(var(--v-theme-primary), 0.3)); -} - -@keyframes logo-float { - 0%, - 100% { - transform: translateY(0); - } - - 50% { - transform: translateY(-4px); - } -} - -@keyframes logo-pulse { - 0%, - 100% { - opacity: 0.6; - transform: scale(1); - } - - 50% { - opacity: 1; - transform: scale(1.05); - } + flex: none; } .login-title { @@ -1489,17 +1452,9 @@ onUnmounted(() => { display: none !important; } - .login-logo { - animation: none !important; - } - .login-orb { animation: none !important; } - - .login-logo-wrapper::before { - animation: none !important; - } } /* ===================== 小屏适配 ===================== */ diff --git a/yarn.lock b/yarn.lock index 63470c7b..d927f630 100644 --- a/yarn.lock +++ b/yarn.lock @@ -933,6 +933,11 @@ resolved "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz" integrity sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw== +"@dimforge/rapier3d-compat@~0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@dimforge/rapier3d-compat/-/rapier3d-compat-0.12.0.tgz#7b3365e1dfdc5cd957b45afe920b4ac06c7cd389" + integrity sha512-uekIGetywIgopfD97oDL5PfeezkFpNhwlzlaEYNOA0N6ghdsOvh/HYjSMek5Q2O1PYvRSDFcqFVJl4r4ZBwOow== + "@dual-bundle/import-meta-resolve@^4.1.0": version "4.1.0" resolved "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz" @@ -2160,6 +2165,11 @@ resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz" integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== +"@tweenjs/tween.js@~23.1.3": + version "23.1.3" + resolved "https://registry.yarnpkg.com/@tweenjs/tween.js/-/tween.js-23.1.3.tgz#eff0245735c04a928bb19c026b58c2a56460539d" + integrity sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA== + "@tybys/wasm-util@^0.10.0": version "0.10.1" resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.10.1.tgz#ecddd3205cf1e2d5274649ff0eedd2991ed7f414" @@ -2322,6 +2332,11 @@ dependencies: "@types/node" "*" +"@types/stats.js@*": + version "0.17.4" + resolved "https://registry.yarnpkg.com/@types/stats.js/-/stats.js-0.17.4.tgz#1933e5ff153a23c7664487833198d685c22e791e" + integrity sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA== + "@types/statuses@^2.0.6": version "2.0.6" resolved "https://registry.yarnpkg.com/@types/statuses/-/statuses-2.0.6.tgz#66748315cc9a96d63403baa8671b2c124f8633aa" @@ -2335,6 +2350,18 @@ "@types/node" "*" minipass "^4.0.0" +"@types/three@^0.185.1": + version "0.185.1" + resolved "https://registry.yarnpkg.com/@types/three/-/three-0.185.1.tgz#cc0e604e56f2c625deabb3984fff932c8d4f39f4" + integrity sha512-db1xTb+EgYF2didW+eudSvVPtn75zo+fGsY8ShQrJY/B5ZBmC2Fiaykv3aImHAlCNEGuMPkPGXBJGLwzu5mC7A== + dependencies: + "@dimforge/rapier3d-compat" "~0.12.0" + "@tweenjs/tween.js" "~23.1.3" + "@types/stats.js" "*" + "@types/webxr" ">=0.5.17" + fflate "~0.8.2" + meshoptimizer "~1.1.1" + "@types/trusted-types@^2.0.2": version "2.0.7" resolved "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz" @@ -2355,6 +2382,11 @@ resolved "https://registry.npmjs.org/@types/webfontloader/-/webfontloader-1.6.38.tgz" integrity sha512-kUaF72Fv202suFx6yBrwXqeVRMx7hGtJTesyESZgn9sEPCUeDXm2p0SiyS1MTqW74nQP4p7JyrOCwZ7pNFns4w== +"@types/webxr@>=0.5.17": + version "0.5.24" + resolved "https://registry.yarnpkg.com/@types/webxr/-/webxr-0.5.24.tgz#734d5d90dadc5809a53e422726c60337fa2f4a44" + integrity sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg== + "@types/yauzl@^2.9.1": version "2.10.3" resolved "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz" @@ -4928,6 +4960,11 @@ fdir@^6.5.0: resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== +fflate@~0.8.2: + version "0.8.3" + resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.3.tgz#bc27d8eb30343d4d512abb03480202ce65d825fc" + integrity sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA== + file-entry-cache@^10.0.8: version "10.0.8" resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.0.8.tgz" @@ -6341,6 +6378,11 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +meshoptimizer@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/meshoptimizer/-/meshoptimizer-1.1.1.tgz#20c7d050d59bdc573154814f6a37d47d89908cca" + integrity sha512-oRFNWJRDA/WTrVj7NWvqa5HqE1t9MYDj2VaWirQCzCCrAd2GHrqR/sQezCxiWATPNlKTcRaPRHPJwIRoPBAp5g== + methods@~1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" @@ -8355,6 +8397,11 @@ thenify-all@^1.0.0: dependencies: any-promise "^1.0.0" +three@^0.185.1: + version "0.185.1" + resolved "https://registry.yarnpkg.com/three/-/three-0.185.1.tgz#63e9e241a17b101e211965121a017b4b4d8054ae" + integrity sha512-5aojFCXKwnjBRZvUnt3WFfEcvUJgkN5LlijRFN95hMy8WVkG4I0QNcJE+OuWvuJ0bOdStrbfXn0pkd6/QyiAlg== + tinybench@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.9.0.tgz#103c9f8ba6d7237a47ab6dd1dcff77251863426b"