Ver código fonte

Merge branch 'master' of ssh://10.10.100.21/source/UUEnt

huangyp 6 anos atrás
pai
commit
48a69a091b
60 arquivos alterados com 3025 adições e 295 exclusões
  1. 10 5
      UU_Ent/Podfile
  2. 160 0
      UU_Ent/UU_Ent.xcodeproj/project.pbxproj
  3. 22 31
      UU_Ent/UU_Ent/Modules/App/AppDelegate.m
  4. 8 7
      UU_Ent/UU_Ent/Modules/Base/YRBaseNav.m
  5. 2 0
      UU_Ent/UU_Ent/Modules/Base/YRBaseVC.h
  6. 45 1
      UU_Ent/UU_Ent/Modules/Base/YRBaseVC.m
  7. 30 0
      UU_Ent/UU_Ent/Modules/Contacts/Main/Controllers/YRContactVC.m
  8. 17 0
      UU_Ent/UU_Ent/Modules/Home/Main/Controllers/YRHomeVC.h
  9. 154 0
      UU_Ent/UU_Ent/Modules/Home/Main/Controllers/YRHomeVC.m
  10. 17 0
      UU_Ent/UU_Ent/Modules/Home/Main/Views/YRHomeScheHeader.h
  11. 265 0
      UU_Ent/UU_Ent/Modules/Home/Main/Views/YRHomeScheHeader.m
  12. 20 121
      UU_Ent/UU_Ent/Modules/Loading/Main/Controllers/YRLoadingVC.m
  13. 3 0
      UU_Ent/UU_Ent/Modules/Loading/Main/Others/YRLoadImgCacheTool.h
  14. 389 2
      UU_Ent/UU_Ent/Modules/Loading/Main/Others/YRLoadImgCacheTool.m
  15. 24 3
      UU_Ent/UU_Ent/Modules/Loading/Main/Views/YRAdView.m
  16. 9 1
      UU_Ent/UU_Ent/Modules/Loading/Main/Views/YRCountDownView.m
  17. 33 3
      UU_Ent/UU_Ent/Modules/Login/Main/Controllers/YRLoginVC.m
  18. 2 17
      UU_Ent/UU_Ent/Modules/Login/Main/Others/YRLoginManager.m
  19. 27 15
      UU_Ent/UU_Ent/Modules/Main/Main/Controllers/YRMainVC.m
  20. 75 11
      UU_Ent/UU_Ent/Modules/Main/Main/Views/YRTabBar.m
  21. 17 0
      UU_Ent/UU_Ent/Modules/Main/Main/Views/YRTabbarView.h
  22. 21 0
      UU_Ent/UU_Ent/Modules/Main/Main/Views/YRTabbarView.m
  23. 48 10
      UU_Ent/UU_Ent/Modules/Message/Main/Controllers/YRMsgVC.m
  24. 1 1
      UU_Ent/UU_Ent/Modules/Message/Main/Others/msg_route.json
  25. 16 5
      UU_Ent/UU_Ent/Modules/Mine/Main/Controllers/YRMineVC.m
  26. 10 9
      UU_Ent/UU_Ent/Modules/Mine/Main/Others/YRUserInfo.h
  27. 23 1
      UU_Ent/UU_Ent/Modules/Mine/Main/Others/YRUserInfo.m
  28. 131 17
      UU_Ent/UU_Ent/Modules/Web/Main/YRWebVC.m
  29. 19 0
      UU_Ent/UU_Ent/Modules/Work/Docu/Controllers/YRDocuVC.h
  30. 182 0
      UU_Ent/UU_Ent/Modules/Work/Docu/Controllers/YRDocuVC.m
  31. 25 0
      UU_Ent/UU_Ent/Modules/Work/Docu/Models/YRDocuModel.h
  32. 24 0
      UU_Ent/UU_Ent/Modules/Work/Docu/Models/YRDocuModel.m
  33. 23 0
      UU_Ent/UU_Ent/Modules/Work/Docu/Views/YRDocuCell.h
  34. 156 0
      UU_Ent/UU_Ent/Modules/Work/Docu/Views/YRDocuCell.m
  35. 5 0
      UU_Ent/UU_Ent/Modules/Work/Main/Controllers/YRWorkVC.h
  36. 45 19
      UU_Ent/UU_Ent/Modules/Work/Main/Controllers/YRWorkVC.m
  37. 6 0
      UU_Ent/UU_Ent/Supporting Files/Assets.xcassets/Resources/Backicon/Contents.json
  38. 23 0
      UU_Ent/UU_Ent/Supporting Files/Assets.xcassets/Resources/Backicon/uu_back_icon.imageset/Contents.json
  39. BIN
      UU_Ent/UU_Ent/Supporting Files/Assets.xcassets/Resources/Backicon/uu_back_icon.imageset/uu_back_icon.png
  40. BIN
      UU_Ent/UU_Ent/Supporting Files/Assets.xcassets/Resources/Backicon/uu_back_icon.imageset/uu_back_icon@2x.png
  41. BIN
      UU_Ent/UU_Ent/Supporting Files/Assets.xcassets/Resources/Backicon/uu_back_icon.imageset/uu_back_icon@3x.png
  42. 6 0
      UU_Ent/UU_Ent/Supporting Files/Assets.xcassets/Resources/Empty/Contents.json
  43. 23 0
      UU_Ent/UU_Ent/Supporting Files/Assets.xcassets/Resources/Empty/empty_placeholder.imageset/Contents.json
  44. BIN
      UU_Ent/UU_Ent/Supporting Files/Assets.xcassets/Resources/Empty/empty_placeholder.imageset/empty_placeholder@1x.png
  45. BIN
      UU_Ent/UU_Ent/Supporting Files/Assets.xcassets/Resources/Empty/empty_placeholder.imageset/empty_placeholder@2x.png
  46. BIN
      UU_Ent/UU_Ent/Supporting Files/Assets.xcassets/Resources/Empty/empty_placeholder.imageset/empty_placeholder@3x.png
  47. 5 7
      UU_Ent/UU_Ent/Supporting Files/Info.plist
  48. 4 0
      UU_Ent/UU_Ent/Supporting Files/defines/common.h
  49. 3 1
      UU_Ent/UU_Ent/Supporting Files/defines/import.h
  50. 20 0
      UU_Ent/UU_Ent/Utils/NSString/NSString+device.h
  51. 110 0
      UU_Ent/UU_Ent/Utils/NSString/NSString+device.m
  52. 78 0
      UU_Ent/UU_Ent/Utils/Network/YRNetworkManager.h
  53. 168 0
      UU_Ent/UU_Ent/Utils/Network/YRNetworkManager.m
  54. 4 2
      UU_Ent/UU_Ent/Utils/UIButton/UIButton+block.m
  55. 1 1
      UU_Ent/UU_Ent/Utils/UIColor/UIColor+HexColor.m
  56. 1 5
      UU_Ent/UU_Ent/Utils/UIPopoverListView/UIPopoverListView.m
  57. 50 0
      UU_Ent/UU_Ent/Utils/WebView/YRWebView.h
  58. 365 0
      UU_Ent/UU_Ent/Utils/WebView/YRWebView.m
  59. 12 0
      UU_Ent/UU_Ent/Utils/tableView/YRTableView.h
  60. 88 0
      UU_Ent/UU_Ent/Utils/tableView/YRTableView.m

+ 10 - 5
UU_Ent/Podfile

@@ -4,17 +4,22 @@
 target 'UU_Ent' do
   # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
   # use_frameworks!
-
-  # Pods for UU_Ent
-
+    
+    # Pods for UU_Ent
+    
     pod 'UU_Ent', :path => '.'
-    pod 'Masonry'
+    pod 'Masonry' 
     pod 'MJExtension'
     pod 'MJRefresh'
     pod 'ReactiveObjC'
-    pod 'SDWebImage'
+    pod 'SDWebImage' =>'4.4.6'
     pod 'IQKeyboardManager'
     pod 'MBProgressHUD'
+    pod 'AFNetworking'
+    pod 'DZNEmptyDataSet'
+    pod 'MMDrawerController', '~> 0.5.7'
+    pod 'NSDate+TimeAgo'
+    pod 'JTCalendar', '~> 2.0'
     
   target 'UU_EntTests' do
     inherit! :search_paths

+ 160 - 0
UU_Ent/UU_Ent.xcodeproj/project.pbxproj

@@ -30,17 +30,25 @@
 		991C14762282D89C0080B54A /* publi.txt in Resources */ = {isa = PBXBuildFile; fileRef = 991C14732282D89C0080B54A /* publi.txt */; };
 		991C14792282EFFC0080B54A /* UIButton+Extersion.m in Sources */ = {isa = PBXBuildFile; fileRef = 991C14782282EFFC0080B54A /* UIButton+Extersion.m */; };
 		991C147C2282F0520080B54A /* UIButton+block.m in Sources */ = {isa = PBXBuildFile; fileRef = 991C147A2282F0510080B54A /* UIButton+block.m */; };
+		993F84462330693600E01145 /* YRHomeVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 993F84452330693600E01145 /* YRHomeVC.m */; };
+		993F8449233074B600E01145 /* YRTabbarView.m in Sources */ = {isa = PBXBuildFile; fileRef = 993F8448233074B600E01145 /* YRTabbarView.m */; };
+		993F844C2330D36D00E01145 /* YRHomeScheHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 993F844B2330D36D00E01145 /* YRHomeScheHeader.m */; };
 		9948171422783494007C7CEA /* msg_route.json in Resources */ = {isa = PBXBuildFile; fileRef = 9948171322783494007C7CEA /* msg_route.json */; };
 		9948171722785013007C7CEA /* YRWorkTabCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9948171622785013007C7CEA /* YRWorkTabCell.m */; };
 		9948171A22785044007C7CEA /* YRWorkCollCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9948171922785044007C7CEA /* YRWorkCollCell.m */; };
 		994AC5492283CEE0006FE026 /* YRNavHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 994AC5482283CEE0006FE026 /* YRNavHeaderView.m */; };
 		994AC54C2283FEDC006FE026 /* UINavigationController+alpha.m in Sources */ = {isa = PBXBuildFile; fileRef = 994AC54B2283FEDC006FE026 /* UINavigationController+alpha.m */; };
+		9979E8EC230E87BB00516C77 /* YRWebView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9979E8EB230E87BB00516C77 /* YRWebView.m */; };
 		999F6510227E658E00329012 /* UIView+frame.m in Sources */ = {isa = PBXBuildFile; fileRef = 999F650F227E658E00329012 /* UIView+frame.m */; };
 		999F6513227E664C00329012 /* UIImageView+userId.m in Sources */ = {isa = PBXBuildFile; fileRef = 999F6512227E664C00329012 /* UIImageView+userId.m */; };
 		999F6516227E688600329012 /* UIView+selector.m in Sources */ = {isa = PBXBuildFile; fileRef = 999F6515227E688600329012 /* UIView+selector.m */; };
 		999F651A227E697D00329012 /* UILabel+vertical.m in Sources */ = {isa = PBXBuildFile; fileRef = 999F6519227E697D00329012 /* UILabel+vertical.m */; };
 		999F651E227E6A6000329012 /* NSString+regular.m in Sources */ = {isa = PBXBuildFile; fileRef = 999F651D227E6A6000329012 /* NSString+regular.m */; };
+		99B06C7022CDA18700D21A36 /* YRDocuVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 99B06C6F22CDA18700D21A36 /* YRDocuVC.m */; };
+		99B06C7322CDA1A800D21A36 /* YRDocuModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 99B06C7222CDA1A800D21A36 /* YRDocuModel.m */; };
+		99B06C7622CDA1BE00D21A36 /* YRDocuCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 99B06C7522CDA1BE00D21A36 /* YRDocuCell.m */; };
 		99B4252F22815E2900DAE304 /* YRAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 99B4252E22815E2900DAE304 /* YRAlertView.m */; };
+		99C0146522964BEB0057D7B2 /* NSString+device.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C0146422964BEB0057D7B2 /* NSString+device.m */; };
 		99C16340227FD24E002ED79D /* YRWorkConModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C1633F227FD24E002ED79D /* YRWorkConModel.m */; };
 		99C16342227FDE64002ED79D /* work_route.json in Resources */ = {isa = PBXBuildFile; fileRef = 99C16341227FDE64002ED79D /* work_route.json */; };
 		99C16345228027C8002ED79D /* YRMsgHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C16344228027C8002ED79D /* YRMsgHeader.m */; };
@@ -62,6 +70,7 @@
 		99C6FF1B2276DD3900C7070A /* YRTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C6FF1A2276DD3900C7070A /* YRTableView.m */; };
 		99C6FF232276E4C000C7070A /* YRMsgMainCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C6FF222276E4C000C7070A /* YRMsgMainCell.m */; };
 		99C6FF262276FAE000C7070A /* YRMsgMainModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C6FF242276FAE000C7070A /* YRMsgMainModel.m */; };
+		99F3F30822A61F010061CB23 /* YRNetworkManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 99F3F30722A61F010061CB23 /* YRNetworkManager.m */; };
 		99F4A73D2277D1B8009AA6ED /* YRLoadImgCacheTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 99F4A73C2277D1B8009AA6ED /* YRLoadImgCacheTool.m */; };
 		99F4A7402277D2DF009AA6ED /* YRLoadingVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 99F4A73F2277D2DF009AA6ED /* YRLoadingVC.m */; };
 		99F4A7432277D332009AA6ED /* YRCountDownView.m in Sources */ = {isa = PBXBuildFile; fileRef = 99F4A7422277D332009AA6ED /* YRCountDownView.m */; };
