/** * 智能仓储管理系统 - 通用样式 * 包含:Loading、背景层、科技风弹窗、顶部栏、按钮等通用组件样式 * 适配 1080x1920 竖屏显示 */ /* ========== 顶部标题区域 - 通用样式 ========== */ .header-section { position: relative; width: 100%; /* padding: 0 30px 25px 30px; 增加顶部padding,避免showNotify遮挡 */ box-sizing: border-box; z-index: 10; display: flex; align-items: center; justify-content: center; flex-shrink: 0; padding: 24px 20px !important; } .page-title { font-size: 32px; font-weight: bold; color: #ffffff; letter-spacing: 2px; margin: 0; text-shadow: 0 0 10px rgba(0, 191, 255, 0.5); } /* 顶部左侧按钮(返回/主页) */ .logout-btn, .back-btn { position: absolute; left: 30px; top: 50%; transform: translateY(-50%); display: flex; align-items: center; gap: 10px; background: linear-gradient(90deg, #1a4a7a 0%, #0d3a6a 100%); border: 1px solid #2a7fff; border-radius: 10px; padding: 14px 28px; color: #fff; font-size: 18px; font-weight: 500; cursor: pointer; transition: all 0.3s; min-height: 52px; } .logout-btn:hover, .back-btn:hover { background: linear-gradient(90deg, #2a5a8a 0%, #1d4a7a 100%); box-shadow: 0 0 20px rgba(30, 144, 255, 0.5); } .logout-btn i, .back-btn i { font-size: 20px; color: #00bfff; } /* 顶部右侧操作按钮区域 */ .header-actions { position: absolute; right: 30px; top: 40px; transform: translateY(-50%); display: flex; align-items: center; gap: 20px; padding: 24px 0 !important; } @media screen and (orientation: portrait) and (min-width: 900px) { .header-actions { padding: 44px 0 24px 0 !important; } } /* 顶部操作按钮 - 通用样式 */ .action-btn { display: flex; align-items: center; gap: 10px; background: linear-gradient(90deg, #1a4a7a 0%, #0d3a6a 100%); border: 1px solid #2a7fff; border-radius: 10px; padding: 14px 28px; color: #fff; font-size: 18px; font-weight: 500; cursor: pointer; transition: all 0.3s; min-height: 52px; } .action-btn:hover { background: linear-gradient(90deg, #2a5a8a 0%, #1d4a7a 100%); box-shadow: 0 0 20px rgba(30, 144, 255, 0.5); } .action-btn i { font-size: 20px; color: #00bfff; } /* 常用领料按钮 - 紫色主题 */ .regular-btn { background: linear-gradient(90deg, #5a3a7a 0%, #4a2a6a 100%); border-color: #8a5fff; } .regular-btn:hover { background: linear-gradient(90deg, #6a4a8a 0%, #5a3a7a 100%); box-shadow: 0 0 20px rgba(138, 95, 255, 0.5); } .regular-btn i { color: #d4a5ff; } /* 领料车按钮 - 青色主题 */ .cart-btn { background: linear-gradient(90deg, #1a6a5a 0%, #0d5a4a 100%); border-color: #2affcf; } .cart-btn:hover { background: linear-gradient(90deg, #2a7a6a 0%, #1d6a5a 100%); box-shadow: 0 0 20px rgba(42, 255, 207, 0.5); } .cart-btn i { color: #2affcf; } /* ========== Loading 遮罩层 - 三点跳动动画 ========== */ .loading-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(4, 28, 61, 0.85); display: flex; flex-direction: column; align-items: center; justify-content: center; z-index: 9899999999999; } /* 三点跳动容器 */ .loading-dots { display: flex; align-items: center; justify-content: center; gap: 12px; } /* 单个圆点样式 */ .loading-dots .dot { width: 16px; height: 16px; background: #fff; border-radius: 50%; animation: dotBounce 1.4s ease-in-out infinite both; } .loading-dots .dot:nth-child(1) { animation-delay: -0.32s; } .loading-dots .dot:nth-child(2) { animation-delay: -0.16s; } .loading-dots .dot:nth-child(3) { animation-delay: 0s; } /* 跳动动画 */ @keyframes dotBounce { 0%, 80%, 100% { transform: scale(0.6); opacity: 0.5; } 40% { transform: scale(1); opacity: 1; } } /* Loading 文字 */ .loading-text { margin-top: 20px; color: #7ec8ff; font-size: 16px; letter-spacing: 2px; } /* ========== 旧版 Loading 旋转动画(保留兼容) ========== */ .loading-spinner { width: 60px; height: 60px; border: 4px solid rgba(30, 144, 255, 0.3); border-top-color: #00bfff; border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } /* ========== 深色科技风背景层 ========== */ .bg-layer { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: #041c3d; background-size: cover; background-position: center; background-repeat: no-repeat; z-index: 0; } /* ========== 科技感弹窗样式 - 适配1080x1920竖屏 ========== */ .tech-modal-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(4, 28, 61, 0.9); display: flex; align-items: center; justify-content: center; z-index: 2000; animation: fadeIn 0.3s ease; } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } .tech-modal { background: linear-gradient(135deg, rgba(9, 45, 82, 0.98) 0%, rgba(5, 30, 60, 0.98) 100%); border: 2px solid #2a7fff; border-radius: 20px; padding: 50px 40px; min-width: 600px; max-width: 90%; box-shadow: 0 0 60px rgba(30, 144, 255, 0.4), 0 30px 80px rgba(0, 0, 0, 0.6); animation: slideIn 0.3s ease; } @keyframes slideIn { from { opacity: 0; transform: translateY(-30px); } to { opacity: 1; transform: translateY(0); } } .tech-modal.danger-modal { border-color: #ef4444; box-shadow: 0 0 60px rgba(239, 68, 68, 0.4), 0 30px 80px rgba(0, 0, 0, 0.6); } .modal-content-row { display: flex; align-items: center; gap: 40px; margin-bottom: 40px; } .modal-text { flex: 1; } .modal-text h3 { font-size: 32px; font-weight: 700; color: #fff; margin: 0 0 20px 0; text-shadow: 0 0 15px rgba(0, 191, 255, 0.4); } .modal-text p { font-size: 22px; color: #7ec8ff; margin: 0; line-height: 1.6; } .modal-icon { flex-shrink: 0; } .icon-box { width: 100px; height: 100px; background: linear-gradient(135deg, #1e90ff 0%, #00bfff 100%); border-radius: 50%; display: flex; align-items: center; justify-content: center; box-shadow: 0 0 40px rgba(30, 144, 255, 0.5); } .icon-box.danger-box { background: linear-gradient(135deg, #dc2626 0%, #ef4444 100%); box-shadow: 0 0 40px rgba(239, 68, 68, 0.5); } .icon-box i { font-size: 48px; color: #fff; } .modal-footer { display: flex; gap: 30px; } .modal-btn { flex: 1; padding: 22px 0; border-radius: 14px; font-size: 24px; font-weight: 600; cursor: pointer; transition: all 0.3s; border: none; min-height: 70px; } .modal-btn.cancel-btn, .modal-btn.cancel { background: rgba(13, 58, 106, 0.8); border: 2px solid #2a7fff; color: #7ec8ff; } .modal-btn.cancel-btn:hover, .modal-btn.cancel:hover { background: rgba(26, 74, 122, 0.9); box-shadow: 0 0 20px rgba(30, 144, 255, 0.4); } .modal-btn.confirm-btn, .modal-btn.confirm { background: linear-gradient(90deg, #10b981 0%, #34d399 100%); color: #fff; } .modal-btn.confirm-btn:hover, .modal-btn.confirm:hover { box-shadow: 0 0 30px rgba(16, 185, 129, 0.6); transform: translateY(-3px); } .modal-btn.danger-confirm-btn, .modal-btn.confirm.danger { background: linear-gradient(90deg, #dc2626 0%, #ef4444 100%); color: #fff; } .modal-btn.danger-confirm-btn:hover, .modal-btn.confirm.danger:hover { box-shadow: 0 0 30px rgba(239, 68, 68, 0.6); transform: translateY(-3px); } /* ========== 通用深色输入框样式 ========== */ .dark-input { width: 100%; padding: 12px 16px; background: rgba(13, 58, 106, 0.8); border: 1px solid #2a7fff; border-radius: 8px; color: #fff; font-size: 15px; outline: none; transition: all 0.3s ease; } .dark-input::placeholder { color: #7ec8ff; opacity: 0.7; } .dark-input:focus { border-color: #00bfff; box-shadow: 0 0 15px rgba(0, 191, 255, 0.3); } /* ========== Vue-Select 深色主题样式 - 全局统一 ========== */ /* 适用于所有 v-select,确保下拉框为深色背景 */ .v-select .vs__dropdown-toggle, .dark-select .vs__dropdown-toggle, .filter-select .vs__dropdown-toggle, .dialog-select .vs__dropdown-toggle { background: rgba(13, 58, 106, 0.9) !important; border: 1px solid #2a7fff !important; border-radius: 8px !important; padding: 8px 12px !important; min-height: 48px !important; } .v-select .vs__selected, .dark-select .vs__selected, .filter-select .vs__selected, .dialog-select .vs__selected { color: #fff !important; font-size: 16px !important; } .v-select .vs__search, .dark-select .vs__search, .filter-select .vs__search, .dialog-select .vs__search { color: #fff !important; font-size: 16px !important; } .v-select .vs__search::placeholder, .dark-select .vs__search::placeholder, .filter-select .vs__search::placeholder, .dialog-select .vs__search::placeholder { color: #7ec8ff !important; opacity: 0.7 !important; } .v-select .vs__actions svg, .dark-select .vs__actions svg, .filter-select .vs__actions svg, .dialog-select .vs__actions svg { fill: #7ec8ff !important; } .v-select .vs__clear svg, .dark-select .vs__clear svg, .filter-select .vs__clear svg, .dialog-select .vs__clear svg { fill: #7ec8ff !important; } /* 下拉菜单样式 - 深色背景 */ .v-select .vs__dropdown-menu, .dark-select .vs__dropdown-menu, .filter-select .vs__dropdown-menu, .dialog-select .vs__dropdown-menu { background: rgba(9, 45, 82, 0.98) !important; border: 1px solid #2a7fff !important; border-radius: 8px !important; z-index: 99999 !important; box-shadow: 0 8px 30px rgba(0, 0, 0, 0.4) !important; } /* 针对 append-to-body 模式的下拉菜单 - 全局样式覆盖 */ .vs__dropdown-menu { background: rgba(9, 45, 82, 0.98) !important; border: 1px solid #2a7fff !important; border-radius: 8px !important; z-index: 99999 !important; box-shadow: 0 8px 30px rgba(0, 0, 0, 0.4) !important; } .vs__dropdown-menu .vs__dropdown-option { color: #fff !important; padding: 14px 18px !important; font-size: 16px !important; background: transparent !important; } .vs__dropdown-menu .vs__dropdown-option:hover, .vs__dropdown-menu .vs__dropdown-option--highlight { background: rgba(30, 144, 255, 0.4) !important; color: #fff !important; } .vs__dropdown-menu .vs__no-options { color: #7ec8ff !important; padding: 14px 18px !important; font-size: 16px !important; background: transparent !important; } .v-select .vs__dropdown-option, .dark-select .vs__dropdown-option, .filter-select .vs__dropdown-option, .dialog-select .vs__dropdown-option { color: #fff !important; padding: 14px 18px !important; font-size: 16px !important; } .v-select .vs__dropdown-option--highlight, .dark-select .vs__dropdown-option--highlight, .filter-select .vs__dropdown-option--highlight, .dialog-select .vs__dropdown-option--highlight { background: rgba(30, 144, 255, 0.4) !important; } .v-select .vs__no-options, .dark-select .vs__no-options, .filter-select .vs__no-options, .dialog-select .vs__no-options { color: #7ec8ff !important; padding: 14px 18px !important; font-size: 16px !important; } /* ========== 通用按钮样式 ========== */ .btn-primary { background: linear-gradient(90deg, #1e90ff 0%, #00bfff 100%); border: none; color: #fff; padding: 12px 30px; border-radius: 8px; font-size: 16px; font-weight: 600; cursor: pointer; transition: all 0.3s; } .btn-primary:hover { box-shadow: 0 0 20px rgba(30, 144, 255, 0.5); transform: translateY(-2px); } .btn-primary:disabled { opacity: 0.5; cursor: not-allowed; transform: none; box-shadow: none; } .btn-secondary { background: rgba(13, 58, 106, 0.8); border: 1px solid #2a7fff; color: #7ec8ff; padding: 12px 30px; border-radius: 8px; font-size: 16px; font-weight: 600; cursor: pointer; transition: all 0.3s; } .btn-secondary:hover { background: rgba(26, 74, 122, 0.9); box-shadow: 0 0 15px rgba(30, 144, 255, 0.3); } .btn-danger { background: linear-gradient(90deg, #dc2626 0%, #ef4444 100%); border: none; color: #fff; padding: 12px 30px; border-radius: 8px; font-size: 16px; font-weight: 600; cursor: pointer; transition: all 0.3s; } .btn-danger:hover { box-shadow: 0 0 20px rgba(239, 68, 68, 0.5); transform: translateY(-2px); } .btn-danger:disabled { opacity: 0.5; cursor: not-allowed; transform: none; box-shadow: none; }