Просмотр исходного кода

个人信息页面-基本信息

openlockPPP 1 год назад
Родитель
Сommit
f5675f961d
56 измененных файлов с 3392 добавлено и 1995 удалено
  1. 66 4
      JiaPeiManage.xcodeproj/project.pbxproj
  2. 1 1
      JiaPeiManage.xcodeproj/xcuserdata/mimasigeling.xcuserdatad/xcschemes/xcschememanagement.plist
  3. 23 0
      JiaPeiManage/Assets.xcassets/Modules/Stu/set_btn_nor.imageset/Contents.json
  4. BIN
      JiaPeiManage/Assets.xcassets/Modules/Stu/set_btn_nor.imageset/set_btn_nor.png
  5. BIN
      JiaPeiManage/Assets.xcassets/Modules/Stu/set_btn_nor.imageset/set_btn_nor@2x.png
  6. BIN
      JiaPeiManage/Assets.xcassets/Modules/Stu/set_btn_nor.imageset/set_btn_nor@3x.png
  7. 23 0
      JiaPeiManage/Assets.xcassets/Modules/Stu/set_btn_sel.imageset/Contents.json
  8. BIN
      JiaPeiManage/Assets.xcassets/Modules/Stu/set_btn_sel.imageset/set_btn_sel.png
  9. BIN
      JiaPeiManage/Assets.xcassets/Modules/Stu/set_btn_sel.imageset/set_btn_sel@2x.png
  10. BIN
      JiaPeiManage/Assets.xcassets/Modules/Stu/set_btn_sel.imageset/set_btn_sel@3x.png
  11. 23 0
      JiaPeiManage/Assets.xcassets/Modules/Stu/stu_block.imageset/Contents.json
  12. BIN
      JiaPeiManage/Assets.xcassets/Modules/Stu/stu_block.imageset/矩形 712.png
  13. BIN
      JiaPeiManage/Assets.xcassets/Modules/Stu/stu_block.imageset/矩形 712@2x.png
  14. BIN
      JiaPeiManage/Assets.xcassets/Modules/Stu/stu_block.imageset/矩形 712@3x.png
  15. 23 0
      JiaPeiManage/Assets.xcassets/Modules/Stu/stu_phone.imageset/Contents.json
  16. BIN
      JiaPeiManage/Assets.xcassets/Modules/Stu/stu_phone.imageset/手机.png
  17. BIN
      JiaPeiManage/Assets.xcassets/Modules/Stu/stu_phone.imageset/手机@2x.png
  18. BIN
      JiaPeiManage/Assets.xcassets/Modules/Stu/stu_phone.imageset/手机@3x.png
  19. 23 0
      JiaPeiManage/Assets.xcassets/Modules/Stu/减去 38.imageset/Contents.json
  20. BIN
      JiaPeiManage/Assets.xcassets/Modules/Stu/减去 38.imageset/减去 38.png
  21. BIN
      JiaPeiManage/Assets.xcassets/Modules/Stu/减去 38.imageset/减去 38@2x.png
  22. BIN
      JiaPeiManage/Assets.xcassets/Modules/Stu/减去 38.imageset/减去 38@3x.png
  23. 23 0
      JiaPeiManage/Assets.xcassets/Modules/Stu/路径 5187.imageset/Contents.json
  24. BIN
      JiaPeiManage/Assets.xcassets/Modules/Stu/路径 5187.imageset/路径 5187.png
  25. BIN
      JiaPeiManage/Assets.xcassets/Modules/Stu/路径 5187.imageset/路径 5187@2x.png
  26. BIN
      JiaPeiManage/Assets.xcassets/Modules/Stu/路径 5187.imageset/路径 5187@3x.png
  27. 1 0
      JiaPeiManage/JSJP-Brigding-Header.h
  28. 3 0
      JiaPeiManage/Sources/Constants/NYImage.swift
  29. 4 1
      JiaPeiManage/Sources/Main/App/CompositionRoot.swift
  30. 103 0
      JiaPeiManage/Sources/Models/TraineeInfoModel.swift
  31. 143 0
      JiaPeiManage/Sources/Modulars/学员/Controllers/MeTraineeDetails/MeTraineeDetails01Controller.swift
  32. 100 0
      JiaPeiManage/Sources/Modulars/学员/Controllers/MeTraineeDetails/MeTraineeDetails02Controller.swift
  33. 108 0
      JiaPeiManage/Sources/Modulars/学员/Controllers/MeTraineeDetails/MeTraineeDetails03Controller.swift
  34. 108 0
      JiaPeiManage/Sources/Modulars/学员/Controllers/MeTraineeDetails/MeTraineeDetails04Controller.swift
  35. 218 0
      JiaPeiManage/Sources/Modulars/学员/Controllers/MeTraineeDetailsPageViewController.swift
  36. 90 5
      JiaPeiManage/Sources/Modulars/学员/Controllers/MeTraineeDetailsPageViewController.xib
  37. 4 2
      JiaPeiManage/Sources/Modulars/学员/Controllers/MeTraineeListViewController.swift
  38. 2 1
      JiaPeiManage/Sources/Modulars/学员/Controllers/MeTraineeSearchPageViewController.swift
  39. 3 2
      JiaPeiManage/Sources/Modulars/学员/Controllers/MeTraineeSubjectPageViewController.swift
  40. 20 0
      JiaPeiManage/Sources/Modulars/学员/Views/MeTraineeDetails01Cell.swift
  41. 54 0
      JiaPeiManage/Sources/Modulars/学员/Views/MeTraineeDetails01Cell.xib
  42. 19 0
      JiaPeiManage/Sources/Modulars/学员/Views/MeTraineeDetails01HeaderView.swift
  43. 53 0
      JiaPeiManage/Sources/Modulars/学员/Views/MeTraineeDetails01HeaderView.xib
  44. 1 1
      JiaPeiManage/Sources/Modulars/学员/Views/MeTraineeSubjectCell.swift
  45. 10 4
      JiaPeiManage/Sources/Services/CoachAPI.swift
  46. 7 0
      JiaPeiManage/Sources/Services/CoachService.swift
  47. 3 1
      JiaPeiManage/Sources/Utils/URLNavigationMap.swift
  48. 6 0
      Podfile
  49. 14 1
      Podfile.lock
  50. 14 1
      Pods/Manifest.lock
  51. 2026 1967
      Pods/Pods.xcodeproj/project.pbxproj
  52. 25 4
      Pods/Pods.xcodeproj/xcuserdata/mimasigeling.xcuserdatad/xcschemes/xcschememanagement.plist
  53. 15 0
      Pods/Target Support Files/Pods-JiaPeiManage/Pods-JiaPeiManage-acknowledgements.markdown
  54. 33 0
      Pods/Target Support Files/Pods-JiaPeiManage/Pods-JiaPeiManage-acknowledgements.plist
  55. 0 0
      Pods/Target Support Files/Pods-JiaPeiManage/Pods-JiaPeiManage.debug.xcconfig
  56. 0 0
      Pods/Target Support Files/Pods-JiaPeiManage/Pods-JiaPeiManage.release.xcconfig

+ 66 - 4
JiaPeiManage.xcodeproj/project.pbxproj

@@ -7,6 +7,15 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
+		903628BB2A40431800F0AA6C /* TraineeInfoModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 903628BA2A40431800F0AA6C /* TraineeInfoModel.swift */; };
+		903628BE2A41766B00F0AA6C /* MeTraineeDetails01Controller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 903628BD2A41766B00F0AA6C /* MeTraineeDetails01Controller.swift */; };
+		903628C02A41767900F0AA6C /* MeTraineeDetails02Controller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 903628BF2A41767900F0AA6C /* MeTraineeDetails02Controller.swift */; };
+		903628C22A41768400F0AA6C /* MeTraineeDetails03Controller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 903628C12A41768400F0AA6C /* MeTraineeDetails03Controller.swift */; };
+		903628C42A41769300F0AA6C /* MeTraineeDetails04Controller.swift in Sources */ = {isa = PBXBuildFile; fileRef = 903628C32A41769300F0AA6C /* MeTraineeDetails04Controller.swift */; };
+		903628C62A417B1D00F0AA6C /* MeTraineeDetails01Cell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 903628C52A417B1D00F0AA6C /* MeTraineeDetails01Cell.swift */; };
+		903628C82A417B2D00F0AA6C /* MeTraineeDetails01Cell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 903628C72A417B2D00F0AA6C /* MeTraineeDetails01Cell.xib */; };
+		903628CA2A417BA800F0AA6C /* MeTraineeDetails01HeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 903628C92A417BA800F0AA6C /* MeTraineeDetails01HeaderView.swift */; };
+		903628CC2A417BE700F0AA6C /* MeTraineeDetails01HeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 903628CB2A417BE700F0AA6C /* MeTraineeDetails01HeaderView.xib */; };
 		9076C5DA2A386B2300E5E33F /* MineViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9076C5D92A386B2300E5E33F /* MineViewController.swift */; };
 		9076C5DC2A386B2F00E5E33F /* MineViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9076C5DB2A386B2F00E5E33F /* MineViewController.xib */; };
 		9076C5DF2A387CBC00E5E33F /* MeTraineeListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9076C5DE2A387CBC00E5E33F /* MeTraineeListViewController.swift */; };