@@ -199,6 +208,12 @@
 		991C14782282EFFC0080B54A /* UIButton+Extersion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIButton+Extersion.m"; sourceTree = "<group>"; };
 		991C147A2282F0510080B54A /* UIButton+block.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIButton+block.m"; sourceTree = "<group>"; };
 		991C147B2282F0510080B54A /* UIButton+block.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIButton+block.h"; sourceTree = "<group>"; };
+		993F84442330693600E01145 /* YRHomeVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YRHomeVC.h; sourceTree = "<group>"; };
+		993F84452330693600E01145 /* YRHomeVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YRHomeVC.m; sourceTree = "<group>"; };
+		993F8447233074B600E01145 /* YRTabbarView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YRTabbarView.h; sourceTree = "<group>"; };
+		993F8448233074B600E01145 /* YRTabbarView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YRTabbarView.m; sourceTree = "<group>"; };
+		993F844A2330D36D00E01145 /* YRHomeScheHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YRHomeScheHeader.h; sourceTree = "<group>"; };
+		993F844B2330D36D00E01145 /* YRHomeScheHeader.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YRHomeScheHeader.m; sourceTree = "<group>"; };
 		994817112278281F007C7CEA /* macro.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = macro.h; sourceTree = "<group>"; };
 		994817122278290A007C7CEA /* import.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = import.h; sourceTree = "<group>"; };
 		9948171322783494007C7CEA /* msg_route.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = msg_route.json; sourceTree = "<group>"; };
@@ -210,6 +225,8 @@
 		994AC5482283CEE0006FE026 /* YRNavHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YRNavHeaderView.m; sourceTree = "<group>"; };
 		994AC54A2283FEDC006FE026 /* UINavigationController+alpha.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UINavigationController+alpha.h"; sourceTree = "<group>"; };
 		994AC54B2283FEDC006FE026 /* UINavigationController+alpha.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UINavigationController+alpha.m"; sourceTree = "<group>"; };
+		9979E8EA230E87BB00516C77 /* YRWebView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YRWebView.h; sourceTree = "<group>"; };
+		9979E8EB230E87BB00516C77 /* YRWebView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YRWebView.m; sourceTree = "<group>"; };
 		999F650E227E658E00329012 /* UIView+frame.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIView+frame.h"; sourceTree = "<group>"; };
 		999F650F227E658E00329012 /* UIView+frame.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIView+frame.m"; sourceTree = "<group>"; };
 		999F6511227E664C00329012 /* UIImageView+userId.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIImageView+userId.h"; sourceTree = "<group>"; };
@@ -220,8 +237,16 @@
 		999F6519227E697D00329012 /* UILabel+vertical.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UILabel+vertical.m"; sourceTree = "<group>"; };
 		999F651C227E6A6000329012 /* NSString+regular.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSString+regular.h"; sourceTree = "<group>"; };
 		999F651D227E6A6000329012 /* NSString+regular.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSString+regular.m"; sourceTree = "<group>"; };
+		99B06C6E22CDA18700D21A36 /* YRDocuVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YRDocuVC.h; sourceTree = "<group>"; };
+		99B06C6F22CDA18700D21A36 /* YRDocuVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YRDocuVC.m; sourceTree = "<group>"; };
+		99B06C7122CDA1A800D21A36 /* YRDocuModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YRDocuModel.h; sourceTree = "<group>"; };
+		99B06C7222CDA1A800D21A36 /* YRDocuModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YRDocuModel.m; sourceTree = "<group>"; };
+		99B06C7422CDA1BE00D21A36 /* YRDocuCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YRDocuCell.h; sourceTree = "<group>"; };
+		99B06C7522CDA1BE00D21A36 /* YRDocuCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YRDocuCell.m; sourceTree = "<group>"; };
 		99B4252D22815E2900DAE304 /* YRAlertView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YRAlertView.h; sourceTree = "<group>"; };
 		99B4252E22815E2900DAE304 /* YRAlertView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YRAlertView.m; sourceTree = "<group>"; };
+		99C0146322964BEB0057D7B2 /* NSString+device.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSString+device.h"; sourceTree = "<group>"; };
+		99C0146422964BEB0057D7B2 /* NSString+device.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSString+device.m"; sourceTree = "<group>"; };
 		99C1633E227FD24E002ED79D /* YRWorkConModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YRWorkConModel.h; sourceTree = "<group>"; };
 		99C1633F227FD24E002ED79D /* YRWorkConModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YRWorkConModel.m; sourceTree = "<group>"; };
 		99C16341227FDE64002ED79D /* work_route.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = work_route.json; sourceTree = "<group>"; };
@@ -268,6 +293,8 @@
 		99C6FF222276E4C000C7070A /* YRMsgMainCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YRMsgMainCell.m; sourceTree = "<group>"; };
 		99C6FF242276FAE000C7070A /* YRMsgMainModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YRMsgMainModel.m; sourceTree = "<group>"; };
 		99C6FF252276FAE000C7070A /* YRMsgMainModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YRMsgMainModel.h; sourceTree = "<group>"; };
+		99F3F30622A61F010061CB23 /* YRNetworkManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YRNetworkManager.h; sourceTree = "<group>"; };
+		99F3F30722A61F010061CB23 /* YRNetworkManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YRNetworkManager.m; sourceTree = "<group>"; };
 		99F4A73B2277D1B8009AA6ED /* YRLoadImgCacheTool.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YRLoadImgCacheTool.h; sourceTree = "<group>"; };
 		99F4A73C2277D1B8009AA6ED /* YRLoadImgCacheTool.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YRLoadImgCacheTool.m; sourceTree = "<group>"; };
 		99F4A73E2277D2DF009AA6ED /* YRLoadingVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YRLoadingVC.h; sourceTree = "<group>"; };
@@ -563,6 +590,66 @@
 			path = "NSString+secri";
 			sourceTree = "<group>";
 		};
+		993F843E2330691A00E01145 /* Home */ = {
+			isa = PBXGroup;
+			children = (
+				993F843F2330691A00E01145 /* Main */,
+			);
+			path = Home;
+			sourceTree = "<group>";
+		};
+		993F843F2330691A00E01145 /* Main */ = {
+			isa = PBXGroup;
+			children = (
+				993F84402330691A00E01145 /* Others */,
+				993F84412330691A00E01145 /* Models */,
+				993F84422330691A00E01145 /* Controllers */,
+				993F84432330691A00E01145 /* Views */,
+			);
+			path = Main;
+			sourceTree = "<group>";
+		};
+		993F84402330691A00E01145 /* Others */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Others;
+			sourceTree = "<group>";
+		};
+		993F84412330691A00E01145 /* Models */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Models;
+			sourceTree = "<group>";
+		};
+		993F84422330691A00E01145 /* Controllers */ = {
+			isa = PBXGroup;
+			children = (
+				993F84442330693600E01145 /* YRHomeVC.h */,
+				993F84452330693600E01145 /* YRHomeVC.m */,
+			);
+			path = Controllers;
+			sourceTree = "<group>";
+		};
+		993F84432330691A00E01145 /* Views */ = {
+			isa = PBXGroup;
+			children = (
+				993F844A2330D36D00E01145 /* YRHomeScheHeader.h */,
+				993F844B2330D36D00E01145 /* YRHomeScheHeader.m */,
+			);
+			path = Views;
+			sourceTree = "<group>";
+		};
+		9979E8E9230E87AE00516C77 /* WebView */ = {
+			isa = PBXGroup;
+			children = (
+				9979E8EA230E87BB00516C77 /* YRWebView.h */,
+				9979E8EB230E87BB00516C77 /* YRWebView.m */,
+			);
+			path = WebView;
+			sourceTree = "<group>";
+		};
 		999F650C227E656B00329012 /* UIView */ = {
 			isa = PBXGroup;
 			children = (
@@ -597,10 +684,57 @@
 			children = (
 				999F651C227E6A6000329012 /* NSString+regular.h */,
 				999F651D227E6A6000329012 /* NSString+regular.m */,
+				99C0146322964BEB0057D7B2 /* NSString+device.h */,
+				99C0146422964BEB0057D7B2 /* NSString+device.m */,
 			);
 			path = NSString;
 			sourceTree = "<group>";
 		};
+		99B06C6922CDA12900D21A36 /* Docu */ = {
+			isa = PBXGroup;
+			children = (
+				99B06C6D22CDA16000D21A36 /* Others */,
+				99B06C6C22CDA15300D21A36 /* Models */,
+				99B06C6B22CDA14900D21A36 /* Controllers */,
+				99B06C6A22CDA13400D21A36 /* Views */,
+			);
+			path = Docu;
+			sourceTree = "<group>";
+		};
+		99B06C6A22CDA13400D21A36 /* Views */ = {
+			isa = PBXGroup;
+			children = (
+				99B06C7422CDA1BE00D21A36 /* YRDocuCell.h */,
+				99B06C7522CDA1BE00D21A36 /* YRDocuCell.m */,
+			);
+			path = Views;
+			sourceTree = "<group>";
+		};
+		99B06C6B22CDA14900D21A36 /* Controllers */ = {
+			isa = PBXGroup;
+			children = (
+				99B06C6E22CDA18700D21A36 /* YRDocuVC.h */,
+				99B06C6F22CDA18700D21A36 /* YRDocuVC.m */,
+			);
+			path = Controllers;
+			sourceTree = "<group>";
+		};
+		99B06C6C22CDA15300D21A36 /* Models */ = {
+			isa = PBXGroup;
+			children = (
+				99B06C7122CDA1A800D21A36 /* YRDocuModel.h */,
+				99B06C7222CDA1A800D21A36 /* YRDocuModel.m */,
+			);
+			path = Models;
+			sourceTree = "<group>";
+		};
+		99B06C6D22CDA16000D21A36 /* Others */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Others;
+			sourceTree = "<group>";
+		};
 		99B4252C22815E0700DAE304 /* AlertView */ = {
 			isa = PBXGroup;
 			children = (
@@ -665,6 +799,7 @@
 		99C6FE7B22768EC000C7070A /* Modules */ = {
 			isa = PBXGroup;
 			children = (
+				993F843E2330691A00E01145 /* Home */,
 				99F4A7352277CFDD009AA6ED /* Loading */,
 				99C6FE8522768EC000C7070A /* Base */,
 				99C6FE7C22768EC000C7070A /* App */,
@@ -707,6 +842,7 @@
 		99C6FE8122768EC000C7070A /* Work */ = {
 			isa = PBXGroup;
 			children = (
+				99B06C6922CDA12900D21A36 /* Docu */,
 				99C6FE9A2276933100C7070A /* Main */,
 			);
 			path = Work;
@@ -771,6 +907,8 @@
 		99C6FE8D22768EC000C7070A /* Utils */ = {
 			isa = PBXGroup;
 			children = (
+				9979E8E9230E87AE00516C77 /* WebView */,
+				99F3F30522A61ED40061CB23 /* Network */,
 				991C14652282D8100080B54A /* encode */,
 				2710E66B2281744C0002A4B0 /* UIPopoverListView */,
 				99B4252C22815E0700DAE304 /* AlertView */,
@@ -877,6 +1015,8 @@
 			children = (
 				99C6FECF2276982F00C7070A /* YRTabBar.h */,
 				99C6FED02276982F00C7070A /* YRTabBar.m */,
+				993F8447233074B600E01145 /* YRTabbarView.h */,
+				993F8448233074B600E01145 /* YRTabbarView.m */,
 			);
 			path = Views;
 			sourceTree = "<group>";
@@ -1063,6 +1203,15 @@
 			path = defines;
 			sourceTree = "<group>";
 		};
+		99F3F30522A61ED40061CB23 /* Network */ = {
+			isa = PBXGroup;
+			children = (
+				99F3F30622A61F010061CB23 /* YRNetworkManager.h */,
+				99F3F30722A61F010061CB23 /* YRNetworkManager.m */,
+			);
+			path = Network;
+			sourceTree = "<group>";
+		};
 		99F4A7352277CFDD009AA6ED /* Loading */ = {
 			isa = PBXGroup;
 			children = (
@@ -1456,12 +1605,14 @@
 				"${SRCROOT}/Pods/Target Support Files/Pods-UU_Ent/Pods-UU_Ent-resources.sh",
 				"${PODS_ROOT}/IQKeyboardManager/IQKeyboardManager/Resources/IQKeyboardManager.bundle",
 				"${PODS_ROOT}/MJRefresh/MJRefresh/MJRefresh.bundle",
+				"${PODS_ROOT}/NSDate+TimeAgo/NSDateTimeAgo.bundle",
 				"${PODS_CONFIGURATION_BUILD_DIR}/gRPC/gRPCCertificates.bundle",
 			);
 			name = "[CP] Copy Pods Resources";
 			outputPaths = (
 				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/IQKeyboardManager.bundle",
 				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MJRefresh.bundle",
+				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/NSDateTimeAgo.bundle",
 				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/gRPCCertificates.bundle",
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -1505,12 +1656,16 @@
 				991C14742282D89C0080B54A /* RSA.m in Sources */,
 				99C6FECB227696CA00C7070A /* YRMsgVC.m in Sources */,
 				99C16340227FD24E002ED79D /* YRWorkConModel.m in Sources */,
+				99C0146522964BEB0057D7B2 /* NSString+device.m in Sources */,
 				99C6FF262276FAE000C7070A /* YRMsgMainModel.m in Sources */,
+				993F84462330693600E01145 /* YRHomeVC.m in Sources */,
 				2710E66522815DCF0002A4B0 /* YRMineCell.m in Sources */,
 				99F4A7462277D503009AA6ED /* YRAdView.m in Sources */,
 				99C6FE9222768EC000C7070A /* main.m in Sources */,
 				99C6FE99227690F800C7070A /* YRBaseNav.m in Sources */,
+				993F844C2330D36D00E01145 /* YRHomeScheHeader.m in Sources */,
 				99C6FE96227690BE00C7070A /* YRBaseVC.m in Sources */,
+				9979E8EC230E87BB00516C77 /* YRWebView.m in Sources */,
 				2710E65522801B7E0002A4B0 /* YRRegisterVC.m in Sources */,
 				991C147C2282F0520080B54A /* UIButton+block.m in Sources */,
 				99C6FF172276D13500C7070A /* YRUserInfo.m in Sources */,
@@ -1521,15 +1676,20 @@
 				270E6C9B2282E6D0008B12B9 /* UINavigationController+safe.m in Sources */,
 				99F4A73D2277D1B8009AA6ED /* YRLoadImgCacheTool.m in Sources */,
 				99C6FECE227697DA00C7070A /* YRContactVC.m in Sources */,
+				99B06C7622CDA1BE00D21A36 /* YRDocuCell.m in Sources */,
 				99C6FEC82276966600C7070A /* YRWebVC.m in Sources */,
 				99C6FEC02276957400C7070A /* YRMineVC.m in Sources */,
 				2710E66022801ED10002A4B0 /* YRShowMessageFromNavi.m in Sources */,
 				2710E66822815E030002A4B0 /* YRMineModel.m in Sources */,
+				99B06C7022CDA18700D21A36 /* YRDocuVC.m in Sources */,
 				99C6FF1B2276DD3900C7070A /* YRTableView.m in Sources */,
 				27029BD32277E16300D53A94 /* YRButton.m in Sources */,
 				27029BCC2277063F00D53A94 /* UIColor+HexColor.m in Sources */,
 				2710E65822801B930002A4B0 /* YRPwdLevelView.m in Sources */,
+				99B06C7322CDA1A800D21A36 /* YRDocuModel.m in Sources */,
 				99F4A7402277D2DF009AA6ED /* YRLoadingVC.m in Sources */,
+				99F3F30822A61F010061CB23 /* YRNetworkManager.m in Sources */,
+				993F8449233074B600E01145 /* YRTabbarView.m in Sources */,
 				99C6FE8F22768EC000C7070A /* AppDelegate.m in Sources */,
 				999F6516227E688600329012 /* UIView+selector.m in Sources */,
 				999F651E227E6A6000329012 /* NSString+regular.m in Sources */,

+ 22 - 31
UU_Ent/UU_Ent/Modules/App/AppDelegate.m

@@ -53,24 +53,9 @@
             [YRAlertView showWithTitle:@"UU互联" content:errorStr sureTitle:@"确定" cancelTitle:@"" click:^(NSInteger index) {
 
                 [UIView animateWithDuration:0.3f animations:^{
-                   
-                    YRLoginVC *loginVC = [[YRLoginVC alloc]init];
-                    
-                    self.window.rootViewController = loginVC;
-                    
-                    loginVC.completed = ^(BOOL success) {
-                        
-                        YRMainVC *mainVC = [[YRMainVC alloc]init];
-                        
-                        [UIView animateWithDuration:0.3f animations:^{
-                            
-                            self.window.rootViewController = mainVC;
-                            
-                        }];
-                        
-                        
-                    };
-                    
+                 
+                    [self changeToUserLoginVC];
+                 
                 }];
 
 
@@ -83,8 +68,26 @@
         
     }else{
     
+        [self changeToUserLoginVC];
+        
+    }
+    
+    [self.window makeKeyAndVisible];
+    //加载动画结束后
+    [YRAdView startLoad].loadCompleted = ^{
+        
+        
+        
+    };
+    
+}
+
+-(void)changeToUserLoginVC{
+    
     YRLoginVC *loginVC = [[YRLoginVC alloc]init];
     
+    self.window.rootViewController = loginVC;
+    
     loginVC.completed = ^(BOOL success) {
         
         YRMainVC *mainVC = [[YRMainVC alloc]init];
@@ -99,17 +102,6 @@
     };
     
     
-    self.window.rootViewController = loginVC;
-    
-    }
-    
-    [self.window makeKeyAndVisible];
-    //加载动画结束后
-    [YRAdView startLoad].loadCompleted = ^{
-        
-        
-        
-    };
     
 }
 
@@ -118,7 +110,7 @@
  */
 -(void)initializeData{
     
-    [YRUserInfo shareManager].masChanged = YES;
+   
     
 }
 
@@ -155,7 +147,6 @@
     // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
 }
 
-
 - (void)applicationWillTerminate:(UIApplication *)application {
     // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
 }

+ 8 - 7
UU_Ent/UU_Ent/Modules/Base/YRBaseNav.m

@@ -7,7 +7,7 @@
 //
 
 #import "YRBaseNav.h"
-
+#import "YRWorkVC.h"
 @interface YRBaseNav ()
 
 @end
@@ -25,11 +25,14 @@
 -(void)setNavigationBar{
     
     self.navigationBar.tintColor = [UIColor whiteColor];
+    [self.navigationBar setBackIndicatorImage:[[UIImage imageNamed:@"uu_back_icon"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]];
+    [self.navigationBar setBackIndicatorTransitionMaskImage:[[UIImage imageNamed:@"uu_back_icon"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]];
     
+    [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-MIN(SCREEN_WIDTH, SCREEN_HEIGHT), -2) forBarMetrics:UIBarMetricsDefault];
+   
 }
 
 
-
 -(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{
     
     if (self.childViewControllers.count > 0) {
@@ -38,18 +41,16 @@
         
         if ([self.childViewControllers[0] isKindOfClass:NSClassFromString(@"YRWorkVC")]) {
             
-            [YRUserInfo shareManager].isSubWork = YES;
+            YRWorkVC *workVC = (YRWorkVC *)self.childViewControllers[0];
+            
+            workVC.isOnChildVC = YES;
             
         }
         
     }
     
-    
     [super pushViewController:viewController animated:animated];
     
 }
 
-
-
-
 @end

+ 2 - 0
UU_Ent/UU_Ent/Modules/Base/YRBaseVC.h

@@ -16,6 +16,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 -(void)setUpUI;
 
+-(void)backAction;
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 45 - 1
UU_Ent/UU_Ent/Modules/Base/YRBaseVC.m

@@ -14,6 +14,7 @@
 
 @implementation YRBaseVC
 
+
 - (void)viewDidLoad {
     [super viewDidLoad];
     // Do any additional setup after loading the view.
@@ -21,6 +22,7 @@
     //处理present的页面
     [self present];
     [self setUpUI];
+   
 }
 
 
@@ -28,14 +30,39 @@
 
 -(void)present{
     
+    
     if (self.presentingViewController) {
-        
+    
         UIBarButtonItem *leftItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemStop target:self action:@selector(backAction)];
         
         leftItem.tintColor = [UIColor blueColor];
         
         self.navigationItem.leftBarButtonItems = @[leftItem];
         
+    }else if(self.navigationController.childViewControllers.count > 1){
+        
+        
+//        UIButton *backButton = [UIButton buttonWithType:UIButtonTypeSystem];
+//        backButton.frame = CGRectMake(0, 5, 22, 22);
+//        CGFloat imageY = 0;
+//        if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 11.0) {
+//            imageY = 5;
+//        }
+//        UIImageView *image = [[UIImageView alloc]initWithFrame:CGRectMake(0, imageY, 22, 22)];
+//        image.image = [UIImage imageNamed:@"uu_back_icon"];
+//        image.tintColor = [UIColor whiteColor];
+//        [backButton addSubview:image];
+//        [backButton addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside];
+//
+//        UIBarButtonItem *backItem = [[UIBarButtonItem alloc]initWithCustomView:backButton];
+//
+//        backItem.tintColor = [UIColor whiteColor];
+//
+//        self.navigationItem.leftBarButtonItems = @[backItem];
+//
+//        self.navigationController.interactivePopGestureRecognizer.enabled = YES;
+//        self.navigationController.interactivePopGestureRecognizer.delegate = nil;
+        
     }
     
 }
@@ -44,8 +71,19 @@
     
     if (self.presentingViewController) {
         
+        if (self.navigationController.childViewControllers.count > 1) {
+            
+            [self.navigationController popViewControllerAnimated:YES];
+            
+        }else{
+        
         [self dismissViewControllerAnimated:YES completion:nil];
         
+        }
+    }else{
+        
+        [self.navigationController popViewControllerAnimated:YES];
+        
     }
     
 }
@@ -65,4 +103,10 @@
 
 -(void)setValue:(id)value forUndefinedKey:(NSString *)key{}
 
+-(void)dealloc{
+    
+    DLog(@"%@被释放了",self.class);
+    
+}
+
 @end

+ 30 - 0
UU_Ent/UU_Ent/Modules/Contacts/Main/Controllers/YRContactVC.m

@@ -14,10 +14,40 @@
 
 @implementation YRContactVC
 
+- (instancetype)init
+{
+    self = [super init];
+    if (self) {
+        
+        [self addNotification];
+        
+    }
+    return self;
+}
+
 - (void)viewDidLoad {
     [super viewDidLoad];
     // Do any additional setup after loading the view.
     self.title = @"联系人";
 }
 
+-(void)addNotification{
+    
+     //切换账套
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadData) name:kYRUserMasterChangedNotification object:nil];
+    
+}
+
+-(void)loadData{
+    
+    DLog(@"这里是通讯录的数据刷新");
+    
+}
+
+-(void)dealloc{
+     //切换账套
+    [[NSNotificationCenter defaultCenter] removeObserver:self name:kYRUserMasterChangedNotification object:nil];
+    
+}
+
 @end

+ 17 - 0
UU_Ent/UU_Ent/Modules/Home/Main/Controllers/YRHomeVC.h

@@ -0,0 +1,17 @@
+//
+//  YRHomeVC.h
+//  UU_Ent
+//
+//  Created by liujl on 2019/9/17.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import "YRBaseVC.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface YRHomeVC : YRBaseVC
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 154 - 0
UU_Ent/UU_Ent/Modules/Home/Main/Controllers/YRHomeVC.m

@@ -0,0 +1,154 @@
+//
+//  YRHomeVC.m
+//  UU_Ent
+//
+//  Created by liujl on 2019/9/17.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import "YRHomeVC.h"
+#import "YRHomeScheHeader.h"
+@interface YRHomeVC ()<UITableViewDelegate,UITableViewDataSource>
+
+@property(strong,nonatomic)YRTableView *tableView;
+
+@property(strong,nonatomic)NSMutableArray *dataArr;
+
+@end
+
+@implementation YRHomeVC
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    
+    
+}
+
+-(void)setUpUI{
+    
+    self.navigationController.navigationBar.hidden = YES;
+    
+    [self.view addSubview:self.tableView];
+    
+}
+
+
+#pragma mark - delegate && dataSource
+
+-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
+    
+    return self.dataArr.count;
+    
+}
+
+-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
+    
+    return 2;
+    
+}
+
+-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
+    
+    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"YRUITableViewCellReid"];
+    
+    if (!cell) {
+        
+        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"YRUITableViewCellReid"];
+        cell.selectionStyle = UITableViewCellSelectionStyleNone;
+    }
+    
+    
+    return cell;
+}
+
+
+-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
+    
+    if (indexPath.section == 0) {
+        
+        return 40;
+        
+    }
+    
+    return 66;
+    
+}
+
+-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
+    
+    if (section == 0) {
+        
+        return 330;
+        
+    }else{
+        
+        return 10;
+        
+    }
+    
+}
+
+-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
+    
+    return CGFLOAT_MIN;
+    
+}
+
+-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
+    
+    if (section == 0) {
+        
+        return [YRHomeScheHeader new];
+        
+    }
+    
+    return [UIView new];
+    
+}
+
+-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
+    
+    return [UIView new];
+    
+}
+
+-(YRTableView *)tableView{
+    
+    if (!_tableView) {
+        
+        _tableView = [[YRTableView alloc]initWithFrame:self.view.frame style:UITableViewStyleGrouped];
+        _tableView.delegate = self;
+        _tableView.dataSource = self;
+        _tableView.autoNoDataSet = NO;
+        _tableView.showsVerticalScrollIndicator = NO;
+        CGFloat height = [UIApplication sharedApplication].statusBarFrame.size.height;
+        _tableView.contentInset =  UIEdgeInsetsMake(-height, 0, 0, 0);
+        
+    }
+    
+    return _tableView;
+}
+
+-(NSMutableArray *)dataArr{
+    
+    if (!_dataArr) {
+        
+        _dataArr = [[NSMutableArray alloc]init];
+        [_dataArr addObject:@""];
+        [_dataArr addObject:@""];
+        [_dataArr addObject:@""];
+        [_dataArr addObject:@""];
+        
+    }
+    
+    return _dataArr;
+}
+
+-(void)dealloc{
+    //切换账套
+    [[NSNotificationCenter defaultCenter] removeObserver:self name:kYRUserMasterChangedNotification object:nil];
+    
+}
+
+@end

