/* 饿了么风格的洗车预约系统样式 */ /* 变量定义 */ :root { --el-primary-color: #409EFF; --el-primary-hover: #66B1FF; --el-primary-light: #A0CFFF; --el-success-color: #67C23A; --el-warning-color: #E6A23C; --el-danger-color: #F56C6C; --el-info-color: #909399; --el-text-primary: #303133; --el-text-regular: #606266; --el-text-secondary: #909399; --el-text-placeholder: #C0C4CC; --el-border-color: #DCDFE6; --el-border-light: #E4E7ED; --el-border-lighter: #EBEEF5; --el-border-extra-light: #F2F6FC; --el-bg-color: #FFFFFF; --el-bg-color-page: #F2F3F5; --el-bg-color-light: #FCFCFC; --el-shadow-base: 0 2px 4px rgba(0, 0, 0, 0.12), 0 0 6px rgba(0, 0, 0, 0.04); --el-shadow-dark: 0 2px 4px rgba(0, 0, 0, 0.12), 0 0 6px rgba(0, 0, 0, 0.12); --el-shadow-light: 0 2px 12px 0 rgba(0, 0, 0, 0.1); --el-border-radius-base: 4px; --el-border-radius-small: 2px; --el-border-radius-round: 20px; --el-border-radius-circle: 100%; --el-font-size-base: 14px; --el-font-size-small: 13px; --el-font-size-extra-small: 12px; --el-font-size-large: 16px; --el-font-size-extra-large: 18px; --el-spacing-base: 16px; --el-spacing-small: 8px; --el-spacing-large: 24px; --el-spacing-extra-large: 32px; } /* 全局样式 */ * { box-sizing: border-box; } body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Helvetica Neue', Helvetica, Arial, sans-serif; line-height: 1.6; margin: 0; padding: 0; background-color: var(--el-bg-color-page); color: var(--el-text-primary); font-size: var(--el-font-size-base); } .container { max-width: 1400px; margin: 0 auto; padding: var(--el-spacing-large); } /* 头部样式 */ .header { background: var(--el-bg-color); box-shadow: var(--el-shadow-light); padding: var(--el-spacing-large); border-radius: var(--el-border-radius-base); margin-bottom: var(--el-spacing-large); display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: var(--el-spacing-base); } .header h1 { margin: 0; font-size: var(--el-font-size-extra-large); font-weight: 600; color: var(--el-text-primary); display: flex; align-items: center; gap: var(--el-spacing-small); } /* 导航样式 */ .nav { display: flex; gap: var(--el-spacing-small); flex-wrap: wrap; } .nav-link { display: inline-flex; align-items: center; padding: var(--el-spacing-small) var(--el-spacing-base); text-decoration: none; color: var(--el-text-regular); border: 1px solid var(--el-border-color); border-radius: var(--el-border-radius-base); transition: all 0.3s ease; font-size: var(--el-font-size-small); background: var(--el-bg-color); } .nav-link:hover { color: var(--el-primary-color); border-color: var(--el-primary-color); background: var(--el-primary-light); background: rgba(64, 158, 255, 0.1); } .nav-link.active { color: var(--el-primary-color); border-color: var(--el-primary-color); background: rgba(64, 158, 255, 0.1); } /* 卡片样式 */ .card { background: var(--el-bg-color); border-radius: var(--el-border-radius-base); box-shadow: var(--el-shadow-light); padding: var(--el-spacing-large); margin-bottom: var(--el-spacing-large); } /* 增强型卡片样式(参考套餐管理页面) */ .enhanced-card { background: var(--el-bg-color); border-radius: 12px; padding: 24px; box-shadow: 0 2px 8px rgba(0,0,0,0.08); transition: all 0.3s ease; position: relative; overflow: hidden; } .enhanced-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 4px; background: linear-gradient(90deg, var(--el-primary-color), var(--el-success-color)); transform: scaleX(0); transition: transform 0.3s ease; } .enhanced-card:hover { transform: translateY(-4px); box-shadow: 0 8px 24px rgba(0,0,0,0.12); } .enhanced-card:hover::before { transform: scaleX(1); } .enhanced-card.inactive { opacity: 0.7; background: var(--el-bg-color-page); } .enhanced-card.inactive::before { background: linear-gradient(90deg, var(--el-info-color), var(--el-border-color)); } /* 表单样式 */ .form-group { margin-bottom: var(--el-spacing-large); } .form-group label { display: block; margin-bottom: var(--el-spacing-small); font-weight: 500; color: var(--el-text-primary); font-size: var(--el-font-size-base); } .form-group input, .form-group select, .form-group textarea { width: 100%; padding: 10px 12px; border: 1px solid var(--el-border-color); border-radius: var(--el-border-radius-base); font-size: var(--el-font-size-base); transition: border-color 0.3s ease; background: var(--el-bg-color); color: var(--el-text-primary); } .form-group input:focus, .form-group select:focus, .form-group textarea:focus { outline: none; border-color: var(--el-primary-color); box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.2); } .form-group input::placeholder, .form-group textarea::placeholder { color: var(--el-text-placeholder); } .form-row { display: flex; gap: var(--el-spacing-large); flex-wrap: wrap; } .form-row .form-group { flex: 1; min-width: 200px; } /* 按钮样式 */ .btn { display: inline-flex; align-items: center; justify-content: center; padding: 10px 16px; border: none; border-radius: var(--el-border-radius-base); font-size: var(--el-font-size-base); font-weight: 500; cursor: pointer; transition: all 0.3s ease; text-decoration: none; white-space: nowrap; gap: var(--el-spacing-small); } .btn:disabled { opacity: 0.6; cursor: not-allowed; } .btn-primary { background-color: var(--el-primary-color); color: white; } .btn-primary:hover:not(:disabled) { background-color: var(--el-primary-hover); transform: translateY(-1px); box-shadow: var(--el-shadow-dark); } .btn-success { background-color: var(--el-success-color); color: white; } .btn-success:hover:not(:disabled) { background-color: #85CE61; transform: translateY(-1px); box-shadow: var(--el-shadow-dark); } .btn-warning { background-color: var(--el-warning-color); color: white; } .btn-warning:hover:not(:disabled) { background-color: #EEBE77; transform: translateY(-1px); box-shadow: var(--el-shadow-dark); } .btn-danger { background-color: var(--el-danger-color); color: white; } .btn-danger:hover:not(:disabled) { background-color: #F78989; transform: translateY(-1px); box-shadow: var(--el-shadow-dark); } .btn-info { background-color: var(--el-info-color); color: white; } .btn-info:hover:not(:disabled) { background-color: #B1B3B8; transform: translateY(-1px); box-shadow: var(--el-shadow-dark); } .btn-outline { background: transparent; color: var(--el-primary-color); border: 1px solid var(--el-primary-color); } .btn-outline:hover:not(:disabled) { background: var(--el-primary-color); color: white; } .btn-sm { padding: 6px 12px; font-size: var(--el-font-size-small); } .btn-lg { padding: 14px 20px; font-size: var(--el-font-size-large); } /* 切换状态按钮(参考套餐管理页面) */ .btn-toggle-status { padding: 8px 16px; border: none; border-radius: var(--el-border-radius-base); font-size: var(--el-font-size-small); font-weight: 600; cursor: pointer; transition: all 0.3s; } .btn-toggle-status.active { background: var(--el-success-color); color: white; } .btn-toggle-status.inactive { background: var(--el-danger-color); color: white; } .btn-toggle-status:hover { opacity: 0.9; transform: scale(1.05); } /* 消息提示样式 */ .message { padding: var(--el-spacing-base); border-radius: var(--el-border-radius-base); margin-bottom: var(--el-spacing-base); font-size: var(--el-font-size-base); display: flex; align-items: center; gap: var(--el-spacing-small); } .success-message { background: rgba(103, 194, 58, 0.1); color: var(--el-success-color); border: 1px solid rgba(103, 194, 58, 0.2); } .error-message { background: rgba(245, 108, 108, 0.1); color: var(--el-danger-color); border: 1px solid rgba(245, 108, 108, 0.2); } .warning-message { background: rgba(230, 162, 60, 0.1); color: var(--el-warning-color); border: 1px solid rgba(230, 162, 60, 0.2); } .info-message { background: rgba(144, 147, 153, 0.1); color: var(--el-info-color); border: 1px solid rgba(144, 147, 153, 0.2); } /* 状态标签 */ .status { padding: 4px 8px; border-radius: var(--el-border-radius-round); font-size: var(--el-font-size-extra-small); font-weight: 500; text-transform: uppercase; letter-spacing: 0.5px; } .status-pending { background: rgba(230, 162, 60, 0.1); color: var(--el-warning-color); } .status-confirmed { background: rgba(64, 158, 255, 0.1); color: var(--el-primary-color); } .status-completed { background: rgba(103, 194, 58, 0.1); color: var(--el-success-color); } .status-cancelled { background: rgba(245, 108, 108, 0.1); color: var(--el-danger-color); } /* 增强型状态标签(参考套餐管理页面) */ .status-badge { padding: 6px 12px; border-radius: 20px; font-size: var(--el-font-size-extra-small); font-weight: 600; white-space: nowrap; } .status-badge.active { background: rgba(103, 194, 58, 0.1); color: var(--el-success-color); } .status-badge.inactive { background: rgba(245, 108, 108, 0.1); color: var(--el-danger-color); } .status-badge.info { background: rgba(64, 158, 255, 0.1); color: var(--el-primary-color); } .status-badge.warning { background: rgba(230, 162, 60, 0.1); color: var(--el-warning-color); } /* 布局样式 */ .booking-container { display: grid; grid-template-columns: 1fr 1fr; gap: var(--el-spacing-large); margin-top: var(--el-spacing-large); } .section { background: var(--el-bg-color); border-radius: var(--el-border-radius-base); box-shadow: var(--el-shadow-light); padding: var(--el-spacing-large); } .section h2 { margin: 0 0 var(--el-spacing-large) 0; font-size: var(--el-font-size-large); font-weight: 600; color: var(--el-text-primary); padding-bottom: var(--el-spacing-base); border-bottom: 1px solid var(--el-border-lighter); } /* 详情项布局(参考套餐管理页面) */ .details-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 12px; margin-bottom: var(--el-spacing-large); } .detail-item { display: flex; flex-direction: column; padding: 12px; background: var(--el-bg-color-light); border-radius: var(--el-border-radius-base); } .detail-label { font-size: var(--el-font-size-extra-small); color: var(--el-text-secondary); margin-bottom: 4px; } .detail-value { font-size: var(--el-font-size-large); font-weight: bold; color: var(--el-text-primary); } .detail-value.price { color: var(--el-danger-color); } /* 标签样式(参考套餐管理页面) */ .tags-container { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px; } .tag { display: inline-block; padding: 6px 12px; background: rgba(64, 158, 255, 0.1); color: var(--el-primary-color); border-radius: 16px; font-size: var(--el-font-size-extra-small); font-weight: 500; } /* 提醒框样式(参考套餐管理页面) */ .reminder-box { margin-top: var(--el-spacing-base); padding: var(--el-spacing-base); background: var(--el-bg-color-light); border-radius: var(--el-border-radius-base); border-left: 4px solid var(--el-primary-color); } .reminder-editor { width: 100%; padding: 12px; background: var(--el-bg-color); border: 1px solid var(--el-border-color); border-radius: var(--el-border-radius-small); font-size: var(--el-font-size-base); line-height: 1.5; min-height: 80px; resize: vertical; font-family: inherit; } .reminder-actions { margin-top: 12px; display: flex; gap: 8px; justify-content: flex-end; } /* 操作按钮组样式(参考套餐管理页面) */ .action-buttons { display: flex; gap: 8px; margin-top: var(--el-spacing-base); padding-top: var(--el-spacing-base); border-top: 1px solid var(--el-border-lighter); } .action-buttons button, .action-buttons form { flex: 1; } /* 日历样式 */ .calendar { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: var(--el-spacing-base); margin-bottom: var(--el-spacing-large); } .calendar-day { background: var(--el-bg-color); border: 1px solid var(--el-border-color); border-radius: var(--el-border-radius-base); padding: var(--el-spacing-base); text-align: center; cursor: pointer; transition: all 0.3s ease; position: relative; } .calendar-day:hover { border-color: var(--el-primary-color); box-shadow: var(--el-shadow-light); } .calendar-day.today { border-color: var(--el-primary-color); background: rgba(64, 158, 255, 0.1); } .calendar-day.selected { background: var(--el-primary-color); color: white; border-color: var(--el-primary-color); box-shadow: var(--el-shadow-dark); } .calendar-day.disabled { background: var(--el-bg-color-page); color: var(--el-text-placeholder); cursor: not-allowed; } .day-number { font-size: var(--el-font-size-large); font-weight: 600; margin-bottom: var(--el-spacing-small); } .day-week { font-size: var(--el-font-size-small); color: var(--el-text-secondary); margin-bottom: var(--el-spacing-small); } .day-status { font-size: var(--el-font-size-extra-small); color: var(--el-text-secondary); } /* 时间段选择 */ .time-slots { margin-top: var(--el-spacing-large); } .quick-duration { display: flex; align-items: center; gap: var(--el-spacing-base); margin-bottom: var(--el-spacing-large); flex-wrap: wrap; } .quick-duration span { font-weight: 500; color: var(--el-text-primary); white-space: nowrap; } .duration-btn { padding: var(--el-spacing-small) var(--el-spacing-base); border: 1px solid var(--el-border-color); background: var(--el-bg-color); color: var(--el-text-regular); border-radius: var(--el-border-radius-base); cursor: pointer; transition: all 0.3s ease; font-size: var(--el-font-size-small); white-space: nowrap; } .duration-btn:hover { border-color: var(--el-primary-color); color: var(--el-primary-color); } .duration-btn.selected { background: var(--el-primary-color); color: white; border-color: var(--el-primary-color); } .time-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(80px, 1fr)); gap: var(--el-spacing-base); } .time-slot { padding: var(--el-spacing-base); text-align: center; border: 1px solid var(--el-border-color); border-radius: var(--el-border-radius-base); cursor: pointer; transition: all 0.3s ease; font-size: var(--el-font-size-small); font-weight: 500; background: var(--el-bg-color); color: var(--el-text-primary); } .time-slot:hover { border-color: var(--el-primary-color); color: var(--el-primary-color); } .time-slot.selected { background: var(--el-primary-color); color: white; border-color: var(--el-primary-color); } .time-slot.booked { background: var(--el-bg-color-page); color: var(--el-text-placeholder); cursor: not-allowed; text-decoration: line-through; } .time-slot.past { background: var(--el-bg-color-page); color: var(--el-text-placeholder); cursor: not-allowed; } /* 套餐信息 */ .package-info { background: var(--el-bg-color-page); border: 1px solid var(--el-border-light); border-radius: var(--el-border-radius-base); padding: var(--el-spacing-large); margin-top: var(--el-spacing-large); } .package-details h4 { margin: 0 0 var(--el-spacing-small) 0; color: var(--el-text-primary); font-size: var(--el-font-size-base); } .package-details p { margin: 0 0 var(--el-spacing-base) 0; color: var(--el-text-regular); font-size: var(--el-font-size-small); line-height: 1.5; } .package-meta { display: flex; gap: var(--el-spacing-small); margin-bottom: var(--el-spacing-base); flex-wrap: wrap; } .package-meta span { background: var(--el-primary-light); background: rgba(64, 158, 255, 0.1); color: var(--el-primary-color); padding: 4px 8px; border-radius: var(--el-border-radius-round); font-size: var(--el-font-size-extra-small); font-weight: 500; } /* 服务项目标签 */ .services-container { display: flex; flex-direction: column; gap: var(--el-spacing-small); } .service-item { display: flex; gap: var(--el-spacing-small); align-items: center; } .service-item input { flex: 1; } .btn-add, .btn-remove { padding: var(--el-spacing-small); border: 1px dashed var(--el-border-color); background: var(--el-bg-color); color: var(--el-primary-color); border-radius: var(--el-border-radius-base); cursor: pointer; font-size: var(--el-font-size-small); transition: all 0.3s ease; } .btn-add:hover, .btn-remove:hover { border-color: var(--el-primary-color); background: var(--el-primary-light); background: rgba(64, 158, 255, 0.1); } /* 模态框 */ .modal { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.5); z-index: 2000; display: flex; align-items: center; justify-content: center; padding: var(--el-spacing-large); } .modal-content { background: var(--el-bg-color); border-radius: var(--el-border-radius-base); max-width: 500px; width: 100%; max-height: 80vh; overflow-y: auto; box-shadow: var(--el-shadow-dark); } .modal-header { display: flex; justify-content: space-between; align-items: center; padding: var(--el-spacing-large); border-bottom: 1px solid var(--el-border-lighter); } .modal-header h3 { margin: 0; color: var(--el-text-primary); font-size: var(--el-font-size-large); } .close { font-size: var(--el-font-size-extra-large); cursor: pointer; color: var(--el-text-secondary); transition: color 0.3s ease; width: 24px; height: 24px; display: flex; align-items: center; justify-content: center; } .close:hover { color: var(--el-text-primary); } .modal-body { padding: var(--el-spacing-large); } .booking-detail-item { background: var(--el-bg-color-light); border: 1px solid var(--el-border-lighter); border-radius: var(--el-border-radius-base); padding: var(--el-spacing-base); margin-bottom: var(--el-spacing-base); } .booking-time { font-weight: 600; color: var(--el-text-primary); margin-bottom: var(--el-spacing-small); font-size: var(--el-font-size-medium); } .booking-info { color: var(--el-text-regular); font-size: var(--el-font-size-base); line-height: 1.5; } .status-已确认 { color: var(--el-color-success); } .status-进行中 { color: var(--el-color-warning); } .status-已完成 { color: var(--el-color-info); } .status-已取消 { color: var(--el-color-danger); } /* 预约详情显示区域 */ .booking-details { background: var(--el-bg-color); border: 1px solid var(--el-border-lighter); border-radius: var(--el-border-radius-large); padding: var(--el-spacing-large); margin-top: var(--el-spacing-large); box-shadow: var(--el-box-shadow-lighter); } .booking-details h3 { color: var(--el-text-primary); margin: 0 0 var(--el-spacing-base) 0; font-size: var(--el-font-size-large); border-bottom: 2px solid var(--el-color-primary); padding-bottom: var(--el-spacing-base); display: flex; align-items: center; gap: var(--el-spacing-small); } .booking-details h3:before { content: "📋"; font-size: var(--el-font-size-medium); } .booking-details .booking-detail-item { margin-bottom: var(--el-spacing-base); transition: all 0.3s ease; } .booking-details .booking-detail-item:hover { transform: translateY(-2px); box-shadow: var(--el-box-shadow-base); } /* 表格样式 */ .table { width: 100%; border-collapse: collapse; margin-top: var(--el-spacing-large); } .table th, .table td { padding: var(--el-spacing-base); text-align: left; border-bottom: 1px solid var(--el-border-lighter); } .table th { background: var(--el-bg-color-page); color: var(--el-text-primary); font-weight: 600; } .table tr:hover { background: var(--el-bg-color-light); } /* 空状态 */ .empty-message { text-align: center; padding: var(--el-spacing-extra-large); color: var(--el-text-secondary); font-size: var(--el-font-size-base); } /* 移动端导航菜单(汉堡菜单) */ .mobile-menu-toggle { display: none; flex-direction: column; gap: 5px; padding: 8px; background: transparent; border: none; cursor: pointer; z-index: 1001; } .mobile-menu-toggle span { display: block; width: 25px; height: 3px; background: var(--el-text-primary); border-radius: 2px; transition: all 0.3s ease; } .mobile-menu-toggle.active span:nth-child(1) { transform: rotate(45deg) translate(8px, 8px); } .mobile-menu-toggle.active span:nth-child(2) { opacity: 0; } .mobile-menu-toggle.active span:nth-child(3) { transform: rotate(-45deg) translate(7px, -7px); } .mobile-nav-overlay { display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.5); z-index: 999; opacity: 0; transition: opacity 0.3s ease; } .mobile-nav-overlay.active { display: block; opacity: 1; } .mobile-nav { display: none; position: fixed; top: 0; left: -100%; width: 280px; max-width: 85vw; height: 100vh; background: white; box-shadow: 2px 0 10px rgba(0,0,0,0.1); z-index: 1000; overflow-y: auto; transition: left 0.3s ease; padding-top: 60px; } .mobile-nav.active { left: 0; } .mobile-nav .nav-link { display: block; padding: 16px 20px; border: none; border-bottom: 1px solid #f0f0f0; border-radius: 0; text-align: left; font-size: 16px; min-height: 52px; } .mobile-nav .nav-link:first-child { border-top: 1px solid #f0f0f0; } .mobile-nav .nav-link.active { background: rgba(64, 158, 255, 0.1); border-left: 4px solid var(--el-primary-color); font-weight: 600; } /* 响应式设计 */ /* 平板设备 */ @media (max-width: 768px) { :root { --el-spacing-base: 12px; --el-spacing-large: 16px; --el-spacing-extra-large: 24px; --el-font-size-base: 15px; } .container { padding: var(--el-spacing-base); max-width: 100%; } .header { position: relative; padding: 12px 16px; justify-content: flex-start; gap: 16px; } .header h1 { font-size: 18px; margin: 0 auto; } .mobile-menu-toggle { display: flex; } .nav { display: none; } .mobile-nav { display: block; } .booking-container { grid-template-columns: 1fr; gap: var(--el-spacing-base); } .form-row { flex-direction: column; gap: var(--el-spacing-base); } .form-row .form-group { flex: none; min-width: auto; } .calendar { grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); gap: var(--el-spacing-small); } .quick-duration { justify-content: center; flex-wrap: wrap; gap: 8px; } .duration-btn { min-width: 60px; padding: 10px 12px; font-size: 13px; } .time-grid { grid-template-columns: repeat(auto-fit, minmax(70px, 1fr)); gap: var(--el-spacing-small); } .time-slot { padding: 12px 8px; font-size: 13px; min-height: 44px; } .package-meta { justify-content: center; flex-wrap: wrap; } /* 卡片优化 */ .card { padding: var(--el-spacing-base); margin-bottom: var(--el-spacing-base); } /* 表格优化 */ .table { font-size: 13px; } .table th, .table td { padding: 8px 6px; } /* VIP搜索优化 */ .vip-search-results { max-height: 300px; font-size: 14px; } .vip-search-item { padding: 14px 16px; min-height: 60px; } /* 统计卡片 */ .stats-grid { grid-template-columns: repeat(2, 1fr); gap: 12px; } .stat-card { padding: 16px; } .stat-card .stat-value { font-size: 24px; } } /* 手机设备 */ @media (max-width: 480px) { :root { --el-font-size-base: 14px; --el-font-size-small: 13px; --el-font-size-large: 16px; } .container { padding: 8px; } .header { padding: 10px 12px; border-radius: 0; margin-bottom: 12px; position: sticky; top: 0; z-index: 100; background: white; } .header h1 { font-size: 16px; line-height: 1.4; } .section { padding: var(--el-spacing-base); border-radius: 0; box-shadow: none; border-bottom: 1px solid var(--el-border-lighter); margin-bottom: 12px; } .calendar { grid-template-columns: repeat(2, 1fr); gap: 6px; } .calendar-day { padding: 10px 6px; min-height: 60px; } .day-number { font-size: 16px; font-weight: 600; } .form-actions { flex-direction: column; gap: 10px; position: sticky; bottom: 0; background: white; padding: 12px; margin: 0 -12px -12px; box-shadow: 0 -2px 8px rgba(0,0,0,0.1); } .btn { width: 100%; justify-content: center; min-height: 48px; font-size: 16px; padding: 14px 20px; } .btn-sm { min-height: 44px; padding: 10px 16px; font-size: 14px; } .package-meta { flex-direction: column; align-items: stretch; gap: 10px; } .modal { padding: 0; } .modal-content { margin: 0; max-height: 100vh; border-radius: 0; padding: 20px 16px; overflow-y: auto; } /* 表单优化 */ .form-group { margin-bottom: 16px; } .form-group label { font-size: 14px; margin-bottom: 8px; } .form-group input, .form-group select, .form-group textarea { font-size: 16px; /* 防止iOS自动缩放 */ padding: 12px 14px; min-height: 48px; -webkit-appearance: none; appearance: none; } /* 输入组优化 */ .input-group { flex-direction: column; gap: 8px; } .input-group .form-control { border-radius: var(--el-border-radius-base); width: 100%; } .input-group-addon { border-radius: var(--el-border-radius-base); text-align: center; padding: 12px; } /* 卡片优化 */ .card { padding: 16px; margin-bottom: 12px; border-radius: 8px; } /* 表格优化 - 移动端横向滚动 */ .table-wrapper { overflow-x: auto; -webkit-overflow-scrolling: touch; } .table { min-width: 600px; font-size: 13px; } .table th, .table td { padding: 10px 8px; white-space: nowrap; } /* VIP卡片优化 */ .vip-grid { grid-template-columns: 1fr; gap: 12px; } .vip-card { padding: 16px; } .vip-actions { flex-direction: column; gap: 8px; } .vip-actions .btn { width: 100%; } /* 套餐卡片优化 */ .packages-grid { grid-template-columns: 1fr; gap: 12px; } .package-card { padding: 16px; } .package-header { flex-direction: column; align-items: flex-start; gap: 10px; } .package-title { font-size: 18px; } .package-details { grid-template-columns: 1fr; gap: 10px; } .package-actions { flex-direction: column; gap: 8px; } .package-actions button, .package-actions form { width: 100%; } /* 搜索框优化 */ .search-box input { font-size: 16px; padding: 12px 16px 12px 40px; } /* 筛选区域优化 */ .filter-section { padding: 16px; } .filter-row { flex-direction: column; gap: 12px; } .filter-group { width: 100%; } .filter-group select { width: 100%; padding: 12px 16px; font-size: 16px; min-height: 48px; } /* 统计卡片优化 */ .stats-grid { grid-template-columns: repeat(2, 1fr); gap: 10px; } .stat-card { padding: 14px; } .stat-card .stat-value { font-size: 22px; } .stat-card .stat-label { font-size: 12px; } /* 时间选择优化 */ .time-grid { grid-template-columns: repeat(3, 1fr); gap: 8px; } .time-slot { padding: 14px 8px; font-size: 14px; min-height: 48px; } /* 快速时长按钮优化 */ .quick-duration { flex-direction: row; flex-wrap: wrap; gap: 8px; } .duration-btn { flex: 1; min-width: calc(50% - 4px); padding: 12px; font-size: 14px; min-height: 48px; } /* 消息提示优化 */ .message { padding: 12px 16px; font-size: 14px; margin-bottom: 12px; border-radius: 8px; } /* 空状态优化 */ .empty-state { padding: 40px 20px; } .empty-icon { font-size: 48px; } .empty-message { font-size: 16px; } .empty-submessage { font-size: 13px; } /* 套餐管理页面移动端优化 */ .pending-bookings-container { padding: var(--el-spacing-small); } .pending-card { padding: var(--el-spacing-base); } .pending-header h2 { font-size: var(--el-font-size-large); } .package-card { padding: var(--el-spacing-base); margin-bottom: var(--el-spacing-base); } .package-header { flex-direction: column; align-items: flex-start; gap: var(--el-spacing-small); } .package-details { grid-template-columns: 1fr; gap: var(--el-spacing-small); } .services-tags { justify-content: flex-start; gap: var(--el-spacing-small); } .service-tag { font-size: var(--el-font-size-small); padding: 3px 6px; } .package-actions { flex-direction: column; gap: var(--el-spacing-small); } /* 服务项目移动端布局 */ .service-item { flex-direction: column; align-items: stretch !important; gap: var(--el-spacing-small) !important; } .service-item div { flex: none !important; } /* 表单移动端优化 */ .form-group { margin-bottom: var(--el-spacing-base); } .form-control { padding: 14px 16px; font-size: 16px; /* 防止iOS缩放 */ } .input-group { flex-direction: column; } .input-group .form-control { border-radius: var(--el-border-radius-base); margin-bottom: var(--el-spacing-small); } .input-group .btn { border-radius: var(--el-border-radius-base); width: 100%; } } /* 小屏幕手机 */ @media (max-width: 360px) { .header h1 { font-size: 15px; } .calendar { grid-template-columns: repeat(2, 1fr); } .time-grid { grid-template-columns: repeat(2, 1fr); } .quick-duration { flex-direction: column; align-items: stretch; } .duration-btn { width: 100%; } .stats-grid { grid-template-columns: 1fr; } .form-group input, .form-group select, .form-group textarea { font-size: 16px; /* 防止iOS缩放 */ } .mobile-nav { width: 260px; } } /* 触摸设备优化 */ @media (hover: none) and (pointer: coarse) { /* 增加触摸目标大小 */ .btn { min-height: 44px; padding: 12px 20px; -webkit-tap-highlight-color: rgba(64, 158, 255, 0.2); tap-highlight-color: rgba(64, 158, 255, 0.2); } .btn:active { transform: scale(0.98); opacity: 0.9; } .form-group input, .form-group select, .form-group textarea { min-height: 44px; -webkit-tap-highlight-color: rgba(64, 158, 255, 0.1); tap-highlight-color: rgba(64, 158, 255, 0.1); } .nav-link { min-height: 44px; padding: 12px 16px; -webkit-tap-highlight-color: rgba(64, 158, 255, 0.2); tap-highlight-color: rgba(64, 158, 255, 0.2); } .mobile-nav .nav-link { min-height: 52px; } .time-slot { min-height: 44px; -webkit-tap-highlight-color: rgba(64, 158, 255, 0.2); tap-highlight-color: rgba(64, 158, 255, 0.2); } .time-slot:active { transform: scale(0.95); } .calendar-day { min-height: 60px; -webkit-tap-highlight-color: rgba(64, 158, 255, 0.2); tap-highlight-color: rgba(64, 158, 255, 0.2); } /* 禁用hover效果 */ .btn:hover:not(:disabled) { transform: none; } .nav-link:hover { transform: none; } /* 优化滚动 */ * { -webkit-overflow-scrolling: touch; } /* 优化文本选择 */ body { -webkit-user-select: none; user-select: none; } input, textarea { -webkit-user-select: text; user-select: text; } } /* 加载状态 */ .loading { opacity: 0.6; pointer-events: none; } .loading::after { content: ''; position: absolute; top: 50%; left: 50%; width: 20px; height: 20px; margin: -10px 0 0 -10px; border: 2px solid var(--el-border-color); border-top: 2px solid var(--el-primary-color); border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } /* 动画效果 */ .fade-in { animation: fadeIn 0.3s ease-in; } @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } .slide-in { animation: slideIn 0.3s ease-out; } @keyframes slideIn { from { transform: translateX(-100%); } to { transform: translateX(0); } } /* 页面加载动画 */ .page-fade-in { animation: pageFadeIn 0.6s ease-out; } @keyframes pageFadeIn { from { opacity: 0; } to { opacity: 1; } } /* 套餐卡片入场动画 */ .package-card { animation: cardFadeIn 0.4s ease-out forwards; opacity: 0; transform: translateY(20px); } @keyframes cardFadeIn { to { opacity: 1; transform: translateY(0); } } /* 卡片延迟动画,为每个卡片添加不同的延迟 */ .package-card:nth-child(1) { animation-delay: 0.1s; } .package-card:nth-child(2) { animation-delay: 0.2s; } .package-card:nth-child(3) { animation-delay: 0.3s; } .package-card:nth-child(4) { animation-delay: 0.4s; } .package-card:nth-child(5) { animation-delay: 0.5s; } .package-card:nth-child(6) { animation-delay: 0.6s; } /* 按钮波纹效果 */ .btn { position: relative; overflow: hidden; } .btn::after { content: ''; position: absolute; top: 50%; left: 50%; width: 0; height: 0; border-radius: 50%; background: rgba(255, 255, 255, 0.3); transform: translate(-50%, -50%); transition: width 0.6s, height 0.6s; } .btn:hover::after { width: 300px; height: 300px; } .btn-primary::after { background: rgba(255, 255, 255, 0.5); } /* 表单元素动画 */ .form-control { transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } /* 服务标签悬停动画 */ .service-tag { transition: all 0.3s ease; } .service-tag:hover { transform: translateY(-2px); box-shadow: var(--el-shadow-light); } /* 状态徽章动画 */ .status-badge { transition: all 0.3s ease; } /* 空状态动画 */ .empty-message { animation: pulse 2s infinite; } @keyframes pulse { 0% { opacity: 0.8; } 50% { opacity: 1; } 100% { opacity: 0.8; } } /* 表单基础样式 */ .form-control { width: 100%; padding: 12px 16px; border: 1px solid var(--el-border-color); border-radius: var(--el-border-radius-base); font-size: var(--el-font-size-base); color: var(--el-text-primary); background-color: var(--el-bg-color); transition: all 0.3s ease; outline: none; box-sizing: border-box; } .form-control:focus { border-color: var(--el-primary-color); box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.2); } .form-control:hover:not(:disabled) { border-color: var(--el-primary-light); } .form-control:disabled { background-color: var(--el-bg-color-page); opacity: 0.7; cursor: not-allowed; } /* 表单组样式 */ .form-group { margin-bottom: var(--el-spacing-large); } .form-group label { display: block; margin-bottom: var(--el-spacing-small); font-weight: 500; color: var(--el-text-primary); font-size: var(--el-font-size-base); } .form-group label.required::after { content: " *"; color: var(--el-danger-color); } /* 输入组样式 */ .input-group { display: flex; align-items: stretch; width: 100%; gap: var(--el-spacing-small); } .input-group .form-control { flex: 1; margin-bottom: 0; border-top-right-radius: 0; border-bottom-right-radius: 0; } .input-group .btn { flex: none; border-top-left-radius: 0; border-bottom-left-radius: 0; } /* 表单操作区域 */ .form-actions { display: flex; gap: var(--el-spacing-base); margin-top: var(--el-spacing-large); justify-content: flex-end; flex-wrap: wrap; } .form-actions .btn { flex: none; } /* 套餐卡片样式 */ .package-card { border: 1px solid var(--el-border-lighter); border-radius: var(--el-border-radius-base); padding: var(--el-spacing-large); margin-bottom: var(--el-spacing-base); background: var(--el-bg-color); transition: all 0.3s ease; position: relative; } .package-card:hover { box-shadow: var(--el-shadow-light); border-color: var(--el-primary-light); } .package-card.inactive { opacity: 0.7; background: var(--el-bg-color-page); } .package-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--el-spacing-base); } .package-header h3 { margin: 0; color: var(--el-text-primary); font-size: var(--el-font-size-base); } .package-status { display: flex; align-items: center; } .status-badge { padding: 4px 8px; border-radius: var(--el-border-radius-round); font-size: var(--el-font-size-extra-small); font-weight: 500; } .status-badge.active { background: rgba(103, 194, 58, 0.1); color: var(--el-success-color); } .status-badge.inactive { background: rgba(144, 147, 153, 0.1); color: var(--el-info-color); } .package-description { color: var(--el-text-regular); margin-bottom: var(--el-spacing-base); line-height: 1.5; } .package-details { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: var(--el-spacing-base); margin-bottom: var(--el-spacing-base); } .detail-item { display: flex; flex-direction: column; gap: var(--el-spacing-small); } .detail-label { font-size: var(--el-font-size-extra-small); color: var(--el-text-secondary); text-transform: uppercase; letter-spacing: 0.5px; } .detail-value { font-weight: 500; color: var(--el-text-primary); } .package-services { margin-bottom: var(--el-spacing-base); } .services-tags { display: flex; flex-wrap: wrap; gap: var(--el-spacing-small); margin-top: var(--el-spacing-small); } .service-tag { background: var(--el-primary-light); background: rgba(64, 158, 255, 0.1); color: var(--el-primary-color); padding: 4px 8px; border-radius: var(--el-border-radius-small); font-size: var(--el-font-size-extra-small); font-weight: 500; } .package-actions { display: flex; gap: var(--el-spacing-small); justify-content: flex-end; flex-wrap: wrap; } .edit-form { margin-top: var(--el-spacing-large); padding-top: var(--el-spacing-large); border-top: 1px solid var(--el-border-lighter); } /* 复选框样式 */ input[type="checkbox"] { width: auto; margin-right: var(--el-spacing-small); } /* 标签样式 */ label { cursor: pointer; } /* 滚动条样式 */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: #f1f1f1; border-radius: 4px; } ::-webkit-scrollbar-thumb { background: #ccc; border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: #999; } /* 套餐管理页面样式 */ .package-form-container { margin-bottom: var(--el-spacing-extra-large); background: var(--el-bg-color); border-radius: var(--el-border-radius-base); box-shadow: var(--el-shadow-light); padding: var(--el-spacing-large); } .package-form-container h2, .packages-list h2 { margin: 0 0 var(--el-spacing-large) 0; font-size: var(--el-font-size-large); font-weight: 600; color: var(--el-text-primary); padding-bottom: var(--el-spacing-base); border-bottom: 1px solid var(--el-border-lighter); } .packages-list { background: var(--el-bg-color); border-radius: var(--el-border-radius-base); box-shadow: var(--el-shadow-light); padding: var(--el-spacing-large); } /* 套餐卡片网格布局 */ .packages-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: var(--el-spacing-large); margin-top: var(--el-spacing-large); } /* 套餐卡片样式 */ .package-card { background: var(--el-bg-color); border-radius: 12px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.08); padding: var(--el-spacing-large); transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1); position: relative; overflow: hidden; border: 2px solid transparent; background-clip: padding-box; } .package-card:hover { transform: translateY(-6px); box-shadow: 0 12px 30px rgba(0, 0, 0, 0.15); } .package-card.inactive { opacity: 0.7; border: 1px dashed var(--el-border-color); } .package-card.inactive::before { content: '已禁用'; position: absolute; top: 16px; right: -30px; background: var(--el-danger-color); color: white; padding: 4px 32px; font-size: 12px; font-weight: 600; transform: rotate(45deg); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); z-index: 1; letter-spacing: 0.5px; } .package-header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: var(--el-spacing-base); padding-bottom: var(--el-spacing-small); border-bottom: 2px solid var(--el-border-color-lighter); position: relative; z-index: 2; } .package-title { margin: 0; font-size: 1.35rem; font-weight: 700; color: var(--el-text-primary); flex: 1; margin-right: var(--el-spacing-base); line-height: 1.4; position: relative; display: inline-block; } /* 标题悬停下划线动画 */ .package-title::after { content: ''; position: absolute; bottom: -2px; left: 0; width: 0; height: 2px; background: var(--el-primary-color); transition: width 0.3s ease; } .package-card:hover .package-title::after { width: 100%; } .package-status { display: flex; align-items: center; } .status-badge { padding: 4px 12px; border-radius: var(--el-border-radius-round); font-size: var(--el-font-size-extra-small); font-weight: 500; text-transform: uppercase; letter-spacing: 0.5px; white-space: nowrap; } .status-badge.active { background: rgba(103, 194, 58, 0.1); color: var(--el-success-color); border: 1px solid rgba(103, 194, 58, 0.2); } .status-badge.inactive { background: rgba(245, 108, 108, 0.1); color: var(--el-danger-color); border: 1px solid rgba(245, 108, 108, 0.2); } .package-description { margin: 0 0 var(--el-spacing-base) 0; color: var(--el-text-secondary); font-size: var(--el-font-size-small); line-height: 1.6; padding: 0 var(--el-spacing-small); } .package-details { margin: var(--el-spacing-base) 0; padding: var(--el-spacing-large); background: linear-gradient(135deg, rgba(246, 248, 250, 0.8), rgba(238, 242, 246, 0.8)); border-radius: 10px; border: 1px solid var(--el-border-color-lighter); position: relative; overflow: hidden; transition: all 0.3s ease; } /* 详情区域悬停效果 */ .package-card:hover .package-details { background: linear-gradient(135deg, rgba(240, 244, 248, 0.9), rgba(228, 232, 236, 0.9)); transform: scale(1.02); } /* 渐变光效 */ .package-details::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(45deg, transparent, rgba(255, 255, 255, 0.4), transparent); transition: left 0.6s ease; } .package-card:hover .package-details::before { left: 100%; } .detail-item { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--el-spacing-small); font-size: var(--el-font-size-small); } .detail-item:last-child { margin-bottom: 0; } .detail-label { color: var(--el-text-secondary); font-weight: 500; font-size: var(--el-font-size-extra-small); } .detail-value { color: var(--el-text-primary); font-weight: 600; } .detail-value.price { color: var(--el-danger-color); font-size: var(--el-font-size-base); } /* 服务项目标签 */ .package-services { margin: var(--el-spacing-base) 0; } .package-services .detail-label { display: block; margin-bottom: var(--el-spacing-small); font-size: var(--el-font-size-small); color: var(--el-text-regular); font-weight: 500; } .services-tags { display: flex; flex-wrap: wrap; gap: var(--el-spacing-small); } .service-tag { background: var(--el-border-extra-light); color: var(--el-text-regular); padding: 6px 16px; border-radius: 20px; font-size: var(--el-font-size-extra-small); font-weight: 600; border: 1px solid var(--el-border-lighter); transition: all 0.35s cubic-bezier(0.4, 0, 0.2, 1); line-height: 1.5; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); position: relative; overflow: hidden; } .service-tag:hover { background: var(--el-primary-color); color: white; border-color: var(--el-primary-color); transform: translateY(-2px) scale(1.05); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); } /* 服务标签悬停光效 */ .service-tag::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent); transition: left 0.4s ease; } .service-tag:hover::before { left: 100%; } /* 套餐操作按钮 */ .package-actions { margin-top: var(--el-spacing-base); display: flex; gap: var(--el-spacing-small); justify-content: flex-end; padding-top: var(--el-spacing-base); border-top: 1px solid var(--el-border-lighter); } /* 空状态样式 */ .empty-state { text-align: center; padding: var(--el-spacing-extra-large) 0; background: var(--el-bg-color); border-radius: var(--el-border-radius-base); box-shadow: var(--el-shadow-light); margin-top: var(--el-spacing-large); } .empty-icon { font-size: 64px; margin-bottom: var(--el-spacing-base); opacity: 0.5; filter: grayscale(100%); transition: all 0.3s ease; } .empty-state:hover .empty-icon { opacity: 0.8; filter: grayscale(0%); transform: scale(1.05); } .empty-message { font-size: var(--el-font-size-large); font-weight: 600; color: var(--el-text-secondary); margin: 0 0 var(--el-spacing-small) 0; } .empty-submessage { font-size: var(--el-font-size-base); color: var(--el-text-placeholder); margin: 0; } /* 编辑表单样式 */ .edit-form { margin-top: var(--el-spacing-base); border-top: 2px solid var(--el-border-lighter); padding-top: var(--el-spacing-large); animation: fadeIn 0.3s ease; } .edit-form h4 { margin: 0 0 var(--el-spacing-base) 0; font-size: var(--el-font-size-base); font-weight: 600; color: var(--el-text-primary); } /* 服务项目样式 */ .services-container { margin-bottom: var(--el-spacing-small); } .service-item { display: flex; align-items: center; gap: var(--el-spacing-small); margin-bottom: var(--el-spacing-small); } .service-item input { flex: 1; } /* 复选框标签样式 */ .checkbox-label { display: flex; align-items: center; cursor: pointer; user-select: none; margin-bottom: var(--el-spacing-small); } .checkbox-text { margin-left: var(--el-spacing-small); color: var(--el-text-primary); } /* 动画效果 */ @keyframes fadeIn { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } } @keyframes slideInUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } /* 响应式设计 */ @media (max-width: 768px) { .packages-grid { grid-template-columns: 1fr; gap: var(--el-spacing-base); } .package-header { flex-direction: column; align-items: flex-start; } .package-status { margin-top: var(--el-spacing-small); align-self: flex-start; } .form-row { flex-direction: column; } .form-row .form-group { width: 100%; } .package-actions { flex-direction: column; gap: var(--el-spacing-base); } .package-actions button { width: 100%; } .package-form-container, .packages-list { padding: var(--el-spacing-base); } .package-card { padding: var(--el-spacing-base); } } /* 表单样式增强 */ .form-row { display: flex; gap: 20px; margin-bottom: var(--el-spacing-large); } .form-row .form-group { flex: 1; margin-bottom: 0; } /* 按钮悬停效果增强 */ .btn { position: relative; overflow: hidden; } .btn::before { content: ''; position: absolute; top: 50%; left: 50%; width: 0; height: 0; border-radius: 50%; background: rgba(255, 255, 255, 0.3); transform: translate(-50%, -50%); transition: width 0.6s, height 0.6s; } .btn:hover::before { width: 300px; height: 300px; } .btn span { position: relative; z-index: 1; }