@@ -127,6 +136,15 @@
 
 /* Begin PBXFileReference section */
 		1FC2879EF62A9D4DF6777C62 /* Pods_JiaPeiManage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_JiaPeiManage.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		903628BA2A40431800F0AA6C /* TraineeInfoModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TraineeInfoModel.swift; sourceTree = "<group>"; };
+		903628BD2A41766B00F0AA6C /* MeTraineeDetails01Controller.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeTraineeDetails01Controller.swift; sourceTree = "<group>"; };
+		903628BF2A41767900F0AA6C /* MeTraineeDetails02Controller.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeTraineeDetails02Controller.swift; sourceTree = "<group>"; };
+		903628C12A41768400F0AA6C /* MeTraineeDetails03Controller.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeTraineeDetails03Controller.swift; sourceTree = "<group>"; };
+		903628C32A41769300F0AA6C /* MeTraineeDetails04Controller.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeTraineeDetails04Controller.swift; sourceTree = "<group>"; };
+		903628C52A417B1D00F0AA6C /* MeTraineeDetails01Cell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeTraineeDetails01Cell.swift; sourceTree = "<group>"; };
+		903628C72A417B2D00F0AA6C /* MeTraineeDetails01Cell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MeTraineeDetails01Cell.xib; sourceTree = "<group>"; };
+		903628C92A417BA800F0AA6C /* MeTraineeDetails01HeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeTraineeDetails01HeaderView.swift; sourceTree = "<group>"; };
+		903628CB2A417BE700F0AA6C /* MeTraineeDetails01HeaderView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MeTraineeDetails01HeaderView.xib; sourceTree = "<group>"; };
 		9076C5D92A386B2300E5E33F /* MineViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MineViewController.swift; sourceTree = "<group>"; };
 		9076C5DB2A386B2F00E5E33F /* MineViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MineViewController.xib; sourceTree = "<group>"; };
 		9076C5DE2A387CBC00E5E33F /* MeTraineeListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeTraineeListViewController.swift; sourceTree = "<group>"; };
@@ -270,6 +288,17 @@
 			path = Pods;
 			sourceTree = "<group>";
 		};
+		903628BC2A41762B00F0AA6C /* MeTraineeDetails */ = {
+			isa = PBXGroup;
+			children = (
+				903628BD2A41766B00F0AA6C /* MeTraineeDetails01Controller.swift */,
+				903628BF2A41767900F0AA6C /* MeTraineeDetails02Controller.swift */,
+				903628C12A41768400F0AA6C /* MeTraineeDetails03Controller.swift */,
+				903628C32A41769300F0AA6C /* MeTraineeDetails04Controller.swift */,
+			);
+			path = MeTraineeDetails;
+			sourceTree = "<group>";
+		};
 		9076C5D52A38694000E5E33F /* Controllers */ = {
 			isa = PBXGroup;
 			children = (
@@ -293,6 +322,7 @@
 		9076C5D72A386B0300E5E33F /* Controllers */ = {
 			isa = PBXGroup;
 			children = (
+				903628BC2A41762B00F0AA6C /* MeTraineeDetails */,
 				9076C5DE2A387CBC00E5E33F /* MeTraineeListViewController.swift */,
 				909DA5C82A3ABEFF0034501F /* MeTraineeSubjectPageViewController.swift */,
 				909DA5CA2A3ABFFD0034501F /* MeTraineeSearchPageViewController.swift */,
@@ -312,6 +342,10 @@
 				909DA5D42A3AE0160034501F /* MeTraineeSubjectCell.xib */,
 				90BC4BE42A3DDF33006FD683 /* MeTraineeSubjectHeaderView.swift */,
 				90BC4BE62A3DDF44006FD683 /* MeTraineeSubjectHeaderView.xib */,
+				903628C52A417B1D00F0AA6C /* MeTraineeDetails01Cell.swift */,
+				903628C72A417B2D00F0AA6C /* MeTraineeDetails01Cell.xib */,
+				903628C92A417BA800F0AA6C /* MeTraineeDetails01HeaderView.swift */,
+				903628CB2A417BE700F0AA6C /* MeTraineeDetails01HeaderView.xib */,
 			);
 			path = Views;
 			sourceTree = "<group>";
@@ -428,6 +462,7 @@
 				90CE52EC2A36EBE70033BD06 /* UserInfoModel.swift */,
 				909DA5C22A3A01220034501F /* CoachcityModel.swift */,
 				90BC4BD82A3B0F98006FD683 /* TraineeDataModel.swift */,
+				903628BA2A40431800F0AA6C /* TraineeInfoModel.swift */,
 			);
 			path = Models;
 			sourceTree = "<group>";
@@ -768,6 +803,7 @@
 				90CE52122A36C0700033BD06 /* Frameworks */,
 				90CE52132A36C0700033BD06 /* Resources */,
 				94AD79953AEB0BB6CFC0D4CD /* [CP] Embed Pods Frameworks */,
+				093DD7C2CB2D36F109B146C3 /* [CP] Copy Pods Resources */,
 			);
 			buildRules = (
 			);
@@ -824,6 +860,7 @@
 				909DA5D12A3AC2460034501F /* UpdatePasswordViewController.xib in Resources */,
 				90CE52222A36C0720033BD06 /* Assets.xcassets in Resources */,
 				9076C5DC2A386B2F00E5E33F /* MineViewController.xib in Resources */,
+				903628C82A417B2D00F0AA6C /* MeTraineeDetails01Cell.xib in Resources */,
 				90CE52202A36C0710033BD06 /* Main.storyboard in Resources */,
 				90CE52EB2A36E8680033BD06 /* LoginViewController.xib in Resources */,
 				909DA5D52A3AE0160034501F /* MeTraineeSubjectCell.xib in Resources */,
@@ -831,6 +868,7 @@
 				90CE53002A36F7110033BD06 /* HomeViewController.xib in Resources */,
 				90BC4BE72A3DDF44006FD683 /* MeTraineeSubjectHeaderView.xib in Resources */,
 				909DA5CD2A3AC00D0034501F /* MeTraineeSearchPageViewController.xib in Resources */,
+				903628CC2A417BE700F0AA6C /* MeTraineeDetails01HeaderView.xib in Resources */,
 				909DA5C72A3AA1FF0034501F /* MeTraineeNavBar.xib in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -838,6 +876,23 @@
 /* End PBXResourcesBuildPhase section */
 
 /* Begin PBXShellScriptBuildPhase section */
+		093DD7C2CB2D36F109B146C3 /* [CP] Copy Pods Resources */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputFileListPaths = (
+				"${PODS_ROOT}/Target Support Files/Pods-JiaPeiManage/Pods-JiaPeiManage-resources-${CONFIGURATION}-input-files.xcfilelist",
+			);
+			name = "[CP] Copy Pods Resources";
+			outputFileListPaths = (
+				"${PODS_ROOT}/Target Support Files/Pods-JiaPeiManage/Pods-JiaPeiManage-resources-${CONFIGURATION}-output-files.xcfilelist",
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-JiaPeiManage/Pods-JiaPeiManage-resources.sh\"\n";
+			showEnvVarsInLog = 0;
+		};
 		94AD79953AEB0BB6CFC0D4CD /* [CP] Embed Pods Frameworks */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 2147483647;
@@ -885,11 +940,13 @@
 			buildActionMask = 2147483647;
 			files = (
 				90CE52A22A36E59A0033BD06 /* UIColor+Hex.swift in Sources */,
+				903628C42A41769300F0AA6C /* MeTraineeDetails04Controller.swift in Sources */,
 				90CE52CA2A36E5EC0033BD06 /* UIScrollView+Rx.swift in Sources */,
 				90CE52F82A36F0BD0033BD06 /* LoginAPI.swift in Sources */,
 				909DA5CB2A3ABFFD0034501F /* MeTraineeSearchPageViewController.swift in Sources */,
 				90CE53022A3834060033BD06 /* CoachAPI.swift in Sources */,
 				90CE52D82A36E6000033BD06 /* URLNavigationMap.swift in Sources */,
+				903628BB2A40431800F0AA6C /* TraineeInfoModel.swift in Sources */,
 				90CE52752A36E5460033BD06 /* LWPlayerControlView.swift in Sources */,
 				90CE52A92A36E59A0033BD06 /* UIBarButtonItem+Init.swift in Sources */,
 				90CE528C2A36E5460033BD06 /* Action.swift in Sources */,
@@ -901,6 +958,7 @@
 				90CE52892A36E5460033BD06 /* PopOverViewCell.swift in Sources */,
 				90CE52332A36E4600033BD06 /* BaseViewController.swift in Sources */,
 				90CE52A32A36E59A0033BD06 /* UIImageView+Kingfisher.swift in Sources */,
+				903628C22A41768400F0AA6C /* MeTraineeDetails03Controller.swift in Sources */,
 				90CE527D2A36E5460033BD06 /* Refreshable.swift in Sources */,
 				90CE52472A36E5170033BD06 /* NYImage.swift in Sources */,
 				90CE52A42A36E59A0033BD06 /* DispatchQueue+Extension.swift in Sources */,
@@ -914,6 +972,7 @@
 				90CE52A82A36E59A0033BD06 /* UIScrollView+Direction.swift in Sources */,
 				90CE52CD2A36E5EC0033BD06 /* UIView+Rx.swift in Sources */,
 				90CE52AA2A36E59A0033BD06 /* UIBarButtonItem+FixSpace.swift in Sources */,
+				903628C02A41767900F0AA6C /* MeTraineeDetails02Controller.swift in Sources */,
 				90CE52B42A36E5A40033BD06 /* Logger.swift in Sources */,
 				90CE52EF2A36EC950033BD06 /* NYArticleViewController.swift in Sources */,
 				90CE52D72A36E6000033BD06 /* Snap.swift in Sources */,
@@ -940,6 +999,7 @@
 				90CE52772A36E5460033BD06 /* AVPlayer+LWPlayer.swift in Sources */,
 				90CE52FE2A36F6DB0033BD06 /* HomeViewController.swift in Sources */,
 				90CE52732A36E5460033BD06 /* LWPlayerView.swift in Sources */,
+				903628C62A417B1D00F0AA6C /* MeTraineeDetails01Cell.swift in Sources */,
 				90CE52442A36E5170033BD06 /* NYMacros.swift in Sources */,
 				90CE52192A36C0710033BD06 /* AppDelegate.swift in Sources */,
 				909DA5C32A3A01220034501F /* CoachcityModel.swift in Sources */,
@@ -951,6 +1011,7 @@
 				90CE52382A36E4720033BD06 /* MainNavigationController.swift in Sources */,
 				90CE52832A36E5460033BD06 /* SearchBarView.swift in Sources */,
 				9076C5DA2A386B2300E5E33F /* MineViewController.swift in Sources */,
+				903628CA2A417BA800F0AA6C /* MeTraineeDetails01HeaderView.swift in Sources */,
 				90CE52AC2A36E59A0033BD06 /* Array+SectionModel.swift in Sources */,
 				90CE52762A36E5460033BD06 /* LWPlayerSlider.swift in Sources */,
 				90BC4BD92A3B0F98006FD683 /* TraineeDataModel.swift in Sources */,
@@ -983,6 +1044,7 @@
 				90CE52DC2A36E6250033BD06 /* NYAppCongfigure.swift in Sources */,
 				90CE52322A36E4600033BD06 /* BaseCollectionViewController.swift in Sources */,
 				90CE52872A36E5460033BD06 /* NetAnimationView.swift in Sources */,
+				903628BE2A41766B00F0AA6C /* MeTraineeDetails01Controller.swift in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -1139,13 +1201,13 @@
 				INFOPLIST_KEY_UIMainStoryboardFile = Main;
 				INFOPLIST_KEY_UIRequiresFullScreen = YES;
 				INFOPLIST_KEY_UIStatusBarStyle = UIStatusBarStyleLightContent;
-				INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait";
+				INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
 				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
 				LD_RUNPATH_SEARCH_PATHS = (
 					"$(inherited)",
 					"@executable_path/Frameworks",
 				);
-				MARKETING_VERSION = 1.0.0;
+				MARKETING_VERSION = 1.0.1;
 				PRODUCT_BUNDLE_IDENTIFIER = zhongZheng.com.jsmanage.JiaPeiManage;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SWIFT_EMIT_LOC_STRINGS = YES;
@@ -1172,13 +1234,13 @@
 				INFOPLIST_KEY_UIMainStoryboardFile = Main;
 				INFOPLIST_KEY_UIRequiresFullScreen = YES;
 				INFOPLIST_KEY_UIStatusBarStyle = UIStatusBarStyleLightContent;
-				INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait";
+				INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
 				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
 				LD_RUNPATH_SEARCH_PATHS = (
 					"$(inherited)",
 					"@executable_path/Frameworks",
 				);
-				MARKETING_VERSION = 1.0.0;
+				MARKETING_VERSION = 1.0.1;
 				PRODUCT_BUNDLE_IDENTIFIER = zhongZheng.com.jsmanage.JiaPeiManage;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SWIFT_EMIT_LOC_STRINGS = YES;

+ 1 - 1
JiaPeiManage.xcodeproj/xcuserdata/mimasigeling.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -7,7 +7,7 @@
 		<key>JiaPeiManage.xcscheme_^#shared#^_</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>47</integer>
+			<integer>50</integer>
 		</dict>
 	</dict>
 </dict>

+ 23 - 0
JiaPeiManage/Assets.xcassets/Modules/Stu/set_btn_nor.imageset/Contents.json

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

BIN
JiaPeiManage/Assets.xcassets/Modules/Stu/set_btn_nor.imageset/set_btn_nor.png


BIN
JiaPeiManage/Assets.xcassets/Modules/Stu/set_btn_nor.imageset/set_btn_nor@2x.png


BIN
JiaPeiManage/Assets.xcassets/Modules/Stu/set_btn_nor.imageset/set_btn_nor@3x.png


+ 23 - 0
JiaPeiManage/Assets.xcassets/Modules/Stu/set_btn_sel.imageset/Contents.json

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

BIN
JiaPeiManage/Assets.xcassets/Modules/Stu/set_btn_sel.imageset/set_btn_sel.png


BIN
JiaPeiManage/Assets.xcassets/Modules/Stu/set_btn_sel.imageset/set_btn_sel@2x.png


BIN
JiaPeiManage/Assets.xcassets/Modules/Stu/set_btn_sel.imageset/set_btn_sel@3x.png


+ 23 - 0
JiaPeiManage/Assets.xcassets/Modules/Stu/stu_block.imageset/Contents.json

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

BIN
JiaPeiManage/Assets.xcassets/Modules/Stu/stu_block.imageset/矩形 712.png


BIN
JiaPeiManage/Assets.xcassets/Modules/Stu/stu_block.imageset/矩形 712@2x.png


BIN
JiaPeiManage/Assets.xcassets/Modules/Stu/stu_block.imageset/矩形 712@3x.png


+ 23 - 0
JiaPeiManage/Assets.xcassets/Modules/Stu/stu_phone.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/Stu/stu_phone.imageset/手机.png


BIN
JiaPeiManage/Assets.xcassets/Modules/Stu/stu_phone.imageset/手机@2x.png


BIN
JiaPeiManage/Assets.xcassets/Modules/Stu/stu_phone.imageset/手机@3x.png


+ 23 - 0
JiaPeiManage/Assets.xcassets/Modules/Stu/减去 38.imageset/Contents.json

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

BIN
JiaPeiManage/Assets.xcassets/Modules/Stu/减去 38.imageset/减去 38.png


BIN
JiaPeiManage/Assets.xcassets/Modules/Stu/减去 38.imageset/减去 38@2x.png


BIN
JiaPeiManage/Assets.xcassets/Modules/Stu/减去 38.imageset/减去 38@3x.png


+ 23 - 0
JiaPeiManage/Assets.xcassets/Modules/Stu/路径 5187.imageset/Contents.json

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

BIN
JiaPeiManage/Assets.xcassets/Modules/Stu/路径 5187.imageset/路径 5187.png


BIN
JiaPeiManage/Assets.xcassets/Modules/Stu/路径 5187.imageset/路径 5187@2x.png


BIN
JiaPeiManage/Assets.xcassets/Modules/Stu/路径 5187.imageset/路径 5187@3x.png


+ 1 - 0
JiaPeiManage/JSJP-Brigding-Header.h

@@ -12,5 +12,6 @@
 #import "VTMagic.h"
 #import <QMUIKit/QMUIKit.h>
 #import <SDWebImage/SDWebImage.h>
+#import <UMCommon/UMCommon.h>
 
 #endif /* JSJP_Brigding_Header_h */

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

@@ -26,6 +26,9 @@ struct NYImage {
         static let userfemale = UIImage(named: "default-user-female")
         static let sexmale = UIImage(named: "user-male")
         static let sexfemale = UIImage(named: "user-female")
+        static let stuBtnSel = UIImage(named: "set_btn_sel")
+        static let stuBtnNor = UIImage(named: "set_btn_nor")
+        
         
         static let shopping = UIImage(named: "home_shopping")
         static let search_rec = UIImage(named: "home_search_rec")

+ 4 - 1
JiaPeiManage/Sources/Main/App/CompositionRoot.swift

@@ -72,8 +72,11 @@ final class CompositionRoot {
             openURL: self.openURLFactory(navigator: navigator)
         )
     }
+    
     static func configureSDKs() {
-        
+        //友盟 UM_APPKEY
+        UMConfigure.setLogEnabled(true)
+        UMConfigure.initWithAppkey(NYMacros.appMenKey, channel: "App Store")
     }
     
     static func configureAppearance() {

+ 103 - 0
JiaPeiManage/Sources/Models/TraineeInfoModel.swift

@@ -0,0 +1,103 @@
+//
+//  TraineeInfoModel.swift
+//  JiaPeiManage
+//
+//  Created by Ning.ge on 2023/6/19.
+//
+
+import ObjectMapper
+
+struct TraineeInfoModel : ImmutableMappable{
+    
+    var active : String!
+    var address : String!
+    var cardType : String!
+    var dqbh : String!
+    var dqmc : String!
+    var face : String!
+    var id : String!
+    var idcard : String!
+    var k1 : String!
+    var k2 : String!
+    var k2Mileage : String!
+    var k3 : String!
+    var k3Mileage : String!
+    var k4 : String!
+    var mileage : String!
+    var name : String!
+    var nationality : String!
+    var phone : String!
+    var photoPath : String!
+    var qxbh : String!
+    var qxmc : String!
+    var recordDate : String!
+    var schollInscode : String!
+    var schoolAddress : String!
+    var schoolId : Int!
+    var schoolName : String!
+    var schoolShortName : String!
+    var sex : String!
+    var source : String!
+    var totalKm1 : String!
+    var totalKm2 : String!
+    var totalKm3 : String!
+    var totalKm4 : String!
+    var trainFourExamStatus : String!
+    var trainFourExamTime : String!
+    var trainOneExamStatus : String!
+    var trainOneExamTime : String!
+    var trainThreeExamStatus : String!
+    var trainThreeExamTime : String!
+    var trainTwoExamStatus : String!
+    var trainTwoExamTime : String!
+    var trainType : String!
+
+
+    init(map: Map) throws {
+        
+        active = try map.value("active") ?? ""
+        address = try map.value("address") ?? ""
+        cardType = try map.value("cardType") ?? ""
+        dqbh = try map.value("dqbh") ?? ""
+        dqmc = try map.value("dqmc") ?? ""
+        face = try map.value("face") ?? ""
+        id = try map.value("id") ?? ""
+        idcard = try map.value("idcard")
+        k1 = try map.value("k1") ?? ""
+        k2 = try map.value("k2") ?? ""
+        k2Mileage = try map.value("k2Mileage") ?? ""
+        k3 = try map.value("k3") ?? ""
+        k3Mileage = try map.value("k3Mileage") ?? ""
+        k4 = try map.value("k4") ?? ""
+        mileage = try map.value("mileage") ?? ""
+        name = try map.value("name") ?? ""
+        nationality = try map.value("nationality") ?? ""
+        phone = try map.value("phone") ?? ""
+        photoPath = try map.value("photoPath") ?? ""
+        qxbh = try map.value("qxbh") ?? ""
+        qxmc = try map.value("qxmc") ?? ""
+        recordDate = try map.value("recordDate") ?? ""
+        schoolAddress = try map.value("schoolAddress") ?? ""
+        schoolId = try map.value("schoolId") ?? 0
+        schoolName = try map.value("schoolName") ?? ""
+        schoolShortName = try map.value("schoolShortName") ?? ""
+        sex = try map.value("sex") ?? ""
+        source = try map.value("source") ?? ""
+        totalKm1 = try map.value("totalKm1") ?? ""
+        totalKm2 = try map.value("totalKm2") ?? ""
+        totalKm3 = try map.value("totalKm3") ?? ""
+        totalKm4 = try map.value("totalKm4") ?? ""
+        trainFourExamStatus = try map.value("trainFourExamStatus") ?? ""
+        trainFourExamTime = try map.value("trainFourExamTime") ?? ""
+        trainOneExamStatus = try map.value("trainOneExamStatus") ?? ""
+        trainOneExamTime = try map.value("trainOneExamTime") ?? ""
+        trainThreeExamStatus = try map.value("trainThreeExamStatus") ?? ""
+        trainThreeExamTime = try map.value("trainThreeExamTime") ?? ""
+        trainTwoExamStatus = try map.value("trainTwoExamStatus") ?? ""
+        trainTwoExamTime = try map.value("trainTwoExamTime") ?? ""
+        trainType = try map.value("trainType")
+        
+    }
+
+}
+

+ 143 - 0
JiaPeiManage/Sources/Modulars/学员/Controllers/MeTraineeDetails/MeTraineeDetails01Controller.swift

@@ -0,0 +1,143 @@
+//
+//  MeTraineeDetails01Controller.swift
+//  JiaPeiManage
+//
+//  Created by Ning.ge on 2023/6/20.
+//
+
+import UIKit
+import RxSwift
+import RxCocoa
+
+
+final class MeTraineeDetails01Controller: BaseTableViewController {
+    
+    let cellIdentifier:String = "_MeTraineeDetails01Cell"
+    // MARK: 服务属性
+    private let cocahService: CoachServiceType = CoachService(networking: CoachNetworking())
+   
+    // MARK: UI属性
+    var groupList:[String : [String:String]] = [:]
+    let keys = ["个人信息","培训信息"]
+    let keyArray = [["证件类型","证件号码","推荐人","国籍","地区","县区","联系地址","培训车型","是否激活","备案时间","所属机构"],
+                    ["阶段一学时","阶段二学时", "阶段三学时", "阶段四学时", "科一已打/所需学时", "科二已打/所需学时", "科三已打/所需学时","科四已打/所需学时", "科二总里程", "科三总里程", "总里程",]]
+    
+    // MARK: 数据
+    var traineeInfoModel:TraineeInfoModel?
+    
+//    init(info:TraineeInfoModel) {
+//        super.init()
+//        self.traineeInfoModel = info
+//    }
+
+    
+    required convenience init?(coder aDecoder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        
+        //绑定
+        biandView()
+    }
+    
+    // MARK: 私有方法
+    
+    func setInfo(info:TraineeInfoModel){
+        self.traineeInfoModel = info
+        groupList["个人信息"] = ["证件类型":"身份证",
+                              "证件号码":info.idcard,
+                              "推荐人":info.source,
+                              "国籍":info.nationality,
+                              "地区":info.dqmc,
+                              "县区":info.qxmc,
+                              "联系地址":info.address,
+                              "培训车型":info.trainType,
+                              "是否激活":(info.active=="1" ? "是":"否"),
+                              "备案时间":info.recordDate,
+                              "所属机构":info.schoolName,]
+        let onetime:String = info.trainOneExamStatus=="1" ? "运管已签章\(info.trainOneExamTime)":info.trainOneExamTime
+        let twotime:String = info.trainTwoExamStatus=="1" ? "运管已签章\(info.trainTwoExamTime)":info.trainTwoExamTime
+        let threetime:String = info.trainThreeExamTime=="1" ? "运管已签章\(info.trainThreeExamTime)":info.trainThreeExamTime
+        let fourtime:String = info.trainFourExamStatus=="1" ? "运管已签章\(info.trainFourExamTime)":info.trainFourExamTime
+        groupList["培训信息"] = ["阶段一学时":onetime,
+                              "阶段二学时":twotime,
+                              "阶段三学时":threetime,
+                              "阶段四学时":fourtime,
+                              "科一已打/所需学时":info.k1+"\\"+info.totalKm1,
+                              "科二已打/所需学时":info.k2+"\\"+info.totalKm2,
+                              "科三已打/所需学时":info.k3+"\\"+info.totalKm3,
+                              "科四已打/所需学时":info.k4+"\\"+info.totalKm4,
+                              "科二总里程":info.k2Mileage,
+                              "科三总里程":info.k3Mileage,
+                              "总里程":info.mileage,]
+        
+        tableView.reloadData()
+    }
+    
+    func biandView(){
+        tableView.delegate = self
+        tableView.dataSource = self
+        tableView.separatorStyle = .none //去除分割线
+        tableView.register(UINib(nibName: "MeTraineeDetails01Cell", bundle: nil), forCellReuseIdentifier: cellIdentifier)
+        tableView.rowHeight = 40.f
+        self.isEmptyDisplay = false
+        self.hideLoadAnimation()
+    }
+    
+}
+
+//数据源
+extension MeTraineeDetails01Controller:UITableViewDataSource {
+    
+    func numberOfSections(in tableView: UITableView) -> Int {
+        if(groupList.count>0){
+            return keys.count ?? 0
+        }
+        return 0
+    }
+    
+    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+        let count = groupList[keys[section]]!.count
+        return count
+    }
+    
+    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
+        let header_view = MeTraineeDetails01HeaderView.loadFromNib()
+        header_view.title_label.text = keys[section]
+        return header_view
+    }
+    
+    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
+        return 50.f
+    }
+    
+    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+        var groupDict = groupList[keys[indexPath.section]]!
+        let _keys = keyArray[indexPath.section]
+        let type = _keys[indexPath.row]
+        let value = groupDict[type]
+        let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! MeTraineeDetails01Cell
+        cell.contentView.backgroundColor = ((indexPath.row%2) != 0) ? UIColor("#113357") : UIColor("#0B2B4D")
+        cell.backgroundColor = ((indexPath.row%2) != 0) ? UIColor("#113357") : UIColor("#0B2B4D")
+        cell.type_label.text = type
+        cell.value_label.text = value
+        return cell
+    }
+}
+
+//事件
+extension MeTraineeDetails01Controller:UITableViewDelegate {
+    
+//    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+//        tableView.deselectRow(at: indexPath, animated: false)
+//        let rowInfo = self.traineeDataModel?.rows![indexPath.row]
+//        if rowInfo != nil {
+//            let context: Int = rowInfo?.id ?? 0
+//            NYSwRouter.push(NYSwPushType.trainee_info,context: context)
+//        }
+//    }
+    
+}
+