+ 17 - 0
UU_Ent/UU_Ent/Modules/Home/Main/Views/YRHomeScheHeader.h

@@ -0,0 +1,17 @@
+//
+//  YRHomeScheHeader.h
+//  UU_Ent
+//
+//  Created by liujl on 2019/9/17.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface YRHomeScheHeader : UIView
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 265 - 0
UU_Ent/UU_Ent/Modules/Home/Main/Views/YRHomeScheHeader.m

@@ -0,0 +1,265 @@
+//
+//  YRHomeScheHeader.m
+//  UU_Ent
+//
+//  Created by liujl on 2019/9/17.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import "YRHomeScheHeader.h"
+#import <JTCalendar.h>
+
+@interface YRHomeScheHeader()<JTCalendarDelegate>{
+    
+    NSMutableDictionary *_eventsByDate;
+    
+    NSDate *_dateSelected;
+}
+
+
+@property (strong, nonatomic) JTCalendarMenuView *calendarMenuView;
+@property (strong, nonatomic) JTHorizontalCalendarView *calendarContentView;
+
+@property (strong, nonatomic) JTCalendarManager *calendarManager;
+
+
+@end
+
+@implementation YRHomeScheHeader
+
+- (instancetype)init
+{
+    self = [super init];
+    if (self) {
+        
+        [self createUI];
+        
+    }
+    return self;
+}
+
+-(void)createUI{
+    
+    self.backgroundColor = [UIColor whiteColor];
+    
+    UIView *topView = [UIView new];
+    
+    topView.backgroundColor = [UIColor lightTextColor];
+    
+    [self addSubview:topView];
+    
+    [topView mas_makeConstraints:^(MASConstraintMaker *make) {
+       
+        make.top.left.right.equalTo(self);
+        make.height.mas_equalTo(20);
+        
+    }];
+    
+    self.calendarMenuView = [JTCalendarMenuView new];
+    [self addSubview:self.calendarMenuView];
+    
+    [self.calendarMenuView mas_makeConstraints:^(MASConstraintMaker *make) {
+       
+        make.top.equalTo(topView.mas_bottom);
+        make.left.right.equalTo(self);
+        make.height.mas_equalTo(40);
+        
+    }];
+    
+    self.calendarContentView = [JTHorizontalCalendarView new];
+    self.calendarContentView.backgroundColor = [UIColor whiteColor];
+    [self addSubview:self.calendarContentView];
+    
+    [self.calendarContentView mas_makeConstraints:^(MASConstraintMaker *make) {
+       
+        make.top.equalTo(self.calendarMenuView.mas_bottom);
+        make.left.right.bottom.equalTo(self);
+        
+    }];
+    
+    self.calendarManager = [JTCalendarManager new];
+    self.calendarManager.delegate = self;
+    
+    self.calendarMenuView.contentRatio = .75;
+    self.calendarManager.settings.weekDayFormat = JTCalendarWeekDayFormatSingle;
+    self.calendarManager.dateHelper.calendar.locale = [NSLocale localeWithLocaleIdentifier:@"zh_Hans"];
+    
+    [self.calendarManager setMenuView:self.calendarMenuView];
+    [self.calendarManager setContentView:self.calendarContentView];
+    [self.calendarManager setDate:[NSDate date]];
+    
+}
+
+
+#pragma mark - CalendarManager delegate
+
+// Exemple of implementation of prepareDayView method
+// Used to customize the appearance of dayView
+- (void)calendar:(JTCalendarManager *)calendar prepareDayView:(JTCalendarDayView *)dayView
+{
+    dayView.hidden = NO;
+    
+    // Other month
+    if([dayView isFromAnotherMonth]){
+        dayView.hidden = YES;
+    }
+    // Today
+    else if([_calendarManager.dateHelper date:[NSDate date] isTheSameDayThan:dayView.date]){
+        dayView.circleView.hidden = NO;
+        dayView.circleView.backgroundColor = [UIColor blueColor];
+        dayView.dotView.backgroundColor = [UIColor whiteColor];
+        dayView.textLabel.textColor = [UIColor whiteColor];
+    }
+    // Selected date
+    else if(_dateSelected && [_calendarManager.dateHelper date:_dateSelected isTheSameDayThan:dayView.date]){
+        dayView.circleView.hidden = NO;
+        dayView.circleView.backgroundColor = [UIColor redColor];
+        dayView.dotView.backgroundColor = [UIColor yellowColor];
+        dayView.textLabel.textColor = [UIColor whiteColor];
+    }
+    // Another day of the current month
+    else{
+        dayView.circleView.hidden = YES;
+        dayView.dotView.backgroundColor = [UIColor redColor];
+        dayView.textLabel.textColor = [UIColor blackColor];
+    }
+    
+    if([self haveEventForDay:dayView.date]){
+        dayView.dotView.hidden = NO;
+    }
+    else{
+        dayView.dotView.hidden = NO;
+    }
+}
+
+- (void)calendar:(JTCalendarManager *)calendar didTouchDayView:(JTCalendarDayView *)dayView
+{
+    _dateSelected = dayView.date;
+    
+    // Animation for the circleView
+    dayView.circleView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.1, 0.1);
+    [UIView transitionWithView:dayView
+                      duration:.3
+                       options:0
+                    animations:^{
+                        dayView.circleView.transform = CGAffineTransformIdentity;
+                        [_calendarManager reload];
+                    } completion:nil];
+    
+    
+    // Don't change page in week mode because block the selection of days in first and last weeks of the month
+    if(_calendarManager.settings.weekModeEnabled){
+        return;
+    }
+    
+    // Load the previous or next page if touch a day from another month
+    
+    if(![_calendarManager.dateHelper date:_calendarContentView.date isTheSameMonthThan:dayView.date]){
+        if([_calendarContentView.date compare:dayView.date] == NSOrderedAscending){
+            [_calendarContentView loadNextPageWithAnimation];
+        }
+        else{
+            [_calendarContentView loadPreviousPageWithAnimation];
+        }
+    }
+}
+
+#pragma mark - Views customization
+
+- (UIView *)calendarBuildMenuItemView:(JTCalendarManager *)calendar
+{
+    UILabel *label = [UILabel new];
+    
+    label.textAlignment = NSTextAlignmentCenter;
+    label.font = [UIFont fontWithName:@"Avenir-Medium" size:12];
+    
+    return label;
+}
+
+- (void)calendar:(JTCalendarManager *)calendar prepareMenuItemView:(UILabel *)menuItemView date:(NSDate *)date
+{
+    static NSDateFormatter *dateFormatter;
+    if(!dateFormatter){
+        dateFormatter = [NSDateFormatter new];
+        dateFormatter.dateFormat = @"MMMM yyyy";
+        
+        dateFormatter.locale = _calendarManager.dateHelper.calendar.locale;
+        dateFormatter.timeZone = _calendarManager.dateHelper.calendar.timeZone;
+    }
+    
+    menuItemView.text = [dateFormatter stringFromDate:date];
+}
+
+- (UIView<JTCalendarWeekDay> *)calendarBuildWeekDayView:(JTCalendarManager *)calendar
+{
+    JTCalendarWeekDayView *view = [JTCalendarWeekDayView new];
+    
+    for(UILabel *label in view.dayViews){
+        label.textColor = [UIColor blackColor];
+        label.font = [UIFont fontWithName:@"Avenir-Light" size:14];
+    }
+    
+    return view;
+}
+
+- (UIView<JTCalendarDay> *)calendarBuildDayView:(JTCalendarManager *)calendar
+{
+    JTCalendarDayView *view = [JTCalendarDayView new];
+    
+    view.textLabel.font = [UIFont fontWithName:@"Avenir-Light" size:14];
+    
+    view.circleRatio = .8;
+    view.dotRatio = 1. / .9;
+    
+    return view;
+}
+
+#pragma mark - Fake data
+
+// Used only to have a key for _eventsByDate
+- (NSDateFormatter *)dateFormatter
+{
+    static NSDateFormatter *dateFormatter;
+    if(!dateFormatter){
+        dateFormatter = [NSDateFormatter new];
+        dateFormatter.dateFormat = @"dd-MM-yyyy";
+    }
+    
+    return dateFormatter;
+}
+
+- (BOOL)haveEventForDay:(NSDate *)date
+{
+    NSString *key = [[self dateFormatter] stringFromDate:date];
+    
+    NSMutableArray *arr = _eventsByDate[key];
+    
+    if(arr && [arr count] > 0){
+        return YES;
+    }
+    
+    return NO;
+    
+}
+
+- (void)createRandomEvents
+{
+    _eventsByDate = [NSMutableDictionary new];
+    
+    for(int i = 0; i < 30; ++i){
+        // Generate 30 random dates between now and 60 days later
+        NSDate *randomDate = [NSDate dateWithTimeInterval:(rand() % (3600 * 24 * 60)) sinceDate:[NSDate date]];
+        
+        // Use the date as key for eventsByDate
+        NSString *key = [[self dateFormatter] stringFromDate:randomDate];
+        
+        if(!_eventsByDate[key]){
+            _eventsByDate[key] = [NSMutableArray new];
+        }
+        
+        [_eventsByDate[key] addObject:randomDate];
+    }
+}
+
+
+@end

+ 20 - 121
UU_Ent/UU_Ent/Modules/Loading/Main/Controllers/YRLoadingVC.m

@@ -31,23 +31,23 @@
     
     NSMutableArray *imageArr = [NSMutableArray array];
     
-    imageArr = [self getCacheAppImages];
+    imageArr = [[YRLoadImgCacheTool shareInstance] getCacheAppImages];
+    
+    if ([[NSString deviceString] containsString:@"4"]) {
+
+        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.6 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+
+
+            if(self.aniCompleted){
+
+                self.aniCompleted();
+
+            }
+        });
+
+
+    }else{
     
-//    if ([[NSString deviceString] containsString:@"4"]) {
-//        
-//        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.6 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-//            
-//            
-//            if(self.aniCompleted){
-//                
-//                self.aniCompleted();
-//                
-//            }
-//        });
-//        
-//        
-//    }else{
-        
         
         if (imageArr.count == 0) {
             
@@ -55,10 +55,8 @@
                 
                 NSString *imageStr = nil;
                 
-                
                 imageStr = [NSString stringWithFormat:@"loading%d",i];
                 
-                
                 NSString *path = [[NSBundle mainBundle] pathForResource:imageStr ofType:@"png"];
                 
                 UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfFile:path]];
@@ -71,6 +69,7 @@
                 
             }
             
+            
             imageView.animationImages = imageArr;
             
             imageView.animationDuration = 1.8;
@@ -96,7 +95,6 @@
             });
             
             
