Browse Source

添加百度定位

南鑫林 6 years ago
parent
commit
7d08e86067
100 changed files with 2211 additions and 1233 deletions
  1. 4 6
      RainbowPlanet/Podfile
  2. 9 13
      RainbowPlanet/Podfile.lock
  3. 172 88
      RainbowPlanet/RainbowPlanet.xcodeproj/project.pbxproj
  4. 6 4
      RainbowPlanet/RainbowPlanet/AppDelegate/AppDelegate+Window.swift
  5. 5 5
      RainbowPlanet/RainbowPlanet/Base/BaseTabbarViewController/BaseTabbarViewController.swift
  6. 8 6
      RainbowPlanet/RainbowPlanet/Base/BaseViewController/BaseViewController.swift
  7. 13 1
      RainbowPlanet/RainbowPlanet/Macro/ColorMacro.swift
  8. 42 31
      RainbowPlanet/RainbowPlanet/Macro/FontMacro.swift
  9. 90 48
      RainbowPlanet/RainbowPlanet/Manager/MapManager/BaiduMapManager/BaiduMapManager.swift
  10. 5 3
      RainbowPlanet/RainbowPlanet/Manager/MapManager/BaiduMapManager/LocationModel.swift
  11. 1 1
      RainbowPlanet/RainbowPlanet/Manager/UMManager/UMManager.swift
  12. 65 0
      RainbowPlanet/RainbowPlanet/Modules/LocationModules/AddressPOI/View/AddressPOIView.swift
  13. 35 0
      RainbowPlanet/RainbowPlanet/Modules/LocationModules/AddressPOI/ViewController/AddressPOIViewController.swift
  14. 175 0
      RainbowPlanet/RainbowPlanet/Modules/LocationModules/Location/View/LocationView.swift
  15. 61 0
      RainbowPlanet/RainbowPlanet/Modules/LocationModules/Location/ViewController/LocationViewController.swift
  16. 108 0
      RainbowPlanet/RainbowPlanet/Modules/LocationModules/SelfRecommendation/View/SelfRecommendationCollectionViewCell.swift
  17. 70 0
      RainbowPlanet/RainbowPlanet/Modules/LocationModules/SelfRecommendation/View/SelfRecommendationHeaderCollectionReusableView.swift
  18. 193 0
      RainbowPlanet/RainbowPlanet/Modules/LocationModules/SelfRecommendation/View/SelfRecommendationView.swift
  19. 47 0
      RainbowPlanet/RainbowPlanet/Modules/LocationModules/SelfRecommendation/ViewController/SelfRecommendationViewController.swift
  20. 255 0
      RainbowPlanet/RainbowPlanet/Modules/RegisterLoginModule/BindPhoneNumber/View/BindPhoneNumberView.swift
  21. 30 263
      RainbowPlanet/RainbowPlanet/Modules/RegisterLoginModule/BindPhoneNumber/ViewController/BindPhoneNumberViewController.swift
  22. 269 0
      RainbowPlanet/RainbowPlanet/Modules/RegisterLoginModule/MobileLogin/View/MobileLoginView.swift
  23. 61 0
      RainbowPlanet/RainbowPlanet/Modules/RegisterLoginModule/MobileLogin/ViewController/MobileLoginViewController.swift
  24. 243 0
      RainbowPlanet/RainbowPlanet/Modules/RegisterLoginModule/PasswordLogin/View/PasswordLoginView.swift
  25. 27 82
      RainbowPlanet/RainbowPlanet/Modules/RegisterLoginModule/PasswordLogin/ViewController/PasswordLoginViewController.swift
  26. 0 132
      RainbowPlanet/RainbowPlanet/Modules/RegisterLoginModule/PasswordLogin/ViewController/PasswordLoginViewController.xib
  27. 34 21
      RainbowPlanet/RainbowPlanet/Modules/RegisterLoginModule/RegisterLogin/View/RegisterLoginView.swift
  28. 20 6
      RainbowPlanet/RainbowPlanet/Modules/RegisterLoginModule/RegisterLogin/ViewController/RegisterLoginViewController.swift
  29. 0 132
      RainbowPlanet/RainbowPlanet/Modules/RegisterLoginModule/VerificationPhone/ViewController/VerificationPhoneViewController.swift
  30. 0 160
      RainbowPlanet/RainbowPlanet/Modules/RegisterLoginModule/VerificationPhone/ViewController/VerificationPhoneViewController.xib
  31. 15 16
      RainbowPlanet/RainbowPlanet/Service/SwiftMoyaService/SwiftMoyaNetWorkManager/ApiMacro.swift
  32. 10 7
      RainbowPlanet/RainbowPlanet/Service/SwiftMoyaService/SwiftMoyaNetWorkManager/SwiftMoyaNetWorkManager.swift
  33. 4 4
      RainbowPlanet/RainbowPlanet/Service/SwiftMoyaService/SwiftMoyaServiceApi/SwiftMoyaServiceSMS/SwiftMoyaServiceSMSApi.swift
  34. 1 1
      RainbowPlanet/RainbowPlanet/Service/SwiftMoyaService/SwiftMoyaServiceApi/SwiftMoyaServiceUser/SwiftMoyaNetWorkServiceUser.swift
  35. 9 63
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/Contents.json
  36. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/iconiPhoneApp_60pt@2x.png
  37. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/iconiPhoneApp_60pt@3x.png
  38. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/iconiPhoneNotification_20pt@2x.png
  39. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/iconiPhoneNotification_20pt@3x.png
  40. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/iconiPhoneSpootlight5_29pt@2x.png
  41. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/iconiPhoneSpootlight5_29pt@3x.png
  42. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/iconiPhoneSpootlight7_40pt@2x.png
  43. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/iconiPhoneSpootlight7_40pt@3x.png
  44. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/iconstore_1024pt.png
  45. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPadApp_76pt.png
  46. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPadApp_76pt@2x.png
  47. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPadNotifications_20pt.png
  48. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPadNotifications_20pt@2x.png
  49. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPadProApp_83.5pt@2x.png
  50. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPadSpootlight5_29pt.png
  51. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPadSpootlight5_29pt@2x.png
  52. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPadSpootlight7_40pt.png
  53. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPadSpootlight7_40pt@2x.png
  54. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPhoneApp_60pt@2x.png
  55. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPhoneApp_60pt@3x.png
  56. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPhoneNotification_20pt@2x.png
  57. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPhoneNotification_20pt@3x.png
  58. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPhoneSpootlight5_29pt@2x.png
  59. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPhoneSpootlight5_29pt@3x.png
  60. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPhoneSpootlight7_40pt@2x.png
  61. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPhoneSpootlight7_40pt@3x.png
  62. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024store_1024pt.png
  63. 0 0
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/Arrows/Contents.json
  64. 23 0
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/Arrows/my_arrows_unfold.imageset/Contents.json
  65. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/Arrows/my_arrows_unfold.imageset/my_arrows_unfold.png
  66. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/Arrows/my_arrows_unfold.imageset/my_arrows_unfold@2x.png
  67. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/Arrows/my_arrows_unfold.imageset/my_arrows_unfold@3x.png
  68. 0 0
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/BG/Contents.json
  69. 3 2
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/TabbarIcons/find_1.imageset/Contents.json
  70. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/BG/bg0.imageset/bg0.png
  71. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/BG/bg0.imageset/bg0@2x.png
  72. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/BG/bg0.imageset/bg0@3x.png
  73. 0 0
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/Contents.json
  74. 3 2
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/TabbarIcons/home_1.imageset/Contents.json
  75. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page01.imageset/page01.png
  76. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page01.imageset/page01@2x.png
  77. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page01.imageset/page01@3x.png
  78. 3 2
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/TabbarIcons/find.imageset/Contents.json
  79. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page02.imageset/page02.png
  80. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page02.imageset/page02@2x.png
  81. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page02.imageset/page02@3x.png
  82. 23 0
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page03.imageset/Contents.json
  83. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page03.imageset/page03.png
  84. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page03.imageset/page03@2x.png
  85. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page03.imageset/page03@3x.png
  86. 23 0
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page04.imageset/Contents.json
  87. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page04.imageset/page04.png
  88. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page04.imageset/page04@2x.png
  89. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page04.imageset/page04@3x.png
  90. 23 0
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page05.imageset/Contents.json
  91. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page05.imageset/page05.png
  92. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page05.imageset/page05@2x.png
  93. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page05.imageset/page05@3x.png
  94. 23 0
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page06.imageset/Contents.json
  95. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page06.imageset/page06.png
  96. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page06.imageset/page06@2x.png
  97. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page06.imageset/page06@3x.png
  98. 0 134
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/LaunchImage.launchimage/Contents.json
  99. BIN
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/LaunchImage.launchimage/LaunchImageiPadPortraitWOSBiOS56_768x1004pt.png
  100. 0 0
      RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/LaunchImage.launchimage/LaunchImageiPadPortraitWOSBiOS56_768x1004pt@2x.png

+ 4 - 6
RainbowPlanet/Podfile

@@ -26,7 +26,7 @@ target 'RainbowPlanet' do
 #  pod 'Gifu'
   # 自动布局
   pod 'SnapKit'
-#  pod 'TangramKit'
+  pod 'TangramKit'
   # 键盘
   pod 'IQKeyboardManagerSwift'
   # 弹框
@@ -35,8 +35,6 @@ target 'RainbowPlanet' do
   pod 'MJRefresh'
   # 设备型号
   pod 'DeviceKit'
-  # 内存检测
-  pod 'MLeaksFinder'
   # 占位图
   pod 'LYEmptyView'
   # 分段导航栏
@@ -44,8 +42,6 @@ target 'RainbowPlanet' do
   pod 'JXSegmentedView'
   # 轮播
   pod 'FSPagerView'
-  # 评分
-  pod 'SwiftyStarRatingView'
   # 二维码
 #  pod 'EFQRCode'
   # 小红点
@@ -80,8 +76,10 @@ target 'RainbowPlanet' do
   pod 'UMCShare/Social/ReducedSina'
 
   #=====================百度地图===========
-  #百度地图定位SDK
+  # 百度地图定位SDK
   pod 'BMKLocationKit'
+  # 百度地图SDK
+  pod 'BaiduMapKit'
 
   #=====================高德地图===========
   #高德地图定位SDK

+ 9 - 13
RainbowPlanet/Podfile.lock

@@ -1,9 +1,9 @@
 PODS:
   - Alamofire (4.8.2)
+  - BaiduMapKit (4.3.0)
   - BMKLocationKit (1.5.0)
   - Cache (5.2.0)
   - DeviceKit (1.13.0)
-  - FBRetainCycleDetector (0.1.4)
   - FSPagerView (0.8.2)
   - FWPopupView (4.0.1):
     - SnapKit
@@ -14,8 +14,6 @@ PODS:
   - LYEmptyView (1.2.3)
   - MBProgressHUD (1.1.0)
   - MJRefresh (3.1.16)
-  - MLeaksFinder (1.0.0):
-    - FBRetainCycleDetector
   - Moya (12.0.1):
     - Moya/Core (= 12.0.1)
   - Moya/Core (12.0.1):
@@ -38,7 +36,7 @@ PODS:
   - RxSwift (4.5.0)
   - SnapKit (4.2.0)
   - SwiftyJSON (4.3.0)
-  - SwiftyStarRatingView (1.0.4)
+  - TangramKit (1.3.1)
   - UMCAnalytics (6.0.3):
     - UMCCommon
   - UMCCommon (2.0.1)
@@ -63,6 +61,7 @@ PODS:
 
 DEPENDENCIES:
   - Alamofire
+  - BaiduMapKit
   - BMKLocationKit
   - DeviceKit
   - FSPagerView
@@ -74,7 +73,6 @@ DEPENDENCIES:
   - LYEmptyView
   - MBProgressHUD
   - MJRefresh
-  - MLeaksFinder
   - Moya/RxSwift
   - MoyaMapper/MMCache
   - ObjectMapper
@@ -83,7 +81,7 @@ DEPENDENCIES:
   - RxSwift
   - SnapKit
   - SwiftyJSON
-  - SwiftyStarRatingView
+  - TangramKit
   - UMCAnalytics
   - UMCCommon
   - UMCCommonLog
@@ -97,10 +95,10 @@ DEPENDENCIES:
 SPEC REPOS:
   https://github.com/cocoapods/specs.git:
     - Alamofire
+    - BaiduMapKit
     - BMKLocationKit
     - Cache
     - DeviceKit
-    - FBRetainCycleDetector
     - FSPagerView
     - FWPopupView
     - IQKeyboardManagerSwift
@@ -110,7 +108,6 @@ SPEC REPOS:
     - LYEmptyView
     - MBProgressHUD
     - MJRefresh
-    - MLeaksFinder
     - Moya
     - MoyaMapper
     - ObjectMapper
@@ -120,7 +117,7 @@ SPEC REPOS:
     - RxSwift
     - SnapKit
     - SwiftyJSON
-    - SwiftyStarRatingView
+    - TangramKit
     - UMCAnalytics
     - UMCCommon
     - UMCCommonLog
@@ -130,10 +127,10 @@ SPEC REPOS:
 
 SPEC CHECKSUMS:
   Alamofire: ae5c501addb7afdbb13687d7f2f722c78734c2d3
+  BaiduMapKit: 63575d9236b4112c4ff76391df637f2a6dc1ada8
   BMKLocationKit: 40d267478acd8704ddebd0e9deaddc727b13df9f
   Cache: 807c5d86d01a177f06ede9865add3aea269bbfd4
   DeviceKit: 5a4accdb2918ce0b69e62dc3bef6e4d2cc06e2e4
-  FBRetainCycleDetector: 46f8179bbb1c587deee3ea838a1a3ee02acf5015
   FSPagerView: 816a18842306973cc7cc6df8a5332272f7815c30
   FWPopupView: a463a17aab606b0ef222a68784dbf32accba4711
   IQKeyboardManagerSwift: 0f0ae8935360b4003e6ea1ac7c19898f01e2f7c7
@@ -143,7 +140,6 @@ SPEC CHECKSUMS:
   LYEmptyView: ea5827f3f81fcbec427f990005501991477bdae8
   MBProgressHUD: e7baa36a220447d8aeb12769bf0585582f3866d9
   MJRefresh: 7798e16e53a5ef7f332dd05b27664db4e29530fd
-  MLeaksFinder: 8c435bd2f6d070af18cff082b503b21adc130fc0
   Moya: cf730b3cd9e005401ef37a85143aa141a12fd38f
   MoyaMapper: 18b9351707f53778d263a987e740252f039521ba
   ObjectMapper: 0d4402610f4e468903ae64629eec4784531e5c51
@@ -153,7 +149,7 @@ SPEC CHECKSUMS:
   RxSwift: f172070dfd1a93d70a9ab97a5a01166206e1c575
   SnapKit: fe8a619752f3f27075cc9a90244d75c6c3f27e2a
   SwiftyJSON: 6faa0040f8b59dead0ee07436cbf76b73c08fd08
-  SwiftyStarRatingView: a2b0057700e0adeb8e7442c55d99cb53b531d2f4
+  TangramKit: 1b4ee065845919057bdbe930ba39deecbbff181e
   UMCAnalytics: ff58714ada407682c4a07548156f94bcec92f055
   UMCCommon: 0263a057a2e1ae1da4c8308541e56904a493ce13
   UMCCommonLog: 05a2d5de21858e3d870551562cff405c1366d244
@@ -161,6 +157,6 @@ SPEC CHECKSUMS:
   UMCSecurityPlugins: 0831a08f3988f3cea9f1d3a7626cd9bee4fef150
   UMCShare: 552b29753f1b4da87b51d96545ed19e6263df397
 
-PODFILE CHECKSUM: c1926dc0152e067d2063181b4cbe559e373ce4bc
+PODFILE CHECKSUM: 3671cde882a91c04a29ed513745823e7fc433f85
 
 COCOAPODS: 1.6.1

+ 172 - 88
RainbowPlanet/RainbowPlanet.xcodeproj/project.pbxproj

@@ -20,6 +20,12 @@
 		A7284A7322546460000BAEC4 /* SwiftMoyaServicePayApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7284A7222546460000BAEC4 /* SwiftMoyaServicePayApi.swift */; };
 		A7284A75225465DD000BAEC4 /* SwiftMoyaNetWorkServicePay.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7284A74225465DD000BAEC4 /* SwiftMoyaNetWorkServicePay.swift */; };
 		A7284A7722547333000BAEC4 /* AlipayResultModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7284A7622547333000BAEC4 /* AlipayResultModel.swift */; };
+		A729B5A82266F2E0004AE098 /* AlertSheetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A729B5A72266F2E0004AE098 /* AlertSheetView.swift */; };
+		A729B5AA2266F6FD004AE098 /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A729B5A92266F6FD004AE098 /* Launch Screen.storyboard */; };
+		A729B5AD2266FF45004AE098 /* BindPhoneNumberView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A729B5AC2266FF45004AE098 /* BindPhoneNumberView.swift */; };
+		A729B5B022671310004AE098 /* MobileLoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A729B5AF22671310004AE098 /* MobileLoginView.swift */; };
+		A729B5B42267254B004AE098 /* PasswordLoginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A729B5B32267254B004AE098 /* PasswordLoginViewController.swift */; };
+		A729B5B72267270B004AE098 /* PasswordLoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A729B5B62267270B004AE098 /* PasswordLoginView.swift */; };
 		A72A726722321DBD00B21995 /* LocationModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A72A726322321DBD00B21995 /* LocationModel.swift */; };
 		A72A726822321DBD00B21995 /* UMManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A72A726522321DBD00B21995 /* UMManager.swift */; };
 		A72A72A922321DE000B21995 /* NumberKeyboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = A72A727222321DDE00B21995 /* NumberKeyboard.swift */; };
@@ -75,12 +81,12 @@
 		A738D202225AD6AD00EEE860 /* Extension+UICollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A738D201225AD6AD00EEE860 /* Extension+UICollectionView.swift */; };
 		A738D205225AF90D00EEE860 /* WeChatpayOrderModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A738D204225AF90D00EEE860 /* WeChatpayOrderModel.swift */; };
 		A738D66F225D9BD900EEE860 /* UMLoginModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A738D66E225D9BD900EEE860 /* UMLoginModel.swift */; };
-		A75414F7224B4C1B002480B5 /* VerificationPhoneViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A75414F5224B4C1B002480B5 /* VerificationPhoneViewController.swift */; };
-		A75414F8224B4C1B002480B5 /* VerificationPhoneViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = A75414F6224B4C1B002480B5 /* VerificationPhoneViewController.xib */; };
-		A75414FD224B5F28002480B5 /* PasswordLoginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A75414FB224B5F28002480B5 /* PasswordLoginViewController.swift */; };
-		A75414FE224B5F28002480B5 /* PasswordLoginViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = A75414FC224B5F28002480B5 /* PasswordLoginViewController.xib */; };
+		A73D7C682268A032002A4CE3 /* SwiftyStarRatingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A73D7C672268A032002A4CE3 /* SwiftyStarRatingView.swift */; };
+		A75414FD224B5F28002480B5 /* MobileLoginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A75414FB224B5F28002480B5 /* MobileLoginViewController.swift */; };
 		A7541502224C5ECB002480B5 /* BaiduMapManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7541501224C5ECA002480B5 /* BaiduMapManager.swift */; };
 		A754150F224CACF9002480B5 /* SwiftSign.swift in Sources */ = {isa = PBXBuildFile; fileRef = A754150B224CACF9002480B5 /* SwiftSign.swift */; };
+		A7636AC52268139C00374F9E /* LocationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7636AC42268139C00374F9E /* LocationViewController.swift */; };
+		A7636AC822682BAF00374F9E /* LocationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7636AC722682BAF00374F9E /* LocationView.swift */; };
 		A76390EB2248E27A0067EEE0 /* UserNotifications.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A76390EA2248E27A0067EEE0 /* UserNotifications.framework */; };
 		A775CBFE2237493600EBDCF8 /* ShoppingMallNavigationBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A775CBFD2237493600EBDCF8 /* ShoppingMallNavigationBarView.swift */; };
 		A775CC00223774A300EBDCF8 /* ShoppingMallView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A775CBFF223774A300EBDCF8 /* ShoppingMallView.swift */; };
@@ -89,8 +95,6 @@
 		A7778C9822438F5D00C7C47A /* AlipaySDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7778C9022438F5C00C7C47A /* AlipaySDK.framework */; };
 		A7778C9922438F5D00C7C47A /* README.txt in Resources */ = {isa = PBXBuildFile; fileRef = A7778C9422438F5D00C7C47A /* README.txt */; };
 		A7778C9A22438F5D00C7C47A /* libWeChatSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A7778C9622438F5D00C7C47A /* libWeChatSDK.a */; };
-		A7778C9C2243934A00C7C47A /* MineModule.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A7778C9B2243934A00C7C47A /* MineModule.xcassets */; };
-		A7778CA4224393A900C7C47A /* CommonModule.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A7778CA3224393A900C7C47A /* CommonModule.xcassets */; };
 		A7778CA72243A05400C7C47A /* IQKeyboardManagerSwiftManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7778CA62243A05400C7C47A /* IQKeyboardManagerSwiftManager.swift */; };
 		A7778CA92244904500C7C47A /* Extension+Gifu.GIFImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7778CA82244904500C7C47A /* Extension+Gifu.GIFImageView.swift */; };
 		A7778CAB2244B12500C7C47A /* CountDownManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7778CAA2244B12500C7C47A /* CountDownManager.swift */; };
@@ -122,6 +126,10 @@
 		A7A97FDB2238FBAD0070F84D /* VerticalListCellModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7A97FD72238FBAC0070F84D /* VerticalListCellModel.swift */; };
 		A7A97FDC2238FBAD0070F84D /* VerticalListCellCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7A97FD82238FBAC0070F84D /* VerticalListCellCollectionViewCell.swift */; };
 		A7A97FDD2238FBAD0070F84D /* VerticalSectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7A97FD92238FBAD0070F84D /* VerticalSectionHeaderView.swift */; };
+		A7BB684F2268DCEC00AB07A2 /* SelfRecommendationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7BB684D2268DCEC00AB07A2 /* SelfRecommendationViewController.swift */; };
+		A7BB68552268DE8600AB07A2 /* SelfRecommendationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7BB68542268DE8600AB07A2 /* SelfRecommendationView.swift */; };
+		A7BB6857226965C100AB07A2 /* SelfRecommendationHeaderCollectionReusableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7BB6856226965C100AB07A2 /* SelfRecommendationHeaderCollectionReusableView.swift */; };
+		A7BB685922696B9200AB07A2 /* SelfRecommendationCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7BB685822696B9200AB07A2 /* SelfRecommendationCollectionViewCell.swift */; };
 		A7C3DD1A226422BF00FA262E /* SwiftMoyaServiceSMSApi.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7C3DD19226422BF00FA262E /* SwiftMoyaServiceSMSApi.swift */; };
 		A7C3DD1C226422D200FA262E /* SwiftMoyaNetWorkServiceSMS.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7C3DD1B226422D200FA262E /* SwiftMoyaNetWorkServiceSMS.swift */; };
 /* End PBXBuildFile section */
