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

@ -62,6 +62,7 @@ struct OrderEntity: Decodable, Identifiable, Equatable, Hashable {
let isNeedEdit: Bool
let isRefined: Int
///
enum CodingKeys: String, CodingKey {
case photogUid = "photog_uid"
case orderNumber = "order_number"
@ -131,6 +132,7 @@ struct OrderPhotoTravel: Decodable, Equatable, Hashable {
let retouchGiftPhotoNum: Int
let retouchGiftVideoNum: Int
///
enum CodingKeys: String, CodingKey {
case orderPhotoNum = "order_photo_num"
case orderVideoNum = "order_video_num"
@ -163,6 +165,7 @@ struct WriteOffOrderItem: Decodable, Identifiable, Equatable, Hashable {
let orderStatusName: String
let orderVerificationTime: String
///
enum CodingKeys: String, CodingKey {
case orderNumber = "order_number"
case orderVerificationStatus = "order_verification_status"
@ -192,6 +195,7 @@ struct WriteOffOrderItem: Decodable, Identifiable, Equatable, Hashable {
struct WriteOffRequest: Encodable {
let orderNumber: String
///
enum CodingKeys: String, CodingKey {
case orderNumber = "order_number"
}
@ -207,6 +211,7 @@ struct DepositOrderListItem: Decodable, Identifiable, Equatable, Hashable {
let statusName: String
let createdAt: String
///
enum CodingKeys: String, CodingKey {
case id
case orderNumber = "order_number"
@ -234,6 +239,7 @@ struct DepositOrderListItem: Decodable, Identifiable, Equatable, Hashable {
struct DepositOrderWriteOffRequest: Encodable, Equatable {
let orderNumber: String
///
enum CodingKeys: String, CodingKey {
case orderNumber = "order_number"
}
@ -244,6 +250,7 @@ struct DepositOrderRefundRequest: Encodable, Equatable {
let orderNumber: String
let refundReason: String
///
enum CodingKeys: String, CodingKey {
case orderNumber = "order_number"
case refundReason = "refund_reason"
@ -275,6 +282,7 @@ struct OrderRefundRequest: Encodable, Equatable {
let refundAmount: String
let refundReason: String
///
enum CodingKeys: String, CodingKey {
case orderNumber = "order_number"
case refundType = "refund_type"
@ -314,6 +322,7 @@ struct StoreOrderDetailResponse: Decodable, Equatable, Hashable {
let remark: String
let multiTravel: StoreOrderMultiTravelInfo?
///
enum CodingKeys: String, CodingKey {
case orderNumber = "order_number"
case orderType = "order_type"
@ -362,6 +371,7 @@ struct StoreOrderMultiTravelInfo: Decodable, Equatable, Hashable {
let projectInfo: StoreOrderProjectInfo?
let shootingList: [StoreOrderShootingListItem]
///
enum CodingKeys: String, CodingKey {
case projectInfo = "project_info"
case shootingList = "shooting_list"
@ -382,6 +392,7 @@ struct StoreOrderProjectInfo: Decodable, Equatable, Hashable {
let singleSpotPhotoNum: Int
let singleSpotVideoNum: Int
///
enum CodingKeys: String, CodingKey {
case settleSpotNum = "settle_spot_num"
case singleSpotMaterialNum = "single_spot_material_num"
@ -412,6 +423,7 @@ struct StoreOrderShootingListItem: Decodable, Identifiable, Equatable, Hashable
let startAvg: Double
let start: Double
///
enum CodingKeys: String, CodingKey {
case scenicSpotId = "scenic_spot_id"
case photogUid = "photog_uid"
@ -447,6 +459,7 @@ struct StoreOrderShootingDetailResponse: Decodable, Equatable, Hashable {
let materialList: [OrderMediaFile]
let completeList: [OrderMediaFile]
///
enum CodingKeys: String, CodingKey {
case scenicSpotId = "scenic_spot_id"
case scenicSpotName = "scenic_spot_name"
@ -480,6 +493,7 @@ struct StoreOrderComment: Decodable, Equatable, Hashable {
let content: String
let createdAt: String
///
enum CodingKeys: String, CodingKey {
case starShooting = "star_shooting"
case starRetouching = "star_retouching"
@ -522,6 +536,7 @@ struct OrderMediaFile: Decodable, Identifiable, Equatable, Hashable {
coverUrl.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty ? fileUrl : coverUrl
}
///
enum CodingKeys: String, CodingKey {
case fileName = "file_name"
case fileUrl = "file_url"
@ -550,6 +565,7 @@ struct MultiTravelShootHistoryResponse: Decodable, Equatable, Hashable {
let projectTypeName: String
let photogSpotList: [PhotogSpotItem]
///
enum CodingKeys: String, CodingKey {
case projectName = "project_name"
case projectType = "project_type"
@ -583,6 +599,7 @@ struct PhotogSpotItem: Decodable, Identifiable, Equatable, Hashable {
return nickname.isEmpty ? photogName : nickname
}
///
enum CodingKeys: String, CodingKey {
case scenicSpotId = "scenic_spot_id"
case photogUid = "photog_uid"
@ -609,6 +626,7 @@ struct MultiTravelVerifiedScenicSpotItem: Decodable, Identifiable, Equatable, Ha
let id: Int
let name: String
///
enum CodingKeys: String, CodingKey {
case id
case name
@ -629,6 +647,7 @@ struct MultiTravelUploadMaterialRequest: Encodable, Equatable {
let cloudFile: [MultiTravelCloudFileItem]
let uploadFile: [MultiTravelUploadFileItem]
///
enum CodingKeys: String, CodingKey {
case orderNumber = "order_number"
case scenicSpotId = "scenic_spot_id"
@ -641,6 +660,7 @@ struct MultiTravelUploadMaterialRequest: Encodable, Equatable {
struct MultiTravelCloudFileItem: Encodable, Equatable {
let fileId: Int
///
enum CodingKeys: String, CodingKey {
case fileId = "file_id"
}
@ -651,6 +671,7 @@ struct MultiTravelUploadFileItem: Encodable, Equatable {
let fileName: String
let fileUrl: String
///
enum CodingKeys: String, CodingKey {
case fileName = "file_name"
case fileUrl = "file_url"