新增门店订单与核销管理列表,对齐 Android 订单能力并完善账号级缓存。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@ -29,6 +29,29 @@ enum OrderFilters {
|
||||
.init(id: -1, title: "需要精修"),
|
||||
.init(id: -2, title: "无需精修")
|
||||
]
|
||||
|
||||
/// 店长订单 Tab 筛选项(无精修筛选项)。
|
||||
static let storeAdminStatusFilters: [OrderStatusFilter] = [
|
||||
.init(id: 0, title: "全部"),
|
||||
.init(id: 18, title: "已付定金"),
|
||||
.init(id: 30, title: "已完成"),
|
||||
.init(id: 50, title: "已退款")
|
||||
]
|
||||
|
||||
/// 核销管理页状态 Tab 筛选项。
|
||||
static let writeOffStatusFilters: [OrderStatusFilter] = [
|
||||
.init(id: 0, title: "全部"),
|
||||
.init(id: 18, title: "已支付"),
|
||||
.init(id: 30, title: "已完成"),
|
||||
.init(id: 1, title: "已核销"),
|
||||
.init(id: 2, title: "未核销")
|
||||
]
|
||||
}
|
||||
|
||||
/// 店铺订单类型常量,与 Android StoreOrderItem 约定一致。
|
||||
enum StoreOrderType {
|
||||
static let offlineProduct = 4
|
||||
static let multiTravelShoot = 19
|
||||
}
|
||||
|
||||
/// 订单管理列表实体,承载订单卡片展示和筛选判断所需字段。
|
||||
@ -59,8 +82,9 @@ struct OrderEntity: Decodable, Identifiable, Equatable, Hashable {
|
||||
let depositPayTime: String
|
||||
let createdAt: String
|
||||
let photoTravel: OrderPhotoTravel?
|
||||
let multiTravel: OrderListMultiTravel?
|
||||
let isNeedEdit: Bool
|
||||
let isRefined: Int
|
||||
var isRefined: Int
|
||||
let canBindReferral: Int
|
||||
let showOrderSource: Int
|
||||
let referralOrderNo: String
|
||||
@ -92,6 +116,7 @@ struct OrderEntity: Decodable, Identifiable, Equatable, Hashable {
|
||||
case depositPayTime = "deposit_pay_time"
|
||||
case createdAt = "created_at"
|
||||
case photoTravel = "photo_travel"
|
||||
case multiTravel = "multi_travel"
|
||||
case isNeedEdit
|
||||
case isRefined = "is_refined"
|
||||
case canBindReferral = "can_bind_referral"
|
||||
@ -128,6 +153,7 @@ struct OrderEntity: Decodable, Identifiable, Equatable, Hashable {
|
||||
depositPayTime = try container.decodeLossyString(forKey: .depositPayTime)
|
||||
createdAt = try container.decodeLossyString(forKey: .createdAt)
|
||||
photoTravel = try container.decodeIfPresent(OrderPhotoTravel.self, forKey: .photoTravel)
|
||||
multiTravel = try container.decodeIfPresent(OrderListMultiTravel.self, forKey: .multiTravel)
|
||||
isNeedEdit = try container.decodeLossyBool(forKey: .isNeedEdit) ?? true
|
||||
isRefined = try container.decodeLossyInt(forKey: .isRefined) ?? 0
|
||||
canBindReferral = try container.decodeLossyInt(forKey: .canBindReferral) ?? 0
|
||||
@ -145,6 +171,10 @@ struct OrderPhotoTravel: Decodable, Equatable, Hashable {
|
||||
let checkInTime: String
|
||||
let retouchGiftPhotoNum: Int
|
||||
let retouchGiftVideoNum: Int
|
||||
let canCancelOrder: Bool
|
||||
let needCheckIn: Bool
|
||||
let canGiftRetouch: Bool
|
||||
let retouchGiftTime: String
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case orderPhotoNum = "order_photo_num"
|
||||
@ -152,6 +182,10 @@ struct OrderPhotoTravel: Decodable, Equatable, Hashable {
|
||||
case checkInTime = "check_in_time"
|
||||
case retouchGiftPhotoNum = "retouch_gift_photo_num"
|
||||
case retouchGiftVideoNum = "retouch_gift_video_num"
|
||||
case canCancelOrder = "can_cancel_order"
|
||||
case needCheckIn = "need_check_in"
|
||||
case canGiftRetouch = "can_gift_retouch"
|
||||
case retouchGiftTime = "retouch_gift_time"
|
||||
}
|
||||
|
||||
/// 宽松解码旅拍附加信息。
|
||||
@ -162,6 +196,87 @@ struct OrderPhotoTravel: Decodable, Equatable, Hashable {
|
||||
checkInTime = try container.decodeLossyString(forKey: .checkInTime)
|
||||
retouchGiftPhotoNum = try container.decodeLossyInt(forKey: .retouchGiftPhotoNum) ?? 0
|
||||
retouchGiftVideoNum = try container.decodeLossyInt(forKey: .retouchGiftVideoNum) ?? 0
|
||||
canCancelOrder = try container.decodeLossyBool(forKey: .canCancelOrder) ?? false
|
||||
needCheckIn = try container.decodeLossyBool(forKey: .needCheckIn) ?? false
|
||||
canGiftRetouch = try container.decodeLossyBool(forKey: .canGiftRetouch) ?? false
|
||||
retouchGiftTime = try container.decodeLossyString(forKey: .retouchGiftTime)
|
||||
}
|
||||
}
|
||||
|
||||
/// 订单列表多点位旅拍缩略图实体,仅用于列表卡片历史拍摄预览。
|
||||
struct OrderListMultiTravel: Decodable, Equatable, Hashable {
|
||||
let materialList: [OrderMediaFile]
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case materialList = "material_list"
|
||||
}
|
||||
|
||||
/// 宽松解码列表缩略图字段。
|
||||
init(from decoder: Decoder) throws {
|
||||
let container = try decoder.container(keyedBy: CodingKeys.self)
|
||||
materialList = try container.decodeIfPresent([OrderMediaFile].self, forKey: .materialList) ?? []
|
||||
}
|
||||
}
|
||||
|
||||
/// 店长订单 Tab 列表实体,对齐 Android StoreOrderItem。
|
||||
struct StoreOrderListItem: Decodable, Identifiable, Equatable, Hashable {
|
||||
var id: String { orderNumber }
|
||||
|
||||
let orderNumber: String
|
||||
let orderType: Int
|
||||
let orderTypeLabel: String
|
||||
let createdAt: String
|
||||
let orderStatus: Int
|
||||
let orderStatusName: String
|
||||
let actualPayAmount: String
|
||||
let actualRefundAmount: String
|
||||
let payTypeName: String
|
||||
let payTime: String
|
||||
let completeTime: String
|
||||
let userId: Int
|
||||
let phone: String
|
||||
let projectId: Int
|
||||
let projectName: String
|
||||
let remark: String
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case orderNumber = "order_number"
|
||||
case orderType = "order_type"
|
||||
case orderTypeLabel = "order_type_label"
|
||||
case createdAt = "created_at"
|
||||
case orderStatus = "order_status"
|
||||
case orderStatusName = "order_status_name"
|
||||
case actualPayAmount = "actual_pay_amount"
|
||||
case actualRefundAmount = "actual_refund_amount"
|
||||
case payTypeName = "pay_type_name"
|
||||
case payTime = "pay_time"
|
||||
case completeTime = "complete_time"
|
||||
case userId = "user_id"
|
||||
case phone
|
||||
case projectId = "project_id"
|
||||
case projectName = "project_name"
|
||||
case remark
|
||||
}
|
||||
|
||||
/// 宽松解码店长订单列表字段。
|
||||
init(from decoder: Decoder) throws {
|
||||
let container = try decoder.container(keyedBy: CodingKeys.self)
|
||||
orderNumber = try container.decodeLossyString(forKey: .orderNumber)
|
||||
orderType = try container.decodeLossyInt(forKey: .orderType) ?? 0
|
||||
orderTypeLabel = try container.decodeLossyString(forKey: .orderTypeLabel)
|
||||
createdAt = try container.decodeLossyString(forKey: .createdAt)
|
||||
orderStatus = try container.decodeLossyInt(forKey: .orderStatus) ?? 0
|
||||
orderStatusName = try container.decodeLossyString(forKey: .orderStatusName)
|
||||
actualPayAmount = try container.decodeLossyString(forKey: .actualPayAmount)
|
||||
actualRefundAmount = try container.decodeLossyString(forKey: .actualRefundAmount)
|
||||
payTypeName = try container.decodeLossyString(forKey: .payTypeName)
|
||||
payTime = try container.decodeLossyString(forKey: .payTime)
|
||||
completeTime = try container.decodeLossyString(forKey: .completeTime)
|
||||
userId = try container.decodeLossyInt(forKey: .userId) ?? 0
|
||||
phone = try container.decodeLossyString(forKey: .phone)
|
||||
projectId = try container.decodeLossyInt(forKey: .projectId) ?? 0
|
||||
projectName = try container.decodeLossyString(forKey: .projectName)
|
||||
remark = try container.decodeLossyString(forKey: .remark)
|
||||
}
|
||||
}
|
||||
|
||||
@ -283,6 +398,56 @@ enum OrderRefundMode: Int, CaseIterable, Identifiable, Hashable {
|
||||
}
|
||||
}
|
||||
|
||||
/// 取消订单请求实体。
|
||||
struct CancelOrderRequest: Encodable, Equatable {
|
||||
let orderNumber: String
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case orderNumber = "order_number"
|
||||
}
|
||||
}
|
||||
|
||||
/// 赠送修图/视频请求实体。
|
||||
struct SendGiftRequest: Encodable, Equatable {
|
||||
let orderNumber: String
|
||||
let photoNum: Int
|
||||
let videoNum: Int
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case orderNumber = "order_number"
|
||||
case photoNum = "photo_num"
|
||||
case videoNum = "video_num "
|
||||
}
|
||||
}
|
||||
|
||||
/// 更新精修选择请求实体。
|
||||
struct UpdateRefinedRequest: Encodable, Equatable {
|
||||
let orderNumber: String
|
||||
let isRefined: Int
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case orderNumber = "order_number"
|
||||
case isRefined = "is_refined"
|
||||
}
|
||||
}
|
||||
|
||||
/// 店长订单退款请求实体。
|
||||
struct StoreOrderRefundRequest: Encodable, Equatable {
|
||||
let storeId: Int
|
||||
let orderNumber: String
|
||||
let refundType: Int
|
||||
let refundAmount: String
|
||||
let refundReason: String
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case storeId = "store_id"
|
||||
case orderNumber = "order_number"
|
||||
case refundType = "refund_type"
|
||||
case refundAmount = "refund_amount"
|
||||
case refundReason = "refund_reason"
|
||||
}
|
||||
}
|
||||
|
||||
/// 普通订单退款请求实体。
|
||||
struct OrderRefundRequest: Encodable, Equatable {
|
||||
let orderNumber: String
|
||||
@ -305,6 +470,7 @@ enum OrdersRoute: Hashable {
|
||||
case historicalShooting(orderNumber: String)
|
||||
case multiTravelTaskUpload(orderNumber: String)
|
||||
case orderTrailer(orderNumber: String, title: String)
|
||||
case writeOffList
|
||||
}
|
||||
|
||||
/// 订单详情接口响应实体,承载门店订单详情页的完整展示数据。
|
||||
|
||||
Reference in New Issue
Block a user