MeTraineeSearchPageViewController.swift 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. //
  2. // MeTraineeSearchPageViewController.swift
  3. // JiaPeiManage
  4. //
  5. // Created by Ning.ge on 2023/6/15.
  6. //
  7. import UIKit
  8. import RxSwift
  9. import RxCocoa
  10. final class MeTraineeSearchPageViewController: BaseTableViewController {
  11. let cellIdentifier:String = "_MeTraineeSubjectCellSearch"
  12. // MARK: UI属性
  13. @IBOutlet weak var searchView: UIView!
  14. //搜索
  15. @IBOutlet weak var search_textfield: QMUITextField!
  16. //搜按钮
  17. @IBOutlet weak var search_button: UIButton!
  18. //title
  19. @IBOutlet weak var title_label: UILabel!
  20. let meTraineeSearchViewModel = MeTraineeSearchViewModel()
  21. let headerView = MeTraineeSubjectHeaderView.loadFromNib()
  22. var schoolId:Int = 0
  23. var appCoachId = ""
  24. var coachId = ""
  25. var type:Int = 0
  26. //重置约束
  27. override func setupConstraints() {
  28. self.tableView.snp.remakeConstraints { make in
  29. make.top.equalTo(self.searchView.snp.bottom)
  30. make.left.right.bottom.equalTo(self.view)
  31. }
  32. self.loadViewIfNeeded()
  33. }
  34. override func viewDidLoad() {
  35. super.viewDidLoad()
  36. meTraineeSearchViewModel.appCoachId = appCoachId
  37. meTraineeSearchViewModel.schoolId = schoolId
  38. meTraineeSearchViewModel.coachId = coachId
  39. setupUI()
  40. biandView()
  41. }
  42. // MARK: 私有方法
  43. func setupUI(){
  44. switch type {
  45. case 0://我的学员
  46. title_label.text = "我的学员"
  47. break
  48. case 1://在校学员
  49. title_label.text = "在校学员"
  50. break
  51. case 2://绑定学员
  52. title_label.text = "绑定学员"
  53. break
  54. default:
  55. title_label.text = "我的学员"
  56. }
  57. if isIphoneX {self.nav_topH_layout.constant = 64.f+24.f}
  58. self.view.backgroundColor = .db_theme
  59. // self.searchView.addSubview(search_bar)
  60. self.search_textfield.placeholderColor = .db_place
  61. tableView.dataSource = self
  62. tableView.delegate = self
  63. tableView.separatorStyle = .none //去除分割线
  64. tableView.register(UINib(nibName: "MeTraineeSubjectCell", bundle: nil), forCellReuseIdentifier: cellIdentifier)
  65. tableView.rowHeight = 288.f
  66. setupRefreshHeader(tableView) {[unowned self] in
  67. DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
  68. // 在延迟 1 秒后执行的代码
  69. self.stopRefresh()
  70. }
  71. NSLog("AAAAAAA")
  72. }
  73. // 设置上拉加载更多
  74. tableView.es.addInfiniteScrolling { [unowned self] in
  75. self.meTraineeSearchViewModel.getLoadMore(vc: self)
  76. }
  77. self.isEmptyDisplay = true
  78. self.hideLoadAnimation()
  79. }
  80. //绑定-rx
  81. func biandView(){
  82. // search_textfield.rx.text
  83. // .debounce(.milliseconds(300), scheduler: MainScheduler.instance) // 添加节流防抖,减少频繁查询
  84. // .distinctUntilChanged() // 确保只有文本内容发生变化时才触发查询
  85. // .subscribe(onNext: { [unowned self] query in
  86. // guard let query = query else { return }
  87. // // 在这里处理查询操作,比如发送网络请求或对本地数据进行过滤
  88. // self.meTraineeSearchViewModel.searchCoachInfoList(vc: self)
  89. // print("Query: \(query)")
  90. // // 每当输入文本发生变化,都会在这里触发查询
  91. // })
  92. // .disposed(by: disposeBag)
  93. search_textfield.rx.controlEvent(.editingDidEndOnExit)
  94. .subscribe(onNext: { [weak self] in
  95. self?.handleSearch()
  96. })
  97. .disposed(by: disposeBag)
  98. // tableView点击事件
  99. tableView.rx.itemSelected.throttle(.seconds(1), scheduler: MainScheduler.instance)
  100. .subscribe(onNext: { [weak self]indexPath in
  101. print("点击\(indexPath)行")
  102. let rowInfo:RowInfo = self!.meTraineeSearchViewModel.rows[indexPath.row]
  103. if rowInfo != nil && rowInfo.bmType == "2" {
  104. // let context: Int = rowInfo.id!
  105. NYSwRouter.push(NYSwPushType.trainee_info,context: rowInfo)
  106. }
  107. self?.tableView.deselectRow(at: indexPath, animated: false)
  108. }).disposed(by: disposeBag)
  109. }
  110. //处理搜索
  111. func handleSearch() {
  112. // // 在这里处理搜索事件
  113. // if let query = search_textfield.text, !query.isEmpty {
  114. // print("Search query: \(query)")
  115. //
  116. // }
  117. // 在这里执行搜索操作,比如发送网络请求或对本地数据进行过滤
  118. self.meTraineeSearchViewModel.searchCoachInfoList(vc: self)
  119. search_textfield.resignFirstResponder() // 隐藏键盘
  120. }
  121. }
  122. //数据源
  123. extension MeTraineeSearchPageViewController:UITableViewDataSource {
  124. func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
  125. if self.meTraineeSearchViewModel.traineeDataModel != nil {
  126. let total = String(format: "%d", self.meTraineeSearchViewModel.traineeDataModel?.total ?? 0)
  127. headerView.total_label.text = "总数:"+total
  128. }
  129. return headerView
  130. }
  131. func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
  132. return 55.f
  133. }
  134. func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  135. return self.meTraineeSearchViewModel.rows.count ?? 0
  136. }
  137. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  138. let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! MeTraineeSubjectCell
  139. cell.index_button.setTitle("\(indexPath.row+1)", for: .normal)
  140. cell.setRowInfo(rowInfo: self.meTraineeSearchViewModel.rows[indexPath.row])
  141. return cell
  142. }
  143. }
  144. //事件
  145. extension MeTraineeSearchPageViewController:UITableViewDelegate {
  146. }