新增 CooperationOrder 模块(双 Tab 列表、获客员绑定、主 Tab 扫码)、订单来源/带客单绑定及配套 API 测试;同步引入 roleCode 权限匹配与相关单元测试。 Co-authored-by: Cursor <cursoragent@cursor.com>
107 lines
3.0 KiB
Swift
107 lines
3.0 KiB
Swift
import Foundation
|
|
|
|
struct OrderSourcePerson: Identifiable, Hashable {
|
|
let key: String
|
|
let name: String
|
|
let phone: String
|
|
|
|
var id: String { key }
|
|
}
|
|
|
|
struct OrderSourceLead: Identifiable, Hashable {
|
|
let key: String
|
|
let userPhone: String
|
|
let remark: String
|
|
let images: [String]
|
|
|
|
var id: String { key }
|
|
}
|
|
|
|
struct OrderSourceSelection: Hashable {
|
|
let person: OrderSourcePerson
|
|
let lead: OrderSourceLead
|
|
}
|
|
|
|
extension CooperativeSaler {
|
|
func toOrderSourcePerson() -> OrderSourcePerson {
|
|
OrderSourcePerson(
|
|
key: "\(displayId)",
|
|
name: displayName,
|
|
phone: displayPhone
|
|
)
|
|
}
|
|
}
|
|
|
|
extension ReferralOrder {
|
|
func toOrderSourceLead() -> OrderSourceLead {
|
|
let remarkText: String
|
|
if !remark.isEmpty {
|
|
remarkText = remark
|
|
} else if !statusLabel.isEmpty {
|
|
remarkText = statusLabel
|
|
} else {
|
|
remarkText = "带客单 \(displayReferralOrderNo)"
|
|
}
|
|
return OrderSourceLead(
|
|
key: displayReferralOrderNo,
|
|
userPhone: userMobile,
|
|
remark: remarkText,
|
|
images: images
|
|
)
|
|
}
|
|
}
|
|
|
|
extension BoundReferralOrder {
|
|
func toOrderSourceSelection(fallbackSalerName: String = "") -> OrderSourceSelection? {
|
|
let referralNo = orderNo.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
guard !referralNo.isEmpty else { return nil }
|
|
let personName = salerName.isEmpty
|
|
? (fallbackSalerName.isEmpty ? "—" : fallbackSalerName)
|
|
: salerName
|
|
let remarkText: String
|
|
if !remark.isEmpty {
|
|
remarkText = remark
|
|
} else if !displayText.isEmpty {
|
|
remarkText = displayText
|
|
} else {
|
|
remarkText = "带客单号 \(referralNo)"
|
|
}
|
|
return OrderSourceSelection(
|
|
person: OrderSourcePerson(
|
|
key: saleUserId > 0 ? "\(saleUserId)" : "",
|
|
name: personName,
|
|
phone: salerPhone
|
|
),
|
|
lead: OrderSourceLead(
|
|
key: referralNo,
|
|
userPhone: userMobile,
|
|
remark: remarkText,
|
|
images: []
|
|
)
|
|
)
|
|
}
|
|
}
|
|
|
|
extension OrderEntity {
|
|
func toBoundOrderSourceSelection() -> OrderSourceSelection? {
|
|
if let referralOrder,
|
|
let selection = referralOrder.toOrderSourceSelection(fallbackSalerName: referralSalerName) {
|
|
return selection
|
|
}
|
|
guard !referralOrderNo.isEmpty else { return nil }
|
|
return OrderSourceSelection(
|
|
person: OrderSourcePerson(
|
|
key: "",
|
|
name: referralSalerName.isEmpty ? "—" : referralSalerName,
|
|
phone: ""
|
|
),
|
|
lead: OrderSourceLead(
|
|
key: referralOrderNo,
|
|
userPhone: phone,
|
|
remark: "带客单号 \(referralOrderNo)",
|
|
images: []
|
|
)
|
|
)
|
|
}
|
|
}
|