|
@@ -0,0 +1,303 @@
|
|
|
|
+<template>
|
|
|
|
+ <div class="bg h-full w-full">
|
|
|
|
+ <!-- 背景装饰元素 -->
|
|
|
|
+ <div class="bg-element"></div>
|
|
|
|
+ <div class="bg-element"></div>
|
|
|
|
+
|
|
|
|
+ <!-- 光效 -->
|
|
|
|
+ <div class="light-effect" style="top: 20%; left: 20%"></div>
|
|
|
|
+ <div class="light-effect" style="bottom: 10%; right: 20%"></div>
|
|
|
|
+
|
|
|
|
+ <div class="flex justify-center items-center h-full">
|
|
|
|
+ <div class="camera-container !scale-150 glass animate__animated animate__fadeInDown">
|
|
|
|
+ <div
|
|
|
|
+ class="camera-set animate__animated animate__fadeIn animate__delay-1s animate__slow"
|
|
|
|
+ >
|
|
|
|
+ <slot name="header"></slot>
|
|
|
|
+
|
|
|
|
+ <div class="dome-camera">
|
|
|
|
+ <div class="dome-lens">
|
|
|
|
+ <div class="dome-lens-inner"></div>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="indicator"></div>
|
|
|
|
+ </div>
|
|
|
|
+ <!--
|
|
|
|
+ <div class="stand"></div>
|
|
|
|
+
|
|
|
|
+ <div class="panoramic-camera">
|
|
|
|
+ <div class="compound-lens"></div>
|
|
|
|
+ <div class="compound-lens"></div>
|
|
|
|
+ <div class="compound-lens"></div>
|
|
|
|
+ <div class="compound-lens"></div>
|
|
|
|
+ <div class="indicator"></div>
|
|
|
|
+ </div> -->
|
|
|
|
+ </div>
|
|
|
|
+ <slot></slot>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+</template>
|
|
|
|
+
|
|
|
|
+<script setup></script>
|
|
|
|
+
|
|
|
|
+<style lang="scss" scoped>
|
|
|
|
+:deep(.van-field__label) {
|
|
|
|
+ display: none;
|
|
|
|
+}
|
|
|
|
+:deep(.van-cell-group) {
|
|
|
|
+ margin: 0;
|
|
|
|
+ padding: 0 0;
|
|
|
|
+ background: var(--van-cell-background);
|
|
|
|
+
|
|
|
|
+ .van-field__error-message {
|
|
|
|
+ position: absolute;
|
|
|
|
+ }
|
|
|
|
+ .van-cell {
|
|
|
|
+ padding-bottom: 24px;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/* Liquid glass effect class */
|
|
|
|
+.glass {
|
|
|
|
+ position: relative;
|
|
|
|
+ background: rgba(18, 41, 100, 0.15);
|
|
|
|
+ backdrop-filter: blur(5px) saturate(180%);
|
|
|
|
+ border: 0.0625rem solid rgba(18, 41, 100, 0.8);
|
|
|
|
+ border-radius: 2rem;
|
|
|
|
+ padding: 1.25rem;
|
|
|
|
+ box-shadow:
|
|
|
|
+ 0 8px 32px rgba(31, 38, 135, 0.2),
|
|
|
|
+ inset 0 4px 20px rgba(18, 41, 100, 0.3);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.glass::after {
|
|
|
|
+ content: "";
|
|
|
|
+ position: absolute;
|
|
|
|
+ top: 0;
|
|
|
|
+ left: 0;
|
|
|
|
+ width: 100%;
|
|
|
|
+ height: 100%;
|
|
|
|
+ background: rgba(255, 255, 255, 0.1);
|
|
|
|
+ border-radius: 2rem;
|
|
|
|
+ backdrop-filter: blur(1px);
|
|
|
|
+ box-shadow:
|
|
|
|
+ inset -10px -8px 0px -11px rgba(255, 255, 255, 0.6),
|
|
|
|
+ inset 0px -9px 0px -8px rgba(255, 255, 255, 1);
|
|
|
|
+ opacity: 0.6;
|
|
|
|
+ z-index: -1;
|
|
|
|
+ filter: blur(1px) drop-shadow(10px 4px 6px black) brightness(115%);
|
|
|
|
+ pointer-events: none;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/* 背景装饰元素 */
|
|
|
|
+.bg-element {
|
|
|
|
+ position: absolute;
|
|
|
|
+ border-radius: 50%;
|
|
|
|
+ background: rgba(23, 42, 69, 0.6);
|
|
|
|
+ z-index: -1;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.bg-element:nth-child(1) {
|
|
|
|
+ width: 300px;
|
|
|
|
+ height: 300px;
|
|
|
|
+ top: -150px;
|
|
|
|
+ left: -150px;
|
|
|
|
+ background: linear-gradient(45deg, #112240, #0a192f);
|
|
|
|
+ box-shadow: 0 0 100px rgba(100, 255, 218, 0.1);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.bg-element:nth-child(2) {
|
|
|
|
+ width: 500px;
|
|
|
|
+ height: 500px;
|
|
|
|
+ bottom: -250px;
|
|
|
|
+ right: -250px;
|
|
|
|
+ background: linear-gradient(45deg, #0a192f, #112240);
|
|
|
|
+ box-shadow: 0 0 150px rgba(100, 255, 218, 0.1);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/* 主容器 */
|
|
|
|
+.camera-container {
|
|
|
|
+ display: flex;
|
|
|
|
+ align-items: center;
|
|
|
|
+ gap: 40px;
|
|
|
|
+ padding: 15px;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/* 相机组合 */
|
|
|
|
+.camera-set {
|
|
|
|
+ position: relative;
|
|
|
|
+ width: 500px;
|
|
|
|
+ height: 400px;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/* 全景复眼相机 */
|
|
|
|
+.panoramic-camera {
|
|
|
|
+ position: absolute;
|
|
|
|
+ bottom: 50px;
|
|
|
|
+ left: 50%;
|
|
|
|
+ transform: translateX(-50%);
|
|
|
|
+ width: 100%;
|
|
|
|
+ max-width: 600px;
|
|
|
|
+ height: 150px;
|
|
|
|
+ background: linear-gradient(to bottom, #0c1e3e, #07162c);
|
|
|
|
+ border-radius: 20px;
|
|
|
|
+ box-shadow:
|
|
|
|
+ 0 10px 30px rgba(0, 0, 0, 0.6),
|
|
|
|
+ inset 0 0 0 1px rgba(100, 255, 218, 0.1);
|
|
|
|
+ display: flex;
|
|
|
|
+ justify-content: space-around;
|
|
|
|
+ align-items: center;
|
|
|
|
+ padding: 0 20px;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/* 复眼镜头 */
|
|
|
|
+.compound-lens {
|
|
|
|
+ width: 80px;
|
|
|
|
+ height: 80px;
|
|
|
|
+ background: linear-gradient(135deg, #07162c, #0c1e3e);
|
|
|
|
+ border-radius: 50%;
|
|
|
|
+ display: flex;
|
|
|
|
+ justify-content: center;
|
|
|
|
+ align-items: center;
|
|
|
|
+ box-shadow: 0 0 0 2px rgba(23, 42, 69, 0.8);
|
|
|
|
+ position: relative;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.compound-lens::before {
|
|
|
|
+ content: "";
|
|
|
|
+ position: absolute;
|
|
|
|
+ width: 60px;
|
|
|
|
+ height: 60px;
|
|
|
|
+ background: radial-gradient(circle at 30% 30%, #122d4f, #0a1a32);
|
|
|
|
+ border-radius: 50%;
|
|
|
|
+ box-shadow: 0 0 15px rgba(58, 97, 134, 0.6);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.compound-lens::after {
|
|
|
|
+ content: "";
|
|
|
|
+ position: absolute;
|
|
|
|
+ width: 40px;
|
|
|
|
+ height: 40px;
|
|
|
|
+ background: radial-gradient(circle at 40% 40%, #1e3a5f, #0c203f);
|
|
|
|
+ border-radius: 50%;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/* 球型相机 */
|
|
|
|
+.dome-camera {
|
|
|
|
+ position: absolute;
|
|
|
|
+ top: 50px;
|
|
|
|
+ left: 50%;
|
|
|
|
+ transform: translateX(-50%);
|
|
|
|
+ width: 200px;
|
|
|
|
+ height: 200px;
|
|
|
|
+ background: linear-gradient(135deg, #0c1e3e, #07162c);
|
|
|
|
+ border-radius: 50%;
|
|
|
|
+ box-shadow:
|
|
|
|
+ 0 10px 30px rgba(0, 0, 0, 0.6),
|
|
|
|
+ inset 0 0 0 1px rgba(100, 255, 218, 0.1);
|
|
|
|
+ display: flex;
|
|
|
|
+ justify-content: center;
|
|
|
|
+ align-items: center;
|
|
|
|
+ transform-style: preserve-3d;
|
|
|
|
+ transition: transform 1.5s ease;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.dome-lens {
|
|
|
|
+ width: 100px;
|
|
|
|
+ height: 100px;
|
|
|
|
+ background: radial-gradient(circle at 30% 30%, #122d4f, #0a1a32);
|
|
|
|
+ border-radius: 50%;
|
|
|
|
+ display: flex;
|
|
|
|
+ justify-content: center;
|
|
|
|
+ align-items: center;
|
|
|
|
+ transform: translateZ(20px);
|
|
|
|
+ animation: pulse 1.5s infinite alternate ease-in-out;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.dome-lens-inner {
|
|
|
|
+ width: 60px;
|
|
|
|
+ height: 60px;
|
|
|
|
+ background: radial-gradient(circle at 40% 40%, #1e3a5f, #0c203f);
|
|
|
|
+ border-radius: 50%;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/* 支架 */
|
|
|
|
+.stand {
|
|
|
|
+ position: absolute;
|
|
|
|
+ top: 170px;
|
|
|
|
+ left: 50%;
|
|
|
|
+ transform: translateX(-50%);
|
|
|
|
+ width: 20px;
|
|
|
|
+ height: 130px;
|
|
|
|
+ background: linear-gradient(to bottom, #07162c, #0c1e3e);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/* 指示灯 */
|
|
|
|
+.indicator {
|
|
|
|
+ position: absolute;
|
|
|
|
+ width: 8px;
|
|
|
|
+ height: 8px;
|
|
|
|
+ background: #64ffda;
|
|
|
|
+ border-radius: 50%;
|
|
|
|
+ box-shadow: 0 0 10px #64ffda;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.panoramic-camera .indicator {
|
|
|
|
+ top: 15px;
|
|
|
|
+ right: 20px;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.dome-camera .indicator {
|
|
|
|
+ bottom: 20px;
|
|
|
|
+ right: 20px;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+@keyframes pulse {
|
|
|
|
+ 0% {
|
|
|
|
+ box-shadow: 0 0 20px rgba(58, 97, 134, 0.2);
|
|
|
|
+ }
|
|
|
|
+ 100% {
|
|
|
|
+ box-shadow: 0 0 20px rgba(58, 97, 134, 0.8);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/* 光效 */
|
|
|
|
+.light-effect {
|
|
|
|
+ position: absolute;
|
|
|
|
+ width: 300px;
|
|
|
|
+ height: 300px;
|
|
|
|
+ background: radial-gradient(
|
|
|
|
+ circle,
|
|
|
|
+ rgba(100, 255, 218, 0.1) 0%,
|
|
|
|
+ transparent 70%
|
|
|
|
+ );
|
|
|
|
+ border-radius: 50%;
|
|
|
|
+ z-index: -1;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/* 控制面板 */
|
|
|
|
+.control-panel {
|
|
|
|
+ display: flex;
|
|
|
|
+ justify-content: center;
|
|
|
|
+ gap: 20px;
|
|
|
|
+ margin-top: 40px;
|
|
|
|
+ flex-wrap: wrap;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.control-btn {
|
|
|
|
+ background: rgba(23, 42, 69, 0.5);
|
|
|
|
+ border: 1px solid rgba(100, 255, 218, 0.3);
|
|
|
|
+ color: #64ffda;
|
|
|
|
+ padding: 12px 24px;
|
|
|
|
+ border-radius: 30px;
|
|
|
|
+ font-size: 1rem;
|
|
|
|
+ cursor: pointer;
|
|
|
|
+ transition: all 0.3s ease;
|
|
|
|
+ backdrop-filter: blur(5px);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.control-btn:hover {
|
|
|
|
+ background: rgba(100, 255, 218, 0.1);
|
|
|
|
+ box-shadow: 0 0 15px rgba(100, 255, 218, 0.3);
|
|
|
|
+}
|
|
|
|
+</style>
|