-            
         }else if(imageArr.count == 1){
             
            
@@ -129,9 +127,9 @@
             
             imageView.image = (UIImage *)imageArr[index];
             
-//            @weakify(self)
+            @weakify(self)
             YRCountDownView *countView = [[YRCountDownView alloc]initWithFrame:CGRectMake(self.view.frame.size.width-54, 30, 40, 40) interval:5 completed:^{
-//                @strongify(self)
+                @strongify(self)
                 [imageView stopAnimating];
                 if (self.aniCompleted) {
                     
@@ -143,110 +141,10 @@
             
             [self.view addSubview:countView];
             
-            
         }
         
     
-    
-}
-
-
--(NSMutableArray<UIImage *> *)getCacheAppImages{
-    
-    NSMutableArray *imgArr = [NSMutableArray new];
-    
-    NSString *filePath = [self getFilePath];
-    
-    NSFileManager *fileManager = [NSFileManager defaultManager];
-    
-    NSArray<NSString *> *fileAr = [[NSArray alloc] initWithArray:[fileManager contentsOfDirectoryAtPath:filePath error:nil]];
-    
-    NSMutableArray<NSString *> *fileArr = [fileAr mutableCopy];
-    
-    if(fileArr.count== 0){
-        
-        return imgArr;
-        
-    }else if(fileArr.count==1){
-        
-        if([fileArr[0] containsString:@".png"]){
-            
-            NSString *imagePath = [filePath stringByAppendingPathComponent:fileArr[0]];
-            
-            UIImage *image = [UIImage imageWithContentsOfFile:imagePath];
-            
-            if(image && [image isKindOfClass:[UIImage class]]){
-                
-                [imgArr addObject:image];
-                
-            }
-            
-        }
-        
-        return imgArr;
-        
-    }else{
-        
-        
-        
-        for(int i=0;i<fileArr.count;i++){
-            
-            for(int j=0;j<fileArr.count-i-1;j++){
-                
-                NSString *fileNam = fileArr[j];
-                NSString *fileName = fileArr[j+1];
-                
-                fileNam = [fileNam stringByReplacingOccurrencesOfString:@"loadingAd" withString:@""];
-                fileNam = [fileNam stringByReplacingOccurrencesOfString:@".png" withString:@""];
-                NSInteger fileI = [fileNam integerValue];
-                fileName = [fileName stringByReplacingOccurrencesOfString:@"loadingAd" withString:@""];
-                fileName = [fileName stringByReplacingOccurrencesOfString:@".png" withString:@""];
-                NSInteger fileIn = [fileName integerValue];
-                if(fileI > fileIn){
-                    
-                    id temp = fileArr[j];
-                    fileArr[j] = fileArr[j+1];
-                    fileArr[j+1] = temp;
-                    
-                }
-                
-                
-            }
-            
-        }
-        
-        for (int i= 0; i<fileArr.count; i++) {
-            
-            NSString *filePath = [[self getFilePath] stringByAppendingPathComponent:fileArr[i]];
-            
-            UIImage *image = [UIImage imageWithContentsOfFile:filePath];
-            
-            if(image && [image isKindOfClass:[UIImage class]]){
-                
-                [imgArr addObject:image];
-                
-            }
-            
-        }
-        
-        return imgArr;
-        
     }
-    
-    
-}
-
-
--(NSString *)getFilePath{
-    
-    NSString *filePath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
-    
-    filePath = [filePath stringByAppendingPathComponent:@"appLoad"];
-    
-    [[NSFileManager defaultManager] createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil];
-    
-    return filePath;
-    
 }
 
 
@@ -260,6 +158,7 @@
 -(void)dealloc{
     
     
+    
 }
 
 

+ 3 - 0
UU_Ent/UU_Ent/Modules/Loading/Main/Others/YRLoadImgCacheTool.h

@@ -17,6 +17,9 @@ NS_ASSUME_NONNULL_BEGIN
 
 -(void)getAppLoadImage;
 
+
+-(NSMutableArray<UIImage *> *)getCacheAppImages;
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 389 - 2
UU_Ent/UU_Ent/Modules/Loading/Main/Others/YRLoadImgCacheTool.m

@@ -19,7 +19,6 @@ static YRLoadImgCacheTool *instance = nil;
         dispatch_once(&onceToken, ^{
             
             instance = [YRLoadImgCacheTool new];
-          
             
         });
         
@@ -27,8 +26,396 @@ static YRLoadImgCacheTool *instance = nil;
     
 }
 
--(void)getAppLoadImage{}
 
+#pragma mark - app启动图管理
+-(void)getAppLoadImage{
+    
+    
+    dispatch_async(dispatch_get_global_queue(0, 0), ^{
+
+        [self configSdWebImage];
+
+    });
+
+    dispatch_async(dispatch_get_global_queue(0, 0), ^{
+
+        //        http://113.105.74.140:8092/user/appStart
+        //        http://192.168.253.36/men.json
+        NSString *urlStr = [NSString stringWithFormat:@"http://113.105.74.140:8092/user/appStart"];
+
+        NSDictionary *dic = @{@"token":@(1)};
+
+        [[YRNetworkManager shareManager] request:urlStr method:GET parameters:dic progress:nil success:^(NSURLSessionDataTask *task, id responseObject) {
+
+            @try{//防止刚启动出现异常
+
+                NSDictionary *resDic = responseObject;
+
+                if ([responseObject isKindOfClass:[NSData class]]) {
+
+                    resDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
+
+                }
+
+                NSArray *arr = resDic[@"result"];
+
+                if (![arr isKindOfClass:[NSArray class]]) {
+
+                    arr = [NSArray new];
+
+                }
+
+                if (arr.count > 0) {
+
+                    NSDictionary *dic = arr[0];
+
+                    NSString *urlStrOne = dic[@"aa_urlc"];
+
+                    if ([urlStrOne isKindOfClass:[NSString class]]) {
+
+                        if ([urlStrOne containsString:@"http:"]) {
+
+                            NSString *theLast = [NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"theLastAppLoadImagesUrl"]];
+
+                            if(![theLast isEqualToString:urlStrOne]){//如果最后的链接是不一样的,更新本地图片数据
+
+                                dispatch_async(dispatch_get_global_queue(0, 0), ^{
+
+                                    [self clearImageCache];
+
+                                    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlStrOne]];
+
+                                    if(![urlStrOne containsString:@".gif"]){//单张图片
+
+                                        UIImage *image = [UIImage imageWithData:data];
+
+                                        if (image){
+
+                                            NSString *filePath = [self getFilePath];
+
+                                            if ([[NSFileManager defaultManager] createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil]) {
+
+                                                NSString *str = [NSString stringWithFormat:@"loadingAd.png"];
+
+                                                filePath = [filePath stringByAppendingPathComponent:str];
+
+                                                if([[NSFileManager defaultManager] createFileAtPath:filePath contents:data attributes:nil]){
+
+                                                    [[NSUserDefaults standardUserDefaults] setObject:urlStrOne forKey:@"theLastAppLoadImagesUrl"];
+
+                                                };
+
+                                            }
+
+
+                                        }
+
+                                    }else{//gif图片
+
+                                        [self cacheGifImageWithUrl:urlStrOne];
+
+                                    }
+                                });
+                            }else{//如果链接是一样的并且是gif图片,则查看本地的数据是否是对的
+
+                                if([urlStrOne containsString:@".gif"]){
+
+                                    NSURL *fileUrl = [NSURL URLWithString:[NSString stringWithFormat:@"%@",urlStrOne]];
+                                    CGImageSourceRef gifSource = CGImageSourceCreateWithURL((CFURLRef)fileUrl, NULL);
+                                    size_t gifCount = CGImageSourceGetCount(gifSource);
+                                    NSInteger count = [self getCacheAppImages].count;
+
+                                    if(gifCount != count){//如果数量不一致,则存储可能出错
+
+                                        dispatch_async(dispatch_get_global_queue(0, 0), ^{
 
+                                            [self clearImageCache];
+
+                                            [self cacheGifImageWithUrl:urlStrOne];
+
+                                        });
+
+
+
+                                    }
+
+
+                                }
+
+
+                            }
+
+                        }
+
+                    }
+                }else{
+
+
+
+                    [self clearImageCache];
+                    [[NSUserDefaults standardUserDefaults] setObject:@"noImage" forKey:@"theLastAppLoadImagesUrl"];
+
+                }
+
+            } @catch (NSException *exception) {//出现异常,清数据
+
+
+                [self clearImageCache];
+                [[NSUserDefaults standardUserDefaults] setObject:@"noImage" forKey:@"theLastAppLoadImagesUrl"];
+                instance = nil;
+
+            } @finally {
+
+                instance = nil;
+
+            }
+
+        } failure:^(NSURLSessionDataTask *task, NSError *error) {
+
+
+
+        }];
+
+    });
+    
+}
+
+
+-(void)cacheGifImageWithUrl:(NSString *)url{
+    
+    [self clearImageCache];
+    
+    if (url == nil) {
+        
+        url = @"";
+        
+    }
+    
+    NSURL *fileUrl = [NSURL URLWithString:[NSString stringWithFormat:@"%@",url]];
+    CGImageSourceRef gifSource = CGImageSourceCreateWithURL((CFURLRef)fileUrl, NULL);
+    size_t gifCount = CGImageSourceGetCount(gifSource);
+    NSMutableArray *imageArr = [[NSMutableArray alloc]init];
+    
+    BOOL result = YES;
+    
+    for (int i = 0; i< gifCount; i++) {
+        
+        CGImageRef imageRef = CGImageSourceCreateImageAtIndex(gifSource, i, NULL);
+        UIImage *image = [UIImage imageWithCGImage:imageRef];
+        
+        if (image != nil) {
+            
+            [imageArr addObject:image];
+            
+            if(![self cacheImageWithImage:image index:i]){
+                
+                result = NO;
+                break;
+                
+            }
+            
+        }
+        CGImageRelease(imageRef);
+    }
+    
+    
+    if(result){//存储成功
+        
+        [[NSUserDefaults standardUserDefaults] setObject:url forKey:@"theLastAppLoadImagesUrl"];
+        
+    }else{//某张图片存储发生错误,全部清除
+        
+        [self clearImageCache];
+        
+    }
+    
+    
+}
+
+
+-(BOOL)cacheImageWithImage:(UIImage *)image index:(int)index{
+    
+    
+    NSData *data = UIImagePNGRepresentation(image);
+    
+    NSString *str = [NSString stringWithFormat:@"loadingAd%d.png",index];
+    
+    NSString *filePath = [self getFilePath];
+    
+    filePath = [filePath stringByAppendingPathComponent:str];
+    
+    return [[NSFileManager defaultManager] createFileAtPath:filePath contents:data attributes:nil];
+    
+}
+
+-(void)clearImageCache{
+    
+    
+    dispatch_async(dispatch_get_global_queue(0, 0), ^{
+        
+        NSString *filePath = [self getFilePath];
+        
+        NSFileManager *fileManager = [NSFileManager defaultManager];
+        
+        NSArray *fileArr = [[NSArray alloc] initWithArray:[fileManager contentsOfDirectoryAtPath:filePath error:nil]];
+        
+        for (NSString *file in fileArr) {
+            
+            NSString *fileP = [filePath stringByAppendingPathComponent:file];
+            
+            [[NSFileManager defaultManager] removeItemAtPath:fileP error:nil];
+            
+        }
+        
+        
+        
+    });
+    
+    
+}
+
+
+
+-(NSMutableArray<UIImage *> *)getCacheAppImages{
+    
+    NSMutableArray *imgArr = [NSMutableArray new];
+    
+    NSString *filePath = [self getFilePath];
+    
+    NSFileManager *fileManager = [NSFileManager defaultManager];
+    
+    NSArray<NSString *> *fileAr = [[NSArray alloc] initWithArray:[fileManager contentsOfDirectoryAtPath:filePath error:nil]];
+    
+    NSMutableArray<NSString *> *fileArr = [fileAr mutableCopy];
+    
+    if(fileArr.count== 0){
+        
+        return imgArr;
+        
+    }else if(fileArr.count==1){
+        
+        if([fileArr[0] containsString:@".png"]){
+            
+            NSString *imagePath = [filePath stringByAppendingPathComponent:fileArr[0]];
+            
+            UIImage *image = [UIImage imageWithContentsOfFile:imagePath];
+            
+            if(image && [image isKindOfClass:[UIImage class]]){
+                
+                [imgArr addObject:image];
+                
+            }
+            
+        }
+        
+        return imgArr;
+        
+    }else{
+        
+        
+        
+        for(int i=0;i<fileArr.count;i++){
+            
+            for(int j=0;j<fileArr.count-i-1;j++){
+                
+                NSString *fileNam = fileArr[j];
+                NSString *fileName = fileArr[j+1];
+                
+                fileNam = [fileNam stringByReplacingOccurrencesOfString:@"loadingAd" withString:@""];
+                fileNam = [fileNam stringByReplacingOccurrencesOfString:@".png" withString:@""];
+                NSInteger fileI = [fileNam integerValue];
+                fileName = [fileName stringByReplacingOccurrencesOfString:@"loadingAd" withString:@""];
+                fileName = [fileName stringByReplacingOccurrencesOfString:@".png" withString:@""];
+                NSInteger fileIn = [fileName integerValue];
+                if(fileI > fileIn){
+                    
+                    id temp = fileArr[j];
+                    fileArr[j] = fileArr[j+1];
+                    fileArr[j+1] = temp;
+                    
+                }
+                
+                
+            }
+            
+        }
+        
+        for (int i= 0; i<fileArr.count; i++) {
+            
+            NSString *filePath = [[self getFilePath] stringByAppendingPathComponent:fileArr[i]];
+            
+            UIImage *image = [UIImage imageWithContentsOfFile:filePath];
+            
+            if(image && [image isKindOfClass:[UIImage class]]){
+                
+                [imgArr addObject:image];
+                
+            }
+            
+        }
+        
+        return imgArr;
+        
+    }
+    
+    
+}
+
+
+-(NSString *)getFilePath{
+    
+    NSString *filePath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
+    
+    filePath = [filePath stringByAppendingPathComponent:@"appLoad"];
+    
+    [[NSFileManager defaultManager] createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil];
+    
+    return filePath;
+    
+}
+
+-(void)configSdWebImage{
+    
+    
+    SDWebImageDownloader *imgDownloader = SDWebImageManager.sharedManager.imageDownloader;
+
+    imgDownloader.headersFilter  = ^NSDictionary *(NSURL *url, NSDictionary *headers) {
+
+        NSFileManager *fm = [[NSFileManager alloc] init];
+        NSString *imgKey = [SDWebImageManager.sharedManager cacheKeyForURL:url];
+        NSString *imgPath = [SDWebImageManager.sharedManager.imageCache defaultCachePathForKey:imgKey];
+        NSDictionary *fileAttr = [fm attributesOfItemAtPath:imgPath error:nil];
+
+        NSMutableDictionary *mutableHeaders = [headers mutableCopy];
+
+        NSDate *lastModifiedDate = nil;
+
+
+        if (fileAttr.count > 0) {
+
+            lastModifiedDate = (NSDate *)fileAttr[NSFileModificationDate];
+
+        }
+
+        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+        formatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
+        formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
+        formatter.dateFormat = @"EEE, dd MMM yyyy HH:mm:ss z";
+
+        NSString *lastModifiedStr = [formatter stringFromDate:lastModifiedDate];
+        lastModifiedStr = lastModifiedStr.length > 0 ? lastModifiedStr : @"";
+        [mutableHeaders setValue:lastModifiedStr forKey:@"If-Modified-Since"];
+
+        return mutableHeaders;
+    };
+    
+    
+}
+
+-(void)dealloc{
+    
+    
+    
+}
 
 @end

+ 24 - 3
UU_Ent/UU_Ent/Modules/Loading/Main/Views/YRAdView.m

@@ -21,7 +21,7 @@ static YRAdView *adView = nil;
     
     loadVC.aniCompleted = ^{
         
-        [adView loadComplete];
+        [adView loadCompleteAnimate:YES];
         
     };
     
@@ -33,11 +33,20 @@ static YRAdView *adView = nil;
     
 }
 
--(void)loadComplete{
+
+-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
     
+    [adView loadCompleteAnimate:NO];
     
-    [UIView animateKeyframesWithDuration:0.6f delay:0.0f options:0 animations:^{
+    [[NSNotificationCenter defaultCenter] postNotificationName:@"YRLoadAdViewHadBeenClicked" object:nil];
+    
+}
+
+-(void)loadCompleteAnimate:(BOOL)animate{
+    
+    if (animate) {
         
+    [UIView animateKeyframesWithDuration:0.6f delay:0.0f options:0 animations:^{
         
         self.transform = CGAffineTransformMakeScale(1.2f, 1.2f);
         self.alpha = 0;
@@ -56,9 +65,21 @@ static YRAdView *adView = nil;
         
     }];
     
+}else{
     
+    if(self.loadCompleted) {
+        
+        self.loadCompleted();
+        
+    }
+    
+    [self resignKeyWindow];
+    adView = nil;
     
 }
+    
+}
+
 
 -(void)dealloc{
     

+ 9 - 1
UU_Ent/UU_Ent/Modules/Loading/Main/Views/YRCountDownView.m

@@ -71,6 +71,12 @@
         
         self.remainCount = self.remainCount - 2;
         
+        if (self.remainCount%100 == 0) {
+            
+            self.secLabel.text = [NSString stringWithFormat:@"跳过"];
+            
+        }
+        
         [self setNeedsDisplay];
         
     }else{
@@ -105,8 +111,10 @@
     
     [self.timer invalidate];
     self.timer = nil;
+    [self removeFromSuperview];
+    @weakify(self)
     if (self.completed) {
-        
+        @strongify(self)
         self.completed();
         
     }

+ 33 - 3
UU_Ent/UU_Ent/Modules/Login/Main/Controllers/YRLoginVC.m

@@ -11,7 +11,7 @@
 #import "YRRegisterVC.h"
 #import "YRLoginManager.h"
 #import "YRMainVC.h"
-
+#import "YRWebVC.h"
 @interface YRLoginVC ()<UITextFieldDelegate,UIPopoverListViewDelegate,UIPopoverListViewDataSource>
 @property (nonatomic,strong) UIScrollView *scrollView;
 @property (nonatomic,strong) UITextField *passwordTF;
@@ -23,6 +23,17 @@
 
 @implementation YRLoginVC
 
+- (instancetype)init
+{
+    self = [super init];
+    if (self) {
+        
+        [self regesterNotification];
+        
+    }
+    return self;
+}
+
 - (void)viewDidLoad {
     [super viewDidLoad];
     // Do any additional setup after loading the view.
@@ -30,6 +41,12 @@
 }
 
 
+-(void)regesterNotification{
+    
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(shouldShowAdview) name:@"YRLoadAdViewHadBeenClicked" object:nil];
+    
+}
+
 #pragma mark --- 登录操作
 -(void)loginAction
 {
@@ -292,7 +309,6 @@
     _phoneTF.text = [NSString encodeSeciWithStr:FORMAT(@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"userAccount"])];
     
     
-    
     _passwordTF = [[UITextField alloc] initWithFrame:CGRectMake(CGRectGetMaxX(password.frame)+14, 0, self_width-90, 50)];
     _passwordTF.delegate = self;
     _passwordTF.autocorrectionType = UITextAutocorrectionTypeNo;
@@ -324,7 +340,21 @@
     [self.scrollView addSubview:registerBtn];
     [registerBtn addTarget:self action:@selector(registerAction) forControlEvents:UIControlEventTouchUpInside];
     
-//    [self loginAction];
+
+}
+
+//显示广告页
+-(void)shouldShowAdview{
+    
+    YRWebVC *webVC = [YRWebVC new];
+    
+    webVC.url = @"https://sso.ubtob.com/register/enterpriseRegistration?inviteUserUU=1000001353&inviteSpaceUU=10050002&invitationTime=20190426";
+    
+    YRBaseNav *nav = [[YRBaseNav alloc]initWithRootViewController:webVC];
+    
+    [self presentViewController:nav animated:YES completion:nil];
+    
+    
 }
 
 #pragma mark --- lazy

+ 2 - 17
UU_Ent/UU_Ent/Modules/Login/Main/Others/YRLoginManager.m

@@ -34,16 +34,7 @@
     }
     //登录管理平台
     [self userLoginWithPhone:phone passWord:pwd success:^(AccountSigninResponse * _Nullable response) {
-        //只有一家公司,不用再选择账套
-        if (response.companyArray.count == 1) {
-            
-            if (success) {
-                
-                success();
-                
-            }
-            
-        }else{
+        
             //登录公司
             [self companyLoginWithCompanyInfo:[YRUserInfo shareManager].lastCompanyInfo success:^(SwitchCompanyResponse * _Nullable response) {
                 
@@ -70,8 +61,7 @@
                 }
                 
             }];
-            
-        }
+        
         
     } failure:^(AccountSigninResponse * _Nullable response, NSError * _Nullable error) {
         
@@ -121,8 +111,6 @@
         
         if (response.responseHeader.success) {
             
-            [YRUserInfo shareManager].masChanged = YES;
-            
             NSDictionary *resDic = response.mj_keyValues;
             
             [YRUserInfo shareManager].token = response.authedToken.token;
@@ -184,8 +172,6 @@
         
         if (response.responseHeader.success) {
             
-            [YRUserInfo shareManager].masChanged = YES;
-            
             NSDictionary *resDic = response.mj_keyValues;
             
             [YRUserInfo shareManager].token = response.authedToken.token;
@@ -256,7 +242,6 @@
             
         }
         
-        
     }];
     
     call.requestHeaders[@"authentication"] = [YRUserInfo shareManager].token;