+ 100 - 0
JiaPeiManage/Sources/Modulars/学员/Controllers/MeTraineeDetails/MeTraineeDetails02Controller.swift

@@ -0,0 +1,100 @@
+//
+//  MeTraineeDetails02Controller.swift
+//  JiaPeiManage
+//
+//  Created by Ning.ge on 2023/6/20.
+//
+
+import UIKit
+import RxSwift
+import RxCocoa
+
+
+final class MeTraineeDetails02Controller: BaseTableViewController {
+    
+    let cellIdentifier:String = "_MeTraineeSubjectCell"
+    // MARK: 服务属性
+    private let cocahService: CoachServiceType = CoachService(networking: CoachNetworking())
+   
+    // MARK: UI属性
+    
+    
+    // MARK: 数据
+    var traineeDataModel:TraineeDataModel?
+    
+    var page:Int = 1
+    var pageSize:Int = 10
+    var state = "1"
+    
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        
+        getCoachInfoList()
+        //绑定
+        biandView()
+    }
+    
+    // MARK: 私有方法
+    
+    func getCoachInfoList()
+    {
+        self.cocahService.coachInfoListRequest(city: LocalManager.userInfo.city!, appCoachId: "", coachId: "\(LocalManager.userInfo.id)", field: "", pageNum: page, pageSize: pageSize, schoolId: 0, state: state)
+            .subscribe(onSuccess: { traineeDataModel in
+                self.traineeDataModel = traineeDataModel
+                print("coachInfoListRequest成功")
+                self.hideLoadAnimation()
+                self.tableView.reloadData()
+            }, onError: { error in
+            })
+            .disposed(by: disposeBag)
+    }
+    
+    func biandView(){
+        tableView.delegate = self
+        tableView.dataSource = self
+        tableView.separatorStyle = .none //去除分割线
+        tableView.register(UINib(nibName: "MeTraineeSubjectCell", bundle: nil), forCellReuseIdentifier: cellIdentifier)
+        tableView.rowHeight = 288.f
+        setupRefreshHeader(tableView) {[unowned self] in
+            DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
+                // 在延迟 1 秒后执行的代码
+                self.stopRefresh()
+            }
+            NSLog("AAAAAAA")
+        }
+        self.isEmptyDisplay = false
+        
+    }
+    
+}
+
+//数据源
+extension MeTraineeDetails02Controller:UITableViewDataSource {
+    
+    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+        return self.traineeDataModel?.rows?.count ?? 0
+    }
+    
+    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+        let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! MeTraineeSubjectCell
+        cell.index_button.setTitle("\(indexPath.row+1)", for: .normal)
+        cell.setRowInfo(rowInfo: (self.traineeDataModel?.rows?[indexPath.row])!)
+        return cell
+    }
+}
+
+//事件
+extension MeTraineeDetails02Controller:UITableViewDelegate {
+    
+    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+        tableView.deselectRow(at: indexPath, animated: false)
+        let rowInfo = self.traineeDataModel?.rows![indexPath.row]
+        if rowInfo != nil {
+            let context: Int = rowInfo?.id ?? 0
+            NYSwRouter.push(NYSwPushType.trainee_info,context: context)
+        }
+    }
+    
+}
+

