浏览代码

签到记录-完成 up

openlockPPP 1 年之前
父节点
当前提交
1259eee514

+ 24 - 0
JiaPeiManage.xcodeproj/project.pbxproj

@@ -24,6 +24,12 @@
 		9076C5DC2A386B2F00E5E33F /* MineViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9076C5DB2A386B2F00E5E33F /* MineViewController.xib */; };
 		9076C5DF2A387CBC00E5E33F /* MeTraineeListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9076C5DE2A387CBC00E5E33F /* MeTraineeListViewController.swift */; };
 		908FEE992A42A1D300BEB81C /* StuResultDataModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 908FEE982A42A1D300BEB81C /* StuResultDataModel.swift */; };
+		908FEE9B2A42CA1D00BEB81C /* MeTraineeDetails04HeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 908FEE9A2A42CA1D00BEB81C /* MeTraineeDetails04HeaderView.swift */; };
+		908FEE9D2A42CA3F00BEB81C /* MeTraineeDetails04HeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 908FEE9C2A42CA3F00BEB81C /* MeTraineeDetails04HeaderView.xib */; };
+		908FEE9F2A42CBDB00BEB81C /* MeTraineeDetails04Cell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 908FEE9E2A42CBDB00BEB81C /* MeTraineeDetails04Cell.swift */; };
+		908FEEA12A42CC1E00BEB81C /* MeTraineeDetails04Cell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 908FEEA02A42CC1E00BEB81C /* MeTraineeDetails04Cell.xib */; };
+		908FEEA32A42D35000BEB81C /* BaseGroupTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 908FEEA22A42D35000BEB81C /* BaseGroupTableViewController.swift */; };
+		908FEEA52A42D62A00BEB81C /* StuTmsSignDataModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 908FEEA42A42D62A00BEB81C /* StuTmsSignDataModel.swift */; };
 		909DA5C12A3999B30034501F /* NYTips.swift in Sources */ = {isa = PBXBuildFile; fileRef = 909DA5C02A3999B30034501F /* NYTips.swift */; };
 		909DA5C32A3A01220034501F /* CoachcityModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 909DA5C22A3A01220034501F /* CoachcityModel.swift */; };
 		909DA5C52A3AA1E60034501F /* MeTraineeNavBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 909DA5C42A3AA1E60034501F /* MeTraineeNavBar.swift */; };
@@ -158,6 +164,12 @@
 		9076C5DB2A386B2F00E5E33F /* MineViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MineViewController.xib; sourceTree = "<group>"; };
 		9076C5DE2A387CBC00E5E33F /* MeTraineeListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeTraineeListViewController.swift; sourceTree = "<group>"; };
 		908FEE982A42A1D300BEB81C /* StuResultDataModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StuResultDataModel.swift; sourceTree = "<group>"; };
+		908FEE9A2A42CA1D00BEB81C /* MeTraineeDetails04HeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeTraineeDetails04HeaderView.swift; sourceTree = "<group>"; };
+		908FEE9C2A42CA3F00BEB81C /* MeTraineeDetails04HeaderView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MeTraineeDetails04HeaderView.xib; sourceTree = "<group>"; };
+		908FEE9E2A42CBDB00BEB81C /* MeTraineeDetails04Cell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeTraineeDetails04Cell.swift; sourceTree = "<group>"; };
+		908FEEA02A42CC1E00BEB81C /* MeTraineeDetails04Cell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MeTraineeDetails04Cell.xib; sourceTree = "<group>"; };
+		908FEEA22A42D35000BEB81C /* BaseGroupTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseGroupTableViewController.swift; sourceTree = "<group>"; };
+		908FEEA42A42D62A00BEB81C /* StuTmsSignDataModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StuTmsSignDataModel.swift; sourceTree = "<group>"; };
 		909DA5C02A3999B30034501F /* NYTips.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NYTips.swift; sourceTree = "<group>"; };
 		909DA5C22A3A01220034501F /* CoachcityModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoachcityModel.swift; sourceTree = "<group>"; };
 		909DA5C42A3AA1E60034501F /* MeTraineeNavBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeTraineeNavBar.swift; sourceTree = "<group>"; };
@@ -360,6 +372,10 @@
 				903628CF2A41AF3100F0AA6C /* MeTraineeDetails02HeaderView.xib */,
 				903628D12A41AFA400F0AA6C /* MeTraineeDetails02Cell.swift */,
 				903628D32A41AFD700F0AA6C /* MeTraineeDetails02Cell.xib */,
+				908FEE9A2A42CA1D00BEB81C /* MeTraineeDetails04HeaderView.swift */,
+				908FEE9C2A42CA3F00BEB81C /* MeTraineeDetails04HeaderView.xib */,
+				908FEE9E2A42CBDB00BEB81C /* MeTraineeDetails04Cell.swift */,
+				908FEEA02A42CC1E00BEB81C /* MeTraineeDetails04Cell.xib */,
 			);
 			path = Views;
 			sourceTree = "<group>";
@@ -454,6 +470,7 @@
 				90CE522F2A36E4600033BD06 /* BaseCollectionViewController.swift */,
 				90CE52302A36E4600033BD06 /* BaseViewController.swift */,
 				90CE52312A36E4600033BD06 /* BaseTableViewController.swift */,
