/* ============================================ * 加载态 / 空态 * ============================================ */ .page-loading { display: flex; justify-content: center; align-items: center; height: 60vh; } .page-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 60vh; gap: 24rpx; } .empty-text { font-size: var(--font-sm); color: var(--color-gray-6); } /* ============================================ * Banner * ============================================ */ .banner-section { position: relative; width: 100%; overflow: hidden; } .banner-bg-gradient { width: 100%; height: 480rpx; background: linear-gradient(135deg, #0052d9, #0080ff); display: block; } .banner-content { position: absolute; top: 0; left: 0; right: 0; padding: 24rpx 40rpx 32rpx; } .coach-info { display: flex; align-items: center; gap: 24rpx; margin-bottom: 40rpx; margin-top: 16rpx; } .coach-avatar { width: 112rpx; height: 112rpx; border-radius: 24rpx; background: rgba(255, 255, 255, 0.2); overflow: hidden; flex-shrink: 0; } .avatar-img { width: 100%; height: 100%; } .avatar-emoji { font-size: 56rpx; line-height: 1; } .coach-meta { flex: 1; } .coach-name-row { display: flex; align-items: center; gap: 12rpx; margin-bottom: 8rpx; } .coach-name { font-size: 40rpx; font-weight: 600; color: #ffffff; } .coach-role-tag { padding: 4rpx 16rpx; background: rgba(255, 255, 255, 0.2); border-radius: 24rpx; font-size: var(--font-xs); color: #ffffff; } .coach-store { font-size: var(--font-sm); color: rgba(255, 255, 255, 0.7); } /* 收入概览卡片 */ .income-overview { display: grid; grid-template-columns: 1fr 1fr; gap: 24rpx; } .income-card { background: rgba(255, 255, 255, 0.2); border-radius: 24rpx; padding: 24rpx; text-align: center; backdrop-filter: blur(4px); } .income-label { display: block; font-size: var(--font-xs); color: rgba(255, 255, 255, 0.85); margin-bottom: 8rpx; } .income-value { display: block; font-size: var(--font-2xl); font-weight: 700; color: #ffffff; text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.2); } .income-highlight { color: #a7f3d0; } /* ============================================ * 通用 Section 卡片 * ============================================ */ .section-card { background: #ffffff; border-radius: 32rpx; padding: 32rpx; margin: 24rpx 24rpx 0; box-shadow: var(--shadow-lg); } .section-title { display: flex; align-items: center; gap: 12rpx; margin-bottom: 24rpx; font-size: var(--font-sm); font-weight: 600; color: var(--color-gray-13); } .title-dot { width: 16rpx; height: 16rpx; border-radius: 50%; } .dot-primary { background: var(--color-primary); } .dot-success { background: var(--color-success); } .dot-cyan { background: #06b6d4; } .dot-pink { background: #ec4899; } /* ============================================ * 收入档位 * ============================================ */ .tier-card { position: relative; padding: 24rpx; border-radius: 24rpx; margin-bottom: 20rpx; } .tier-current { background: linear-gradient(135deg, #f0fdf4 0%, #dcfce7 100%); border: 2rpx solid #86efac; } .tier-next { background: linear-gradient(135deg, #fefce8 0%, #fef9c3 100%); border: 2rpx solid #fde047; } .tier-badge { position: absolute; top: -16rpx; right: 24rpx; padding: 4rpx 20rpx; border-radius: 20rpx; font-size: 20rpx; font-weight: 600; color: #ffffff; } .badge-current { background: linear-gradient(135deg, #22c55e 0%, #16a34a 100%); } .badge-next { background: linear-gradient(135deg, #eab308 0%, #ca8a04 100%); } .tier-row { display: flex; align-items: center; justify-content: space-between; } .tier-icon-label { display: flex; align-items: center; gap: 12rpx; } .tier-emoji { font-size: 48rpx; } .tier-label { font-size: var(--font-sm); font-weight: 500; } .tier-label-green { color: #15803d; } .tier-label-yellow { color: #a16207; } .tier-rates { display: flex; align-items: center; gap: 24rpx; } .rate-item { text-align: center; width: 128rpx; } .rate-value-row { display: flex; align-items: baseline; justify-content: center; gap: 4rpx; } .rate-value { font-size: 36rpx; font-weight: 700; } .rate-unit { font-size: var(--font-xs); } .rate-desc { font-size: 20rpx; margin-top: 4rpx; display: block; } .rate-green { color: #15803d; } .rate-green-light { color: #16a34a; } .rate-yellow { color: #a16207; } .rate-yellow-light { color: #ca8a04; } .rate-divider { width: 2rpx; height: 64rpx; background: #bbf7d0; } .rate-divider-yellow { background: #fef08a; } /* 升级提示 */ .upgrade-hint { display: flex; align-items: center; justify-content: space-between; background: linear-gradient(to right, #eff6ff, #eef2ff); border-radius: 24rpx; padding: 24rpx; border: 2rpx solid #bfdbfe; } .upgrade-left { display: flex; align-items: center; gap: 12rpx; } .upgrade-emoji { font-size: 36rpx; } .upgrade-label { font-size: var(--font-xs); color: var(--color-gray-9); display: block; } .upgrade-hours { font-size: var(--font-sm); font-weight: 600; color: #1d4ed8; } .upgrade-hours-num { font-size: var(--font-base); } .upgrade-bonus { display: flex; flex-direction: column; align-items: center; background: linear-gradient(to right, #fbbf24, #f97316); color: #ffffff; padding: 12rpx 24rpx; border-radius: 16rpx; } .bonus-label { font-size: 20rpx; opacity: 0.9; } .bonus-value { font-size: 36rpx; font-weight: 700; } /* ============================================ * 本月业绩明细 * ============================================ */ .income-list { margin-bottom: 16rpx; } .income-row { display: flex; align-items: center; justify-content: space-between; padding: 16rpx 0; border-bottom: 2rpx solid var(--color-gray-1); } .income-row:last-child { border-bottom: none; } .income-row-left { display: flex; align-items: center; gap: 20rpx; } .income-icon-box { width: 64rpx; height: 64rpx; border-radius: 16rpx; background: var(--color-gray-1); display: flex; align-items: center; justify-content: center; font-size: var(--font-sm); } .income-info { display: flex; flex-direction: column; } .income-item-label { font-size: var(--font-sm); font-weight: 500; color: var(--color-gray-13); } .income-item-desc { font-size: 20rpx; color: var(--color-gray-5); margin-top: 4rpx; } .income-item-value { font-size: var(--font-base); font-weight: 700; color: var(--color-gray-13); font-variant-numeric: tabular-nums; } .income-total { display: flex; align-items: center; justify-content: space-between; padding-top: 16rpx; border-top: 2rpx solid var(--color-gray-1); } .total-label { font-size: var(--font-sm); font-weight: 500; color: var(--color-gray-7); } .total-value { font-size: 40rpx; font-weight: 700; color: var(--color-success); font-variant-numeric: tabular-nums; } /* ============================================ * 服务记录 * ============================================ */ .service-records-section { margin-top: 32rpx; margin: 32rpx -32rpx -32rpx; padding: 32rpx; background: rgba(243, 243, 243, 0.7); border-radius: 0 0 32rpx 32rpx; } .service-records-header { display: flex; align-items: center; gap: 8rpx; margin-bottom: 8rpx; } .service-records-emoji { font-size: var(--font-sm); } .service-records-title { font-size: var(--font-sm); font-weight: 600; color: var(--color-gray-13); } .date-divider { padding: 20rpx 0 8rpx; } .dd-date { font-size: 22rpx; color: var(--color-gray-7); font-weight: 500; } .record-item { display: flex; align-items: center; gap: 20rpx; padding: 16rpx 0; } .record-avatar { width: 76rpx; height: 76rpx; border-radius: 16rpx; display: flex; align-items: center; justify-content: center; color: #ffffff; font-size: var(--font-sm); font-weight: 500; flex-shrink: 0; } /* 头像渐变色 */ .avatar-from-blue { background: linear-gradient(135deg, #60a5fa, #6366f1); } .avatar-from-pink { background: linear-gradient(135deg, #f472b6, #f43f5e); } .avatar-from-teal { background: linear-gradient(135deg, #2dd4bf, #10b981); } .avatar-from-green { background: linear-gradient(135deg, #4ade80, #14b8a6); } .avatar-from-orange { background: linear-gradient(135deg, #fb923c, #f59e0b); } .avatar-from-purple { background: linear-gradient(135deg, #c084fc, #8b5cf6); } .avatar-from-violet { background: linear-gradient(135deg, #a78bfa, #7c3aed); } .avatar-from-amber { background: linear-gradient(135deg, #fbbf24, #eab308); } .record-content { flex: 1; min-width: 0; } .record-top { display: flex; align-items: center; justify-content: space-between; } .record-name-time { display: flex; align-items: center; gap: 12rpx; min-width: 0; } .record-name { font-size: var(--font-sm); font-weight: 500; color: var(--color-gray-13); flex-shrink: 0; } .record-time { font-size: var(--font-xs); color: var(--color-gray-6); } .record-hours { font-size: var(--font-sm); font-weight: 700; color: #059669; font-variant-numeric: tabular-nums; flex-shrink: 0; } .record-bottom { display: flex; align-items: center; justify-content: space-between; margin-top: 8rpx; } .record-tags { display: flex; align-items: center; gap: 12rpx; } .course-tag { padding: 2rpx 12rpx; border-radius: 8rpx; font-size: 22rpx; font-weight: 500; } .tag-basic { background: #ecfdf5; color: #15803d; } .tag-vip { background: #eff6ff; color: #1d4ed8; } .tag-tip { background: #fffbeb; color: #a16207; } .record-location { font-size: var(--font-xs); color: var(--color-gray-7); } .record-income { font-size: 22rpx; color: var(--color-gray-5); flex-shrink: 0; } .record-income-val { font-weight: 500; color: var(--color-gray-9); } .records-toggle { display: flex; align-items: center; justify-content: center; gap: 8rpx; padding: 16rpx 0; font-size: var(--font-sm); color: var(--color-gray-7); } .records-view-all { display: flex; align-items: center; justify-content: center; gap: 4rpx; padding: 12rpx 0; font-size: var(--font-sm); color: var(--color-primary); font-weight: 500; } /* ============================================ * 新客 / 常客列表 * ============================================ */ .customer-list { margin-bottom: 8rpx; } .customer-item { display: flex; align-items: center; gap: 20rpx; padding: 16rpx 0; border-bottom: 2rpx solid var(--color-gray-1); } .customer-item:last-child { border-bottom: none; } .customer-avatar { width: 76rpx; height: 76rpx; border-radius: 16rpx; display: flex; align-items: center; justify-content: center; color: #ffffff; font-size: var(--font-sm); font-weight: 500; flex-shrink: 0; } .customer-info { flex: 1; min-width: 0; } .customer-name { display: block; font-size: var(--font-sm); font-weight: 500; color: var(--color-gray-13); } .customer-detail { display: block; font-size: var(--font-xs); color: var(--color-gray-6); margin-top: 4rpx; } .toggle-btn { display: flex; align-items: center; justify-content: center; padding: 12rpx 0; font-size: var(--font-sm); color: var(--color-gray-7); }