瀏覽代碼

人脸比对 up 基本完成

openlockPPP 1 年之前
父節點
當前提交
a73cc59533

+ 20 - 0
JiaPeiManage.xcodeproj/project.pbxproj

@@ -30,6 +30,11 @@
 		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 */; };
+		908FEEA72A42E19E00BEB81C /* MeTraineeDetails03HeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 908FEEA62A42E19E00BEB81C /* MeTraineeDetails03HeaderView.swift */; };
+		908FEEA92A42E1BF00BEB81C /* MeTraineeDetails03HeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 908FEEA82A42E1BF00BEB81C /* MeTraineeDetails03HeaderView.xib */; };
+		908FEEAB2A42E21900BEB81C /* MeTraineeDetails03Cell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 908FEEAA2A42E21900BEB81C /* MeTraineeDetails03Cell.swift */; };
+		908FEEAD2A42E23C00BEB81C /* MeTraineeDetails03Cell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 908FEEAC2A42E23C00BEB81C /* MeTraineeDetails03Cell.xib */; };
+		908FEEAF2A42FA4F00BEB81C /* StuLogFacDataModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 908FEEAE2A42FA4F00BEB81C /* StuLogFacDataModel.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 */; };
@@ -170,6 +175,11 @@
 		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>"; };
+		908FEEA62A42E19E00BEB81C /* MeTraineeDetails03HeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeTraineeDetails03HeaderView.swift; sourceTree = "<group>"; };
+		908FEEA82A42E1BF00BEB81C /* MeTraineeDetails03HeaderView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MeTraineeDetails03HeaderView.xib; sourceTree = "<group>"; };
+		908FEEAA2A42E21900BEB81C /* MeTraineeDetails03Cell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeTraineeDetails03Cell.swift; sourceTree = "<group>"; };
+		908FEEAC2A42E23C00BEB81C /* MeTraineeDetails03Cell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MeTraineeDetails03Cell.xib; sourceTree = "<group>"; };
+		908FEEAE2A42FA4F00BEB81C /* StuLogFacDataModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StuLogFacDataModel.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>"; };
@@ -376,6 +386,10 @@
 				908FEE9C2A42CA3F00BEB81C /* MeTraineeDetails04HeaderView.xib */,
 				908FEE9E2A42CBDB00BEB81C /* MeTraineeDetails04Cell.swift */,
 				908FEEA02A42CC1E00BEB81C /* MeTraineeDetails04Cell.xib */,
+				908FEEA62A42E19E00BEB81C /* MeTraineeDetails03HeaderView.swift */,
+				908FEEA82A42E1BF00BEB81C /* MeTraineeDetails03HeaderView.xib */,
+				908FEEAA2A42E21900BEB81C /* MeTraineeDetails03Cell.swift */,
+				908FEEAC2A42E23C00BEB81C /* MeTraineeDetails03Cell.xib */,
 			);
 			path = Views;
 			sourceTree = "<group>";
@@ -496,6 +510,7 @@
 				903628BA2A40431800F0AA6C /* TraineeInfoModel.swift */,
 				908FEE982A42A1D300BEB81C /* StuResultDataModel.swift */,
 				908FEEA42A42D62A00BEB81C /* StuTmsSignDataModel.swift */,
+				908FEEAE2A42FA4F00BEB81C /* StuLogFacDataModel.swift */,
 			);
 			path = Models;
 			sourceTree = "<group>";
@@ -891,6 +906,7 @@
 				908FEEA12A42CC1E00BEB81C /* MeTraineeDetails04Cell.xib in Resources */,
 				90CE52252A36C0720033BD06 /* LaunchScreen.storyboard in Resources */,
 				90BC4BE02A3C46C4006FD683 /* MeTraineeDetailsPageViewController.xib in Resources */,
+				908FEEAD2A42E23C00BEB81C /* MeTraineeDetails03Cell.xib in Resources */,
 				90CE528A2A36E5460033BD06 /* PopOverViewCell.xib in Resources */,
 				909DA5D12A3AC2460034501F /* UpdatePasswordViewController.xib in Resources */,
 				90CE52222A36C0720033BD06 /* Assets.xcassets in Resources */,
