完善景区排队设置页与全局按钮配置迁移。
重构排队设置与变更日志交互,补充 Overlay 与资源,并将多页面主操作按钮统一到 UIButton Configuration,同步更新相关单元测试。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@ -6,11 +6,56 @@
|
||||
import Foundation
|
||||
|
||||
/// 当前排队列表中的叫号状态。
|
||||
enum ScenicQueueCallStatus: Equatable {
|
||||
enum ScenicQueueCallStatus: Hashable {
|
||||
case waiting
|
||||
case called
|
||||
}
|
||||
|
||||
/// 当前排队卡片在指定拍摄会话与设置下的操作展示状态。
|
||||
struct ScenicQueueTicketActionState: Equatable {
|
||||
let skipEnabled: Bool
|
||||
let primaryVisible: Bool
|
||||
let primaryEnabled: Bool
|
||||
let primaryTitle: String
|
||||
let recallVisible: Bool
|
||||
let completeVisible: Bool
|
||||
|
||||
/// 按 Android 排队卡片规则生成操作状态。
|
||||
static func make(
|
||||
ticket: ScenicQueueTicket,
|
||||
shootingQueueNo: String?,
|
||||
remainSeconds: Int,
|
||||
showStartShootingButton: Bool
|
||||
) -> ScenicQueueTicketActionState {
|
||||
let isShooting = shootingQueueNo == ticket.queueNo
|
||||
if isShooting {
|
||||
return ScenicQueueTicketActionState(
|
||||
skipEnabled: false,
|
||||
primaryVisible: true,
|
||||
primaryEnabled: false,
|
||||
primaryTitle: "剩余 \(max(0, remainSeconds)) 秒",
|
||||
recallVisible: false,
|
||||
completeVisible: ticket.showCompleteAction
|
||||
)
|
||||
}
|
||||
let primaryVisible = ticket.status == .waiting || showStartShootingButton
|
||||
return ScenicQueueTicketActionState(
|
||||
skipEnabled: true,
|
||||
primaryVisible: primaryVisible,
|
||||
primaryEnabled: true,
|
||||
primaryTitle: ticket.status == .waiting ? "叫号" : "开始拍摄",
|
||||
recallVisible: ticket.status == .called,
|
||||
completeVisible: ticket.showCompleteAction
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/// 排队首页 Diffable Data Source 的稳定列表项。
|
||||
enum ScenicQueueListItem: Hashable {
|
||||
case current(ScenicQueueTicket)
|
||||
case skipped(ScenicQueueSkippedTicket)
|
||||
}
|
||||
|
||||
/// 当前排队列表展示实体。
|
||||
struct ScenicQueueTicket: Hashable {
|
||||
let recordId: Int64
|
||||
|
||||
Reference in New Issue
Block a user