/* pages/performance/performance.wxss — 业绩总览 */ /* ========== 全局设置 ========== */ page { background-color: #f3f3f3; line-height: 1.5; } view { line-height: inherit; } /* ========== 加载态 / 空态 / 错误态 ========== */ .page-loading, .page-empty, .page-error { display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 60vh; gap: 24rpx; } .empty-text, .error-text { font-size: 26rpx; color: #a6a6a6; line-height: 36rpx; } .retry-btn { padding: 16rpx 48rpx; background-color: #0052d9; color: #ffffff; border-radius: 16rpx; font-size: 26rpx; line-height: 36rpx; } .retry-btn--hover { opacity: 0.7; } /* ========== Banner 区域 ========== */ /* 方案:SVG 做渐变底图(与 task-detail 保持一致) * 特点:通过 WXSS 可灵活调整位置、高度、缩放 */ .banner-section { position: relative; width: 100%; overflow: hidden; height: 380rpx; } /* 渐变底图 — SVG 包含渐变 + 光晕 */ /* 方案:SVG 图片完整显示,通过调整位置和尺寸来控制显示区域 * 超出 banner-section 的部分会被 overflow: hidden 裁剪 * 调整方式: * - 修改 top/left 来移动图片位置(选择显示SVG的哪个部分) * - 修改 width/height 来缩放图片 * - 负的 top 值:图片向上移,显示下半部分 * - 正的 top 值:图片向下移,显示上半部分 */ .banner-bg-img { position: absolute; top: -50rpx; /* 调整此值移动图片:负值向上移,正值向下移 */ left: 0; /* 调整此值左右移动图片 */ width: 100%; /* 调整此值缩放图片宽度 */ height: auto; /* 保持图片比例,或设置具体值如 600rpx 来缩放 */ z-index: 0; } .banner-content { position: relative; z-index: 2; padding: 40rpx; height: 100%; display: flex; flex-direction: column; } /* 自定义导航栏 */ .custom-nav { display: flex; align-items: center; justify-content: space-between; height: 44px; margin-bottom: 16rpx; } .nav-back { width: 44px; height: 44px; display: flex; align-items: center; justify-content: center; border-radius: 50%; } .nav-back--hover { background-color: rgba(255, 255, 255, 0.2); } .nav-title { font-size: 32rpx; font-weight: 600; color: #ffffff; line-height: 44rpx; } .nav-placeholder { width: 44px; } /* 个人信息 */ .coach-info { display: flex; align-items: center; gap: 24rpx; margin-bottom: 40rpx; } .coach-avatar { width: 100rpx; height: 100rpx; border-radius: 24rpx; background: rgba(255, 255, 255, 0.2); overflow: hidden; flex-shrink: 0; display: flex; align-items: center; justify-content: center; } .avatar-img { width: 100%; height: 100%; } .coach-meta { flex: 1; } .coach-name-row { display: flex; align-items: center; gap: 12rpx; } .coach-name { font-size: 40rpx; font-weight: 600; color: #ffffff; line-height: 56rpx; } .coach-role-tag { padding: 4rpx 16rpx; background: rgba(255, 255, 255, 0.2); border-radius: 24rpx; font-size: 22rpx; color: #ffffff; line-height: 29rpx; } .coach-store { font-size: 26rpx; color: rgba(255, 255, 255, 0.7); line-height: 36rpx; } /* 收入概览卡片 */ .income-overview { display: flex; gap: 24rpx; } .income-card { flex: 1; background: rgba(255, 255, 255, 0.2); border-radius: 24rpx; padding: 30rpx; text-align: center; backdrop-filter: blur(4px); } .income-label { display: block; font-size: 22rpx; color: rgba(255, 255, 255, 0.85); margin-bottom: 8rpx; line-height: 29rpx; } .income-value { display: block; font-size: 44rpx; font-weight: 700; color: #ffffff; text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.2); line-height: 58rpx; } .income-highlight { color: #a7f3d0; } /* ========== 通用 Section 卡片 ========== */ .section-card { background: #ffffff; border-radius: 32rpx; padding: 32rpx; margin: 24rpx 24rpx 0; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); } .section-title { display: flex; align-items: center; gap: 12rpx; margin-bottom: 24rpx; font-size: 28rpx; font-weight: 600; color: #242424; line-height: 40rpx; } .title-dot { width: 16rpx; height: 16rpx; border-radius: 50%; flex-shrink: 0; } .dot-primary { background: #0052d9; } .dot-success { background: #00a870; } .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; line-height: 29rpx; } .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; line-height: 1; } .tier-label { font-size: 26rpx; font-weight: 500; line-height: 36rpx; } .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; line-height: 51rpx; } .rate-unit { font-size: 22rpx; line-height: 29rpx; } .rate-desc { font-size: 20rpx; margin-top: 4rpx; display: block; line-height: 29rpx; } .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; margin-top: 20rpx; } .upgrade-left { display: flex; align-items: center; gap: 12rpx; } .upgrade-emoji { font-size: 48rpx; line-height: 1; } .upgrade-text { display: flex; flex-direction: column; } .upgrade-label { font-size: 22rpx; color: #5e5e5e; display: block; line-height: 29rpx; } .upgrade-hours { font-size: 26rpx; font-weight: 600; color: #1d4ed8; line-height: 36rpx; } .upgrade-hours-num { font-size: 30rpx; line-height: 44rpx; } .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; line-height: 29rpx; } .bonus-value { font-size: 36rpx; font-weight: 700; line-height: 51rpx; } /* ========== 本月业绩明细 ========== */ .income-list { margin-bottom: 16rpx; } .income-row { display: flex; align-items: center; justify-content: space-between; padding: 16rpx 0; border-bottom: 2rpx solid #f3f3f3; } .income-row:last-child { border-bottom: none; } .income-row-left { display: flex; align-items: center; gap: 20rpx; flex: 1; } .income-icon-box { width: 64rpx; height: 64rpx; border-radius: 16rpx; background: #f3f3f3; display: flex; align-items: center; justify-content: center; font-size: 30rpx; flex-shrink: 0; } .income-info { display: flex; flex-direction: column; } .income-item-label { font-size: 26rpx; font-weight: 500; color: #242424; line-height: 36rpx; } .income-item-desc { font-size: 22rpx; color: #c5c5c5; margin-top: 4rpx; line-height: 29rpx; } .income-item-value { font-size: 30rpx; font-weight: 700; color: #242424; font-variant-numeric: tabular-nums; line-height: 44rpx; } .income-total { display: flex; align-items: center; justify-content: space-between; padding-top: 16rpx; border-top: 2rpx solid #f3f3f3; } .total-label { font-size: 26rpx; font-weight: 500; color: #8b8b8b; line-height: 36rpx; } .total-value { font-size: 40rpx; font-weight: 700; color: #00a870; font-variant-numeric: tabular-nums; line-height: 58rpx; } /* ========== 服务记录 ========== */ .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: 26rpx; line-height: 1; } .service-records-title { font-size: 26rpx; font-weight: 600; color: #242424; line-height: 36rpx; } .date-divider { display: flex; align-items: center; gap: 16rpx; padding: 20rpx 0 8rpx; } .dd-date { font-size: 22rpx; color: #8b8b8b; font-weight: 500; line-height: 29rpx; } .dd-line { flex: 1; height: 2rpx; background: #dcdcdc; } .dd-stats { font-size: 22rpx; color: #a6a6a6; font-variant-numeric: tabular-nums; line-height: 29rpx; } .record-item { display: flex; align-items: center; gap: 20rpx; padding: 16rpx 0; cursor: pointer; } .record-item:active { opacity: 0.7; } .record-avatar { width: 76rpx; height: 76rpx; border-radius: 20rpx; display: flex; align-items: center; justify-content: center; color: #ffffff; font-size: 30rpx; 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); } /* 头像渐变色由 app.wxss 全局 .avatar-{key} 统一提供(VI §8) */ .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: 26rpx; font-weight: 500; color: #242424; flex-shrink: 0; line-height: 36rpx; } .record-time { font-size: 22rpx; color: #a6a6a6; line-height: 29rpx; } .record-hours { font-size: 26rpx; font-weight: 700; color: #059669; font-variant-numeric: tabular-nums; flex-shrink: 0; line-height: 36rpx; } .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; line-height: 29rpx; } .tag-basic { background: #ecfdf5; color: #15803d; } .tag-vip { background: #eff6ff; color: #1d4ed8; } .tag-tip { background: #fffbeb; color: #a16207; } .record-location { font-size: 22rpx; color: #8b8b8b; line-height: 29rpx; } .record-income { font-size: 22rpx; color: #c5c5c5; flex-shrink: 0; line-height: 29rpx; } .record-income-val { font-weight: 500; color: #5e5e5e; } .records-toggle { display: flex; align-items: center; justify-content: center; gap: 8rpx; padding: 16rpx 0; font-size: 26rpx; color: #8b8b8b; line-height: 36rpx; } .records-view-all { display: flex; align-items: center; justify-content: center; gap: 4rpx; padding: 12rpx 0; font-size: 26rpx; color: #0052d9; font-weight: 500; line-height: 36rpx; } /* ========== 新客 / 常客列表 ========== */ .customer-list { margin-bottom: 8rpx; } .customer-item { display: flex; align-items: center; gap: 20rpx; padding: 16rpx 0; border-bottom: 2rpx solid #f3f3f3; } .customer-item:last-child { border-bottom: none; } .customer-avatar { width: 76rpx; height: 76rpx; border-radius: 20rpx; display: flex; align-items: center; justify-content: center; color: #ffffff; font-size: 30rpx; font-weight: 500; flex-shrink: 0; } .customer-info { flex: 1; min-width: 0; } .customer-name { display: block; font-size: 26rpx; font-weight: 500; color: #242424; line-height: 36rpx; } .customer-detail { display: block; font-size: 22rpx; color: #a6a6a6; margin-top: 4rpx; line-height: 29rpx; } .customer-item--hover { background-color: #f3f3f3; } /* ========== 服务记录按钮 ========== */ /* 并列按钮容器 */ .records-actions { display: flex; align-items: center; justify-content: space-between; gap: 16rpx; padding: 16rpx 120rpx; } .records-toggle { display: flex; align-items: center; justify-content: center; gap: 8rpx; font-size: 26rpx; color: #0052d9; line-height: 36rpx; flex: 1; font-weight: 500; } .records-view-all { display: flex; align-items: center; justify-content: center; gap: 4rpx; font-size: 26rpx; color: #0052d9; font-weight: 500; line-height: 36rpx; flex: 1; } .toggle-btn--hover { opacity: 0.6; } .view-all--hover { opacity: 0.6; } .toggle-btn { display: flex; align-items: center; justify-content: center; padding: 12rpx 0; font-size: 26rpx; color: #0052d9; line-height: 36rpx; } .toggle-btn--hover { opacity: 0.6; } .view-all--hover { opacity: 0.6; }