Advance UIKit rewrite with AMap integration and core UI modules.

Integrate高德 SDK with simulator-safe build flags, add map views for operating area and punch points, refactor main tabs and key feature screens to UIKit with Diffable lists, and document Swift concurrency defaults in AGENTS.md.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-26 15:16:12 +08:00
parent 9edf993432
commit d99a5b1bf8
124 changed files with 5195 additions and 1536 deletions

View File

@ -13,6 +13,7 @@ struct ScenicQueueSettingData: Decodable, Equatable {
let setting: ScenicQueueSettingItem?
let time: String?
///
enum CodingKeys: String, CodingKey {
case exists
case setting
@ -64,6 +65,7 @@ struct ScenicQueueSettingItem: Decodable, Equatable {
let createdAt: String
let updatedAt: String
///
enum CodingKeys: String, CodingKey {
case id
case scenicId = "scenic_id"
@ -131,6 +133,7 @@ struct ScenicQueueVoiceBroadcastItem: Codable, Identifiable, Equatable {
let content: String
let sortOrder: Int
///
enum CodingKeys: String, CodingKey {
case content
case sortOrder = "sort_order"
@ -175,6 +178,7 @@ struct ScenicQueueSaveSettingRequest: Encodable, Equatable {
let status: Int
let remark: String?
///
enum CodingKeys: String, CodingKey {
case scenicId = "scenic_id"
case scenicSpotId = "scenic_spot_id"
@ -208,6 +212,7 @@ struct ScenicQueueSettingChangeLogData: Decodable, Equatable {
let pageSize: Int
let list: [ScenicQueueSettingChangeLogItem]
///
enum CodingKeys: String, CodingKey {
case total
case page
@ -243,6 +248,7 @@ struct ScenicQueueSettingChangeLogItem: Decodable, Equatable, Identifiable {
let displayText: String
let createdAt: String
///
enum CodingKeys: String, CodingKey {
case id
case scenicSpotName = "scenic_spot_name"
@ -270,6 +276,7 @@ struct ScenicQueueSettingChangeLogItem: Decodable, Equatable, Identifiable {
struct ScenicQueueShootQueueQRCodeData: Decodable, Equatable {
let qrcodeUrl: String
///
enum CodingKeys: String, CodingKey {
case qrcodeUrl = "qrcode_url"
}
@ -309,6 +316,7 @@ struct ScenicQueueSettingsSnapshot: Codable, Equatable {
var businessStartTime: String = "10:00"
var businessEndTime: String = "20:00"
///
enum CodingKeys: String, CodingKey {
case shootMinute = "shoot_minute"
case shootSecond = "shoot_second"
@ -334,6 +342,7 @@ struct ScenicQueueSettingsSnapshot: Codable, Equatable {
}
private extension KeyedDecodingContainer {
///
func decodeLossyString(forKey key: Key) throws -> String {
if let value = try? decodeIfPresent(String.self, forKey: key) { return value }
if let value = try? decodeIfPresent(Int.self, forKey: key) { return String(value) }
@ -342,6 +351,7 @@ private extension KeyedDecodingContainer {
return ""
}
///
func decodeLossyInt(forKey key: Key) throws -> Int? {
if let value = try? decodeIfPresent(Int.self, forKey: key) { return value }
if let value = try? decodeIfPresent(Double.self, forKey: key) { return Int(value) }
@ -354,6 +364,7 @@ private extension KeyedDecodingContainer {
return nil
}
///
func decodeLossyBool(forKey key: Key) throws -> Bool? {
if let value = try? decodeIfPresent(Bool.self, forKey: key) { return value }
if let value = try? decodeIfPresent(Int.self, forKey: key) { return value != 0 }