From a70a52de568387dcb3e0f204462f1738eedde888 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=B8=E4=B9=99=E9=BA=9F?= <3215017830@qq.com> Date: Wed, 13 Aug 2025 14:32:26 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BE=A7=E9=9D=A2=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E6=A0=8Fok?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/syspro/src/components/MainLayout.vue | 1049 +++++++++++++++-- frontend/syspro/src/components/Sidebar.vue | 118 +- 2 files changed, 998 insertions(+), 169 deletions(-) diff --git a/frontend/syspro/src/components/MainLayout.vue b/frontend/syspro/src/components/MainLayout.vue index 0dc4f8f..491c1c5 100644 --- a/frontend/syspro/src/components/MainLayout.vue +++ b/frontend/syspro/src/components/MainLayout.vue @@ -12,14 +12,27 @@ + +
+
+
+
- - @@ -41,7 +54,6 @@ 个人设置 - +/* 溜达动画 - 左右移动 */ +@keyframes wander { + 0% { transform: translateX(-20px) translateY(0); } + 25% { transform: translateX(0) translateY(0); } + 50% { transform: translateX(20px) translateY(0); } + 75% { transform: translateX(0) translateY(0); } + 100% { transform: translateX(-20px) translateY(0); } +} + +/* 轻微旋转动画 - 增强待机感 */ +@keyframes slightRotate { + 0%, 100% { transform: rotate(-2deg); } + 50% { transform: rotate(2deg); } +} + +/* 浮动动画 */ +@keyframes float { + 0%, 100% { transform: translateY(0); } + 50% { transform: translateY(-5px); } +} + +/* 头部 */ +.fairy-head { + width: 42px; + height: 42px; + background: linear-gradient(145deg, #E0F7FA, #B2EBF2); + border-radius: 50%; + position: absolute; + top: 0; + left: 50%; + transform: translateX(-50%); + box-shadow: 0 2px 8px rgba(255, 255, 255, 0.4), + inset 0 2px 3px rgba(255, 255, 255, 0.5); + z-index: 2; + /* 头部微微晃动 */ + animation: headShake 4s ease-in-out infinite; +} + +@keyframes headShake { + 0%, 100% { transform: translateX(-50%) rotate(-1deg); } + 50% { transform: translateX(-50%) rotate(1deg); } +} + +/* 头发细节 */ +.fairy-hair { + position: absolute; + top: -5px; + width: 100%; + height: 20px; +} + +.hair-strand { + position: absolute; + background-color: #B2EBF2; + border-radius: 50% 50% 0 0; +} + +.strand1 { + width: 7px; + height: 10px; + top: -3px; + left: 10px; + transform: rotate(-15deg); + animation: hairSway 3s ease-in-out infinite; +} + +.strand2 { + width: 7px; + height: 13px; + top: -5px; + left: 18px; + animation: hairSway 4s ease-in-out infinite; +} + +.strand3 { + width: 7px; + height: 10px; + top: -3px; + left: 28px; + transform: rotate(15deg); + animation: hairSway 3.5s ease-in-out infinite; +} + +/* 头发摆动动画 */ +@keyframes hairSway { + 0%, 100% { transform: rotate(0deg); } + 50% { transform: rotate(5deg); } +} + +/* 眼睛 */ +.fairy-eyes { + position: absolute; + top: 13px; + width: 100%; + display: flex; + justify-content: space-around; +} + +.fairy-eye { + width: 12px; + height: 12px; + background-color: white; + border-radius: 50%; + position: relative; + box-shadow: inset 0 0 0 1px rgba(0,0,0,0.1); + animation: blink 4s infinite; +} + +.pupil { + width: 6px; + height: 6px; + background-color: #5A6BAF; + border-radius: 50%; + position: absolute; + transition: all 0.1s ease; +} + +.pupil::after { + content: ''; + width: 2px; + height: 2px; + background-color: white; + border-radius: 50%; + position: absolute; + top: 1px; + right: 1px; +} + +/* 嘴巴 */ +.fairy-mouth { + width: 10px; + height: 5px; + border-radius: 0 0 10px 10px; + background-color: #5A6BAF; + position: absolute; + top: 30px; + left: 50%; + transform: translateX(-50%); + transition: all 0.3s ease; +} + +.fairy-mouth.smile { + height: 5px; + border-radius: 0 0 10px 10px; +} + +.fairy-mouth:not(.smile) { + height: 2px; + border-radius: 2px; + top: 32px; +} + +/* 腮红 */ +.fairy-cheeks { + position: absolute; + top: 28px; + width: 100%; + display: flex; + justify-content: space-between; + padding: 0 5px; + box-sizing: border-box; +} + +.fairy-cheek { + width: 8px; + height: 8px; + background-color: #FFCAD4; + border-radius: 50%; + opacity: 0.6; + animation: blush 3s ease-in-out infinite; +} + +@keyframes blush { + 0%, 100% { opacity: 0.4; transform: scale(0.9); } + 50% { opacity: 0.7; transform: scale(1.1); } +} + +/* 触角 */ +.fairy-antennas { + position: absolute; + top: -8px; + width: 100%; + display: flex; + justify-content: space-around; +} + +.antenna { + width: 2px; + height: 14px; + background: linear-gradient(to top, #B2EBF2, #80DEEA); + position: relative; + border-radius: 3px; + animation: antennaSway 3s ease-in-out infinite; +} + +.antenna.left { + transform: rotate(-15deg); + animation-delay: -0.5s; +} + +.antenna.right { + transform: rotate(15deg); +} + +.antenna-ball { + width: 6px; + height: 6px; + background: radial-gradient(circle, #80DEEA, #4DD0E1); + border-radius: 50%; + position: absolute; + top: -3px; + left: 50%; + transform: translateX(-50%); + animation: glow 3s infinite alternate; + box-shadow: 0 0 6px 1px rgba(128, 222, 234, 0.6); +} + +@keyframes antennaSway { + 0%, 100% { transform: rotate(-15deg); } + 50% { transform: rotate(-5deg); } +} + +@keyframes glow { + 0% { box-shadow: 0 0 5px 2px rgba(128, 222, 234, 0.5); } + 100% { box-shadow: 0 0 8px 3px rgba(128, 222, 234, 0.8); } +} + +/* 身体 */ +.fairy-body { + width: 35px; + height: 38px; + background: linear-gradient(145deg, #E0F7FA, #B2EBF2); + border-radius: 40% 40% 30% 30%; + position: absolute; + top: 38px; + left: 50%; + transform: translateX(-50%); + z-index: 1; + box-shadow: 0 2px 5px rgba(255, 255, 255, 0.3), + inset 0 2px 3px rgba(255, 255, 255, 0.5); + animation: bodySway 4s ease-in-out infinite; +} + +/* 增强身体摆动 */ +@keyframes bodySway { + 0%, 100% { transform: translateX(-50%) rotate(-2deg); } + 50% { transform: translateX(-50%) rotate(2deg); } +} + +/* 手臂 - 增加摆动幅度 */ +.fairy-arms { + position: absolute; + top: 10px; + width: 100%; +} + +.arm { + width: 14px; + height: 2px; + background: linear-gradient(to right, #B2EBF2, #80DEEA); + position: absolute; + top: 5px; + border-radius: 3px; + animation: armWave 2s ease-in-out infinite; +} + +.arm.left { + left: -12px; + transform: rotate(5deg); + animation-delay: -1s; +} + +.arm.right { + right: -12px; + transform: rotate(-5deg); +} + +/* 手臂挥舞动画 */ +@keyframes armWave { + 0%, 100% { transform: rotate(5deg); } + 50% { transform: rotate(-5deg); } +} + +/* 翅膀 */ +.fairy-wings { + position: absolute; + top: -15px; + width: 100%; + z-index: 0; +} + +.wing { + width: 35px; + height: 30px; + background: linear-gradient(135deg, rgba(179, 229, 252, 0.8), rgba(129, 212, 250, 0.6)); + border-radius: 80% 20% 50% 50%; + position: absolute; + animation: flap 2s infinite alternate; + box-shadow: 0 0 12px 2px rgba(129, 212, 250, 0.4); + overflow: hidden; +} + +/* 翅膀扇动动画 */ +@keyframes flap { + 0% { transform: rotate(-10deg) scale(1); opacity: 0.7; } + 100% { transform: rotate(-20deg) scale(0.95); opacity: 0.9; } +} + +.wing-pattern { + width: 100%; + height: 100%; + background: radial-gradient(circle at 30% 30%, rgba(255,255,255,0.3) 0%, transparent 60%), + radial-gradient(circle at 70% 60%, rgba(255,255,255,0.2) 0%, transparent 50%); +} + +.wing-sparkle { + position: absolute; + width: 2px; + height: 2px; + background-color: white; + border-radius: 50%; + box-shadow: 0 0 4px 1px rgba(255,255,255,0.6); + animation: sparkle 3s infinite alternate; +} + +.sparkle1 { + top: 20%; + left: 40%; +} + +.sparkle2 { + top: 60%; + left: 60%; + animation-delay: 1s; +} + +.wing.left { + left: -28px; + transform: rotate(-10deg); +} + +.wing.right { + right: -28px; + transform: rotate(10deg) scaleX(-1); +} + +/* 腿部 - 添加行走动画 */ +.fairy-legs { + position: absolute; + bottom: -8px; + width: 100%; + display: flex; + justify-content: center; + gap: 5px; +} + +.leg { + width: 2.5px; + height: 9px; + background-color: #B2EBF2; + border-radius: 0 0 3px 3px; +} + +.leg.left { + animation: legStepLeft 1.5s ease-in-out infinite; +} + +.leg.right { + animation: legStepRight 1.5s ease-in-out infinite; +} + +/* 左腿行走动画 */ +@keyframes legStepLeft { + 0%, 100% { transform: rotate(0deg); } + 50% { transform: rotate(15deg); } +} + +/* 右腿行走动画 */ +@keyframes legStepRight { + 0%, 100% { transform: rotate(0deg); } + 50% { transform: rotate(-15deg); } +} + +/* 名字 */ +.fairy-name { + position: absolute; + top: 85px; + left: 50%; + transform: translateX(-50%); + font-size: 12px; + color: white; + font-weight: 500; + text-shadow: 0 1px 3px rgba(0,0,0,0.2); + letter-spacing: 0.5px; + animation: nameFloat 2s ease-in-out infinite; +} + +@keyframes nameFloat { + 0%, 100% { transform: translateX(-50%) translateY(0); } + 50% { transform: translateX(-50%) translateY(-2px); } +} + +/* 跳跃动画 */ +.fairy-jump { + animation: jump 0.8s cubic-bezier(0.33, 1, 0.68, 1); +} + +@keyframes jump { + 0% { transform: translateY(0); } + 50% { transform: translateY(-20px); } + 100% { transform: translateY(0); } +} + +/* 眨眼动画 */ +@keyframes blink { + 0%, 85%, 100% { height: 12px; } + 90% { height: 2px; } +} + +/* 光点动画 */ +@keyframes sparkle { + 0% { opacity: 0.5; transform: scale(0.8); } + 100% { opacity: 1; transform: scale(1.2); } +} + \ No newline at end of file diff --git a/frontend/syspro/src/components/Sidebar.vue b/frontend/syspro/src/components/Sidebar.vue index 6a8db0b..e7036ec 100644 --- a/frontend/syspro/src/components/Sidebar.vue +++ b/frontend/syspro/src/components/Sidebar.vue @@ -1,58 +1,77 @@ \ No newline at end of file -- Gitee