+ 27 - 15
UU_Ent/UU_Ent/Modules/Main/Main/Controllers/YRMainVC.m

@@ -11,8 +11,10 @@
 #import "YRBaseNav.h"
 #import "YRMsgVC.h"
 #import "YRContactVC.h"
+#import "YRHomeVC.h"
 #import "YRWorkVC.h"
 #import "YRMineVC.h"
+
 @interface YRMainVC ()<UITabBarDelegate,UITabBarControllerDelegate>
 
 @property(strong,nonatomic)NSMutableArray<UIView *> *tarArr;
@@ -29,6 +31,8 @@
     
     [self addChildControllers];
     
+    self.selectedIndex = 2;
+    
 }
 
 -(void)setTarbar{
@@ -48,16 +52,17 @@
 
 -(void)addChildControllers{
     
-    YRMsgVC *msgVc = [YRMsgVC new];
-//    YRContactVC *conVc = [YRContactVC new];
-    YRWorkVC *workVc = [YRWorkVC new];
-    YRMineVC *mineVc = [YRMineVC new];
+    YRMsgVC *msgVC = [YRMsgVC new];
+    YRContactVC *conVC = [YRContactVC new];
+    YRHomeVC *homeVC = [YRHomeVC new];
+    YRWorkVC *workVC = [YRWorkVC new];
+    YRMineVC *mineVC = [YRMineVC new];
     
-    [self subVcWith:msgVc title:@"消息" normalImgTitle:@"UU_TabMes_nor" selImgTitle:@"UU_TabMes_select"];
-//    [self subVcWith:conVc title:@"联系人" normalImgTitle:@"UU_TabContact_nor" selImgTitle:@"UU_TabContact_select"];
-    [self subVcWith:workVc title:@"工作" normalImgTitle:@"UU_TabWork_nor" selImgTitle:@"UU_TabWork_select"];
-    [self subVcWith:mineVc title:@"我" normalImgTitle:@"UU_TabMe_nor" selImgTitle:@"UU_TabMe_select"];
-   
+    [self subVcWith:msgVC title:@"消息" normalImgTitle:@"UU_TabMes_nor" selImgTitle:@"UU_TabMes_select"];
+    [self subVcWith:conVC title:@"联系人" normalImgTitle:@"UU_TabContact_nor" selImgTitle:@"UU_TabContact_select"];
+    [self subVcWith:homeVC title:@"首页" normalImgTitle:@"UU_TabMes_nor" selImgTitle:@"UU_TabContact_select"];
+    [self subVcWith:workVC title:@"工作" normalImgTitle:@"UU_TabWork_nor" selImgTitle:@"UU_TabWork_select"];
+    [self subVcWith:mineVC title:@"我" normalImgTitle:@"UU_TabMe_nor" selImgTitle:@"UU_TabMe_select"];
     
 }
 
@@ -65,13 +70,13 @@
     
     UIImage *norImg = [UIImage imageNamed:normalTitle];
     UIImage *selImg = [UIImage imageNamed:selTitle];
-    norImg = [norImg imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
-    selImg = [selImg imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
+    norImg = [norImg imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
+    selImg = [selImg imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
     vc.tabBarItem.title = title;
     vc.tabBarItem.image = norImg;
     vc.tabBarItem.selectedImage = selImg;
-   
-     YRBaseNav *basNav = [[YRBaseNav alloc]initWithRootViewController:vc];
+    
+    YRBaseNav *basNav = [[YRBaseNav alloc]initWithRootViewController:vc];
     [self addChildViewController:basNav];
     
     
@@ -110,15 +115,22 @@
         
     }
     
+    float startScale = 0.5f;
+    
+    if (index == self.tabBar.items.count/2) {
+        
+        startScale = 0.66f;
+        
+    }
+    
     //缩放动画
     CABasicAnimation *anima = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
-    anima.fromValue = [NSNumber numberWithFloat:0.5f];
+    anima.fromValue = [NSNumber numberWithFloat:startScale];
     anima.toValue = [NSNumber numberWithFloat:1.0f];
     anima.duration = 0.3f;
     anima.repeatCount = 1;
     [self.tarArr[index].layer addAnimation:anima forKey:@"scaleAnimation"];
     
-   
     
 }
 

+ 75 - 11
UU_Ent/UU_Ent/Modules/Main/Main/Views/YRTabBar.m

@@ -7,19 +7,15 @@
 //
 
 #import "YRTabBar.h"
-
+#import "YRTabbarView.h"
 @interface YRTabBar ()
 
 @property(strong,nonatomic)NSMutableArray<UILabel *> *labArr;
 
-@property(assign,atomic)BOOL isExist;
-
-
 @end
 
 @implementation YRTabBar
 
-
 -(void)layoutSubviews{
     
     [super layoutSubviews];
@@ -30,8 +26,8 @@
 
 -(void)addRemindView{
     
-    if (self.isExist) return;
-    self.isExist = YES;
+    if (self.labArr.count == self.items.count) return;
+    [self.labArr removeAllObjects];
     
     NSInteger index = 0;
     
@@ -46,7 +42,6 @@
                     label.backgroundColor = [UIColor redColor];
                     if (index == 0) {
                         
-                        
                         label.layer.cornerRadius = 8;
                         label.layer.masksToBounds = YES;
                         
@@ -68,6 +63,27 @@
                         
                     }else{
                         
+                        if (index == self.items.count/2) {
+                            //隐藏原有的图片
+                            viewOne.hidden = YES;
+                            
+                            YRTabbarView *centerView = [[YRTabbarView alloc]initWithFrame:CGRectMake(0, -20, 50, 50)];
+                            
+                            centerView.x = view.width/2-centerView.width/2;
+                            
+                            centerView.layer.cornerRadius = 25;
+                            
+                            centerView.layer.masksToBounds = YES;
+                            
+                            centerView.backgroundColor = HexColor(@"#4682CB");
+                            
+                            [view addSubview:centerView];
+                            
+                            centerView.userInteractionEnabled = NO;
+                            
+                            
+                        }else{
+                        
                         label.layer.cornerRadius = 5;
                         label.layer.masksToBounds = YES;
                         
@@ -81,6 +97,8 @@
                             
                         }];
                         
+                        }
+                        
                     }
                     index++;
                     label.hidden = YES;
@@ -98,7 +116,7 @@
 
 - (void)showBadgeOnItemIndex:(int)index{
 
-    if (index >= self.items.count) return;
+    if (index >= self.labArr.count || index >= self.items.count) return;
     
     self.labArr[index].hidden = NO;
     
@@ -106,7 +124,7 @@
 
 - (void)hideBadgeOnItemIndex:(int)index{
     
-    if (index >= self.items.count) return;
+    if (index >= self.labArr.count || index >= self.items.count) return;
     
     self.labArr[index].hidden = YES;
     
@@ -119,7 +137,7 @@
     
     if (remindCount > 0) {
         
-         self.labArr[0].hidden = NO;
+        self.labArr[0].hidden = NO;
         
         if (remindCount > 99) {
             
@@ -152,4 +170,50 @@
     return _labArr;
 }
 
+
+////处理超过视图边距的点击
+-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
+    
+    UIView *view = [super hitTest:point withEvent:event];
+    
+    if (view == nil) {
+        
+        for (UIView *subView in self.subviews) {
+            
+            CGPoint pointHit = [subView convertPoint:point fromView:self];
+            
+            if (CGRectContainsPoint(subView.bounds, pointHit)) {
+                
+                return subView;
+                
+            }
+            
+            
+        }
+        
+        for (UIView *subView in self.subviews) {
+            
+            CGPoint pointHit = [subView convertPoint:point fromView:self];
+            
+            for (UIView *imaView in subView.subviews) {
+                
+               pointHit = [imaView convertPoint:pointHit fromView:subView];
+                
+                if (CGRectContainsPoint(imaView.bounds, pointHit)) {
+                    
+                    return subView;
+                    
+                }
+                
+            }
+            
+        }
+        
+        
+    }
+    
+    return view;
+    
+}
+
 @end

+ 17 - 0
UU_Ent/UU_Ent/Modules/Main/Main/Views/YRTabbarView.h

@@ -0,0 +1,17 @@
+//
+//  YRTabbarView.h
+//  UU_Ent
+//
+//  Created by liujl on 2019/9/17.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface YRTabbarView : UIButton
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 21 - 0
UU_Ent/UU_Ent/Modules/Main/Main/Views/YRTabbarView.m

@@ -0,0 +1,21 @@
+//
+//  YRTabbarView.m
+//  UU_Ent
+//
+//  Created by liujl on 2019/9/17.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import "YRTabbarView.h"
+
+@implementation YRTabbarView
+
+-(void)drawRect:(CGRect)rect{
+    
+    [@"U" drawInRect:CGRectMake(rect.size.width/2-11, 8, 30, 30) withAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor], NSFontAttributeName:[UIFont systemFontOfSize:30]}];
+    
+}
+
+
+
+@end

+ 48 - 10
UU_Ent/UU_Ent/Modules/Message/Main/Controllers/YRMsgVC.m

@@ -40,6 +40,17 @@
 
 @implementation YRMsgVC
 
+- (instancetype)init
+{
+    self = [super init];
+    if (self) {
+        
+        [self regesterNotification];
+        
+    }
+    return self;
+}
+
 - (void)viewDidLoad {
     [super viewDidLoad];
     // Do any additional setup after loading the view.
@@ -50,8 +61,6 @@
     
     [super viewWillAppear:animated];
     
-    [self loadData];
-    
     [self setNavigationBarBackgroundImageWithAppear:YES];
     
 }
@@ -71,6 +80,9 @@
     
     
     [self setUpHeaderView];
+    
+    [self loadData];
+
 }
 
 -(void)setUpHeaderView{
@@ -85,6 +97,8 @@
     
 }
 
+
+
 -(void)setNavigationBarBackgroundImageWithAppear:(BOOL)appear{
     
     if (appear) {
@@ -181,13 +195,33 @@
     
     
     
+}
+#pragma mark - 通知
+-(void)regesterNotification{
+    
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(shouldShowAdview) name:@"YRLoadAdViewHadBeenClicked" object:nil];
+    
+    //切换账套
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadData) name:kYRUserMasterChangedNotification object:nil];
+    
+}
+
+-(void)shouldShowAdview{
+    
+    YRWebVC *webVC = [YRWebVC new];
+    
+    webVC.url = @"https://sso.ubtob.com/register/enterpriseRegistration?inviteUserUU=1000001353&inviteSpaceUU=10050002&invitationTime=20190426";
+    
+    [self.navigationController pushViewController:webVC animated:YES];
+    
 }
 
 #pragma mark - 网络请求
 
 -(void)loadData{
     
-    if ([YRUserInfo shareManager].masChanged) {
+    
+        DLog(@"这里是消息的数据刷新");
         
         NSDictionary *comDic = [YRUserInfo shareManager].userCompanyInfo;
         
@@ -203,7 +237,7 @@
                     
                     if ([model.code isEqualToString:FORMAT(@"%@",unDic[@"code"])]) {
                         
-                        model.remindCount = [unDic[@"count"] integerValue]+arc4random_uniform(20);
+                        model.remindCount = [unDic[@"count"] integerValue]+arc4random_uniform(100);
                         
                     }
                     
@@ -220,8 +254,7 @@
         [self getDataFromServer];
         
         }
-        
-    }
+    
     
 }
 
@@ -284,7 +317,7 @@
               
               if ([model.code isEqualToString:msgUn.code]) {
                   
-                  model.remindCount = msgUn.count+arc4random_uniform(20);
+                  model.remindCount = msgUn.count+arc4random_uniform(100);
                   
               }
               
@@ -442,8 +475,6 @@
                 self.headerView.hidden = YES;
                 self.rigBtn.userInteractionEnabled = YES;
                 
-                
-                
             }];
             
             
@@ -478,12 +509,13 @@
         _tableView = [[YRTableView alloc]initWithFrame:self.view.frame];
         _tableView.delegate = self;
         _tableView.dataSource = self;
+        _tableView.autoNoDataSet = NO;
         _tableView.tableHeaderView = [UIView new];
         _tableView.tableFooterView = [UIView new];
         @weakify(self)
         _tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
             @strongify(self)
-                       
+            
             [self getDataFromServer];
             
         }];
@@ -504,4 +536,10 @@
     return _dataArr;
 }
 
+-(void)dealloc{
+     //切换账套
+    [[NSNotificationCenter defaultCenter] removeObserver:self name:kYRUserMasterChangedNotification object:nil];
+    
+}
+
 @end

+ 1 - 1
UU_Ent/UU_Ent/Modules/Message/Main/Others/msg_route.json

@@ -3,7 +3,7 @@
     "data":[
             {"title":"通知公告",
             "id":"300004",
-            "desVc": "YRBaseVC",
+            "desVc": "YRDocuVC",
             "code":"uas.notice",
             "desc":"通知公告",
             },

+ 16 - 5
UU_Ent/UU_Ent/Modules/Mine/Main/Controllers/YRMineVC.m

@@ -117,6 +117,7 @@
         }
         
         else{
+            
             YRBaseVC *VC = (YRBaseVC *)[[NSClassFromString(model.desVC) alloc]init];
             
             if (!VC) {//出现异常
@@ -296,16 +297,19 @@
 
 -(void)loginCompanyAction:(NSDictionary *)dic
 {
-    [MBProgressHUD showHUDAddedTo:self.view animated:YES];
+    [MBProgressHUD showHUDAddedTo:self.tabBarController.view animated:YES];
     
     [YRLoginManager companyLoginWithCompanyInfo:dic success:^(SwitchCompanyResponse * _Nullable response) {
         
-        [MBProgressHUD hideHUDForView:self.view animated:YES];
+        [MBProgressHUD hideHUDForView:self.tabBarController.view animated:YES];
         
         [self.tableView reloadData];
+         //切换账套成功
+        [[NSNotificationCenter defaultCenter] postNotificationName:kYRUserMasterChangedNotification object:nil];
         
     } failure:^(SwitchCompanyResponse * _Nullable response, NSError * _Nullable error) {
         
+        [MBProgressHUD hideHUDForView:self.tabBarController.view animated:YES];
         //提示错误信息
         [YRShowMessageFromNavi showDropViewWithMessage:response.responseHeader.message ToNavi:self.navigationController withColor:nil];
     }];
@@ -334,7 +338,6 @@
     }else{
         
         NSDictionary *dic = @{
-                              @"androidWidget":@"",
                               @"androidWidget":@"",
                               @"icon":@"icon_setting",
                               @"id_p":@2,
@@ -366,23 +369,25 @@
     
     [self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor],NSFontAttributeName:[UIFont boldSystemFontOfSize:17.0]}];
     
-    
 }
 
 #pragma mark --- viewAction
 -(void)viewWillAppear:(BOOL)animated
 {
-    
+    [super viewWillAppear:animated];
     [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@""] forBarMetrics: UIBarMetricsDefault];
     
     self.navigationController.navigationBar.subviews[0].alpha = 0.0f;
     
     [self.navigationController setNeedsNavigationBackground:0.0f];
+    
 }
 
 -(void)viewWillDisappear:(BOOL)animated
 {
     
+    [super viewWillDisappear:animated];
+    
     if (statusXLately) {
         
         [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"U_newNarbgX"] forBarMetrics:UIBarMetricsDefault];
@@ -396,6 +401,7 @@
     self.navigationController.navigationBar.subviews[0].alpha = 1.0f;
     
     [self.navigationController setNeedsNavigationBackground:1.0f];
+    
 }
 
 #pragma mark --- lazy
@@ -414,10 +420,15 @@
         _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
         
         CGFloat height = 64+36;
+        
         if (statusXLately) {
+            
             height = 132;
+            
         }
+        
         _tableView.contentInset = UIEdgeInsetsMake(-height, 0, 0, 0);
+        
     }
     
     return _tableView;

+ 10 - 9
UU_Ent/UU_Ent/Modules/Mine/Main/Others/YRUserInfo.h

@@ -14,6 +14,11 @@ NS_ASSUME_NONNULL_BEGIN
 
 +(instancetype)shareManager;
 
+
+/**
+ ip
+ */
+@property(copy,nonatomic)NSString *urlIp;
 /**
  token
  */
@@ -38,6 +43,11 @@ NS_ASSUME_NONNULL_BEGIN
  当前正在登录中的公司信息
  */
 @property(strong,nonatomic)NSDictionary *currCompanyInfo;
+
+/**
+ 是否为管理员
+ */
+@property(assign,nonatomic)BOOL isAdmin;
 /**
  最后登录的公司信息
  */
@@ -49,11 +59,6 @@ NS_ASSUME_NONNULL_BEGIN
  */
 @property(assign,nonatomic,getter=isAutoLogin)BOOL autoLogin;
 
-/**
- 是否切换账套
- */
-@property(assign,nonatomic)BOOL masChanged;
-
 /**
  是否在大陆以及港澳地区,在范围内加载高德地图,不在范围内加载谷歌地图
  */
@@ -64,10 +69,6 @@ NS_ASSUME_NONNULL_BEGIN
  */
 @property(assign,nonatomic)CGFloat scale;
 
-/**
- 当前页面是否是工作的子页面
- */
-@property(assign,nonatomic)BOOL isSubWork;
 
 @end
 

+ 23 - 1
UU_Ent/UU_Ent/Modules/Mine/Main/Others/YRUserInfo.m

