Explorar el Código

新增报名统计-入口,修改个人中心 bug。 添加统计api

openlockPPP hace 1 año
padre
commit
010e8eeb49
Se han modificado 26 ficheros con 488 adiciones y 58 borrados
  1. 40 0
      JiaPeiManage.xcodeproj/project.pbxproj
  2. 23 0
      JiaPeiManage/Assets.xcassets/Modules/Home/home_06.imageset/Contents.json
  3. BIN
      JiaPeiManage/Assets.xcassets/Modules/Home/home_06.imageset/home_06.png
  4. BIN
      JiaPeiManage/Assets.xcassets/Modules/Home/home_06.imageset/home_06@2x.png
  5. BIN
      JiaPeiManage/Assets.xcassets/Modules/Home/home_06.imageset/home_06@3x.png
  6. 23 0
      JiaPeiManage/Assets.xcassets/Modules/Mine/mine-coach-female.imageset/Contents.json
  7. BIN
      JiaPeiManage/Assets.xcassets/Modules/Mine/mine-coach-female.imageset/头像教练女.png
  8. BIN
      JiaPeiManage/Assets.xcassets/Modules/Mine/mine-coach-female.imageset/头像教练女@2x.png
  9. BIN
      JiaPeiManage/Assets.xcassets/Modules/Mine/mine-coach-female.imageset/头像教练女@3x.png
  10. 23 0
      JiaPeiManage/Assets.xcassets/Modules/Mine/mine-coach-male.imageset/Contents.json
  11. BIN
      JiaPeiManage/Assets.xcassets/Modules/Mine/mine-coach-male.imageset/头像教练男.png
  12. BIN
      JiaPeiManage/Assets.xcassets/Modules/Mine/mine-coach-male.imageset/头像教练男@2x.png
  13. BIN
      JiaPeiManage/Assets.xcassets/Modules/Mine/mine-coach-male.imageset/头像教练男@3x.png
  14. 4 0
      JiaPeiManage/Sources/Constants/NYImage.swift
  15. 14 7
      JiaPeiManage/Sources/Modulars/Home/Controllers/HomeViewController.swift
  16. 96 47
      JiaPeiManage/Sources/Modulars/Home/Controllers/HomeViewController.xib
  17. 10 1
      JiaPeiManage/Sources/Modulars/Mine/Controllers/MineViewController.swift
  18. 22 2
      JiaPeiManage/Sources/Modulars/Mine/Controllers/MineViewController.xib
  19. 19 0
      JiaPeiManage/Sources/Modulars/Statistics/Controllers/StatisticsPageController.swift
  20. 31 0
      JiaPeiManage/Sources/Modulars/Statistics/Controllers/StatisticsPageController.xib
  21. 2 0
      JiaPeiManage/Sources/Networking/Networking.swift
  22. 117 0
      JiaPeiManage/Sources/Services/StatisticsAPI.swift
  23. 48 0
      JiaPeiManage/Sources/Services/StatisticsService.swift
  24. 8 0
      JiaPeiManage/Sources/Utils/LocalManager.swift
  25. 3 1
      JiaPeiManage/Sources/Utils/NYSwRouter.swift
  26. 5 0
      JiaPeiManage/Sources/Utils/URLNavigationMap.swift

+ 40 - 0
JiaPeiManage.xcodeproj/project.pbxproj

@@ -37,6 +37,10 @@
 		908FEEAF2A42FA4F00BEB81C /* StuLogFacDataModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 908FEEAE2A42FA4F00BEB81C /* StuLogFacDataModel.swift */; };
 		90971E692A493BCB00267B7F /* MeTabBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90971E682A493BCB00267B7F /* MeTabBarController.swift */; };
 		90971E6B2A493DE500267B7F /* MeTabBarViewReactor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90971E6A2A493DE500267B7F /* MeTabBarViewReactor.swift */; };
+		90971E6D2A4979D000267B7F /* StatisticsAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90971E6C2A4979D000267B7F /* StatisticsAPI.swift */; };
+		90971E6F2A4979F300267B7F /* StatisticsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90971E6E2A4979F300267B7F /* StatisticsService.swift */; };
+		90971E742A498C4C00267B7F /* StatisticsPageController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90971E732A498C4C00267B7F /* StatisticsPageController.swift */; };
+		90971E762A498C9C00267B7F /* StatisticsPageController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 90971E752A498C9C00267B7F /* StatisticsPageController.xib */; };
 		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 */; };
