LNOrderListViewController.swift 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. //
  2. // LNOrderListViewController.swift
  3. // Lanu
  4. //
  5. // Created by OneeChan on 2025/11/18.
  6. //
  7. import Foundation
  8. import UIKit
  9. import SnapKit
  10. import MJRefresh
  11. extension UIView {
  12. func pushToOrderList() {
  13. let vc = LNOrderListViewController()
  14. navigationController?.pushViewController(vc, animated: true)
  15. }
  16. }
  17. class LNOrderListViewController: LNViewController {
  18. private var isLoading = false
  19. private let emptyView = LNNoMoreDataView()
  20. private let tableView = UITableView()
  21. private var orders: [LNOrderListItemVO] = []
  22. private var nextTag: String? = nil
  23. private let pageSize = 30
  24. override func viewDidLoad() {
  25. super.viewDidLoad()
  26. setupViews()
  27. tableView.mj_header?.beginRefreshing()
  28. LNEventDeliver.addObserver(self)
  29. }
  30. }
  31. extension LNOrderListViewController {
  32. private func loadOrderList() {
  33. guard !isLoading else { return }
  34. isLoading = true
  35. LNOrderManager.shared.getList(size: pageSize, next: nextTag) { [weak self] list, next in
  36. guard let self else { return }
  37. isLoading = false
  38. if let list, let next {
  39. if nextTag?.isEmpty == false {
  40. orders.append(contentsOf: list)
  41. } else {
  42. orders = list
  43. }
  44. nextTag = next
  45. tableView.reloadData()
  46. if orders.isEmpty {
  47. emptyView.showNoData(icon: .icNoDataOrderEmpty, tips: .init(key: "A00153"))
  48. } else {
  49. emptyView.hide()
  50. }
  51. } else {
  52. if orders.isEmpty {
  53. emptyView.showNetworkError()
  54. }
  55. }
  56. tableView.mj_header?.endRefreshing()
  57. if next?.isEmpty != false {
  58. tableView.mj_footer?.endRefreshingWithNoMoreData()
  59. } else {
  60. tableView.mj_footer?.endRefreshing()
  61. }
  62. }
  63. }
  64. }
  65. extension LNOrderListViewController: UITableViewDelegate, UITableViewDataSource {
  66. func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  67. orders.count
  68. }
  69. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  70. let cell = tableView.dequeueReusableCell(withIdentifier: LNOrderListItemCell.className, for: indexPath) as! LNOrderListItemCell
  71. let item = orders[indexPath.row]
  72. cell.update(item)
  73. return cell
  74. }
  75. }
  76. extension LNOrderListViewController: LNOrderManagerNotify {
  77. func onOrderInfoChanged(orderId: String) {
  78. tableView.reloadData()
  79. }
  80. }
  81. extension LNOrderListViewController {
  82. private func setupViews() {
  83. title = .init(key: "A00154")
  84. view.backgroundColor = .primary_1
  85. let header = MJRefreshNormalHeader { [weak self] in
  86. guard let self else { return }
  87. self.nextTag = nil
  88. self.loadOrderList()
  89. }
  90. header.lastUpdatedTimeLabel?.isHidden = true
  91. header.stateLabel?.isHidden = true
  92. tableView.mj_header = header
  93. let footer = MJRefreshAutoNormalFooter { [weak self] in
  94. guard let self else { return }
  95. if self.nextTag == nil { return }
  96. self.loadOrderList()
  97. }
  98. footer.setTitle("", for: .noMoreData)
  99. footer.setTitle(.init(key: "A00046"), for: .idle)
  100. tableView.mj_footer = footer
  101. tableView.backgroundColor = .clear
  102. tableView.delegate = self
  103. tableView.dataSource = self
  104. tableView.separatorStyle = .none
  105. tableView.register(LNOrderListItemCell.self, forCellReuseIdentifier: LNOrderListItemCell.className)
  106. view.addSubview(tableView)
  107. tableView.snp.makeConstraints { make in
  108. make.horizontalEdges.equalToSuperview()
  109. make.top.equalToSuperview().offset(6)
  110. make.bottom.equalToSuperview()
  111. }
  112. tableView.addSubview(emptyView)
  113. emptyView.snp.makeConstraints { make in
  114. make.centerX.equalToSuperview()
  115. make.centerY.equalToSuperview().multipliedBy(0.6)
  116. }
  117. }
  118. }
  119. #if DEBUG
  120. import SwiftUI
  121. struct LNOrderListViewControllerPreview: UIViewControllerRepresentable {
  122. func makeUIViewController(context: Context) -> some UIViewController {
  123. LNOrderListViewController()
  124. }
  125. func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) { }
  126. }
  127. #Preview(body: {
  128. LNOrderListViewControllerPreview()
  129. })
  130. #endif