fix: route payment pushes to orders and prevent refresh crash
This commit is contained in:
@@ -83,6 +83,14 @@ struct OrderSourceSelection: Equatable {
|
||||
/// 摄影师/景区管理员订单列表 ViewModel,对齐 Android `OrderListViewModel`。
|
||||
final class OrderListViewModel {
|
||||
|
||||
private let appStore: AppStore
|
||||
|
||||
/// 注入账号上下文,使订单查询与测试使用各自独立的会话。
|
||||
init(appStore: AppStore = .shared) {
|
||||
self.appStore = appStore
|
||||
}
|
||||
|
||||
|
||||
private(set) var orderList: [OrderEntity] = []
|
||||
private(set) var searchText = ""
|
||||
private(set) var filterLabel = "全部"
|
||||
@@ -110,6 +118,7 @@ final class OrderListViewModel {
|
||||
var onShowMessage: ((String) -> Void)?
|
||||
var onNavigateBindAcquirer: ((Int) -> Void)?
|
||||
|
||||
private var listRequestID = UUID()
|
||||
private var currentPage = 1
|
||||
private var totalCount = 0
|
||||
|
||||
@@ -122,7 +131,7 @@ final class OrderListViewModel {
|
||||
}()
|
||||
|
||||
var isScenicAdminReadOnly: Bool {
|
||||
AppStore.shared.session.currentAppRole == .scenicAdmin
|
||||
appStore.session.currentAppRole == .scenicAdmin
|
||||
}
|
||||
|
||||
var listAPIPath: String {
|
||||
@@ -131,6 +140,17 @@ final class OrderListViewModel {
|
||||
: "/api/yf-handset-app/photog/order/listv2"
|
||||
}
|
||||
|
||||
/// 清除通知进入前的查询条件,由页面随后发起第一页刷新。
|
||||
func resetFiltersForOrderNotification() {
|
||||
searchText = ""
|
||||
filterLabel = "全部"
|
||||
tabIndex = 0
|
||||
rTabIndex = 0
|
||||
startTime = nil
|
||||
endTime = nil
|
||||
notifyStateChange()
|
||||
}
|
||||
|
||||
func refreshOrderList(api: OrderAPI) async {
|
||||
currentPage = 1
|
||||
isRefreshing = true
|
||||
@@ -359,7 +379,7 @@ final class OrderListViewModel {
|
||||
isLoadingOrderSourcePeople = false
|
||||
notifyStateChange()
|
||||
}
|
||||
let storeId = AppStore.shared.session.currentStoreId
|
||||
let storeId = appStore.session.currentStoreId
|
||||
let storeIdParam = storeId > 0 ? String(storeId) : nil
|
||||
do {
|
||||
let response = try await api.cooperativeSalers(storeId: storeIdParam)
|
||||
@@ -402,7 +422,9 @@ final class OrderListViewModel {
|
||||
}
|
||||
|
||||
private func loadOrderList(api: OrderAPI, append: Bool) async {
|
||||
let scenicId = AppStore.shared.session.currentScenicId
|
||||
let requestID = UUID()
|
||||
listRequestID = requestID
|
||||
let scenicId = appStore.session.currentScenicId
|
||||
guard scenicId > 0 else {
|
||||
finishLoading()
|
||||
onShowMessage?("当前景区信息缺失")
|
||||
@@ -436,6 +458,7 @@ final class OrderListViewModel {
|
||||
isRefined: rTabIndex
|
||||
)
|
||||
}
|
||||
guard listRequestID == requestID else { return }
|
||||
totalCount = response.total
|
||||
if append {
|
||||
orderList.append(contentsOf: response.list)
|
||||
@@ -447,6 +470,7 @@ final class OrderListViewModel {
|
||||
} catch is CancellationError {
|
||||
return
|
||||
} catch {
|
||||
guard listRequestID == requestID else { return }
|
||||
onShowMessage?(error.localizedDescription)
|
||||
}
|
||||
finishLoading()
|
||||
@@ -479,7 +503,7 @@ final class OrderListViewModel {
|
||||
var json = try? JSONSerialization.jsonObject(with: data) as? [String: Any] else {
|
||||
return nil
|
||||
}
|
||||
json["scenic_id"] = String(AppStore.shared.session.currentScenicId)
|
||||
json["scenic_id"] = String(appStore.session.currentScenicId)
|
||||
guard let updated = try? JSONSerialization.data(withJSONObject: json),
|
||||
let string = String(data: updated, encoding: .utf8) else {
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user