微信小程序页面迁移校验之前 P5任务处理之前

This commit is contained in:
Neo
2026-03-09 01:19:21 +08:00
parent 263bf96035
commit 6e20987d2f
1112 changed files with 153824 additions and 219694 deletions

View File

@@ -0,0 +1,431 @@
/* 加载态 & 空态 */
.page-loading,
.page-empty {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 60vh;
gap: 24rpx;
}
.empty-text {
font-size: var(--font-sm, 28rpx);
color: var(--color-gray-6, #a6a6a6);
}
/* ========== Banner ========== */
.banner-area {
position: relative;
overflow: hidden;
}
.banner-bg {
width: 100%;
height: 380rpx;
background: linear-gradient(135deg, #ff6b4a, #ff8a65);
display: block;
}
.banner-overlay {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
display: flex;
flex-direction: column;
}
.banner-nav {
display: flex;
align-items: center;
justify-content: space-between;
height: 88rpx;
padding: 0 32rpx;
}
.nav-back {
padding: 8rpx;
}
.nav-title {
font-size: var(--font-base, 32rpx);
font-weight: 500;
color: #ffffff;
}
.nav-placeholder {
width: 64rpx;
}
/* 助教头部信息 */
.coach-header {
display: flex;
align-items: center;
gap: 24rpx;
padding: 16rpx 40rpx 32rpx;
}
.avatar-box {
width: 112rpx;
height: 112rpx;
border-radius: 32rpx;
background: rgba(255, 255, 255, 0.2);
backdrop-filter: blur(8px);
overflow: hidden;
flex-shrink: 0;
box-shadow: 0 8rpx 24rpx rgba(0, 0, 0, 0.15);
}
.avatar-img {
width: 100%;
height: 100%;
}
.info-middle {
flex: 1;
min-width: 0;
}
.name-row {
display: flex;
align-items: center;
gap: 12rpx;
margin-bottom: 12rpx;
}
.coach-name {
font-size: var(--font-lg, 36rpx);
font-weight: 600;
color: #ffffff;
}
.skill-row {
display: flex;
align-items: center;
gap: 12rpx;
}
.skill-tag {
padding: 4rpx 16rpx;
background: rgba(255, 255, 255, 0.2);
border-radius: 8rpx;
font-size: var(--font-xs, 24rpx);
color: rgba(255, 255, 255, 0.9);
}
.info-right-stats {
flex-shrink: 0;
text-align: right;
display: flex;
flex-direction: column;
gap: 12rpx;
}
.right-stat {
display: flex;
align-items: baseline;
gap: 8rpx;
justify-content: flex-end;
}
.right-stat-label {
font-size: var(--font-xs, 24rpx);
color: rgba(255, 255, 255, 0.7);
}
.right-stat-value {
font-size: var(--font-base, 32rpx);
font-weight: 700;
color: #ffffff;
}
/* ========== 主体内容 ========== */
.main-content {
padding: 32rpx;
padding-bottom: 200rpx;
display: flex;
flex-direction: column;
gap: 32rpx;
}
/* ========== 通用卡片 ========== */
.card {
background: #ffffff;
border-radius: var(--radius-xl, 32rpx);
padding: 40rpx;
box-shadow: var(--shadow-lg, 0 8rpx 32rpx rgba(0, 0, 0, 0.06));
}
.card-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 32rpx;
}
.section-title {
font-size: var(--font-base, 32rpx);
font-weight: 600;
color: var(--color-gray-13, #242424);
position: relative;
padding-left: 20rpx;
margin-bottom: 32rpx;
}
.card-header .section-title {
margin-bottom: 0;
}
.section-title::before {
content: '';
position: absolute;
left: 0;
top: 50%;
transform: translateY(-50%);
width: 6rpx;
height: 28rpx;
border-radius: 4rpx;
}
.title-blue::before {
background: linear-gradient(180deg, #0052d9, #5b9cf8);
}
.title-green::before {
background: linear-gradient(180deg, #00a870, #4cd964);
}
.title-orange::before {
background: linear-gradient(180deg, #ed7b2f, #ffc107);
}
.header-hint {
font-size: var(--font-xs, 24rpx);
color: var(--color-gray-6, #a6a6a6);
}
/* ========== 绩效概览 ========== */
.perf-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 24rpx;
}
.perf-card {
border-radius: var(--radius-lg, 24rpx);
padding: 24rpx;
border: 1rpx solid transparent;
}
.perf-blue {
background: linear-gradient(135deg, #eff6ff, #eef2ff);
border-color: rgba(191, 219, 254, 0.5);
}
.perf-green {
background: linear-gradient(135deg, #ecfdf5, #d1fae5);
border-color: rgba(167, 243, 208, 0.5);
}
.perf-orange {
background: linear-gradient(135deg, #fff7ed, #fef3c7);
border-color: rgba(253, 186, 116, 0.5);
}
.perf-purple {
background: linear-gradient(135deg, #faf5ff, #ede9fe);
border-color: rgba(196, 181, 253, 0.5);
}
.perf-label {
font-size: var(--font-xs, 24rpx);
color: var(--color-gray-6, #a6a6a6);
display: block;
margin-bottom: 8rpx;
}
.perf-value-row {
display: flex;
align-items: baseline;
gap: 4rpx;
}
.perf-value {
font-size: 48rpx;
font-weight: 700;
font-variant-numeric: tabular-nums;
}
.perf-unit {
font-size: var(--font-xs, 24rpx);
color: var(--color-gray-6, #a6a6a6);
}
.perf-sub {
font-size: 22rpx;
color: var(--color-gray-5, #c5c5c5);
display: block;
margin-top: 4rpx;
}
/* ========== 收入明细 ========== */
.income-tabs {
display: flex;
align-items: center;
gap: 8rpx;
}
.income-tab {
font-size: var(--font-xs, 24rpx);
padding: 8rpx 20rpx;
border-radius: 100rpx;
color: var(--color-gray-7, #8b8b8b);
background: var(--color-gray-1, #f3f3f3);
}
.income-tab.active {
color: var(--color-primary, #0052d9);
background: var(--color-primary-light, #ecf2fe);
font-weight: 500;
}
.income-list {
display: flex;
flex-direction: column;
gap: 24rpx;
}
.income-item {
display: flex;
align-items: center;
gap: 16rpx;
}
.income-dot {
width: 16rpx;
height: 16rpx;
border-radius: 50%;
flex-shrink: 0;
}
.dot-primary {
background: var(--color-primary, #0052d9);
}
.dot-success {
background: var(--color-success, #00a870);
}
.dot-warning {
background: var(--color-warning, #ed7b2f);
}
.dot-purple {
background: #7c3aed;
}
.income-label {
flex: 1;
font-size: var(--font-base, 32rpx);
color: var(--color-gray-9, #5e5e5e);
}
.income-amount {
font-size: var(--font-base, 32rpx);
font-weight: 700;
color: var(--color-gray-13, #242424);
font-variant-numeric: tabular-nums;
}
.income-total {
display: flex;
align-items: center;
justify-content: space-between;
padding-top: 20rpx;
border-top: 1rpx solid var(--color-gray-2, #eeeeee);
}
.income-total-label {
font-size: var(--font-base, 32rpx);
font-weight: 600;
color: var(--color-gray-9, #5e5e5e);
}
.income-total-value {
font-size: var(--font-base, 32rpx);
font-weight: 700;
color: var(--color-success, #00a870);
font-variant-numeric: tabular-nums;
}
/* ========== 备注列表 ========== */
.note-list {
display: flex;
flex-direction: column;
gap: 20rpx;
}
.note-item {
background: #fafafa;
border-radius: var(--radius-lg, 24rpx);
border: 1rpx solid var(--color-gray-3, #e7e7e7);
padding: 24rpx;
}
.note-top {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 12rpx;
}
.note-author {
font-size: var(--font-sm, 28rpx);
font-weight: 500;
color: var(--color-gray-13, #242424);
}
.note-time {
font-size: var(--font-xs, 24rpx);
color: var(--color-gray-6, #a6a6a6);
}
.note-content {
font-size: var(--font-sm, 28rpx);
color: var(--color-gray-9, #5e5e5e);
line-height: 1.6;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
}
.note-score {
display: flex;
align-items: center;
gap: 8rpx;
margin-top: 12rpx;
}
.note-star {
font-size: 28rpx;
}
.note-score-value {
font-size: var(--font-xs, 24rpx);
color: var(--color-warning, #ed7b2f);
font-weight: 500;
}
.note-empty {
display: flex;
flex-direction: column;
align-items: center;
padding: 48rpx 0;
gap: 16rpx;
}
.empty-hint {
font-size: var(--font-sm, 28rpx);
color: var(--color-gray-5, #c5c5c5);
}
/* ========== 底部操作栏 ========== */
.bottom-bar {
position: fixed;
bottom: 0;
left: 0;
right: 0;
height: 128rpx;
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(20px);
border-top: 1rpx solid var(--color-gray-2, #eeeeee);
display: flex;
align-items: center;
gap: 24rpx;
padding: 0 32rpx;
z-index: 100;
}
.btn-chat {
flex: 1;
height: 88rpx;
background: linear-gradient(135deg, #0052d9, #3b82f6);
color: #ffffff;
font-weight: 500;
border-radius: var(--radius-lg, 24rpx);
display: flex;
align-items: center;
justify-content: center;
gap: 12rpx;
font-size: var(--font-base, 32rpx);
box-shadow: 0 8rpx 24rpx rgba(0, 82, 217, 0.3);
}
.btn-note {
flex: 1;
height: 88rpx;
background: var(--color-gray-1, #f3f3f3);
color: var(--color-gray-13, #242424);
font-weight: 500;
border-radius: var(--radius-lg, 24rpx);
display: flex;
align-items: center;
justify-content: center;
gap: 12rpx;
font-size: var(--font-base, 32rpx);
}
/* ========== 颜色工具类 ========== */
.text-primary {
color: var(--color-primary, #0052d9) !important;
}
.text-success {
color: var(--color-success, #00a870) !important;
}
.text-warning {
color: var(--color-warning, #ed7b2f) !important;
}
.text-purple {
color: #7c3aed !important;
}