+ 108 - 0
JiaPeiManage/Sources/Modulars/学员/Controllers/MeTraineeDetails/MeTraineeDetails03Controller.swift

@@ -0,0 +1,108 @@
+//
+//  MeTraineeDetails03Controller.swift
+//  JiaPeiManage
+//
+//  Created by Ning.ge on 2023/6/20.
+//
+
+
+import UIKit
+import RxSwift
+import RxCocoa
+
+
+final class MeTraineeDetails03Controller: BaseTableViewController {
+    
+    let cellIdentifier:String = "_MeTraineeSubjectCell"
+    // MARK: 服务属性
+    private let cocahService: CoachServiceType = CoachService(networking: CoachNetworking())
+   
+    // MARK: UI属性
+    
+    
+    // MARK: 数据
+    var traineeDataModel:TraineeDataModel?
+    
+    var page:Int = 1
+    var pageSize:Int = 10
+    var state = "1"
+    
+    init(state:String) {
+        super.init()
+        self.state = state
+    }
+    
+    required convenience init?(coder aDecoder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        
+        getCoachInfoList()
+        //绑定
+        biandView()
+    }
+    
+    // MARK: 私有方法
+    
+    func getCoachInfoList()
+    {
+        self.cocahService.coachInfoListRequest(city: LocalManager.userInfo.city!, appCoachId: "", coachId: "\(LocalManager.userInfo.id)", field: "", pageNum: page, pageSize: pageSize, schoolId: 0, state: state)
+            .subscribe(onSuccess: { traineeDataModel in
+                self.traineeDataModel = traineeDataModel
+                print("coachInfoListRequest成功")
+                self.hideLoadAnimation()
+                self.tableView.reloadData()
+            }, onError: { error in
+            })
+            .disposed(by: disposeBag)
+    }
+    
+    func biandView(){
+        tableView.delegate = self
+        tableView.dataSource = self
+        tableView.separatorStyle = .none //去除分割线
+        tableView.register(UINib(nibName: "MeTraineeSubjectCell", bundle: nil), forCellReuseIdentifier: cellIdentifier)
+        tableView.rowHeight = 288.f
+        setupRefreshHeader(tableView) {[unowned self] in
+            DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
+                // 在延迟 1 秒后执行的代码
+                self.stopRefresh()
+            }
+            NSLog("AAAAAAA")
+        }
+        self.isEmptyDisplay = false
+        
+    }
+    
+}
+
+//数据源
+extension MeTraineeDetails03Controller:UITableViewDataSource {
+    
+    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+        return self.traineeDataModel?.rows?.count ?? 0
+    }
+    
+    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+        let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! MeTraineeSubjectCell
+        cell.index_button.setTitle("\(indexPath.row+1)", for: .normal)
+        cell.setRowInfo(rowInfo: (self.traineeDataModel?.rows?[indexPath.row])!)
+        return cell
+    }
+}
+
+//事件
+extension MeTraineeDetails03Controller:UITableViewDelegate {
+    
+    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+        tableView.deselectRow(at: indexPath, animated: false)
+        let rowInfo = self.traineeDataModel?.rows![indexPath.row]
+        if rowInfo != nil {
+            let context: Int = rowInfo?.id ?? 0
+            NYSwRouter.push(NYSwPushType.trainee_info,context: context)
+        }
+    }
+    
+}

+ 108 - 0
JiaPeiManage/Sources/Modulars/学员/Controllers/MeTraineeDetails/MeTraineeDetails04Controller.swift