+				908FEEA22A42D35000BEB81C /* BaseGroupTableViewController.swift */,
 			);
 			path = Base;
 			sourceTree = "<group>";
@@ -478,6 +495,7 @@
 				90BC4BD82A3B0F98006FD683 /* TraineeDataModel.swift */,
 				903628BA2A40431800F0AA6C /* TraineeInfoModel.swift */,
 				908FEE982A42A1D300BEB81C /* StuResultDataModel.swift */,
+				908FEEA42A42D62A00BEB81C /* StuTmsSignDataModel.swift */,
 			);
 			path = Models;
 			sourceTree = "<group>";
@@ -870,6 +888,7 @@
 				903628D02A41AF3100F0AA6C /* MeTraineeDetails02HeaderView.xib in Resources */,
 				90CE52842A36E5460033BD06 /* SearchBarView.xib in Resources */,
 				90CE52F52A36EDCF0033BD06 /* NYArticleNavBar.xib in Resources */,
+				908FEEA12A42CC1E00BEB81C /* MeTraineeDetails04Cell.xib in Resources */,
 				90CE52252A36C0720033BD06 /* LaunchScreen.storyboard in Resources */,
 				90BC4BE02A3C46C4006FD683 /* MeTraineeDetailsPageViewController.xib in Resources */,
 				90CE528A2A36E5460033BD06 /* PopOverViewCell.xib in Resources */,
@@ -880,6 +899,7 @@
 				90CE52202A36C0710033BD06 /* Main.storyboard in Resources */,
 				90CE52EB2A36E8680033BD06 /* LoginViewController.xib in Resources */,
 				909DA5D52A3AE0160034501F /* MeTraineeSubjectCell.xib in Resources */,
+				908FEE9D2A42CA3F00BEB81C /* MeTraineeDetails04HeaderView.xib in Resources */,
 				90CE52852A36E5460033BD06 /* EmptyView.xib in Resources */,
 				90CE53002A36F7110033BD06 /* HomeViewController.xib in Resources */,
 				90BC4BE72A3DDF44006FD683 /* MeTraineeSubjectHeaderView.xib in Resources */,
@@ -1006,6 +1026,7 @@
 				90CE521D2A36C0710033BD06 /* ViewController.swift in Sources */,
 				909DA5C92A3ABEFF0034501F /* MeTraineeSubjectPageViewController.swift in Sources */,
 				90CE53042A3834360033BD06 /* CoachService.swift in Sources */,
+				908FEEA52A42D62A00BEB81C /* StuTmsSignDataModel.swift in Sources */,
 				90BC4BDE2A3C4691006FD683 /* MeTraineeDetailsPageViewController.swift in Sources */,
 				90CE52CB2A36E5EC0033BD06 /* UILabel+Rx.swift in Sources */,
 				90CE52E12A36E73A0033BD06 /* SplashModel.swift in Sources */,
@@ -1048,6 +1069,7 @@
 				90CE52BB2A36E5B70033BD06 /* LoadingPlugin.swift in Sources */,
 				90CE52F42A36EDCF0033BD06 /* NYArticleNavBar.swift in Sources */,
 				90CE52A62A36E59A0033BD06 /* String+BoundingRect.swift in Sources */,
+				908FEEA32A42D35000BEB81C /* BaseGroupTableViewController.swift in Sources */,
 				90CE527E2A36E5460033BD06 /* NetAnimationLoadable.swift in Sources */,
 				90CE52D62A36E6000033BD06 /* NYSwRouter.swift in Sources */,
 				90CE52AB2A36E59A0033BD06 /* UIViewController+NetAnimation.swift in Sources */,
@@ -1060,11 +1082,13 @@
 				90CE52BC2A36E5B70033BD06 /* Networking.swift in Sources */,
 				90CE52E22A36E73A0033BD06 /* SplashViewController.swift in Sources */,
 				90CE52802A36E5460033BD06 /* NYSwToaster.swift in Sources */,
+				908FEE9F2A42CBDB00BEB81C /* MeTraineeDetails04Cell.swift in Sources */,
 				90CE52DC2A36E6250033BD06 /* NYAppCongfigure.swift in Sources */,
 				90CE52322A36E4600033BD06 /* BaseCollectionViewController.swift in Sources */,
 				903628CE2A41AF1500F0AA6C /* MeTraineeDetails02HeaderView.swift in Sources */,
 				90CE52872A36E5460033BD06 /* NetAnimationView.swift in Sources */,
 				903628BE2A41766B00F0AA6C /* MeTraineeDetails01Controller.swift in Sources */,
