/* 客户看板页 — 忠于 H5 原型,87.5% 缩放 */ /* ===== 三态 ===== */ .page-loading, .page-empty { display: flex; justify-content: center; align-items: center; height: 60vh; } /* ===== 看板 Tab(对齐 board-coach 规范) ===== */ .board-tabs { display: flex; background: #ffffff; border-bottom: 2rpx solid #eeeeee; position: sticky; top: 0; z-index: 20; } .board-tab { flex: 1; text-align: center; padding: 24rpx 0; font-size: 26rpx; font-weight: 500; color: #8b8b8b; position: relative; } .board-tab--active { color: #0052d9; font-weight: 600; } .board-tab--active::after { content: ''; position: absolute; bottom: 0; left: 50%; transform: translateX(-50%); width: 42rpx; height: 5rpx; background: linear-gradient(90deg, #0052d9, #5b9cf8); border-radius: 3rpx; } /* ===== 筛选区域(对齐 board-coach 规范) ===== */ .filter-bar { background: #f3f3f3; padding: 14rpx 28rpx; position: sticky; top: 70rpx; z-index: 15; border-bottom: 2rpx solid #eeeeee; transition: transform 220ms ease, opacity 220ms ease; } .filter-bar--hidden { opacity: 0; transform: translateY(-110%); pointer-events: none; } .filter-bar-inner { display: flex; align-items: center; gap: 14rpx; background: #ffffff; border-radius: 14rpx; padding: 10rpx; border: 2rpx solid #eeeeee; box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.03); } .filter-item { flex: 1; min-width: 0; } .filter-item--wide { flex: 1.8; } /* ===== 列表头部 ===== */ .list-header { display: flex; justify-content: space-between; align-items: center; padding: 24rpx 28rpx 12rpx; } .list-header-left { display: flex; align-items: center; gap: 8rpx; } .list-header-title { font-size: 28rpx; font-weight: 600; color: #242424; } .list-header-sub { font-size: 24rpx; color: #a6a6a6; } .list-header-count { font-size: 24rpx; color: #c5c5c5; } /* ===== 客户列表 ===== */ .customer-list { padding: 0 28rpx 24rpx; margin-top: 4rpx; } /* ===== 客户卡片 ===== */ .customer-card { background: #ffffff; border-radius: 28rpx; padding: 30rpx 28rpx 26rpx; margin-bottom: 20rpx; box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.05); } .customer-card:active { opacity: 0.96; transform: scale(0.98); } /* ===== 卡片头部 ===== */ .card-header { display: flex; align-items: center; gap: 14rpx; margin-bottom: 6rpx; } .card-avatar { width: 66rpx; height: 66rpx; border-radius: 14rpx; display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .avatar-text { color: #ffffff; font-size: 26rpx; font-weight: 600; } /* 头像渐变色 */ .avatar--amber { background: linear-gradient(135deg, #fbbf24, #f97316); } .avatar--pink { background: linear-gradient(135deg, #f472b6, #f43f5e); } .avatar--blue { background: linear-gradient(135deg, #60a5fa, #6366f1); } .avatar--green { background: linear-gradient(135deg, #4ade80, #10b981); } .avatar--purple { background: linear-gradient(135deg, #a78bfa, #8b5cf6); } .avatar--cyan { background: linear-gradient(135deg, #22d3ee, #14b8a6); } .avatar--rose { background: linear-gradient(135deg, #fb7185, #e11d48); } .avatar--indigo { background: linear-gradient(135deg, #818cf8, #4f46e5); } .card-name { font-size: 28rpx; font-weight: 600; color: #242424; flex-shrink: 0; } /* 最频繁:姓名+小字垂直排列 */ .card-name-group { display: flex; flex-direction: column; flex-shrink: 0; } .card-name-sub { display: flex; align-items: center; margin-top: 2rpx; white-space: nowrap; overflow: hidden; } .card-header-spacer { flex: 1; } /* 头部右侧指标区 */ .header-metrics { display: flex; align-items: center; gap: 12rpx; flex-shrink: 0; } /* 最频繁维度:右上角大字到店次数 */ .header-metrics--freq { flex-direction: column; align-items: flex-end; gap: 0; } .freq-big-num { display: flex; align-items: baseline; } .freq-big-val { font-size: 36rpx; font-weight: 700; color: #0052d9; line-height: 1; } .freq-big-unit { font-size: 22rpx; font-weight: 400; color: #a6a6a6; margin-left: 2rpx; } .freq-big-label { font-size: 20rpx; color: #a6a6a6; margin-top: -2rpx; } /* 最近到店维度:右上角大字 X天前到店 */ .header-metrics--recent { gap: 4rpx; } .recent-big-num { display: flex; align-items: baseline; gap: 4rpx; } .recent-big-val { font-size: 40rpx; font-weight: 700; color: #00a870; line-height: 1; } .recent-big-unit { font-size: 22rpx; font-weight: 400; color: #a6a6a6; } .metric-gray { font-size: 22rpx; color: #a6a6a6; } .metric-dark { color: #393939; font-weight: 600; } .metric-error { color: #e34d59; font-weight: 700; } /* 超期标签 */ .overdue-tag { padding: 4rpx 10rpx; font-size: 22rpx; font-weight: 700; border-radius: 6rpx; } .overdue-tag--danger { background: rgba(227, 77, 89, 0.1); color: #e34d59; } .overdue-tag--warn { background: rgba(237, 123, 47, 0.1); color: #ed7b2f; } /* 消费潜力标签 */ .potential-tag { padding: 4rpx 10rpx; font-size: 22rpx; border-radius: 6rpx; } .potential-tag--primary { background: rgba(0, 82, 217, 0.1); color: #0052d9; } .potential-tag--warning { background: rgba(237, 123, 47, 0.1); color: #ed7b2f; } .potential-tag--success { background: rgba(0, 168, 112, 0.1); color: #00a870; } .potential-tag--gray { background: #eeeeee; color: #777777; } /* ===== 卡片中间行(flex 布局,左对齐名字位置) ===== */ .card-mid-row { display: flex; align-items: center; padding: 6rpx 0 4rpx 80rpx; } .mid-text { font-size: 24rpx; color: #c5c5c5; } .mid-dark { color: #393939; font-weight: 600; } .mid-primary { color: #0052d9; font-weight: 500; } .mid-primary-bold { color: #0052d9; font-weight: 700; } .mid-ml { margin-left: 20rpx; } .mid-right { margin-left: auto; } .mid-error { color: #e34d59; font-weight: 700; } /* ===== 网格布局 ===== */ .card-grid { display: grid; gap: 12rpx; padding: 6rpx 0 4rpx 80rpx; } .card-grid--3 { grid-template-columns: repeat(3, 1fr); text-align: center; } .card-grid--4 { grid-template-columns: repeat(4, 1fr); text-align: center; } .grid-cell { display: flex; flex-direction: column; gap: 4rpx; } .grid-label { font-size: 18rpx; color: #a6a6a6; } .grid-val { font-size: 24rpx; font-weight: 600; color: #393939; } .grid-val--success { color: #00a870; } .grid-val--warning { color: #ed7b2f; } .grid-val--lg { font-size: 28rpx; font-weight: 700; } /* ===== 迷你柱状图(最频繁维度) ===== */ .mini-chart { padding: 8rpx 0 4rpx 80rpx; } .mini-chart-header { display: flex; justify-content: space-between; margin-bottom: 4rpx; } .mini-chart-label { font-size: 18rpx; color: #c5c5c5; } .mini-chart-bars { display: flex; align-items: flex-end; gap: 6rpx; height: 48rpx; } .mini-bar-col { flex: 1; display: flex; align-items: flex-end; height: 100%; } .mini-bar { width: 100%; background: rgba(0, 82, 217, 0.3); border-radius: 4rpx 4rpx 0 0; min-height: 4rpx; } .mini-chart-nums { display: flex; gap: 6rpx; margin-top: 4rpx; } .mini-chart-num { flex: 1; text-align: center; font-size: 18rpx; color: #c5c5c5; } .mini-chart-num--active { color: #0052d9; font-weight: 700; } /* ===== 助教行 ===== */ .card-assistant-row { display: flex; align-items: center; flex-wrap: wrap; gap: 8rpx; margin-top: 10rpx; margin-left: 80rpx; padding-top: 10rpx; border-top: 2rpx solid rgba(0, 0, 0, 0.04); } .assistant-label { font-size: 22rpx; color: #a6a6a6; flex-shrink: 0; } .assistant-tag { display: flex; align-items: center; gap: 4rpx; } .assistant-heart { width: 24rpx; height: 24rpx; } .assistant-name { font-size: 22rpx; font-weight: 500; } .assistant-name.assistant--assignee { color: #e34d59; font-weight: 700; } .assistant-name.assistant--abandoned { color: #a6a6a6; } .assistant-name.assistant--normal { color: #242424; } .assistant-sep { font-size: 20rpx; color: #c5c5c5; margin: 0 6rpx; } /* 跟/弃 badge — 忠于 H5 原型:白字 + 渐变背景 + 阴影 */ .assistant-badge { display: inline-flex; align-items: center; justify-content: center; min-width: 28rpx; height: 24rpx; padding: 0 8rpx; border-radius: 10rpx; font-size: 18rpx; line-height: 1; font-weight: 700; letter-spacing: 0.5rpx; margin-left: 4rpx; color: #ffffff; } .assistant-badge--follow { background: linear-gradient(135deg, #e34d59 0%, #f26a76 100%); border: 1rpx solid rgba(227, 77, 89, 0.28); box-shadow: 0 2rpx 6rpx rgba(227, 77, 89, 0.28); } .assistant-badge--drop { background: linear-gradient(135deg, #d4d4d4 0%, #b6b6b6 100%); border: 1rpx solid rgba(120, 120, 120, 0.18); box-shadow: 0 2rpx 6rpx rgba(0, 0, 0, 0.14); } /* ===== 最专一维度:助教服务明细表 ===== */ .loyal-table { padding: 6rpx 0 4rpx 80rpx; border-left: 4rpx solid #eeeeee; margin-left: 80rpx; padding-left: 14rpx; margin-top: 4rpx; } .loyal-row { display: flex; align-items: center; gap: 4rpx; padding: 6rpx 0; } .loyal-row--header { padding-bottom: 8rpx; } .loyal-row--header .loyal-col { font-size: 20rpx; color: #c5c5c5; } .loyal-col { flex: 1; text-align: right; font-size: 24rpx; } .loyal-col--name { width: 140rpx; flex: none; text-align: left; display: flex; align-items: center; gap: 4rpx; } .loyal-coach-name { font-size: 22rpx; font-weight: 500; } .loyal-coach-name.assistant--assignee { color: #e34d59; font-weight: 700; } .loyal-coach-name.assistant--abandoned { color: #a6a6a6; } .loyal-coach-name.assistant--normal { color: #242424; } .loyal-val { font-weight: 600; color: #393939; } .loyal-val--primary { font-weight: 700; color: #0052d9; } .loyal-val--gray { color: #8b8b8b; } /* 最专一头部右侧 */ .header-metrics--loyal { gap: 6rpx; } .loyal-top-name { font-size: 24rpx; font-weight: 600; color: #e34d59; } .loyal-top-score { font-size: 24rpx; font-weight: 700; color: #0052d9; } /* ===== 底部安全区 ===== */ .safe-bottom { height: 200rpx; padding-bottom: env(safe-area-inset-bottom); }