@@ -0,0 +1,108 @@
+//
+//  MeTraineeDetails04Controller.swift
+//  JiaPeiManage
+//
+//  Created by Ning.ge on 2023/6/20.
+//
+
+import UIKit
+import RxSwift
+import RxCocoa
+
+
+final class MeTraineeDetails04Controller: BaseTableViewController {
+    
+    let cellIdentifier:String = "_MeTraineeSubjectCell"
+    // MARK: 服务属性
+    private let cocahService: CoachServiceType = CoachService(networking: CoachNetworking())
+   
+    // MARK: UI属性
+    
+    
+    // MARK: 数据
+    var traineeDataModel:TraineeDataModel?
+    
+    var page:Int = 1
+    var pageSize:Int = 10
+    var state = "1"
+    
+    init(state:String) {
+        super.init()
+        self.state = state
+    }
+    
+    required convenience init?(coder aDecoder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        
+        getCoachInfoList()
+        //绑定
+        biandView()
+    }
+    
+    // MARK: 私有方法
+    
+    func getCoachInfoList()
+    {
+        self.cocahService.coachInfoListRequest(city: LocalManager.userInfo.city!, appCoachId: "", coachId: "\(LocalManager.userInfo.id)", field: "", pageNum: page, pageSize: pageSize, schoolId: 0, state: state)
+            .subscribe(onSuccess: { traineeDataModel in
+                self.traineeDataModel = traineeDataModel
+                print("coachInfoListRequest成功")
+                self.hideLoadAnimation()
+                self.tableView.reloadData()
+            }, onError: { error in
+            })
+            .disposed(by: disposeBag)
+    }
+    
+    func biandView(){
+        tableView.delegate = self
+        tableView.dataSource = self
+        tableView.separatorStyle = .none //去除分割线
+        tableView.register(UINib(nibName: "MeTraineeSubjectCell", bundle: nil), forCellReuseIdentifier: cellIdentifier)
+        tableView.rowHeight = 288.f
+        setupRefreshHeader(tableView) {[unowned self] in
+            DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
+                // 在延迟 1 秒后执行的代码
+                self.stopRefresh()
+            }
+            NSLog("AAAAAAA")
+        }
+        self.isEmptyDisplay = false
+        
+    }
+    
+}
+
+//数据源
+extension MeTraineeDetails04Controller:UITableViewDataSource {
+    
+    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
+        return self.traineeDataModel?.rows?.count ?? 0
+    }
+    
+    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
+        let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! MeTraineeSubjectCell
+        cell.index_button.setTitle("\(indexPath.row+1)", for: .normal)
+        cell.setRowInfo(rowInfo: (self.traineeDataModel?.rows?[indexPath.row])!)
+        return cell
+    }
+}
+
+//事件
+extension MeTraineeDetails04Controller:UITableViewDelegate {
+    
+    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+        tableView.deselectRow(at: indexPath, animated: false)
+        let rowInfo = self.traineeDataModel?.rows![indexPath.row]
+        if rowInfo != nil {
+            let context: Int = rowInfo?.id ?? 0
+            NYSwRouter.push(NYSwPushType.trainee_info,context: context)
+        }
+    }
+    
+}
+

+ 218 - 0
JiaPeiManage/Sources/Modulars/学员/Controllers/MeTraineeDetailsPageViewController.swift

@@ -11,11 +11,75 @@ import RxCocoa
 
 final class MeTraineeDetailsPageViewController: BaseViewController {
     
+    // MARK: 服务属性
+    private let cocahService: CoachServiceType = CoachService(networking: CoachNetworking())
+    
+    // MARK: 私有属性
+    private var menuTitles : [String] = ["基本信息", "理论成绩", "人脸比对记录", "签到记录"]
+//    private var menuTitles : [String] = ["", "", "", ""]
+    private var idxs: [UInt] = []
+    private var menuItemCurrentBtn : UIButton?
+    //学员ID
+    var stuId:Int = 0
+    var traineeInfoModel:TraineeInfoModel?
     // MARK: UI属性
     
+    @IBOutlet weak var title_label: UILabel!
+    
+    @IBOutlet weak var header_view: UIView!
+    //头像
+    @IBOutlet weak var user_icon_imageview: UIImageView!
+    @IBOutlet weak var sex_imageview: UIImageView!
+    
+    //用户名
+    @IBOutlet weak var username_label: UILabel!
+    //电话
+    @IBOutlet weak var userphone_label: UILabel!
+    
+    let pageController = VTMagicController().then {
+        $0.view.translatesAutoresizingMaskIntoConstraints = false
+        $0.magicView.navigationColor = .db_theme
+        $0.magicView.sliderColor = .db_sliderColor
+        $0.magicView.switchStyle = .default
+        $0.magicView.layoutStyle = .divide
+//        $0.magicView.sliderStyle = .bubble
+        $0.magicView.navigationHeight = 57.f
+//        $0.magicView.sliderExtension = -10
+        $0.magicView.sliderWidth = 22.f
+        $0.magicView.sliderOffset = -8
+        $0.magicView.sliderHeight = 4
+        $0.magicView.isSeparatorHidden = false
+        $0.magicView.bubbleRadius = 2
+        $0.magicView.needPreloading = true
+        $0.magicView.separatorHeight = 0 //下划线h
+        $0.magicView.isSliderHidden = true
+    }
+    
+    
+    override func setupConstraints() {
+    
+        pageController.view.snp.makeConstraints { (make) in
+            make.left.right.bottom.equalToSuperview()
+            make.top.equalTo(header_view.snp.bottom)
+        }
+        
+    }
     override func viewDidLoad() {
         super.viewDidLoad()
         setupUI()
+        configureMagicController()
+        cocahService.studentInfoByIdRequest(city: LocalManager.userInfo.city!, id: stuId)
+            .subscribe { traineeInfoModel in
+                self.traineeInfoModel = traineeInfoModel
+                self.biandView()
+                if(self.pageController.currentPage==0){
+                    let vc:MeTraineeDetails01Controller =  self.pageController.currentViewController as! MeTraineeDetails01Controller
+                    vc.setInfo(info: traineeInfoModel)
+                }
+                
+            } onError: { error in
+                
+            }.disposed(by: disposeBag)
     }
     
     // MARK: 私有方法
@@ -24,5 +88,159 @@ final class MeTraineeDetailsPageViewController: BaseViewController {
       
     }
     
+    func biandView(){
+        
+        self.title_label.text = (traineeInfoModel?.name)! + "个人信息"
+        //头像
+        self.user_icon_imageview.sd_setImage(with: traineeInfoModel?.photoPath?.urlValue, placeholderImage: traineeInfoModel?.sex == "1" ? NYImage.Home.usermale:NYImage.Home.userfemale)
+        //用户名
+        self.username_label.text = traineeInfoModel?.name
+        //电话
+        self.userphone_label.text = traineeInfoModel?.phone
+        self.sex_imageview.image = traineeInfoModel?.sex == "1" ? NYImage.Home.sexmale:NYImage.Home.sexfemale
+    }
+    
+    func configureMagicController(){
+     
+        self.addChild(pageController)
+        self.view.addSubview(pageController.view)
+        
+        //设置VTMagicController代理,初始页码
+        pageController.magicView.delegate = self
+        pageController.magicView.dataSource = self
+        pageController.magicView.reloadData(toPage: 0)
+        
+    }
+}
+//VTMagicViewDelegate view代理
+extension MeTraineeDetailsPageViewController : VTMagicViewDelegate {
+    
+    func magicView(_ magicView: VTMagicView, didSelectItemAt itemIndex: UInt) {
+        var menuItem = magicView.menuItem(at: itemIndex)
+        if (menuItemCurrentBtn != nil) {
+            (menuItemCurrentBtn as?QMUIButton)?.spacingBetweenImageAndTitle = -25
+        }
+        (menuItem as?QMUIButton)?.spacingBetweenImageAndTitle = -30
+        menuItemCurrentBtn = menuItem
+        if itemIndex == 0 || itemIndex == 1 {
+            guard let currentVc:MeTraineeSubjectPageViewController = pageController.currentViewController as? MeTraineeSubjectPageViewController else { return }
+            let currentPage = pageController.currentPage
+            
+            if currentPage == itemIndex {
+//                TogetherDataManager.refreshDataForVTMagic(currentVc,true)
+            }
+        }
+    }
+    
+    func magicView(_ magicView: VTMagicView, viewDidAppear viewController: UIViewController, atPage pageIndex: UInt) {
+        
+        if pageIndex == 0 || pageIndex == 1 {
+            var canRefresh: Bool = false
+            
+            if let collectionVc = viewController as? BaseCollectionViewController {
+                
+                if collectionVc.totalItems() > 0 {
+                    canRefresh = true
+                }
+            }
+            
+            if idxs.contains(pageIndex) || canRefresh {
+                
+//                TogetherDataManager.refreshDataForVTMagic(viewController, false)
+            }
+        }
+    }
     
+    func magicView(_ magicView: VTMagicView, viewDidDisappear viewController: UIViewController, atPage pageIndex: UInt) {
+        
+        if pageIndex == 0 || pageIndex == 1 {
+            if !idxs.contains(pageIndex) {
+                idxs.append(pageIndex)
+            }
+        }
+        
+        if pageIndex == 1 {
+//            TogetherDataManager.referenceDate = Date()
+        }
+    }
+}
+
+//VTMagicViewDataSource 数据源代理
+extension MeTraineeDetailsPageViewController : VTMagicViewDataSource{
+    func menuTitles(for magicView: VTMagicView) -> [String] {
+        return menuTitles
+    }
+    
+    func magicView(_ magicView: VTMagicView, menuItemAt itemIndex: UInt) -> UIButton {
+        
+        var menuItem = magicView.dequeueReusableItem(withIdentifier: "homeItemIdentifier")
+        if menuItem == nil  {
+            menuItem = QMUIButton(type: .custom)
+            menuItem?.titleLabel?.font = NYFont.SysFont.sys_13
+            menuItem?.setTitleColor(.db_fontGray, for: .normal)
+            menuItem?.setTitleColor(.db_fontSelColor, for: .selected)
+            menuItem?.setImage(NYImage.Home.stuBtnSel, for: .selected)
+            menuItem?.setImage(NYImage.Home.stuBtnNor, for: .normal)
+            (menuItem as?QMUIButton)?.imagePosition = .top
+            (menuItem as?QMUIButton)?.spacingBetweenImageAndTitle = -25
+            
+//            menuItem?.imageEdgeInsets = UIEdgeInsets(top: -5, left: -5, bottom: 0, right: -5)
+            
+//            let title_label = UILabel()
+//            title_label.font = NYFont.SysFont.sys_13
+//            title_label.textColor = .db_fontGray
+//            title_label.textAlignment = .center
+//            title_label.text = menuTitleArray[Int(itemIndex)]
+//            menuItem?.addSubview(title_label)
+//            let t_top = (57.f - 18.f)*0.5
+//            title_label.snp.makeConstraints { make in
+//                make.top.equalTo(t_top)
+//                make.left.right.equalTo(menuItem!)
+//                make.height.equalTo(18.f)
+//            }
+            
+            if itemIndex==0 {
+                (menuItem as?QMUIButton)?.spacingBetweenImageAndTitle = -30
+                menuItemCurrentBtn = menuItem
+            }
+      
+        }
+        
+        return menuItem ?? UIButton()
+    }
+    
+    func magicView(_ magicView: VTMagicView, viewControllerAtPage pageIndex: UInt) -> UIViewController {
+        
+        if pageIndex == 0 {
+            var meTraineeDetails01Controller = magicView.dequeueReusablePage(withIdentifier: "MeTraineeDetails01Controller")
+            if meTraineeDetails01Controller == nil {
+                meTraineeDetails01Controller = MeTraineeDetails01Controller.init()
+            }
+            return meTraineeDetails01Controller ?? UIViewController()
+        } else if pageIndex == 1 {
+            var meTraineeDetails02Controller = magicView.dequeueReusablePage(withIdentifier: "MeTraineeDetails02Controller")
+            if meTraineeDetails02Controller == nil {
+                meTraineeDetails02Controller = MeTraineeDetails02Controller.init()
+            }
+            return meTraineeDetails02Controller ?? UIViewController()
+        } else if pageIndex == 2 {
+            var meTraineeSubjectPageViewController = magicView.dequeueReusablePage(withIdentifier: "MeTraineeSubjectPageViewController03")
+            if meTraineeSubjectPageViewController == nil {
+                meTraineeSubjectPageViewController = MeTraineeSubjectPageViewController(state: "3")
+            }
+            return meTraineeSubjectPageViewController ?? UIViewController()
+        } else if pageIndex == 3{
+            var meTraineeSubjectPageViewController = magicView.dequeueReusablePage(withIdentifier: "MeTraineeSubjectPageViewController04")
+            if meTraineeSubjectPageViewController == nil {
+                meTraineeSubjectPageViewController = MeTraineeSubjectPageViewController(state: "4")
+            }
+            return meTraineeSubjectPageViewController ?? UIViewController()
+        } else {
+            var meTraineeSubjectPageViewController = magicView.dequeueReusablePage(withIdentifier: "MeTraineeSubjectPageViewController05")
+            if meTraineeSubjectPageViewController == nil {
+                meTraineeSubjectPageViewController = MeTraineeSubjectPageViewController(state: "5")
+            }
+            return meTraineeSubjectPageViewController ?? UIViewController()
+        }
+    }
 }