@@ -38,7 +38,11 @@
 
 -(NSString *)token{
     
-    return [[NSUserDefaults standardUserDefaults] objectForKey:@"UUUserInfoToken"];
+    NSString *tokenStr = [[NSUserDefaults standardUserDefaults] objectForKey:@"UUUserInfoToken"];
+    
+    tokenStr = tokenStr?:@"";
+    
+    return tokenStr;
     
 }
 #pragma mark - 最后登录的公司信息
@@ -70,4 +74,22 @@
     
 }
 
+#pragma mark - 当前公司使用的ip
+-(void)setUrlIp:(NSString *)urlIp{
+    
+    urlIp = urlIp?:@"";
+    
+    [[NSUserDefaults standardUserDefaults] setObject:urlIp forKey:@"ipAndPort"];
+    
+}
+
+-(NSString *)urlIp{
+    
+    NSString *ipStr = [[NSUserDefaults standardUserDefaults] objectForKey:@"ipAndPort"];
+    
+    ipStr = [NSString stringWithFormat:@"%@",ipStr?:@""];
+    
+    return ipStr;
+}
+
 @end

+ 131 - 17
UU_Ent/UU_Ent/Modules/Web/Main/YRWebVC.m

@@ -7,13 +7,14 @@
 //
 
 #import "YRWebVC.h"
+#import "YRWebView.h"
 #import <JavaScriptCore/JavaScriptCore.h>
 #import <WebKit/WebKit.h>
-@interface YRWebVC ()<WKUIDelegate,WKNavigationDelegate,WKScriptMessageHandler,UINavigationControllerDelegate>
+@interface YRWebVC ()<WKUIDelegate,WKNavigationDelegate,WKScriptMessageHandler,UIGestureRecognizerDelegate>
 
-@property(strong,nonatomic)WKWebView *webView;
-@property(nonatomic,strong)JSContext *context;
-@property(nonatomic,strong)WKUserContentController *userContentController;
+@property(strong,nonatomic)UIProgressView *progress;
+
+@property(strong,nonatomic)YRWebView *webView;
 
 @end
 
@@ -27,40 +28,64 @@
 
 -(void)setUpUI{
     
+//    self.url = @"http://10.1.80.96:3000/homepage";
+    
     //创建配置对象
     WKWebViewConfiguration *webConfig = [[WKWebViewConfiguration alloc]init];
-    
+
     //为配置对象设置偏好设置
     WKPreferences *preferences = [[WKPreferences alloc]init];
     webConfig.preferences = preferences;
-    
+
     //允许js和native交互
     preferences.javaScriptEnabled = YES;
-    
+
     WKUserContentController *userContent = [[WKUserContentController alloc]init];
-    //监听相应的事件
+
+    [userContent addScriptMessageHandler:self name:@"event"];
+    
+     //监听相应的事件
     webConfig.userContentController = userContent;
-    self.userContentController = userContent;
     
-    self.webView = [[WKWebView alloc]initWithFrame:CGRectMake(0, 64, self.view.frame.size.width, self.view.frame.size.height) configuration:webConfig];
+    self.webView = [[YRWebView alloc]initWithFrame:CGRectMake(0, 64, self.view.frame.size.width, self.view.frame.size.height) configuration:webConfig];
+
+    self.webView.url = self.url;
     
     [self.view addSubview:self.webView];
-    
+
     [self.webView mas_makeConstraints:^(MASConstraintMaker *make) {
-       
+
         make.edges.equalTo(self.view);
-        
+
     }];
-    
+
     self.webView.navigationDelegate = self;
-    
-    
+
     NSURL *url = [NSURL URLWithString:self.url];
     
     NSURLRequest *request = [NSURLRequest requestWithURL:url];
     
     [self.webView loadRequest:request];
     
+    self.progress = [UIProgressView new];
+    
+    self.progress.trackTintColor = self.view.backgroundColor;
+    
+    self.progress.progressTintColor = [UIColor orangeColor];
+   
+    [self.view addSubview:self.progress];
+    
+    [self.progress mas_makeConstraints:^(MASConstraintMaker *make) {
+     
+        make.top.left.right.equalTo(self.view);
+        make.height.mas_equalTo(2);
+
+    }];
+    
+    [self.webView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:nil];
+
+    self.webView.allowsBackForwardNavigationGestures = NO;
+    
     
 }
 
@@ -77,18 +102,107 @@
 //接受js发送的消息
 -(void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message{
     
+    
     if ([message.name isEqualToString:@"event"]) {
         
+    
+    }
         
+    
+    
+}
+
+- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
+    
+    
+    
+}
+- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
+    
+    
+    
+}
+
+- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
+    
+    decisionHandler(WKNavigationActionPolicyAllow);
+    
+}
+
+-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
+    
+    if ([keyPath isEqualToString:@"estimatedProgress"]) {
+        
+        self.progress.progress = self.webView.estimatedProgress;
+        if (self.webView.estimatedProgress >= 1.0f) {
+            [UIView animateWithDuration:0.3f animations:^{
+                self.progress.alpha = 0.0f;
+                self.progress.progress = 0.0f;
+            }];
+        }else{
+            
+            self.progress.alpha = 1.0;
+            
+        }
+        
+    }
+    
+    if ([keyPath isEqualToString:@"URL"]) {
+        
+        NSLog(@"%@",change);
+        
+        
+    }
+    
+}
+
+-(void)viewDidDisappear:(BOOL)animated{
+    
+    [super viewDidDisappear:animated];
+    
+    [self removeAllScriptMsgHandle];
+    
+    
+}
+
+
+-(void)removeAllScriptMsgHandle{
+    
+    [self.webView.configuration.userContentController removeScriptMessageHandlerForName:@"event"];
+   
+}
+
+-(void)backAction{
+    
+    if (self.webView.canGoBack) {
+        
+        [self.webView goBack];
         
+    }else{
+        
+        [super backAction];
         
     }
     
+}
+
+-(void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation{
+    
+    
+    
+}
+
+-(void)webView:(WKWebView *)webView commitPreviewingViewController:(UIViewController *)previewingViewController{
+    
+    
+    
 }
 
 -(void)dealloc{
     
-    [self.userContentController removeScriptMessageHandlerForName:@"event"];
+    [self.webView.configuration.userContentController removeScriptMessageHandlerForName:@"event"];
+    
+    [self.webView removeObserver:self forKeyPath:@"estimatedProgress"];
     
 }
 

+ 19 - 0
UU_Ent/UU_Ent/Modules/Work/Docu/Controllers/YRDocuVC.h

@@ -0,0 +1,19 @@
+//
+//  YRDocuVC.h
+//  UU_Ent
+//
+//  Created by liujl on 2019/7/4.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "YRBaseVC.h"
+NS_ASSUME_NONNULL_BEGIN
+
+@interface YRDocuVC : YRBaseVC
+
+@property(copy,nonatomic)NSString *caller;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 182 - 0
UU_Ent/UU_Ent/Modules/Work/Docu/Controllers/YRDocuVC.m

@@ -0,0 +1,182 @@
+//
+//  YRDocuVC.m
+//  UU_Ent
+//
+//  Created by liujl on 2019/7/4.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import "YRDocuVC.h"
+#import "YRDocuCell.h"
+@interface YRDocuVC()<UITableViewDelegate,UITableViewDataSource>
+
+@property(strong,nonatomic)YRTableView *tableView;
+
+@property(strong,nonatomic)NSMutableArray<NSMutableArray<YRDocuModel *> *> *dataArr;
+
+@end
+
+@implementation YRDocuVC
+
+-(void)viewDidLoad{
+    [super viewDidLoad];
+
+    
+}
+
+-(void)setUpUI{
+    
+    [self.view addSubview:self.tableView];
+    
+    
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+       
+        make.edges.equalTo(self.view);
+        
+    }];
+    
+    [self loadDataFromServerWith:self.caller];
+    
+    [self.tableView reloadData];
+    @weakify(self)
+    self.tableView.emptyDidClicked = ^{
+        @strongify(self)
+        [self.tableView reloadData];
+        
+    };
+    
+}
+
+-(void)loadDataFromServerWith:(NSString *)caller{
+    
+    NSString *url = [NSString stringWithFormat:@"http://erp.yitoa.com:8888/ERP/mobile/common/getformandgriddetail.action?caller=FeePlease!CCSQ!new&condition=1=1&sessionId=4AA6E9E6F286E19211C32E1B8D5FC7A9&id=0"];
+    
+   
+    url = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
+    
+    YRNetworkManager *manager = [YRNetworkManager shareManager];
+    
+    [manager request:url method:POST parameters:nil progress:nil success:^(NSURLSessionDataTask *task, NSDictionary *responseObject) {
+      
+        
+    } failure:^(NSURLSessionDataTask *task, NSError *error) {
+       
+        
+        
+    }];
+
+    
+}
+
+#pragma mark - delegate && dataSource
+
+-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
+    
+    return self.dataArr.count;
+    
+}
+
+-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
+    
+    return self.dataArr[section].count;
+    
+}
+
+-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
+    
+    YRDocuCell *cell = [tableView dequeueReusableCellWithIdentifier:@"YRDocuCellReid"];
+    
+    if (!cell) {
+        
+        cell = [[YRDocuCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"YRDocuCellReid"];
+        
+    }
+    
+    cell.indexPath = indexPath;
+    
+    @weakify(self)
+    cell.didClicked = ^(YRDocuModel * _Nonnull model,NSIndexPath *indexPath) {
+      
+        model.value = [NSString stringWithFormat:@"%d",arc4random()];
+        
+        [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
+        
+    };
+    
+        
+    cell.model = self.dataArr[indexPath.section][indexPath.row];
+    
+    
+    return cell;
+}
+
+
+-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
+    
+    return self.dataArr[indexPath.section][indexPath.row].height;
+    
+}
+
+-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
+    
+    [self.dataArr removeAllObjects];
+    
+    [tableView reloadData];
+    
+    self.dataArr = nil;
+    
+}
+
+-(void)viewWillDisappear:(BOOL)animated{
+    
+    [super viewWillDisappear:animated];
+    
+    
+    
+}
+
+
+-(YRTableView *)tableView{
+    
+    if (!_tableView) {
+        
+        _tableView = [[YRTableView alloc]initWithFrame:self.view.frame];
+        _tableView.delegate = self;
+        _tableView.dataSource = self;
+        _tableView.tableHeaderView = [UIView new];
+        _tableView.tableFooterView = [UIView new];
+        
+    }
+    
+    return _tableView;
+}
+
+-(NSMutableArray *)dataArr{
+    
+    if (!_dataArr) {
+        
+        _dataArr = [[NSMutableArray alloc]init];
+        
+        NSMutableArray *arrOne = [[NSMutableArray alloc]init];
+        
+        for (int i=0; i<30; i++) {
+            
+            YRDocuModel *model = [YRDocuModel new];
+            model.key = @"单据";
+            model.value = @"";
+            if (i%3==0) {
+                
+                model.value = @"这里是";
+                model.type = @"FF";
+                
+            }
+            [arrOne addObject:model];
+        }
+        
+        [_dataArr addObject:arrOne];
+    }
+    
+    return _dataArr;
+}
+
+@end

+ 25 - 0
UU_Ent/UU_Ent/Modules/Work/Docu/Models/YRDocuModel.h

@@ -0,0 +1,25 @@
+//
+//  YRDocuModel.h
+//  UU_Ent
+//
+//  Created by liujl on 2019/7/4.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface YRDocuModel : NSObject
+
+@property(copy,nonatomic)NSString *key;
+
+@property(copy,nonatomic)NSString *value;
+
+@property(assign,nonatomic)CGFloat height;
+
+@property(assign,nonatomic)NSString *type;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 24 - 0
UU_Ent/UU_Ent/Modules/Work/Docu/Models/YRDocuModel.m

@@ -0,0 +1,24 @@
+//
+//  YRDocuModel.m
+//  UU_Ent
+//
+//  Created by liujl on 2019/7/4.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import "YRDocuModel.h"
+
+@implementation YRDocuModel
+
+- (instancetype)init
+{
+    self = [super init];
+    if (self) {
+        
+        self.height = 40;
+        
+    }
+    return self;
+}
+
+@end

+ 23 - 0
UU_Ent/UU_Ent/Modules/Work/Docu/Views/YRDocuCell.h

@@ -0,0 +1,23 @@
+//
+//  YRDocuCell.h
+//  UU_Ent
+//
+//  Created by liujl on 2019/7/4.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "YRDocuModel.h"
+NS_ASSUME_NONNULL_BEGIN
+
+@interface YRDocuCell : UITableViewCell
+
+@property(strong,nonatomic)YRDocuModel *model;
+
+@property(strong,nonatomic)NSIndexPath *indexPath;
+
+@property(copy,nonatomic)void(^didClicked)(YRDocuModel *model,NSIndexPath *indexPath);
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 156 - 0
UU_Ent/UU_Ent/Modules/Work/Docu/Views/YRDocuCell.m

@@ -0,0 +1,156 @@
+//
+//  YRDocuCell.m
+//  UU_Ent
+//
+//  Created by liujl on 2019/7/4.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import "YRDocuCell.h"
+
+@interface YRDocuCell()<UITextFieldDelegate>
+
+@property(strong,nonatomic)UILabel *titleLabel;
+
+@property(strong,nonatomic)UITextField *valueText;
+
+@property(strong,nonatomic)UIButton *touchBtn;
+
+@end
+
+@implementation YRDocuCell
+
+- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(nullable NSString *)reuseIdentifier{
+    
+    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
+        
+        [self setUpUI];
+        
+    }
+    
+    return self;
+}
+
+
+-(void)setUpUI{
+    
+    
+    self.selectionStyle = UITableViewCellSelectionStyleNone;
+    [self.contentView addSubview:self.titleLabel];
+    [self.contentView addSubview:self.valueText];
+    [self.contentView addSubview:self.touchBtn];
+    [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
+       
+        make.left.equalTo(self.contentView).offset(20);
+        make.centerY.equalTo(self.contentView);
+        make.width.mas_equalTo(80);
+        make.top.equalTo(self.contentView).offset(4);
+        make.bottom.equalTo(self.contentView).offset(-4);
+        
+    }];
+    
+    [self.valueText mas_makeConstraints:^(MASConstraintMaker *make) {
+       
+        make.left.equalTo(self.titleLabel.mas_right).offset(20);
+        make.right.equalTo(self.contentView).offset(-16);
+        make.top.equalTo(self.contentView).offset(4);
+        make.bottom.equalTo(self.contentView).offset(-4);
+        
+        
+    }];
+    [self.touchBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        
+        make.edges.equalTo(self.valueText);
+        
+    }];
+    
+    
+}
+
+-(void)setModel:(YRDocuModel *)model{
+    
+    _model = model;
+    
+    self.titleLabel.text = model.key;
+    self.valueText.text = model.value;
+    
+    if (model.type.length > 0) {
+        
+        self.valueText.userInteractionEnabled = NO;
+        self.touchBtn.userInteractionEnabled = YES;
+        self.touchBtn.hidden = NO;
+        
+    }else{
+        
+        self.valueText.userInteractionEnabled = YES;
+        self.touchBtn.userInteractionEnabled = NO;
+        self.touchBtn.hidden = YES;
+        
+    }
+    
+    
+}
+
+-(void)textFieldDidEndEditing:(UITextField *)textField{
+    
+    _model.value = [NSString stringWithFormat:@"%@",textField.text.length > 0?textField.text:@""];
+    
+}
+
+
+-(void)touchBtnClicked:(UIButton *)sender{
+    
+    if (self.didClicked) {
+        
+        self.didClicked(self.model,self.indexPath);
+        
+    }
+    
+}
+
+
+-(UILabel *)titleLabel{
+    
+    if (!_titleLabel) {
+        
+        _titleLabel = [UILabel new];
+        _titleLabel.text = @"标题";
+        _titleLabel.font = [UIFont systemFontOfSize:14];
+        
+    }
+    
+    return _titleLabel;
+    
+}
+
+-(UITextField *)valueText{
+    
+    if (!_valueText) {
+        
+        _valueText = [UITextField new];
+        _valueText.textAlignment = NSTextAlignmentRight;
+        _valueText.placeholder = @"请输入内容";
+        _valueText.delegate = self;
+        
+    }
+    
+    return _valueText;
+}
+
+-(UIButton *)touchBtn{
+    
+    if (!_touchBtn) {
+        
+        _touchBtn = [[UIButton alloc]init];
+        _touchBtn.userInteractionEnabled = NO;
+        _touchBtn.hidden = YES;
+        _touchBtn.backgroundColor = [UIColor clearColor];
+        [_touchBtn addTarget:self action:@selector(touchBtnClicked:) forControlEvents:UIControlEventTouchUpInside];
+        
+    }
+    
+    return _touchBtn;
+    
+}
+
+@end

+ 5 - 0
UU_Ent/UU_Ent/Modules/Work/Main/Controllers/YRWorkVC.h

@@ -12,6 +12,11 @@ NS_ASSUME_NONNULL_BEGIN
 
 @interface YRWorkVC : YRBaseVC
 
+/**
+ 当前显示的是否是该控制器的子控制器
+ */
+@property(assign,nonatomic)BOOL isOnChildVC;
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 45 - 19
UU_Ent/UU_Ent/Modules/Work/Main/Controllers/YRWorkVC.m

@@ -27,6 +27,17 @@
 
 @implementation YRWorkVC
 
+- (instancetype)init
+{
+    self = [super init];
+    if (self) {
+        
+        [self addNotification];
+        
+    }
+    return self;
+}
+
 - (void)viewDidLoad {
     [super viewDidLoad];
     // Do any additional setup after loading the view.
@@ -138,14 +149,24 @@
     
     self.tableView.tableFooterView = footerView;
 
+    [self loadData];
     
 }
 
