拆分宣传页视图并扩充 Mock 数据,合作订单支持获客员备注名并修复线索图片网格尺寸。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-02 17:43:04 +08:00
parent 1b1e93b9ca
commit 328c4321f4
41 changed files with 2529 additions and 1436 deletions

View File

@ -0,0 +1,69 @@
//
// ScenicPromotionMetricsGridView.swift
// suixinkan
//
// Created by Codex on 2026/7/2.
//
import SwiftUI
///
struct ScenicPromotionMetricsGridView: View {
let queue: ScenicPromotionQueueInfo?
var body: some View {
let metrics: [(String, String, String, Color)] = [
("当前排队人数", queue.map { "\($0.waitingPeople)" } ?? "--", "", Color(hex: 0x1580FF)),
("预计等待时间", queue.map { "\($0.estimatedMinutes)" } ?? "--", "分钟", Color(hex: 0xF28C18)),
("平均等待时长", queue.map { "\($0.averageMinutes)" } ?? "--", "分钟", Color(hex: 0x2D8E43))
]
LazyVGrid(columns: Array(repeating: GridItem(.flexible(), spacing: 12), count: 3), spacing: 12) {
ForEach(metrics, id: \.0) { metric in
VStack(spacing: 8) {
Text(metric.0)
.font(.system(size: 12, weight: .semibold))
.foregroundStyle(Color(hex: 0x113B79))
.lineLimit(1)
.minimumScaleFactor(0.76)
HStack(alignment: .lastTextBaseline, spacing: 2) {
Text(metric.1)
.font(.system(size: 34, weight: .heavy))
.foregroundStyle(metric.3)
.minimumScaleFactor(0.55)
if metric.1 != "--" {
Text(metric.2)
.font(.system(size: 13, weight: .medium))
.foregroundStyle(metric.3)
}
}
if metric.1 == "--" {
Text("暂无数据")
.font(.system(size: 11))
.foregroundStyle(Color(hex: 0x5272A5))
}
}
.padding(.horizontal, 6)
.frame(maxWidth: .infinity)
.frame(height: 92)
.background(.white.opacity(0.84), in: RoundedRectangle(cornerRadius: 14))
.overlay(
RoundedRectangle(cornerRadius: 14)
.stroke(.white.opacity(0.85), lineWidth: 1)
)
}
}
}
}
#if DEBUG
#Preview("排队数据") {
ScenicPromotionMetricsGridView(queue: ScenicPromotionPreviewSupport.sampleQueue)
.padding(.horizontal, 20)
}
#Preview("排队数据-空") {
ScenicPromotionMetricsGridView(queue: nil)
.padding(.horizontal, 20)
}
#endif