@@ -159,6 +167,12 @@
 		A7284A7222546460000BAEC4 /* SwiftMoyaServicePayApi.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftMoyaServicePayApi.swift; sourceTree = "<group>"; };
 		A7284A74225465DD000BAEC4 /* SwiftMoyaNetWorkServicePay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftMoyaNetWorkServicePay.swift; sourceTree = "<group>"; };
 		A7284A7622547333000BAEC4 /* AlipayResultModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AlipayResultModel.swift; sourceTree = "<group>"; };
+		A729B5A72266F2E0004AE098 /* AlertSheetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertSheetView.swift; sourceTree = "<group>"; };
+		A729B5A92266F6FD004AE098 /* Launch Screen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = "Launch Screen.storyboard"; sourceTree = "<group>"; };
+		A729B5AC2266FF45004AE098 /* BindPhoneNumberView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BindPhoneNumberView.swift; sourceTree = "<group>"; };
+		A729B5AF22671310004AE098 /* MobileLoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MobileLoginView.swift; sourceTree = "<group>"; };
+		A729B5B32267254B004AE098 /* PasswordLoginViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswordLoginViewController.swift; sourceTree = "<group>"; };
+		A729B5B62267270B004AE098 /* PasswordLoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswordLoginView.swift; sourceTree = "<group>"; };
 		A72A726022321D3400B21995 /* RainbowPlanet-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RainbowPlanet-Bridging-Header.h"; sourceTree = "<group>"; };
 		A72A726322321DBD00B21995 /* LocationModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LocationModel.swift; sourceTree = "<group>"; };
 		A72A726522321DBD00B21995 /* UMManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UMManager.swift; sourceTree = "<group>"; };
@@ -217,12 +231,12 @@
 		A738D201225AD6AD00EEE860 /* Extension+UICollectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Extension+UICollectionView.swift"; sourceTree = "<group>"; };
 		A738D204225AF90D00EEE860 /* WeChatpayOrderModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WeChatpayOrderModel.swift; sourceTree = "<group>"; };
 		A738D66E225D9BD900EEE860 /* UMLoginModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UMLoginModel.swift; sourceTree = "<group>"; };
-		A75414F5224B4C1B002480B5 /* VerificationPhoneViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VerificationPhoneViewController.swift; sourceTree = "<group>"; };
-		A75414F6224B4C1B002480B5 /* VerificationPhoneViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = VerificationPhoneViewController.xib; sourceTree = "<group>"; };
-		A75414FB224B5F28002480B5 /* PasswordLoginViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswordLoginViewController.swift; sourceTree = "<group>"; };
-		A75414FC224B5F28002480B5 /* PasswordLoginViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PasswordLoginViewController.xib; sourceTree = "<group>"; };
+		A73D7C672268A032002A4CE3 /* SwiftyStarRatingView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftyStarRatingView.swift; sourceTree = "<group>"; };
+		A75414FB224B5F28002480B5 /* MobileLoginViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MobileLoginViewController.swift; sourceTree = "<group>"; };
 		A7541501224C5ECA002480B5 /* BaiduMapManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaiduMapManager.swift; sourceTree = "<group>"; };
 		A754150B224CACF9002480B5 /* SwiftSign.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftSign.swift; sourceTree = "<group>"; };
+		A7636AC42268139C00374F9E /* LocationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationViewController.swift; sourceTree = "<group>"; };
+		A7636AC722682BAF00374F9E /* LocationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationView.swift; sourceTree = "<group>"; };
 		A76390EA2248E27A0067EEE0 /* UserNotifications.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UserNotifications.framework; path = System/Library/Frameworks/UserNotifications.framework; sourceTree = SDKROOT; };
 		A775CBFD2237493600EBDCF8 /* ShoppingMallNavigationBarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShoppingMallNavigationBarView.swift; sourceTree = "<group>"; };
 		A775CBFF223774A300EBDCF8 /* ShoppingMallView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShoppingMallView.swift; sourceTree = "<group>"; };
@@ -234,8 +248,6 @@
 		A7778C9422438F5D00C7C47A /* README.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.txt; sourceTree = "<group>"; };
 		A7778C9522438F5D00C7C47A /* WechatAuthSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WechatAuthSDK.h; sourceTree = "<group>"; };
 		A7778C9622438F5D00C7C47A /* libWeChatSDK.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libWeChatSDK.a; sourceTree = "<group>"; };
-		A7778C9B2243934A00C7C47A /* MineModule.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = MineModule.xcassets; sourceTree = "<group>"; };
-		A7778CA3224393A900C7C47A /* CommonModule.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = CommonModule.xcassets; sourceTree = "<group>"; };
 		A7778CA62243A05400C7C47A /* IQKeyboardManagerSwiftManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IQKeyboardManagerSwiftManager.swift; sourceTree = "<group>"; };
 		A7778CA82244904500C7C47A /* Extension+Gifu.GIFImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Extension+Gifu.GIFImageView.swift"; sourceTree = "<group>"; };
 		A7778CAA2244B12500C7C47A /* CountDownManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CountDownManager.swift; sourceTree = "<group>"; };
@@ -274,6 +286,10 @@
 		A7A97FD72238FBAC0070F84D /* VerticalListCellModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VerticalListCellModel.swift; sourceTree = "<group>"; };
 		A7A97FD82238FBAC0070F84D /* VerticalListCellCollectionViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VerticalListCellCollectionViewCell.swift; sourceTree = "<group>"; };
 		A7A97FD92238FBAD0070F84D /* VerticalSectionHeaderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VerticalSectionHeaderView.swift; sourceTree = "<group>"; };
+		A7BB684D2268DCEC00AB07A2 /* SelfRecommendationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelfRecommendationViewController.swift; sourceTree = "<group>"; };
+		A7BB68542268DE8600AB07A2 /* SelfRecommendationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelfRecommendationView.swift; sourceTree = "<group>"; };
+		A7BB6856226965C100AB07A2 /* SelfRecommendationHeaderCollectionReusableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelfRecommendationHeaderCollectionReusableView.swift; sourceTree = "<group>"; };
+		A7BB685822696B9200AB07A2 /* SelfRecommendationCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelfRecommendationCollectionViewCell.swift; sourceTree = "<group>"; };
 		A7C3DD19226422BF00FA262E /* SwiftMoyaServiceSMSApi.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftMoyaServiceSMSApi.swift; sourceTree = "<group>"; };
 		A7C3DD1B226422D200FA262E /* SwiftMoyaNetWorkServiceSMS.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftMoyaNetWorkServiceSMS.swift; sourceTree = "<group>"; };
 		A7E03A30F40582782EC5DA89 /* Pods_RainbowPlanetTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RainbowPlanetTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -384,71 +400,99 @@
 			path = SwiftMoyaNetWorkManager;
 			sourceTree = "<group>";
 		};
-		A7284A662253BE2E000BAEC4 /* Reactor */ = {
+		A7284A672253BE35000BAEC4 /* Reactor */ = {
 			isa = PBXGroup;
 			children = (
 			);
 			path = Reactor;
 			sourceTree = "<group>";
 		};
-		A7284A672253BE35000BAEC4 /* Reactor */ = {
+		A7284A682253BE3E000BAEC4 /* Reactor */ = {
 			isa = PBXGroup;
 			children = (
 			);
 			path = Reactor;
 			sourceTree = "<group>";
 		};
-		A7284A682253BE3E000BAEC4 /* Reactor */ = {
+		A7284A6B2253BE57000BAEC4 /* Reactor */ = {
 			isa = PBXGroup;
 			children = (
 			);
 			path = Reactor;
 			sourceTree = "<group>";
 		};
-		A7284A6A2253BE52000BAEC4 /* Reactor */ = {
+		A7284A7122546441000BAEC4 /* SwiftMoyaServicePay */ = {
 			isa = PBXGroup;
 			children = (
+				A7284A7222546460000BAEC4 /* SwiftMoyaServicePayApi.swift */,
+				A7284A74225465DD000BAEC4 /* SwiftMoyaNetWorkServicePay.swift */,
 			);
-			path = Reactor;
+			path = SwiftMoyaServicePay;
 			sourceTree = "<group>";
 		};
-		A7284A6B2253BE57000BAEC4 /* Reactor */ = {
+		A7284A782254A900000BAEC4 /* BaiduMapManager */ = {
 			isa = PBXGroup;
 			children = (
+				A7541501224C5ECA002480B5 /* BaiduMapManager.swift */,
+				A72A726322321DBD00B21995 /* LocationModel.swift */,
 			);
-			path = Reactor;
+			path = BaiduMapManager;
 			sourceTree = "<group>";
 		};
-		A7284A6C2253BE5C000BAEC4 /* Reactor */ = {
+		A729B5A52266DBC9004AE098 /* CommonModule */ = {
 			isa = PBXGroup;
 			children = (
 			);
-			path = Reactor;
+			path = CommonModule;
 			sourceTree = "<group>";
 		};
-		A7284A6D2253BE60000BAEC4 /* Reactor */ = {
+		A729B5A62266DBFA004AE098 /* AlertSheetView */ = {
 			isa = PBXGroup;
 			children = (
+				A729B5A72266F2E0004AE098 /* AlertSheetView.swift */,
 			);
-			path = Reactor;
+			path = AlertSheetView;
 			sourceTree = "<group>";
 		};
-		A7284A7122546441000BAEC4 /* SwiftMoyaServicePay */ = {
+		A729B5AB2266FF35004AE098 /* View */ = {
 			isa = PBXGroup;
 			children = (
-				A7284A7222546460000BAEC4 /* SwiftMoyaServicePayApi.swift */,
-				A7284A74225465DD000BAEC4 /* SwiftMoyaNetWorkServicePay.swift */,
+				A729B5AC2266FF45004AE098 /* BindPhoneNumberView.swift */,
 			);
-			path = SwiftMoyaServicePay;
+			path = View;
 			sourceTree = "<group>";
 		};
-		A7284A782254A900000BAEC4 /* BaiduMapManager */ = {
+		A729B5AE226712FF004AE098 /* View */ = {
 			isa = PBXGroup;
 			children = (
-				A7541501224C5ECA002480B5 /* BaiduMapManager.swift */,
-				A72A726322321DBD00B21995 /* LocationModel.swift */,
+				A729B5AF22671310004AE098 /* MobileLoginView.swift */,
 			);
-			path = BaiduMapManager;
+			path = View;
+			sourceTree = "<group>";
+		};
+		A729B5B122672401004AE098 /* PasswordLogin */ = {
+			isa = PBXGroup;
+			children = (
+				A729B5B52267269E004AE098 /* View */,
+				A729B5B222672523004AE098 /* ViewController */,
+			);
+			path = PasswordLogin;
+			sourceTree = "<group>";
+		};
+		A729B5B222672523004AE098 /* ViewController */ = {
+			isa = PBXGroup;
+			children = (
+				A729B5B32267254B004AE098 /* PasswordLoginViewController.swift */,
+			);
+			path = ViewController;
+			sourceTree = "<group>";
+		};
+		A729B5B52267269E004AE098 /* View */ = {
+			isa = PBXGroup;
+			children = (
+				A729B5B62267270B004AE098 /* PasswordLoginView.swift */,
+			);
+			path = View;
 			sourceTree = "<group>";
 		};
 		A72A7252223219BD00B21995 /* Service */ = {
@@ -679,48 +723,71 @@
 			path = Model;
 			sourceTree = "<group>";
 		};
-		A75414F1224B4B9D002480B5 /* VerificationPhone */ = {
+		A73D7C662268A032002A4CE3 /* SwiftyStarRatingView */ = {
 			isa = PBXGroup;
 			children = (
-				A7284A6C2253BE5C000BAEC4 /* Reactor */,
-				A75414F2224B4BE7002480B5 /* ViewController */,
+				A73D7C672268A032002A4CE3 /* SwiftyStarRatingView.swift */,
 			);
-			path = VerificationPhone;
+			path = SwiftyStarRatingView;
 			sourceTree = "<group>";
 		};
-		A75414F2224B4BE7002480B5 /* ViewController */ = {
+		A75414F9224B5EFC002480B5 /* MobileLogin */ = {
+			isa = PBXGroup;
+			children = (
+				A729B5AE226712FF004AE098 /* View */,
+				A75414FA224B5F17002480B5 /* ViewController */,
+			);
+			path = MobileLogin;
+			sourceTree = "<group>";
+		};
+		A75414FA224B5F17002480B5 /* ViewController */ = {
 			isa = PBXGroup;
 			children = (
-				A75414F5224B4C1B002480B5 /* VerificationPhoneViewController.swift */,
-				A75414F6224B4C1B002480B5 /* VerificationPhoneViewController.xib */,
+				A75414FB224B5F28002480B5 /* MobileLoginViewController.swift */,
 			);
 			path = ViewController;
 			sourceTree = "<group>";
 		};
-		A75414F9224B5EFC002480B5 /* PasswordLogin */ = {
+		A7541507224CACF9002480B5 /* SwiftSign */ = {
 			isa = PBXGroup;
 			children = (
-				A7284A6D2253BE60000BAEC4 /* Reactor */,
-				A75414FA224B5F17002480B5 /* ViewController */,
+				A754150B224CACF9002480B5 /* SwiftSign.swift */,
 			);
-			path = PasswordLogin;
+			path = SwiftSign;
 			sourceTree = "<group>";
 		};
-		A75414FA224B5F17002480B5 /* ViewController */ = {
+		A7636ABD2268123B00374F9E /* LocationModules */ = {
+			isa = PBXGroup;
+			children = (
+				A7BB68512268DCF800AB07A2 /* SelfRecommendation */,
+				A7636ABE2268125300374F9E /* Location */,
+			);
+			path = LocationModules;
+			sourceTree = "<group>";
+		};
+		A7636ABE2268125300374F9E /* Location */ = {
 			isa = PBXGroup;
 			children = (
-				A75414FB224B5F28002480B5 /* PasswordLoginViewController.swift */,
-				A75414FC224B5F28002480B5 /* PasswordLoginViewController.xib */,
+				A7636AC6226815BA00374F9E /* View */,
+				A7636ABF226812BD00374F9E /* ViewController */,
+			);
+			path = Location;
+			sourceTree = "<group>";
+		};
+		A7636ABF226812BD00374F9E /* ViewController */ = {
+			isa = PBXGroup;
+			children = (
+				A7636AC42268139C00374F9E /* LocationViewController.swift */,
 			);
 			path = ViewController;
 			sourceTree = "<group>";
 		};
-		A7541507224CACF9002480B5 /* SwiftSign */ = {
+		A7636AC6226815BA00374F9E /* View */ = {
 			isa = PBXGroup;
 			children = (
-				A754150B224CACF9002480B5 /* SwiftSign.swift */,
+				A7636AC722682BAF00374F9E /* LocationView.swift */,
 			);
-			path = SwiftSign;
+			path = View;
 			sourceTree = "<group>";
 		};
 		A775CBFC2237483E00EBDCF8 /* View */ = {
@@ -793,7 +860,7 @@
 		A7778CB52244E93E00C7C47A /* BindPhoneNumber */ = {
 			isa = PBXGroup;
 			children = (
-				A7284A6A2253BE52000BAEC4 /* Reactor */,
+				A729B5AB2266FF35004AE098 /* View */,
 				A7778CB62244E96700C7C47A /* ViewController */,
 			);
 			path = BindPhoneNumber;
@@ -966,10 +1033,11 @@
 			isa = PBXGroup;
 			children = (
 				A77F2CAE2232010F001BD3F6 /* RegisterLoginModule */,
+				A7636ABD2268123B00374F9E /* LocationModules */,
 				A77F2CA32232010F001BD3F6 /* ShoppingMallModule */,
-				A77F2CA82232010F001BD3F6 /* CommonModule */,
 				A77F2CAF2232010F001BD3F6 /* ShoppingCartModule */,
 				A77F2CA92232010F001BD3F6 /* MineModule */,
+				A729B5A52266DBC9004AE098 /* CommonModule */,
 			);
 			path = Modules;
 			sourceTree = "<group>";
@@ -1000,13 +1068,6 @@
 			path = ViewController;
 			sourceTree = "<group>";
 		};
-		A77F2CA82232010F001BD3F6 /* CommonModule */ = {
-			isa = PBXGroup;
-			children = (
-			);
-			path = CommonModule;
-			sourceTree = "<group>";
-		};
 		A77F2CA92232010F001BD3F6 /* MineModule */ = {
 			isa = PBXGroup;
 			children = (
@@ -1018,7 +1079,6 @@
 		A77F2CAA2232010F001BD3F6 /* Mine */ = {
 			isa = PBXGroup;
 			children = (
-				A7284A662253BE2E000BAEC4 /* Reactor */,
 				A77F2CAB2232010F001BD3F6 /* ViewController */,
 			);
 			path = Mine;
@@ -1036,11 +1096,11 @@
 		A77F2CAE2232010F001BD3F6 /* RegisterLoginModule */ = {
 			isa = PBXGroup;
 			children = (
-				A75414F9224B5EFC002480B5 /* PasswordLogin */,
-				A75414F1224B4B9D002480B5 /* VerificationPhone */,
-				A7778CC32246030200C7C47A /* PhoneCountryArea */,
-				A7778CB52244E93E00C7C47A /* BindPhoneNumber */,
 				A7778CAC2244BC2600C7C47A /* RegisterLogin */,
+				A7778CB52244E93E00C7C47A /* BindPhoneNumber */,
+				A75414F9224B5EFC002480B5 /* MobileLogin */,
+				A729B5B122672401004AE098 /* PasswordLogin */,
+				A7778CC32246030200C7C47A /* PhoneCountryArea */,
 			);
 			path = RegisterLoginModule;
 			sourceTree = "<group>";
@@ -1075,8 +1135,7 @@
 			isa = PBXGroup;
 			children = (
 				A77F2C672231FB4A001BD3F6 /* Assets.xcassets */,
-				A7778C9B2243934A00C7C47A /* MineModule.xcassets */,
-				A7778CA3224393A900C7C47A /* CommonModule.xcassets */,
+				A729B5A92266F6FD004AE098 /* Launch Screen.storyboard */,
 				A77F2C6C2231FB4A001BD3F6 /* Info.plist */,
 			);
 			path = "Supporting Files";
@@ -1085,6 +1144,8 @@
 		A77F2CBC2232022A001BD3F6 /* Tools */ = {
 			isa = PBXGroup;
 			children = (
+				A73D7C662268A032002A4CE3 /* SwiftyStarRatingView */,
+				A729B5A62266DBFA004AE098 /* AlertSheetView */,
 				A71D2A6222657D5900A55D16 /* MJRefreshEX */,
 				A72A727322321DDE00B21995 /* Log */,
 				A72A727D22321DDF00B21995 /* AppInfo */,
@@ -1111,6 +1172,33 @@
 			path = WRNavigationBar;
 			sourceTree = "<group>";
 		};
+		A7BB68512268DCF800AB07A2 /* SelfRecommendation */ = {
+			isa = PBXGroup;
+			children = (
+				A7BB68522268DE6400AB07A2 /* View */,
+				A7BB68532268DE7100AB07A2 /* ViewController */,
+			);
+			path = SelfRecommendation;
+			sourceTree = "<group>";
+		};
+		A7BB68522268DE6400AB07A2 /* View */ = {
+			isa = PBXGroup;
+			children = (
+				A7BB68542268DE8600AB07A2 /* SelfRecommendationView.swift */,
+				A7BB6856226965C100AB07A2 /* SelfRecommendationHeaderCollectionReusableView.swift */,
+				A7BB685822696B9200AB07A2 /* SelfRecommendationCollectionViewCell.swift */,
+			);
+			path = View;
+			sourceTree = "<group>";
+		};
+		A7BB68532268DE7100AB07A2 /* ViewController */ = {
+			isa = PBXGroup;
+			children = (
+				A7BB684D2268DCEC00AB07A2 /* SelfRecommendationViewController.swift */,
+			);
+			path = ViewController;
+			sourceTree = "<group>";
+		};
 		A7C3DD182264229900FA262E /* SwiftMoyaServiceSMS */ = {
 			isa = PBXGroup;
 			children = (
@@ -1264,12 +1352,9 @@
 				A77F2CB82232010F001BD3F6 /* ShoppingCartViewController.xib in Resources */,
 				A77F2CB62232010F001BD3F6 /* MineViewController.xib in Resources */,
 				A7778C9722438F5D00C7C47A /* AlipaySDK.bundle in Resources */,
-				A75414F8224B4C1B002480B5 /* VerificationPhoneViewController.xib in Resources */,
-				A7778CA4224393A900C7C47A /* CommonModule.xcassets in Resources */,
 				A77F2C682231FB4A001BD3F6 /* Assets.xcassets in Resources */,
-				A7778C9C2243934A00C7C47A /* MineModule.xcassets in Resources */,
 				A7778C9922438F5D00C7C47A /* README.txt in Resources */,
-				A75414FE224B5F28002480B5 /* PasswordLoginViewController.xib in Resources */,
+				A729B5AA2266F6FD004AE098 /* Launch Screen.storyboard in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -1299,6 +1384,7 @@
 			);
 			inputPaths = (
 				"${PODS_ROOT}/Target Support Files/Pods-RainbowPlanet/Pods-RainbowPlanet-resources.sh",
+				"${PODS_ROOT}/BaiduMapKit/BaiduMapKit/BaiduMapAPI_Map.framework/mapapi.bundle",
 				"${PODS_ROOT}/UMCCommonLog/UMCommonLog/UMCommonLog.bundle",
 				"${PODS_ROOT}/UMCShare/UMShare/UMSocialUI/UMSocialSDKResources.bundle",
 			);
@@ -1306,6 +1392,7 @@
 			outputFileListPaths = (
 			);
 			outputPaths = (
+				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/mapapi.bundle",
 				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/UMCommonLog.bundle",
 				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/UMSocialSDKResources.bundle",
 			);
@@ -1326,7 +1413,6 @@
 				"${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework",
 				"${BUILT_PRODUCTS_DIR}/Cache/Cache.framework",
 				"${BUILT_PRODUCTS_DIR}/DeviceKit/DeviceKit.framework",
-				"${BUILT_PRODUCTS_DIR}/FBRetainCycleDetector/FBRetainCycleDetector.framework",
 				"${BUILT_PRODUCTS_DIR}/FSPagerView/FSPagerView.framework",
 				"${BUILT_PRODUCTS_DIR}/FWPopupView/FWPopupView.framework",
 				"${BUILT_PRODUCTS_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework",
@@ -1336,7 +1422,6 @@
 				"${BUILT_PRODUCTS_DIR}/LYEmptyView/LYEmptyView.framework",
 				"${BUILT_PRODUCTS_DIR}/MBProgressHUD/MBProgressHUD.framework",
 				"${BUILT_PRODUCTS_DIR}/MJRefresh/MJRefresh.framework",
-				"${BUILT_PRODUCTS_DIR}/MLeaksFinder/MLeaksFinder.framework",
 				"${BUILT_PRODUCTS_DIR}/Moya/Moya.framework",
 				"${BUILT_PRODUCTS_DIR}/MoyaMapper/MoyaMapper.framework",
 				"${BUILT_PRODUCTS_DIR}/ObjectMapper/ObjectMapper.framework",
@@ -1346,7 +1431,7 @@
 				"${BUILT_PRODUCTS_DIR}/RxSwift/RxSwift.framework",
 				"${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework",
 				"${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework",
-				"${BUILT_PRODUCTS_DIR}/SwiftyStarRatingView/SwiftyStarRatingView.framework",
+				"${BUILT_PRODUCTS_DIR}/TangramKit/TangramKit.framework",
 			);
 			name = "[CP] Embed Pods Frameworks";
 			outputFileListPaths = (
@@ -1355,7 +1440,6 @@
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Cache.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DeviceKit.framework",
-				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBRetainCycleDetector.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FSPagerView.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FWPopupView.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/IQKeyboardManagerSwift.framework",
@@ -1365,7 +1449,6 @@
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/LYEmptyView.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MBProgressHUD.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MJRefresh.framework",
-				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MLeaksFinder.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Moya.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MoyaMapper.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ObjectMapper.framework",
@@ -1375,7 +1458,7 @@
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxSwift.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework",
 				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyJSON.framework",
-				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyStarRatingView.framework",
+				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/TangramKit.framework",
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
@@ -1419,25 +1502,31 @@
 				A77F2C9E2231FDDC001BD3F6 /* BaseViewController.swift in Sources */,
 				A7284A75225465DD000BAEC4 /* SwiftMoyaNetWorkServicePay.swift in Sources */,
 				A77F2CC722320627001BD3F6 /* WRNavigationBar.swift in Sources */,
+				A7BB684F2268DCEC00AB07A2 /* SelfRecommendationViewController.swift in Sources */,
 				A72A72BE22321DE000B21995 /* Extension+RxTimer.swift in Sources */,
 				A72A72C422321DE000B21995 /* Extension+CAGradientLayer.swift in Sources */,
 				A7778CA72243A05400C7C47A /* IQKeyboardManagerSwiftManager.swift in Sources */,
 				A72A72B722321DE000B21995 /* Extension+NSMutableAttributedString.swift in Sources */,
+				A7BB6857226965C100AB07A2 /* SelfRecommendationHeaderCollectionReusableView.swift in Sources */,
 				A7284A7322546460000BAEC4 /* SwiftMoyaServicePayApi.swift in Sources */,
 				A7284404224DBFBD00F82F30 /* LoginModel.swift in Sources */,
 				A71D2A602265673A00A55D16 /* RegisterLoginView.swift in Sources */,
+				A73D7C682268A032002A4CE3 /* SwiftyStarRatingView.swift in Sources */,
+				A7636AC52268139C00374F9E /* LocationViewController.swift in Sources */,
 				A7C3DD1C226422D200FA262E /* SwiftMoyaNetWorkServiceSMS.swift in Sources */,
 				A7A97FDC2238FBAD0070F84D /* VerticalListCellCollectionViewCell.swift in Sources */,
 				A72A7386223396CB00B21995 /* SwiftMoyaNetWorkManager.swift in Sources */,
 				A77F2CCA223209F2001BD3F6 /* BaseTabbarViewController.swift in Sources */,
+				A729B5B022671310004AE098 /* MobileLoginView.swift in Sources */,
 				A72A726822321DBD00B21995 /* UMManager.swift in Sources */,
+				A729B5AD2266FF45004AE098 /* BindPhoneNumberView.swift in Sources */,
 				A77F2CB92232010F001BD3F6 /* ShoppingCartViewController.swift in Sources */,
 				A72A72B822321DE000B21995 /* Extension+UserDefaults.swift in Sources */,
+				A729B5B72267270B004AE098 /* PasswordLoginView.swift in Sources */,
 				A7778CB82244E97A00C7C47A /* BindPhoneNumberViewController.swift in Sources */,
 				A754150F224CACF9002480B5 /* SwiftSign.swift in Sources */,
 				A72A72D322321E2700B21995 /* CacheMacro.swift in Sources */,
 				A77F2CB52232010F001BD3F6 /* ShoppingMallViewController.swift in Sources */,
-				A75414F7224B4C1B002480B5 /* VerificationPhoneViewController.swift in Sources */,
 				A77F2CC3223203BA001BD3F6 /* AppDelegate+Window.swift in Sources */,
 				A70EBBC022561179000AD74F /* Extension+UITableView.swift in Sources */,
 				A72A72B022321DE000B21995 /* CGView.swift in Sources */,
@@ -1451,6 +1540,7 @@
 				A7C3DD1A226422BF00FA262E /* SwiftMoyaServiceSMSApi.swift in Sources */,
 				A7284A7722547333000BAEC4 /* AlipayResultModel.swift in Sources */,
 				A72A72B422321DE000B21995 /* Extension+UIImage.swift in Sources */,
+				A7BB68552268DE8600AB07A2 /* SelfRecommendationView.swift in Sources */,
 				A72A72AF22321DE000B21995 /* AppInfo.swift in Sources */,
 				A72A72D422321E2700B21995 /* EnumMacro.swift in Sources */,
 				A7778CDF22461BAD00C7C47A /* PhoneCountryAreaSectionHeaderView.swift in Sources */,
@@ -1458,7 +1548,7 @@
 				A72A72A922321DE000B21995 /* NumberKeyboard.swift in Sources */,
 				A72A72AA22321DE000B21995 /* Log.swift in Sources */,
 				A72A72B622321DE000B21995 /* Extension+NSRange.swift in Sources */,
-				A75414FD224B5F28002480B5 /* PasswordLoginViewController.swift in Sources */,
+				A75414FD224B5F28002480B5 /* MobileLoginViewController.swift in Sources */,
 				A72A72AE22321DE000B21995 /* CountdownButton.swift in Sources */,
 				A77F2CB72232010F001BD3F6 /* MineViewController.swift in Sources */,
 				A7778CA92244904500C7C47A /* Extension+Gifu.GIFImageView.swift in Sources */,
@@ -1466,6 +1556,8 @@
 				A7778CB32244D73400C7C47A /* RegisterLoginViewController.swift in Sources */,
 				A7A97FDB2238FBAD0070F84D /* VerticalListCellModel.swift in Sources */,
 				A71D2A6522657D5900A55D16 /* UIScrollView+MJRefreshEX.m in Sources */,
+				A7BB685922696B9200AB07A2 /* SelfRecommendationCollectionViewCell.swift in Sources */,
+				A7636AC822682BAF00374F9E /* LocationView.swift in Sources */,
 				A738D205225AF90D00EEE860 /* WeChatpayOrderModel.swift in Sources */,
 				A72A72BD22321DE000B21995 /* Extension+UIColor.swift in Sources */,
 				A77F2CC822320627001BD3F6 /* WRCustomNavigationBar.swift in Sources */,
@@ -1485,7 +1577,9 @@
 				A77F2C982231FD25001BD3F6 /* BaseNavigationViewController.swift in Sources */,
 				A72A72AB22321DE000B21995 /* SwiftProgressHUD.swift in Sources */,
 				A7778CD522460D8E00C7C47A /* PhoneCountryAreaTableViewCell.swift in Sources */,
+				A729B5B42267254B004AE098 /* PasswordLoginViewController.swift in Sources */,
 				A77F2C612231FB49001BD3F6 /* AppDelegate.swift in Sources */,
+				A729B5A82266F2E0004AE098 /* AlertSheetView.swift in Sources */,
 				A738D66F225D9BD900EEE860 /* UMLoginModel.swift in Sources */,
 				A72A726722321DBD00B21995 /* LocationModel.swift in Sources */,
 				A72A72D222321E2700B21995 /* Common.swift in Sources */,
@@ -1658,7 +1752,6 @@
 			baseConfigurationReference = BD9052C044FD3AE4E62D3929 /* Pods-RainbowPlanet.debug.xcconfig */;
 			buildSettings = {
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
-				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
 				CLANG_ENABLE_MODULES = YES;
 				CODE_SIGN_ENTITLEMENTS = RainbowPlanet/RainbowPlanet.entitlements;
 				CODE_SIGN_STYLE = Automatic;
@@ -1709,8 +1802,6 @@
 					"-framework",
 					"\"DeviceKit\"",
 					"-framework",
-					"\"FBRetainCycleDetector\"",
-					"-framework",
 					"\"Foundation\"",
 					"-framework",
 					"\"IQKeyboardManagerSwift\"",
@@ -1721,8 +1812,6 @@
 					"-framework",
 					"\"MJRefresh\"",
 					"-framework",
-					"\"MLeaksFinder\"",
-					"-framework",
 					"\"Moya\"",
 					"-framework",
 					"\"ObjectMapper\"",
@@ -1770,7 +1859,7 @@
 				SWIFT_OBJC_BRIDGING_HEADER = "RainbowPlanet/Macro/RainbowPlanet-Bridging-Header.h";
 				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
 				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
+				TARGETED_DEVICE_FAMILY = 1;
 			};
 			name = Debug;
 		};
@@ -1779,7 +1868,6 @@
 			baseConfigurationReference = 57C497E128081597F165C771 /* Pods-RainbowPlanet.release.xcconfig */;
 			buildSettings = {
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
-				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
 				CLANG_ENABLE_MODULES = YES;
 				CODE_SIGN_ENTITLEMENTS = RainbowPlanet/RainbowPlanet.entitlements;
 				CODE_SIGN_STYLE = Automatic;
@@ -1830,8 +1918,6 @@
 					"-framework",
 					"\"DeviceKit\"",
 					"-framework",
-					"\"FBRetainCycleDetector\"",
-					"-framework",
 					"\"Foundation\"",
 					"-framework",
 					"\"IQKeyboardManagerSwift\"",
@@ -1842,8 +1928,6 @@
 					"-framework",
 					"\"MJRefresh\"",
 					"-framework",
-					"\"MLeaksFinder\"",
-					"-framework",
 					"\"Moya\"",
 					"-framework",
 					"\"ObjectMapper\"",
@@ -1890,7 +1974,7 @@
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SWIFT_OBJC_BRIDGING_HEADER = "RainbowPlanet/Macro/RainbowPlanet-Bridging-Header.h";
 				SWIFT_VERSION = 5.0;
-				TARGETED_DEVICE_FAMILY = "1,2";
+				TARGETED_DEVICE_FAMILY = 1;
 			};
 			name = Release;
 		};

+ 6 - 4
RainbowPlanet/RainbowPlanet/AppDelegate/AppDelegate+Window.swift

@@ -34,9 +34,10 @@ extension AppDelegate {
         /// 引导页
         setGuidePageView()
 
-        /// 刷新token
-        SwiftMoyaNetWorkServiceUser.shared().userRefreshApi {_ in }
-
+        if (LoginModel.shared().getLoginModel()?.token) != nil  {
+            /// 刷新token
+            SwiftMoyaNetWorkServiceUser.shared().userRefreshApi {_ in }
+        }
     }
     
     /// 设置Tabbar
@@ -46,7 +47,8 @@ extension AppDelegate {
 
     /// 设置Login
     func setLoginController() {
-        self.window?.rootViewController = RegisterLoginViewController()
+
+        self.window?.rootViewController = BaseNavigationViewController.init(rootViewController: RegisterLoginViewController())
     }
 
      /// 设置全局的navigation

+ 5 - 5
RainbowPlanet/RainbowPlanet/Base/BaseTabbarViewController/BaseTabbarViewController.swift

@@ -32,9 +32,9 @@ class BaseTabbarViewController: UITabBarController {
         let n2 = BaseNavigationViewController.init(rootViewController: v2)
         let n3 = BaseNavigationViewController.init(rootViewController: v3)
 
-        tabBarItemStyle(navc: n1, normalImg: "tab_home_icon_normal", selectorImg: "tab_home_icon_selected", title: "首页")
-        tabBarItemStyle(navc: n2, normalImg: "tab_shopping_icon_normal", selectorImg: "tab_shopping_icon_selected", title: "逛街")
-        tabBarItemStyle(navc: n3, normalImg: "tab_me_icon_normal", selectorImg: "tab_me_icon_selected", title: "我的")
+        tabBarItemStyle(navc: n1, normalImg: "tabbar_home", selectorImg: "tabbar_home_pre", title: "首页")
+        tabBarItemStyle(navc: n2, normalImg: "tabbar_shopping", selectorImg: "tabbar_shopping_pre", title: "购物车")
+        tabBarItemStyle(navc: n3, normalImg: "tabbar_my", selectorImg: "tabbar_my_pre", title: "我的彩虹")
 
         tabBarViewController.viewControllers = [n1, n2, n3]
         return tabBarViewController
@@ -43,8 +43,8 @@ class BaseTabbarViewController: UITabBarController {
 
     private func tabBarItemStyle(navc : UINavigationController, normalImg : String, selectorImg : String, title : String){
         navc.tabBarItem = UITabBarItem.init(title: title, image: UIImage(named:normalImg), selectedImage: UIImage(named:selectorImg))
-        navc.tabBarItem.setTitleTextAttributes([NSAttributedString.Key.foregroundColor:UIColor.gray], for: UIControl.State.normal)
-        navc.tabBarItem.setTitleTextAttributes([NSAttributedString.Key.foregroundColor:UIColor.blue], for: UIControl.State.selected)
+        navc.tabBarItem.setTitleTextAttributes([NSAttributedString.Key.foregroundColor:k333333Color], for: UIControl.State.normal)
+        navc.tabBarItem.setTitleTextAttributes([NSAttributedString.Key.foregroundColor:k333333Color], for: UIControl.State.selected)
 
     }
 

+ 8 - 6
RainbowPlanet/RainbowPlanet/Base/BaseViewController/BaseViewController.swift

@@ -34,26 +34,28 @@ class BaseViewController: UIViewController {
     {
         navigationBar.wr_setBottomLineHidden(hidden: true)
         navigationBar.barBackgroundColor = UIColor.white
-        navigationBar.titleLabelColor = UIColor.blue
+        navigationBar.titleLabelColor = k333333Color
         view.addSubview(navigationBar)
 
         if self.navigationController != nil {
             if self.navigationController?.viewControllers.count == 1 {
                 if self.navigationController?.presentingViewController != nil {
-                    setLeftButton(image: UIImage(named: "navigaitionbar_back_black")! )
+                    setLeftButton(image: UIImage(named: "navbar_back_black")! )
                 }
             } else {
-                setLeftButton(image: UIImage(named: "navigaitionbar_back_black")!)
+                setLeftButton(image: UIImage(named: "navbar_back_black")!)
             }
         } else {
-            setLeftButton(image: UIImage(named: "navigaitionbar_back_black")!)
+            setLeftButton(image: UIImage(named: "navbar_back_black")!)
         }
     }
 
     private func setLeftButton(image:UIImage) {
         navigationBar.wr_setLeftButton(image: image)
-        navigationBar.onClickLeftButton = { [weak self] in
-            self?.wr_toLastViewController(animated: true)
+        navigationBar.onClickLeftButton = {
+            [weak self] in
+            guard let strongSelf = self else { return }
+            strongSelf.wr_toLastViewController(animated: true)
         }
     }
 

+ 13 - 1
RainbowPlanet/RainbowPlanet/Macro/ColorMacro.swift

@@ -18,12 +18,14 @@ let kDisabledButtonColor = UIColor(hexString: "#E6E6E6")
 
 let kDisabledTitleColor = UIColor(hexString: "#666666")
 
-let kEnabledButtonColor = UIColor(hexString: "#32B24F")
+let kEnabledButtonColor = UIColor(hexString: "#FFA42F")
 
 let kEnabledTitleColor = UIColor(hexString: "#FFFFFF")
 
 let k333333Color = UIColor(hexString: "333333")
 
+let kFE352BColor = UIColor(hexString: "FE352B")
+
 let k666666Color = UIColor(hexString: "666666")
 
 let k999999Color = UIColor(hexString: "999999")
@@ -50,14 +52,20 @@ let kff8400Color = UIColor(hexString: "ff8400")
 
 let kff481bColor = UIColor(hexString: "ff481b")
 
+let kffb04AColor = UIColor(hexString: "ffb04A")
+
 let kffeae5Color = UIColor(hexString: "ffeae5")
 
 let kf82323Color = UIColor(hexString: "f82323")
 
+let kF7F8FAColor = UIColor(hexString: "F7F8FA")
+
 let kf1f1f1Color = UIColor(hexString: "f1f1f1")
 
 let kf7f7f9Color = UIColor(hexString: "f7f7f9")
 
+let kf7f7faColor = UIColor(hexString: "f7f7fa")
+
 let kf2f2f2Color = UIColor(hexString: "f2f2f2")
 
 let kf3f3f3Color = UIColor(hexString: "f3f3f3")
@@ -72,4 +80,8 @@ let kffa500Color = UIColor(hexString: "ffa500")
 
 let kff724fColor = UIColor(hexString: "ff724f")
 
+let kFFA42FColor = UIColor(hexString: "FFA42F")
+
 let kbfbfbfColor = UIColor(hexString: "bfbfbf")
+
+let k1C2443Color = UIColor(hexString: "1C2443")

+ 42 - 31
RainbowPlanet/RainbowPlanet/Macro/FontMacro.swift

@@ -48,34 +48,45 @@ let kRegularFont16 = UIFont(name: "PingFang-SC-Regular", size: 16)
 let kRegularFont17 = UIFont(name: "PingFang-SC-Regular", size: 17)
 let kRegularFont18 = UIFont(name: "PingFang-SC-Regular", size: 18)
 
-let kDINMEDIUMFont10 = UIFont(name: "DIN-MEDIUM", size: 10)
-let kDINMEDIUMFont11 = UIFont(name: "DIN-MEDIUM", size: 11)
-let kDINMEDIUMFont12 = UIFont(name: "DIN-MEDIUM", size: 12)
-let kDINMEDIUMFont13 = UIFont(name: "DIN-MEDIUM", size: 13)
-let kDINMEDIUMFont14 = UIFont(name: "DIN-MEDIUM", size: 14)
-let kDINMEDIUMFont15 = UIFont(name: "DIN-MEDIUM", size: 15)
-let kDINMEDIUMFont16 = UIFont(name: "DIN-MEDIUM", size: 16)
-let kDINMEDIUMFont17 = UIFont(name: "DIN-MEDIUM", size: 17)
-let kDINMEDIUMFont18 = UIFont(name: "DIN-MEDIUM", size: 18)
-let kDINMEDIUMFont19 = UIFont(name: "DIN-MEDIUM", size: 19)
-let kDINMEDIUMFont20 = UIFont(name: "DIN-MEDIUM", size: 20)
-let kDINMEDIUMFont21 = UIFont(name: "DIN-MEDIUM", size: 21)
-let kDINMEDIUMFont22 = UIFont(name: "DIN-MEDIUM", size: 22)
-let kDINMEDIUMFont23 = UIFont(name: "DIN-MEDIUM", size: 23)
-let kDINMEDIUMFont24 = UIFont(name: "DIN-MEDIUM", size: 24)
-let kDINMEDIUMFont25 = UIFont(name: "DIN-MEDIUM", size: 25)
-let kDINMEDIUMFont26 = UIFont(name: "DIN-MEDIUM", size: 26)
-let kDINMEDIUMFont27 = UIFont(name: "DIN-MEDIUM", size: 27)
-let kDINMEDIUMFont28 = UIFont(name: "DIN-MEDIUM", size: 28)
-let kDINMEDIUMFont29 = UIFont(name: "DIN-MEDIUM", size: 29)
-let kDINMEDIUMFont30 = UIFont(name: "DIN-MEDIUM", size: 30)
-let kDINMEDIUMFont31 = UIFont(name: "DIN-MEDIUM", size: 31)
-let kDINMEDIUMFont32 = UIFont(name: "DIN-MEDIUM", size: 32)
-let kDINMEDIUMFont33 = UIFont(name: "DIN-MEDIUM", size: 33)
-let kDINMEDIUMFont34 = UIFont(name: "DIN-MEDIUM", size: 34)
-let kDINMEDIUMFont35 = UIFont(name: "DIN-MEDIUM", size: 35)
-let kDINMEDIUMFont36 = UIFont(name: "DIN-MEDIUM", size: 36)
-let kDINMEDIUMFont37 = UIFont(name: "DIN-MEDIUM", size: 37)
-let kDINMEDIUMFont38 = UIFont(name: "DIN-MEDIUM", size: 38)
-let kDINMEDIUMFont39 = UIFont(name: "DIN-MEDIUM", size: 39)
-let kDINMEDIUMFont40 = UIFont(name: "DIN-MEDIUM", size: 40)
+
+let kScaleBoldFont10 = UIFont.boldSystemFont(ofSize: kScaleValue(value: 10))
+let kScaleBoldFont11 = UIFont.boldSystemFont(ofSize: kScaleValue(value: 11))
+let kScaleBoldFont12 = UIFont.boldSystemFont(ofSize: kScaleValue(value: 12))
+let kScaleBoldFont13 = UIFont.boldSystemFont(ofSize: kScaleValue(value: 13))
+let kScaleBoldFont14 = UIFont.boldSystemFont(ofSize: kScaleValue(value: 14))
+let kScaleBoldFont15 = UIFont.boldSystemFont(ofSize: kScaleValue(value: 15))
+let kScaleBoldFont16 = UIFont.boldSystemFont(ofSize: kScaleValue(value: 16))
+let kScaleBoldFont17 = UIFont.boldSystemFont(ofSize: kScaleValue(value: 17))
+let kScaleBoldFont18 = UIFont.boldSystemFont(ofSize: kScaleValue(value: 18))
+let kScaleBoldFont19 = UIFont.boldSystemFont(ofSize: kScaleValue(value: 19))
+let kScaleBoldFont20 = UIFont.boldSystemFont(ofSize: kScaleValue(value: 20))
+let kScaleBoldFont21 = UIFont.boldSystemFont(ofSize: kScaleValue(value: 21))
+let kScaleBoldFont22 = UIFont.boldSystemFont(ofSize: kScaleValue(value: 22))
+let kScaleBoldFont30 = UIFont.boldSystemFont(ofSize: kScaleValue(value: 30))
+let kScaleBoldFont36 = UIFont.boldSystemFont(ofSize: kScaleValue(value: 36))
+let kScaleBoldFont40 = UIFont.boldSystemFont(ofSize: kScaleValue(value: 40))
+
+let kScaleMediumFont10 = UIFont(name: "PingFang-SC-Medium", size: kScaleValue(value: 10))
+let kScaleMediumFont11 = UIFont(name: "PingFang-SC-Medium", size: kScaleValue(value: 11))
+let kScaleMediumFont12 = UIFont(name: "PingFang-SC-Medium", size: kScaleValue(value: 12))
+let kScaleMediumFont13 = UIFont(name: "PingFang-SC-Medium", size: kScaleValue(value: 13))
+let kScaleMediumFont14 = UIFont(name: "PingFang-SC-Medium", size: kScaleValue(value: 14))
+let kScaleMediumFont15 = UIFont(name: "PingFang-SC-Medium", size: kScaleValue(value: 15))
+let kScaleMediumFont16 = UIFont(name: "PingFang-SC-Medium", size: kScaleValue(value: 16))
+let kScaleMediumFont17 = UIFont(name: "PingFang-SC-Medium", size: kScaleValue(value: 17))
+let kScaleMediumFont18 = UIFont(name: "PingFang-SC-Medium", size: kScaleValue(value: 18))
+let kScaleMediumFont20 = UIFont(name: "PingFang-SC-Medium", size: kScaleValue(value: 20))
+let kScaleMediumFont24 = UIFont(name: "PingFang-SC-Medium", size: kScaleValue(value: 24))
+let kScaleMediumFont25 = UIFont(name: "PingFang-SC-Medium", size: kScaleValue(value: 25))
+let kScaleMediumFont27 = UIFont(name: "PingFang-SC-Medium", size: kScaleValue(value: 27))
+let kScaleMediumFont30 = UIFont(name: "PingFang-SC-Medium", size: kScaleValue(value: 30))
+let kScaleMediumFont35 = UIFont(name: "PingFang-SC-Medium", size: kScaleValue(value: 35))
+
+let kScaleRegularFont12 = UIFont(name: "PingFang-SC-Regular", size: kScaleValue(value: 12))
+let kScaleRegularFont13 = UIFont(name: "PingFang-SC-Regular", size: kScaleValue(value: 13))
+let kScaleRegularFont14 = UIFont(name: "PingFang-SC-Regular", size: kScaleValue(value: 14))
+let kScaleRegularFont15 = UIFont(name: "PingFang-SC-Regular", size: kScaleValue(value: 15))
+let kScaleRegularFont16 = UIFont(name: "PingFang-SC-Regular", size: kScaleValue(value: 16))
+let kScaleRegularFont17 = UIFont(name: "PingFang-SC-Regular", size: kScaleValue(value: 17))
+let kScaleRegularFont18 = UIFont(name: "PingFang-SC-Regular", size: kScaleValue(value: 18))
+let kScaleRegularFont19 = UIFont(name: "PingFang-SC-Regular", size: kScaleValue(value: 19))

+ 90 - 48
RainbowPlanet/RainbowPlanet/Manager/MapManager/BaiduMapManager/BaiduMapManager.swift

@@ -18,68 +18,60 @@ public class BaiduMapManager: NSObject {
         return _sharedInstance
     }
 
-    typealias LocationModelBlock = (_ locationModel: LocationModel) -> Void
+    var locationModel = LocationModel.shared()
+
+    typealias LocationSuccessBlock = () -> Void
+
+    var  locationSuccessBlock : LocationSuccessBlock?
+
+    typealias LocationFalseBlock = () -> Void
+
+    var  locationFalseBlock : LocationFalseBlock?
 
-    var locationModel = LocationModel.shared().getLocationModel()
 
     public func initBaiduMap() -> Void {
         BMKLocationAuth.sharedInstance()?.checkPermision(withKey: kBaiduMapAppKey, authDelegate: self)
-        initLocation()
     }
 
-    /// 单次定位
-    func initLocation() {
-        locationManager.requestLocation(withReGeocode: true, withNetworkState: true) { [weak self] location, state, error in
-            if (error != nil) {
-                LocationModel.shared().setLocationModel(locationModel: (self?.locationModel!)!)
-                return
-            } else {
-                if let location = location {
-                    if let location = location.location {
-                        self?.locationModel?.latitude = String(describing: location.coordinate.latitude)
-                        self?.locationModel?.longitude = String(describing: location.coordinate.longitude)
-                    }
-                    if let rgcData = location.rgcData {
-                        self?.locationModel?.cityCode = rgcData.cityCode ?? ""
-                        self?.locationModel?.province = rgcData.province ?? ""
-                        self?.locationModel?.city = rgcData.city ?? ""
-                        self?.locationModel?.district = rgcData.district ?? ""
-                        self?.locationModel?.street = rgcData.street ?? ""
-                        self?.locationModel?.locationdescribe = rgcData.locationDescribe ?? ""
-                    }
-                    LocationModel.shared().setLocationModel(locationModel: (self?.locationModel!)!)
-                }
+    /// 开始定位
+    func startLocation() {
+        initLocation(locationSuccessBlock: {
+            if let locationSuccessBlock = self.locationSuccessBlock {
+                locationSuccessBlock()
             }
-            self?.locationModel = LocationModel.shared().getLocationModel()
-        }
+        }, locationFalseBlock: {
+            if let locationFalseBlock = self.locationFalseBlock {
+                locationFalseBlock()
+            }
+        })
     }
 
     /// 单次定位
-    func initLocation(locationModelBlock:@escaping LocationModelBlock) -> Void {
-
+    func initLocation(locationSuccessBlock:@escaping LocationSuccessBlock,locationFalseBlock:@escaping LocationFalseBlock) -> Void {
+        
         locationManager.requestLocation(withReGeocode: true, withNetworkState: true) { [weak self] location, state, error in
             if (error != nil) {
-                LocationModel.shared().setLocationModel(locationModel:(self?.locationModel!)!)
+                locationFalseBlock()
                 return
             } else {
                 if let location = location {
                     if let location = location.location {
-                        self?.locationModel?.latitude = String(describing: location.coordinate.latitude)
-                        self?.locationModel?.longitude = String(describing: location.coordinate.longitude)
+                        self?.locationModel.latitude = String(describing: location.coordinate.latitude)
+                        self?.locationModel.longitude = String(describing: location.coordinate.longitude)
                     }
                     if let rgcData = location.rgcData {
-                        self?.locationModel?.cityCode = rgcData.cityCode ?? ""
-                        self?.locationModel?.province = rgcData.province ?? ""
-                        self?.locationModel?.city = rgcData.city ?? ""
-                        self?.locationModel?.district = rgcData.district ?? ""
-                        self?.locationModel?.street = rgcData.street ?? ""
-                        self?.locationModel?.locationdescribe = rgcData.locationDescribe ?? ""
+                        self?.locationModel.cityCode = rgcData.cityCode ?? ""
+                        self?.locationModel.province = rgcData.province ?? ""
+                        self?.locationModel.city = rgcData.city ?? ""
+                        self?.locationModel.district = rgcData.district ?? ""
+                        self?.locationModel.street = rgcData.street ?? ""
+                        self?.locationModel.locationdescribe = rgcData.locationDescribe ?? ""
                     }
-                    LocationModel.shared().setLocationModel(locationModel:  (self?.locationModel!)!)
+                    LocationModel.shared().setLocationModel(locationModel:  (self?.locationModel)!)
+                    NXLLog(LocationModel.shared().getLocationModel())
+                    locationSuccessBlock()
                 }
             }
-            self?.locationModel = LocationModel.shared().getLocationModel()
-            locationModelBlock((self?.locationModel!)!)
         }
     }
 
@@ -106,6 +98,41 @@ public class BaiduMapManager: NSObject {
         return locationManager
     }()
 
+    func loacationAlertView() {
+        AlertSheetView.alert(title: "定位服务未开启", detailTitle: "请进入系统设置「设置」「隐私」「定位服务」中打开开关,并允许彩虹星球使用定位服务", cancelTitle: "取消", sureTitle: "立即开启", cancelBlock: { (popupView, Int, string) in
+            if let locationFalseBlock = self.locationFalseBlock {
+                locationFalseBlock()
+            }
+        }, confirmBlock: { (popupView, Int, string) in
+
+            if #available(iOS 10.0, *) {
+
+                let url = URL(string: UIApplication.openSettingsURLString)
+                if let url = url {
+                    if UIApplication.shared.canOpenURL(url) {
+                        UIApplication.shared.open(url, options: [:], completionHandler: { [weak self] success in
+                            self?.initLocation(locationSuccessBlock: {
+                                if let locationSuccessBlock = self?.locationSuccessBlock {
+                                    locationSuccessBlock()
+                                }
+                            }, locationFalseBlock: { [weak self] in
+                                if let locationFalseBlock = self?.locationFalseBlock {
+                                    locationFalseBlock()
+                                }
+                            })
+                        })
+                    }
+                }
+            } else {
+                let url = URL(string: UIApplication.openSettingsURLString)
+                if let url = url {
+                    if UIApplication.shared.canOpenURL(url) {
+                        UIApplication.shared.openURL(url)
+                    }
+                }
+            }
+        })
+    }
 
 
 }
@@ -122,10 +149,29 @@ extension BaiduMapManager:BMKLocationManagerDelegate {
 
     /// 定位权限状态改变时回调函数
     public func bmkLocationManager(_ manager: BMKLocationManager, didChange status: CLAuthorizationStatus) {
-        NXLLog("定位权限改变时候的回调");
-        initLocation { (locationModel) in
-
+        if status == .notDetermined {
+            //用户尚未对此应用程序做出选择
+        } else if status == .restricted {
+            //此应用程序无权使用位置服务。到期
+            //对于位置服务的活动限制,用户不能更改
+            //此状态,可能未亲自拒绝授权
+        } else if status == .denied {
+            //用户已明确拒绝此应用程序的授权,或者
+            //位置服务在设置中被禁用。
+            startLocation()
+        }else if status == .authorizedAlways {
+            //用户已授予随时使用其位置的权限,
+            //包括区域、访问或重大位置更改的监控。
+            //该值应用于iOS、tvos和watchos。它在上有售
+            //macos,但kclauthorizationstatusauthorized是同义词且首选。
+            startLocation()
+        }else if status == .authorizedWhenInUse {
+            //只有在应用程序
+            //对它们可见(如果继续在后台接收位置更新)。授权使用
+            //尚未授予启动API。此值在MacOS上不可用。它应该在iOS、tvos和沃特克斯。
+            startLocation()
         }
+
     }
 }
 
@@ -136,12 +182,8 @@ extension BaiduMapManager: BMKLocationAuthDelegate {
     public func onCheckPermissionState(_ iError: BMKLocationAuthErrorCode) {
         if (0 == iError.rawValue) {
             NXLLog("授权成功");
-            initLocation { (locationModel) in
-
-            }
         } else {
             NXLLog("授权失败 \(iError)");
-            LocationModel.shared().setLocationModel(locationModel: locationModel!)
         }
     }
 }

+ 5 - 3
RainbowPlanet/RainbowPlanet/Manager/MapManager/BaiduMapManager/LocationModel.swift

@@ -105,18 +105,20 @@ class LocationModel: NSObject,NSCoding {
         if modelData != nil {
             locationModel = NSKeyedUnarchiver.unarchiveObject(with: modelData!) as! LocationModel
         }
-        toString()
+        _ = toString()
         return locationModel
     }
+    
+    
 
-    func toString() {
+    func toString() -> String {
         let str = self.country +
             self.province +
             self.city +
             self.district +
             self.street +
             self.locationdescribe
-        NXLLog(str)
+        return str
     }
 
 }

+ 1 - 1
RainbowPlanet/RainbowPlanet/Manager/UMManager/UMManager.swift

@@ -359,7 +359,7 @@ extension UMManager {
         }
     else {
             if platformType == .wechatSession {
-                SwiftProgressHUD.shared().showText("微信未安装/n请您安装微信程序")
+                SwiftProgressHUD.shared().showText("微信未安装\n请您安装微信程序")
             }
         }
     }

+ 65 - 0
RainbowPlanet/RainbowPlanet/Modules/LocationModules/AddressPOI/View/AddressPOIView.swift

@@ -0,0 +1,65 @@
+//
+//  AddressPOIView.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/4/19.
+//  Copyright © 2019 南鑫林. All rights reserved.
+//
+
+import UIKit
+
+class AddressPOIView: BaseView {
+    
+    override func setupViews() {
+        addSubview(searchBgView)
+        searchBgView.addSubview(addressImageView)
+        searchBgView.addSubview(addressLabel)
+        searchBgView.addSubview(searchView)
+    }
+    
+    override func setupLayouts() {
+        searchBgView.snp.makeConstraints { (make) in
+            make.top.left.right.equalToSuperview()
+            make.height.equalTo(kScaleValue(value: 60))
+        }
+        addressImageView.snp.makeConstraints { (make) in
+            make.centerY.equalToSuperview()
+            make.left.equalToSuperview().offset(kScaleValue(value: 14))
+            make.size.equalTo(kScaleValue(value: 20))
+        }
+        addressLabel.snp.makeConstraints { (make) in
+            make.centerY.equalToSuperview()
+            make.left.equalTo(addressImageView.snp.right).offset(kScaleValue(value: 8))
+        }
+        
+    }
+    
+    private lazy var searchBgView: UIView = {
+        let searchBgView = UIView()
+        searchBgView.backgroundColor = kffffffColor
+        return searchBgView
+    }()
+    
+    private lazy var addressImageView: UIImageView = {
+        let addressImageView = UIImageView()
+        addressImageView.image = kImage(name: "navbar_address")
+        return addressImageView
+    }()
+    
+    private lazy var addressLabel: UILabel = {
+        let addressLabel = UILabel()
+        addressLabel.text = "西安市"
+        addressLabel.textColor = k999999Color
+        addressLabel.font = kScaleRegularFont14
+        return addressLabel
+    }()
+    
+    private lazy var searchView: UIView = {
+        let searchView = UIView()
+        searchView.backgroundColor = kf7f7faColor
+        return searchView
+    }()
+    
+    
+
+}

+ 35 - 0
RainbowPlanet/RainbowPlanet/Modules/LocationModules/AddressPOI/ViewController/AddressPOIViewController.swift

@@ -0,0 +1,35 @@
+//
+//  AddressPOIViewController.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/4/19.
+//  Copyright © 2019 南鑫林. All rights reserved.
+//
+
+import UIKit
+
+class AddressPOIViewController: BaseViewController {
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        
+    }
+    
+    override func setupViews() {
+        navigationBar.title = "选择默认地址"
+        view.addSubview(addressPOIView)
+    }
+    
+    override func setupLayouts() {
+        addressPOIView.snp.makeConstraints { (make) in
+            make.top.equalTo(navigationBar.snp.bottom)
+            make.left.right.bottom.equalToSuperview()
+        }
+    }
+    
+    private lazy var addressPOIView: AddressPOIView = {
+        let addressPOIView = AddressPOIView()
+        return addressPOIView
+    }()
+
+}

+ 175 - 0
RainbowPlanet/RainbowPlanet/Modules/LocationModules/Location/View/LocationView.swift

@@ -0,0 +1,175 @@
+//
+//  LocationView.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/4/18.
+//  Copyright © 2019 南鑫林. All rights reserved.
+//
+
+import UIKit
+import TangramKit
+
+class LocationView: BaseView {
+    
+    
+    typealias ExpressViewBlock = () -> Void
+    var expressViewBlock : ExpressViewBlock?
+    
+    typealias SelfMentionViewBlock = () -> Void
+    var selfMentionViewBlock : SelfMentionViewBlock?
+    
+    override func setupViews() {
+        backgroundColor = kffffffColor
+        addSubview(expressView)
+        expressView.addSubview(expressImageView)
+        expressView.addSubview(expressTitleLabel)
+        expressView.addSubview(expressDetailTitleLabel)
+        addSubview(selfMentionView)
+        selfMentionView.addSubview(selfMentionImageView)
+        selfMentionView.addSubview(selfMentionTitleLabel)
+        selfMentionView.addSubview(selfMentionDetailTitleLabel)
+        
+    }
+    
+    override func setupLayouts() {
+        
+        expressImageView.snp.makeConstraints { (make) in
+            make.top.equalToSuperview().offset(kScaleValue(value: 33))
+            make.centerX.equalToSuperview()
+            make.size.equalTo(kScaleValue(value: 70))
+        }
+        expressTitleLabel.snp.makeConstraints { (make) in
+            make.top.equalTo(expressImageView.snp.bottom).offset(kScaleValue(value: 18))
+            make.left.right.equalToSuperview()
+        }
+        
+        expressDetailTitleLabel.snp.makeConstraints { (make) in
+            make.top.equalTo(expressTitleLabel.snp.bottom).offset(kScaleValue(value: 8))
+            make.left.right.equalToSuperview()
+            make.bottom.equalToSuperview().offset(kScaleValue(value:-44))
+
+        }
+        
+        expressView.snp.makeConstraints { (make) in
+            make.top.equalToSuperview().offset(kScaleValue(value:40))
+            make.left.equalToSuperview().offset(kScaleValue(value: 30))
+            make.right.equalToSuperview().offset(kScaleValue(value: -30))
+            make.bottom.equalTo(expressDetailTitleLabel).offset(kScaleValue(value:44))
+        }
+        
+        selfMentionImageView.snp.makeConstraints { (make) in
+            make.top.equalToSuperview().offset(kScaleValue(value: 33))
+            make.centerX.equalToSuperview()
+            make.size.equalTo(kScaleValue(value: 70))
+
+        }
+        selfMentionTitleLabel.snp.makeConstraints { (make) in
+            make.top.equalTo(selfMentionImageView.snp.bottom).offset(kScaleValue(value: 18))
+            make.left.right.equalToSuperview()
+        }
+        
+        selfMentionDetailTitleLabel.snp.makeConstraints { (make) in
+            make.top.equalTo(selfMentionTitleLabel.snp.bottom).offset(kScaleValue(value: 8))
+            make.left.right.equalToSuperview()
+            make.bottom.equalToSuperview().offset(kScaleValue(value:-44))
+        }
+        selfMentionView.snp.makeConstraints { (make) in
+            make.left.equalToSuperview().offset(kScaleValue(value: 30))
+            make.right.equalToSuperview().offset(kScaleValue(value: -30))
+            make.top.equalTo(expressView.snp.bottom).offset(kScaleValue(value:33))
+            make.bottom.equalTo(selfMentionDetailTitleLabel).offset(kScaleValue(value:44))
+        }
+
+    }
+    
+    /// 快递
+    private lazy var expressView: UIButton = {
+        let expressView = UIButton(type: UIButton.ButtonType.custom)
+        expressView.layer.backgroundColor = UIColor(red: 1, green: 0.64, blue: 0.18, alpha: 1).cgColor
+        // shadowCode
+        expressView.layer.shadowColor = UIColor(red: 0.84, green: 0.38, blue: 0.01, alpha: 0.4).cgColor
+        expressView.layer.shadowOffset = CGSize(width: 0, height: 4)
+        expressView.layer.shadowOpacity = 1
+        expressView.layer.shadowRadius = kScaleValue(value: 19)
+        expressView.layer.cornerRadius = kScaleValue(value: 10)
+        expressView.rx.tap.subscribe(onNext: { [weak self] (data) in
+            
+            if let expressViewBlock = self?.expressViewBlock {
+                expressViewBlock()
+            }
+            
+        }).disposed(by: disposeBag)
+        return expressView
+    }()
+    
+    
+    /// 自提
+    private lazy var selfMentionView: UIButton = {
+        let selfMentionView = UIButton(type: UIButton.ButtonType.custom)
+        // shadowCode
+        selfMentionView.layer.backgroundColor = UIColor(red: 1, green: 1, blue: 1, alpha: 1).cgColor
+        selfMentionView.layer.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.08).cgColor
+        selfMentionView.layer.shadowOffset = CGSize(width: 0, height: 4)
+        selfMentionView.layer.shadowOpacity = 1
+        selfMentionView.layer.shadowRadius = kScaleValue(value: 19)
+        selfMentionView.layer.cornerRadius = kScaleValue(value: 10)
+        selfMentionView.rx.tap.subscribe(onNext: { [weak self] (data) in
+            if let selfMentionViewBlock = self?.selfMentionViewBlock {
+                selfMentionViewBlock()
+            }
+        }).disposed(by: disposeBag)
+        return selfMentionView
+    }()
+    
+    
+    private lazy var expressImageView: UIImageView = {
+        let expressImageView = UIImageView()
+        expressImageView.image = kImage(name: "login_express")
+
+        return expressImageView
+    }()
+    
+    private lazy var expressTitleLabel: UILabel = {
+        let expressTitleLabel = UILabel()
+        expressTitleLabel.text = "我要快递"
+        expressTitleLabel.textColor = kffffffColor
+        expressTitleLabel.font = kScaleMediumFont20
+        expressTitleLabel.textAlignment = .center
+        return expressTitleLabel
+    }()
+    
+    private lazy var expressDetailTitleLabel: UILabel = {
+        let expressDetailTitleLabel = UILabel()
+        expressDetailTitleLabel.text = "支持大部分地区,当日下单,次日送达"
+        expressDetailTitleLabel.textColor = kffffffColor
+        expressDetailTitleLabel.font = kScaleRegularFont14
+        expressDetailTitleLabel.textAlignment = .center
+         return expressDetailTitleLabel
+    }()
+    
+    
+    private lazy var selfMentionImageView: UIImageView = {
+        let selfMentionImageView = UIImageView()
+        selfMentionImageView.image = kImage(name: "login_store")
+        return selfMentionImageView
+    }()
+    
+    private lazy var selfMentionTitleLabel: UILabel = {
+        let selfMentionTitleLabel = UILabel()
+        selfMentionTitleLabel.text = "我要自提"
+        selfMentionTitleLabel.textColor = k333333Color
+        selfMentionTitleLabel.font = kScaleMediumFont20
+        selfMentionTitleLabel.textAlignment = .center
+        return selfMentionTitleLabel
+    }()
+    
+    private lazy var selfMentionDetailTitleLabel: UILabel = {
+        let selfMentionDetailTitleLabel = UILabel()
+        selfMentionDetailTitleLabel.text = "支持部分小区,当日下单,次日送达"
+        selfMentionDetailTitleLabel.textColor = k333333Color
+        selfMentionDetailTitleLabel.font = kScaleRegularFont14
+        selfMentionDetailTitleLabel.textAlignment = .center
+        return selfMentionDetailTitleLabel
+    }()
+    
+}

+ 61 - 0
RainbowPlanet/RainbowPlanet/Modules/LocationModules/Location/ViewController/LocationViewController.swift

@@ -0,0 +1,61 @@
+//
+//  LocationViewController.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/4/18.
+//  Copyright © 2019 南鑫林. All rights reserved.
+//
+
+import UIKit
+
+class LocationViewController: BaseViewController {
+
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        setupViews()
+        navigationBar.title = "获取地址授权中"
+        BaiduMapManager.shared().startLocation()
+        BaiduMapManager.shared().locationSuccessBlock =  {
+            [weak self] in
+            self?.navigationBar.title = "选择您的配送方式"
+            self?.locationView.isHidden = false
+            self?.view.ly_hideEmpty()
+        }
+        BaiduMapManager.shared().locationFalseBlock =  {
+            [weak self] in
+            self?.navigationBar.title = "未获取地理位置授权"
+            self?.locationView.isHidden = true
+            self?.view.ly_showEmpty()
+
+        }
+    }
+
+    override func setupViews() {
+        view.backgroundColor = kF7F8FAColor
+        view.addSubview(locationView)
+        let emptyView =  EmptyView.shared.diyCustomEmptyViewStyle1(iconStr: "page01", titleStr: "选择了自提点才能享受支持到店自提服务哦", buttonStr: "去设置", buttonActionBlock: {
+            BaiduMapManager.shared().loacationAlertView()
+        })
+        emptyView.contentViewY = kScaleValue(value: 100) + kNavBarTotalHeight
+        view.ly_emptyView = emptyView
+    }
+    
+    private lazy var locationView: LocationView = {
+        let locationView = LocationView(frame: CGRect(x: 0, y: kNavBarTotalHeight, width: kScreenWidth, height: kScreenHeight-kNavBarTotalHeight))
+        locationView.isHidden = true
+        locationView.expressViewBlock = { [weak self] in
+                if self?.presentingViewController != nil {
+                    self?.dismiss(animated: false, completion: {
+                        kAppDelegate.setTabbarController()
+                    })
+                } else {
+                    kAppDelegate.setTabbarController()
+                }
+        }
+        
+        locationView.selfMentionViewBlock = {
+           [weak self] in self?.navigationController?.pushViewController(SelfRecommendationViewController(), animated: true)
+        }
+        return locationView
+    }()
+}

+ 108 - 0
RainbowPlanet/RainbowPlanet/Modules/LocationModules/SelfRecommendation/View/SelfRecommendationCollectionViewCell.swift

@@ -0,0 +1,108 @@
+//
+//  SelfRecommendationViewCollectionViewCell.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/4/19.
+//  Copyright © 2019 南鑫林. All rights reserved.
+//
+
+import UIKit
+
+class SelfRecommendationCollectionViewCell: UICollectionViewCell {
+    class func cellWith(collectionView:UICollectionView,indexPath:IndexPath) -> SelfRecommendationCollectionViewCell {
+        let ID = "SelfRecommendationCollectionViewCell"
+        collectionView.register(SelfRecommendationCollectionViewCell.self, forCellWithReuseIdentifier: ID)
+        let cell : SelfRecommendationCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: ID, for: indexPath) as! SelfRecommendationCollectionViewCell
+        cell.indexPath = indexPath
+        return cell
+    }
+    //MARK: - indexPath
+    var indexPath: IndexPath?{
+        didSet {
+            
+        }
+    }
+    //MARK: - 初始化
+    override init(frame: CGRect) {
+        super.init(frame: frame)
+        setupViews()
+        setupLayouts()
+    }
+    
+    required init?(coder aDecoder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+    
+    //MARK: - 设置view
+    private func setupViews() {
+        backgroundColor = kffffffColor
+        layer.cornerRadius = kScaleValue(value: 4)
+        layer.masksToBounds = true
+        addSubview(distanceLable)
+        addSubview(titleLable)
+        addSubview(goImageView)
+        addSubview(addressLable)
+    }
+    
+    private func setupLayouts() {
+
+        titleLable.snp.makeConstraints { (make) in
+            make.top.equalToSuperview().offset(kScaleValue(value: 19))
+            make.left.equalToSuperview().offset(kScaleValue(value: 14))
+        }
+        
+        distanceLable.snp.makeConstraints { (make) in
+            make.top.equalTo(titleLable)
+            make.right.equalToSuperview().offset(kScaleValue(value: -14))
+        }
+
+        addressLable.snp.makeConstraints { (make) in
+            make.left.equalTo(titleLable)
+            make.top.equalTo(titleLable.snp.bottom).offset(kScaleValue(value: 11))
+            make.width.equalTo(kScaleValue(value: 260))
+            make.bottom.equalToSuperview().offset(kScaleValue(value: -17))
+        }
+        
+        goImageView.snp.makeConstraints { (make) in
+            make.top.equalTo(addressLable)
+            make.right.equalTo(distanceLable)
+            make.size.equalTo(CGSize(width: 7, height: 11))
+        }
+
+    }
+    
+    private lazy var titleLable: UILabel = {
+        let titleLable = UILabel()
+        titleLable.text = "瓦胡同小区"
+        titleLable.textColor = k333333Color
+        titleLable.font = kScaleBoldFont13
+        titleLable.textAlignment = .left
+        titleLable.numberOfLines = 0
+        return titleLable
+    }()
+    
+    private lazy var distanceLable: UILabel = {
+        let distanceLable = UILabel()
+        distanceLable.text = "200m"
+        distanceLable.textColor = kFE352BColor
+        distanceLable.font = kScaleRegularFont14
+        return distanceLable
+    }()
+    
+    private lazy var goImageView: UIImageView = {
+        let goImageView = UIImageView()
+        goImageView.image = kImage(name: "my_arrows_unfold")
+        return goImageView
+    }()
+    
+    private lazy var addressLable: UILabel = {
+        let addressLable = UILabel()
+        addressLable.text = "自提地址:陕西省西安市华侨城天鹅堡胡同村华侨城天鹅堡胡同村"
+        addressLable.textColor = k666666Color
+        addressLable.font = kScaleRegularFont13
+        addressLable.textAlignment = .left
+        addressLable.numberOfLines = 0
+        return addressLable
+    }()
+    
+}

+ 70 - 0
RainbowPlanet/RainbowPlanet/Modules/LocationModules/SelfRecommendation/View/SelfRecommendationHeaderCollectionReusableView.swift

@@ -0,0 +1,70 @@
+//
+//  SelfRecommendationHeaderCollectionReusableView.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/4/19.
+//  Copyright © 2019 南鑫林. All rights reserved.
+//
+
+import UIKit
+
+class SelfRecommendationHeaderCollectionReusableView: UICollectionReusableView {
+    class func headerWith(collectionView:UICollectionView,kind: String,indexPath: IndexPath) -> SelfRecommendationHeaderCollectionReusableView {
+        let ID = "SelfRecommendationHeaderCollectionReusableView"
+        collectionView.register(SelfRecommendationHeaderCollectionReusableView.self, forSupplementaryViewOfKind: kind, withReuseIdentifier: ID)
+        let headerView : SelfRecommendationHeaderCollectionReusableView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: ID, for: indexPath) as! SelfRecommendationHeaderCollectionReusableView
+        headerView.indexPath = indexPath
+        return headerView
+    }
+    
+    var indexPath : IndexPath? {
+        didSet {
+            
+        }
+    }
+    override init(frame: CGRect) {
+        super.init(frame: frame)
+        backgroundColor = kF7F8FAColor
+        setupViews()
+        setupLayouts()
+    }
+    
+    required init?(coder aDecoder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+    
+    //MARK: - 设置View
+    private func setupViews() {
+        addSubview(vLineLabel)
+        addSubview(titleLabel)
+    }
+    
+    private func setupLayouts() {
+        vLineLabel.snp.makeConstraints { (make) in
+            make.top.equalToSuperview().offset(kScaleValue(value: 25))
+            make.left.equalTo(kScaleValue(value: 14))
+            make.width.equalTo(4)
+            make.height.equalTo(kScaleValue(value: 16))
+        }
+        titleLabel.snp.makeConstraints { (make) in
+            make.centerY.equalTo(vLineLabel)
+            make.left.equalTo(vLineLabel.snp.right).offset(5)
+            make.right.equalToSuperview().offset(kScaleValue(value: -14))
+        }
+    }
+    
+    private lazy var vLineLabel: UILabel = {
+        let vLineLabel = UILabel()
+        vLineLabel.backgroundColor = kFFA42FColor
+        vLineLabel.cornerRadius = 2
+        return vLineLabel
+    }()
+    
+    private lazy var titleLabel: UILabel = {
+        let titleLabel = UILabel()
+        titleLabel.text = "距离最近的自提点"
+        titleLabel.textColor = k333333Color
+        titleLabel.font = kScaleRegularFont18
+        return titleLabel
+    }()
+}

+ 193 - 0
RainbowPlanet/RainbowPlanet/Modules/LocationModules/SelfRecommendation/View/SelfRecommendationView.swift

@@ -0,0 +1,193 @@
+//
+//  SelfRecommendationView.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/4/19.
+//  Copyright © 2019 南鑫林. All rights reserved.
+//
+
+import UIKit
+
+class SelfRecommendationView: BaseView {
+
+    
+    typealias GoShoppingBlock = () -> Void
+    var goShoppingBlock : GoShoppingBlock?
+    
+    override func setupViews() {
+        backgroundColor = kF7F8FAColor
+        addSubview(locationBgImageView)
+        locationBgImageView.addSubview(locationTitleLable)
+        locationBgImageView.addSubview(locationAddressLable)
+        locationBgImageView.addSubview(changeLocationButton)
+        
+        addSubview(collectionView)
+//        let emptyView =  EmptyView.shared.diyCustomEmptyViewStyle1(iconStr: "page01", titleStr: "当前位置没有自提点,先进商城逛逛吧", buttonStr: "去商城", buttonActionBlock: { [weak self] in
+//
+//            /// 跳转到商场
+//            if let goShoppingBlock = self?.goShoppingBlock {
+//                goShoppingBlock()
+//            }
+//        })
+//        emptyView.contentViewY = kScaleValue(value: 60)
+//        collectionView.ly_emptyView = emptyView
+//        collectionView.ly_startLoading()
+    }
+    
+    override func setupLayouts() {
+        locationTitleLable.snp.makeConstraints { (make) in
+            make.top.equalToSuperview().offset(kScaleValue(value: 22))
+            make.centerX.equalToSuperview()
+        }
+        locationAddressLable.snp.makeConstraints { (make) in
+            make.top.equalTo(locationTitleLable.snp.bottom).offset(kScaleValue(value: 12))
+            make.left.equalToSuperview().offset(kScaleValue(value: 20))
+            make.right.equalToSuperview().offset(kScaleValue(value: -20))
+        }
+        changeLocationButton.snp.makeConstraints { (make) in
+            make.top.equalTo(locationAddressLable.snp.bottom).offset(kScaleValue(value: 16))
+            make.width.equalTo(kScaleValue(value: 80))
+            make.height.equalTo(kScaleValue(value: 24))
+            make.centerX.equalToSuperview()
+        }
+        
+        locationBgImageView.snp.makeConstraints { (make) in
+            make.top.left.right.equalToSuperview()
+            make.bottom.equalTo(changeLocationButton).offset(kScaleValue(value: 22))
+        }
+        
+        collectionView.snp.makeConstraints { (make) in
+            make.top.equalTo(locationBgImageView.snp.bottom)
+            make.left.right.bottom.equalToSuperview()
+        }
+    }
+    
+    private lazy var locationBgImageView: UIImageView = {
+        let locationBgImageView = UIImageView()
+        locationBgImageView.image = kImage(name: "bg0")
+        return locationBgImageView
+    }()
+    
+    private lazy var locationTitleLable: UILabel = {
+        let locationTitleLable = UILabel()
+        locationTitleLable.text = "当前位置"
+        locationTitleLable.textColor = kffffffColor
+        locationTitleLable.font = kScaleRegularFont14
+        return locationTitleLable
+    }()
+    
+    private lazy var locationAddressLable: UILabel = {
+        let locationAddressLable = UILabel()
+        let locationModel = LocationModel.shared().getLocationModel()
+        locationAddressLable.text = locationModel!.toString()
+        locationAddressLable.textColor = kffffffColor
+        locationAddressLable.font = kScaleBoldFont16
+        locationAddressLable.textAlignment = .center
+        locationAddressLable.numberOfLines = 0
+        return locationAddressLable
+    }()
+    
+    private lazy var changeLocationButton: UIButton = {
+        let changeLocationButton  = UIButton(type: UIButton.ButtonType.custom)
+        changeLocationButton.setTitle("修改位置", for: UIControl.State.normal)
+        changeLocationButton.setBackgroundImage(UIImage.imageWithColor(color: kffffffColor), for: UIControl.State.normal)
+        changeLocationButton.setTitleColor(kffb04AColor, for: UIControl.State.normal)
+        changeLocationButton.titleLabel?.font = kScaleRegularFont13
+        changeLocationButton.cornerRadius = kScaleValue(value: 12)
+        changeLocationButton.masksToBounds = true
+        return changeLocationButton
+    }()
+    
+    private lazy var collectionView: UICollectionView = {
+        let collectionView = UICollectionView.init(frame: CGRect.zero, collectionViewLayout: collectionViewLayout)
+        collectionView.backgroundColor = kF7F8FAColor
+        collectionView.delegate = self;
+        collectionView.dataSource = self;
+        collectionView.showsVerticalScrollIndicator = false
+        collectionView.showsHorizontalScrollIndicator = false
+        return collectionView
+    }()
+    
+    private lazy var collectionViewLayout: UICollectionViewFlowLayout = {
+        let collectionViewLayout = UICollectionViewFlowLayout.init()
+        collectionViewLayout.minimumLineSpacing = 0
+        collectionViewLayout.minimumInteritemSpacing = 0
+        collectionViewLayout.estimatedItemSize = CGSize(width:kScreenWidth-kScaleValue(value: 28), height: kScaleValue(value: 110))
+        collectionViewLayout.sectionHeadersPinToVisibleBounds = true
+        return collectionViewLayout
+    }()
+    
+    
+}
+
+extension SelfRecommendationView : UICollectionViewDelegateFlowLayout,UICollectionViewDataSource {
+    func numberOfSections(in collectionView: UICollectionView) -> Int {
+        return 1
+    }
+    
+    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
+        switch section {
+        case 0:
+            return 6
+        default:
+            return 0
+        }
+    }
+    
+    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
+        switch indexPath.section {
+        case 0:
+            let cell = SelfRecommendationCollectionViewCell.cellWith(collectionView: collectionView, indexPath: indexPath)
+            return cell
+        default:
+            return UICollectionViewCell()
+        }
+        
+    }
+    
+    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
+        switch section {
+        case 0:
+            return UIEdgeInsets(top: 0, left: kScaleValue(value: 10), bottom: kScaleValue(value: 10), right: kScaleValue(value: 10))
+        default:
+            return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
+        }
+        
+    }
+    
+    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
+        switch section {
+        case 0:
+            return kScaleValue(value: 10)
+        default:
+            return 0
+        }
+    }
+    
+    func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
+        
+        if kind == UICollectionView.elementKindSectionHeader {
+            switch indexPath.section {
+            case 0:
+                let headerView = SelfRecommendationHeaderCollectionReusableView.headerWith(collectionView: collectionView, kind: UICollectionView.elementKindSectionHeader, indexPath: indexPath)
+                return headerView
+            default:
+                return UICollectionReusableView()
+            }
+        }else {
+            return UICollectionReusableView()
+        }
+    }
+    
+    // 返回HeadView的宽高
+    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
+        switch section {
+        case 0:
+            return CGSize(width:kScreenWidth, height: kScaleValue(value: 57))
+        default:
+            return CGSize(width:kScreenWidth, height: 0)
+        }
+    }
+    
+}
+

+ 47 - 0
RainbowPlanet/RainbowPlanet/Modules/LocationModules/SelfRecommendation/ViewController/SelfRecommendationViewController.swift

@@ -0,0 +1,47 @@
+//
+//  SelfRecommendationViewController.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/4/19.
+//  Copyright © 2019 南鑫林. All rights reserved.
+//
+
+import UIKit
+
+class SelfRecommendationViewController: BaseViewController {
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        navigationBar.title = "自提点推荐"
+        setupViews()
+        setupLayouts()
+    }
+    
+    override func setupViews() {
+        view.addSubview(selfRecommendationView)
+    }
+    
+    override func setupLayouts() {
+        selfRecommendationView.snp.makeConstraints { (make) in
+            make.top.equalTo(navigationBar.snp.bottom)
+            make.left.right.bottom.equalToSuperview()
+        }
+    }
+    
+    private lazy var selfRecommendationView: SelfRecommendationView = {
+        let selfRecommendationView = SelfRecommendationView()
+        selfRecommendationView.goShoppingBlock = {
+            [weak self] in
+            if self?.presentingViewController != nil {
+                self?.dismiss(animated: false, completion: {
+                    kAppDelegate.setTabbarController()
+                })
+            } else {
+                kAppDelegate.setTabbarController()
+            }
+        }
+        return selfRecommendationView
+    }()
+    
+    
+}

+ 255 - 0
RainbowPlanet/RainbowPlanet/Modules/RegisterLoginModule/BindPhoneNumber/View/BindPhoneNumberView.swift

@@ -0,0 +1,255 @@
+//
+//  BindPhoneNumberView.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/4/17.
+//  Copyright © 2019 南鑫林. All rights reserved.
+//
+
+import UIKit
+import RxSwift
+import RxCocoa
+
+class BindPhoneNumberView: BaseView {
+
+    /// 手机号
+    var phoneNumber : String = ""
+
+    /// 验证码
+    var sms : String = ""
+
+    typealias SendSmSBlock = (_ smsButton: CountdownButton,_ phoneNumber : String) -> Void
+    var sendSmSBlock : SendSmSBlock?
+
+    typealias LoginBlock = (_ phoneNumber : String ,_ sms : String) -> Void
+    var loginBlock : LoginBlock?
+
+    override func setupViews() {
+        addSubview(bindPhoneNumberLabel)
+        addSubview(bindPhoneNumberInfoLabel)
+
+        addSubview(phoneNumberBgView)
+        phoneNumberBgView.addSubview(linePhoneNumberLabel)
+        phoneNumberBgView.addSubview(phoneAreaCodeLabel)
+        phoneNumberBgView.addSubview(phoneNumberTextField)
+
+        addSubview(smsBgView)
+        smsBgView.addSubview(linesmsLabel)
+        smsBgView.addSubview(smsButton)
+        smsBgView.addSubview(smsTextField)
+
+        addSubview(loginButton)
+    }
+
+    override func setupLayouts() {
+        bindPhoneNumberLabel.snp.makeConstraints { (make) in
+            make.top.equalToSuperview().offset(kScaleValue(value: 75))
+            make.left.equalToSuperview().offset(kScaleValue(value: 38))
+        }
+        bindPhoneNumberInfoLabel.snp.makeConstraints { (make) in
+            make.top.equalTo(bindPhoneNumberLabel.snp.bottom).offset(kScaleValue(value: 6))
+            make.left.equalTo(bindPhoneNumberLabel)
+        }
+        phoneNumberBgView.snp.makeConstraints { (make) in
+            make.left.equalToSuperview().offset(kScaleValue(value: 38))
+            make.right.equalToSuperview().offset(kScaleValue(value: -38))
+            make.top.equalTo(bindPhoneNumberInfoLabel.snp.bottom).offset(kScaleValue(value: 28))
+            make.height.equalTo(kScaleValue(value: 48))
+        }
+        linePhoneNumberLabel.snp.makeConstraints { (make) in
+            make.left.right.bottom.equalToSuperview()
+            make.height.equalTo(0.5)
+        }
+
+        phoneAreaCodeLabel.snp.makeConstraints { (make) in
+            make.top.equalToSuperview().offset(kScaleValue(value: 6))
+            make.left.equalToSuperview().offset(kScaleValue(value: 4))
+            make.bottom.equalToSuperview()
+        }
+
+        phoneNumberTextField.snp.makeConstraints { (make) in
+            make.left.equalTo(phoneAreaCodeLabel.snp.right).offset(kScaleValue(value: 30))
+            make.top.bottom.equalTo(phoneAreaCodeLabel)
+            make.width.equalTo(kScreenWidth-kScaleValue(value: 76+34+30))
+        }
+
+        smsBgView.snp.makeConstraints { (make) in
+            make.left.height.right.equalTo(phoneNumberBgView)
+            make.top.equalTo(phoneNumberBgView.snp.bottom)
+        }
+        linesmsLabel.snp.makeConstraints { (make) in
+            make.left.right.bottom.equalToSuperview()
+            make.height.equalTo(0.5)
+        }
+
+        smsButton.snp.makeConstraints { (make) in
+            make.bottom.equalToSuperview().offset(kScaleValue(value: -8))
+            make.height.equalTo(kScaleValue(value: 30))
+            make.right.equalToSuperview().offset(kScaleValue(value: -4))
+        }
+        smsTextField.snp.makeConstraints { (make) in
+            make.bottom.top.equalTo(smsButton)
+            make.left.equalTo(phoneAreaCodeLabel)
+            make.width.equalTo(kScreenWidth - kScaleValue(value: 76 + 30 + smsButton.width))
+        }
+
+        loginButton.snp.makeConstraints { (make) in
+            make.top.equalTo(smsBgView.snp.bottom).offset(kScaleValue(value: 35))
+            make.height.equalTo(kScaleValue(value:44))
+            make.left.equalToSuperview().offset(kScaleValue(value: 38))
+            make.right.equalToSuperview().offset(kScaleValue(value: -38))
+        }
+    }
+
+    private lazy var bindPhoneNumberLabel: UILabel = {
+        let bindPhoneNumberLabel = UILabel()
+        bindPhoneNumberLabel.text = "绑定手机号"
+        bindPhoneNumberLabel.textColor = k333333Color
+        bindPhoneNumberLabel.font = kScaleBoldFont22
+        return bindPhoneNumberLabel
+    }()
+
+    private lazy var bindPhoneNumberInfoLabel: UILabel = {
+        let bindPhoneNumberInfoLabel = UILabel()
+        bindPhoneNumberInfoLabel.text = "绑定手机  分享美好生活"
+        bindPhoneNumberInfoLabel.textColor = k666666Color
+        bindPhoneNumberInfoLabel.font = kScaleRegularFont12
+        return bindPhoneNumberInfoLabel
+    }()
+
+    private lazy var phoneNumberBgView: UIView = {
+        let phoneNumberBgView = UIView()
+        return phoneNumberBgView
+    }()
+
+    private lazy var linePhoneNumberLabel: UILabel = {
+        let linePhoneNumberLabel = UILabel()
+        linePhoneNumberLabel.backgroundColor = ke6e6e6Color
+        return linePhoneNumberLabel
+    }()
+
+    private lazy var phoneAreaCodeLabel: UILabel = {
+        let phoneAreaCodeLabel = UILabel()
+        phoneAreaCodeLabel.text = "+86"
+        phoneAreaCodeLabel.textColor = k333333Color
+        phoneAreaCodeLabel.font = kScaleRegularFont16
+        phoneAreaCodeLabel.sizeToFit()
+        return phoneAreaCodeLabel
+    }()
+
+    private lazy var phoneNumberTextField : UITextField = {
+        let phoneNumberTextField = UITextField()
+        phoneNumberTextField.placeholder = "手机号码"
+        phoneNumberTextField.borderStyle = .none
+        phoneNumberTextField.textColor = k666666Color
+        phoneNumberTextField.font = kScaleRegularFont16
+        phoneNumberTextField.clearButtonMode = .whileEditing
+        phoneNumberTextField.sizeToFit()
+        phoneNumberTextField.keyboardType = .numberPad
+        phoneNumberTextField.tintColor = kFFA42FColor
+
+        phoneNumberTextField.rx.text.changed.subscribe(onNext: { [weak self] (text) in
+            self?.phoneNumberTextField.text = String(text?.prefix(11) ?? "") as String
+            self?.phoneNumber = self?.phoneNumberTextField.text ?? ""
+            self?.observableString()
+        }).disposed(by: disposeBag)
+        return phoneNumberTextField
+    }()
+
+    private lazy var smsBgView: UIView = {
+        let smsBgView = UIView()
+        return smsBgView
+    }()
+
+    private lazy var linesmsLabel: UILabel = {
+        let linesmsLabel = UILabel()
+        linesmsLabel.backgroundColor = ke6e6e6Color
+        return linesmsLabel
+    }()
+
+    private lazy var smsButton: CountdownButton = {
+        let smsButton = CountdownButton(type: UIButton.ButtonType.custom)
+        smsButton.normalText = "  获取验证码  "
+        smsButton.disabledText = "  seconds后重新获取  "
+        smsButton.setTitle(smsButton.normalText, for: UIControl.State.normal)
+        smsButton.setTitle(smsButton.disabledText, for: UIControl.State.disabled)
+        smsButton.setTitleColor(kFFA42FColor, for: UIControl.State.normal)
+        smsButton.setTitleColor(k333333Color, for: UIControl.State.disabled)
+        smsButton.titleLabel?.font = kScaleRegularFont12
+        smsButton.contentHorizontalAlignment = UIControl.ContentHorizontalAlignment.center
+        smsButton.sizeToFit()
+        smsButton.normalBorderColor = kFFA42FColor
+        smsButton.normalBorderWidth = 0.5
+        smsButton.normalCornerRadius = kScaleValue(value: 15)
+        smsButton.normalBackgroundColor = UIColor.white
+        smsButton.disabledBorderColor = ke6e6e6Color
+        smsButton.disabledBorderWidth = 0.5
+        smsButton.disabledCornerRadius = kScaleValue(value: 15)
+        smsButton.disabledBackgroundColor = ke6e6e6Color
+        smsButton.maxSecond = 60
+        smsButton.updateNormal()
+        smsButton.rx.tap.subscribe(onNext: { [weak self] (data) in
+            if (self?.phoneNumber.count)! < 11 || (self?.phoneNumber.count)! > 11 {
+                SwiftProgressHUD.shared().showText("手机号码格式错误,请重新输入!", textAlignment: .left)
+                return
+            }
+            if let sendSmSBlock = self?.sendSmSBlock {
+                sendSmSBlock(smsButton, (self?.phoneNumber)!)
+            }
+            
+        }).disposed(by: disposeBag)
+        return smsButton
+    }()
+
+    private lazy var smsTextField : UITextField = {
+        let smsTextField = UITextField()
+        smsTextField.placeholder = "验证码"
+        smsTextField.borderStyle = .none
+        smsTextField.textColor = k666666Color
+        smsTextField.font = kScaleRegularFont16
+        smsTextField.sizeToFit()
+        smsTextField.keyboardType = .numberPad
+        smsTextField.tintColor = kFFA42FColor
+        smsTextField.rx.text.changed.subscribe(onNext: { [weak self] (text) in
+            self?.smsTextField.text = String(text?.prefix(6) ?? "") as String
+            self?.sms = self?.smsTextField.text ?? ""
+            self?.observableString()
+        }).disposed(by: disposeBag)
+
+        return smsTextField
+    }()
+
+    private lazy var loginButton: UIButton = {
+        let loginButton = UIButton(type: UIButton.ButtonType.custom)
+        loginButton.setTitle("登录", for: UIControl.State.normal)
+        loginButton.setTitleColor(kffffffColor, for: UIControl.State.normal)
+        loginButton.setTitleColor(k666666Color, for: UIControl.State.disabled)
+        loginButton.setBackgroundImage(UIImage.imageWithColor(color: kDisabledButtonColor), for: UIControl.State.disabled)
+        loginButton.setBackgroundImage(UIImage.imageWithColor(color: kEnabledButtonColor), for: UIControl.State.normal)
+        loginButton.titleLabel?.font = kScaleRegularFont18
+        loginButton.cornerRadius = kScaleValue(value: 22)
+        loginButton.masksToBounds = true
+        loginButton.isEnabled = false
+        loginButton.rx.tap.subscribe(onNext: { [weak self] (data) in
+
+            if let loginBlock = self?.loginBlock {
+                loginBlock((self?.phoneNumber)!,(self?.sms)!)
+            }
+
+        }).disposed(by: disposeBag)
+        return loginButton
+    }()
+
+    func observableString() {
+        Observable.combineLatest(Observable.just(phoneNumber), Observable.just(sms)) { (textValue1, textValue2) -> Bool in
+            let textValue1 = String(textValue1.prefix(11)) as String
+            let textValue2 = String(textValue2.prefix(6)) as String
+            let isSuccess = (textValue1.count == 11) && (textValue2.count == 6)
+            return isSuccess
+            }.subscribe(onNext: {
+                [weak self] isEmpty in
+                self?.loginButton.isEnabled = isEmpty
+            }).disposed(by: self.disposeBag)
+    }
+
+}

+ 30 - 263
RainbowPlanet/RainbowPlanet/Modules/RegisterLoginModule/BindPhoneNumber/ViewController/BindPhoneNumberViewController.swift

@@ -7,288 +7,55 @@
 //
 
 import UIKit
-import RxSwift
-import RxCocoa
 
 class BindPhoneNumberViewController: BaseViewController {
 
-    /// 手机号
-    var phoneNumber : String = ""
-
-    ///
-    var sms : String = ""
-
-    override func viewWillAppear(_ animated: Bool) {
-        super.viewWillAppear(animated)
-        MobClick.beginLogPageView("BindPhoneNumberViewController:绑定手机号页面")
-    }
-
-    override func viewWillDisappear(_ animated: Bool) {
-        super.viewWillDisappear(animated)
-        MobClick.endLogPageView("BindPhoneNumberViewController:绑定手机号页面")
-    }
-
     override func viewDidLoad() {
         super.viewDidLoad()
-        navigationBar.onClickLeftButton = { [weak self] in
-            self?.dismissToRootViewController(animated: true, completion:nil)
-        }
+
         setupViews()
         setupLayouts()
     }
 
     override  func setupViews() {
-        view.addSubview(bindPhoneNumberLabel)
-        view.addSubview(bindPhoneNumberInfoLabel)
-
-        view.addSubview(phoneNumberBgView)
-        phoneNumberBgView.addSubview(linePhoneNumberLabel)
-        phoneNumberBgView.addSubview(phoneAreaCodeLabel)
-        phoneNumberBgView.addSubview(phoneAreaCodeIconImageView)
-        phoneNumberBgView.addSubview(phoneNumberTextField)
-
-        view.addSubview(smsBgView)
-        smsBgView.addSubview(linesmsLabel)
-        smsBgView.addSubview(smsButton)
-        smsBgView.addSubview(smsTextField)
-
-        view.addSubview(bindPhoneNumberButton)
-
+        navigationBar.wr_setLeftButton(image: UIImage())
+        navigationBar.wr_setRightButton(title: "跳过", titleColor: k333333Color)
+        navigationBar.onClickLeftButton = nil
+        navigationBar.onClickRightButton = {
+            [weak self] in
+            
+            self?.navigationController?.pushViewController(LocationViewController(), animated: true)
+        }
+        view.addSubview(bindPhoneNumberView)
     }
 
     override func setupLayouts() {
-        bindPhoneNumberLabel.snp.makeConstraints { (make) in
-            make.top.equalToSuperview().offset(76 + kNavBarTotalHeight)
-            make.left.equalToSuperview().offset(40)
-        }
-        bindPhoneNumberInfoLabel.snp.makeConstraints { (make) in
-            make.top.equalTo(bindPhoneNumberLabel.snp.bottom).offset(6)
-            make.left.equalTo(bindPhoneNumberLabel)
-        }
-        phoneNumberBgView.snp.makeConstraints { (make) in
-            make.left.equalToSuperview().offset(38)
-            make.right.equalToSuperview().offset(-38)
-            make.top.equalTo(bindPhoneNumberInfoLabel.snp.bottom).offset(27)
-            make.height.equalTo(48)
-        }
-        linePhoneNumberLabel.snp.makeConstraints { (make) in
+        bindPhoneNumberView.snp.makeConstraints { (make) in
+            make.top.equalTo(navigationBar.snp.bottom)
             make.left.right.bottom.equalToSuperview()
-            make.height.equalTo(1)
-        }
-
-        phoneAreaCodeLabel.snp.makeConstraints { (make) in
-            make.top.equalToSuperview().offset(6)
-            make.left.equalToSuperview().offset(4)
-            make.bottom.equalToSuperview()
-        }
-
-        phoneAreaCodeIconImageView.snp.makeConstraints { (make) in
-            make.centerY.equalTo(phoneAreaCodeLabel)
-            make.left.equalTo(phoneAreaCodeLabel.snp.right).offset(4)
-            make.width.equalTo(9)
-        }
-
-        phoneNumberTextField.snp.makeConstraints { (make) in
-            make.left.equalTo(phoneAreaCodeIconImageView.snp.right).offset(15)
-            make.top.bottom.equalTo(phoneAreaCodeLabel)
-            make.width.equalTo(kScreenWidth-76-35-phoneAreaCodeLabel.width)
-        }
-
-        smsBgView.snp.makeConstraints { (make) in
-            make.left.height.right.equalTo(phoneNumberBgView)
-            make.top.equalTo(phoneNumberBgView.snp.bottom)
-        }
-        linesmsLabel.snp.makeConstraints { (make) in
-            make.left.right.bottom.equalToSuperview()
-            make.height.equalTo(1)
-        }
-
-        smsButton.snp.makeConstraints { (make) in
-            make.bottom.equalToSuperview().offset(-8)
-            make.height.equalTo(30)
-            make.right.equalToSuperview().offset(-4)
-        }
-        smsTextField.snp.makeConstraints { (make) in
-            make.bottom.top.equalTo(smsButton)
-            make.left.equalTo(phoneAreaCodeLabel)
-            make.width.equalTo(kScreenWidth-76-30-smsButton.width)
-        }
-
-        bindPhoneNumberButton.snp.makeConstraints { (make) in
-            make.top.equalTo(smsBgView.snp.bottom).offset(35)
-            make.height.equalTo(44)
-            make.right.equalToSuperview().offset(-38)
-            make.left.equalToSuperview().offset(38)
         }
     }
 
-    private lazy var bindPhoneNumberLabel: UILabel = {
-        let bindPhoneNumberLabel = UILabel()
-        bindPhoneNumberLabel.text = "绑定手机号"
-        bindPhoneNumberLabel.textColor = k333333Color
-        bindPhoneNumberLabel.font = kBoldFont22
-        return bindPhoneNumberLabel
-    }()
-
-    private lazy var bindPhoneNumberInfoLabel: UILabel = {
-        let bindPhoneNumberInfoLabel = UILabel()
-        bindPhoneNumberInfoLabel.text = "为了账号安全,请绑定手机"
-        bindPhoneNumberInfoLabel.textColor = k666666Color
-        bindPhoneNumberInfoLabel.font = kRegularFont12
-        return bindPhoneNumberInfoLabel
-    }()
-
-    private lazy var phoneNumberBgView: UIView = {
-        let phoneNumberBgView = UIView()
-        return phoneNumberBgView
-    }()
-
-    private lazy var linePhoneNumberLabel: UILabel = {
-        let linePhoneNumberLabel = UILabel()
-        linePhoneNumberLabel.backgroundColor = ke6e6e6Color
-        return linePhoneNumberLabel
-    }()
-
-    private lazy var phoneAreaCodeLabel: UILabel = {
-        let phoneAreaCodeLabel = UILabel()
-        phoneAreaCodeLabel.text = "+86"
-        phoneAreaCodeLabel.textColor = k333333Color
-        phoneAreaCodeLabel.font = kRegularFont16
-        phoneAreaCodeLabel.sizeToFit()
-        phoneAreaCodeLabel.addTapGesture(1, target: self, action: #selector(phoneAreaCodeAction))
-        return phoneAreaCodeLabel
-    }()
-
-    private lazy var phoneAreaCodeIconImageView : UIImageView = {
-        let phoneAreaCodeIconImageView = UIImageView()
-        phoneAreaCodeIconImageView.image = kImage(name: "navigaitionbar_back_black")
-        phoneAreaCodeIconImageView.addTapGesture(1, target: self, action: #selector(phoneAreaCodeAction))
-        return phoneAreaCodeIconImageView
-    }()
-
-    private lazy var phoneNumberTextField : UITextField = {
-        let phoneNumberTextField = UITextField()
-        phoneNumberTextField.placeholder = "手机号码"
-        phoneNumberTextField.borderStyle = .none
-        phoneNumberTextField.textColor = k666666Color
-        phoneNumberTextField.font = kRegularFont16
-        phoneNumberTextField.clearButtonMode = .whileEditing
-        phoneNumberTextField.sizeToFit()
-        phoneNumberTextField.keyboardType = .numberPad
-        phoneNumberTextField.rx.text.changed.subscribe(onNext: { [weak self] (text) in
-            self?.phoneNumberTextField.text = String(text?.prefix(11) ?? "") as String
-            self?.phoneNumber = self?.phoneNumberTextField.text ?? ""
-            self?.observableString()
-        }).disposed(by: disposeBag)
-        return phoneNumberTextField
-    }()
-
-    private lazy var smsBgView: UIView = {
-        let smsBgView = UIView()
-        return smsBgView
-    }()
-
-    private lazy var linesmsLabel: UILabel = {
-        let linesmsLabel = UILabel()
-        linesmsLabel.backgroundColor = ke6e6e6Color
-        return linesmsLabel
-    }()
-
-    private lazy var smsButton: CountdownButton = {
-        let smsButton = CountdownButton(type: UIButton.ButtonType.custom)
-        smsButton.normalText = "  获取验证码  "
-        smsButton.disabledText = "  seconds后重新获取  "
-        smsButton.setTitle(smsButton.normalText, for: UIControl.State.normal)
-        smsButton.setTitle(smsButton.disabledText, for: UIControl.State.disabled)
-        smsButton.setTitleColor(kED3934Color, for: UIControl.State.normal)
-        smsButton.setTitleColor(k333333Color, for: UIControl.State.disabled)
-        smsButton.titleLabel?.font = kRegularFont12
-        smsButton.contentHorizontalAlignment = UIControl.ContentHorizontalAlignment.center
-        smsButton.sizeToFit()
-        smsButton.normalBorderColor = kED3934Color
-        smsButton.normalBorderWidth = 0.5
-        smsButton.normalCornerRadius = 15
-        smsButton.normalBackgroundColor = UIColor.white
-        smsButton.disabledBorderColor = ke6e6e6Color
-        smsButton.disabledBorderWidth = 0.5
-        smsButton.disabledCornerRadius = 15
-        smsButton.disabledBackgroundColor = ke6e6e6Color
-        smsButton.maxSecond = 60
-        smsButton.updateNormal()
-        smsButton.addTarget(self, action: #selector(smsAction), for: UIControl.Event.touchUpInside)
-        return smsButton
-    }()
-
-    private lazy var smsTextField : UITextField = {
-        let smsTextField = UITextField()
-        smsTextField.placeholder = "验证码"
-        smsTextField.borderStyle = .none
-        smsTextField.textColor = k666666Color
-        smsTextField.font = kRegularFont16
-        smsTextField.sizeToFit()
-        smsTextField.keyboardType = .numberPad
-        smsTextField.rx.text.changed.subscribe(onNext: { [weak self] (text) in
-            self?.smsTextField.text = String(text?.prefix(6) ?? "") as String
-            self?.sms = self?.smsTextField.text ?? ""
-            self?.observableString()
-        }).disposed(by: disposeBag)
-
-        return smsTextField
-    }()
-
-    private lazy var bindPhoneNumberButton: UIButton = {
-        let bindPhoneNumberButton = UIButton(type: UIButton.ButtonType.custom)
-        bindPhoneNumberButton.setTitle("立即绑定", for: UIControl.State.normal)
-        bindPhoneNumberButton.setTitleColor(kffffffColor, for: UIControl.State.normal)
-        bindPhoneNumberButton.setTitleColor(k666666Color, for: UIControl.State.disabled)
-        bindPhoneNumberButton.setBackgroundImage(UIImage.imageWithColor(color: kDisabledButtonColor), for: UIControl.State.disabled)
-        bindPhoneNumberButton.setBackgroundImage(UIImage.imageWithColor(color: kEnabledButtonColor), for: UIControl.State.normal)
-        bindPhoneNumberButton.titleLabel?.font = kRegularFont18
-        bindPhoneNumberButton.cornerRadius = 22
-        bindPhoneNumberButton.masksToBounds = true
-        bindPhoneNumberButton.isEnabled = false
-        bindPhoneNumberButton.addTarget(self, action: #selector(bindPhoneNumberAction), for: UIControl.Event.touchUpInside)
-        return bindPhoneNumberButton
-    }()
-
-}
-
-
-// MARK: - action
-extension BindPhoneNumberViewController {
-
-    /// 区域号选择
-    @objc func phoneAreaCodeAction() {
-        let vc = PhoneCountryAreaViewController()
-        vc.phoneCountryAreaVCCloSure = { [weak self] (phoneCountryAreaMdoel:PhoneCountryAreaMdoel) in
-            self?.phoneAreaCodeLabel.text = phoneCountryAreaMdoel.countryCode
+    private lazy var bindPhoneNumberView: BindPhoneNumberView = {
+        let bindPhoneNumberView = BindPhoneNumberView()
+        bindPhoneNumberView.sendSmSBlock = {
+            (sendSmsButton,phoneNumber) in
+            SwiftMoyaNetWorkServiceSMS.shared().smsSendSMSApi(mobile: phoneNumber, appNameType: AppNameType.app, sendType: SendType.ali, smsType: SMSType.account_login, completion: {_ in
+                sendSmsButton.countdown = true
+            })
         }
-        self.present(vc, animated: true) {
-
+        bindPhoneNumberView.loginBlock = {
+            (phoneNumber,sms) in
+            SwiftMoyaNetWorkServiceUser.shared().userBindMobileApi(mobile: phoneNumber, smsCode: sms, completion: { [weak self] (data) -> (Void) in
+//                AlertSheetView.alert(title: "获取你的位置信息", detailTitle: "你的位置信息将帮助彩虹星球展示离你最近的门店", cancelTitle: "拒绝", sureTitle: "允许", cancelBlock: { (popupView, Int, string) in
+//
+//                }, confirmBlock: { (popupView, Int, string) in
+//
+//                })
+            })
         }
-    }
-
-    /// 获取验证
-    @objc func smsAction() {
-        smsButton.countdown = true
-    }
+        return bindPhoneNumberView
+    }()
 
-    /// 立即绑定
-    @objc func bindPhoneNumberAction() {
-//        SwiftProgressHUD.shared().showText("手机号绑定成功")
-        self.dismissToRootViewController(animated: true) {
-        }
-    }
 
-    func observableString() {
-        Observable.combineLatest(Observable.just(phoneNumber), Observable.just(sms)) { (textValue1, textValue2) -> Bool in
-            let textValue1 = String(textValue1.prefix(11)) as String
-            let textValue2 = String(textValue2.prefix(6)) as String
-            let isSuccess = (textValue1.count == 11) && (textValue2.count == 6)
-            return isSuccess
-            }.subscribe(onNext: {
-                [weak self] isEmpty in
-                self?.bindPhoneNumberButton.isEnabled = isEmpty
-            }).disposed(by: self.disposeBag)
-    }
 }

+ 269 - 0
RainbowPlanet/RainbowPlanet/Modules/RegisterLoginModule/MobileLogin/View/MobileLoginView.swift

@@ -0,0 +1,269 @@
+//
+//  MobileLoginView.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/4/17.
+//  Copyright © 2019 南鑫林. All rights reserved.
+//
+
+import UIKit
+import RxSwift
+import RxCocoa
+
+class MobileLoginView: BaseView {
+
+    /// 手机号
+    var phoneNumber : String = ""
+
+    /// 验证码
+    var sms : String = ""
+
+    typealias SendSmSBlock = (_ smsButton: CountdownButton,_ phoneNumber : String) -> Void
+    var sendSmSBlock : SendSmSBlock?
+
+    typealias LoginBlock = (_ phoneNumber : String ,_ sms : String) -> Void
+    var loginBlock : LoginBlock?
+
+    typealias PasswordLoginBlock = () -> Void
+    var passwordLoginBlock : PasswordLoginBlock?
+
+    override func setupViews() {
+        addSubview(bindPhoneNumberLabel)
+
+        addSubview(phoneNumberBgView)
+        phoneNumberBgView.addSubview(linePhoneNumberLabel)
+        phoneNumberBgView.addSubview(phoneAreaCodeLabel)
+        phoneNumberBgView.addSubview(phoneNumberTextField)
+
+        addSubview(smsBgView)
+        smsBgView.addSubview(linesmsLabel)
+        smsBgView.addSubview(smsButton)
+        smsBgView.addSubview(smsTextField)
+
+        addSubview(loginButton)
+        addSubview(passwordLoginButton)
+    }
+
+    override func setupLayouts() {
+        bindPhoneNumberLabel.snp.makeConstraints { (make) in
+            make.top.equalToSuperview().offset(kScaleValue(value: 75))
+            make.left.equalToSuperview().offset(kScaleValue(value: 38))
+        }
+
+        phoneNumberBgView.snp.makeConstraints { (make) in
+            make.left.equalToSuperview().offset(kScaleValue(value: 38))
+            make.right.equalToSuperview().offset(kScaleValue(value: -38))
+            make.top.equalTo(bindPhoneNumberLabel.snp.bottom).offset(kScaleValue(value: 50))
+            make.height.equalTo(kScaleValue(value: 48))
+        }
+        linePhoneNumberLabel.snp.makeConstraints { (make) in
+            make.left.right.bottom.equalToSuperview()
+            make.height.equalTo(0.5)
+        }
+
+        phoneAreaCodeLabel.snp.makeConstraints { (make) in
+            make.top.equalToSuperview().offset(kScaleValue(value: 6))
+            make.left.equalToSuperview().offset(kScaleValue(value: 4))
+            make.bottom.equalToSuperview()
+        }
+
+        phoneNumberTextField.snp.makeConstraints { (make) in
+            make.left.equalTo(phoneAreaCodeLabel.snp.right).offset(kScaleValue(value: 30))
+            make.top.bottom.equalTo(phoneAreaCodeLabel)
+            make.width.equalTo(kScreenWidth-kScaleValue(value: 76+34+30))
+        }
+
+        smsBgView.snp.makeConstraints { (make) in
+            make.left.height.right.equalTo(phoneNumberBgView)
+            make.top.equalTo(phoneNumberBgView.snp.bottom)
+        }
+        linesmsLabel.snp.makeConstraints { (make) in
+            make.left.right.bottom.equalToSuperview()
+            make.height.equalTo(0.5)
+        }
+
+        smsButton.snp.makeConstraints { (make) in
+            make.bottom.equalToSuperview().offset(kScaleValue(value: -8))
+            make.height.equalTo(kScaleValue(value: 30))
+            make.right.equalToSuperview().offset(kScaleValue(value: -4))
+        }
+        smsTextField.snp.makeConstraints { (make) in
+            make.bottom.top.equalTo(smsButton)
+            make.left.equalTo(phoneAreaCodeLabel)
+            make.width.equalTo(kScreenWidth - kScaleValue(value: 76 + 30 + smsButton.width))
+        }
+
+        loginButton.snp.makeConstraints { (make) in
+            make.top.equalTo(smsBgView.snp.bottom).offset(kScaleValue(value: 35))
+            make.height.equalTo(kScaleValue(value:44))
+            make.left.equalToSuperview().offset(kScaleValue(value: 38))
+            make.right.equalToSuperview().offset(kScaleValue(value: -38))
+        }
+
+        passwordLoginButton.snp.makeConstraints { (make) in
+            make.top.equalTo(loginButton.snp.bottom).offset(20)
+            make.centerX.equalToSuperview()
+        }
+    }
+
+    private lazy var bindPhoneNumberLabel: UILabel = {
+        let bindPhoneNumberLabel = UILabel()
+        bindPhoneNumberLabel.text = "手机验证登录"
+        bindPhoneNumberLabel.textColor = k333333Color
+        bindPhoneNumberLabel.font = kScaleBoldFont22
+        return bindPhoneNumberLabel
+    }()
+
+    private lazy var phoneNumberBgView: UIView = {
+        let phoneNumberBgView = UIView()
+        return phoneNumberBgView
+    }()
+
+    private lazy var linePhoneNumberLabel: UILabel = {
+        let linePhoneNumberLabel = UILabel()
+        linePhoneNumberLabel.backgroundColor = ke6e6e6Color
+        return linePhoneNumberLabel
+    }()
+
+    private lazy var phoneAreaCodeLabel: UILabel = {
+        let phoneAreaCodeLabel = UILabel()
+        phoneAreaCodeLabel.text = "+86"
+        phoneAreaCodeLabel.textColor = k333333Color
+        phoneAreaCodeLabel.font = kScaleRegularFont16
+        phoneAreaCodeLabel.sizeToFit()
+        return phoneAreaCodeLabel
+    }()
+
+    private lazy var phoneNumberTextField : UITextField = {
+        let phoneNumberTextField = UITextField()
+        phoneNumberTextField.placeholder = "手机号码"
+        phoneNumberTextField.borderStyle = .none
+        phoneNumberTextField.textColor = k666666Color
+        phoneNumberTextField.font = kScaleRegularFont16
+        phoneNumberTextField.clearButtonMode = .whileEditing
+        phoneNumberTextField.sizeToFit()
+        phoneNumberTextField.keyboardType = .numberPad
+        phoneNumberTextField.tintColor = kFFA42FColor
+
+        phoneNumberTextField.rx.text.changed.subscribe(onNext: { [weak self] (text) in
+            self?.phoneNumberTextField.text = String(text?.prefix(11) ?? "") as String
+            self?.phoneNumber = self?.phoneNumberTextField.text ?? ""
+            self?.observableString()
+        }).disposed(by: disposeBag)
+        return phoneNumberTextField
+    }()
+
+    private lazy var smsBgView: UIView = {
+        let smsBgView = UIView()
+        return smsBgView
+    }()
+
+    private lazy var linesmsLabel: UILabel = {
+        let linesmsLabel = UILabel()
+        linesmsLabel.backgroundColor = ke6e6e6Color
+        return linesmsLabel
+    }()
+
+    private lazy var smsButton: CountdownButton = {
+        let smsButton = CountdownButton(type: UIButton.ButtonType.custom)
+        smsButton.normalText = "  获取验证码  "
+        smsButton.disabledText = "  seconds后重新获取  "
+        smsButton.setTitle(smsButton.normalText, for: UIControl.State.normal)
+        smsButton.setTitle(smsButton.disabledText, for: UIControl.State.disabled)
+        smsButton.setTitleColor(kFFA42FColor, for: UIControl.State.normal)
+        smsButton.setTitleColor(k333333Color, for: UIControl.State.disabled)
+        smsButton.titleLabel?.font = kRegularFont12
+        smsButton.contentHorizontalAlignment = UIControl.ContentHorizontalAlignment.center
+        smsButton.sizeToFit()
+        smsButton.normalBorderColor = kFFA42FColor
+        smsButton.normalBorderWidth = 0.5
+        smsButton.normalCornerRadius = kScaleValue(value: 15)
+        smsButton.normalBackgroundColor = UIColor.white
+        smsButton.disabledBorderColor = ke6e6e6Color
+        smsButton.disabledBorderWidth = 0.5
+        smsButton.disabledCornerRadius = kScaleValue(value: 15)
+        smsButton.disabledBackgroundColor = ke6e6e6Color
+        smsButton.maxSecond = 60
+        smsButton.updateNormal()
+        smsButton.rx.tap.subscribe(onNext: { [weak self] (data) in
+            if (self?.phoneNumber.count)! < 11 || (self?.phoneNumber.count)! > 11 {
+                SwiftProgressHUD.shared().showText("手机号码格式错误, \n请重新输入!", textAlignment: .left)
+                return
+            }
+            if let sendSmSBlock = self?.sendSmSBlock {
+                sendSmSBlock(smsButton, (self?.phoneNumber)!)
+            }
+
+        }).disposed(by: disposeBag)
+        return smsButton
+    }()
+
+    private lazy var smsTextField : UITextField = {
+        let smsTextField = UITextField()
+        smsTextField.placeholder = "验证码"
+        smsTextField.borderStyle = .none
+        smsTextField.textColor = k666666Color
+        smsTextField.font = kScaleRegularFont16
+        smsTextField.sizeToFit()
+        smsTextField.keyboardType = .numberPad
+        smsTextField.tintColor = kFFA42FColor
+
+        smsTextField.rx.text.changed.subscribe(onNext: { [weak self] (text) in
+            self?.smsTextField.text = String(text?.prefix(6) ?? "") as String
+            self?.sms = self?.smsTextField.text ?? ""
+            self?.observableString()
+        }).disposed(by: disposeBag)
+
+        return smsTextField
+    }()
+
+    private lazy var loginButton: UIButton = {
+        let loginButton = UIButton(type: UIButton.ButtonType.custom)
+        loginButton.setTitle("登录", for: UIControl.State.normal)
+        loginButton.setTitleColor(kffffffColor, for: UIControl.State.normal)
+        loginButton.setTitleColor(k666666Color, for: UIControl.State.disabled)
+        loginButton.setBackgroundImage(UIImage.imageWithColor(color: kDisabledButtonColor), for: UIControl.State.disabled)
+        loginButton.setBackgroundImage(UIImage.imageWithColor(color: kEnabledButtonColor), for: UIControl.State.normal)
+        loginButton.titleLabel?.font = kScaleRegularFont18
+        loginButton.cornerRadius = kScaleValue(value: 22)
+        loginButton.masksToBounds = true
+        loginButton.isEnabled = false
+        loginButton.rx.tap.subscribe(onNext: { [weak self] (data) in
+
+            if let loginBlock = self?.loginBlock {
+                loginBlock((self?.phoneNumber)!,(self?.sms)!)
+            }
+
+        }).disposed(by: disposeBag)
+        return loginButton
+    }()
+
+    private lazy var passwordLoginButton: UIButton = {
+        let passwordLoginButton = UIButton(type: UIButton.ButtonType.custom)
+        passwordLoginButton.setTitle("密码登录", for: UIControl.State.normal)
+        passwordLoginButton.setTitleColor(k1C2443Color, for: UIControl.State.normal)
+        passwordLoginButton.titleLabel?.font = kScaleRegularFont14
+        passwordLoginButton.rx.tap.subscribe(onNext: { [weak self] (data) in
+            if let passwordLoginBlock = self?.passwordLoginBlock {
+                passwordLoginBlock()
+            }
+        }).disposed(by: disposeBag)
+        return passwordLoginButton
+    }()
+
+
+
+    func observableString() {
+        Observable.combineLatest(Observable.just(phoneNumber), Observable.just(sms)) { (textValue1, textValue2) -> Bool in
+            let textValue1 = String(textValue1.prefix(11)) as String
+            let textValue2 = String(textValue2.prefix(6)) as String
+            let isSuccess = (textValue1.count == 11) && (textValue2.count == 6)
+            return isSuccess
+            }.subscribe(onNext: {
+                [weak self] isEmpty in
+                self?.loginButton.isEnabled = isEmpty
+            }).disposed(by: self.disposeBag)
+    }
+
+}
+

+ 61 - 0
RainbowPlanet/RainbowPlanet/Modules/RegisterLoginModule/MobileLogin/ViewController/MobileLoginViewController.swift

@@ -0,0 +1,61 @@
+//
+//  MobileLoginViewController.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/3/27.
+//  Copyright © 2019 南鑫林. All rights reserved.
+//
+
+import UIKit
+import RxSwift
+import RxCocoa
+
+class MobileLoginViewController: BaseViewController {
+
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        setupViews()
+        setupLayouts()
+    }
+
+    override  func setupViews() {
+        view.addSubview(mobileLoginView)
+    }
+
+    override func setupLayouts() {
+        mobileLoginView.snp.makeConstraints { (make) in
+            make.top.equalTo(navigationBar.snp.bottom)
+            make.left.right.bottom.equalToSuperview()
+        }
+    }
+
+    private lazy var  mobileLoginView: MobileLoginView = {
+        let mobileLoginView = MobileLoginView()
+        //获取验证
+        mobileLoginView.sendSmSBlock = {
+            (sendSmsButton,phoneNumber) in
+            SwiftMoyaNetWorkServiceSMS.shared().smsSendSMSApi(mobile: phoneNumber, appNameType: AppNameType.app, sendType: SendType.ali, smsType: SMSType.account_login, completion: {_ in
+                sendSmsButton.countdown = true
+            })
+        }
+        // 登录
+        mobileLoginView.loginBlock = {
+            (phoneNumber,sms) in
+            SwiftMoyaNetWorkServiceUser.shared().userBindMobileApi(mobile: phoneNumber, smsCode: sms, completion: { [weak self] (data) -> (Void) in
+                //                AlertSheetView.alert(title: "获取你的位置信息", detailTitle: "你的位置信息将帮助彩虹星球展示离你最近的门店", cancelTitle: "拒绝", sureTitle: "允许", cancelBlock: { (popupView, Int, string) in
+                //
+                //                }, confirmBlock: { (popupView, Int, string) in
+                //
+                //                })
+            })
+        }
+        //密码登录
+        mobileLoginView.passwordLoginBlock = {
+            [weak self] in
+            self?.navigationController?.pushViewController(PasswordLoginViewController(), animated: true)
+        }
+        return mobileLoginView
+    }()
+
+
+}

+ 243 - 0
RainbowPlanet/RainbowPlanet/Modules/RegisterLoginModule/PasswordLogin/View/PasswordLoginView.swift

@@ -0,0 +1,243 @@
+//
+//  PasswordLoginView.swift
+//  RainbowPlanet
+//
+//  Created by 南鑫林 on 2019/4/17.
+//  Copyright © 2019 南鑫林. All rights reserved.
+//
+
+import UIKit
+import RxSwift
+import RxCocoa
+
+class PasswordLoginView: BaseView {
+
+    /// 手机号
+    var phoneNumber : String = ""
+
+    /// 密码
+    var password : String = ""
+
+    typealias LoginBlock = (_ phoneNumber : String ,_ sms : String) -> Void
+    var loginBlock : LoginBlock?
+
+    typealias ForgetPasswordBlock = () -> Void
+    var forgetPasswordBlock : ForgetPasswordBlock?
+
+    override func setupViews() {
+        addSubview(bindPhoneNumberLabel)
+
+        addSubview(phoneNumberBgView)
+        phoneNumberBgView.addSubview(linePhoneNumberLabel)
+        phoneNumberBgView.addSubview(phoneAreaCodeLabel)
+        phoneNumberBgView.addSubview(phoneNumberTextField)
+
+        addSubview(passwordBgView)
+        passwordBgView.addSubview(linesmsLabel)
+        passwordBgView.addSubview(saftButton)
+        passwordBgView.addSubview(passwordTextField)
+
+        addSubview(loginButton)
+        addSubview(forgetPasswordButton)
+    }
+
+    override func setupLayouts() {
+        bindPhoneNumberLabel.snp.makeConstraints { (make) in
+            make.top.equalToSuperview().offset(kScaleValue(value: 75))
+            make.left.equalToSuperview().offset(kScaleValue(value: 38))
+        }
+
+        phoneNumberBgView.snp.makeConstraints { (make) in
+            make.left.equalToSuperview().offset(kScaleValue(value: 38))
+            make.right.equalToSuperview().offset(kScaleValue(value: -38))
+            make.top.equalTo(bindPhoneNumberLabel.snp.bottom).offset(kScaleValue(value: 50))
+            make.height.equalTo(kScaleValue(value: 48))
+        }
+        linePhoneNumberLabel.snp.makeConstraints { (make) in
+            make.left.right.bottom.equalToSuperview()
+            make.height.equalTo(0.5)
+        }
+
+        phoneAreaCodeLabel.snp.makeConstraints { (make) in
+            make.top.equalToSuperview().offset(kScaleValue(value: 6))
+            make.left.equalToSuperview().offset(kScaleValue(value: 4))
+            make.bottom.equalToSuperview()
+        }
+
+        phoneNumberTextField.snp.makeConstraints { (make) in
+            make.left.equalTo(phoneAreaCodeLabel.snp.right).offset(kScaleValue(value: 30))
+            make.top.bottom.equalTo(phoneAreaCodeLabel)
+            make.width.equalTo(kScreenWidth-kScaleValue(value: 76+34+30))
+        }
+
+        passwordBgView.snp.makeConstraints { (make) in
+            make.left.height.right.equalTo(phoneNumberBgView)
+            make.top.equalTo(phoneNumberBgView.snp.bottom)
+        }
+        linesmsLabel.snp.makeConstraints { (make) in
+            make.left.right.bottom.equalToSuperview()
+            make.height.equalTo(0.5)
+        }
+
+        saftButton.snp.makeConstraints { (make) in
+            make.bottom.equalToSuperview().offset(kScaleValue(value: -4))
+            make.height.equalTo(kScaleValue(value: 30))
+            make.width.equalTo(kScaleValue(value: 18))
+            make.right.equalToSuperview().offset(kScaleValue(value: -4))
+        }
+        passwordTextField.snp.makeConstraints { (make) in
+            make.centerY.height.equalTo(saftButton)
+            make.left.equalTo(phoneAreaCodeLabel)
+            make.right.equalTo(saftButton.snp.left).offset(-10)
+        }
+
+        loginButton.snp.makeConstraints { (make) in
+            make.top.equalTo(passwordBgView.snp.bottom).offset(kScaleValue(value: 35))
+            make.height.equalTo(kScaleValue(value:44))
+            make.left.equalToSuperview().offset(kScaleValue(value: 38))
+            make.right.equalToSuperview().offset(kScaleValue(value: -38))
+        }
+
+        forgetPasswordButton.snp.makeConstraints { (make) in
+            make.top.equalTo(loginButton.snp.bottom).offset(20)
+            make.centerX.equalToSuperview()
+        }
+    }
+
+    private lazy var bindPhoneNumberLabel: UILabel = {
+        let bindPhoneNumberLabel = UILabel()
+        bindPhoneNumberLabel.text = "手机验证登录"
+        bindPhoneNumberLabel.textColor = k333333Color
+        bindPhoneNumberLabel.font = kScaleBoldFont22
+        return bindPhoneNumberLabel
+    }()
+
+    private lazy var phoneNumberBgView: UIView = {
+        let phoneNumberBgView = UIView()
+        return phoneNumberBgView
+    }()
+
+    private lazy var linePhoneNumberLabel: UILabel = {
+        let linePhoneNumberLabel = UILabel()
+        linePhoneNumberLabel.backgroundColor = ke6e6e6Color
+        return linePhoneNumberLabel
+    }()
+
+    private lazy var phoneAreaCodeLabel: UILabel = {
+        let phoneAreaCodeLabel = UILabel()
+        phoneAreaCodeLabel.text = "+86"
+        phoneAreaCodeLabel.textColor = k333333Color
+        phoneAreaCodeLabel.font = kScaleRegularFont16
+        phoneAreaCodeLabel.sizeToFit()
+        return phoneAreaCodeLabel
+    }()
+
+    private lazy var phoneNumberTextField : UITextField = {
+        let phoneNumberTextField = UITextField()
+        phoneNumberTextField.placeholder = "手机号码"
+        phoneNumberTextField.borderStyle = .none
+        phoneNumberTextField.textColor = k666666Color
+        phoneNumberTextField.font = kScaleRegularFont16
+        phoneNumberTextField.clearButtonMode = .whileEditing
+        phoneNumberTextField.sizeToFit()
+        phoneNumberTextField.keyboardType = .numberPad
+        phoneNumberTextField.tintColor = kFFA42FColor
+        phoneNumberTextField.rx.text.changed.subscribe(onNext: { [weak self] (text) in
+            self?.phoneNumberTextField.text = String(text?.prefix(11) ?? "") as String
+            self?.phoneNumber = self?.phoneNumberTextField.text ?? ""
+            self?.observableString()
+        }).disposed(by: disposeBag)
+        return phoneNumberTextField
+    }()
+
+    private lazy var passwordBgView: UIView = {
+        let passwordBgView = UIView()
+        return passwordBgView
+    }()
+
+    private lazy var linesmsLabel: UILabel = {
+        let linesmsLabel = UILabel()
+        linesmsLabel.backgroundColor = ke6e6e6Color
+        return linesmsLabel
+    }()
+
+    private lazy var saftButton: UIButton = {
+        let saftButton = UIButton(type: UIButton.ButtonType.custom)
+        saftButton.setImage(kImage(name: "login_show"), for: UIControl.State.normal)
+        saftButton.setImage(kImage(name: "login_show_pressed"), for: UIControl.State.selected)
+        saftButton.rx.tap.subscribe(onNext: { [weak self] (data) in
+            saftButton.isSelected = !saftButton.isSelected
+            self?.passwordTextField.isSecureTextEntry = saftButton.isSelected
+        }).disposed(by: disposeBag)
+        return saftButton
+    }()
+
+    private lazy var passwordTextField : UITextField = {
+        let passwordTextField = UITextField()
+        passwordTextField.placeholder = "请输入密码"
+        passwordTextField.borderStyle = .none
+        passwordTextField.textColor = k666666Color
+        passwordTextField.font = kScaleRegularFont16
+        passwordTextField.sizeToFit()
+        passwordTextField.isSecureTextEntry = false
+        passwordTextField.clearButtonMode = .whileEditing
+        passwordTextField.tintColor = kFFA42FColor
+
+        passwordTextField.rx.text.changed.subscribe(onNext: { [weak self] (text) in
+            self?.passwordTextField.text = String(text?.prefix(16) ?? "") as String
+            self?.password = self?.passwordTextField.text ?? ""
+            self?.observableString()
+        }).disposed(by: disposeBag)
+
+        return passwordTextField
+    }()
+
+    private lazy var loginButton: UIButton = {
+        let loginButton = UIButton(type: UIButton.ButtonType.custom)
+        loginButton.setTitle("登录", for: UIControl.State.normal)
+        loginButton.setTitleColor(kffffffColor, for: UIControl.State.normal)
+        loginButton.setTitleColor(k666666Color, for: UIControl.State.disabled)
+        loginButton.setBackgroundImage(UIImage.imageWithColor(color: kDisabledButtonColor), for: UIControl.State.disabled)
+        loginButton.setBackgroundImage(UIImage.imageWithColor(color: kEnabledButtonColor), for: UIControl.State.normal)
+        loginButton.titleLabel?.font = kScaleRegularFont18
+        loginButton.cornerRadius = kScaleValue(value: 22)
+        loginButton.masksToBounds = true
+        loginButton.isEnabled = false
+        loginButton.rx.tap.subscribe(onNext: { [weak self] (data) in
+
+            if let loginBlock = self?.loginBlock {
+                loginBlock((self?.phoneNumber)!,(self?.password)!)
+            }
+
+        }).disposed(by: disposeBag)
+        return loginButton
+    }()
+
+    private lazy var forgetPasswordButton: UIButton = {
+        let forgetPasswordButton = UIButton(type: UIButton.ButtonType.custom)
+        forgetPasswordButton.setTitle("忘记密码", for: UIControl.State.normal)
+        forgetPasswordButton.setTitleColor(k1C2443Color, for: UIControl.State.normal)
+        forgetPasswordButton.titleLabel?.font = kScaleRegularFont14
+        forgetPasswordButton.rx.tap.subscribe(onNext: { [weak self] (data) in
+            if let forgetPasswordBlock = self?.forgetPasswordBlock {
+                forgetPasswordBlock()
+            }
+        }).disposed(by: disposeBag)
+        return forgetPasswordButton
+    }()
+
+
+
+    func observableString() {
+        Observable.combineLatest(Observable.just(phoneNumber), Observable.just(password)) { (textValue1, textValue2) -> Bool in
+            let textValue1 = String(textValue1.prefix(11)) as String
+            let textValue2 = String(textValue2.prefix(16)) as String
+            let isSuccess = (textValue1.count == 11) && (textValue2.count >= 6) && (textValue2.count <= 16)
+            return isSuccess
+            }.subscribe(onNext: {
+                [weak self] isEmpty in
+                self?.loginButton.isEnabled = isEmpty
+            }).disposed(by: self.disposeBag)
+    }
+
+}

+ 27 - 82
RainbowPlanet/RainbowPlanet/Modules/RegisterLoginModule/PasswordLogin/ViewController/PasswordLoginViewController.swift

@@ -2,105 +2,50 @@
 //  PasswordLoginViewController.swift
 //  RainbowPlanet
 //
-//  Created by 南鑫林 on 2019/3/27.
+//  Created by 南鑫林 on 2019/4/17.
 //  Copyright © 2019 南鑫林. All rights reserved.
 //
 
 import UIKit
-import RxSwift
-import RxCocoa
 
 class PasswordLoginViewController: BaseViewController {
-
-    @IBOutlet weak var phoneAreaCodeButton: UIButton!
-
-    @IBOutlet weak var phoneNumberTextField: UITextField!
-
-    @IBOutlet weak var passwordField: UITextField!
-
-    @IBOutlet weak var passwordLoginPhoneButton: UIButton!
-
-
-    /// 手机号
-    var phoneNumber : String = ""
-
-    ///
-    var password : String = ""
-
-    override func viewWillAppear(_ animated: Bool) {
-        super.viewWillAppear(animated)
-        MobClick.beginLogPageView("PasswordLoginViewController:手机密码登录")
-    }
-
-    override func viewWillDisappear(_ animated: Bool) {
-        super.viewWillDisappear(animated)
-        MobClick.endLogPageView("PasswordLoginViewController:手机密码登录")
-    }
-
     override func viewDidLoad() {
         super.viewDidLoad()
         setupViews()
+        setupLayouts()
     }
 
-    override func setupViews() {
-
-        navigationBar.wr_setRightButton(title: "验证码登录", titleColor: k333333Color)
-        navigationBar.onClickRightButton = { [weak self] in
-            self?.present(VerificationPhoneViewController(), animated: true, completion: {
-
-            })
-        }
-        
-        passwordLoginPhoneButton.setTitleColor(kffffffColor, for: UIControl.State.normal)
-        passwordLoginPhoneButton.setTitleColor(k666666Color, for: UIControl.State.disabled)
-        passwordLoginPhoneButton.setBackgroundImage(UIImage.imageWithColor(color: kDisabledButtonColor), for: UIControl.State.disabled)
-        passwordLoginPhoneButton.setBackgroundImage(UIImage.imageWithColor(color: kEnabledButtonColor), for: UIControl.State.normal)
-        passwordLoginPhoneButton.titleLabel?.font = kRegularFont18
-        passwordLoginPhoneButton.cornerRadius = 22
-        passwordLoginPhoneButton.masksToBounds = true
-        passwordLoginPhoneButton.isEnabled = false
-
-        phoneNumberTextField.rx.text.changed.subscribe(onNext: { [weak self] (text) in
-            self?.phoneNumberTextField.text = String(text?.prefix(11) ?? "") as String
-            self?.phoneNumber = self?.phoneNumberTextField.text ?? ""
-            self?.observableString()
-        }).disposed(by: disposeBag)
-
-        passwordField.rx.text.changed.subscribe(onNext: { [weak self] (text) in
-            self?.passwordField.text = String(text?.prefix(6) ?? "") as String
-            self?.password = self?.passwordField.text ?? ""
-            self?.observableString()
-        }).disposed(by: disposeBag)
+    override  func setupViews() {
+        view.addSubview(passwordLoginView)
     }
 
-    func observableString() {
-        Observable.combineLatest(Observable.just(phoneNumber), Observable.just(password)) { (textValue1, textValue2) -> Bool in
-            let textValue1 = String(textValue1.prefix(11)) as String
-            let textValue2 = String(textValue2.prefix(6)) as String
-            let isSuccess = (textValue1.count == 11) && (textValue2.count == 6)
-            return isSuccess
-            }.subscribe(onNext: {
-                [weak self] isEmpty in
-                self?.passwordLoginPhoneButton.isEnabled = isEmpty
-            }).disposed(by: self.disposeBag)
+    override func setupLayouts() {
+        passwordLoginView.snp.makeConstraints { (make) in
+            make.top.equalTo(navigationBar.snp.bottom)
+            make.left.right.bottom.equalToSuperview()
+        }
     }
 
-    @IBAction func phoneAreaCodeAction(_ sender: UIButton) {
-        let vc = PhoneCountryAreaViewController()
-        vc.phoneCountryAreaVCCloSure = { [weak self] (phoneCountryAreaMdoel:PhoneCountryAreaMdoel) in
-            self?.phoneAreaCodeButton.setTitle(phoneCountryAreaMdoel.countryCode, for: UIControl.State.normal)
+    private lazy var  passwordLoginView: PasswordLoginView = {
+        let passwordLoginView = PasswordLoginView()
+        // 登录
+        passwordLoginView.loginBlock = {
+            (phoneNumber,sms) in
+            SwiftMoyaNetWorkServiceUser.shared().userBindMobileApi(mobile: phoneNumber, smsCode: sms, completion: { [weak self] (data) -> (Void) in
+                //                AlertSheetView.alert(title: "获取你的位置信息", detailTitle: "你的位置信息将帮助彩虹星球展示离你最近的门店", cancelTitle: "拒绝", sureTitle: "允许", cancelBlock: { (popupView, Int, string) in
+                //
+                //                }, confirmBlock: { (popupView, Int, string) in
+                //
+                //                })
+            })
         }
-        self.present(vc, animated: true) {
-
+        //忘记密码
+        passwordLoginView.forgetPasswordBlock = {
+            [weak self] in
+            self?.navigationController?.popViewController(animated: true)
         }
-    }
+        return passwordLoginView
+    }()
 
-    /// 登录
-    @IBAction  func verificationPhoneNumberAction() {
-        SwiftProgressHUD.shared().showText("手机号绑定成功")
-
-        self.dismissToRootViewController(animated: true) {
-        }
-    }
 
 }

+ 0 - 132
RainbowPlanet/RainbowPlanet/Modules/RegisterLoginModule/PasswordLogin/ViewController/PasswordLoginViewController.xib

@@ -1,132 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
-    <device id="retina6_1" orientation="portrait">
-        <adaptation id="fullscreen"/>
-    </device>
-    <dependencies>
-        <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
-        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
-        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
-    </dependencies>
-    <objects>
-        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="PasswordLoginViewController" customModule="RainbowPlanet" customModuleProvider="target">
-            <connections>
-                <outlet property="passwordField" destination="Rnr-8g-3v3" id="yq7-oN-KpK"/>
-                <outlet property="passwordLoginPhoneButton" destination="h0N-yi-WZR" id="AH6-31-QKN"/>
-                <outlet property="phoneAreaCodeButton" destination="OQA-ID-bcU" id="OfC-DA-09c"/>
-                <outlet property="phoneNumberTextField" destination="MDi-IA-MsI" id="C5h-fC-yp0"/>
-                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
-            </connections>
-        </placeholder>
-        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
-        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
-            <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
-            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-            <subviews>
-                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="手机密码登录" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="GbB-x9-TI1">
-                    <rect key="frame" x="40" y="174" width="134" height="26.5"/>
-                    <fontDescription key="fontDescription" type="boldSystem" pointSize="22"/>
-                    <nil key="textColor"/>
-                    <nil key="highlightedColor"/>
-                </label>
-                <button opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="OQA-ID-bcU">
-                    <rect key="frame" x="40" y="255.5" width="30" height="23"/>
-                    <constraints>
-                        <constraint firstAttribute="height" constant="23" id="LZV-4G-O6h"/>
-                    </constraints>
-                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
-                    <state key="normal" title="+86">
-                        <color key="titleColor" red="0.1529239714" green="0.1529521942" blue="0.15291777249999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                    </state>
-                    <connections>
-                        <action selector="phoneAreaCodeAction:" destination="-1" eventType="touchUpInside" id="bsi-lt-2t3"/>
-                    </connections>
-                </button>
-                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="AXC-eT-swR">
-                    <rect key="frame" x="74" y="256" width="9" height="22"/>
-                    <state key="normal" image="navigaitionbar_back_black"/>
-                </button>
-                <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="249" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="手机号" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="MDi-IA-MsI">
-                    <rect key="frame" x="96" y="257" width="278" height="20"/>
-                    <constraints>
-                        <constraint firstAttribute="width" relation="greaterThanOrEqual" id="bg6-oq-PrE"/>
-                    </constraints>
-                    <nil key="textColor"/>
-                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
-                    <textInputTraits key="textInputTraits" keyboardType="numberPad"/>
-                </textField>
-                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="exQ-CF-oWP">
-                    <rect key="frame" x="38" y="287" width="338" height="1"/>
-                    <color key="backgroundColor" red="0.96070033310000003" green="0.96083813910000004" blue="0.96067017320000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                    <constraints>
-                        <constraint firstAttribute="height" constant="1" id="lih-lw-uxO"/>
-                    </constraints>
-                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
-                    <nil key="textColor"/>
-                    <nil key="highlightedColor"/>
-                </label>
-                <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="249" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入密码" textAlignment="natural" minimumFontSize="17" clearButtonMode="always" translatesAutoresizingMaskIntoConstraints="NO" id="Rnr-8g-3v3">
-                    <rect key="frame" x="40" y="301" width="332" height="30"/>
-                    <constraints>
-                        <constraint firstAttribute="height" constant="30" id="pMg-Cq-a8e"/>
-                    </constraints>
-                    <nil key="textColor"/>
-                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
-                    <textInputTraits key="textInputTraits" keyboardType="numberPad"/>
-                </textField>
-                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aWg-xg-QGQ">
-                    <rect key="frame" x="38" y="341" width="338" height="1"/>
-                    <color key="backgroundColor" red="0.96070033310000003" green="0.96083813910000004" blue="0.96067017320000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                    <constraints>
-                        <constraint firstAttribute="height" constant="1" id="hew-BM-VMD"/>
-                    </constraints>
-                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
-                    <nil key="textColor"/>
-                    <nil key="highlightedColor"/>
-                </label>
-                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="h0N-yi-WZR">
-                    <rect key="frame" x="38" y="377" width="338" height="44"/>
-                    <constraints>
-                        <constraint firstAttribute="height" constant="44" id="aib-bd-jwC"/>
-                    </constraints>
-                    <state key="normal" title="登录"/>
-                    <state key="disabled" title="登录">
-                        <color key="titleColor" red="0.4078049064" green="0.4078676403" blue="0.40779113769999997" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                    </state>
-                    <connections>
-                        <action selector="verificationPhoneNumberAction" destination="-1" eventType="touchUpInside" id="zc0-b1-kb8"/>
-                    </connections>
-                </button>
-            </subviews>
-            <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-            <constraints>
-                <constraint firstItem="h0N-yi-WZR" firstAttribute="trailing" secondItem="aWg-xg-QGQ" secondAttribute="trailing" id="1jZ-Qm-yVi"/>
-                <constraint firstItem="aWg-xg-QGQ" firstAttribute="top" secondItem="Rnr-8g-3v3" secondAttribute="bottom" constant="10" id="778-qx-cZ4"/>
-                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="Rnr-8g-3v3" secondAttribute="trailing" constant="42" id="94g-Kl-QCN"/>
-                <constraint firstItem="h0N-yi-WZR" firstAttribute="top" secondItem="aWg-xg-QGQ" secondAttribute="bottom" constant="35" id="E4f-A0-WrM"/>
-                <constraint firstItem="Rnr-8g-3v3" firstAttribute="top" secondItem="exQ-CF-oWP" secondAttribute="bottom" constant="13" id="EaJ-o6-C8O"/>
-                <constraint firstItem="h0N-yi-WZR" firstAttribute="leading" secondItem="aWg-xg-QGQ" secondAttribute="leading" id="Noq-H2-q2f"/>
-                <constraint firstItem="AXC-eT-swR" firstAttribute="leading" secondItem="OQA-ID-bcU" secondAttribute="trailing" constant="4" id="Q1l-fI-vx0"/>
-                <constraint firstItem="Rnr-8g-3v3" firstAttribute="leading" secondItem="OQA-ID-bcU" secondAttribute="leading" id="S6D-Vw-1Hc"/>
-                <constraint firstItem="aWg-xg-QGQ" firstAttribute="trailing" secondItem="exQ-CF-oWP" secondAttribute="trailing" id="Sh8-kU-lSZ"/>
-                <constraint firstItem="MDi-IA-MsI" firstAttribute="centerY" secondItem="OQA-ID-bcU" secondAttribute="centerY" id="TL8-Uf-Kcd"/>
-                <constraint firstItem="AXC-eT-swR" firstAttribute="centerY" secondItem="OQA-ID-bcU" secondAttribute="centerY" id="ViO-so-Whh"/>
-                <constraint firstItem="exQ-CF-oWP" firstAttribute="trailing" secondItem="MDi-IA-MsI" secondAttribute="trailing" constant="2" id="bJG-lm-gVN"/>
-                <constraint firstItem="exQ-CF-oWP" firstAttribute="top" secondItem="MDi-IA-MsI" secondAttribute="bottom" constant="10" id="cFX-e1-XH7"/>
-                <constraint firstItem="GbB-x9-TI1" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" constant="130" id="eVF-IZ-Ild"/>
-                <constraint firstItem="aWg-xg-QGQ" firstAttribute="leading" secondItem="exQ-CF-oWP" secondAttribute="leading" id="ei7-KZ-tpz"/>
-                <constraint firstItem="OQA-ID-bcU" firstAttribute="top" secondItem="GbB-x9-TI1" secondAttribute="bottom" constant="55" id="gVG-EI-lBG"/>
-                <constraint firstItem="exQ-CF-oWP" firstAttribute="leading" secondItem="OQA-ID-bcU" secondAttribute="leading" constant="-2" id="lG3-vP-aeb"/>
-                <constraint firstAttribute="trailing" secondItem="exQ-CF-oWP" secondAttribute="trailing" constant="38" id="lbF-Oa-ubT"/>
-                <constraint firstItem="GbB-x9-TI1" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="40" id="qjN-sk-EPu"/>
-                <constraint firstItem="OQA-ID-bcU" firstAttribute="leading" secondItem="GbB-x9-TI1" secondAttribute="leading" id="r9K-a9-49y"/>
-                <constraint firstItem="MDi-IA-MsI" firstAttribute="leading" secondItem="AXC-eT-swR" secondAttribute="trailing" constant="13" id="uTH-r9-h3y"/>
-            </constraints>
-            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
-        </view>
-    </objects>
-    <resources>
-        <image name="navigaitionbar_back_black" width="9" height="17"/>
-    </resources>
-</document>

+ 34 - 21
RainbowPlanet/RainbowPlanet/Modules/RegisterLoginModule/RegisterLogin/View/RegisterLoginView.swift

@@ -13,44 +13,48 @@ class RegisterLoginView: BaseView {
     typealias WeiXinLoginBlock = () -> Void
     var weiXinLoginBlock : WeiXinLoginBlock?
 
+    typealias MobileLoginBlock = () -> Void
+    var mobileLoginBlock : MobileLoginBlock?
+
     override func setupViews() {
         addSubview(iconImageView)
         addSubview(weiXinLoginButton)
-        addSubview(phoneNumberLoginButton)
+        addSubview(mobileLoginButton)
     }
 
     override func setupLayouts() {
         iconImageView.snp.makeConstraints { (make) in
-            make.top.equalToSuperview().offset(96 + kNavBarTotalHeight)
+            make.top.equalToSuperview().offset(kScaleValue(value: 96) + kNavBarTotalHeight)
+            make.height.equalTo(kScaleValue(value: 100))
+            make.width.equalTo(kScaleValue(value: 110))
             make.centerX.equalToSuperview()
         }
         weiXinLoginButton.snp.makeConstraints { (make) in
-            make.top.equalTo(iconImageView.snp.bottom).offset(70)
-            make.left.equalToSuperview().offset(38)
-            make.right.equalToSuperview().offset(-38)
-            make.height.equalTo(44)
+            make.top.equalTo(iconImageView.snp.bottom).offset(kScaleValue(value: 74))
+            make.left.equalToSuperview().offset(kScaleValue(value: 38))
+            make.right.equalToSuperview().offset(kScaleValue(value: -38))
+            make.height.equalTo(kScaleValue(value: 44))
         }
-        phoneNumberLoginButton.snp.makeConstraints { (make) in
-            make.top.equalTo(weiXinLoginButton.snp.bottom).offset(14)
-            make.right.equalTo(weiXinLoginButton)
+        mobileLoginButton.snp.makeConstraints { (make) in
+            make.top.equalTo(weiXinLoginButton.snp.bottom).offset(17)
+            make.left.right.height.equalTo(weiXinLoginButton)
         }
-        phoneNumberLoginButton.layoutButton(edgeInsetsStyle: ButtonEdgeInsetsStyle.right, imageTitleSpace: 4)
     }
 
 
     private lazy var iconImageView: UIImageView = {
         let iconImageView = UIImageView()
-        iconImageView.image = kImage(name: "icon")
+        iconImageView.image = kImage(name: "logo")
         return iconImageView
     }()
 
     private lazy var weiXinLoginButton: UIButton = {
         let weiXinLoginButton = UIButton(type: UIButton.ButtonType.custom)
-        weiXinLoginButton.setTitle("微信一键登录", for: UIControl.State.normal)
-        weiXinLoginButton.titleLabel?.font = kRegularFont17
+        weiXinLoginButton.setTitle("微信登录", for: UIControl.State.normal)
+        weiXinLoginButton.titleLabel?.font = kScaleRegularFont18
         weiXinLoginButton.setBackgroundImage(UIImage.imageWithColor(color: kEnabledButtonColor), for: UIControl.State.normal)
         weiXinLoginButton.setTitleColor(kEnabledTitleColor, for: UIControl.State.normal)
-        weiXinLoginButton.layer.cornerRadius = 22
+        weiXinLoginButton.layer.cornerRadius = kScaleValue(value: 22)
         weiXinLoginButton.layer.masksToBounds = true
         weiXinLoginButton.rx.tap.subscribe(onNext: { [weak self] in
             if let weiXinLoginBlock = self?.weiXinLoginBlock {
@@ -60,13 +64,22 @@ class RegisterLoginView: BaseView {
         return weiXinLoginButton
     }()
 
-    private lazy var phoneNumberLoginButton: UIButton = {
-        let phoneNumberLoginButton = UIButton(type: UIButton.ButtonType.custom)
-        phoneNumberLoginButton.setTitle("使用用手机登录", for: UIControl.State.normal)
-        phoneNumberLoginButton.titleLabel?.font = kRegularFont13
-        phoneNumberLoginButton.setImage(UIImage(named: "navigaitionbar_back_blue"), for: UIControl.State.normal)
-        phoneNumberLoginButton.setTitleColor(k666666Color, for: UIControl.State.normal)
-        return phoneNumberLoginButton
+    private lazy var mobileLoginButton: UIButton = {
+        let mobileLoginButton = UIButton(type: UIButton.ButtonType.custom)
+        mobileLoginButton.setTitle("手机登录", for: UIControl.State.normal)
+        mobileLoginButton.titleLabel?.font = kScaleRegularFont18
+        mobileLoginButton.setTitleColor(k333333Color, for: UIControl.State.normal)
+        mobileLoginButton.layer.borderColor = ke6e6e6Color.cgColor
+        mobileLoginButton.layer.borderWidth = 0.5
+        mobileLoginButton.setBackgroundImage(UIImage.imageWithColor(color: kffffffColor), for: UIControl.State.normal)
+        mobileLoginButton.cornerRadius = kScaleValue(value: 22)
+        mobileLoginButton.masksToBounds = true
+        mobileLoginButton.rx.tap.subscribe(onNext: { [weak self] in
+            if let mobileLoginBlock = self?.mobileLoginBlock {
+                mobileLoginBlock()
+            }
+        }).disposed(by: disposeBag)
+        return mobileLoginButton
     }()
 
 }

+ 20 - 6
RainbowPlanet/RainbowPlanet/Modules/RegisterLoginModule/RegisterLogin/ViewController/RegisterLoginViewController.swift

@@ -34,18 +34,32 @@ class RegisterLoginViewController: BaseViewController {
         // 微信注册登录
         registerLoginView.weiXinLoginBlock = { [weak self] in
             UMManager.shared().loginGetUserInfo(platformType: UMSocialPlatformType.wechatSession) { (loginModel) -> (Void) in
-                SwiftMoyaNetWorkServiceUser.shared().userWeiXinRegisterApi(open_id: loginModel.open_id, union_id: loginModel.union_id, avatar: loginModel.avatar, username: loginModel.username, gender: loginModel.gender, completion: { (data) -> (Void) in
-                    if self?.presentingViewController != nil {
-                        self?.dismiss(animated: true, completion: {
-                            kAppDelegate.setTabbarController()
+                SwiftMoyaNetWorkServiceUser.shared().userWeiXinRegisterApi(open_id: loginModel.open_id, union_id: loginModel.union_id, avatar: loginModel.avatar, username: loginModel.username, gender: loginModel.gender, completion: { (loginModel) -> (Void) in
+                    let loginModel =  loginModel as! LoginModel
+                    if (loginModel.mobile != nil && loginModel.mobile != "" ) {
+//                        if self?.presentingViewController != nil {
+//                            self?.dismiss(animated: true, completion: {
+//                                kAppDelegate.setTabbarController()
+//                            })
+//                        } else {
+//                            kAppDelegate.setTabbarController()
+//                        }
+                        
+
+                    }else {
+                        let nav = BaseNavigationViewController.init(rootViewController: BindPhoneNumberViewController())
+                        self?.present(nav, animated: true, completion: {
+
                         })
-                    } else {
-                        kAppDelegate.setTabbarController()
                     }
 
                 })
             }
         }
+        registerLoginView.mobileLoginBlock = {
+            [weak self] in
+            self?.navigationController?.pushViewController(MobileLoginViewController(), animated: true)
+        }
         return registerLoginView
     }()
 

+ 0 - 132
RainbowPlanet/RainbowPlanet/Modules/RegisterLoginModule/VerificationPhone/ViewController/VerificationPhoneViewController.swift

@@ -1,132 +0,0 @@
-//
-//  VerificationPhoneViewController.swift
-//  RainbowPlanet
-//
-//  Created by 南鑫林 on 2019/3/27.
-//  Copyright © 2019 南鑫林. All rights reserved.
-//
-
-import UIKit
-import RxSwift
-import RxCocoa
-
-class VerificationPhoneViewController: BaseViewController {
-
-    @IBOutlet weak var phoneAreaCodeButton: UIButton!
-
-    @IBOutlet weak var smsButton: CountdownButton!
-
-    @IBOutlet weak var verificationPhoneButton: UIButton!
-
-    @IBOutlet weak var phoneNumberTextField: UITextField!
-
-    @IBOutlet weak var smsTextField: UITextField!
-
-    /// 手机号
-    var phoneNumber : String = ""
-
-    ///
-    var sms : String = ""
-
-    override func viewWillAppear(_ animated: Bool) {
-        super.viewWillAppear(animated)
-        MobClick.beginLogPageView("VerificationPhoneViewController:验证手机页面")
-    }
-
-    override func viewWillDisappear(_ animated: Bool) {
-        super.viewWillDisappear(animated)
-        MobClick.endLogPageView("VerificationPhoneViewController:验证手机页面")
-    }
-
-    override func viewDidLoad() {
-        super.viewDidLoad()
-        setupViews()
-    }
-
-    override func setupViews() {
-
-        navigationBar.wr_setRightButton(title: "手机密码登录", titleColor: k333333Color)
-        navigationBar.onClickRightButton = {[weak self] in
-            self?.present(PasswordLoginViewController(), animated: true, completion: {
-                
-            })
-        }
-
-        smsButton.normalText = "  获取验证码  "
-        smsButton.disabledText = "  seconds后重新获取  "
-        smsButton.setTitle(smsButton.normalText, for: UIControl.State.normal)
-        smsButton.setTitle(smsButton.disabledText, for: UIControl.State.disabled)
-        smsButton.setTitleColor(kED3934Color, for: UIControl.State.normal)
-        smsButton.setTitleColor(k333333Color, for: UIControl.State.disabled)
-        smsButton.titleLabel?.font = kRegularFont12
-        smsButton.contentHorizontalAlignment = UIControl.ContentHorizontalAlignment.center
-        smsButton.sizeToFit()
-        smsButton.normalBorderColor = kED3934Color
-        smsButton.normalBorderWidth = 0.5
-        smsButton.normalCornerRadius = 15
-        smsButton.normalBackgroundColor = UIColor.white
-        smsButton.disabledBorderColor = ke6e6e6Color
-        smsButton.disabledBorderWidth = 0.5
-        smsButton.disabledCornerRadius = 15
-        smsButton.disabledBackgroundColor = ke6e6e6Color
-        smsButton.maxSecond = 60
-        smsButton.updateNormal()
-
-        verificationPhoneButton.setTitleColor(kffffffColor, for: UIControl.State.normal)
-        verificationPhoneButton.setTitleColor(k666666Color, for: UIControl.State.disabled)
-        verificationPhoneButton.setBackgroundImage(UIImage.imageWithColor(color: kDisabledButtonColor), for: UIControl.State.disabled)
-        verificationPhoneButton.setBackgroundImage(UIImage.imageWithColor(color: kEnabledButtonColor), for: UIControl.State.normal)
-        verificationPhoneButton.titleLabel?.font = kRegularFont18
-        verificationPhoneButton.cornerRadius = 22
-        verificationPhoneButton.masksToBounds = true
-        verificationPhoneButton.isEnabled = false
-
-        phoneNumberTextField.rx.text.changed.subscribe(onNext: { [weak self] (text) in
-            self?.phoneNumberTextField.text = String(text?.prefix(11) ?? "") as String
-            self?.phoneNumber = self?.phoneNumberTextField.text ?? ""
-            self?.observableString()
-        }).disposed(by: disposeBag)
-
-        smsTextField.rx.text.changed.subscribe(onNext: { [weak self] (text) in
-            self?.smsTextField.text = String(text?.prefix(6) ?? "") as String
-            self?.sms = self?.smsTextField.text ?? ""
-            self?.observableString()
-        }).disposed(by: disposeBag)
-    }
-
-    func observableString() {
-        Observable.combineLatest(Observable.just(phoneNumber), Observable.just(sms)) { (textValue1, textValue2) -> Bool in
-            let textValue1 = String(textValue1.prefix(11)) as String
-            let textValue2 = String(textValue2.prefix(6)) as String
-            let isSuccess = (textValue1.count == 11) && (textValue2.count == 6)
-            return isSuccess
-            }.subscribe(onNext: {
-                [weak self] isEmpty in
-                self?.verificationPhoneButton.isEnabled = isEmpty
-            }).disposed(by: self.disposeBag)
-    }
-
-
-    @IBAction func phoneAreaCodeAction(_ sender: UIButton) {
-        let vc = PhoneCountryAreaViewController()
-        vc.phoneCountryAreaVCCloSure = { [weak self] (phoneCountryAreaMdoel:PhoneCountryAreaMdoel) in
-            self?.phoneAreaCodeButton.setTitle(phoneCountryAreaMdoel.countryCode, for: UIControl.State.normal)
-        }
-        self.present(vc, animated: true) {
-
-        }
-    }
-
-    @IBAction func smsAction(_ sender: CountdownButton) {
-        smsButton.countdown = true
-    }
-
-    /// 立即验证
-    @IBAction  func verificationPhoneNumberAction() {
-
-        self.dismissToRootViewController(animated: true) {
-
-        }
-    }
-
-}

+ 0 - 160
RainbowPlanet/RainbowPlanet/Modules/RegisterLoginModule/VerificationPhone/ViewController/VerificationPhoneViewController.xib

@@ -1,160 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
-    <device id="retina6_1" orientation="portrait">
-        <adaptation id="fullscreen"/>
-    </device>
-    <dependencies>
-        <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
-        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
-        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
-    </dependencies>
-    <objects>
-        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="VerificationPhoneViewController" customModule="RainbowPlanet" customModuleProvider="target">
-            <connections>
-                <outlet property="phoneAreaCodeButton" destination="IOo-UT-Wma" id="DqP-7u-scX"/>
-                <outlet property="phoneNumberTextField" destination="hok-U6-Jpp" id="xPM-cW-2ET"/>
-                <outlet property="smsButton" destination="3hc-O5-000" id="aeh-ze-CuL"/>
-                <outlet property="smsTextField" destination="4bp-Bn-Pg2" id="Nan-o3-2rd"/>
-                <outlet property="verificationPhoneButton" destination="gwS-rH-oAP" id="9Pz-40-bzD"/>
-                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
-            </connections>
-        </placeholder>
-        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
-        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
-            <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
-            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-            <subviews>
-                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="验证手机" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="RVj-0q-UUy">
-                    <rect key="frame" x="40" y="164" width="89.5" height="26.5"/>
-                    <fontDescription key="fontDescription" type="boldSystem" pointSize="22"/>
-                    <nil key="textColor"/>
-                    <nil key="highlightedColor"/>
-                </label>
-                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="为了账号安全,请验证手机" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CWG-xW-WkB">
-                    <rect key="frame" x="40" y="196.5" width="138.5" height="14.5"/>
-                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
-                    <color key="textColor" red="0.52544218301773071" green="0.52552098035812378" blue="0.52542495727539062" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                    <nil key="highlightedColor"/>
-                </label>
-                <button opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="IOo-UT-Wma">
-                    <rect key="frame" x="40" y="254" width="30" height="23"/>
-                    <constraints>
-                        <constraint firstAttribute="height" constant="23" id="KeH-GN-gZa"/>
-                    </constraints>
-                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
-                    <state key="normal" title="+86">
-                        <color key="titleColor" red="0.15292397141456604" green="0.15295219421386719" blue="0.1529177725315094" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                    </state>
-                    <connections>
-                        <action selector="phoneAreaCodeAction:" destination="-1" eventType="touchUpInside" id="5Dr-bU-k3T"/>
-                    </connections>
-                </button>
-                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="pqj-XU-gBa">
-                    <rect key="frame" x="74" y="254.5" width="9" height="22"/>
-                    <state key="normal" image="navigaitionbar_back_black"/>
-                    <connections>
-                        <action selector="phoneAreaCodeAction:" destination="-1" eventType="touchUpInside" id="z3d-bP-hH4"/>
-                    </connections>
-                </button>
-                <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="249" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="手机号" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="hok-U6-Jpp">
-                    <rect key="frame" x="96" y="255.5" width="280" height="20"/>
-                    <constraints>
-                        <constraint firstAttribute="width" relation="greaterThanOrEqual" id="LQm-b8-Gks"/>
-                    </constraints>
-                    <nil key="textColor"/>
-                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
-                    <textInputTraits key="textInputTraits" keyboardType="numberPad"/>
-                </textField>
-                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6ZA-jb-dcL">
-                    <rect key="frame" x="38" y="285.5" width="340" height="1"/>
-                    <color key="backgroundColor" red="0.96070033311843872" green="0.96083813905715942" blue="0.96067017316818237" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                    <constraints>
-                        <constraint firstAttribute="height" constant="1" id="rmF-nQ-4ra"/>
-                    </constraints>
-                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
-                    <nil key="textColor"/>
-                    <nil key="highlightedColor"/>
-                </label>
-                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="3hc-O5-000" customClass="CountdownButton" customModule="RainbowPlanet" customModuleProvider="target">
-                    <rect key="frame" x="280" y="299.5" width="92" height="30"/>
-                    <constraints>
-                        <constraint firstAttribute="height" constant="30" id="fbN-gR-CKn"/>
-                        <constraint firstAttribute="width" relation="greaterThanOrEqual" id="xIQ-4L-d3G"/>
-                    </constraints>
-                    <state key="normal" title="获取验证码">
-                        <color key="titleColor" red="0.94900625944137573" green="0.42618435621261597" blue="0.41407948732376099" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                    </state>
-                    <connections>
-                        <action selector="smsAction:" destination="-1" eventType="touchUpInside" id="SKh-eq-YyC"/>
-                    </connections>
-                </button>
-                <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="249" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="验证码" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="4bp-Bn-Pg2">
-                    <rect key="frame" x="40" y="299.5" width="230" height="30"/>
-                    <nil key="textColor"/>
-                    <fontDescription key="fontDescription" type="system" pointSize="16"/>
-                    <textInputTraits key="textInputTraits" keyboardType="numberPad"/>
-                </textField>
-                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="baU-2G-k7g">
-                    <rect key="frame" x="38" y="339.5" width="340" height="1"/>
-                    <color key="backgroundColor" red="0.96070033310000003" green="0.96083813910000004" blue="0.96067017320000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                    <constraints>
-                        <constraint firstAttribute="height" constant="1" id="l1O-Wr-e3D"/>
-                    </constraints>
-                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
-                    <nil key="textColor"/>
-                    <nil key="highlightedColor"/>
-                </label>
-                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="gwS-rH-oAP">
-                    <rect key="frame" x="38" y="375.5" width="340" height="44"/>
-                    <constraints>
-                        <constraint firstAttribute="height" constant="44" id="PKv-Lc-VaO"/>
-                    </constraints>
-                    <state key="normal" title="立即验证">
-                        <color key="titleColor" red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                    </state>
-                    <state key="disabled" title="立即验证">
-                        <color key="titleColor" red="0.40780490636825562" green="0.40786764025688171" blue="0.4077911376953125" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                    </state>
-                    <connections>
-                        <action selector="verificationPhoneNumberAction" destination="-1" eventType="touchUpInside" id="gUg-Rk-GL6"/>
-                    </connections>
-                </button>
-            </subviews>
-            <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-            <constraints>
-                <constraint firstItem="gwS-rH-oAP" firstAttribute="trailing" secondItem="baU-2G-k7g" secondAttribute="trailing" id="0cg-I6-XTh"/>
-                <constraint firstItem="baU-2G-k7g" firstAttribute="leading" secondItem="6ZA-jb-dcL" secondAttribute="leading" id="0nt-qu-Qwb"/>
-                <constraint firstItem="4bp-Bn-Pg2" firstAttribute="centerY" secondItem="3hc-O5-000" secondAttribute="centerY" id="2xX-cw-F5R"/>
-                <constraint firstItem="gwS-rH-oAP" firstAttribute="leading" secondItem="baU-2G-k7g" secondAttribute="leading" id="6R7-UO-qWT"/>
-                <constraint firstItem="IOo-UT-Wma" firstAttribute="top" secondItem="CWG-xW-WkB" secondAttribute="bottom" constant="43" id="7qV-La-yWE"/>
-                <constraint firstItem="IOo-UT-Wma" firstAttribute="leading" secondItem="CWG-xW-WkB" secondAttribute="leading" id="8UG-A8-rWc"/>
-                <constraint firstItem="RVj-0q-UUy" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="40" id="8by-Jk-bHB"/>
-                <constraint firstItem="pqj-XU-gBa" firstAttribute="leading" secondItem="IOo-UT-Wma" secondAttribute="trailing" constant="4" id="Ayn-Fx-82Q"/>
-                <constraint firstItem="baU-2G-k7g" firstAttribute="top" secondItem="3hc-O5-000" secondAttribute="bottom" constant="10" id="EoG-qx-mPV"/>
-                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="3hc-O5-000" secondAttribute="trailing" constant="42" id="IOf-bJ-uQU"/>
-                <constraint firstItem="CWG-xW-WkB" firstAttribute="leading" secondItem="RVj-0q-UUy" secondAttribute="leading" id="ORj-bn-i8M"/>
-                <constraint firstItem="hok-U6-Jpp" firstAttribute="centerY" secondItem="IOo-UT-Wma" secondAttribute="centerY" id="S6A-zY-CIb"/>
-                <constraint firstItem="6ZA-jb-dcL" firstAttribute="leading" secondItem="IOo-UT-Wma" secondAttribute="leading" constant="-2" id="WZ1-MZ-u2s"/>
-                <constraint firstItem="hok-U6-Jpp" firstAttribute="leading" secondItem="pqj-XU-gBa" secondAttribute="trailing" constant="13" id="X84-L3-iPS"/>
-                <constraint firstItem="baU-2G-k7g" firstAttribute="trailing" secondItem="6ZA-jb-dcL" secondAttribute="trailing" id="azb-Qd-CQu"/>
-                <constraint firstItem="6ZA-jb-dcL" firstAttribute="top" secondItem="hok-U6-Jpp" secondAttribute="bottom" constant="10" id="bEa-Ce-A7m"/>
-                <constraint firstItem="4bp-Bn-Pg2" firstAttribute="height" secondItem="3hc-O5-000" secondAttribute="height" id="eHb-mv-uMb"/>
-                <constraint firstItem="gwS-rH-oAP" firstAttribute="top" secondItem="baU-2G-k7g" secondAttribute="bottom" constant="35" id="fCl-it-zlI"/>
-                <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="hok-U6-Jpp" secondAttribute="trailing" constant="38" id="fGk-ro-dz3"/>
-                <constraint firstItem="pqj-XU-gBa" firstAttribute="centerY" secondItem="IOo-UT-Wma" secondAttribute="centerY" id="hg4-hm-Q8E"/>
-                <constraint firstItem="CWG-xW-WkB" firstAttribute="top" secondItem="RVj-0q-UUy" secondAttribute="bottom" constant="6" id="im9-YW-sRV"/>
-                <constraint firstItem="RVj-0q-UUy" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" constant="120" id="n0M-J5-xrN"/>
-                <constraint firstItem="6ZA-jb-dcL" firstAttribute="trailing" secondItem="hok-U6-Jpp" secondAttribute="trailing" constant="2" id="rVw-ZK-91G"/>
-                <constraint firstItem="3hc-O5-000" firstAttribute="leading" secondItem="4bp-Bn-Pg2" secondAttribute="trailing" constant="10" id="vQy-sH-Z0j"/>
-                <constraint firstItem="3hc-O5-000" firstAttribute="top" secondItem="6ZA-jb-dcL" secondAttribute="bottom" constant="13" id="xA5-W9-EQv"/>
-                <constraint firstItem="4bp-Bn-Pg2" firstAttribute="leading" secondItem="IOo-UT-Wma" secondAttribute="leading" id="zUo-Wo-gk2"/>
-            </constraints>
-            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
-            <point key="canvasLocation" x="147.82608695652175" y="35.491071428571423"/>
-        </view>
-    </objects>
-    <resources>
-        <image name="navigaitionbar_back_black" width="9" height="17"/>
-    </resources>
-</document>

+ 15 - 16
RainbowPlanet/RainbowPlanet/Service/SwiftMoyaService/SwiftMoyaNetWorkManager/ApiMacro.swift

@@ -50,14 +50,7 @@ public func headerParameters(headerType:HeaderType = .defaultHeader) -> Dictiona
         break
     case .moreHeader:
         parameters.updateValue("application/x-www-form-urlencoded", forKey: "Content-Type")
-        parameters.updateValue(AppInfo.vendor, forKey: "vendor")
-        parameters.updateValue(AppInfo.client_name, forKey: "client_name")
-        parameters.updateValue(AppInfo.client_version, forKey: "client_version")
-        parameters.updateValue(AppInfo.os_name, forKey: "os_name")
-        parameters.updateValue(AppInfo.os_version, forKey: "os_version")
-        parameters.updateValue(String(describing: AppInfo.device_name), forKey: "device_name")
-        parameters.updateValue(AppInfo.uuid, forKey: "device_id")
-        parameters.updateValue(AppInfo.ipAddress, forKey: "ip")
+        parameters = appInfoHeader(parameters: parameters)
         break
     case .tokenHeader:
         parameters.updateValue("application/x-www-form-urlencoded", forKey: "Content-Type")
@@ -66,14 +59,7 @@ public func headerParameters(headerType:HeaderType = .defaultHeader) -> Dictiona
         break
     case .tokenMoreHeader:
         parameters.updateValue("application/x-www-form-urlencoded", forKey: "Content-Type")
-        parameters.updateValue(AppInfo.vendor, forKey: "vendor")
-        parameters.updateValue(AppInfo.client_name, forKey: "client_name")
-        parameters.updateValue(AppInfo.client_version, forKey: "client_version")
-        parameters.updateValue(AppInfo.os_name, forKey: "os_name")
-        parameters.updateValue(AppInfo.os_version, forKey: "os_version")
-        parameters.updateValue(String(describing: AppInfo.device_name), forKey: "device_name")
-        parameters.updateValue(AppInfo.uuid, forKey: "device_id")
-        parameters.updateValue(AppInfo.ipAddress, forKey: "ip")
+        parameters = appInfoHeader(parameters: parameters)
         let token = LoginModel.shared().getLoginModel()?.token ?? ""
         parameters.updateValue(token, forKey: "Authorization")
         break
@@ -81,3 +67,16 @@ public func headerParameters(headerType:HeaderType = .defaultHeader) -> Dictiona
 
     return parameters
 }
+
+public func appInfoHeader(parameters:Dictionary<String,Any>) -> Dictionary<String,Any> {
+    var parameters = parameters
+    parameters.updateValue(AppInfo.vendor, forKey: "vendor")
+    parameters.updateValue(AppInfo.clientName.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlFragmentAllowed) as Any, forKey: "clientName")
+    parameters.updateValue(AppInfo.clientVersion, forKey: "clientVersion")
+    parameters.updateValue(AppInfo.osName, forKey: "osName")
+    parameters.updateValue(AppInfo.osVersion, forKey: "osVersion")
+    parameters.updateValue(String(describing: AppInfo.deviceName), forKey: "deviceName")
+    parameters.updateValue(AppInfo.uuid, forKey: "deviceId")
+    parameters.updateValue(AppInfo.ipAddress, forKey: "ip")
+    return parameters
+}

+ 10 - 7
RainbowPlanet/RainbowPlanet/Service/SwiftMoyaService/SwiftMoyaNetWorkManager/SwiftMoyaNetWorkManager.swift

@@ -291,12 +291,13 @@ public class SwiftMoyaNetWorkManager: NSObject {
             if rootModel!.code == 0 {
                  completion(rootModel as Any)
             }else if rootModel!.code  == 1 {
-                SwiftProgressHUD.shared().showError(rootModel!.msg ?? "信息有误!!!")
+                SwiftProgressHUD.shared().showText(rootModel!.msg ?? "信息有误!!!", textAlignment: .left)
                 if let falseCallback = self.falseCallback  {
                     falseCallback()
                 }
             }else {
                 SwiftProgressHUD.shared().showError(rootModel!.msg ?? "信息有误!!!")
+
                 if let falseCallback = self.falseCallback  {
                     falseCallback()
                 }
@@ -306,13 +307,15 @@ public class SwiftMoyaNetWorkManager: NSObject {
             let infoModel = InfoModel(JSONString: json?.description ?? "")
             LoginModel.shared().removeLoginModel()
             kAppDelegate.setLoginController()
-            SwiftProgressHUD.shared().showText(infoModel?.message ?? "")
+            SwiftProgressHUD.shared().showText(infoModel!.message ?? "登录过期,请重新登录")
+
             if let falseCallback = self.falseCallback  {
                 falseCallback()
             }
         } else {
             NXLLog("\nstatusCode=\(response.statusCode)\nerror=\n\(response.description)");
-            SwiftProgressHUD.shared().showError(response.description)
+            SwiftProgressHUD.shared().showText(response.description)
+
             if let falseCallback = self.falseCallback  {
                 falseCallback()
             }
@@ -364,27 +367,27 @@ extension PrimitiveSequence where TraitType == SingleTrait, ElementType == Respo
                         let mapper = T(JSONString:  rootModel!.data ?? "")
                         return Single<T?>.just(mapper)
                     }else if rootModel!.code  == 1 {
-                        SwiftProgressHUD.shared().showError(rootModel!.msg ?? "信息有误!!!")
+                        SwiftProgressHUD.shared().showText(rootModel!.msg ?? "信息有误!!!", textAlignment: .left)
                         return Single<T?>.just(nil)
                     }else {
-                        SwiftProgressHUD.shared().showError(rootModel!.msg ?? "信息有误!!!")
                         return Single<T?>.just(nil)
                     }
                 }else if response.statusCode == 401 {
                     NXLLog("\nstatusCode=\(response.statusCode)\njson=\n\(json.description)");
                     let infoModel = InfoModel(JSONString: json.description)
                     SwiftProgressHUD.shared().showText(infoModel!.message ?? "登录过期,请重新登录")
+
                     LoginModel.shared().removeLoginModel()
                     kAppDelegate.setLoginController()
                     return Single<T?>.just(nil)
                 }else {                NXLLog("\nstatusCode=\(response.statusCode)\nerror=\n\(response.description)");
-                    SwiftProgressHUD.shared().showError(response.description)
+                    SwiftProgressHUD.shared().showText(response.description)
                     return Single<T?>.just(nil)
                 }
 
             } catch {
                 NXLLog("\nstatusCode=\(response.statusCode)\nerror=\n\(response.description)");
-                SwiftProgressHUD.shared().showError(response.description)
+                SwiftProgressHUD.shared().showText(response.description)
                 return Single<T?>.just(nil)
             }
         }

+ 4 - 4
RainbowPlanet/RainbowPlanet/Service/SwiftMoyaService/SwiftMoyaServiceApi/SwiftMoyaServiceSMS/SwiftMoyaServiceSMSApi.swift

@@ -13,7 +13,7 @@ import Moya
 ///
 /// - app: App
 enum AppNameType : String {
-    case app = "APP"
+    case app
 }
 
 
@@ -21,7 +21,7 @@ enum AppNameType : String {
 ///
 /// - ali: 阿里
 enum SendType : String {
-    case ali = "ali"
+    case ali
 }
 
 
@@ -30,8 +30,8 @@ enum SendType : String {
 /// - accountLogin: 用户登录
 /// - accountBind: 用户绑定
 enum SMSType : String {
-    case accountLogin = "account_login"
-    case accountBind = "account_bind"
+    case account_login
+    case account_bind
 }
 
 // MARK: - 发送验证码

+ 1 - 1
RainbowPlanet/RainbowPlanet/Service/SwiftMoyaService/SwiftMoyaServiceApi/SwiftMoyaServiceUser/SwiftMoyaNetWorkServiceUser.swift

@@ -91,7 +91,7 @@ public class SwiftMoyaNetWorkServiceUser: NSObject {
         SwiftMoyaNetWorkManager.shared().request(LoginModel.self,target: MultiTarget(SwiftMoyaServiceUserApi.userWeiXinRegister(parameters: parameters))) { (loginModel) in
             LoginModel.shared().setLoginModel(loginModel: loginModel as! LoginModel)
             SwiftProgressHUD.shared().hide()
-            completion("")
+            completion(LoginModel.shared().getLoginModel() as Any)
         }
     }
 

+ 9 - 63
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/Contents.json

@@ -3,109 +3,55 @@
     {
       "size" : "20x20",
       "idiom" : "iphone",
-      "filename" : "logo-1024iPhoneNotification_20pt@2x.png",
+      "filename" : "iconiPhoneNotification_20pt@2x.png",
       "scale" : "2x"
     },
     {
       "size" : "20x20",
       "idiom" : "iphone",
-      "filename" : "logo-1024iPhoneNotification_20pt@3x.png",
+      "filename" : "iconiPhoneNotification_20pt@3x.png",
       "scale" : "3x"
     },
     {
       "size" : "29x29",
       "idiom" : "iphone",
-      "filename" : "logo-1024iPhoneSpootlight5_29pt@2x.png",
+      "filename" : "iconiPhoneSpootlight5_29pt@2x.png",
       "scale" : "2x"
     },
     {
       "size" : "29x29",
       "idiom" : "iphone",
-      "filename" : "logo-1024iPhoneSpootlight5_29pt@3x.png",
+      "filename" : "iconiPhoneSpootlight5_29pt@3x.png",
       "scale" : "3x"
     },
     {
       "size" : "40x40",
       "idiom" : "iphone",
-      "filename" : "logo-1024iPhoneSpootlight7_40pt@2x.png",
+      "filename" : "iconiPhoneSpootlight7_40pt@2x.png",
       "scale" : "2x"
     },
     {
       "size" : "40x40",
       "idiom" : "iphone",
-      "filename" : "logo-1024iPhoneSpootlight7_40pt@3x.png",
+      "filename" : "iconiPhoneSpootlight7_40pt@3x.png",
       "scale" : "3x"
     },
     {
       "size" : "60x60",
       "idiom" : "iphone",
-      "filename" : "logo-1024iPhoneApp_60pt@2x.png",
+      "filename" : "iconiPhoneApp_60pt@2x.png",
       "scale" : "2x"
     },
     {
       "size" : "60x60",
       "idiom" : "iphone",
-      "filename" : "logo-1024iPhoneApp_60pt@3x.png",
+      "filename" : "iconiPhoneApp_60pt@3x.png",
       "scale" : "3x"
     },
-    {
-      "size" : "20x20",
-      "idiom" : "ipad",
-      "filename" : "logo-1024iPadNotifications_20pt.png",
-      "scale" : "1x"
-    },
-    {
-      "size" : "20x20",
-      "idiom" : "ipad",
-      "filename" : "logo-1024iPadNotifications_20pt@2x.png",
-      "scale" : "2x"
-    },
-    {
-      "size" : "29x29",
-      "idiom" : "ipad",
-      "filename" : "logo-1024iPadSpootlight5_29pt.png",
-      "scale" : "1x"
-    },
-    {
-      "size" : "29x29",
-      "idiom" : "ipad",
-      "filename" : "logo-1024iPadSpootlight5_29pt@2x.png",
-      "scale" : "2x"
-    },
-    {
-      "size" : "40x40",
-      "idiom" : "ipad",
-      "filename" : "logo-1024iPadSpootlight7_40pt.png",
-      "scale" : "1x"
-    },
-    {
-      "size" : "40x40",
-      "idiom" : "ipad",
-      "filename" : "logo-1024iPadSpootlight7_40pt@2x.png",
-      "scale" : "2x"
-    },
-    {
-      "size" : "76x76",
-      "idiom" : "ipad",
-      "filename" : "logo-1024iPadApp_76pt.png",
-      "scale" : "1x"
-    },
-    {
-      "size" : "76x76",
-      "idiom" : "ipad",
-      "filename" : "logo-1024iPadApp_76pt@2x.png",
-      "scale" : "2x"
-    },
-    {
-      "size" : "83.5x83.5",
-      "idiom" : "ipad",
-      "filename" : "logo-1024iPadProApp_83.5pt@2x.png",
-      "scale" : "2x"
-    },
     {
       "size" : "1024x1024",
       "idiom" : "ios-marketing",
-      "filename" : "logo-1024store_1024pt.png",
+      "filename" : "iconstore_1024pt.png",
       "scale" : "1x"
     }
   ],

BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/iconiPhoneApp_60pt@2x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/iconiPhoneApp_60pt@3x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/iconiPhoneNotification_20pt@2x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/iconiPhoneNotification_20pt@3x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/iconiPhoneSpootlight5_29pt@2x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/iconiPhoneSpootlight5_29pt@3x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/iconiPhoneSpootlight7_40pt@2x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/iconiPhoneSpootlight7_40pt@3x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/iconstore_1024pt.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPadApp_76pt.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPadApp_76pt@2x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPadNotifications_20pt.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPadNotifications_20pt@2x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPadProApp_83.5pt@2x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPadSpootlight5_29pt.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPadSpootlight5_29pt@2x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPadSpootlight7_40pt.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPadSpootlight7_40pt@2x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPhoneApp_60pt@2x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPhoneApp_60pt@3x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPhoneNotification_20pt@2x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPhoneNotification_20pt@3x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPhoneSpootlight5_29pt@2x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPhoneSpootlight5_29pt@3x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPhoneSpootlight7_40pt@2x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024iPhoneSpootlight7_40pt@3x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/AppIcon.appiconset/logo-1024store_1024pt.png


RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/empty_image/Contents.json → RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/Arrows/Contents.json


+ 23 - 0
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/Arrows/my_arrows_unfold.imageset/Contents.json

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

BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/Arrows/my_arrows_unfold.imageset/my_arrows_unfold.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/Arrows/my_arrows_unfold.imageset/my_arrows_unfold@2x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/Arrows/my_arrows_unfold.imageset/my_arrows_unfold@3x.png


RainbowPlanet/RainbowPlanet/Supporting Files/CommonModule.xcassets/Contents.json → RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/BG/Contents.json


+ 3 - 2
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/TabbarIcons/find_1.imageset/Contents.json

@@ -2,16 +2,17 @@
   "images" : [
     {
       "idiom" : "universal",
-      "filename" : "find_1.png",
+      "filename" : "bg0.png",
       "scale" : "1x"
     },
     {
       "idiom" : "universal",
-      "filename" : "find_1@2x.png",
+      "filename" : "bg0@2x.png",
       "scale" : "2x"
     },
     {
       "idiom" : "universal",
+      "filename" : "bg0@3x.png",
       "scale" : "3x"
     }
   ],

BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/BG/bg0.imageset/bg0.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/BG/bg0.imageset/bg0@2x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/BG/bg0.imageset/bg0@3x.png


RainbowPlanet/RainbowPlanet/Supporting Files/MineModule.xcassets/Contents.json → RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/Contents.json


+ 3 - 2
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/TabbarIcons/home_1.imageset/Contents.json

@@ -2,16 +2,17 @@
   "images" : [
     {
       "idiom" : "universal",
-      "filename" : "home_1.png",
+      "filename" : "page01.png",
       "scale" : "1x"
     },
     {
       "idiom" : "universal",
-      "filename" : "home_1@2x.png",
+      "filename" : "page01@2x.png",
       "scale" : "2x"
     },
     {
       "idiom" : "universal",
+      "filename" : "page01@3x.png",
       "scale" : "3x"
     }
   ],

BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page01.imageset/page01.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page01.imageset/page01@2x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page01.imageset/page01@3x.png


+ 3 - 2
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/TabbarIcons/find.imageset/Contents.json

@@ -2,16 +2,17 @@
   "images" : [
     {
       "idiom" : "universal",
-      "filename" : "find.png",
+      "filename" : "page02.png",
       "scale" : "1x"
     },
     {
       "idiom" : "universal",
-      "filename" : "find@2x.png",
+      "filename" : "page02@2x.png",
       "scale" : "2x"
     },
     {
       "idiom" : "universal",
+      "filename" : "page02@3x.png",
       "scale" : "3x"
     }
   ],

BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page02.imageset/page02.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page02.imageset/page02@2x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page02.imageset/page02@3x.png


+ 23 - 0
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page03.imageset/Contents.json

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

BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page03.imageset/page03.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page03.imageset/page03@2x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page03.imageset/page03@3x.png


+ 23 - 0
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page04.imageset/Contents.json

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

BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page04.imageset/page04.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page04.imageset/page04@2x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page04.imageset/page04@3x.png


+ 23 - 0
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page05.imageset/Contents.json

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

BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page05.imageset/page05.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page05.imageset/page05@2x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page05.imageset/page05@3x.png


+ 23 - 0
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page06.imageset/Contents.json

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

BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page06.imageset/page06.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page06.imageset/page06@2x.png


BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/DefaultPage/page06.imageset/page06@3x.png


+ 0 - 134
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/LaunchImage.launchimage/Contents.json

@@ -1,134 +0,0 @@
-{
-  "images" : [
-    {
-      "orientation" : "portrait",
-      "idiom" : "iphone",
-      "extent" : "full-screen",
-      "minimum-system-version" : "12.0",
-      "subtype" : "2688h",
-      "scale" : "3x"
-    },
-    {
-      "orientation" : "portrait",
-      "idiom" : "iphone",
-      "extent" : "full-screen",
-      "minimum-system-version" : "12.0",
-      "subtype" : "1792h",
-      "scale" : "2x"
-    },
-    {
-      "extent" : "full-screen",
-      "idiom" : "iphone",
-      "subtype" : "2436h",
-      "filename" : "LaunchImageiPhoneXPortraitiOS11_375x812pt@3x.png",
-      "minimum-system-version" : "11.0",
-      "orientation" : "portrait",
-      "scale" : "3x"
-    },
-    {
-      "extent" : "full-screen",
-      "idiom" : "iphone",
-      "subtype" : "736h",
-      "filename" : "LaunchImageiPhonePortraitiOS89_414x736pt@3x.png",
-      "minimum-system-version" : "8.0",
-      "orientation" : "portrait",
-      "scale" : "3x"
-    },
-    {
-      "extent" : "full-screen",
-      "idiom" : "iphone",
-      "subtype" : "667h",
-      "filename" : "LaunchImageiPhonePortraitiOS89_375x667pt@2x.png",
-      "minimum-system-version" : "8.0",
-      "orientation" : "portrait",
-      "scale" : "2x"
-    },
-    {
-      "orientation" : "portrait",
-      "idiom" : "iphone",
-      "filename" : "LaunchImageiPhonePortraitiOS789_320x480pt@2x.png",
-      "extent" : "full-screen",
-      "minimum-system-version" : "7.0",
-      "scale" : "2x"
-    },
-    {
-      "extent" : "full-screen",
-      "idiom" : "iphone",
-      "subtype" : "retina4",
-      "filename" : "LaunchImageiPhonePortraitiOS789_320x568pt@2x.png",
-      "minimum-system-version" : "7.0",
-      "orientation" : "portrait",
-      "scale" : "2x"
-    },
-    {
-      "orientation" : "portrait",
-      "idiom" : "ipad",
-      "filename" : "LaunchImageiPadPortraitiOS789_768x1024pt.png",
-      "extent" : "full-screen",
-      "minimum-system-version" : "7.0",
-      "scale" : "1x"
-    },
-    {
-      "orientation" : "portrait",
-      "idiom" : "ipad",
-      "filename" : "LaunchImageiPadPortraitiOS789_768x1024pt@2x.png",
-      "extent" : "full-screen",
-      "minimum-system-version" : "7.0",
-      "scale" : "2x"
-    },
-    {
-      "orientation" : "portrait",
-      "idiom" : "iphone",
-      "filename" : "LaunchImageiPhonePortraitiOS56_320x480pt.png",
-      "extent" : "full-screen",
-      "scale" : "1x"
-    },
-    {
-      "orientation" : "portrait",
-      "idiom" : "iphone",
-      "filename" : "LaunchImageiPhonePortraitiOS56_320x480pt@2x.png",
-      "extent" : "full-screen",
-      "scale" : "2x"
-    },
-    {
-      "orientation" : "portrait",
-      "idiom" : "iphone",
-      "filename" : "LaunchImageiPhonePortraitiOS56_320x568pt@2x.png",
-      "extent" : "full-screen",
-      "subtype" : "retina4",
-      "scale" : "2x"
-    },
-    {
-      "orientation" : "portrait",
-      "idiom" : "ipad",
-      "filename" : "LaunchImageiPadPortraitWOSBiOS56_768x1004pt.png",
-      "extent" : "to-status-bar",
-      "scale" : "1x"
-    },
-    {
-      "orientation" : "portrait",
-      "idiom" : "ipad",
-      "filename" : "LaunchImageiPadPortraitiOS56_768x1024pt.png",
-      "extent" : "full-screen",
-      "scale" : "1x"
-    },
-    {
-      "orientation" : "portrait",
-      "idiom" : "ipad",
-      "filename" : "LaunchImageiPadPortraitWOSBiOS56_768x1004pt@2x.png",
-      "extent" : "to-status-bar",
-      "scale" : "2x"
-    },
-    {
-      "orientation" : "portrait",
-      "idiom" : "ipad",
-      "filename" : "LaunchImageiPadPortraitiOS56_768x1024pt@2x.png",
-      "extent" : "full-screen",
-      "scale" : "2x"
-    }
-  ],
-  "info" : {
-    "version" : 1,
-    "author" : "xcode"
-  }
-}

BIN
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/LaunchImage.launchimage/LaunchImageiPadPortraitWOSBiOS56_768x1004pt.png


+ 0 - 0
RainbowPlanet/RainbowPlanet/Supporting Files/Assets.xcassets/LaunchImage.launchimage/LaunchImageiPadPortraitWOSBiOS56_768x1004pt@2x.png


Some files were not shown because too many files changed in this diff