+
+-(void)addNotification{
+    
+    //切换账套
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadData) name:kYRUserMasterChangedNotification object:nil];
+    
+}
+
+
 -(void)viewWillAppear:(BOOL)animated{
     [super viewWillAppear:animated];
    
     //适应子页侧滑返回效果
-    if ([YRUserInfo shareManager].isSubWork) {
+    if (self.isOnChildVC) {
         
         [self.navigationController setNavigationBarHidden:YES animated:YES];
         
@@ -155,14 +176,13 @@
         
     }
     
-    [self loadData];
     
 }
 
 -(void)viewDidAppear:(BOOL)animated{
     [super viewDidAppear:animated];
     
-    [YRUserInfo shareManager].isSubWork = NO;
+    self.isOnChildVC = NO;
     self.navigationController.navigationBar.subviews[0].alpha = 1;
     
 }
@@ -180,31 +200,29 @@
 
 -(void)loadData{
     
+    DLog(@"这里是工作的数据刷新");
     
-    if ([YRUserInfo shareManager].masChanged) {
-        
-        NSString *title = [NSString stringWithFormat:@"%@",[YRUserInfo shareManager].lastCompanyInfo[@"name"]];
-        
-        title = title.length != 0?title:@"工作";
-        
-        self.titleLabel.text = title;
+    NSString *title = [NSString stringWithFormat:@"%@",[YRUserInfo shareManager].lastCompanyInfo[@"name"]];
+    
+    title = title.length != 0?title:@"工作";
+    
+    self.titleLabel.text = title;
         
-        NSDictionary *comDic = [YRUserInfo shareManager].userCompanyInfo;
+    NSDictionary *comDic = [YRUserInfo shareManager].userCompanyInfo;
         
-        if (comDic) {
+    if (comDic) {
             
-            self.dataArr = [YRWorkConModel mj_objectArrayWithKeyValuesArray:comDic[@"appGroupConfigArray"]];
+        self.dataArr = [YRWorkConModel mj_objectArrayWithKeyValuesArray:comDic[@"appGroupConfigArray"]];
             
-            [self.tableView reloadData];
+        [self.tableView reloadData];
             
-        }else{
+         }else{
         
         [self loadDataFromServer];
         
-        }
-        
     }
     
+    
 }
 
 -(void)loadDataFromServer{
@@ -332,6 +350,8 @@
         
         YRBaseVC *VC = (YRBaseVC *)[[NSClassFromString(model.desVC) alloc]init];
         
+        VC.paramDic = @{@"caller":@"caller"};
+        
         if (!VC) {//出现异常
             
             VC = [YRBaseVC new];
@@ -377,13 +397,12 @@
         }];
         
     }else{
+        
         //防止在某些机型上出现白条
         self.remindView.alpha = 0;
         
     }
     
-    
-    
 }
 
 #pragma mark - lazy
@@ -398,6 +417,7 @@
         _tableView.bounces = YES;
         _tableView.layer.cornerRadius = 8;
         _tableView.layer.masksToBounds = YES;
+        _tableView.autoNoDataSet = NO;
         _tableView.showsVerticalScrollIndicator = NO;
         _tableView.backgroundColor = [UIColor clearColor];
         _tableView.estimatedRowHeight = 0;
@@ -418,4 +438,10 @@
     return _dataArr;
 }
 
+-(void)dealloc{
+     //切换账套
+    [[NSNotificationCenter defaultCenter] removeObserver:self name:kYRUserMasterChangedNotification object:nil];
+    
+}
+
 @end

+ 6 - 0
UU_Ent/UU_Ent/Supporting Files/Assets.xcassets/Resources/Backicon/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 23 - 0
UU_Ent/UU_Ent/Supporting Files/Assets.xcassets/Resources/Backicon/uu_back_icon.imageset/Contents.json

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

BIN
UU_Ent/UU_Ent/Supporting Files/Assets.xcassets/Resources/Backicon/uu_back_icon.imageset/uu_back_icon.png


BIN
UU_Ent/UU_Ent/Supporting Files/Assets.xcassets/Resources/Backicon/uu_back_icon.imageset/uu_back_icon@2x.png


BIN
UU_Ent/UU_Ent/Supporting Files/Assets.xcassets/Resources/Backicon/uu_back_icon.imageset/uu_back_icon@3x.png


+ 6 - 0
UU_Ent/UU_Ent/Supporting Files/Assets.xcassets/Resources/Empty/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 23 - 0
UU_Ent/UU_Ent/Supporting Files/Assets.xcassets/Resources/Empty/empty_placeholder.imageset/Contents.json

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

BIN
UU_Ent/UU_Ent/Supporting Files/Assets.xcassets/Resources/Empty/empty_placeholder.imageset/empty_placeholder@1x.png


BIN
UU_Ent/UU_Ent/Supporting Files/Assets.xcassets/Resources/Empty/empty_placeholder.imageset/empty_placeholder@2x.png


BIN
UU_Ent/UU_Ent/Supporting Files/Assets.xcassets/Resources/Empty/empty_placeholder.imageset/empty_placeholder@3x.png


+ 5 - 7
UU_Ent/UU_Ent/Supporting Files/Info.plist

@@ -2,11 +2,6 @@
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
 <dict>
-	<key>NSAppTransportSecurity</key>
-	<dict>
-		<key>NSAllowsArbitraryLoads</key>
-		<true/>
-	</dict>
 	<key>CFBundleDevelopmentRegion</key>
 	<string>$(DEVELOPMENT_LANGUAGE)</string>
 	<key>CFBundleDisplayName</key>
@@ -31,6 +26,11 @@
 	<string>1</string>
 	<key>LSRequiresIPhoneOS</key>
 	<true/>
+	<key>NSAppTransportSecurity</key>
+	<dict>
+		<key>NSAllowsArbitraryLoads</key>
+		<true/>
+	</dict>
 	<key>UIRequiredDeviceCapabilities</key>
 	<array>
 		<string>armv7</string>
@@ -38,8 +38,6 @@
 	<key>UISupportedInterfaceOrientations</key>
 	<array>
 		<string>UIInterfaceOrientationPortrait</string>
-		<string>UIInterfaceOrientationLandscapeLeft</string>
-		<string>UIInterfaceOrientationLandscapeRight</string>
 	</array>
 	<key>UISupportedInterfaceOrientations~ipad</key>
 	<array>

+ 4 - 0
UU_Ent/UU_Ent/Supporting Files/defines/common.h

@@ -12,5 +12,9 @@
 
 //GRPC服务器
 static NSString * const kHostAddress = @"uu-api-test.usoftchina.com:9620";
+//网络状态改变
+static NSString *const kAFReachabilityChangedNotification = @"AFNetworkReachabilityChangedNotification";
+//切换账套
+static NSString *const kYRUserMasterChangedNotification = @"YRUserMasterChangedNotification";
 
 #endif /* common_h */

+ 3 - 1
UU_Ent/UU_Ent/Supporting Files/defines/import.h

@@ -16,6 +16,8 @@
 #import <UU_Ent/Message.pbrpc.h>
 
 //自定义
+#import "YRNetworkManager.h"
+#import "NSString+device.h"
 #import "YRUserInfo.h"
 #import "YRTableView.h"
 #import "UIColor+HexColor.h"
@@ -45,5 +47,5 @@
 #import <MBProgressHUD/MBProgressHUD.h>
 #import <MJRefresh/MJRefresh.h>
 #import <ReactiveObjC/ReactiveObjC.h>
-
+#import <AFNetworking/AFNetworking.h>
 #endif /* import_h */

+ 20 - 0
UU_Ent/UU_Ent/Utils/NSString/NSString+device.h

@@ -0,0 +1,20 @@
+//
+//  NSString+device.h
+//  UU_Ent
+//
+//  Created by liujl on 2019/5/23.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NSString (device)
+
++ (NSString*)deviceString;
+
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 110 - 0
UU_Ent/UU_Ent/Utils/NSString/NSString+device.m

@@ -0,0 +1,110 @@
+//
+//  NSString+device.m
+//  UU_Ent
+//
+//  Created by liujl on 2019/5/23.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import "NSString+device.h"
+#import "sys/utsname.h"
+@implementation NSString (device)
+
+
++ (NSString*)deviceString
+{
+    
+    // 需要#import "sys/utsname.h"
+    struct utsname systemInfo;
+    uname(&systemInfo);
+    NSString *platform = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
+    
+    if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 2G";
+    if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
+    if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";
+    if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
+    if ([platform isEqualToString:@"iPhone3,2"]) return @"iPhone 4";
+    if ([platform isEqualToString:@"iPhone3,3"]) return @"iPhone 4";
+    if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
+    if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5";
+    if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5";
+    if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone 5c";
+    if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone 5c";
+    if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone 5s";
+    if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone 5s";
+    if ([platform isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus";
+    if ([platform isEqualToString:@"iPhone7,2"]) return @"iPhone 6";
+    if ([platform isEqualToString:@"iPhone8,1"]) return @"iPhone 6s";
+    if ([platform isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus";
+    if ([platform isEqualToString:@"iPhone9,1"]) return @"iPhone 7";
+    if ([platform isEqualToString:@"iPhone9,2"]) return @"iPhone 7 Plus";
+    if ([platform isEqualToString:@"iPhone10,3"])   return @"iPhone X";
+    
+    if ([platform isEqualToString:@"iPod1,1"])   return @"iPod Touch 1G";
+    if ([platform isEqualToString:@"iPod2,1"])   return @"iPod Touch 2G";
+    if ([platform isEqualToString:@"iPod3,1"])   return @"iPod Touch 3G";
+    if ([platform isEqualToString:@"iPod4,1"])   return @"iPod Touch 4G";
+    if ([platform isEqualToString:@"iPod5,1"])   return @"iPod Touch 5G";
+    
+    if ([platform isEqualToString:@"iPad1,1"])   return @"iPad 1G";
+    
+    if ([platform isEqualToString:@"iPad2,1"])   return @"iPad 2 (A1395)";
+    if ([platform isEqualToString:@"iPad2,2"])   return @"iPad 2 (A1396)";
+    if ([platform isEqualToString:@"iPad2,3"])   return @"iPad 2 (A1397)";
+    if ([platform isEqualToString:@"iPad2,4"])   return @"iPad 2 (A1395+New Chip)";
+    if ([platform isEqualToString:@"iPad2,5"])   return @"iPad Mini 1G";
+    if ([platform isEqualToString:@"iPad2,6"])   return @"iPad Mini 1G";
+    if ([platform isEqualToString:@"iPad2,7"])   return @"iPad Mini 1G";
+    
+    if ([platform isEqualToString:@"iPad3,1"])   return @"iPad 3 (A1416)";
+    if ([platform isEqualToString:@"iPad3,2"])   return @"iPad 3 (A1403)";
+    if ([platform isEqualToString:@"iPad3,3"])   return @"iPad 3 (A1430)";
+    if ([platform isEqualToString:@"iPad3,4"])   return @"iPad 4 (A1458)";
+    if ([platform isEqualToString:@"iPad3,5"])   return @"iPad 4 (A1459)";
+    if ([platform isEqualToString:@"iPad3,6"])   return @"iPad 4 (A1460)";
+    
+    if ([platform isEqualToString:@"iPad4,1"])   return @"iPad Air (A1474)";
+    if ([platform isEqualToString:@"iPad4,2"])   return @"iPad Air (A1475)";
+    if ([platform isEqualToString:@"iPad4,3"])   return @"iPad Air (A1476)";
+    if ([platform isEqualToString:@"iPad4,4"])   return @"iPad Mini 2G (A1489)";
+    if ([platform isEqualToString:@"iPad4,5"])   return @"iPad Mini 2G (A1490)";
+    if ([platform isEqualToString:@"iPad4,6"])   return @"iPad Mini 2G (A1491)";
+    
+    if ([platform isEqualToString:@"i386"])      return @"iPhone X";
+    if ([platform isEqualToString:@"x86_64"])    return @"iPhone X";
+    if ([platform isEqualToString:@"i386"])      return @"iPhone Simulator";
+    if ([platform isEqualToString:@"x86_64"])    return @"iPhone Simulator";
+    
+    //    //手机别名: 用户定义的名称
+    //    NSString* userPhoneName = [[UIDevice currentDevice] name];
+    //    DLog(@"手机别名: %@", userPhoneName);
+    //    //设备名称
+    //    NSString* deviceName = [[UIDevice currentDevice] systemName];
+    //    DLog(@"设备名称: %@",deviceName );
+    //    //手机系统版本
+    //    NSString* phoneVersion = [[UIDevice currentDevice] systemVersion];
+    //    DLog(@"手机系统版本: %@", phoneVersion);
+    //    //手机型号
+    //    NSString* phoneModel = [[UIDevice currentDevice] model];
+    //    DLog(@"手机型号: %@",phoneModel );
+    //    //地方型号  (国际化区域名称)
+    //    NSString* localPhoneModel = [[UIDevice currentDevice] localizedModel];
+    //    DLog(@"国际化区域名称: %@",localPhoneModel );
+    //
+    //    NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
+    //    // 当前应用名称
+    //    NSString *appCurName = [infoDictionary objectForKey:@"CFBundleDisplayName"];
+    //    DLog(@"当前应用名称:%@",appCurName);
+    //    // 当前应用软件版本  比如:1.0.1
+    //    NSString *appCurVersion = [infoDictionary objectForKey:@"CFBundleShortVersionString"];
+    //    DLog(@"当前应用软件版本:%@",appCurVersion);
+    //    // 当前应用版本号码   int类型
+    //    NSString *appCurVersionNum = [infoDictionary objectForKey:@"CFBundleVersion"];
+    //    DLog(@"当前应用版本号码:%@",appCurVersionNum);
+    
+    
+    
+    return platform;
+}
+
+@end

+ 78 - 0
UU_Ent/UU_Ent/Utils/Network/YRNetworkManager.h

@@ -0,0 +1,78 @@
+//
+//  YRNetworkManager.h
+//  UU_Ent
+//
+//  Created by liujl on 2019/6/4.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef NS_ENUM(NSInteger,requestType) {
+    POST,
+    GET,
+};
+
+
+@interface YRNetworkManager : NSObject
+
++(instancetype)shareManager;
+
++(instancetype)b2bShareManager;
+//
++(void)checkNetWork;
+
+/**
+ 发起请求
+ 
+ @param url url
+ @param type 发起请求的方式
+ @param parameters 参数
+ @param uploadProgress 进度
+ @param success 成功回调
+ @param failure 失败回调
+ */
+
+-(NSURLSessionDataTask *)request:(NSString *)url method:(requestType)type parameters:(id)parameters progress:(void(^)(NSProgress *uploadProgress))uploadProgress success:(void(^)(NSURLSessionDataTask *task,id responseObject))success failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;
+
+/**
+ 文件上传
+ @param url url
+ @param type 请求方式
+ @param parameters 参数
+ @param conBlock 上传文件的设置
+ @param uploadProgress 上传进度
+ @param success 成功
+ @param failure 失败
+ */
+
+-(NSURLSessionDataTask *)request:(NSString *)url method:(requestType)type parameters:(id)parameters constructingBodyWithBlock:(void(^)(id formData))conBlock progress:(void(^)(NSProgress *uploadProgress))uploadProgress success:(void(^)(NSURLSessionDataTask *task,id responseObject))success failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;
+
+/**
+ 文件上传
+ 
+ @param url 链接
+ @param parameters 参数
+ @param data 二进制数据
+ @param dataKey 上传文件的key值
+ @param fileName 上传成功后,需要保存到服务器的文件的名字
+ @param uploadProgress 上传进度
+ @param success 成功回调
+ @param failure 失败回调
+ */
+
+-(NSURLSessionDataTask *)upload:(NSString *)url parameters:(id)parameters data:(NSData *)data dataKey:(NSString *)dataKey fileName:(NSString *)fileName progress:(void(^)(NSProgress *uploadProgress))uploadProgress success:(void(^)(NSURLSessionDataTask *task,id responseObject))success failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure;
+
+@end
+
+
+@interface NSObject (tasktag)
+
+@property(assign,nonatomic)NSInteger objTag;
+
+@end
+
+
+NS_ASSUME_NONNULL_END

+ 168 - 0
UU_Ent/UU_Ent/Utils/Network/YRNetworkManager.m

@@ -0,0 +1,168 @@
+//
+//  YRNetworkManager.m
+//  UU_Ent
+//
+//  Created by liujl on 2019/6/4.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import "YRNetworkManager.h"
+
+@interface YRNetworkManager()
+
+@property(strong,nonatomic)AFHTTPSessionManager *manager;
+
+@end
+
+@implementation YRNetworkManager
+
++(instancetype)shareManager{
+    
+    static YRNetworkManager *instance = nil;
+    
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        
+        instance = [[YRNetworkManager alloc]init];
+        
+    });
+    
+    instance.manager = [AFHTTPSessionManager manager];
+    
+    instance.manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/plain",@"charset=UTF-8", nil];
+    
+    /*由于有三种接口:B2B,ERP,IM,所以这两句需要的在外面自定义*/
+    //    manager.requestSerializer = [AFJSONRequestSerializer serializer];
+    //    manager.responseSerializer = [AFJSONResponseSerializer serializer];
+    
+    [instance.manager.securityPolicy setAllowInvalidCertificates:YES];
+    [instance.manager.requestSerializer setValue:@"application/x-www-form-urlencoded;charset=utf8" forHTTPHeaderField:@"Content-Type"];
+    
+//    [instance.manager.requestSerializer setValue:FORMAT(@"%@",g_sessionUser) forHTTPHeaderField:@"sessionUser"];
+    
+    [instance.manager.requestSerializer setValue:[NSString stringWithFormat:@"JSESSIONID=%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"sessionId"]] forHTTPHeaderField:@"Cookie"];
+    
+    [instance.manager.requestSerializer willChangeValueForKey:@"timeoutInterval"];
+    instance.manager.requestSerializer.timeoutInterval = 15.0f;
+    [instance.manager.requestSerializer didChangeValueForKey:@"timeoutInterval"];
+    
+    return instance;
+    
+}
+
++(instancetype)b2bShareManager{
+    
+    return [self new];
+    
+}
+
++(void)checkNetWork{
+    
+    AFNetworkReachabilityManager *manage = [AFNetworkReachabilityManager sharedManager];
+    
+    [manage setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
+        if (status ==  AFNetworkReachabilityStatusNotReachable) {//没有网络的情况
+            
+            
+            [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"netWorkStatus"];
+            
+            
+        }else{
+            
+            [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"netWorkStatus"];
+            
+            
+        }
+        
+        [[NSNotificationCenter defaultCenter] postNotificationName:kAFReachabilityChangedNotification object:nil userInfo:@{@"status":@(status)}];
+        
+    }];
+    
+    
+    [manage startMonitoring];
+    
+}
+
+
+/**
+ 发起请求
+ 
+ @param url url
+ @param type 发起请求的方式
+ @param parameters 参数
+ @param uploadProgress 进度
+ @param success 成功回调
+ @param failure 失败回调
+ */
+
+-(NSURLSessionDataTask *)request:(NSString *)url method:(requestType)type parameters:(id)parameters progress:(void(^)(NSProgress *uploadProgress))uploadProgress success:(void(^)(NSURLSessionDataTask *task,id responseObject))success failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure{
+    
+    if (type == POST) {
+        
+        return [self.manager POST:url parameters:parameters progress:uploadProgress success:success failure:failure];
+        
+    }else if(type == GET){
+        
+        
+        return [self.manager GET:url parameters:parameters progress:uploadProgress success:success failure:failure];
+        
+    }else{
+        
+        NSAssert(type == GET || type == POST, @"请传入正确的网络请求方式");
+        return [NSURLSessionDataTask new];
+        
+    }
+    
+}
+
+/**
+ 文件上传
+ @param url url
+ @param type 请求方式
+ @param parameters 参数
+ @param conBlock 上传文件的设置
+ @param uploadProgress 上传进度
+ @param success 成功
+ @param failure 失败
+ */
+
+-(NSURLSessionDataTask *)request:(NSString *)url method:(requestType)type parameters:(id)parameters constructingBodyWithBlock:(void(^)(id formData))conBlock progress:(void(^)(NSProgress *uploadProgress))uploadProgress success:(void(^)(NSURLSessionDataTask *task,id responseObject))success failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure{
+    
+    
+    if (type == POST) {
+        
+        return [self.manager POST:url parameters:parameters constructingBodyWithBlock:conBlock progress:uploadProgress success:success failure:failure];
+        
+    }else{
+        
+        NSAssert(type == POST, @"请传入正确的网络请求方式");
+        
+        return [NSURLSessionDataTask new];
+        
+    }
+    
+}
+
+/**
+ 文件上传
+ 
+ @param url 链接
+ @param parameters 参数
+ @param data 二进制数据
+ @param dataKey 上传文件的key值
+ @param fileName 上传成功后,需要保存到服务器的文件的名字
+ @param uploadProgress 上传进度
+ @param success 成功回调
+ @param failure 失败回调
+ */
+
+-(NSURLSessionDataTask *)upload:(NSString *)url parameters:(id)parameters data:(NSData *)data dataKey:(NSString *)dataKey fileName:(NSString *)fileName progress:(void(^)(NSProgress *uploadProgress))uploadProgress success:(void(^)(NSURLSessionDataTask *task,id responseObject))success failure:(void(^)(NSURLSessionDataTask *task,NSError *error))failure{
+    
+    return [self.manager POST:url parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
+        [formData appendPartWithFileData:data name:dataKey fileName:fileName mimeType:@"application/octet-stream"];
+    } progress:uploadProgress success:success failure:failure];
+    
+    
+}
+
+@end

+ 4 - 2
UU_Ent/UU_Ent/Utils/UIButton/UIButton+block.m

@@ -20,10 +20,12 @@
     }
     if (backColor) {
         button.backgroundColor = backColor;
-    }if (size) {
+    }
+    if (size) {
         button.titleLabel.font = FONT_SIZE(size);
        
-    }if (radius) {
+    }
+    if (radius) {
         button.layer.cornerRadius = radius;
         button.layer.masksToBounds = YES;
     }