@@ -184,6 +188,10 @@
 		908FEEAE2A42FA4F00BEB81C /* StuLogFacDataModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StuLogFacDataModel.swift; sourceTree = "<group>"; };
 		90971E682A493BCB00267B7F /* MeTabBarController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeTabBarController.swift; sourceTree = "<group>"; };
 		90971E6A2A493DE500267B7F /* MeTabBarViewReactor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeTabBarViewReactor.swift; sourceTree = "<group>"; };
+		90971E6C2A4979D000267B7F /* StatisticsAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatisticsAPI.swift; sourceTree = "<group>"; };
+		90971E6E2A4979F300267B7F /* StatisticsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatisticsService.swift; sourceTree = "<group>"; };
+		90971E732A498C4C00267B7F /* StatisticsPageController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatisticsPageController.swift; sourceTree = "<group>"; };
+		90971E752A498C9C00267B7F /* StatisticsPageController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = StatisticsPageController.xib; 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>"; };
@@ -411,6 +419,31 @@
 			path = App;
 			sourceTree = "<group>";
 		};
+		90971E702A498A2000267B7F /* Statistics */ = {
+			isa = PBXGroup;
+			children = (
+				90971E722A498A3E00267B7F /* Controllers */,
+				90971E712A498A3700267B7F /* Views */,
+			);
+			path = Statistics;
+			sourceTree = "<group>";
+		};
+		90971E712A498A3700267B7F /* Views */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Views;
+			sourceTree = "<group>";
+		};
+		90971E722A498A3E00267B7F /* Controllers */ = {
+			isa = PBXGroup;
+			children = (
+				90971E732A498C4C00267B7F /* StatisticsPageController.swift */,
+				90971E752A498C9C00267B7F /* StatisticsPageController.xib */,
+			);
+			path = Controllers;
+			sourceTree = "<group>";
+		};
 		90BC4BDA2A3C2541006FD683 /* RefreshHeaderAnimation */ = {
 			isa = PBXGroup;
 			children = (
@@ -499,6 +532,7 @@
 		90CE523B2A36E4EE0033BD06 /* Modulars */ = {
 			isa = PBXGroup;
 			children = (
+				90971E702A498A2000267B7F /* Statistics */,
 				9076C5D62A386AFA00E5E33F /* 学员 */,
 				90CE52E52A36E7D00033BD06 /* Mine */,
 				90CE52E42A36E7BD0033BD06 /* Home */,
@@ -740,6 +774,8 @@
 				90CE52F92A36F2570033BD06 /* LoginService.swift */,
 				90CE53012A3834060033BD06 /* CoachAPI.swift */,
 				90CE53032A3834360033BD06 /* CoachService.swift */,
+				90971E6C2A4979D000267B7F /* StatisticsAPI.swift */,
+				90971E6E2A4979F300267B7F /* StatisticsService.swift */,
 			);
 			path = Services;
 			sourceTree = "<group>";
@@ -932,6 +968,7 @@
 				903628D42A41AFD700F0AA6C /* MeTraineeDetails02Cell.xib in Resources */,
 				903628CC2A417BE700F0AA6C /* MeTraineeDetails01HeaderView.xib in Resources */,
 				909DA5C72A3AA1FF0034501F /* MeTraineeNavBar.xib in Resources */,
+				90971E762A498C9C00267B7F /* StatisticsPageController.xib in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -1092,6 +1129,7 @@
 				90CE52D92A36E6000033BD06 /* LocalManager.swift in Sources */,
 				9076C5DF2A387CBC00E5E33F /* MeTraineeListViewController.swift in Sources */,
 				90CE52822A36E5460033BD06 /* GesConflictCollectionView.swift in Sources */,
+				90971E742A498C4C00267B7F /* StatisticsPageController.swift in Sources */,
 				90CE523A2A36E4720033BD06 /* MainTabBarViewReactor.swift in Sources */,
 				909DA5D32A3ADFD80034501F /* MeTraineeSubjectCell.swift in Sources */,
 				90CE52BD2A36E5B70033BD06 /* NetEnvironment.swift in Sources */,
@@ -1111,6 +1149,7 @@
 				90BC4BE52A3DDF33006FD683 /* MeTraineeSubjectHeaderView.swift in Sources */,
 				90CE52BC2A36E5B70033BD06 /* Networking.swift in Sources */,
 				90CE52E22A36E73A0033BD06 /* SplashViewController.swift in Sources */,
+				90971E6D2A4979D000267B7F /* StatisticsAPI.swift in Sources */,
 				90CE52802A36E5460033BD06 /* NYSwToaster.swift in Sources */,
 				908FEE9F2A42CBDB00BEB81C /* MeTraineeDetails04Cell.swift in Sources */,
 				90CE52DC2A36E6250033BD06 /* NYAppCongfigure.swift in Sources */,
@@ -1118,6 +1157,7 @@
 				903628CE2A41AF1500F0AA6C /* MeTraineeDetails02HeaderView.swift in Sources */,
 				90CE52872A36E5460033BD06 /* NetAnimationView.swift in Sources */,
 				903628BE2A41766B00F0AA6C /* MeTraineeDetails01Controller.swift in Sources */,
+				90971E6F2A4979F300267B7F /* StatisticsService.swift in Sources */,
 				908FEE9B2A42CA1D00BEB81C /* MeTraineeDetails04HeaderView.swift in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;

+ 23 - 0
JiaPeiManage/Assets.xcassets/Modules/Home/home_06.imageset/Contents.json

@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "home_06.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "home_06@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "home_06@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
JiaPeiManage/Assets.xcassets/Modules/Home/home_06.imageset/home_06.png


BIN
JiaPeiManage/Assets.xcassets/Modules/Home/home_06.imageset/home_06@2x.png


BIN
JiaPeiManage/Assets.xcassets/Modules/Home/home_06.imageset/home_06@3x.png


+ 23 - 0
JiaPeiManage/Assets.xcassets/Modules/Mine/mine-coach-female.imageset/Contents.json

@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "头像教练女.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "头像教练女@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "头像教练女@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
JiaPeiManage/Assets.xcassets/Modules/Mine/mine-coach-female.imageset/头像教练女.png


BIN
JiaPeiManage/Assets.xcassets/Modules/Mine/mine-coach-female.imageset/头像教练女@2x.png


BIN
JiaPeiManage/Assets.xcassets/Modules/Mine/mine-coach-female.imageset/头像教练女@3x.png


+ 23 - 0
JiaPeiManage/Assets.xcassets/Modules/Mine/mine-coach-male.imageset/Contents.json

@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "头像教练男.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "头像教练男@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "头像教练男@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
JiaPeiManage/Assets.xcassets/Modules/Mine/mine-coach-male.imageset/头像教练男.png


BIN
JiaPeiManage/Assets.xcassets/Modules/Mine/mine-coach-male.imageset/头像教练男@2x.png


BIN
JiaPeiManage/Assets.xcassets/Modules/Mine/mine-coach-male.imageset/头像教练男@3x.png


+ 4 - 0
JiaPeiManage/Sources/Constants/NYImage.swift

@@ -21,6 +21,10 @@ struct NYImage {
         static let mine = UIImage(named: "tabBar_mine")
         static let mine_s = UIImage(named: "tabBar_mine_s")
     }
+    struct Mine {
+        static let usermale = UIImage(named: "mine-coach-male")
+        static let userfemale = UIImage(named: "mine-coach-female")
+    }
     struct Home {
         static let usermale = UIImage(named: "default-user-male")
         static let userfemale = UIImage(named: "default-user-female")

+ 14 - 7
JiaPeiManage/Sources/Modulars/Home/Controllers/HomeViewController.swift

@@ -24,15 +24,15 @@ final class HomeViewController: BaseViewController {
     @IBOutlet weak var biandAction_button: UIButton!
     //个人中心-action
     @IBOutlet weak var mineAction_button: UIButton!
+    //统计
+    @IBOutlet weak var statisticsAction_button: UIButton!
     //去查看-个人中心
     @IBOutlet weak var meMine_button: QMUIButton!
     
     override func viewDidLoad() {
         super.viewDidLoad()
         //判断用户登录
-        if !LocalManager.userInfo.isLogin {
-            NYSwRouter.open(NYSwOpenType.login.rawValue)
-        }
+        LocalManager.isOpenLogin()
         //UI
         setupUI()
         //biand绑定
@@ -51,27 +51,34 @@ final class HomeViewController: BaseViewController {
     func biandView(){
         //我的学员-action-btn
         self.meStuAction_button.rx.tap.subscribe ({ [unowned self] (_)  in
-            
+            if !LocalManager.isOpenLogin() { return}
             NYSwRouter.open(NYSwOpenType.traineetab.rawValue)
             //NYSwRouter.push(NYSwPushType.trainee_list.path)
         }).disposed(by: disposeBag)
         //在校学员-action
         self.onSchoolAction_button.rx.tap.subscribe ({ [unowned self] (_)  in
+            if !LocalManager.isOpenLogin() { return}
             NYSwRouter.push(NYSwPushType.trainee_list_school,context: LocalManager.userInfo.schoolId)
         }).disposed(by: disposeBag)
         //生成二维码-action
         self.codeQrAction_button.rx.tap.subscribe ({ [unowned self] (_)  in
-           
+            if !LocalManager.isOpenLogin() { return}
             
         }).disposed(by: disposeBag)
         //绑定学员-action
         self.biandAction_button.rx.tap.subscribe ({ [unowned self] (_)  in
-           
+            if !LocalManager.isOpenLogin() { return}
+            
+        }).disposed(by: disposeBag)
+        //统计-action
+        self.statisticsAction_button.rx.tap.subscribe ({ [unowned self] (_)  in
+            if !LocalManager.isOpenLogin() { return}
+            print("统计-action")
             
         }).disposed(by: disposeBag)
         //个人中心-action
         self.mineAction_button.rx.tap.subscribe ({ [unowned self] (_)  in
-            
+            if !LocalManager.isOpenLogin() { return}
             NYSwRouter.push(NYSwPushType.mine_center.path)
         }).disposed(by: disposeBag)
         

+ 96 - 47
JiaPeiManage/Sources/Modulars/Home/Controllers/HomeViewController.xib

@@ -17,6 +17,7 @@
                 <outlet property="meStu_button" destination="cfT-vy-eYx" id="ccD-4b-eRr"/>
                 <outlet property="mineAction_button" destination="TyX-PE-eAC" id="tdO-ZH-BaX"/>
                 <outlet property="onSchoolAction_button" destination="Ehd-Fh-nTl" id="c0W-so-udo"/>
+                <outlet property="statisticsAction_button" destination="eXQ-8z-Gss" id="JYq-jv-0C5"/>
                 <outlet property="view" destination="iN0-l3-epB" id="9Zg-Y9-fOO"/>
             </connections>
         </placeholder>
@@ -69,7 +70,7 @@
                                     </constraints>
                                 </view>
                                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4a7-TG-aBk" userLabel="View-我的学员">
-                                    <rect key="frame" x="15" y="170" width="170" height="295"/>
+                                    <rect key="frame" x="15" y="170" width="170" height="211"/>
                                     <subviews>
                                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="我的学员" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="8WK-hn-gU3">
                                             <rect key="frame" x="20" y="21" width="100" height="30"/>
@@ -82,10 +83,10 @@
                                             <nil key="highlightedColor"/>
                                         </label>
                                         <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_01" translatesAutoresizingMaskIntoConstraints="NO" id="wWi-Rw-a6s">
-                                            <rect key="frame" x="33.666666666666657" y="114" width="103" height="150"/>
+                                            <rect key="frame" x="55.333333333333329" y="100" width="59.333333333333329" height="86.666666666666686"/>
                                             <constraints>
-                                                <constraint firstAttribute="height" constant="150" id="1N6-ed-O1V"/>
-                                                <constraint firstAttribute="width" constant="103" id="75W-W2-IOK"/>
+                                                <constraint firstAttribute="height" constant="86.799999999999997" id="1N6-ed-O1V"/>
+                                                <constraint firstAttribute="width" constant="59.5" id="75W-W2-IOK"/>
                                             </constraints>
                                         </imageView>
                                         <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="cfT-vy-eYx" customClass="QMUIButton">
@@ -107,7 +108,7 @@
                                             </userDefinedRuntimeAttributes>
                                         </button>
                                         <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="8jf-BA-Yzd">
-                                            <rect key="frame" x="20" y="20" width="130" height="255"/>
+                                            <rect key="frame" x="20" y="20" width="130" height="171"/>
                                             <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                             <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                         </button>
@@ -115,8 +116,8 @@
                                     <color key="backgroundColor" red="0.043137254901960784" green="0.16862745098039217" blue="0.30196078431372547" alpha="1" colorSpace="calibratedRGB"/>
                                     <constraints>
                                         <constraint firstItem="cfT-vy-eYx" firstAttribute="top" secondItem="8WK-hn-gU3" secondAttribute="bottom" constant="8" id="0sb-Y5-x4Y"/>
-                                        <constraint firstAttribute="height" constant="295" id="8Zi-8R-pcz"/>
-                                        <constraint firstItem="wWi-Rw-a6s" firstAttribute="top" secondItem="cfT-vy-eYx" secondAttribute="bottom" constant="25" id="CmF-bi-wVo"/>
+                                        <constraint firstAttribute="height" constant="211" id="8Zi-8R-pcz"/>
+                                        <constraint firstItem="wWi-Rw-a6s" firstAttribute="top" secondItem="cfT-vy-eYx" secondAttribute="bottom" constant="11" id="CmF-bi-wVo"/>
                                         <constraint firstItem="8WK-hn-gU3" firstAttribute="leading" secondItem="4a7-TG-aBk" secondAttribute="leading" constant="20" id="Hfn-s9-mTZ"/>
                                         <constraint firstItem="8WK-hn-gU3" firstAttribute="top" secondItem="4a7-TG-aBk" secondAttribute="top" constant="21" id="VSO-N1-Pcr"/>
                                         <constraint firstAttribute="trailing" secondItem="8jf-BA-Yzd" secondAttribute="trailing" constant="20" id="Yyz-xh-VDk"/>
@@ -220,43 +221,87 @@
                                         </userDefinedRuntimeAttribute>
                                     </userDefinedRuntimeAttributes>
                                 </view>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="BOF-BH-jPr" userLabel="View-统计">
+                                    <rect key="frame" x="15" y="386" width="170" height="150"/>
+                                    <subviews>
+                                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_06" translatesAutoresizingMaskIntoConstraints="NO" id="VCf-ID-72R">
+                                            <rect key="frame" x="52" y="64" width="66" height="66"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="66" id="HJ7-i8-yP4"/>
+                                                <constraint firstAttribute="width" constant="66" id="UVT-yL-vZZ"/>
+                                            </constraints>
+                                        </imageView>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="报名统计" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yIf-gM-VYR">
+                                            <rect key="frame" x="20" y="21" width="100" height="30"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="30" id="iim-Bg-KPN"/>
+                                                <constraint firstAttribute="width" constant="100" id="pv5-zN-F85"/>
+                                            </constraints>
+                                            <fontDescription key="fontDescription" type="system" pointSize="24"/>
+                                            <color key="textColor" red="0.83137254900000002" green="0.86666666670000003" blue="0.90196078430000004" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                            <nil key="highlightedColor"/>
+                                        </label>
+                                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="eXQ-8z-Gss">
+                                            <rect key="frame" x="20" y="20" width="130" height="110"/>
+                                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                        </button>
+                                    </subviews>
+                                    <color key="backgroundColor" red="0.1803921568627451" green="0.1803921568627451" blue="0.11764705882352941" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <constraints>
+                                        <constraint firstItem="VCf-ID-72R" firstAttribute="centerX" secondItem="BOF-BH-jPr" secondAttribute="centerX" id="8KL-zy-25Y"/>
+                                        <constraint firstItem="VCf-ID-72R" firstAttribute="top" secondItem="yIf-gM-VYR" secondAttribute="bottom" constant="13" id="9VR-jk-TSr"/>
+                                        <constraint firstItem="eXQ-8z-Gss" firstAttribute="leading" secondItem="BOF-BH-jPr" secondAttribute="leading" constant="20" id="BFB-T8-fNW"/>
+                                        <constraint firstItem="yIf-gM-VYR" firstAttribute="leading" secondItem="BOF-BH-jPr" secondAttribute="leading" constant="20" id="Fp6-9U-LZI"/>
+                                        <constraint firstItem="eXQ-8z-Gss" firstAttribute="top" secondItem="BOF-BH-jPr" secondAttribute="top" constant="20" id="Huc-I4-mlt"/>
+                                        <constraint firstAttribute="trailing" secondItem="eXQ-8z-Gss" secondAttribute="trailing" constant="20" id="Jh6-6B-zf2"/>
+                                        <constraint firstAttribute="bottom" secondItem="eXQ-8z-Gss" secondAttribute="bottom" constant="20" id="NrQ-dc-b3D"/>
+                                        <constraint firstItem="yIf-gM-VYR" firstAttribute="top" secondItem="BOF-BH-jPr" secondAttribute="top" constant="21" id="jt2-Sy-J0B"/>
+                                        <constraint firstAttribute="height" constant="150" id="oNO-2J-0p8"/>
+                                    </constraints>
+                                    <userDefinedRuntimeAttributes>
+                                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                            <real key="value" value="5"/>
+                                        </userDefinedRuntimeAttribute>
+                                    </userDefinedRuntimeAttributes>
+                                </view>
                                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jJu-2o-jKp" userLabel="View-绑定学员">
-                                    <rect key="frame" x="15" y="470" width="170" height="221"/>
+                                    <rect key="frame" x="15" y="541" width="170" height="150"/>
                                     <subviews>
                                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="绑定学员" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qLB-zu-zdB">
                                             <rect key="frame" x="20" y="21" width="100" height="30"/>
                                             <constraints>
-                                                <constraint firstAttribute="width" constant="100" id="Dlc-0a-ePr"/>
-                                                <constraint firstAttribute="height" constant="30" id="gvV-4L-Hqr"/>
+                                                <constraint firstAttribute="width" constant="100" id="8zM-VV-TQ3"/>
+                                                <constraint firstAttribute="height" constant="30" id="nwM-LC-Ueg"/>
                                             </constraints>
                                             <fontDescription key="fontDescription" type="system" pointSize="24"/>
                                             <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="home_02" translatesAutoresizingMaskIntoConstraints="NO" id="kqw-hL-zUY">
-                                            <rect key="frame" x="30" y="78" width="110" height="105"/>
+                                            <rect key="frame" x="51" y="61" width="68" height="65"/>
                                             <constraints>
-                                                <constraint firstAttribute="height" constant="105" id="Si0-8O-wCE"/>
-                                                <constraint firstAttribute="width" constant="110" id="oTO-8R-x7R"/>
+                                                <constraint firstAttribute="height" constant="65" id="BSR-vr-fvq"/>
+                                                <constraint firstAttribute="width" constant="68" id="QGS-jY-U58"/>
                                             </constraints>
                                         </imageView>
                                         <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="jyp-62-CcY">
-                                            <rect key="frame" x="20" y="20" width="130" height="181"/>
+                                            <rect key="frame" x="20" y="20" width="130" height="110"/>
                                             <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                                             <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                         </button>
                                     </subviews>
                                     <color key="backgroundColor" red="0.15294117647058825" green="0.11372549019607843" blue="0.11372549019607843" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                     <constraints>
-                                        <constraint firstAttribute="trailing" secondItem="jyp-62-CcY" secondAttribute="trailing" constant="20" id="1DI-Vd-i5s"/>
-                                        <constraint firstItem="qLB-zu-zdB" firstAttribute="leading" secondItem="jJu-2o-jKp" secondAttribute="leading" constant="20" id="23W-m8-nSf"/>
-                                        <constraint firstItem="kqw-hL-zUY" firstAttribute="top" secondItem="qLB-zu-zdB" secondAttribute="bottom" constant="27" id="Grd-mn-iXk"/>
-                                        <constraint firstItem="jyp-62-CcY" firstAttribute="top" secondItem="jJu-2o-jKp" secondAttribute="top" constant="20" id="KV1-JM-ZbO"/>
-                                        <constraint firstAttribute="height" constant="221" id="Vi9-m6-4KQ"/>
-                                        <constraint firstAttribute="bottom" secondItem="jyp-62-CcY" secondAttribute="bottom" constant="20" id="hHf-Bk-6ER"/>
-                                        <constraint firstItem="kqw-hL-zUY" firstAttribute="centerX" secondItem="jJu-2o-jKp" secondAttribute="centerX" id="iEQ-bl-IO2"/>
-                                        <constraint firstItem="qLB-zu-zdB" firstAttribute="top" secondItem="jJu-2o-jKp" secondAttribute="top" constant="21" id="qDV-qq-HFS"/>
-                                        <constraint firstItem="jyp-62-CcY" firstAttribute="leading" secondItem="jJu-2o-jKp" secondAttribute="leading" constant="20" id="te6-9F-cUi"/>
+                                        <constraint firstAttribute="bottom" secondItem="jyp-62-CcY" secondAttribute="bottom" constant="20" id="H1y-hk-w0J"/>
+                                        <constraint firstAttribute="height" constant="150" id="MYd-44-xy6"/>
+                                        <constraint firstAttribute="trailing" secondItem="jyp-62-CcY" secondAttribute="trailing" constant="20" id="NV8-Pj-FD1"/>
+                                        <constraint firstItem="kqw-hL-zUY" firstAttribute="top" secondItem="qLB-zu-zdB" secondAttribute="bottom" constant="10" id="NgC-BK-ylW"/>
+                                        <constraint firstItem="qLB-zu-zdB" firstAttribute="top" secondItem="jJu-2o-jKp" secondAttribute="top" constant="21" id="YUx-1S-hHa"/>
+                                        <constraint firstItem="jyp-62-CcY" firstAttribute="leading" secondItem="jJu-2o-jKp" secondAttribute="leading" constant="20" id="eb7-1C-uDU"/>
+                                        <constraint firstItem="kqw-hL-zUY" firstAttribute="centerX" secondItem="jJu-2o-jKp" secondAttribute="centerX" id="kQp-7G-3M2"/>
+                                        <constraint firstItem="jyp-62-CcY" firstAttribute="top" secondItem="jJu-2o-jKp" secondAttribute="top" constant="20" id="oI4-CC-m7f"/>
+                                        <constraint firstItem="qLB-zu-zdB" firstAttribute="leading" secondItem="jJu-2o-jKp" secondAttribute="leading" constant="20" id="r5t-bk-uQe"/>
                                     </constraints>
                                     <userDefinedRuntimeAttributes>
                                         <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
@@ -270,19 +315,19 @@
                                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="个人中心" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3bj-Vm-uCl">
                                             <rect key="frame" x="20" y="21" width="100" height="30"/>
                                             <constraints>
-                                                <constraint firstAttribute="width" constant="100" id="6tB-db-TRb"/>
-                                                <constraint firstAttribute="height" constant="30" id="e1S-5R-YT4"/>
+                                                <constraint firstAttribute="height" constant="30" id="Y2w-Nl-J0x"/>
+                                                <constraint firstAttribute="width" constant="100" id="xE3-IX-rFT"/>
                                             </constraints>
                                             <fontDescription key="fontDescription" type="system" pointSize="24"/>
                                             <color key="textColor" red="0.83137254900000002" green="0.86666666670000003" blue="0.90196078430000004" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                             <nil key="highlightedColor"/>
                                         </label>
                                         <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ZiT-fi-dat" customClass="QMUIButton">
-                                            <rect key="frame" x="20" y="59" width="83" height="30"/>
+                                            <rect key="frame" x="21" y="59" width="83" height="30"/>
                                             <color key="backgroundColor" red="0.90196078430000004" green="0.94117647059999998" blue="0.98039215690000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                             <constraints>
-                                                <constraint firstAttribute="height" constant="30" id="F4D-8Y-tHh"/>
-                                                <constraint firstAttribute="width" constant="83" id="sdo-Hq-Mxt"/>
+                                                <constraint firstAttribute="height" constant="30" id="TFx-6Y-Vw9"/>
+                                                <constraint firstAttribute="width" constant="83" id="kEd-CR-zML"/>
                                             </constraints>
                                             <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                             <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
@@ -298,8 +343,8 @@
                                         <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_05" translatesAutoresizingMaskIntoConstraints="NO" id="0G2-KM-Ray">
                                             <rect key="frame" x="52" y="107" width="66" height="81"/>
                                             <constraints>
-                                                <constraint firstAttribute="width" constant="66" id="UUT-hJ-oKE"/>
-                                                <constraint firstAttribute="height" constant="81" id="qrH-gF-phn"/>
+                                                <constraint firstAttribute="height" constant="81" id="D62-Oy-XuD"/>
+                                                <constraint firstAttribute="width" constant="66" id="auo-06-djQ"/>
                                             </constraints>
                                         </imageView>
                                         <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="TyX-PE-eAC">
@@ -310,17 +355,17 @@
                                     </subviews>
                                     <color key="backgroundColor" red="0.21176470588235294" green="0.19215686274509802" blue="0.1803921568627451" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                     <constraints>
-                                        <constraint firstItem="ZiT-fi-dat" firstAttribute="leading" secondItem="6eJ-gf-jfD" secondAttribute="leading" constant="20" id="2ao-cP-pBS"/>
-                                        <constraint firstItem="3bj-Vm-uCl" firstAttribute="leading" secondItem="6eJ-gf-jfD" secondAttribute="leading" constant="20" id="4Er-N0-zgq"/>
-                                        <constraint firstAttribute="trailing" secondItem="TyX-PE-eAC" secondAttribute="trailing" constant="20" id="8oS-7V-2F2"/>
-                                        <constraint firstItem="0G2-KM-Ray" firstAttribute="top" secondItem="ZiT-fi-dat" secondAttribute="bottom" constant="18" id="Oxe-Rs-EIo"/>
-                                        <constraint firstItem="TyX-PE-eAC" firstAttribute="top" secondItem="6eJ-gf-jfD" secondAttribute="top" constant="20" id="St4-Gz-00n"/>
-                                        <constraint firstItem="ZiT-fi-dat" firstAttribute="top" secondItem="3bj-Vm-uCl" secondAttribute="bottom" constant="8" id="W4y-As-V40"/>
-                                        <constraint firstAttribute="height" constant="211" id="bm2-cb-Vyd"/>
-                                        <constraint firstItem="TyX-PE-eAC" firstAttribute="leading" secondItem="6eJ-gf-jfD" secondAttribute="leading" constant="20" id="pnF-yP-TUZ"/>
-                                        <constraint firstAttribute="bottom" secondItem="TyX-PE-eAC" secondAttribute="bottom" constant="20" id="wp5-oV-rnv"/>
-                                        <constraint firstItem="0G2-KM-Ray" firstAttribute="centerX" secondItem="6eJ-gf-jfD" secondAttribute="centerX" id="yvg-kN-E00"/>
-                                        <constraint firstItem="3bj-Vm-uCl" firstAttribute="top" secondItem="6eJ-gf-jfD" secondAttribute="top" constant="21" id="zDJ-we-To8"/>
+                                        <constraint firstAttribute="height" constant="211" id="BX1-xg-1gB"/>
+                                        <constraint firstAttribute="bottom" secondItem="TyX-PE-eAC" secondAttribute="bottom" constant="20" id="Cdz-wW-CHu"/>
+                                        <constraint firstItem="TyX-PE-eAC" firstAttribute="top" secondItem="6eJ-gf-jfD" secondAttribute="top" constant="20" id="DYf-Sd-Sfr"/>
+                                        <constraint firstItem="0G2-KM-Ray" firstAttribute="centerX" secondItem="6eJ-gf-jfD" secondAttribute="centerX" id="MON-lA-DoW"/>
+                                        <constraint firstAttribute="trailing" secondItem="TyX-PE-eAC" secondAttribute="trailing" constant="20" id="Pja-6U-xfO"/>
+                                        <constraint firstItem="ZiT-fi-dat" firstAttribute="top" secondItem="3bj-Vm-uCl" secondAttribute="bottom" constant="8" id="axZ-kj-LAn"/>
+                                        <constraint firstItem="ZiT-fi-dat" firstAttribute="leading" secondItem="6eJ-gf-jfD" secondAttribute="leading" constant="21" id="e4C-re-ayE"/>
+                                        <constraint firstItem="TyX-PE-eAC" firstAttribute="leading" secondItem="6eJ-gf-jfD" secondAttribute="leading" constant="20" id="ipN-WJ-Gaz"/>
+                                        <constraint firstItem="3bj-Vm-uCl" firstAttribute="leading" secondItem="6eJ-gf-jfD" secondAttribute="leading" constant="20" id="sQP-qW-X0r"/>
+                                        <constraint firstItem="3bj-Vm-uCl" firstAttribute="top" secondItem="6eJ-gf-jfD" secondAttribute="top" constant="21" id="v2n-M2-TZH"/>
+                                        <constraint firstItem="0G2-KM-Ray" firstAttribute="top" secondItem="ZiT-fi-dat" secondAttribute="bottom" constant="18" id="xxM-0d-Mf2"/>
                                     </constraints>
                                     <userDefinedRuntimeAttributes>
                                         <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
@@ -334,22 +379,25 @@
                                 <constraint firstAttribute="trailing" secondItem="obS-bj-agt" secondAttribute="trailing" id="Fp0-bo-dJP"/>
                                 <constraint firstItem="Mdn-AQ-I8p" firstAttribute="top" secondItem="obS-bj-agt" secondAttribute="bottom" constant="20" id="HVG-kB-cTt"/>
                                 <constraint firstItem="obS-bj-agt" firstAttribute="top" secondItem="ire-nL-N9x" secondAttribute="top" id="HsO-s6-l7h"/>
-                                <constraint firstAttribute="trailing" secondItem="6eJ-gf-jfD" secondAttribute="trailing" constant="15" id="NaN-5q-iJV"/>
-                                <constraint firstItem="jJu-2o-jKp" firstAttribute="width" secondItem="6eJ-gf-jfD" secondAttribute="width" id="NgN-V1-mYG"/>
+                                <constraint firstItem="Jve-BG-5J7" firstAttribute="leading" secondItem="BOF-BH-jPr" secondAttribute="trailing" constant="5" id="Nso-Vp-3og"/>
                                 <constraint firstAttribute="trailing" secondItem="Mdn-AQ-I8p" secondAttribute="trailing" constant="15" id="OPw-0s-Jgk"/>
-                                <constraint firstItem="6eJ-gf-jfD" firstAttribute="leading" secondItem="jJu-2o-jKp" secondAttribute="trailing" constant="5" id="Oiv-By-bqi"/>
                                 <constraint firstItem="Jve-BG-5J7" firstAttribute="width" secondItem="Mdn-AQ-I8p" secondAttribute="width" id="POr-HD-leU"/>
                                 <constraint firstAttribute="height" constant="750" id="Uk1-43-dGS"/>
-                                <constraint firstItem="6eJ-gf-jfD" firstAttribute="top" secondItem="Jve-BG-5J7" secondAttribute="bottom" constant="5" id="UuN-Zt-WhS"/>
+                                <constraint firstItem="BOF-BH-jPr" firstAttribute="top" secondItem="4a7-TG-aBk" secondAttribute="bottom" constant="5" id="X5S-8l-UHp"/>
                                 <constraint firstAttribute="trailing" secondItem="Jve-BG-5J7" secondAttribute="trailing" constant="15" id="Yqj-s9-DdD"/>
                                 <constraint firstItem="4a7-TG-aBk" firstAttribute="top" secondItem="obS-bj-agt" secondAttribute="bottom" constant="20" id="ZeU-p5-ZEx"/>
                                 <constraint firstItem="4a7-TG-aBk" firstAttribute="leading" secondItem="ire-nL-N9x" secondAttribute="leading" constant="15" id="apO-Zv-kfo"/>
+                                <constraint firstItem="jJu-2o-jKp" firstAttribute="top" secondItem="BOF-BH-jPr" secondAttribute="bottom" constant="5" id="az9-4P-QN7"/>
+                                <constraint firstAttribute="trailing" secondItem="6eJ-gf-jfD" secondAttribute="trailing" constant="15" id="dFV-k5-EFe"/>
                                 <constraint firstItem="Jve-BG-5J7" firstAttribute="leading" secondItem="4a7-TG-aBk" secondAttribute="trailing" constant="5" id="elU-kM-Bzh"/>
+                                <constraint firstItem="jJu-2o-jKp" firstAttribute="width" secondItem="6eJ-gf-jfD" secondAttribute="width" id="g1F-GS-anS"/>
+                                <constraint firstItem="6eJ-gf-jfD" firstAttribute="top" secondItem="Jve-BG-5J7" secondAttribute="bottom" constant="5" id="gjj-an-F3k"/>
                                 <constraint firstItem="Jve-BG-5J7" firstAttribute="top" secondItem="Mdn-AQ-I8p" secondAttribute="bottom" constant="5" id="iBE-3F-234"/>
+                                <constraint firstItem="6eJ-gf-jfD" firstAttribute="leading" secondItem="BOF-BH-jPr" secondAttribute="trailing" constant="5" id="jND-b2-AbN"/>
                                 <constraint firstItem="4a7-TG-aBk" firstAttribute="width" secondItem="Mdn-AQ-I8p" secondAttribute="width" id="klK-g3-Qjc"/>
                                 <constraint firstItem="Mdn-AQ-I8p" firstAttribute="leading" secondItem="4a7-TG-aBk" secondAttribute="trailing" constant="5" id="lCm-uy-dIr"/>
-                                <constraint firstItem="jJu-2o-jKp" firstAttribute="leading" secondItem="ire-nL-N9x" secondAttribute="leading" constant="15" id="tjx-ZG-bEu"/>
-                                <constraint firstItem="jJu-2o-jKp" firstAttribute="top" secondItem="4a7-TG-aBk" secondAttribute="bottom" constant="5" id="wnb-4y-8cB"/>
+                                <constraint firstItem="jJu-2o-jKp" firstAttribute="leading" secondItem="ire-nL-N9x" secondAttribute="leading" constant="15" id="npX-HH-YwX"/>
+                                <constraint firstItem="BOF-BH-jPr" firstAttribute="leading" secondItem="ire-nL-N9x" secondAttribute="leading" constant="15" id="uwz-ze-hjL"/>
                                 <constraint firstItem="obS-bj-agt" firstAttribute="leading" secondItem="ire-nL-N9x" secondAttribute="leading" id="xez-sG-l5Q"/>
                             </constraints>
                         </view>
@@ -384,6 +432,7 @@
         <image name="home_03" width="68" height="70"/>
         <image name="home_04" width="70.666664123535156" height="74.333335876464844"/>
         <image name="home_05" width="69.333335876464844" height="84.333335876464844"/>
+        <image name="home_06" width="75" height="69.333335876464844"/>
         <image name="home_right" width="16" height="16"/>
         <image name="home_right_o" width="16" height="16"/>
     </resources>

+ 10 - 1
JiaPeiManage/Sources/Modulars/Mine/Controllers/MineViewController.swift

@@ -32,6 +32,10 @@ final class MineViewController: BaseViewController {
     @IBOutlet weak var schoolname_label: UILabel!
     //驾校地址
     @IBOutlet weak var school_address_label: UILabel!
+    //退出登录
+    @IBOutlet weak var quit_button: UIButton!
+    
+    
     override func viewDidLoad() {
         super.viewDidLoad()
         setupUI()
@@ -53,11 +57,16 @@ final class MineViewController: BaseViewController {
         update_password_button.rx.tap.subscribe ({  [unowned self] (_) in
             NYSwRouter.push(NYSwPushType.mine_uppassword.path)
         }).disposed(by: disposeBag)
+        quit_button.rx.tap.subscribe ({  [unowned self] (_) in
+            LocalManager.userInfo.isLogin = false //设置已经登录
+            print("退出登录成功")
+            self.actionBackdo(quit_button)
+        }).disposed(by: disposeBag)
     }
     //绑定-rx
     func biandView(){
         //用户头像
-        self.user_icon_imageview.sd_setImage(with: LocalManager.userInfo.photoPath.urlValue)
+        self.user_icon_imageview.sd_setImage(with: LocalManager.userInfo.photoPath.urlValue, placeholderImage: LocalManager.userInfo.sex == "1" ? NYImage.Mine.usermale:NYImage.Mine.userfemale)
         //用户名
         self.user_name_label.text = LocalManager.userInfo.name
         //性别

+ 22 - 2
JiaPeiManage/Sources/Modulars/Mine/Controllers/MineViewController.xib

@@ -13,6 +13,7 @@
             <connections>
                 <outlet property="idcarid_label" destination="3jH-Zi-tbR" id="xIQ-BW-unT"/>
                 <outlet property="phone_label" destination="Rgf-bc-AwE" id="l0s-Ze-PAc"/>
+                <outlet property="quit_button" destination="1Zd-UI-9fQ" id="F6H-2Z-BKz"/>
                 <outlet property="school_address_label" destination="fJC-Qf-3Nv" id="C7z-R9-ERM"/>
                 <outlet property="schoolname_label" destination="h6R-dN-eLm" id="Si0-F8-vLI"/>
                 <outlet property="update_password_button" destination="BM3-xf-AcJ" id="zkl-E6-hkN"/>
@@ -72,8 +73,24 @@
                     <rect key="frame" x="0.0" y="64" width="375" height="714"/>
                     <subviews>
                         <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="qwc-OV-SUa" userLabel="View-content">
-                            <rect key="frame" x="0.0" y="0.0" width="375" height="450"/>
+                            <rect key="frame" x="0.0" y="0.0" width="375" height="600"/>
                             <subviews>
+                                <button opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="1Zd-UI-9fQ">
+                                    <rect key="frame" x="43" y="526" width="289" height="34"/>
+                                    <color key="backgroundColor" red="0.20784313730000001" green="0.74901960779999999" blue="0.36862745099999999" alpha="1" colorSpace="calibratedRGB"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="34" id="jHN-qI-pSh"/>
+                                    </constraints>
+                                    <state key="normal" title="退出登录"/>
+                                    <userDefinedRuntimeAttributes>
+                                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                            <real key="value" value="5"/>
+                                        </userDefinedRuntimeAttribute>
+                                        <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
+                                            <real key="value" value="0.0"/>
+                                        </userDefinedRuntimeAttribute>
+                                    </userDefinedRuntimeAttributes>
+                                </button>
                                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="r8b-Dg-5b7" userLabel="View-header">
                                     <rect key="frame" x="0.0" y="0.0" width="375" height="204"/>
                                     <subviews>
@@ -295,6 +312,7 @@
                             </subviews>
                             <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                             <constraints>
+                                <constraint firstAttribute="bottom" secondItem="1Zd-UI-9fQ" secondAttribute="bottom" constant="40" id="8TA-u0-1oY"/>
                                 <constraint firstItem="r8b-Dg-5b7" firstAttribute="leading" secondItem="qwc-OV-SUa" secondAttribute="leading" id="8rb-T1-PkG"/>
                                 <constraint firstAttribute="trailing" secondItem="vUj-bc-Qkc" secondAttribute="trailing" id="9Ci-5K-9qf"/>
                                 <constraint firstItem="vUj-bc-Qkc" firstAttribute="top" secondItem="XYn-ij-vdD" secondAttribute="bottom" id="ISW-lz-c6f"/>
@@ -302,14 +320,16 @@
                                 <constraint firstItem="pSR-n7-hdU" firstAttribute="top" secondItem="xO6-Xp-G2S" secondAttribute="bottom" id="Nwu-r9-YyB"/>
                                 <constraint firstAttribute="trailing" secondItem="XYn-ij-vdD" secondAttribute="trailing" id="QZw-lc-twQ"/>
                                 <constraint firstAttribute="trailing" secondItem="xO6-Xp-G2S" secondAttribute="trailing" id="RxM-Jw-XGd"/>
+                                <constraint firstItem="1Zd-UI-9fQ" firstAttribute="leading" secondItem="qwc-OV-SUa" secondAttribute="leading" constant="43" id="SCL-qw-kIB"/>
                                 <constraint firstItem="r8b-Dg-5b7" firstAttribute="top" secondItem="qwc-OV-SUa" secondAttribute="top" id="Skm-NX-egX"/>
                                 <constraint firstAttribute="trailing" secondItem="r8b-Dg-5b7" secondAttribute="trailing" id="V2V-cj-fZ4"/>
                                 <constraint firstItem="pSR-n7-hdU" firstAttribute="leading" secondItem="qwc-OV-SUa" secondAttribute="leading" id="Y22-eb-Jrx"/>
-                                <constraint firstAttribute="height" constant="450" id="a2p-nD-RN8"/>
+                                <constraint firstAttribute="height" constant="600" id="a2p-nD-RN8"/>
                                 <constraint firstAttribute="trailing" secondItem="pSR-n7-hdU" secondAttribute="trailing" id="eFH-0v-Ar8"/>
                                 <constraint firstItem="XYn-ij-vdD" firstAttribute="top" secondItem="pSR-n7-hdU" secondAttribute="bottom" id="kQT-cU-z3z"/>
                                 <constraint firstItem="xO6-Xp-G2S" firstAttribute="top" secondItem="r8b-Dg-5b7" secondAttribute="bottom" constant="-5" id="zWp-aw-iYB"/>
                                 <constraint firstItem="XYn-ij-vdD" firstAttribute="leading" secondItem="qwc-OV-SUa" secondAttribute="leading" id="zle-9z-qX0"/>
+                                <constraint firstAttribute="trailing" secondItem="1Zd-UI-9fQ" secondAttribute="trailing" constant="43" id="zrg-WR-qBL"/>
                                 <constraint firstItem="xO6-Xp-G2S" firstAttribute="leading" secondItem="qwc-OV-SUa" secondAttribute="leading" id="zwc-OD-lDY"/>
                             </constraints>
                         </view>

+ 19 - 0
JiaPeiManage/Sources/Modulars/Statistics/Controllers/StatisticsPageController.swift

@@ -0,0 +1,19 @@
+//
+//  StatisticsPageController.swift
+//  JiaPeiManage
+//
+//  Created by Ning.ge on 2023/6/26.
+//
+
+import UIKit
+import RxSwift
+import RxCocoa
+
+final class StatisticsPageController: BaseViewController {
+
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        
+    }
+    
+}

+ 31 - 0
JiaPeiManage/Sources/Modulars/Statistics/Controllers/StatisticsPageController.xib

@@ -0,0 +1,31 @@
+<?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="System colors in document resources" minToolsVersion="11.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="StatisticsPageController" customModule="JiaPeiManage" customModuleProvider="target">
+            <connections>
+                <outlet property="view" destination="iN0-l3-epB" id="dCx-tj-GFW"/>
+            </connections>
+        </placeholder>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB">
+            <rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
+            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+            <point key="canvasLocation" x="66" y="-12"/>
+        </view>
+    </objects>
+    <resources>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

+ 2 - 0
JiaPeiManage/Sources/Networking/Networking.swift

@@ -11,6 +11,8 @@ import Alamofire
 
 typealias CoachNetworking = Networking<CoachAPI>
 typealias LoginNetworking = Networking<LoginAPI>
+typealias StatisticsNetworking = Networking<StatisticsAPI>
+
 
 final class Networking<Target: TargetType>: MoyaProvider<Target> {
     

+ 117 - 0
JiaPeiManage/Sources/Services/StatisticsAPI.swift

@@ -0,0 +1,117 @@
+//
+//  StatisticsAPI.swift
+//  JiaPeiManage
+//
+//  Created by Ning.ge on 2023/6/26.
+//
+
+import Moya
+import SwiftyUserDefaults
+
+enum StatisticsAPI {
+    
+    //查询每日报名数
+    case loginUser(user_name:String, user_password:String ,city:String)
+    //查询每月报名数
+    case updateUser(user_name:String, user_password:String, new_password:String,city:String)
+    //查询每年报名数
+    case dictUser(dictType:String)
+    //查询驾校ID 报名数
+    
+}
+
+extension StatisticsAPI: TargetType {
+    
+    var isShowLoading:Bool { return true }
+    var baseURL: URL {
+        switch self {
+        case .loginUser,.updateUser,.dictUser:
+            return URL(string: HttpRequest.api.path)!
+        }
+    }
+    
+    var path: String {
+        switch self {
+        case .loginUser(_,_,_):
+            return "/jsjp-admin/open-api/tms/coachInfo/coachInfoLogin"
+        case .updateUser(_,_,_,_):
+            return "/jsjp-admin/open-api/tms/coachInfo/updateCoachPassword"
+        case .dictUser(_):
+            if let parameters = parameters {
+                return "/jsjp-admin/open-api/gzpt/userInfo/type/\(parameters["dictType"] ?? "")"
+            }
+            return ""
+        }
+    }
+    
+    var method: Moya.Method {
+        switch self {
+        case .loginUser,.dictUser:
+            return .get
+        case .updateUser:
+            return .put
+        default:
+            return .get
+        }
+    }
+    
+    var sampleData: Data {
+        return Data()
+    }
+    
+    var task: Moya.Task {
+        switch self {
+        case .loginUser(_,_,_):
+            if let parameters = parameters {
+                return .requestParameters(parameters: parameters, encoding: URLEncoding.default)
+            }
+            return .requestPlain
+        case .updateUser(_,_,_,_):
+            if let parameters = parameters {
+                return .requestParameters(parameters: parameters, encoding: URLEncoding.default)
+            }
+            return .requestPlain
+        case .dictUser(_):
+            return .requestPlain
+        }
+    }
+    
+    var headers: [String: String]? {
+        switch self {
+        case .updateUser:
+            return ["Content-Type":"application/x-www-form-urlencoded"]
+        default:
+            return ["Content-Type":"application/json"]
+        }
+    }
+    
+    var parameters: [String : Any]? {
+        switch self {
+        case let .loginUser(user_name, user_password,city):
+            
+            return ["city": city,
+                    "idcard": user_name,
+                    "password":user_password,]
+        case let .updateUser(user_name, user_password,new_password, city):
+            return ["city": city,
+                    "idcard": user_name,
+                    "password":user_password,
+                    "newPassword":new_password,]
+        case let .dictUser(dictType):
+            return ["dictType": dictType]
+        default:
+            return nil
+        }
+    }
+    
+    var urlParameters: [String: Any]? {
+        var parameters = parameters
+//        if let extendsParameters = ["":""] {
+//            parameters = parameters?.merging(extendsParameters) { $1 } //组合
+//        }
+        return parameters
+    }
+    
+    
+    
+}

+ 48 - 0
JiaPeiManage/Sources/Services/StatisticsService.swift

@@ -0,0 +1,48 @@
+//
+//  StatisticsService.swift
+//  JiaPeiManage
+//
+//  Created by Ning.ge on 2023/6/26.
+//
+
+import RxSwift
+import RxCocoa
+import SwiftyJSON
+
+protocol StatisticsServiceType {
+
+    func loginRequest(user_name: String, user_password: String, city:String) -> Single<UserInfo>
+    
+    func updateRequest(user_name: String, user_password: String,new_password: String, city:String) -> Single<UpdateDataModel>
+    
+    func dictRequest(dictType:String) -> Single<[CityItem]>
+    
+}
+
+final class StatisticsService: StatisticsServiceType {
+
+    private let networking : StatisticsNetworking
+    
+    init(networking: StatisticsNetworking) {
+        self.networking = networking
+    }
+    
+    //登录
+    func loginRequest(user_name: String, user_password: String,city:String) -> RxSwift.Single<UserInfo> {
+        
+        let api = StatisticsAPI.loginUser(user_name: user_name, user_password: user_password,city: city)
+        return networking.request(api).map(UserInfo.self)
+    }
+    
+    //修改密码
+    func updateRequest(user_name: String, user_password: String, new_password: String, city: String) -> RxSwift.Single<UpdateDataModel> {
+        let api = StatisticsAPI.updateUser(user_name: user_name, user_password: user_password, new_password: new_password, city: city)
+        return networking.request(api).map(UpdateDataModel.self, isModel: true)
+    }
+    
+    //获取地区字典
+    func dictRequest(dictType: String) -> RxSwift.Single<[CityItem]> {
+        let api = StatisticsAPI.dictUser(dictType: dictType)
+        return networking.request(api).map(CityItem.self)
+    }
+}

+ 8 - 0
JiaPeiManage/Sources/Utils/LocalManager.swift

@@ -20,6 +20,14 @@ class LocalManager {
     class func clearUserInfo() {
         
         
+    }
+    //判断是否登录了
+    static func isOpenLogin()->Bool{
+        if !LocalManager.userInfo.isLogin {
+            NYSwRouter.open(NYSwOpenType.login.rawValue)
+            return false
+        }
+        return true
     }
     
     //自动登录

+ 3 - 1
JiaPeiManage/Sources/Utils/NYSwRouter.swift

@@ -17,6 +17,7 @@ enum NYSwPushType {
     case mine_center
     case mine_uppassword
     case trainee_list_school
+    case trainee_statistics
 }
 
 
@@ -43,7 +44,8 @@ extension NYSwPushType {
             return "JiaPeiManage://mine/center"
         case .mine_uppassword:
             return "JiaPeiManage://mine/updatepassword"
-
+        case .trainee_statistics:
+            return "JiaPeiManage://me/trainee/statistics"
         }
     }
 }

+ 5 - 0
JiaPeiManage/Sources/Utils/URLNavigationMap.swift

@@ -26,6 +26,11 @@ final class URLNavigationMap {
             return meTraineeSearchPageViewController
         }
         
+        navigator.register(NYSwPushType.trainee_statistics.path) { (url, values, context) -> UIViewController? in
+            let statisticsPageController = StatisticsPageController(nibName: "StatisticsPageController")
+            return statisticsPageController
+        }
+        
         navigator.register(NYSwPushType.trainee_list.path) { (url, values, context) -> UIViewController? in
             let meTraineeListViewController = MeTraineeListViewController(type: .none)
             return meTraineeListViewController