@@ -901,6 +917,7 @@
 				909DA5D52A3AE0160034501F /* MeTraineeSubjectCell.xib in Resources */,
 				908FEE9D2A42CA3F00BEB81C /* MeTraineeDetails04HeaderView.xib in Resources */,
 				90CE52852A36E5460033BD06 /* EmptyView.xib in Resources */,
+				908FEEA92A42E1BF00BEB81C /* MeTraineeDetails03HeaderView.xib in Resources */,
 				90CE53002A36F7110033BD06 /* HomeViewController.xib in Resources */,
 				90BC4BE72A3DDF44006FD683 /* MeTraineeSubjectHeaderView.xib in Resources */,
 				909DA5CD2A3AC00D0034501F /* MeTraineeSearchPageViewController.xib in Resources */,
@@ -1030,6 +1047,7 @@
 				90BC4BDE2A3C4691006FD683 /* MeTraineeDetailsPageViewController.swift in Sources */,
 				90CE52CB2A36E5EC0033BD06 /* UILabel+Rx.swift in Sources */,
 				90CE52E12A36E73A0033BD06 /* SplashModel.swift in Sources */,
+				908FEEAF2A42FA4F00BEB81C /* StuLogFacDataModel.swift in Sources */,
 				90CE52862A36E5460033BD06 /* EmptyView.swift in Sources */,
 				90CE52452A36E5170033BD06 /* NYFitReal.swift in Sources */,
 				90CE52A52A36E59A0033BD06 /* UIButton+Kingfisher.swift in Sources */,
@@ -1045,9 +1063,11 @@
 				909DA5C12A3999B30034501F /* NYTips.swift in Sources */,
 				90CE52432A36E5170033BD06 /* NYFont.swift in Sources */,
 				90CE52ED2A36EBE80033BD06 /* UserInfoModel.swift in Sources */,
+				908FEEAB2A42E21900BEB81C /* MeTraineeDetails03Cell.swift in Sources */,
 				90CE528B2A36E5460033BD06 /* PopOverViewSettings.swift in Sources */,
 				90CE52D02A36E5EC0033BD06 /* PullToRefresh+Rx.swift in Sources */,
 				90CE52382A36E4720033BD06 /* MainNavigationController.swift in Sources */,
+				908FEEA72A42E19E00BEB81C /* MeTraineeDetails03HeaderView.swift in Sources */,
 				90CE52832A36E5460033BD06 /* SearchBarView.swift in Sources */,
 				9076C5DA2A386B2300E5E33F /* MineViewController.swift in Sources */,
 				903628CA2A417BA800F0AA6C /* MeTraineeDetails01HeaderView.swift in Sources */,

+ 46 - 0
JiaPeiManage/Sources/Models/StuLogFacDataModel.swift

@@ -0,0 +1,46 @@
+//
+//  StuLogFacDataModel.swift
+//  JiaPeiManage
+//
+//  Created by Ning.ge on 2023/6/21.
+//
+
+import ObjectMapper
+
+
+struct StuLogFacInfoModel : ImmutableMappable{
+    
+    var crdate : String!
+    var img : String!
+    var sim : String!
+    var similar : String!
+    var sourceimg : String!
+    var type : Int!
+
+    init(map: Map) throws {
+        crdate = try map.value("crdate") ?? ""
+        img = try map.value("img") ?? ""
+        sim = try map.value("sim") ?? ""
+        similar = try map.value("similar") ?? ""
+        sourceimg = try map.value("sourceimg") ?? ""
+        type = try map.value("type") ?? 0
+    }
+    
+}
+
+
+struct StuLogFacDataModel : ImmutableMappable{
+    
+    var code : Int!
+    var msg : String!
+    var rows : [StuLogFacInfoModel]!
+    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
+    }
+    
+}

+ 20 - 42
JiaPeiManage/Sources/Modulars/学员/Controllers/MeTraineeDetails/MeTraineeDetails03Controller.swift

