从 iOS 17 Observation 迁移至 iOS 16 兼容的 Combine 架构
将最低部署版本降至 iOS 16,以 ObservableObject 替换 @Observable,新增导航与 UI 兼容层,并补充登录冒烟 UI 测试。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@ -6,7 +6,7 @@
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import Observation
|
||||
import Combine
|
||||
|
||||
@MainActor
|
||||
/// 飞手认证实名认证读取协议,便于 ViewModel 单测替换。
|
||||
@ -17,29 +17,28 @@ protocol PilotRealNameServing {
|
||||
extension ProfileAPI: PilotRealNameServing {}
|
||||
|
||||
@MainActor
|
||||
@Observable
|
||||
/// 飞手认证 ViewModel,管理审核状态、表单、验证码、证件图上传和提交。
|
||||
final class PilotCertificationViewModel {
|
||||
private(set) var flyer: FlyerDetailResponse?
|
||||
private(set) var realNameInfo: RealNameInfo?
|
||||
var name = ""
|
||||
var certType: PilotCertType = .caac
|
||||
var certNo = ""
|
||||
var certImageUrl = ""
|
||||
var startDate = Date()
|
||||
var endDate = Calendar.current.date(byAdding: .year, value: 1, to: Date()) ?? Date()
|
||||
var droneModel = ""
|
||||
var droneSerialNo = ""
|
||||
var phone = ""
|
||||
var verifyCode = ""
|
||||
private(set) var pendingCertificateImageData: Data?
|
||||
private(set) var pendingCertificateFileName: String?
|
||||
private(set) var uploadProgress: Int?
|
||||
private(set) var loading = false
|
||||
private(set) var sendingCode = false
|
||||
private(set) var submitting = false
|
||||
private(set) var countdown = 0
|
||||
var statusMessage: String?
|
||||
final class PilotCertificationViewModel: ObservableObject {
|
||||
@Published private(set) var flyer: FlyerDetailResponse?
|
||||
@Published private(set) var realNameInfo: RealNameInfo?
|
||||
@Published var name = ""
|
||||
@Published var certType: PilotCertType = .caac
|
||||
@Published var certNo = ""
|
||||
@Published var certImageUrl = ""
|
||||
@Published var startDate = Date()
|
||||
@Published var endDate = Calendar.current.date(byAdding: .year, value: 1, to: Date()) ?? Date()
|
||||
@Published var droneModel = ""
|
||||
@Published var droneSerialNo = ""
|
||||
@Published var phone = ""
|
||||
@Published var verifyCode = ""
|
||||
@Published private(set) var pendingCertificateImageData: Data?
|
||||
@Published private(set) var pendingCertificateFileName: String?
|
||||
@Published private(set) var uploadProgress: Int?
|
||||
@Published private(set) var loading = false
|
||||
@Published private(set) var sendingCode = false
|
||||
@Published private(set) var submitting = false
|
||||
@Published private(set) var countdown = 0
|
||||
@Published var statusMessage: String?
|
||||
|
||||
/// 加载实名状态和飞手认证详情,单通道失败不清空另一通道数据。
|
||||
func load(api: any PilotCertificationServing, realNameAPI: any PilotRealNameServing) async {
|
||||
|
||||
Reference in New Issue
Block a user