+				908FEE9B2A42CA1D00BEB81C /* MeTraineeDetails04HeaderView.swift in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};

+ 136 - 0
JiaPeiManage/Sources/Main/Base/BaseGroupTableViewController.swift

@@ -0,0 +1,136 @@
+//
+//  BaseGroupTableViewController.swift
+//  JiaPeiManage
+//
+//  Created by Ning.ge on 2023/6/21.
+//
+
+import UIKit
+
+import RxSwift
+import EmptyKit
+
+class BaseGroupTableViewController: BaseViewController,Refreshable {
+    
+    var isEmptyDisplay: Bool = true
+    
+    let tableView: UITableView = UITableView(frame: CGRectZero, style: .grouped).then{
+        $0.backgroundColor = .db_theme
+        $0.showsVerticalScrollIndicator = false
+        $0.tableFooterView = UIView()
+    }
+    
+    override func setupConstraints() {
+        tableView.snp.makeConstraints { (make) in
+            make.edges.equalTo(0)
+        }
+    }
+    
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        
+        tableView.ept.dataSource = self
+        tableView.ept.delegate = self
+        
+        view.addSubview(tableView)
+        
+        showLoadAnimation()
+        
+        registerNetErrorNotification()
+        
+    }
+    
+    //MARK: Public Method
+    func startRefresh() {
+        
+        self.tableView.setContentOffset(.zero, animated: true)
+        DispatchQueue.delay(time: 0.3, action: {
+            self.tableView.es.startPullToRefresh()
+        })
+    }
+    
+    func registerNetErrorNotification() {
+        
+        NotificationCenter.default.rx.notification(custom: .netError)
+            .subscribe(onNext: {[unowned self] (_) in
+                
+                self.stopRefresh()
+                
+                self.showNetErrorView()
+                
+            })
+            .disposed(by: disposeBag)
+    }
+    
+    
+    func showNetErrorView() {
+        
+        if totalItems() > 0 { return }
+        
+        self.showAnimationView(self.tableView, animationType: .failure)
+    }
+    
+    func showLoadAnimation() {
+        self.showAnimationView(self.tableView)
+    }
+    
+    func hideLoadAnimation() {
+        self.hideAnimationView(self.tableView)
+    }
+    
+    func stopRefresh() {
+        
+        guard let isRefreshing = tableView.header?.isRefreshing else { return }
+        
+        if isRefreshing {
+            tableView.es.stopPullToRefresh()
+        }
+    }
+    
+    //MARK: Private Method
+    private func stopLoad() {
+        
+        guard let isLoading = tableView.footer?.isRefreshing else { return }
+        
+        if isLoading {
+            tableView.es.stopLoadingMore()
+        }
+    }
+}
+
+//MARK: Notification
+extension BaseGroupTableViewController {
+    
+    func totalItems() -> Int {
+        
+        var totalItems: Int = 0
+        
+        let sectionCount = self.tableView.numberOfSections
+        
+        for i in 0 ..< sectionCount {
+            
+            let items = self.tableView.numberOfRows(inSection: i)
+            
+            totalItems += items
+        }
+        
+        return totalItems
+    }
+}
+
+extension BaseGroupTableViewController:EmptyDelegate,EmptyDataSource {
+    
+    func customViewForEmpty(in view: UIView) -> UIView? {
+        
+        return EmptyView.loadFromNib()
+    }
+    
+    func emptyShouldAllowScroll(in view: UIView) -> Bool {
+        return true
+    }
+    
+    func emptyShouldDisplay(in view: UIView) -> Bool {
+        return isEmptyDisplay
+    }
+}

+ 42 - 0
JiaPeiManage/Sources/Models/StuTmsSignDataModel.swift

@@ -0,0 +1,42 @@
+//
+//  StuTmsSignDataModel.swift
+//  JiaPeiManage
+//
+//  Created by Ning.ge on 2023/6/21.
+//
+
+import ObjectMapper
+
+
+struct StuTmsSignInfoModel : ImmutableMappable{
+    
+    var loginFlag : String!
+    var loginTime : String!
+    var sim : String!
+    var trainCarLicnum : String!
+
+    init(map: Map) throws {
+        loginFlag = try map.value("loginFlag") ?? ""
+        loginTime = try map.value("loginTime") ?? ""
+        sim = try map.value("sim") ?? ""
+        trainCarLicnum = try map.value("trainCarLicnum") ?? ""
+    }
+    
+}
+
+
+struct StuTmsSignDataModel : ImmutableMappable{
+    
+    var code : Int!
+    var msg : String!
+    var rows : [StuTmsSignInfoModel]!
+    var total : Int!
+    
+    init(map: Map) throws {
+        code = try map.value("code")
+        msg = try map.value("msg") ?? ""
+        rows = try map.value("rows")
+        total = try map.value("total") ?? 0
+    }
+    
+}

+ 73 - 36
JiaPeiManage/Sources/Modulars/学员/Controllers/MeTraineeDetails/MeTraineeDetails03Controller.swift

@@ -11,25 +11,28 @@ import RxSwift
 import RxCocoa
 
 
-final class MeTraineeDetails03Controller: BaseTableViewController {
+final class MeTraineeDetails03Controller: BaseGroupTableViewController {
     
-    let cellIdentifier:String = "_MeTraineeSubjectCell"
+    let cellIdentifier:String = "_MeTraineeDetails04Cell"
     // MARK: 服务属性
     private let cocahService: CoachServiceType = CoachService(networking: CoachNetworking())
    
     // MARK: UI属性
-    
+    let header01_view = MeTraineeDetails01HeaderView.loadFromNib().then {
+        $0.title_label.text = "签到签退表"
+    }
+    let header04_view = MeTraineeDetails04HeaderView.loadFromNib()
     
     // MARK: 数据
-    var traineeDataModel:TraineeDataModel?
+    var stuTmsSignDataModel:StuTmsSignDataModel?
     
     var page:Int = 1
     var pageSize:Int = 10
-    var state = "1"
+    var stuOutId:Int = 0
     
-    init(state:String) {
+    init(stuOutId:Int) {
         super.init()
-        self.state = state
+        self.stuOutId = stuOutId
     }
     
     required convenience init?(coder aDecoder: NSCoder) {
@@ -38,23 +41,28 @@ final class MeTraineeDetails03Controller: BaseTableViewController {
     
     override func viewDidLoad() {
         super.viewDidLoad()
-        
-        getCoachInfoList()
         //绑定
         biandView()
+        if(self.stuOutId>0){getStuResultList()}
     }
     
     // MARK: 私有方法
+//    func setStuOutId(stuId:Int){
+//        stuOutId = stuId
+//        getStuResultList()
+//    }
     
-    func getCoachInfoList()
-    {
-        self.cocahService.coachInfoListRequest(city: LocalManager.userInfo.city!, appCoachId: "", coachId: "\(LocalManager.userInfo.id)", field: "", pageNum: page, pageSize: pageSize, schoolId: 0, state: state)
-            .subscribe(onSuccess: { traineeDataModel in
-                self.traineeDataModel = traineeDataModel
-                print("coachInfoListRequest成功")
+    func getStuResultList(){
+        
+        self.cocahService.stuTmsSignListByStuIdRequest(pageNum: page, pageSize: pageSize, stuOutId: stuOutId, city: LocalManager.userInfo.city!)
+            .subscribe(onSuccess: {[unowned self] stuTmsSignDataModel in
+                self.stuTmsSignDataModel = stuTmsSignDataModel
+                print("resultInfoModel成功")
                 self.hideLoadAnimation()
                 self.tableView.reloadData()
+                self.stopRefresh()
             }, onError: { error in
+                self.stopRefresh()
             })
             .disposed(by: disposeBag)
     }
@@ -63,46 +71,75 @@ final class MeTraineeDetails03Controller: BaseTableViewController {
         tableView.delegate = self
         tableView.dataSource = self
         tableView.separatorStyle = .none //去除分割线
-        tableView.register(UINib(nibName: "MeTraineeSubjectCell", bundle: nil), forCellReuseIdentifier: cellIdentifier)
-        tableView.rowHeight = 288.f
+        tableView.register(UINib(nibName: "MeTraineeDetails04Cell", bundle: nil), forCellReuseIdentifier: cellIdentifier)
+        tableView.rowHeight = 62.f
         setupRefreshHeader(tableView) {[unowned self] in
-            DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
-                // 在延迟 1 秒后执行的代码
-                self.stopRefresh()
-            }
-            NSLog("AAAAAAA")
+//            DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
+//                // 在延迟 1 秒后执行的代码
+//
+//            }
+            self.getStuResultList()
         }
         self.isEmptyDisplay = false
+        self.hideLoadAnimation()
         
     }
-    
 }
 
 //数据源
 extension MeTraineeDetails03Controller:UITableViewDataSource {
     
+    
     func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
-        return self.traineeDataModel?.rows?.count ?? 0
+        if (stuTmsSignDataModel != nil && (stuTmsSignDataModel?.rows.count)!>0){
+            return (stuTmsSignDataModel?.rows.count)!
+        }
+        return 0
+    }
+    
+    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
+        let header_view = UIView().then {
+            $0.backgroundColor = .db_theme
+        }
+        header_view.addSubview(header01_view)
+        header01_view.snp.makeConstraints { make in
+            make.left.right.top.equalTo(header_view)
+            make.height.equalTo(50.f)
+        }
+        header_view.addSubview(header04_view)
+        header04_view.snp.makeConstraints { make in
+            make.top.equalTo(header01_view.bottom)
+            make.left.right.equalTo(header_view)
+            make.height.equalTo(44.f)
+        }
+        return header_view
+    }
+    
+    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
+        return 50.f+44.f
     }
     
     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
-        let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! MeTraineeSubjectCell
-        cell.index_button.setTitle("\(indexPath.row+1)", for: .normal)
-        cell.setRowInfo(rowInfo: (self.traineeDataModel?.rows?[indexPath.row])!)
+        let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! MeTraineeDetails04Cell
+        cell.contentView.backgroundColor = ((indexPath.row%2) != 0) ? UIColor("#113357") : UIColor("#0B2B4D")
+        cell.backgroundColor = ((indexPath.row%2) != 0) ? UIColor("#113357") : UIColor("#0B2B4D")
+        let info = (stuTmsSignDataModel?.rows[indexPath.row])! as StuTmsSignInfoModel
+        cell.trainCarLicnum_label.text = info.trainCarLicnum
+        cell.sim_label.text = info.sim
+        cell.logintime_label.text = info.loginTime
+        if info.loginFlag == "1" {
+            cell.state_label.text = "签到"
+            cell.state_label.textColor = UIColor("#35BF5E")
+        }else{
+            cell.state_label.text = "签退"
+            cell.state_label.textColor = UIColor("#FF5454")
+        }
         return cell
     }
 }
 
 //事件
 extension MeTraineeDetails03Controller:UITableViewDelegate {
-    
-    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
-        tableView.deselectRow(at: indexPath, animated: false)
-        let rowInfo = self.traineeDataModel?.rows![indexPath.row]
-        if rowInfo != nil {
-            let context: Int = rowInfo?.id ?? 0
-            NYSwRouter.push(NYSwPushType.trainee_info,context: context)
-        }
-    }
+
     
 }

+ 39 - 22
JiaPeiManage/Sources/Modulars/学员/Controllers/MeTraineeDetails/MeTraineeDetails04Controller.swift

@@ -12,39 +12,50 @@ import RxCocoa
 
 final class MeTraineeDetails04Controller: BaseTableViewController {
     
-    let cellIdentifier:String = "_MeTraineeDetails02Cell"
+    let cellIdentifier:String = "_MeTraineeDetails04Cell"
     // MARK: 服务属性
     private let cocahService: CoachServiceType = CoachService(networking: CoachNetworking())
    
     // MARK: UI属性
     let header01_view = MeTraineeDetails01HeaderView.loadFromNib().then {
-        $0.title_label.text = "成绩表"
+        $0.title_label.text = "签到签退表"
     }
-    let header02_view = MeTraineeDetails02HeaderView.loadFromNib()
+    let header04_view = MeTraineeDetails04HeaderView.loadFromNib()
     
     // MARK: 数据
-    var stuResultDataModel:StuResultDataModel?
+    var stuTmsSignDataModel:StuTmsSignDataModel?
     
     var page:Int = 1
     var pageSize:Int = 10
     var stuOutId:Int = 0
     
+    init(stuOutId:Int) {
+        super.init()
+        self.stuOutId = stuOutId
+    }
+    
+    required convenience init?(coder aDecoder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+    
     override func viewDidLoad() {
         super.viewDidLoad()
         //绑定
         biandView()
+        if(self.stuOutId>0){getStuResultList()}
     }
     
     // MARK: 私有方法
-    func setStuOutId(stuId:Int){
-        stuOutId = stuId
-        getStuResultList()
-    }
+//    func setStuOutId(stuId:Int){
+//        stuOutId = stuId
+//        getStuResultList()
+//    }
     
     func getStuResultList(){
-        self.cocahService.stuScoreByOutIdRequest(pageNum: page, pageSize: pageSize, stuOutId: stuOutId)
-            .subscribe(onSuccess: {[unowned self] stuResultDataModel in
-                self.stuResultDataModel = stuResultDataModel
+        
+        self.cocahService.stuTmsSignListByStuIdRequest(pageNum: page, pageSize: pageSize, stuOutId: stuOutId, city: LocalManager.userInfo.city!)
+            .subscribe(onSuccess: {[unowned self] stuTmsSignDataModel in
+                self.stuTmsSignDataModel = stuTmsSignDataModel
                 print("resultInfoModel成功")
                 self.hideLoadAnimation()
                 self.tableView.reloadData()
@@ -59,7 +70,7 @@ final class MeTraineeDetails04Controller: BaseTableViewController {
         tableView.delegate = self
         tableView.dataSource = self
         tableView.separatorStyle = .none //去除分割线
-        tableView.register(UINib(nibName: "MeTraineeDetails02Cell", bundle: nil), forCellReuseIdentifier: cellIdentifier)
+        tableView.register(UINib(nibName: "MeTraineeDetails04Cell", bundle: nil), forCellReuseIdentifier: cellIdentifier)
         tableView.rowHeight = 62.f
         setupRefreshHeader(tableView) {[unowned self] in
 //            DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
@@ -79,8 +90,8 @@ extension MeTraineeDetails04Controller:UITableViewDataSource {
     
     
     func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
-        if (stuResultDataModel != nil){
-            return (stuResultDataModel?.rows.count)!
+        if (stuTmsSignDataModel != nil && (stuTmsSignDataModel?.rows.count)!>0){
+            return (stuTmsSignDataModel?.rows.count)!
         }
         return 0
     }
@@ -94,8 +105,8 @@ extension MeTraineeDetails04Controller:UITableViewDataSource {
             make.left.right.top.equalTo(header_view)
             make.height.equalTo(50.f)
         }
-        header_view.addSubview(header02_view)
-        header02_view.snp.makeConstraints { make in
+        header_view.addSubview(header04_view)
+        header04_view.snp.makeConstraints { make in
             make.top.equalTo(header01_view.bottom)
             make.left.right.equalTo(header_view)
             make.height.equalTo(44.f)
@@ -108,14 +119,20 @@ extension MeTraineeDetails04Controller:UITableViewDataSource {
     }
     
     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
-        let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! MeTraineeDetails02Cell
+        let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! MeTraineeDetails04Cell
         cell.contentView.backgroundColor = ((indexPath.row%2) != 0) ? UIColor("#113357") : UIColor("#0B2B4D")
         cell.backgroundColor = ((indexPath.row%2) != 0) ? UIColor("#113357") : UIColor("#0B2B4D")
-        let info = (self.stuResultDataModel?.rows[indexPath.row])! as StuResultInfoModel
-        cell.km_label.text = "科目" + NYSource.statedicts[info.kskm]!
-        cell.result_label.text = String(info.score)
-        cell.starttime_label.text = info.startDate
-        cell.endtime_label.text = info.endDate
+        let info = (stuTmsSignDataModel?.rows[indexPath.row])! as StuTmsSignInfoModel
+        cell.trainCarLicnum_label.text = info.trainCarLicnum
+        cell.sim_label.text = info.sim
+        cell.logintime_label.text = info.loginTime
+        if info.loginFlag == "1" {
+            cell.state_label.text = "签到"
+            cell.state_label.textColor = UIColor("#35BF5E")
+        }else{
+            cell.state_label.text = "签退"
+            cell.state_label.textColor = UIColor("#FF5454")
+        }
         return cell
     }
 }

+ 16 - 14
JiaPeiManage/Sources/Modulars/学员/Controllers/MeTraineeDetailsPageViewController.swift

@@ -227,23 +227,25 @@ extension MeTraineeDetailsPageViewController : VTMagicViewDataSource{
             }
             return meTraineeDetails02Controller ?? UIViewController()
         } else if pageIndex == 2 {
-            var meTraineeSubjectPageViewController = magicView.dequeueReusablePage(withIdentifier: "MeTraineeSubjectPageViewController03")
-            if meTraineeSubjectPageViewController == nil {
-                meTraineeSubjectPageViewController = MeTraineeSubjectPageViewController(state: "3")
-            }
-            return meTraineeSubjectPageViewController ?? UIViewController()
-        } else if pageIndex == 3{
-            var meTraineeSubjectPageViewController = magicView.dequeueReusablePage(withIdentifier: "MeTraineeSubjectPageViewController04")
-            if meTraineeSubjectPageViewController == nil {
-                meTraineeSubjectPageViewController = MeTraineeSubjectPageViewController(state: "4")
+            var meTraineeDetails03Controller = magicView.dequeueReusablePage(withIdentifier: "MeTraineeDetails03Controller")
+            if meTraineeDetails03Controller == nil {
+                var stuId = 0
+                if (traineeInfoModel != nil) {
+                    stuId = (traineeInfoModel?.id)!
+                }
+                meTraineeDetails03Controller = MeTraineeDetails03Controller(stuOutId: stuId)
             }
-            return meTraineeSubjectPageViewController ?? UIViewController()
+            return meTraineeDetails03Controller ?? UIViewController()
         } else {
-            var meTraineeSubjectPageViewController = magicView.dequeueReusablePage(withIdentifier: "MeTraineeSubjectPageViewController05")
-            if meTraineeSubjectPageViewController == nil {
-                meTraineeSubjectPageViewController = MeTraineeSubjectPageViewController(state: "5")
+            var meTraineeDetails04Controller = magicView.dequeueReusablePage(withIdentifier: "MeTraineeDetails04Controller")
+            if meTraineeDetails04Controller == nil {
+                var stuId = 0
+                if (traineeInfoModel != nil) {
+                    stuId = (traineeInfoModel?.id)!
+                }
+                meTraineeDetails04Controller = MeTraineeDetails04Controller(stuOutId: stuId)
             }
-            return meTraineeSubjectPageViewController ?? UIViewController()
+            return meTraineeDetails04Controller ?? UIViewController()
         }
     }
 }

+ 25 - 0
JiaPeiManage/Sources/Modulars/学员/Views/MeTraineeDetails04Cell.swift

@@ -0,0 +1,25 @@
+//
+//  MeTraineeDetails04Cell.swift
+//  JiaPeiManage
+//
+//  Created by Ning.ge on 2023/6/21.
+//
+
+import UIKit
+
+final class MeTraineeDetails04Cell: UITableViewCell,NibLoadable {
+    
+    //车牌号
+    @IBOutlet weak var trainCarLicnum_label: UILabel!
+    //号码
+    @IBOutlet weak var sim_label: UILabel!
+    //时间
+    @IBOutlet weak var logintime_label: UILabel!
+    //状态
+    @IBOutlet weak var state_label: UILabel!
+    
+    override func awakeFromNib() {
+        super.awakeFromNib()
+        self.selectionStyle = .none
+    }
+}

+ 82 - 0
JiaPeiManage/Sources/Modulars/学员/Views/MeTraineeDetails04Cell.xib

@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina5_9" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21678"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="MeTraineeDetails04Cell" customModule="JiaPeiManage" customModuleProvider="target">
+            <rect key="frame" x="0.0" y="0.0" width="375" height="62"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="闽A8437学" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0gC-1w-Bjd">
+                    <rect key="frame" x="0.0" y="0.0" width="99" height="62"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="62" id="P01-pM-PzP"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                    <color key="textColor" red="0.83137254900000002" green="0.86666666670000003" blue="0.90196078430000004" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="13501002051" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="NFq-6n-1dV">
+                    <rect key="frame" x="99" y="0.0" width="98" height="62"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="62" id="wGd-aa-JYb"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                    <color key="textColor" red="0.83137254900000002" green="0.86666666670000003" blue="0.90196078430000004" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="glP-0W-GqN" userLabel="2018-09-20 19:38:45">
+                    <rect key="frame" x="197" y="0.0" width="98" height="62"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="62" id="Yqs-Vo-6GU"/>
+                    </constraints>
+                    <string key="text"> 2018-09-20
+19:38:45</string>
+                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                    <color key="textColor" red="0.83137254900000002" green="0.86666666670000003" blue="0.90196078430000004" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="签退" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="FCN-CZ-ZMi" userLabel="2018-09-20 19:38:45">
+                    <rect key="frame" x="295" y="0.0" width="80" height="62"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="80" id="Mil-Cv-8UY"/>
+                        <constraint firstAttribute="height" constant="62" id="pEo-vo-EGh"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                    <color key="textColor" red="0.83137254900000002" green="0.86666666670000003" blue="0.90196078430000004" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+            </subviews>
+            <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
+            <color key="backgroundColor" red="0.043137254899999998" green="0.16862745100000001" blue="0.30196078430000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+            <constraints>
+                <constraint firstAttribute="trailing" secondItem="FCN-CZ-ZMi" secondAttribute="trailing" id="04V-02-Aig"/>
+                <constraint firstItem="NFq-6n-1dV" firstAttribute="width" secondItem="glP-0W-GqN" secondAttribute="width" id="0fx-Pj-92q"/>
+                <constraint firstItem="FCN-CZ-ZMi" firstAttribute="leading" secondItem="glP-0W-GqN" secondAttribute="trailing" id="4eC-5D-Efx"/>
+                <constraint firstItem="0gC-1w-Bjd" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="7Ya-1I-1Jx"/>
+                <constraint firstItem="NFq-6n-1dV" firstAttribute="leading" secondItem="0gC-1w-Bjd" secondAttribute="trailing" id="FD9-Zg-03b"/>
+                <constraint firstItem="0gC-1w-Bjd" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" id="NHR-Wm-HCe"/>
+                <constraint firstItem="0gC-1w-Bjd" firstAttribute="width" secondItem="NFq-6n-1dV" secondAttribute="width" multiplier="1.0102" id="Y33-JP-eSE"/>
+                <constraint firstItem="FCN-CZ-ZMi" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="Z3z-H5-XiG"/>
+                <constraint firstItem="glP-0W-GqN" firstAttribute="leading" secondItem="NFq-6n-1dV" secondAttribute="trailing" id="aLN-2B-rEA"/>
+                <constraint firstItem="glP-0W-GqN" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="bL1-ud-u3M"/>
+                <constraint firstItem="NFq-6n-1dV" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="sOK-m0-a0d"/>
+            </constraints>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="logintime_label" destination="glP-0W-GqN" id="0Ug-we-R1g"/>
+                <outlet property="sim_label" destination="NFq-6n-1dV" id="2QJ-y1-CaD"/>
+                <outlet property="state_label" destination="FCN-CZ-ZMi" id="StH-q6-2Xy"/>
+                <outlet property="trainCarLicnum_label" destination="0gC-1w-Bjd" id="L0S-4R-VOL"/>
+            </connections>
+            <point key="canvasLocation" x="69" y="-12"/>
+        </view>
+    </objects>
+</document>

+ 15 - 0
JiaPeiManage/Sources/Modulars/学员/Views/MeTraineeDetails04HeaderView.swift

@@ -0,0 +1,15 @@
+//
+//  MeTraineeDetails04HeaderView.swift
+//  JiaPeiManage
+//
+//  Created by Ning.ge on 2023/6/21.
+//
+
+final class MeTraineeDetails04HeaderView: UIView,NibLoadable {
+
+    override func awakeFromNib() {
+        super.awakeFromNib()
+        
+    }
+    
+}

+ 74 - 0
JiaPeiManage/Sources/Modulars/学员/Views/MeTraineeDetails04HeaderView.xib

@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina5_9" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21678"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="MeTraineeDetails04HeaderView" customModule="JiaPeiManage" customModuleProvider="target">
+            <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="车牌号 " textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QU6-J6-zer">
+                    <rect key="frame" x="0.0" y="0.0" width="99" height="44"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="44" id="0zV-5d-oax"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
+                    <color key="textColor" red="0.83137254900000002" green="0.86666666670000003" blue="0.90196078430000004" alpha="0.84705882349999995" colorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="上传时间" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7oz-zR-oIh">
+                    <rect key="frame" x="197" y="0.0" width="98" height="44"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="44" id="VCz-Ih-4pe"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
+                    <color key="textColor" red="0.83137254900000002" green="0.86666666670000003" blue="0.90196078430000004" alpha="0.84705882349999995" colorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="状态" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kJa-eN-Vnv">
+                    <rect key="frame" x="295" y="0.0" width="80" height="44"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="44" id="IHQ-oC-stu"/>
+                        <constraint firstAttribute="width" constant="80" id="hke-uK-RnM"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
+                    <color key="textColor" red="0.83137254900000002" green="0.86666666670000003" blue="0.90196078430000004" alpha="0.84705882349999995" colorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="终端SIM号" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tKi-Wu-paq">
+                    <rect key="frame" x="99" y="0.0" width="98" height="44"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="44" id="tUb-N8-GI4"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
+                    <color key="textColor" red="0.83137254900000002" green="0.86666666670000003" blue="0.90196078430000004" alpha="0.84705882349999995" colorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+            </subviews>
+            <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
+            <color key="backgroundColor" red="0.14901960784313725" green="0.28235294117647058" blue="0.41960784313725491" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+            <constraints>
+                <constraint firstItem="7oz-zR-oIh" firstAttribute="leading" secondItem="tKi-Wu-paq" secondAttribute="trailing" id="3yk-wt-jiQ"/>
+                <constraint firstItem="QU6-J6-zer" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" id="4Ak-sJ-v8e"/>
+                <constraint firstItem="kJa-eN-Vnv" firstAttribute="trailing" secondItem="vUN-kp-3ea" secondAttribute="trailing" id="AeE-qH-RNC"/>
+                <constraint firstItem="tKi-Wu-paq" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="L3Z-9W-oxy"/>
+                <constraint firstItem="QU6-J6-zer" firstAttribute="width" secondItem="tKi-Wu-paq" secondAttribute="width" multiplier="1.0102" id="VQ5-8e-Bl2"/>
+                <constraint firstItem="7oz-zR-oIh" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="atj-fv-Bw3"/>
+                <constraint firstItem="tKi-Wu-paq" firstAttribute="leading" secondItem="QU6-J6-zer" secondAttribute="trailing" id="kKS-Az-J1I"/>
+                <constraint firstItem="kJa-eN-Vnv" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="toX-m4-paX"/>
+                <constraint firstItem="tKi-Wu-paq" firstAttribute="width" secondItem="7oz-zR-oIh" secondAttribute="width" id="tpd-69-E5d"/>
+                <constraint firstItem="kJa-eN-Vnv" firstAttribute="leading" secondItem="7oz-zR-oIh" secondAttribute="trailing" id="wEm-kM-Aa9"/>
+                <constraint firstItem="QU6-J6-zer" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="zpw-Da-tfP"/>
+            </constraints>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <point key="canvasLocation" x="68" y="-12.561576354679804"/>
+        </view>
+    </objects>
+</document>

+ 14 - 4
JiaPeiManage/Sources/Services/CoachAPI.swift

@@ -20,13 +20,16 @@ enum CoachAPI {
     case studentInfoById(city:String,id:Int )
     //查询成绩
     case stuScoreByOutId(pageNum:Int ,pageSize:Int ,stuOutId:Int)
+    //查询签到记录
+    case stuTmsSignListByStuId(pageNum:Int ,pageSize:Int ,stuOutId:Int,city:String)
 }
 
 extension CoachAPI: TargetType {
     
     var baseURL: URL {
         switch self {
-        case .coachInfo,.coachQrInfo,.coachInfoList,.studentInfoById,.stuScoreByOutId:
+        case .coachInfo,.coachQrInfo,.coachInfoList,.studentInfoById,.stuScoreByOutId
+            ,.stuTmsSignListByStuId:
             return URL(string: HttpRequest.api.path)!
         }
     }
@@ -43,6 +46,8 @@ extension CoachAPI: TargetType {
             return "/jsjp-admin/open-api/tms/coachInfo/getTmsStudentInfoById"
         case .stuScoreByOutId(_,_,_):
             return "/jsjp-admin/open-api/gzpt/userInfo/getUserScoreByOutId"
+        case .stuTmsSignListByStuId(_,_,_,_):
+            return "/jsjp-admin/open-api/tms/coachInfo/getTmsSignListByStuId"
         }
         
     }
@@ -63,7 +68,7 @@ extension CoachAPI: TargetType {
     var task: Moya.Task {
         switch self {
         case .coachInfo(_,_),.coachQrInfo(_,_),.coachInfoList(_,_,_,_,_,_,_,_),.studentInfoById(_,_)
-            ,.stuScoreByOutId(_,_,_):
+            ,.stuScoreByOutId(_,_,_),.stuTmsSignListByStuId(_,_,_,_):
             if let parameters = parameters {
                 return .requestParameters(parameters: parameters, encoding: URLEncoding.default)
             }
@@ -96,10 +101,15 @@ extension CoachAPI: TargetType {
         case let .studentInfoById(city,id):
             return ["city": city,
                     "id": id,]
-        case let .stuScoreByOutId(pageNumt, pageSize, stuOutId):
-            return ["pageNum": pageNumt,
+        case let .stuScoreByOutId(pageNum, pageSize, stuOutId):
+            return ["pageNum": pageNum,
                     "pageSize": pageSize,
                     "stuOutId": stuOutId,]
+        case let .stuTmsSignListByStuId(pageNum, pageSize, stuOutId, city):
+            return ["pageNum": pageNum,
+                    "pageSize": pageSize,
+                    "id": stuOutId,
+                    "city":city,]
         default:
             return nil
         }

+ 8 - 1
JiaPeiManage/Sources/Services/CoachService.swift

@@ -20,11 +20,13 @@ protocol CoachServiceType {
     func studentInfoByIdRequest(city:String,id:Int) -> Single<TraineeInfoModel>
     //通过id获取学员成绩
     func stuScoreByOutIdRequest(pageNum:Int ,pageSize:Int ,stuOutId:Int) -> Single<StuResultDataModel>
-    
+    //查询签到记录
+    func stuTmsSignListByStuIdRequest(pageNum:Int ,pageSize:Int ,stuOutId:Int,city:String) -> Single<StuTmsSignDataModel>
 }
 
 final class CoachService: CoachServiceType {
 
+    
     private let networking : CoachNetworking
     
     init(networking: CoachNetworking) {
@@ -55,5 +57,10 @@ final class CoachService: CoachServiceType {
         let api = CoachAPI.stuScoreByOutId(pageNum: pageNum, pageSize: pageSize, stuOutId: stuOutId)
         return networking.request(api).map(StuResultDataModel.self, isModel: true)
     }
+    
+    func stuTmsSignListByStuIdRequest(pageNum: Int, pageSize: Int, stuOutId: Int, city: String) -> RxSwift.Single<StuTmsSignDataModel> {
+        let api = CoachAPI.stuTmsSignListByStuId(pageNum: pageNum, pageSize: pageSize, stuOutId: stuOutId, city: city)
+        return networking.request(api).map(StuTmsSignDataModel.self, isModel: true)
+    }
 }