@@ -13,18 +13,15 @@ import RxCocoa
 
 final class MeTraineeDetails03Controller: BaseGroupTableViewController {
     
-    let cellIdentifier:String = "_MeTraineeDetails04Cell"
+    let cellIdentifier:String = "_MeTraineeDetails03Cell"
     // 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()
+    let header03_view = MeTraineeDetails03HeaderView.loadFromNib()
     
     // MARK: 数据
-    var stuTmsSignDataModel:StuTmsSignDataModel?
+    var stuLogFacDataModel:StuLogFacDataModel?
     
     var page:Int = 1
     var pageSize:Int = 10
@@ -43,7 +40,7 @@ final class MeTraineeDetails03Controller: BaseGroupTableViewController {
         super.viewDidLoad()
         //绑定
         biandView()
-        if(self.stuOutId>0){getStuResultList()}
+//        if(self.stuOutId>0){getStuResultList()}
     }
     
     // MARK: 私有方法
@@ -54,9 +51,9 @@ final class MeTraineeDetails03Controller: BaseGroupTableViewController {
     
     func getStuResultList(){
         
-        self.cocahService.stuTmsSignListByStuIdRequest(pageNum: page, pageSize: pageSize, stuOutId: stuOutId, city: LocalManager.userInfo.city!)
-            .subscribe(onSuccess: {[unowned self] stuTmsSignDataModel in
-                self.stuTmsSignDataModel = stuTmsSignDataModel
+        self.cocahService.stuLogFacListByStuIdRequest(pageNum: page, pageSize: pageSize, stuOutId: stuOutId, city: LocalManager.userInfo.city!)
+            .subscribe(onSuccess: {[unowned self] stuLogFacDataModel in
+                self.stuLogFacDataModel = stuLogFacDataModel
                 print("resultInfoModel成功")
                 self.hideLoadAnimation()
                 self.tableView.reloadData()
@@ -71,8 +68,9 @@ final class MeTraineeDetails03Controller: BaseGroupTableViewController {
         tableView.delegate = self
         tableView.dataSource = self
         tableView.separatorStyle = .none //去除分割线
-        tableView.register(UINib(nibName: "MeTraineeDetails04Cell", bundle: nil), forCellReuseIdentifier: cellIdentifier)
-        tableView.rowHeight = 62.f
+        tableView.register(UINib(nibName: "MeTraineeDetails03Cell", bundle: nil), forCellReuseIdentifier: cellIdentifier)
+        tableView.rowHeight = 92.f
+        tableView.contentInset = UIEdgeInsets(top: -25, left: 0, bottom: -25, right: 0)
         setupRefreshHeader(tableView) {[unowned self] in
 //            DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
 //                // 在延迟 1 秒后执行的代码
@@ -91,49 +89,29 @@ extension MeTraineeDetails03Controller:UITableViewDataSource {
     
     
     func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
-        if (stuTmsSignDataModel != nil && (stuTmsSignDataModel?.rows.count)!>0){
-            return (stuTmsSignDataModel?.rows.count)!
+        if (stuLogFacDataModel != nil && (stuLogFacDataModel?.rows.count)!>0){
+            return (stuLogFacDataModel?.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
+        return header03_view
     }
     
     func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
-        return 50.f+44.f
+        return 224.f
     }
     
     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
-        let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! MeTraineeDetails04Cell
+        let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! MeTraineeDetails03Cell
         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")
-        }
+        let info = (stuLogFacDataModel?.rows[indexPath.row])! as StuLogFacInfoModel
+        cell.stutime_label.text = info.crdate
+        cell.user_imageview.sd_setImage(with: info.sourceimg?.urlValue)
+        cell.similar_label.text = info.similar
+        cell.phone_label.text = info.sim
         return cell
     }
 }

+ 26 - 0
JiaPeiManage/Sources/Modulars/学员/Views/MeTraineeDetails03Cell.swift

@@ -0,0 +1,26 @@
+//
+//  MeTraineeDetails03Cell.swift
+//  JiaPeiManage
+//
+//  Created by Ning.ge on 2023/6/21.
+//
+
+import UIKit
+
+final class MeTraineeDetails03Cell: UITableViewCell,NibLoadable {
+    
+    //时间
+    @IBOutlet weak var stutime_label: UILabel!
+    //图片
+    @IBOutlet weak var user_imageview: UIImageView!
+    //相识度
+    @IBOutlet weak var similar_label: UILabel!
+    //电话
+    @IBOutlet weak var phone_label: UILabel!
+
+    
+    override func awakeFromNib() {
+        super.awakeFromNib()
+        self.selectionStyle = .none
+    }
+}

+ 79 - 0
JiaPeiManage/Sources/Modulars/学员/Views/MeTraineeDetails03Cell.xib

@@ -0,0 +1,79 @@
+<?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="MeTraineeDetails03Cell" customModule="JiaPeiManage" customModuleProvider="target">
+            <rect key="frame" x="0.0" y="0.0" width="375" height="92"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CIv-ic-cjE" userLabel="2018-09-20 19:38:45">
+                    <rect key="frame" x="0.0" y="0.0" width="97" height="92"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="92" id="hmQ-xV-oDP"/>
+                    </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"/>
+                    <color key="highlightedColor" red="0.83137254900000002" green="0.86666666670000003" blue="0.90196078430000004" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                </label>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="59.29%" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dt1-OJ-eHZ">
+                    <rect key="frame" x="195" y="0.0" width="70" height="92"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="92" id="Mc5-W6-Ec4"/>
+                        <constraint firstAttribute="width" constant="70" id="TCd-Yp-Qf6"/>
+                    </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="13650000012" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vH5-w1-TpZ">
+                    <rect key="frame" x="265" y="0.0" width="110" height="92"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="110" id="aKp-s2-HNk"/>
+                        <constraint firstAttribute="height" constant="92" id="qoK-iJ-ytT"/>
+                    </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>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="MVn-9J-5qI">
+                    <rect key="frame" x="105" y="10" width="82" height="72"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="72" id="dbP-HC-pYA"/>
+                    </constraints>
+                </imageView>
+            </subviews>
+            <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
+            <color key="backgroundColor" red="0.14901960780000001" green="0.28235294119999998" blue="0.41960784309999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+            <constraints>
+                <constraint firstItem="dt1-OJ-eHZ" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="6Yz-90-GSc"/>
+                <constraint firstItem="CIv-ic-cjE" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" id="9ag-Y1-lMv"/>
+                <constraint firstItem="CIv-ic-cjE" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="EIg-BO-xt3"/>
+                <constraint firstItem="vH5-w1-TpZ" firstAttribute="trailing" secondItem="vUN-kp-3ea" secondAttribute="trailing" id="FVX-ar-oFy"/>
+                <constraint firstItem="dt1-OJ-eHZ" firstAttribute="leading" secondItem="MVn-9J-5qI" secondAttribute="trailing" constant="8" symbolic="YES" id="Rkp-nH-Jnv"/>
+                <constraint firstItem="CIv-ic-cjE" firstAttribute="width" secondItem="MVn-9J-5qI" secondAttribute="width" multiplier="1.18293" id="eed-Ey-6Tj"/>
+                <constraint firstItem="MVn-9J-5qI" firstAttribute="leading" secondItem="CIv-ic-cjE" secondAttribute="trailing" constant="8" symbolic="YES" id="syr-jO-KED"/>
+                <constraint firstItem="MVn-9J-5qI" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="10" id="vD6-4l-4t7"/>
+                <constraint firstItem="vH5-w1-TpZ" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="w0t-cQ-Cmy"/>
+                <constraint firstItem="vH5-w1-TpZ" firstAttribute="leading" secondItem="dt1-OJ-eHZ" secondAttribute="trailing" id="wsb-ke-Fen"/>
+            </constraints>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="phone_label" destination="vH5-w1-TpZ" id="NdN-Ox-32s"/>
+                <outlet property="similar_label" destination="dt1-OJ-eHZ" id="Nt6-nT-q0W"/>
+                <outlet property="stutime_label" destination="CIv-ic-cjE" id="k2R-0A-X7e"/>
+                <outlet property="user_imageview" destination="MVn-9J-5qI" id="VdS-am-dQ7"/>
+            </connections>
+            <point key="canvasLocation" x="68" y="-12.561576354679804"/>
+        </view>
+    </objects>
+</document>

+ 18 - 0
JiaPeiManage/Sources/Modulars/学员/Views/MeTraineeDetails03HeaderView.swift

@@ -0,0 +1,18 @@
+//
+//  MeTraineeDetails03HeaderView.swift
+//  JiaPeiManage
+//
+//  Created by Ning.ge on 2023/6/21.
+//
+
+final class MeTraineeDetails03HeaderView: UIView,NibLoadable {
+    
+    
+    @IBOutlet weak var usertemplate_imageview: UIImageView!
+    
+    override func awakeFromNib() {
+        super.awakeFromNib()
+        
+    }
+    
+}

+ 133 - 0
JiaPeiManage/Sources/Modulars/学员/Views/MeTraineeDetails03HeaderView.xib

@@ -0,0 +1,133 @@
+<?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" colorMatched="YES">
+    <device id="retina5_9" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21678"/>
+        <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="MeTraineeDetails03HeaderView" customModule="JiaPeiManage" customModuleProvider="target">
+            <rect key="frame" x="0.0" y="0.0" width="375" height="224"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="人脸对比" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="9Cr-HB-akp">
+                    <rect key="frame" x="36" y="17" width="94" height="21"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="94" id="8R6-jK-jxb"/>
+                        <constraint firstAttribute="height" constant="21" id="RaO-KH-Lwh"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
+                    <color key="textColor" red="0.83137254900000002" green="0.86666666670000003" blue="0.90196078430000004" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="stu_block" translatesAutoresizingMaskIntoConstraints="NO" id="UQh-RJ-gto">
+                    <rect key="frame" x="15" y="20" width="6" height="18"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="18" id="NzZ-1m-haO"/>
+                        <constraint firstAttribute="width" constant="6" id="TBj-1M-ENR"/>
+                    </constraints>
+                </imageView>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="default-user-male" translatesAutoresizingMaskIntoConstraints="NO" id="e7k-pT-CCU">
+                    <rect key="frame" x="150.66666666666666" y="50" width="74" height="92"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="74" id="0o3-Hg-m6M"/>
+                        <constraint firstAttribute="height" constant="92" id="Ush-bQ-Sar"/>
+                    </constraints>
+                </imageView>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="对比模板" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PtE-eM-9Gh">
+                    <rect key="frame" x="148" y="148" width="79" height="16"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="79" id="diq-9U-nGf"/>
+                        <constraint firstAttribute="height" constant="16" id="zD6-cB-0Si"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="system" pointSize="13"/>
+                    <color key="textColor" red="0.83137254901960778" green="0.8666666666666667" blue="0.90196078431372551" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="D55-r9-gv5">
+                    <rect key="frame" x="0.0" y="180" width="375" height="44"/>
+                    <subviews>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="时间" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7wu-RQ-Khc">
+                            <rect key="frame" x="0.0" y="0.0" width="97" height="44"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="44" id="hbS-eg-HGq"/>
+                            </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="2zB-Pw-JnO">
+                            <rect key="frame" x="97" y="0.0" width="98" height="44"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="44" id="Hnw-Vz-pwa"/>
+                            </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="0Qk-pA-Ow0">
+                            <rect key="frame" x="265" y="0.0" width="110" height="44"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="44" id="V4p-4h-OM0"/>
+                                <constraint firstAttribute="width" constant="110" id="r5t-0M-T8N"/>
+                            </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="DXc-e8-hjO">
+                            <rect key="frame" x="195" y="0.0" width="70" height="44"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="70" id="4eD-e6-rQH"/>
+                                <constraint firstAttribute="height" constant="44" id="fOm-8U-bt6"/>
+                            </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>
+                    <color key="backgroundColor" red="0.14901960784313725" green="0.28235294117647058" blue="0.41960784313725491" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                    <constraints>
+                        <constraint firstItem="0Qk-pA-Ow0" firstAttribute="top" secondItem="D55-r9-gv5" secondAttribute="top" id="2mq-vf-ttw"/>
+                        <constraint firstAttribute="trailing" secondItem="0Qk-pA-Ow0" secondAttribute="trailing" id="39Z-xD-IV0"/>
+                        <constraint firstItem="DXc-e8-hjO" firstAttribute="top" secondItem="D55-r9-gv5" secondAttribute="top" id="7vM-E0-dED"/>
+                        <constraint firstItem="2zB-Pw-JnO" firstAttribute="leading" secondItem="7wu-RQ-Khc" secondAttribute="trailing" id="Dn4-Os-H3t"/>
+                        <constraint firstItem="7wu-RQ-Khc" firstAttribute="leading" secondItem="D55-r9-gv5" secondAttribute="leading" id="IyB-tP-fJ7"/>
+                        <constraint firstItem="7wu-RQ-Khc" firstAttribute="top" secondItem="D55-r9-gv5" secondAttribute="top" id="KKO-d6-PNa"/>
+                        <constraint firstItem="2zB-Pw-JnO" firstAttribute="top" secondItem="D55-r9-gv5" secondAttribute="top" id="OQi-v5-DcJ"/>
+                        <constraint firstItem="0Qk-pA-Ow0" firstAttribute="leading" secondItem="DXc-e8-hjO" secondAttribute="trailing" id="PHd-AD-mOX"/>
+                        <constraint firstAttribute="height" constant="44" id="cH8-wj-rA2"/>
+                        <constraint firstItem="DXc-e8-hjO" firstAttribute="leading" secondItem="2zB-Pw-JnO" secondAttribute="trailing" id="jvX-te-kzs"/>
+                        <constraint firstItem="7wu-RQ-Khc" firstAttribute="width" secondItem="2zB-Pw-JnO" secondAttribute="width" multiplier="0.989796" id="zFI-yk-XGc"/>
+                    </constraints>
+                </view>
+            </subviews>
+            <color key="backgroundColor" red="0.043137254901960784" green="0.16862745098039217" blue="0.30196078431372547" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+            <constraints>
+                <constraint firstItem="9Cr-HB-akp" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="17" id="B45-x5-yjs"/>
+                <constraint firstAttribute="bottom" secondItem="D55-r9-gv5" secondAttribute="bottom" id="Cz1-VU-M5U"/>
+                <constraint firstItem="PtE-eM-9Gh" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="Opl-gb-w4k"/>
+                <constraint firstItem="PtE-eM-9Gh" firstAttribute="top" secondItem="e7k-pT-CCU" secondAttribute="bottom" constant="6" id="Sjx-h4-kKQ"/>
+                <constraint firstItem="D55-r9-gv5" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="ZTA-kr-fia"/>
+                <constraint firstItem="e7k-pT-CCU" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="50" id="cGr-ds-Qyh"/>
+                <constraint firstItem="9Cr-HB-akp" firstAttribute="leading" secondItem="UQh-RJ-gto" secondAttribute="trailing" constant="15" id="hm4-um-HtM"/>
+                <constraint firstItem="e7k-pT-CCU" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="ph5-QP-gPI"/>
+                <constraint firstItem="UQh-RJ-gto" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="20" id="x95-sr-6Qy"/>
+                <constraint firstItem="UQh-RJ-gto" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="15" id="xUg-oD-elx"/>
+                <constraint firstAttribute="trailing" secondItem="D55-r9-gv5" secondAttribute="trailing" id="yLQ-6q-hRe"/>
+            </constraints>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="usertemplate_imageview" destination="e7k-pT-CCU" id="DTi-FM-zOJ"/>
+            </connections>
+            <point key="canvasLocation" x="68" y="-12.561576354679804"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="default-user-male" width="74" height="102"/>
+        <image name="stu_block" width="6" height="18"/>
+    </resources>
+</document>

+ 13 - 3
JiaPeiManage/Sources/Services/CoachAPI.swift

@@ -22,6 +22,8 @@ enum CoachAPI {
     case stuScoreByOutId(pageNum:Int ,pageSize:Int ,stuOutId:Int)
     //查询签到记录
     case stuTmsSignListByStuId(pageNum:Int ,pageSize:Int ,stuOutId:Int,city:String)
+    //查询人脸比对记录
+    case stuTmsLogFacListByStuId(pageNum:Int ,pageSize:Int ,stuOutId:Int,city:String)
 }
 
 extension CoachAPI: TargetType {
@@ -29,7 +31,7 @@ extension CoachAPI: TargetType {
     var baseURL: URL {
         switch self {
         case .coachInfo,.coachQrInfo,.coachInfoList,.studentInfoById,.stuScoreByOutId
-            ,.stuTmsSignListByStuId:
+            ,.stuTmsSignListByStuId,.stuTmsLogFacListByStuId:
             return URL(string: HttpRequest.api.path)!
         }
     }
@@ -48,13 +50,16 @@ extension CoachAPI: TargetType {
             return "/jsjp-admin/open-api/gzpt/userInfo/getUserScoreByOutId"
         case .stuTmsSignListByStuId(_,_,_,_):
             return "/jsjp-admin/open-api/tms/coachInfo/getTmsSignListByStuId"
+        case .stuTmsLogFacListByStuId(_,_,_,_):
+            return "/jsjp-admin/open-api/tms/coachInfo/getTmsLogFacListByStuId"
+            
         }
         
     }
     
     var method: Moya.Method {
         switch self {
-        case .coachInfo,.coachQrInfo,.coachInfoList,.studentInfoById,.stuScoreByOutId:
+        case .coachInfo,.coachQrInfo,.coachInfoList,.studentInfoById,.stuScoreByOutId,.stuTmsLogFacListByStuId:
             return .get
         default:
             return .get
@@ -68,7 +73,7 @@ extension CoachAPI: TargetType {
     var task: Moya.Task {
         switch self {
         case .coachInfo(_,_),.coachQrInfo(_,_),.coachInfoList(_,_,_,_,_,_,_,_),.studentInfoById(_,_)
-            ,.stuScoreByOutId(_,_,_),.stuTmsSignListByStuId(_,_,_,_):
+            ,.stuScoreByOutId(_,_,_),.stuTmsSignListByStuId(_,_,_,_),.stuTmsLogFacListByStuId(_,_,_,_):
             if let parameters = parameters {
                 return .requestParameters(parameters: parameters, encoding: URLEncoding.default)
             }
@@ -110,6 +115,11 @@ extension CoachAPI: TargetType {
                     "pageSize": pageSize,
                     "id": stuOutId,
                     "city":city,]
+        case let .stuTmsLogFacListByStuId(pageNum, pageSize, stuOutId, city):
+            return ["pageNum": pageNum,
+                    "pageSize": pageSize,
+                    "id": stuOutId,
+                    "city":city,]
         default:
             return nil
         }

+ 9 - 0
JiaPeiManage/Sources/Services/CoachService.swift

@@ -22,6 +22,9 @@ protocol CoachServiceType {
     func stuScoreByOutIdRequest(pageNum:Int ,pageSize:Int ,stuOutId:Int) -> Single<StuResultDataModel>
     //查询签到记录
     func stuTmsSignListByStuIdRequest(pageNum:Int ,pageSize:Int ,stuOutId:Int,city:String) -> Single<StuTmsSignDataModel>
+    //查询人脸比对记录
+    func stuLogFacListByStuIdRequest(pageNum:Int ,pageSize:Int ,stuOutId:Int,city:String) -> Single<StuLogFacDataModel>
+
 }
 
 final class CoachService: CoachServiceType {
@@ -62,5 +65,11 @@ final class CoachService: CoachServiceType {
         let api = CoachAPI.stuTmsSignListByStuId(pageNum: pageNum, pageSize: pageSize, stuOutId: stuOutId, city: city)
         return networking.request(api).map(StuTmsSignDataModel.self, isModel: true)
     }
+    
+    func stuLogFacListByStuIdRequest(pageNum: Int, pageSize: Int, stuOutId: Int, city: String) -> RxSwift.Single<StuLogFacDataModel> {
+        let api = CoachAPI.stuTmsLogFacListByStuId(pageNum: pageNum, pageSize: pageSize, stuOutId: stuOutId, city: city)
+        return networking.request(api).map(StuLogFacDataModel.self, isModel: true)
+    }
+    
 }