+ 1 - 1
UU_Ent/UU_Ent/Utils/UIColor/UIColor+HexColor.m

@@ -67,7 +67,7 @@
 	[[NSScanner scannerWithString:blue] scanHexInt:&colorValueB];
 	[[NSScanner scannerWithString:alpha] scanHexInt:&colorValueA];
 	
-
+    
 	return [UIColor colorWithRed:((colorValueR)&0xFF)/255.0 
 					green:((colorValueG)&0xFF)/255.0 
 					 blue:((colorValueB)&0xFF)/255.0 

+ 1 - 5
UU_Ent/UU_Ent/Utils/UIPopoverListView/UIPopoverListView.m

@@ -77,7 +77,6 @@ UIView *popDetailView;
     _titleView.textAlignment = NSTextAlignmentCenter;
     _titleView.textColor = [UIColor whiteColor];
     CGFloat xWidth = self.bounds.size.width;
-    _titleView.lineBreakMode = NSLineBreakByCharWrapping;
     _titleView.frame = CGRectMake(0, 0, xWidth, 32.0f);
     [self addSubview:_titleView];
     
@@ -96,7 +95,6 @@ UIView *popDetailView;
     _overlayView = [[UIControl alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
     _overlayView.backgroundColor = [UIColor colorWithRed:.16 green:.17 blue:.21 alpha:.8];
     
-    
     if (self.isCannotClickBackGround) {
         [_overlayView addTarget:self
                          action:@selector(dismiss)
@@ -120,7 +118,6 @@ UIView *popDetailView;
     _titleView.textAlignment = NSTextAlignmentCenter;
     _titleView.textColor = [UIColor whiteColor];
     CGFloat xWidth = self.bounds.size.width;
-    _titleView.lineBreakMode = NSLineBreakByCharWrapping;
     _titleView.frame = CGRectMake(0, 0, xWidth, 32.0f);
     [self addSubview:_titleView];
     //view
@@ -162,7 +159,6 @@ UIView *popDetailView;
     _titleView.textAlignment = NSTextAlignmentCenter;
     _titleView.textColor = [UIColor whiteColor];
     CGFloat xWidth = self.bounds.size.width;
-    _titleView.lineBreakMode = NSLineBreakByCharWrapping;
     _titleView.frame = CGRectMake(0, 0, xWidth, 32.0f);
     [self addSubview:_titleView];
     //view
@@ -224,8 +220,8 @@ UIView *popDetailView;
     _titleView.textAlignment = NSTextAlignmentCenter;
     _titleView.textColor = [UIColor whiteColor];
     CGFloat xWidth = self.bounds.size.width;
-    _titleView.lineBreakMode = NSLineBreakByCharWrapping;
     _titleView.frame = CGRectMake(0, 0, xWidth, 32.0f);
+   
     [self addSubview:_titleView];
     
     //tableview

+ 50 - 0
UU_Ent/UU_Ent/Utils/WebView/YRWebView.h

@@ -0,0 +1,50 @@
+//
+//  YRWebView.h
+//  UU_Ent
+//
+//  Created by liujl on 2019/8/22.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import <WebKit/WebKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+
+@class YRWebView;
+
+
+
+@protocol YRWebViewDelegate <NSObject>
+
+
+
+// 0 成功  1 完成   2 失败
+
+- (void)webViewLoadState:(NSInteger)state;
+
+
+
+@optional
+
+- (void)panableWebView:(YRWebView *)webView panPopGesture:(UIPanGestureRecognizer *)pan;
+
+
+
+@end
+
+@interface YRWebView : WKWebView
+
+
+@property(nonatomic, weak) id <YRWebViewDelegate> panDelegate;
+
+@property(nonatomic, assign) BOOL enablePanGesture;
+
+@property(copy,nonatomic)NSString *url;
+
+- (void)goBack;
+
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 365 - 0
UU_Ent/UU_Ent/Utils/WebView/YRWebView.m

@@ -0,0 +1,365 @@
+//
+//  YRWebView.m
+//  UU_Ent
+//
+//  Created by liujl on 2019/8/22.
+//  Copyright © 2019 UAS. All rights reserved.
+//
+
+#import "YRWebView.h"
+
+@interface YRWebView()<WKNavigationDelegate>
+
+@property (nonatomic, strong) UIGestureRecognizer* popGesture;
+
+@property (nonatomic, weak) id <WKNavigationDelegate> originDelegate;
+
+@property (nonatomic, strong)UIImageView *historyView;
+
+@property (nonatomic, strong) NSMutableArray *historyStack;
+
+@property (nonatomic, assign) CGFloat panStartX;
+
+/**
+ 用来判断是返回还是
+ */
+@property (nonatomic, strong) NSMutableArray<NSString *> *urlStack;
+
+@end
+
+@implementation YRWebView
+
+- (instancetype)initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration{
+    
+    self = [super initWithFrame:frame configuration:configuration];
+    
+    if (self) {
+        
+        [self defualtSet];
+        
+    }
+    
+    return self;
+}
+
+-(void)defualtSet{
+    
+    self.popGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGesture:)];
+    
+    [self addGestureRecognizer:self.popGesture];
+    
+    [super setNavigationDelegate:self];
+    
+    [YRWebView addShadowToView:self];
+    
+    [self addObserver:self forKeyPath:@"URL" options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
+    
+}
+
+
++ (UIImage *)screenshotOfView:(UIView *)view {
+    
+    UIGraphicsBeginImageContextWithOptions(view.frame.size, YES, 0.0);
+    
+    
+    
+    if ([view respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) {
+        
+        [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES];
+        
+    }
+    
+    else{
+        
+        [view.layer renderInContext:UIGraphicsGetCurrentContext()];
+        
+    }
+    
+    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
+    
+    UIGraphicsEndImageContext();
+    
+    return image;
+    
+}
+
+
+
++ (void)addShadowToView:(UIView *)view{
+    
+    CALayer *layer = view.layer;
+    
+    UIBezierPath *path = [UIBezierPath bezierPathWithRect:layer.bounds];
+    
+    layer.shadowPath = path.CGPath;
+    
+    layer.shadowColor = [UIColor blackColor].CGColor;
+    
+    layer.shadowOffset = CGSizeZero;
+    
+    layer.shadowOpacity = 0.4f;
+    
+    layer.shadowRadius = 8.0f;
+    
+}
+
+
+
+- (void)setDelegate:(id<WKNavigationDelegate>)delegate{
+    
+    self.originDelegate = delegate;
+    
+}
+
+
+
+- (id<WKNavigationDelegate>)delegate{
+    
+    return self.originDelegate;
+    
+}
+
+
+
+- (void)goBack{
+    
+    [super goBack];
+    
+    [self.historyStack removeLastObject];
+    [self.urlStack removeLastObject];
+    
+}
+
+
+
+- (void)setEnablePanGesture:(BOOL)enablePanGesture{
+    
+    self.popGesture.enabled = enablePanGesture;
+    
+}
+
+
+
+- (BOOL)enablePanGesture{
+    
+    return self.popGesture.enabled;
+    
+}
+
+
+
+- (NSMutableArray *)historyStack {
+    
+    if (!_historyStack) {
+        
+        _historyStack = [NSMutableArray array];
+        
+    }
+    
+    return _historyStack;
+    
+}
+
+
+
+- (UIImageView *)historyView{
+    
+    if (!_historyView) {
+        
+        if (self.superview) {
+            
+            _historyView = [[UIImageView alloc] initWithFrame:self.bounds];
+            
+            [self.superview insertSubview:_historyView belowSubview:self];
+            
+        }
+        
+    }
+    
+    
+    
+    return _historyView;
+    
+}
+
+- (void)dealloc {
+    
+    
+    [self removeObserver:self forKeyPath:@"URL"];
+    
+    if (self.historyView) {
+        
+        [self.historyView removeFromSuperview];
+        
+        self.historyView = nil;
+        
+    }
+    
+}
+
+
+
+- (void)layoutSubviews {
+    
+    [super layoutSubviews];
+    
+    self.historyView.frame = self.bounds;
+    
+}
+
+#pragma mark === gesture===
+
+- (void)panGesture:(UIPanGestureRecognizer *)sender{
+    
+    if (![self canGoBack] || self.historyStack.count == 0) {
+        
+        if (self.panDelegate && [self.panDelegate respondsToSelector:@selector(panableWebView:panPopGesture:)]) {
+            
+            [self.panDelegate panableWebView:self panPopGesture:sender];
+            
+        }
+        
+        
+        
+        return;
+        
+    }
+    
+    
+    
+    CGPoint point = [sender translationInView:self];
+    
+    if (sender.state == UIGestureRecognizerStateBegan) {
+        
+        _panStartX = point.x;
+        
+    }
+    
+    else if (sender.state == UIGestureRecognizerStateChanged){
+        
+        CGFloat deltaX = point.x - _panStartX;
+        
+        if (deltaX > 0) {
+            
+            if ([self canGoBack]) {
+                
+                assert(self.historyStack.count > 0);
+                
+                NSDictionary *history = self.historyStack.lastObject;
+                
+                self.historyView.image = [history objectForKey:@"preview"];
+                
+                self.x = deltaX;
+                
+                self.historyView.x = -self.width / 2.0f + deltaX / 2.0f;
+                
+            }
+            
+        }
+        
+    }
+    
+    else if (sender.state == UIGestureRecognizerStateEnded){
+        
+        CGFloat deltaX = point.x - _panStartX;
+        
+        CGFloat duration = .5f;
+        
+        if ([self canGoBack]) {
+            
+            if (deltaX > self.width / 4.0f) {
+                
+                [UIView animateWithDuration:(1.0f - deltaX / self.width) * duration animations:^{
+                    
+                    
+                    self.x = self.width;
+                    
+                    self.historyView.x = 0;
+                    
+                    [self goBack];
+                    
+                    
+                } completion:^(BOOL finished) {
+                    
+                    self.x = 0;
+                    
+                    [self.historyView removeFromSuperview];
+                    
+                    self.historyView = nil;
+                    
+                    
+                    
+                }];
+                
+            }
+            
+            else{
+                
+                [UIView animateWithDuration:(deltaX/self.bounds.size.width)*duration animations:^{
+                    
+                    CGRect rc = self.frame;
+                    
+                    rc.origin.x = 0;
+                    
+                    self.frame = rc;
+                    
+                    rc.origin.x = -self.bounds.size.width/2.0f;
+                    
+                    self.historyView.frame = rc;
+                    
+                } completion:^(BOOL finished) {
+                    
+                    
+                    
+                }];
+                
+            }
+            
+        }
+        
+    }
+    
+}
+
+
+-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
+    
+    if ([keyPath isEqualToString:@"URL"]) {
+        
+        NSString *newUrl = [NSString stringWithFormat:@"%@",change[@"new"]];
+        //执行的是跳入新页面的操作
+         if (![self.urlStack containsObject:newUrl] && [newUrl containsString:@"http"]) {
+                
+               [self.urlStack addObject:newUrl];
+                
+        }
+        
+    }
+    
+}
+
+
+
+-(void)setUrl:(NSString *)url{
+    
+    _url = url;
+    
+    [self.urlStack addObject:url];
+    
+    
+}
+
+-(NSMutableArray<NSString *> *)urlStack{
+    
+    if (!_urlStack) {
+        
+        _urlStack = [NSMutableArray new];
+        
+    }
+    
+    return _urlStack;
+}
+
+
+
+@end

+ 12 - 0
UU_Ent/UU_Ent/Utils/tableView/YRTableView.h

@@ -12,6 +12,18 @@ NS_ASSUME_NONNULL_BEGIN
 
 @interface YRTableView : UITableView
 
+/**
+ 是否自动显示无数据情况下的提示,默认显示
+ */
+@property(assign,nonatomic)BOOL autoNoDataSet;
+
+/**
+ 无数据显示图偏移量,默认导航加状态栏高度
+ */
+@property(assign,nonatomic)CGFloat verticalOffset;
+
+@property(copy,nonatomic)void(^emptyDidClicked)(void);
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 88 - 0
UU_Ent/UU_Ent/Utils/tableView/YRTableView.m

@@ -7,9 +7,97 @@
 //
 
 #import "YRTableView.h"
+#import <DZNEmptyDataSet/UIScrollView+EmptyDataSet.h>
+
+@interface YRTableView()<DZNEmptyDataSetDelegate,DZNEmptyDataSetSource>
+
+@end
 
 @implementation YRTableView
 
+- (instancetype)initWithFrame:(CGRect)frame
+{
+    self = [super initWithFrame:frame];
+    if (self) {
+        
+        [self defaultSets];
+        
+    }
+    return self;
+}
+
+/**
+ 默认设置
+ */
+-(void)defaultSets{
+    
+    self.tableFooterView = [UIView new];
+    self.autoNoDataSet = YES;
+    
+    self.verticalOffset = -([UIApplication sharedApplication].statusBarFrame.size.height + 44);
+    
+}
+
+-(void)setAutoNoDataSet:(BOOL)autoNoDataSet{
+    
+    _autoNoDataSet = autoNoDataSet;
+    
+    if (autoNoDataSet) {
+        
+        self.emptyDataSetDelegate = self;
+        self.emptyDataSetSource = self;
+        
+    }else{
+        
+        self.emptyDataSetDelegate = nil;
+        self.emptyDataSetSource = nil;
+        
+    }
+    
+}
+
+#pragma mark - DZNEmptyDataSetDelegate,DZNEmptyDataSetSource
+
+- (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView
+{
+    
+    return [UIImage imageNamed:@"empty_placeholder"];
+    
+}
+
+- (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView{
+    
+    return self.verticalOffset;
+    
+}
+
+
+- (BOOL)emptyDataSetShouldFadeIn:(UIScrollView *)scrollView{
+    
+    return YES;
+    
+}
+
+-(BOOL)emptyDataSetShouldAllowTouch:(UIScrollView *)scrollView{
+    
+    return YES;
+    
+}
+
+- (BOOL)emptyDataSetShouldAnimateImageView:(UIScrollView *)scrollView{
+    
+    return YES;
+    
+}
 
+- (void)emptyDataSet:(UIScrollView *)scrollView didTapView:(UIView *)view{
+    
+    if (self.emptyDidClicked) {
+        
+        self.emptyDidClicked();
+        
+    }
+    
+}
 
 @end