fix: route payment pushes to orders and prevent refresh crash
This commit is contained in:
@@ -8,6 +8,14 @@ import Foundation
|
||||
/// 店铺管理员押金单列表 ViewModel,对齐 Android `DepositOrderListViewModel`。
|
||||
final class DepositOrderListViewModel {
|
||||
|
||||
private let appStore: AppStore
|
||||
|
||||
/// 注入账号上下文,使订单查询与测试使用各自独立的会话。
|
||||
init(appStore: AppStore = .shared) {
|
||||
self.appStore = appStore
|
||||
}
|
||||
|
||||
|
||||
private(set) var searchText = ""
|
||||
private(set) var filterLabel = "全部"
|
||||
private(set) var tabIndex = 0
|
||||
@@ -22,6 +30,7 @@ final class DepositOrderListViewModel {
|
||||
var onStateChange: (() -> Void)?
|
||||
var onShowMessage: ((String) -> Void)?
|
||||
|
||||
private var listRequestID = UUID()
|
||||
private var currentPage = 1
|
||||
private var totalCount = 0
|
||||
private var searchDebounceTask: Task<Void, Never>?
|
||||
@@ -34,6 +43,18 @@ final class DepositOrderListViewModel {
|
||||
return formatter
|
||||
}()
|
||||
|
||||
/// 清除通知进入前的查询条件,由页面随后发起第一页刷新。
|
||||
func resetFiltersForOrderNotification() {
|
||||
searchDebounceTask?.cancel()
|
||||
searchDebounceTask = nil
|
||||
searchText = ""
|
||||
filterLabel = "全部"
|
||||
tabIndex = 0
|
||||
startTime = nil
|
||||
endTime = nil
|
||||
notifyStateChange()
|
||||
}
|
||||
|
||||
func refreshOrderList(api: OrderAPI) async {
|
||||
currentPage = 1
|
||||
isRefreshing = true
|
||||
@@ -102,7 +123,7 @@ final class DepositOrderListViewModel {
|
||||
onShowMessage?("核销码内容不完整")
|
||||
return
|
||||
}
|
||||
let storeId = AppStore.shared.session.currentStoreId
|
||||
let storeId = appStore.session.currentStoreId
|
||||
guard storeId > 0 else {
|
||||
onShowMessage?("店铺信息异常,请先选择店铺")
|
||||
return
|
||||
@@ -125,7 +146,7 @@ final class DepositOrderListViewModel {
|
||||
refundReason: String,
|
||||
api: OrderAPI
|
||||
) async {
|
||||
let storeId = AppStore.shared.session.currentStoreId
|
||||
let storeId = appStore.session.currentStoreId
|
||||
guard storeId > 0 else {
|
||||
onShowMessage?("店铺信息异常")
|
||||
return
|
||||
@@ -163,10 +184,12 @@ final class DepositOrderListViewModel {
|
||||
}
|
||||
|
||||
private func loadOrderList(refresh: Bool, api: OrderAPI) async {
|
||||
let requestID = UUID()
|
||||
listRequestID = requestID
|
||||
let phone = searchText.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
let isPhoneSearch = !phone.isEmpty && Self.isValidPhone(phone)
|
||||
|
||||
let storeId = AppStore.shared.session.currentStoreId
|
||||
let storeId = appStore.session.currentStoreId
|
||||
if storeId <= 0 {
|
||||
finishLoading()
|
||||
orderList = []
|
||||
@@ -201,6 +224,7 @@ final class DepositOrderListViewModel {
|
||||
startTime: start,
|
||||
endTime: end
|
||||
)
|
||||
guard listRequestID == requestID else { return }
|
||||
totalCount = response.total
|
||||
if refresh || currentPage == 1 {
|
||||
orderList = response.list
|
||||
@@ -213,6 +237,7 @@ final class DepositOrderListViewModel {
|
||||
} catch is CancellationError {
|
||||
return
|
||||
} catch {
|
||||
guard listRequestID == requestID else { return }
|
||||
onShowMessage?(error.localizedDescription)
|
||||
}
|
||||
finishLoading()
|
||||
|
||||
Reference in New Issue
Block a user