+ 90 - 5
JiaPeiManage/Sources/Modulars/学员/Controllers/MeTraineeDetailsPageViewController.xib

@@ -10,6 +10,12 @@
     <objects>
         <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="MeTraineeDetailsPageViewController" customModule="JiaPeiManage" customModuleProvider="target">
             <connections>
+                <outlet property="header_view" destination="2ye-z8-GF5" id="2gD-Zu-WJu"/>
+                <outlet property="sex_imageview" destination="Zqx-If-LXv" id="GMf-yY-bnK"/>
+                <outlet property="title_label" destination="Jed-Yi-0Ts" id="UKy-3o-mXI"/>
+                <outlet property="user_icon_imageview" destination="PJS-q0-kId" id="USP-z8-JAx"/>
+                <outlet property="username_label" destination="KSW-mg-lqU" id="Uce-t2-v13"/>
+                <outlet property="userphone_label" destination="uhg-H7-9Lj" id="gos-3B-Amh"/>
                 <outlet property="view" destination="iN0-l3-epB" id="xQA-xO-2op"/>
             </connections>
         </placeholder>
@@ -21,10 +27,10 @@
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="hZo-yc-91j" userLabel="View-nav">
                     <rect key="frame" x="0.0" y="0.0" width="375" height="64"/>
                     <subviews>
-                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="我的学员" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Jed-Yi-0Ts">
-                            <rect key="frame" x="137.66666666666666" y="20" width="100" height="44"/>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="个人信息" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Jed-Yi-0Ts">
+                            <rect key="frame" x="62.666666666666657" y="20" width="249.99999999999997" height="44"/>
                             <constraints>
-                                <constraint firstAttribute="width" constant="100" id="BFe-58-1gi"/>
+                                <constraint firstAttribute="width" constant="250" id="BFe-58-1gi"/>
                                 <constraint firstAttribute="height" constant="44" id="UjA-tX-zHL"/>
                             </constraints>
                             <fontDescription key="fontDescription" type="system" weight="medium" pointSize="15"/>
@@ -44,7 +50,7 @@
                             </connections>
                         </button>
                     </subviews>
-                    <color key="backgroundColor" red="0.043137254899999998" green="0.16862745100000001" blue="0.30196078430000001" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                     <constraints>
                         <constraint firstAttribute="height" constant="64" id="2TZ-Nd-Y4a"/>
                         <constraint firstItem="Jed-Yi-0Ts" firstAttribute="centerX" secondItem="hZo-yc-91j" secondAttribute="centerX" id="9Wd-MP-srE"/>
@@ -53,18 +59,97 @@
                         <constraint firstAttribute="bottom" secondItem="CwI-I6-eIO" secondAttribute="bottom" id="kkh-7N-3b4"/>
                     </constraints>
                 </view>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="2ye-z8-GF5" userLabel="View-header">
+                    <rect key="frame" x="0.0" y="64" width="375" height="150"/>
+                    <subviews>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="default-user-male" translatesAutoresizingMaskIntoConstraints="NO" id="PJS-q0-kId">
+                            <rect key="frame" x="15" y="35" width="62" height="77"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="77" id="gGn-mb-bl4"/>
+                                <constraint firstAttribute="width" constant="62" id="m4w-Yh-eWf"/>
+                            </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="Q1B-Pi-q27">
+                            <rect key="frame" x="26" y="123" width="40" height="20"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="20" id="FjB-zb-4Jk"/>
+                                <constraint firstAttribute="width" constant="40" id="SH0-8c-8RA"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="13"/>
+                            <color key="textColor" red="0.83137254901960778" green="0.8666666666666667" blue="0.90196078431372551" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="李泽楷" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="KSW-mg-lqU">
+                            <rect key="frame" x="99" y="35" width="59" height="22"/>
+                            <constraints>
+                                <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="59" id="8FJ-Ud-Ys5"/>
+                                <constraint firstAttribute="height" constant="22" id="fRj-xH-fG3"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="boldSystem" pointSize="19"/>
+                            <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="user-male" translatesAutoresizingMaskIntoConstraints="NO" id="Zqx-If-LXv">
+                            <rect key="frame" x="163" y="37" width="18" height="18"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="18" id="Cux-qI-lfL"/>
+                                <constraint firstAttribute="width" constant="18" id="bcf-uT-Ywp"/>
+                            </constraints>
+                        </imageView>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="stu_phone" translatesAutoresizingMaskIntoConstraints="NO" id="2cm-Rv-xIl">
+                            <rect key="frame" x="99" y="73" width="9" height="14"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="9" id="I0s-mV-NGD"/>
+                                <constraint firstAttribute="height" constant="14" id="kb0-Sk-Lw1"/>
+                            </constraints>
+                        </imageView>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="15555588949" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uhg-H7-9Lj">
+                            <rect key="frame" x="116" y="70" width="171" height="21"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="171" id="kEB-5s-5do"/>
+                                <constraint firstAttribute="height" constant="21" id="oyu-ZB-GBU"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="13"/>
+                            <color key="textColor" red="0.71372549019607845" green="0.75686274509803919" blue="0.80000000000000004" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <color key="tintColor" red="0.023529411760000001" green="0.12549019610000001" blue="0.2274509804" alpha="1" colorSpace="calibratedRGB"/>
+                    <constraints>
+                        <constraint firstItem="Zqx-If-LXv" firstAttribute="leading" secondItem="KSW-mg-lqU" secondAttribute="trailing" constant="5" id="5Iz-81-0Ub"/>
+                        <constraint firstItem="Q1B-Pi-q27" firstAttribute="centerX" secondItem="PJS-q0-kId" secondAttribute="centerX" id="BCr-Im-rSk"/>
+                        <constraint firstItem="2cm-Rv-xIl" firstAttribute="leading" secondItem="PJS-q0-kId" secondAttribute="trailing" constant="22" id="CA2-eO-ocY"/>
+                        <constraint firstItem="2cm-Rv-xIl" firstAttribute="top" secondItem="KSW-mg-lqU" secondAttribute="bottom" constant="16" id="DSd-Jr-6HR"/>
+                        <constraint firstItem="KSW-mg-lqU" firstAttribute="top" secondItem="2ye-z8-GF5" secondAttribute="top" constant="35" id="P1P-Lg-kTN"/>
+                        <constraint firstItem="uhg-H7-9Lj" firstAttribute="top" secondItem="KSW-mg-lqU" secondAttribute="bottom" constant="13" id="bBB-U8-hpe"/>
+                        <constraint firstItem="Q1B-Pi-q27" firstAttribute="top" secondItem="PJS-q0-kId" secondAttribute="bottom" constant="11" id="dfF-Or-WzV"/>
+                        <constraint firstItem="KSW-mg-lqU" firstAttribute="leading" secondItem="PJS-q0-kId" secondAttribute="trailing" constant="22" id="eu2-X2-P1b"/>
+                        <constraint firstAttribute="height" constant="150" id="gpM-rF-0c1"/>
+                        <constraint firstItem="PJS-q0-kId" firstAttribute="leading" secondItem="2ye-z8-GF5" secondAttribute="leading" constant="15" id="imv-EQ-B4S"/>
+                        <constraint firstItem="PJS-q0-kId" firstAttribute="top" secondItem="2ye-z8-GF5" secondAttribute="top" constant="35" id="o9I-pZ-xSu"/>
+                        <constraint firstItem="Zqx-If-LXv" firstAttribute="top" secondItem="2ye-z8-GF5" secondAttribute="top" constant="37" id="wgp-gS-VF0"/>
+                        <constraint firstItem="uhg-H7-9Lj" firstAttribute="leading" secondItem="2cm-Rv-xIl" secondAttribute="trailing" constant="8" symbolic="YES" id="yFy-iD-bji"/>
+                    </constraints>
+                </view>
             </subviews>
             <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
             <color key="backgroundColor" red="0.043137254899999998" green="0.16862745100000001" blue="0.30196078430000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
             <constraints>
+                <constraint firstItem="2ye-z8-GF5" firstAttribute="top" secondItem="hZo-yc-91j" secondAttribute="bottom" id="JFX-7f-hHo"/>
                 <constraint firstItem="hZo-yc-91j" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="Tcf-c6-mmR"/>
                 <constraint firstItem="hZo-yc-91j" firstAttribute="trailing" secondItem="vUN-kp-3ea" secondAttribute="trailing" id="ZcS-Kq-bPV"/>
+                <constraint firstItem="2ye-z8-GF5" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" id="h64-Iw-kPt"/>
                 <constraint firstItem="hZo-yc-91j" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" id="ilm-Fb-21z"/>
+                <constraint firstItem="vUN-kp-3ea" firstAttribute="trailing" secondItem="2ye-z8-GF5" secondAttribute="trailing" id="tdS-pj-dR3"/>
             </constraints>
-            <point key="canvasLocation" x="58" y="-11"/>
+            <point key="canvasLocation" x="56.799999999999997" y="-11.083743842364532"/>
         </view>
     </objects>
     <resources>
         <image name="back-white" width="9.3333330154418945" height="17"/>
+        <image name="default-user-male" width="74" height="102"/>
+        <image name="stu_phone" width="9" height="14"/>
+        <image name="user-male" width="18" height="18"/>
     </resources>
 </document>

