Browse Source

电子教学日志 MVVM优化完成 up

openlockPPP 1 năm trước cách đây
mục cha
commit
0ef804219f

+ 4 - 131
JiaPeiManage/Sources/Modulars/学员/Controllers/EstuLogListViewController.swift

@@ -9,15 +9,7 @@ import UIKit
 import RxSwift
 import RxCocoa
 
-
 final class EstuLogListViewController: BaseTableViewController {
-    
-    let cellIdentifier:String = "_EstuLogListCell"
-    let dtcellIdentifier:String = "_EstuLogListDetailsCell"
-    // MARK: 服务属性
-    private let elogCoachService: ElogCoachServiceType = ElogCoachService(networking: ElogCoachNetworking())
-    // MARK: 私有属性
-    
 
     // MARK: UI let
     let statusBar = UIView().then {
@@ -36,14 +28,10 @@ final class EstuLogListViewController: BaseTableViewController {
     
     let header01_view = EstuLog01HeaderView.loadFromNib()
 
-    var selectPath = -1;
+    var estuLogListViewModel:EstuLogListViewModel?
     //学员ID
     var stuId:Int = 0
-    var eteachLogDataModel:ETeachLogDataModel?
-    var rows : [ETeachLogInfo] = []
-    var page:Int = 1
-    var pageSize:Int = 10
-    
+
     override func setupConstraints() {
         
         statusBar.snp.makeConstraints { (make) in
@@ -78,13 +66,13 @@ final class EstuLogListViewController: BaseTableViewController {
     
     override func viewDidLoad() {
         super.viewDidLoad()
+        self.estuLogListViewModel = EstuLogListViewModel(vc: self,stuId: stuId)
         configureMagicController()
         setupUI()
-        biandView()
+        self.estuLogListViewModel?.biandView()
     }
     
     // MARK: 私有方法
-    
     func setupUI(){
         self.navBar.title_label.text = "电子教学日志"
         self.navBar.back_button.addTarget(self, action: #selector(actionBackdo), for: .touchUpInside)
@@ -94,122 +82,7 @@ final class EstuLogListViewController: BaseTableViewController {
      
         self.view.addSubview(navBar)
         self.view.addSubview(statusBar)
-        
-    }
-    
-    func biandView(){
-        tableView.delegate = self
-        tableView.dataSource = self
-        tableView.separatorStyle = .none //去除分割线
-        tableView.register(UINib(nibName: "EstuLogListCell", bundle: nil), forCellReuseIdentifier: cellIdentifier)
-        tableView.register(UINib(nibName: "EstuLogListDetailsCell", bundle: nil), forCellReuseIdentifier: dtcellIdentifier)
-        setupRefreshHeader(tableView) {[unowned self] in
-            self.getStudentTeachLogList()
-        }
-        self.isEmptyDisplay = false
-        self.hideLoadAnimation()
-        // 设置上拉加载更多
-        tableView.es.addInfiniteScrolling { [weak self] in
-            //self?.getStudentTeachLogList()
-        }
-        // tableView点击事件
-        tableView.rx.itemSelected.throttle(.seconds(1), scheduler: MainScheduler.instance)
-            .subscribe(onNext: { [weak self]indexPath in
-            print("点击\(indexPath)行")
-                self?.selectPath = indexPath.row
-                self?.tableView.reloadData()
-//            let rowInfo:RowInfo = self!.meTraineeSearchViewModel.rows[indexPath.row]
-//            if rowInfo != nil && rowInfo.bmType == "2"  {
-//                let context: Int = rowInfo.id!
-//                NYSwRouter.push(NYSwPushType.trainee_info,context: context)
-//            }
-//            self?.tableView.deselectRow(at: indexPath, animated: false)
-        }).disposed(by: disposeBag)
-    }
-    
-    func getStudentTeachLogList (){
-        self.elogCoachService.elogTmsStudentTeachLogByIdRequest(city: LocalManager.userInfo.city!, id: stuId, pageNum: page, pageSize: pageSize).subscribe(onSuccess: {[unowned self] eteachLogDataModel in
-                self.rows.removeAll()
-                self.eteachLogDataModel = eteachLogDataModel
-                self.rows += eteachLogDataModel.rows!
-                print("eteachLogDataModelRequest成功")
-                self.isEmptyDisplay = true
-                self.hideLoadAnimation()
-                self.stopRefresh()
-                self.tableView.reloadData()
-            }, onError: { error in
-                self.stopRefresh()
-                NYTips.hide()
-            })
-        .disposed(by: disposeBag)
-    }
-
-}
-
-//数据源
-extension EstuLogListViewController:UITableViewDataSource {
-    
-    
-    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
 
-        return self.rows.count
-    }
-    
-    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
-        let header_view = UIView().then {
-            $0.backgroundColor = .db_theme
-        }
-        header_view.addSubview(estuLogHeaderView)
-        estuLogHeaderView.snp.makeConstraints { make in
-            make.left.right.top.equalTo(header_view)
-            make.height.equalTo(59.f)
-        }
-        header_view.addSubview(mtheader01_view)
-        mtheader01_view.snp.makeConstraints { make in
-            make.top.equalTo(estuLogHeaderView.bottom)
-            make.left.right.equalTo(header_view)
-            make.height.equalTo(52.f)
-        }
-        header_view.addSubview(header01_view)
-        header01_view.snp.makeConstraints { make in
-            make.top.equalTo(mtheader01_view.bottom)
-            make.left.right.equalTo(header_view)
-            make.height.equalTo(44.f)
-        }
-        header_view.layoutIfNeeded()
-        return header_view
-    }
-    
-    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
-        return 155.f
     }
-    
-    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
-        var cell:UITableViewCell;
-        var info = rows[indexPath.row] as ETeachLogInfo
-        info.stuid = stuId
-        if self.selectPath == indexPath.row {
-            let dcell = tableView.dequeueReusableCell(withIdentifier: dtcellIdentifier, for: indexPath) as! EstuLogListDetailsCell
-            dcell.setRowInfo(rowInfo: info)
-            cell = dcell
-        }else {
-            let ecell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! EstuLogListCell
-            ecell.setRowInfo(rowInfo: info)
-            cell = ecell
-        }
-        return cell
-    }
-    
-    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
-        if(selectPath==indexPath.row){
-            return 465.f;
-        }
-        return 80.f;
-    }
-}
 
-//事件
-extension EstuLogListViewController:UITableViewDelegate {
-
-    
 }

+ 166 - 3
JiaPeiManage/Sources/Modulars/学员/ViewModel/EstuLogListViewModel.swift

@@ -5,13 +5,176 @@
 //  Created by Ning.ge on 2023/8/31.
 //
 
+import RxSwift
+
 class EstuLogListViewModel: NSObject {
     
+    let cellIdentifier:String = "_EstuLogListCell"
+    let dtcellIdentifier:String = "_EstuLogListDetailsCell"
     // MARK: 服务属性
+    private let elogCoachService: ElogCoachServiceType = ElogCoachService(networking: ElogCoachNetworking())
+    // MARK: 私有属性
+    var selectPath = -1;
+    //学员ID
+    var stuId:Int = 0
+    var eteachLogDataModel:ETeachLogDataModel?
+    var rows : [ETeachLogInfo] = []
+    var page:Int = 1
+    var pageSize:Int = 10
+
+    @objc weak var vc:EstuLogListViewController? = nil
+    init(vc:EstuLogListViewController,stuId:Int) {
+        super.init()
+        self.vc = vc
+        self.stuId = stuId
+    }
     
+    func biandView(){
+        vc!.tableView.delegate = self
+        vc!.tableView.dataSource = self
+        vc!.tableView.separatorStyle = .none //去除分割线
+        vc!.tableView.register(UINib(nibName: "EstuLogListCell", bundle: nil), forCellReuseIdentifier: cellIdentifier)
+        vc!.tableView.register(UINib(nibName: "EstuLogListDetailsCell", bundle: nil), forCellReuseIdentifier: dtcellIdentifier)
+        vc!.setupRefreshHeader(vc!.tableView) {[unowned self] in
+            self.getStudentTeachLogList(isLoading: false)
+        }
+        vc!.isEmptyDisplay = false
+        vc!.hideLoadAnimation()
+        // 设置上拉加载更多
+        vc!.tableView.es.addInfiniteScrolling { [weak self] in
+            self?.getLoadMore()
+        }
+        // tableView点击事件
+        vc!.tableView.rx.itemSelected.throttle(.seconds(1), scheduler: MainScheduler.instance)
+            .subscribe(onNext: { [weak self]indexPath in
+                print("点击\(indexPath)行")
+                if (self?.selectPath == indexPath.row){
+                    self?.selectPath = -1
+                }else{
+                    self?.selectPath = indexPath.row
+                }
+                self!.vc!.tableView.reloadData()
+//            let rowInfo:RowInfo = self!.meTraineeSearchViewModel.rows[indexPath.row]
+//            if rowInfo != nil && rowInfo.bmType == "2"  {
+//                let context: Int = rowInfo.id!
+//                NYSwRouter.push(NYSwPushType.trainee_info,context: context)
+//            }
+//            self?.tableView.deselectRow(at: indexPath, animated: false)
+            }).disposed(by: vc!.disposeBag)
+        self.getStudentTeachLogList(isLoading: true)
+    }
     
-    override init() {
-        super.init()
-        //        searchCoachInfoList()
+    func getStudentTeachLogList(isLoading:Bool){
+        if isLoading {NYTips.show()}
+        page = 1
+        self.elogCoachService.elogTmsStudentTeachLogByIdRequest(city: LocalManager.userInfo.city!, id: stuId, pageNum: page, pageSize: pageSize).subscribe(onSuccess: {[unowned self] eteachLogDataModel in
+                self.rows.removeAll()
+                self.eteachLogDataModel = eteachLogDataModel
+                self.rows += eteachLogDataModel.rows!
+                print("eteachLogDataModelRequest成功")
+                self.vc!.isEmptyDisplay = true
+                self.vc!.hideLoadAnimation()
+                self.vc!.stopRefresh()
+                self.vc!.tableView.reloadData()
+                NYTips.hide()
+            }, onError: { error in
+                self.vc!.stopRefresh()
+                NYTips.hide()
+            })
+        .disposed(by: self.vc!.disposeBag)
+    }
+    
+    //更多
+    func getLoadMore(){
+        //计算-页数
+        if (eteachLogDataModel != nil){
+            let total = pageSize*self.page
+            if(total<(eteachLogDataModel?.total)!){
+                self.page+=1
+            }else{
+                self.vc!.stopLoad()
+                return //已经显示完
+            }
+        }
+        //请求网络-加载
+        self.elogCoachService.elogTmsStudentTeachLogByIdRequest(city: LocalManager.userInfo.city!, id: stuId, pageNum: page, pageSize: pageSize).subscribe(onSuccess: {[unowned self] eteachLogDataModel in
+                self.eteachLogDataModel = eteachLogDataModel
+                self.rows += eteachLogDataModel.rows!
+                print("resultInfoModel成功")
+                self.vc!.tableView.reloadData()
+                self.vc!.stopLoad()
+            }, onError: { error in
+                self.vc!.stopLoad()
+            })
+        .disposed(by: self.vc!.disposeBag)
+
     }
 }
+
+
+//数据源
+extension EstuLogListViewModel:UITableViewDataSource {
+    
+    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+
+        return self.rows.count
+    }
+    
+    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
+        let header_view = UIView().then {
+            $0.backgroundColor = .db_theme
+        }
+        header_view.addSubview(self.vc!.estuLogHeaderView)
+        self.vc!.estuLogHeaderView.snp.makeConstraints { make in
+            make.left.right.top.equalTo(header_view)
+            make.height.equalTo(59.f)
+        }
+        header_view.addSubview(self.vc!.mtheader01_view)
+        self.vc!.mtheader01_view.snp.makeConstraints { make in
+            make.top.equalTo(self.vc!.estuLogHeaderView.bottom)
+            make.left.right.equalTo(header_view)
+            make.height.equalTo(52.f)
+        }
+        header_view.addSubview(self.vc!.header01_view)
+        self.vc!.header01_view.snp.makeConstraints { make in
+            make.top.equalTo(self.vc!.mtheader01_view.bottom)
+            make.left.right.equalTo(header_view)
+            make.height.equalTo(44.f)
+        }
+        header_view.layoutIfNeeded()
+        return header_view
+    }
+    
+    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
+        return 155.f
+    }
+    
+    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+        var cell:UITableViewCell;
+        var info = rows[indexPath.row] as ETeachLogInfo
+        info.stuid = stuId
+        if self.selectPath == indexPath.row {
+            let dcell = tableView.dequeueReusableCell(withIdentifier: dtcellIdentifier, for: indexPath) as! EstuLogListDetailsCell
+            dcell.setRowInfo(rowInfo: info)
+            cell = dcell
+        }else {
+            let ecell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! EstuLogListCell
+            ecell.setRowInfo(rowInfo: info)
+            cell = ecell
+        }
+        return cell
+    }
+    
+    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
+        if(selectPath==indexPath.row){
+            return 465.f;
+        }
+        return 80.f;
+    }
+}
+
+//事件
+extension EstuLogListViewModel:UITableViewDelegate {
+
+    
+}