+ 4 - 2
JiaPeiManage/Sources/Modulars/学员/Controllers/MeTraineeListViewController.swift

@@ -118,9 +118,11 @@ extension MeTraineeListViewController : VTMagicViewDelegate {
         menuItemCurrentBtn = menuItem
         menuItem?.titleLabel?.font = UIFont.boldSystemFont(ofSize: 17)
         menuItem?.qmui_badgeLabel?.isHidden = false
+        guard let currentVc:MeTraineeSubjectPageViewController = pageController.currentViewController as? MeTraineeSubjectPageViewController else { return }
+//        if (currentVc.traineeDataModel != nil) {
+//            menuItem?.qmui_badgeInteger = UInt(currentVc.traineeDataModel?.total ?? 0)
+//        }
         if itemIndex == 0 || itemIndex == 1 {
-            guard let currentVc = pageController.currentViewController else { return }
-            
             let currentPage = pageController.currentPage
             
             if currentPage == itemIndex {

+ 2 - 1
JiaPeiManage/Sources/Modulars/学员/Controllers/MeTraineeSearchPageViewController.swift

@@ -61,6 +61,7 @@ final class MeTraineeSearchPageViewController: BaseTableViewController {
         tableView.separatorStyle = .none //去除分割线
         tableView.register(UINib(nibName: "MeTraineeSubjectCell", bundle: nil), forCellReuseIdentifier: cellIdentifier)
         tableView.rowHeight = 288.f
+        
         setupRefreshHeader(tableView) {[unowned self] in
             DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
                 // 在延迟 1 秒后执行的代码
@@ -146,7 +147,7 @@ extension MeTraineeSearchPageViewController:UITableViewDataSource {
 extension MeTraineeSearchPageViewController:UITableViewDelegate {
     
     func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
-        tableView.deselectRow(at: indexPath, animated: true)
+        tableView.deselectRow(at: indexPath, animated: false)
         let rowInfo = self.traineeDataModel?.rows![indexPath.row]
         if rowInfo != nil {
             NYSwRouter.push(NYSwPushType.trainee_info.path)

+ 3 - 2
JiaPeiManage/Sources/Modulars/学员/Controllers/MeTraineeSubjectPageViewController.swift

@@ -96,10 +96,11 @@ extension MeTraineeSubjectPageViewController:UITableViewDataSource {
 extension MeTraineeSubjectPageViewController:UITableViewDelegate {
     
     func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
-        tableView.deselectRow(at: indexPath, animated: true)
+        tableView.deselectRow(at: indexPath, animated: false)
         let rowInfo = self.traineeDataModel?.rows![indexPath.row]
         if rowInfo != nil {
-            NYSwRouter.push(NYSwPushType.trainee_info.path)
+            let context: Int = rowInfo?.id ?? 0
+            NYSwRouter.push(NYSwPushType.trainee_info,context: context)
         }
     }
     

+ 20 - 0
JiaPeiManage/Sources/Modulars/学员/Views/MeTraineeDetails01Cell.swift

@@ -0,0 +1,20 @@
+//
+//  MeTraineeDetails01Cell.swift
+//  JiaPeiManage
+//
+//  Created by Ning.ge on 2023/6/20.
+//
+
+import UIKit
+
+final class MeTraineeDetails01Cell: UITableViewCell,NibLoadable {
+    
+    @IBOutlet weak var type_label: UILabel!
+    
+    @IBOutlet weak var value_label: UILabel!
+    
+    override func awakeFromNib() {
+        super.awakeFromNib()
+        self.selectionStyle = .none
+    }
+}

+ 54 - 0
JiaPeiManage/Sources/Modulars/学员/Views/MeTraineeDetails01Cell.xib

@@ -0,0 +1,54 @@
+<?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="retina6_12" 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="MeTraineeDetails01Cell" customModule="JiaPeiManage" customModuleProvider="target">
+            <rect key="frame" x="0.0" y="0.0" width="375" height="40"/>
+            <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="olM-0L-SuC">
+                    <rect key="frame" x="15" y="11" width="100" height="18"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="18" id="7ZC-DH-3d4"/>
+                        <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="100" id="vix-Ic-8ac"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                    <color key="textColor" red="0.71372549019607845" green="0.75686274509803919" blue="0.80000000000000004" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="身份证" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QTn-J0-amZ">
+                    <rect key="frame" x="210" y="11" width="150" height="18"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="18" id="1CQ-rd-oDu"/>
+                        <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="150" id="O1i-ML-3Pj"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                    <color key="textColor" red="0.83137254901960778" green="0.8666666666666667" blue="0.90196078431372551" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+            </subviews>
+            <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
+            <color key="backgroundColor" red="0.043137254899999998" green="0.16862745100000001" blue="0.30196078430000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+            <constraints>
+                <constraint firstItem="olM-0L-SuC" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" id="SgQ-aN-j23"/>
+                <constraint firstItem="vUN-kp-3ea" firstAttribute="trailing" secondItem="QTn-J0-amZ" secondAttribute="trailing" constant="15" id="llA-NS-9iI"/>
+                <constraint firstItem="olM-0L-SuC" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" constant="15" id="mkJ-eZ-NY2"/>
+                <constraint firstItem="QTn-J0-amZ" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" id="vHe-cq-e6n"/>
+            </constraints>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="type_label" destination="olM-0L-SuC" id="BW5-eD-3L2"/>
+                <outlet property="value_label" destination="QTn-J0-amZ" id="6DD-E0-qoT"/>
+            </connections>
+            <point key="canvasLocation" x="67.938931297709928" y="-12.67605633802817"/>
+        </view>
+    </objects>
+</document>

+ 19 - 0
JiaPeiManage/Sources/Modulars/学员/Views/MeTraineeDetails01HeaderView.swift

@@ -0,0 +1,19 @@
+//
+//  MeTraineeDetails01HeaderView.swift
+//  JiaPeiManage
+//
+//  Created by Ning.ge on 2023/6/20.
+//
+
+final class MeTraineeDetails01HeaderView: UIView,NibLoadable {
+
+    
+    @IBOutlet weak var title_label: UILabel!
+    
+    override func awakeFromNib() {
+        super.awakeFromNib()
+        
+        
+    }
+    
+}

+ 53 - 0
JiaPeiManage/Sources/Modulars/学员/Views/MeTraineeDetails01HeaderView.xib

@@ -0,0 +1,53 @@
+<?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="retina6_12" 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="MeTraineeDetails01HeaderView" customModule="JiaPeiManage" customModuleProvider="target">
+            <rect key="frame" x="0.0" y="0.0" width="375" height="50"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="stu_block" translatesAutoresizingMaskIntoConstraints="NO" id="aDe-FJ-gKH">
+                    <rect key="frame" x="15" y="82" width="6" height="18"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="18" id="Gt7-nv-NgQ"/>
+                        <constraint firstAttribute="width" constant="6" id="x8a-SR-iyy"/>
+                    </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="yod-sM-rOs">
+                    <rect key="frame" x="35" y="81" width="305" height="21"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="21" id="yoM-kG-wv3"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
+                    <color key="textColor" red="0.83137254901960778" green="0.8666666666666667" blue="0.90196078431372551" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+            </subviews>
+            <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
+            <color key="backgroundColor" red="0.043137254901960784" green="0.16862745098039217" blue="0.30196078431372547" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+            <constraints>
+                <constraint firstItem="aDe-FJ-gKH" firstAttribute="top" secondItem="vUN-kp-3ea" secondAttribute="top" constant="23" id="5Sr-tZ-max"/>
+                <constraint firstItem="yod-sM-rOs" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" constant="35" id="M2X-GR-W6k"/>
+                <constraint firstItem="yod-sM-rOs" firstAttribute="top" secondItem="vUN-kp-3ea" secondAttribute="top" constant="22" id="oGT-v1-W9X"/>
+                <constraint firstItem="vUN-kp-3ea" firstAttribute="trailing" secondItem="yod-sM-rOs" secondAttribute="trailing" constant="35" id="rNX-tY-5gG"/>
+                <constraint firstItem="aDe-FJ-gKH" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" constant="15" id="wOQ-o4-3KT"/>
+            </constraints>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="title_label" destination="yod-sM-rOs" id="bJ1-LU-KYM"/>
+            </connections>
+            <point key="canvasLocation" x="67.938931297709928" y="-12.67605633802817"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="stu_block" width="6" height="18"/>
+    </resources>
+</document>

+ 1 - 1
JiaPeiManage/Sources/Modulars/学员/Views/MeTraineeSubjectCell.swift

@@ -47,7 +47,7 @@ final class MeTraineeSubjectCell: UITableViewCell,NibLoadable {
         super.awakeFromNib()
         self.backgroundColor = .db_theme
         self.contentView.backgroundColor = .db_theme
-        
+        self.selectionStyle = .none
     }
     
     func setRowInfo(rowInfo:RowInfo){

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

@@ -16,13 +16,15 @@ enum CoachAPI {
     case coachQrInfo(id:String ,city:String)
     //获取教练的学员
     case coachInfoList(city:String,appCoachId:String ,coachId:String ,field:String ,pageNum:Int ,pageSize:Int ,schoolId:Int ,state:String )
+    //通过id获取学员详细
+    case studentInfoById(city:String,id:Int )
 }
 
 extension CoachAPI: TargetType {
     
     var baseURL: URL {
         switch self {
-        case .coachInfo,.coachQrInfo,.coachInfoList:
+        case .coachInfo,.coachQrInfo,.coachInfoList,.studentInfoById:
             return URL(string: HttpRequest.api.path)!
         }
     }
@@ -35,13 +37,14 @@ extension CoachAPI: TargetType {
             return "/jsjp-admin/open-api/tms/coachInfo/getCoachQrInfo"
         case .coachInfoList(_,_,_,_,_,_,_,_):
             return "/jsjp-admin/open-api/tms/coachInfo/list"
-            
+        case .studentInfoById(_,_):
+            return "/jsjp-admin/open-api/tms/coachInfo/getTmsStudentInfoById"
         }
     }
     
     var method: Moya.Method {
         switch self {
-        case .coachInfo,.coachQrInfo,.coachInfoList:
+        case .coachInfo,.coachQrInfo,.coachInfoList,.studentInfoById:
             return .get
         default:
             return .get
@@ -54,7 +57,7 @@ extension CoachAPI: TargetType {
     
     var task: Moya.Task {
         switch self {
-        case .coachInfo(_,_),.coachQrInfo(_,_),.coachInfoList(_,_,_,_,_,_,_,_):
+        case .coachInfo(_,_),.coachQrInfo(_,_),.coachInfoList(_,_,_,_,_,_,_,_),.studentInfoById(_,_):
             if let parameters = parameters {
                 return .requestParameters(parameters: parameters, encoding: URLEncoding.default)
             }
@@ -84,6 +87,9 @@ extension CoachAPI: TargetType {
                     "pageSize": pageSize,
                     "schoolId": schoolId==0 ?"":"\(schoolId)",
                     "state": state,]
+        case let .studentInfoById(city,id):
+            return ["city": city,
+                    "id": id,]
         default:
             return nil
         }

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

@@ -16,6 +16,9 @@ protocol CoachServiceType {
     func coachQrInfoRequest(id:String ,city:String) -> Single<UserInfo>
     //获取我的学员信息list
     func coachInfoListRequest(city:String,appCoachId:String ,coachId:String ,field:String ,pageNum:Int ,pageSize:Int ,schoolId:Int ,state:String) -> Single<TraineeDataModel>
+    //通过id获取学员详细
+    func studentInfoByIdRequest(city:String,id:Int) -> Single<TraineeInfoModel>
+//    case studentInfoById(city:String,id:Int )
     
 }
 
@@ -42,5 +45,9 @@ final class CoachService: CoachServiceType {
         return networking.request(api).map(TraineeDataModel.self,isModel: true)
     }
     
+    func studentInfoByIdRequest(city: String, id: Int) -> RxSwift.Single<TraineeInfoModel> {
+        let api = CoachAPI.studentInfoById(city: city, id: id)
+        return networking.request(api).map(TraineeInfoModel.self)
+    }
 }
 

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

@@ -14,8 +14,10 @@ final class URLNavigationMap {
     static func initialize(navigator:NavigatorType) {
         
         navigator.register(NYSwPushType.trainee_info.path) { (url, values, context) -> UIViewController? in
-            
+            guard let context = context as? Int
+            else { return nil }
             let meTraineeDetailsPageViewController = MeTraineeDetailsPageViewController(nibName: "MeTraineeDetailsPageViewController")
+            meTraineeDetailsPageViewController.stuId = context
             return meTraineeDetailsPageViewController
         }
         

+ 6 - 0
Podfile

@@ -62,6 +62,12 @@ target 'JiaPeiManage' do
   pod 'SwiftyUserDefaults'#, '4.0.0-alpha.1'
   pod 'CGFloatLiteral'
   pod 'Dollar'
+  
+  #pod <友盟+SDK名> 按需复制相应SDK名称代码
+  pod 'UMCommon'    #必须集成
+  pod 'UMDevice'    #必须集成
+  #依赖库
+  pod 'UMCCommonLog'  #可选,日志插件
 
 end
 

+ 14 - 1
Podfile.lock

@@ -378,6 +378,10 @@ PODS:
   - SwiftyUserDefaults (5.3.0)
   - Then (3.0.0)
   - Toaster (2.3.0)
+  - UMCCommonLog (2.0.2)
+  - UMCommon (7.4.1):
+    - UMDevice
+  - UMDevice (3.1.0)
   - URLNavigator (2.2.0)
   - VTMagic (1.2.4):
     - VTMagic/Core (= 1.2.4)
@@ -423,6 +427,9 @@ DEPENDENCIES:
   - SwiftyUserDefaults
   - Then
   - Toaster
+  - UMCCommonLog
+  - UMCommon
+  - UMDevice
   - URLNavigator (~> 2.2.0)
   - VTMagic (from `https://github.com/tianzhuo112/VTMagic.git`)
   - YYText
@@ -469,6 +476,9 @@ SPEC REPOS:
     - SwiftyUserDefaults
     - Then
     - Toaster
+    - UMCCommonLog
+    - UMCommon
+    - UMDevice
     - URLNavigator
     - WeakMapTable
     - YYText
@@ -523,11 +533,14 @@ SPEC CHECKSUMS:
   SwiftyUserDefaults: 63f80248cf5bfb3458825d9a78f2eb7e1293a040
   Then: 844265ae87834bbe1147d91d5d41a404da2ec27d
   Toaster: c3473963c78e8cabbf6ea6f11ad0fdaae6f54987
+  UMCCommonLog: bea707e50c85cef4b0eb47cc5c7226bb843245ca
+  UMCommon: 47e0b53f6a36568e958a5abd005ed7577fcac9ad
+  UMDevice: 9ef8045b59e0479cff7062915c879a1af46fa094
   URLNavigator: 0bffc3efdeb2d97f7b5eec7ac82d290f4a099431
   VTMagic: b49e5f456dbcbfd9a3588ba92417233a105bc193
   WeakMapTable: 05c694ce8439a7a9ebabb56187287a63c57673d6
   YYText: 5c461d709e24d55a182d1441c41dc639a18a4849
 
-PODFILE CHECKSUM: 68fbf7b515ff76d29f65e5e1e9964bd01028ea4d
+PODFILE CHECKSUM: f4aed25e21546bfec83bc3a8f3ce65a855dddb87
 
 COCOAPODS: 1.12.1

+ 14 - 1
Pods/Manifest.lock

@@ -378,6 +378,10 @@ PODS:
   - SwiftyUserDefaults (5.3.0)
   - Then (3.0.0)
   - Toaster (2.3.0)
+  - UMCCommonLog (2.0.2)
+  - UMCommon (7.4.1):
+    - UMDevice
+  - UMDevice (3.1.0)
   - URLNavigator (2.2.0)
   - VTMagic (1.2.4):
     - VTMagic/Core (= 1.2.4)
@@ -423,6 +427,9 @@ DEPENDENCIES:
   - SwiftyUserDefaults
   - Then
   - Toaster
+  - UMCCommonLog
+  - UMCommon
+  - UMDevice
   - URLNavigator (~> 2.2.0)
   - VTMagic (from `https://github.com/tianzhuo112/VTMagic.git`)
   - YYText
@@ -469,6 +476,9 @@ SPEC REPOS:
     - SwiftyUserDefaults
     - Then
     - Toaster
+    - UMCCommonLog
+    - UMCommon
+    - UMDevice
     - URLNavigator
     - WeakMapTable
     - YYText
@@ -523,11 +533,14 @@ SPEC CHECKSUMS:
   SwiftyUserDefaults: 63f80248cf5bfb3458825d9a78f2eb7e1293a040
   Then: 844265ae87834bbe1147d91d5d41a404da2ec27d
   Toaster: c3473963c78e8cabbf6ea6f11ad0fdaae6f54987
+  UMCCommonLog: bea707e50c85cef4b0eb47cc5c7226bb843245ca
+  UMCommon: 47e0b53f6a36568e958a5abd005ed7577fcac9ad
+  UMDevice: 9ef8045b59e0479cff7062915c879a1af46fa094
   URLNavigator: 0bffc3efdeb2d97f7b5eec7ac82d290f4a099431
   VTMagic: b49e5f456dbcbfd9a3588ba92417233a105bc193
   WeakMapTable: 05c694ce8439a7a9ebabb56187287a63c57673d6
   YYText: 5c461d709e24d55a182d1441c41dc639a18a4849
 
-PODFILE CHECKSUM: 68fbf7b515ff76d29f65e5e1e9964bd01028ea4d
+PODFILE CHECKSUM: f4aed25e21546bfec83bc3a8f3ce65a855dddb87
 
 COCOAPODS: 1.12.1

Разница между файлами не показана из-за своего большого размера
+ 2026 - 1967
Pods/Pods.xcodeproj/project.pbxproj


+ 25 - 4
Pods/Pods.xcodeproj/xcuserdata/mimasigeling.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -298,34 +298,55 @@
 			<key>orderHint</key>
 			<integer>42</integer>
 		</dict>
-		<key>URLNavigator.xcscheme</key>
+		<key>UMCCommonLog.xcscheme</key>
 		<dict>
 			<key>isShown</key>
 			<false/>
 			<key>orderHint</key>
 			<integer>43</integer>
 		</dict>
-		<key>VTMagic.xcscheme</key>
+		<key>UMCommon.xcscheme</key>
 		<dict>
 			<key>isShown</key>
 			<false/>
 			<key>orderHint</key>
 			<integer>44</integer>
 		</dict>
-		<key>WeakMapTable.xcscheme</key>
+		<key>UMDevice.xcscheme</key>
 		<dict>
 			<key>isShown</key>
 			<false/>
 			<key>orderHint</key>
 			<integer>45</integer>
 		</dict>
-		<key>YYText.xcscheme</key>
+		<key>URLNavigator.xcscheme</key>
 		<dict>
 			<key>isShown</key>
 			<false/>
 			<key>orderHint</key>
 			<integer>46</integer>
 		</dict>
+		<key>VTMagic.xcscheme</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+			<key>orderHint</key>
+			<integer>47</integer>
+		</dict>
+		<key>WeakMapTable.xcscheme</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+			<key>orderHint</key>
+			<integer>48</integer>
+		</dict>
+		<key>YYText.xcscheme</key>
+		<dict>
+			<key>isShown</key>
+			<false/>
+			<key>orderHint</key>
+			<integer>49</integer>
+		</dict>
 		<key>libwebp.xcscheme</key>
 		<dict>
 			<key>isShown</key>

+ 15 - 0
Pods/Target Support Files/Pods-JiaPeiManage/Pods-JiaPeiManage-acknowledgements.markdown

@@ -1201,6 +1201,21 @@ SOFTWARE.
        0. You just DO WHAT THE FUCK YOU WANT TO.
 
 
+## UMCCommonLog
+
+Copyright 2011 - 2021 umeng.com. All rights reserved.
+
+
+## UMCommon
+
+Copyright 2011 - 2021 umeng.com. All rights reserved.
+
+
+## UMDevice
+
+Copyright 2011 - 2021 umeng.com. All rights reserved.
+
+
 ## URLNavigator
 
 The MIT License (MIT)

+ 33 - 0
Pods/Target Support Files/Pods-JiaPeiManage/Pods-JiaPeiManage-acknowledgements.plist

@@ -1446,6 +1446,39 @@ SOFTWARE.
 			<key>Type</key>
 			<string>PSGroupSpecifier</string>
 		</dict>
+		<dict>
+			<key>FooterText</key>
+			<string>Copyright 2011 - 2021 umeng.com. All rights reserved.
+</string>
+			<key>License</key>
+			<string>Copyright</string>
+			<key>Title</key>
+			<string>UMCCommonLog</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
+		<dict>
+			<key>FooterText</key>
+			<string>Copyright 2011 - 2021 umeng.com. All rights reserved.
+</string>
+			<key>License</key>
+			<string>Copyright</string>
+			<key>Title</key>
+			<string>UMCommon</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
+		<dict>
+			<key>FooterText</key>
+			<string>Copyright 2011 - 2021 umeng.com. All rights reserved.
+</string>
+			<key>License</key>
+			<string>Copyright</string>
+			<key>Title</key>
+			<string>UMDevice</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
 		<dict>
 			<key>FooterText</key>
 			<string>The MIT License (MIT)

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
Pods/Target Support Files/Pods-JiaPeiManage/Pods-JiaPeiManage.debug.xcconfig


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
Pods/Target Support Files/Pods-JiaPeiManage/Pods-JiaPeiManage.release.xcconfig


Некоторые файлы не были показаны из-за большого количества измененных файлов