Browse Source

1.实名认证修改需同意协议。
2.曲谱被专辑收纳加标记。

Steven 2 năm trước cách đây
mục cha
commit
8800f97c27
47 tập tin đã thay đổi với 782 bổ sung52 xóa
  1. 20 2
      KulexiuForStudent/KulexiuForStudent.xcodeproj/project.pbxproj
  2. BIN
      KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/UserInterfaceState.xcuserstate
  3. 49 1
      KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  4. 6 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/albumTag/Contents.json
  5. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/albumTag/albumTag_charge.imageset/Contents.json
  6. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/albumTag/albumTag_charge.imageset/albumTag_charge@2x.png
  7. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/albumTag/albumTag_charge.imageset/albumTag_charge@3x.png
  8. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/album_collected.imageset/Contents.json
  9. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/album_collected.imageset/album_collected@2x.png
  10. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/album_collected.imageset/album_collected@3x.png
  11. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/award_image.imageset/Contents.json
  12. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/award_image.imageset/award_image@2x.png
  13. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/award_image.imageset/award_image@3x.png
  14. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/music_albumTag.imageset/Contents.json
  15. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/music_albumTag.imageset/music_albumTag@2x.png
  16. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/music_albumTag.imageset/music_albumTag@3x.png
  17. 22 0
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Mine/activity_award.imageset/Contents.json
  18. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Mine/activity_award.imageset/activity_award@2x.png
  19. BIN
      KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Mine/activity_award.imageset/activity_award@3x.png
  20. 8 0
      KulexiuForStudent/KulexiuForStudent/Common/Base/KSNetworkingManager.h
  21. 19 3
      KulexiuForStudent/KulexiuForStudent/Common/Base/KSNetworkingManager.m
  22. 3 0
      KulexiuForStudent/KulexiuForStudent/Common/Base/KSTabBarViewController.h
  23. 5 0
      KulexiuForStudent/KulexiuForStudent/Common/Base/KSTabBarViewController.m
  24. 14 14
      KulexiuForStudent/KulexiuForStudent/Common/Define/PrefixHeader.pch
  25. 2 1
      KulexiuForStudent/KulexiuForStudent/Module/Chat/Controller/KSChatConversationViewController.m
  26. 91 5
      KulexiuForStudent/KulexiuForStudent/Module/Home/Controller/HomeViewController.m
  27. 2 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/Model/HomeAlbumModel.h
  28. 7 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/Model/HomeAlbumModel.m
  29. 1 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/Model/HomeHotMusicModel.h
  30. 7 3
      KulexiuForStudent/KulexiuForStudent/Module/Home/Model/HomeHotMusicModel.m
  31. 30 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/AwardAlert/KSAwardAlertView.h
  32. 89 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/AwardAlert/KSAwardAlertView.m
  33. 127 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/AwardAlert/KSAwardAlertView.xib
  34. 24 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotAlbum/HomeHotAlbumCell.m
  35. 9 2
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotAlbum/HomeHotAlbumCell.xib
  36. 15 0
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotMusic/HomeHotMusicCellView.m
  37. 18 5
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotMusic/HomeHotMusicCellView.xib
  38. 1 1
      KulexiuForStudent/KulexiuForStudent/Module/Home/View/KSNewsAlert.m
  39. 6 1
      KulexiuForStudent/KulexiuForStudent/Module/Login/Controller/VefiCodeLoginController.m
  40. 7 0
      KulexiuForStudent/KulexiuForStudent/Module/Mine/Controller/MineViewController.m
  41. 18 2
      KulexiuForStudent/KulexiuForStudent/Module/Mine/Setting/Controller/UserAuthViewController.m
  42. 3 1
      KulexiuForStudent/KulexiuForStudent/Module/Mine/Setting/View/UserAuthBodyView.h
  43. 26 1
      KulexiuForStudent/KulexiuForStudent/Module/Mine/Setting/View/UserAuthBodyView.m
  44. 42 2
      KulexiuForStudent/KulexiuForStudent/Module/Mine/Setting/View/UserAuthBodyView.xib
  45. 1 0
      KulexiuForStudent/KulexiuForStudent/Module/Mine/View/MineBodyView.h
  46. 4 0
      KulexiuForStudent/KulexiuForStudent/Module/Mine/View/MineBodyView.m
  47. 18 8
      KulexiuForStudent/KulexiuForStudent/Module/Mine/View/MineBodyView.xib

+ 20 - 2
KulexiuForStudent/KulexiuForStudent.xcodeproj/project.pbxproj

@@ -659,6 +659,8 @@
 		BC8A45C7283DDE8E00094BBB /* VideoToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC8A45C6283DDE8E00094BBB /* VideoToolbox.framework */; };
 		BC8A45C9283DDE9A00094BBB /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC8A45C8283DDE9900094BBB /* CoreMedia.framework */; };
 		BC8A45CB283DDEA100094BBB /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC8A45CA283DDEA100094BBB /* AVFoundation.framework */; };
+		BC8B641528F3B5AC00A08D16 /* KSAwardAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8B641428F3B5AC00A08D16 /* KSAwardAlertView.m */; };
+		BC8B641728F3B5B300A08D16 /* KSAwardAlertView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC8B641628F3B5B300A08D16 /* KSAwardAlertView.xib */; };
 		BC8B6DC32856CAE500866917 /* KSICloudManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8B6DC12856CAE500866917 /* KSICloudManager.m */; };
 		BC8B6DC62856CAF600866917 /* KSDocumentViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8B6DC52856CAF600866917 /* KSDocumentViewController.m */; };
 		BC8B6DC92856CFB800866917 /* KSDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8B6DC82856CFB800866917 /* KSDocument.m */; };
@@ -2068,6 +2070,9 @@
 		BC8A45C6283DDE8E00094BBB /* VideoToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = VideoToolbox.framework; path = System/Library/Frameworks/VideoToolbox.framework; sourceTree = SDKROOT; };
 		BC8A45C8283DDE9900094BBB /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; };
 		BC8A45CA283DDEA100094BBB /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
+		BC8B641328F3B5AC00A08D16 /* KSAwardAlertView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KSAwardAlertView.h; sourceTree = "<group>"; };
+		BC8B641428F3B5AC00A08D16 /* KSAwardAlertView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KSAwardAlertView.m; sourceTree = "<group>"; };
+		BC8B641628F3B5B300A08D16 /* KSAwardAlertView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = KSAwardAlertView.xib; sourceTree = "<group>"; };
 		BC8B6DC12856CAE500866917 /* KSICloudManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSICloudManager.m; sourceTree = "<group>"; };
 		BC8B6DC22856CAE500866917 /* KSICloudManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSICloudManager.h; sourceTree = "<group>"; };
 		BC8B6DC42856CAF500866917 /* KSDocumentViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSDocumentViewController.h; sourceTree = "<group>"; };
@@ -2897,6 +2902,7 @@
 		275FA1F627E7356A00CFEA2E /* View */ = {
 			isa = PBXGroup;
 			children = (
+				BC8B641228F3B58A00A08D16 /* AwardAlert */,
 				BC4CF26728D025CB00961C61 /* QualityMusic */,
 				BCFDA66328BDF0530022B497 /* TeacherStyle */,
 				BCFDA65928BCAE7C0022B497 /* HomePageView */,
@@ -5106,6 +5112,16 @@
 			path = SoundFontFile;
 			sourceTree = "<group>";
 		};
+		BC8B641228F3B58A00A08D16 /* AwardAlert */ = {
+			isa = PBXGroup;
+			children = (
+				BC8B641328F3B5AC00A08D16 /* KSAwardAlertView.h */,
+				BC8B641428F3B5AC00A08D16 /* KSAwardAlertView.m */,
+				BC8B641628F3B5B300A08D16 /* KSAwardAlertView.xib */,
+			);
+			path = AwardAlert;
+			sourceTree = "<group>";
+		};
 		BC8B6E7A285869B500866917 /* UMShare */ = {
 			isa = PBXGroup;
 			children = (
@@ -6373,6 +6389,7 @@
 				BCC583B728A9EC6400BAB4CF /* cloud_animation_21.png in Resources */,
 				BC11921B280ED6A900A716F7 /* NewClassPopCell.xib in Resources */,
 				BCC583BF28A9EC6400BAB4CF /* cloud_animation_18.png in Resources */,
+				BC8B641728F3B5B300A08D16 /* KSAwardAlertView.xib in Resources */,
 				BC71D265288804CD0010F14B /* img_55.png in Resources */,
 				BC71D0FA2881A2420010F14B /* UMSocialSDKResources.bundle in Resources */,
 				BC60E3D2287D592800B05441 /* KSPublicAlertView.xib in Resources */,
@@ -6832,6 +6849,7 @@
 				BC71D27F288807680010F14B /* AnimationHelper.m in Sources */,
 				277935A927E324A80010E277 /* MSSBrowseActionSheet.m in Sources */,
 				275FA1E027E7351900CFEA2E /* RecordCheckManager.m in Sources */,
+				BC8B641528F3B5AC00A08D16 /* KSAwardAlertView.m in Sources */,
 				2779355627E324A70010E277 /* KSPremissionAlert.m in Sources */,
 				BC736A92288036E8004A9B0A /* MyVideoSearchView.m in Sources */,
 				BC119230280ED8F900A716F7 /* TableCourseModel.m in Sources */,
@@ -7450,7 +7468,7 @@
 					"$(PROJECT_DIR)/KulexiuForStudent/Common/ThirdPart/UMSocialSDK/share/share_ios_6.10.5/SocialLibraries/Sina/SinaSDK",
 					"$(PROJECT_DIR)/KulexiuForStudent/Common/ThirdPart/UMSocialSDK/share/share_ios_6.10.5/UMSocialSDKPlugin",
 				);
-				MARKETING_VERSION = 1.3.9;
+				MARKETING_VERSION = 1.3.7;
 				PRODUCT_BUNDLE_IDENTIFIER = com.Colexiu.KulexiuForStudent;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SWIFT_EMIT_LOC_STRINGS = YES;
@@ -7522,7 +7540,7 @@
 					"$(PROJECT_DIR)/KulexiuForStudent/Common/ThirdPart/UMSocialSDK/share/share_ios_6.10.5/SocialLibraries/Sina/SinaSDK",
 					"$(PROJECT_DIR)/KulexiuForStudent/Common/ThirdPart/UMSocialSDK/share/share_ios_6.10.5/UMSocialSDKPlugin",
 				);
-				MARKETING_VERSION = 1.3.9;
+				MARKETING_VERSION = 1.3.7;
 				PRODUCT_BUNDLE_IDENTIFIER = com.Colexiu.KulexiuForStudent;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SWIFT_EMIT_LOC_STRINGS = YES;

BIN
KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/UserInterfaceState.xcuserstate


+ 49 - 1
KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -40,7 +40,7 @@
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
             uuid = "FCBB811F-5467-47CA-A9C1-440BB1A2E560"
-            shouldBeEnabled = "Yes"
+            shouldBeEnabled = "No"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
             filePath = "KulexiuForStudent/AppDelegate.m"
@@ -68,5 +68,53 @@
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "821B291D-6858-47E2-8EC5-833A950C4F38"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForStudent/Module/Chat/Controller/KSChatConversationViewController.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "325"
+            endingLineNumber = "325"
+            landmarkName = "-refreshUserInfoOrGroupInfo"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "A4FEF7A2-024A-4B17-BEED-02383B7F4FF8"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForStudent/Common/Base/KSRCIMDataSource.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "71"
+            endingLineNumber = "71"
+            landmarkName = "-getUserInfoWithUserId:completion:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "48D19C1D-7CA8-41F5-B6D2-62482808D92F"
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForStudent/Module/Home/Controller/HomeViewController.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "558"
+            endingLineNumber = "558"
+            landmarkName = "-requestHotAlbum"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
    </Breakpoints>
 </Bucket>

+ 6 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/albumTag/Contents.json

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

+ 22 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/albumTag/albumTag_charge.imageset/Contents.json

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

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/albumTag/albumTag_charge.imageset/albumTag_charge@2x.png


BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/albumTag/albumTag_charge.imageset/albumTag_charge@3x.png


+ 22 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/album_collected.imageset/Contents.json

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

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/album_collected.imageset/album_collected@2x.png


BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/album_collected.imageset/album_collected@3x.png


+ 22 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/award_image.imageset/Contents.json

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

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/award_image.imageset/award_image@2x.png


BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/award_image.imageset/award_image@3x.png


+ 22 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/music_albumTag.imageset/Contents.json

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

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/music_albumTag.imageset/music_albumTag@2x.png


BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Home/music_albumTag.imageset/music_albumTag@3x.png


+ 22 - 0
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Mine/activity_award.imageset/Contents.json

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

BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Mine/activity_award.imageset/activity_award@2x.png


BIN
KulexiuForStudent/KulexiuForStudent/Assets.xcassets/Mine/activity_award.imageset/activity_award@3x.png


+ 8 - 0
KulexiuForStudent/KulexiuForStudent/Common/Base/KSNetworkingManager.h

@@ -861,6 +861,14 @@ NS_ASSUME_NONNULL_BEGIN
 /// @param success 成功
 /// @param faliure 失败
 + (void)queryByParamName:(NSString *)get paramName:(NSString *)paramName success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
+// /api-student/activity/checkReceiveReward
+
+/// 查询是否reword弹窗
+/// @param get get
+/// @param success 成功
+/// @param faliure 失败
++ (void)checkReceiveRewardRequest:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
 @end
 
 NS_ASSUME_NONNULL_END

+ 19 - 3
KulexiuForStudent/KulexiuForStudent/Common/Base/KSNetworkingManager.m

@@ -727,7 +727,9 @@
  */
 + (void)queryUserInfo:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
     NSString *url = [NSString stringWithFormat:@"%@%@",hostURL, @"/api-auth/api/queryUserInfo"];
-    [self request:get andWithUrl:url and:nil success:success faliure:faliure];
+    NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+    [parm setValue:@"STUDENT" forKey:@"clientType"];
+    [self request:get andWithUrl:url and:parm success:success faliure:faliure];
 }
 
 // /api-student/Student/queryUserInfo
@@ -762,7 +764,7 @@
     [self request:post andWithUrl:url and:parm success:success faliure:faliure];
 }
 
-// /api-auth/user/realNameAuth
+// /api-student/user/realNameAuth
 
 /// 实名认证
 /// @param post post
@@ -772,11 +774,12 @@
 /// @param faliure 失败
 + (void)realNameAuthRequest:(NSString *)post idCardNo:(NSString *)idCardNo realName:(NSString *)realName success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
     [self configRequestMethodJSON];
-    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-auth/user/realNameAuth"];
+    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-student/student/realNameAuth"];
     NSMutableDictionary *parm = [NSMutableDictionary dictionary];
     [parm setValue:idCardNo forKey:@"idCardNo"];
     [parm setValue:realName forKey:@"realName"];
     [parm setValue:@(YES) forKey:@"save"];
+    [parm setValue:@"1" forKey:@"contract"];
     [self request:post andWithUrl:url and:parm success:success faliure:faliure];
 }
 
@@ -1679,4 +1682,17 @@
     [parm setValue:paramName forKey:@"paramName"];
     [self request:get andWithUrl:url and:parm success:success faliure:faliure];
 }
+
+
+// /api-student/activity/checkReceiveReward
+
+/// 查询是否reword弹窗
+/// @param get get
+/// @param success 成功
+/// @param faliure 失败
++ (void)checkReceiveRewardRequest:(NSString *)get success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-student/activity/checkReceiveReward"];
+    [self request:get andWithUrl:url and:nil success:success faliure:faliure];
+}
+
 @end

+ 3 - 0
KulexiuForStudent/KulexiuForStudent/Common/Base/KSTabBarViewController.h

@@ -15,10 +15,13 @@ NS_ASSUME_NONNULL_BEGIN
 
 - (void)noteNewsWithIndex:(NSInteger)index count:(NSInteger)count; //提醒
 
+- (void)noteBadgeValueIndex:(NSInteger)index desc:(NSString *)desc;
+
 - (void)clearNewsWithIndex:(NSInteger)index;  //清除
 
 - (void)removeControllerNotifer;  // 移除子控制器通知
 
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 5 - 0
KulexiuForStudent/KulexiuForStudent/Common/Base/KSTabBarViewController.m

@@ -93,6 +93,11 @@
     }
 }
 
+- (void)noteBadgeValueIndex:(NSInteger)index desc:(NSString *)desc {
+    UITabBarItem * tabBarItem = self.tabBar.items[index];
+    [tabBarItem setBadgeValue:desc];
+}
+
 - (void)clearNewsWithIndex:(NSInteger)index {  //清除
     UITabBarItem * tabBarItem = self.tabBar.items[index];
     [tabBarItem setBadgeValue:nil];

+ 14 - 14
KulexiuForStudent/KulexiuForStudent/Common/Define/PrefixHeader.pch

@@ -139,24 +139,24 @@ shouldPrevent = NO; \
 
 //#ifdef DEBUG
 
-//#define hostURL (@"https://dev.colexiu.com")
-//#define SEALCLASSHOST (@"https://dev.colexiu.com/api-classroom")
-//#define WEBHOST (@"https://dev.colexiu.com/student")
-//#define SOCKET_URL (@"wss://dev.colexiu.com/audioAnalysis")
-//#define JSPUSH_ENVIRONMENT (NO)
-//#define RCIM_KEY (@"0vnjpoad0jbdz")
-//#define SUBMIT_UUID (YES)
+#define hostURL (@"https://dev.colexiu.com")
+#define SEALCLASSHOST (@"https://dev.colexiu.com/api-classroom")
+#define WEBHOST (@"https://dev.colexiu.com/student")
+#define SOCKET_URL (@"wss://dev.colexiu.com/audioAnalysis")
+#define JSPUSH_ENVIRONMENT (NO)
+#define RCIM_KEY (@"0vnjpoad0jbdz")
+#define SUBMIT_UUID (YES)
 
 
 //#else
 
-#define hostURL (@"https://online.colexiu.com")
-#define SEALCLASSHOST (@"https://online.colexiu.com/api-classroom")
-#define WEBHOST (@"https://online.colexiu.com/student")
-#define SOCKET_URL (@"wss://online.colexiu.com/audioAnalysis")
-#define JSPUSH_ENVIRONMENT (YES)
-#define RCIM_KEY (@"e5t4ouvpe42pa")
-#define SUBMIT_UUID (YES)
+//#define hostURL (@"https://online.colexiu.com")
+//#define SEALCLASSHOST (@"https://online.colexiu.com/api-classroom")
+//#define WEBHOST (@"https://online.colexiu.com/student")
+//#define SOCKET_URL (@"wss://online.colexiu.com/audioAnalysis")
+//#define JSPUSH_ENVIRONMENT (YES)
+//#define RCIM_KEY (@"e5t4ouvpe42pa")
+//#define SUBMIT_UUID (YES)
 
 //#endif
 

+ 2 - 1
KulexiuForStudent/KulexiuForStudent/Module/Chat/Controller/KSChatConversationViewController.m

@@ -16,7 +16,6 @@
 #import "KSRCloudMediaManager.h"
 #import "KSSelectConversationViewController.h"
 #import "GroupMemberModel.h"
-#define SHARE_MUSIC_TAG (2001)
 
 #import "KSChatLiveMessage.h"
 #import "KSChatLiveShareCell.h"
@@ -29,6 +28,8 @@
 #import "KSPublicAlertView.h"
 #import "KSGroupTagImageView.h"
 
+#define SHARE_MUSIC_TAG (2001)
+
 @interface RCNaviDataInfo : NSObject
 
 @property (nonatomic, assign) NSTimeInterval uploadVideoDurationLimit;

+ 91 - 5
KulexiuForStudent/KulexiuForStudent/Module/Home/Controller/HomeViewController.m

@@ -66,6 +66,7 @@
 #import "HomeTeacherLiveModel.h"
 
 #import "WidgetViewController.h"
+#import "KSAwardAlertView.h"
 
 #define BUTTONWIDTH (65)
 #define BUTTONHEIGHT (80)
@@ -155,6 +156,8 @@
 
 @property (nonatomic, strong) UIView *headBgView;
 
+@property (nonatomic, assign) BOOL isCheck;
+
 @end
 
 @implementation HomeViewController
@@ -354,7 +357,83 @@
         [self requestUserInfo:YES];
     }
     [self requestUnreadCount];
+}
+
+- (void)requestAwardMessage {
+    self.isCheck = NO;
+    dispatch_group_enter(self.requestGroup);
+    [KSNetworkingManager checkReceiveRewardRequest:KS_GET success:^(NSDictionary * _Nonnull dic) {
+        dispatch_group_leave(self.requestGroup);
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            BOOL isCheck = [[dic dictionaryValueForKey:@"data"] boolValueForKey:@"check"];
+            self.isCheck = isCheck;
+            if (isCheck) {
+                [(KSTabBarViewController *)self.tabBarController noteBadgeValueIndex:4 desc:@"1"];
+            }
+            else {
+                [(KSTabBarViewController *)self.tabBarController clearNewsWithIndex:4];
+            }
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        dispatch_group_leave(self.requestGroup);
+    }];
+}
+
+
+- (BOOL)checkHasShowAwardAlert {
+
+    NSDictionary *awardAlertDic = UserDefaultObjectForKey(@"awardAlertConfig");
     
+    NSDate *currendDate = [NSDate date];
+    NSDateFormatter *dateFormatter = [NSObject getDateformatter];
+    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
+    NSString *todayString = [dateFormatter stringFromDate:currendDate];
+    
+    if (awardAlertDic) {
+        NSString *awardAlertTime = [awardAlertDic stringValueForKey:@"time"];
+        
+        if (![NSString isEmptyString:awardAlertTime]) {
+            NSString *userId = [awardAlertDic stringValueForKey:@"userId"];
+            if ([todayString isEqualToString:awardAlertTime] && [userId isEqualToString:UserDefaultObjectForKey(UIDKey)]) {
+                return YES;
+            }
+        }
+    }
+    return NO;
+}
+
+
+- (void)checkShowAwardAlert {
+    AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
+    if (appDelegate.isShowMemoAlert) {
+        return;
+    }
+    
+    if (![self.navigationController.visibleViewController isKindOfClass:[HomeViewController class]]) {
+        return;
+    }
+    
+    KSAwardAlertView *alert = [KSAwardAlertView shareInstance];
+    MJWeakSelf;
+    [alert awardActionCallback:^(BOOL isSure) {
+        if (isSure) {
+            [weakSelf displayAwardList];
+        }
+    }];
+    
+    [alert showAlert];
+    NSDate *currendDate = [NSDate date];
+    NSDateFormatter *dateFormatter = [NSObject getDateformatter];
+    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
+    NSString *todayString = [dateFormatter stringFromDate:currendDate];
+    NSDictionary *saveDic = @{@"time" :todayString , @"userId" : UserDefaultObjectForKey(UIDKey)};
+    UserDefaultSetObjectForKey(saveDic, @"awardAlertConfig");
+}
+
+- (void)displayAwardList {
+    KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
+    webCtrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/awardActivity"];
+    [self.navigationController pushViewController:webCtrl animated:YES];
 }
 
 - (void)requestUnreadCount {
@@ -681,6 +760,9 @@
     [self requestTeacherStyle];
     [self requestLiveList];
     [self requestInformationList];
+    if ([self checkHasShowAwardAlert] == NO) {
+        [self requestAwardMessage];
+    }
     dispatch_group_notify(self.requestGroup, dispatch_get_main_queue(), ^{
         [self removehub];
         [self.pagerView.mainTableView.mj_header endRefreshing];
@@ -708,10 +790,16 @@
     [self refreshHeadHeight];
     
     [self refreshPageView];
-    
-    if (self.flashModel) {
-        [self showNewsWithSource:self.flashModel];
+    self.isCheck = YES;
+    if (self.isCheck && [self checkHasShowAwardAlert] == NO) {
+        [self checkShowAwardAlert];
     }
+    else {
+        if (self.flashModel) {
+            [self showNewsWithSource:self.flashModel];
+        }
+    }
+
 }
 
 - (void)showNewsWithSource:(HomeMessageModel *)sourceModel {
@@ -961,8 +1049,6 @@
     [self.albumCollectionView reloadData];
 }
 
-
-
 - (void)refreshMusicView {
     
     if (self.musicArray.count) {

+ 2 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/Model/HomeAlbumModel.h

@@ -29,6 +29,8 @@
 @property (nonatomic, strong) NSString *updateTime;
 @property (nonatomic, strong) NSString *favorite;
 
+@property (nonatomic, strong) NSString *paymentType;
+
 + (instancetype)modelObjectWithDictionary:(NSDictionary *)dict;
 - (instancetype)initWithDictionary:(NSDictionary *)dict;
 - (NSDictionary *)dictionaryRepresentation;

+ 7 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/Model/HomeAlbumModel.m

@@ -25,6 +25,7 @@ NSString *const kHomeAlbumModelSortNumber = @"sortNumber";
 NSString *const kHomeAlbumModelAlbumName = @"albumName";
 NSString *const kHomeAlbumModelUpdateTime = @"updateTime";
 NSString *const kHomeAlbumModelFavorite = @"favorite";
+NSString *const kHomeAlbumModelPaymentType = @"paymentType";
 
 @interface HomeAlbumModel ()
 
@@ -51,6 +52,7 @@ NSString *const kHomeAlbumModelFavorite = @"favorite";
 @synthesize albumName = _albumName;
 @synthesize updateTime = _updateTime;
 @synthesize favorite = _favorite;
+@synthesize paymentType = _paymentType;
 
 + (instancetype)modelObjectWithDictionary:(NSDictionary *)dict
 {
@@ -81,6 +83,7 @@ NSString *const kHomeAlbumModelFavorite = @"favorite";
             self.albumName = [self objectOrNilForKey:kHomeAlbumModelAlbumName fromDictionary:dict];
             self.updateTime = [self objectOrNilForKey:kHomeAlbumModelUpdateTime fromDictionary:dict];
             self.favorite = [self objectOrNilForKey:kHomeAlbumModelFavorite fromDictionary:dict];
+        self.paymentType = [self objectOrNilForKey:kHomeAlbumModelPaymentType fromDictionary:dict];
     }
     
     return self;
@@ -107,6 +110,7 @@ NSString *const kHomeAlbumModelFavorite = @"favorite";
     [mutableDict setValue:self.albumName forKey:kHomeAlbumModelAlbumName];
     [mutableDict setValue:self.updateTime forKey:kHomeAlbumModelUpdateTime];
     [mutableDict setValue:self.favorite forKey:kHomeAlbumModelFavorite];
+    [mutableDict setValue:self.paymentType forKey:kHomeAlbumModelPaymentType];
     return [NSDictionary dictionaryWithDictionary:mutableDict];
 }
 
@@ -150,6 +154,7 @@ NSString *const kHomeAlbumModelFavorite = @"favorite";
     self.albumName = [aDecoder decodeObjectForKey:kHomeAlbumModelAlbumName];
     self.updateTime = [aDecoder decodeObjectForKey:kHomeAlbumModelUpdateTime];
     self.favorite = [aDecoder decodeObjectForKey:kHomeAlbumModelFavorite];
+    self.paymentType = [aDecoder decodeObjectForKey:kHomeAlbumModelPaymentType];
     return self;
 }
 
@@ -173,6 +178,7 @@ NSString *const kHomeAlbumModelFavorite = @"favorite";
     [aCoder encodeObject:_albumName forKey:kHomeAlbumModelAlbumName];
     [aCoder encodeObject:_updateTime forKey:kHomeAlbumModelUpdateTime];
     [aCoder encodeObject:_favorite forKey:kHomeAlbumModelFavorite];
+    [aCoder encodeObject:_paymentType forKey:kHomeAlbumModelPaymentType];
 }
 
 - (id)copyWithZone:(NSZone *)zone
@@ -198,6 +204,7 @@ NSString *const kHomeAlbumModelFavorite = @"favorite";
         copy.albumName = [self.albumName copyWithZone:zone];
         copy.updateTime = [self.updateTime copyWithZone:zone];
         copy.favorite = [self.favorite copyWithZone:zone];
+        copy.paymentType = [self.paymentType copyWithZone:zone];
     }
     
     return copy;

+ 1 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/Model/HomeHotMusicModel.h

@@ -56,6 +56,7 @@
 @property (nonatomic, strong) NSString *submitAuditTime;
 @property (nonatomic, assign) BOOL exquisiteFlag;
 @property (nonatomic, strong) NSString *paymentType;
+@property (nonatomic, assign) NSInteger albumNums;
 
 + (instancetype)modelObjectWithDictionary:(NSDictionary *)dict;
 - (instancetype)initWithDictionary:(NSDictionary *)dict;

+ 7 - 3
KulexiuForStudent/KulexiuForStudent/Module/Home/Model/HomeHotMusicModel.m

@@ -54,6 +54,7 @@ NSString *const kHomeHotMusicModelSubmitAuditTime = @"submitAuditTime";
 
 NSString *const kHomeHotMusicModelExquisiteFlag = @"exquisiteFlag";
 NSString *const kMusicMessageModelPaymentType = @"paymentType";
+NSString *const kHomeHotMusicModelAlbumNums = @"albumNums";
 
 @interface HomeHotMusicModel ()
 
@@ -108,6 +109,7 @@ NSString *const kMusicMessageModelPaymentType = @"paymentType";
 @synthesize submitAuditTime = _submitAuditTime;
 @synthesize exquisiteFlag = _exquisiteFlag;
 @synthesize paymentType = _paymentType;
+@synthesize albumNums = _albumNums;
 
 + (instancetype)modelObjectWithDictionary:(NSDictionary *)dict
 {
@@ -167,7 +169,7 @@ NSString *const kMusicMessageModelPaymentType = @"paymentType";
         self.exquisiteFlag = [[self objectOrNilForKey:kHomeHotMusicModelExquisiteFlag fromDictionary:dict]
                               boolValue];
         self.paymentType = [self objectOrNilForKey:kMusicMessageModelPaymentType fromDictionary:dict];
-
+        self.albumNums = [[self objectOrNilForKey:kHomeHotMusicModelAlbumNums fromDictionary:dict] integerValue];
     }
     
     return self;
@@ -222,7 +224,7 @@ NSString *const kMusicMessageModelPaymentType = @"paymentType";
     [mutableDict setValue:self.submitAuditTime forKey:kHomeHotMusicModelSubmitAuditTime];
     [mutableDict setValue:[NSNumber numberWithBool:self.exquisiteFlag] forKey:kHomeHotMusicModelExquisiteFlag];
     [mutableDict setValue:self.paymentType forKey:kMusicMessageModelPaymentType];
-
+    [mutableDict setValue:[NSNumber numberWithInteger:self.albumNums] forKey:kHomeHotMusicModelAlbumNums];
     return [NSDictionary dictionaryWithDictionary:mutableDict];
 }
 
@@ -294,6 +296,7 @@ NSString *const kMusicMessageModelPaymentType = @"paymentType";
     self.submitAuditTime = [aDecoder decodeObjectForKey:kHomeHotMusicModelSubmitAuditTime];
     self.exquisiteFlag = [aDecoder decodeBoolForKey:kHomeHotMusicModelExquisiteFlag];
     self.paymentType = [aDecoder decodeObjectForKey:kMusicMessageModelPaymentType];
+    self.albumNums = [aDecoder decodeIntegerForKey:kHomeHotMusicModelAlbumNums];
 
     return self;
 }
@@ -346,6 +349,7 @@ NSString *const kMusicMessageModelPaymentType = @"paymentType";
     [aCoder encodeObject:_submitAuditTime forKey:kHomeHotMusicModelSubmitAuditTime];
     [aCoder encodeBool:_exquisiteFlag forKey:kHomeHotMusicModelExquisiteFlag];
     [aCoder encodeObject:_paymentType forKey:kMusicMessageModelPaymentType];
+    [aCoder encodeInteger:_albumNums forKey:kHomeHotMusicModelAlbumNums];
 }
 
 - (id)copyWithZone:(NSZone *)zone
@@ -399,7 +403,7 @@ NSString *const kMusicMessageModelPaymentType = @"paymentType";
         copy.submitAuditTime = [self.submitAuditTime copyWithZone:zone];
         copy.exquisiteFlag = self.exquisiteFlag;
         copy.paymentType = [self.paymentType copyWithZone:zone];
-
+        copy.albumNums = self.albumNums;
     }
     
     return copy;

+ 30 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/AwardAlert/KSAwardAlertView.h

@@ -0,0 +1,30 @@
+//
+//  KSAwardAlertView.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/10/10.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef void(^AwardAlertCallback)(BOOL isSure);
+
+@interface KSAwardAlertView : UIView
+
++ (instancetype)shareInstance;
+
+- (void)awardActionCallback:(AwardAlertCallback)callback;
+
+- (void)showAlert;
+
+- (void)showAlertInView:(UIView *)displayView;
+
+- (void)hiddenAction;
+
+
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 89 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/AwardAlert/KSAwardAlertView.m

@@ -0,0 +1,89 @@
+//
+//  KSAwardAlertView.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/10/10.
+//
+
+#import "KSAwardAlertView.h"
+#import "UIView+Animation.h"
+
+
+@interface KSAwardAlertView ()
+
+@property (weak, nonatomic) IBOutlet UIView *colorView;
+
+@property (nonatomic, copy) AwardAlertCallback callback;
+
+@end
+
+@implementation KSAwardAlertView
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    CAGradientLayer *layer = [self createGradientLayerFromColor:HexRGB(0x59E5D5) startPoint:CGPointMake(0.5, 0) endColor:HexRGB(0x2DC7AA) endPoint:CGPointMake(0.5, 1) bounds:CGRectMake(0, 0, 169, 40)];
+    layer.cornerRadius = 12.0f;
+    layer.masksToBounds = YES;
+    [self.colorView.layer addSublayer:layer];
+}
+
++ (instancetype)shareInstance {
+    KSAwardAlertView *view = [[[NSBundle mainBundle] loadNibNamed:@"KSAwardAlertView" owner:nil options:nil] firstObject];
+    view.frame = CGRectMake(0, 0, KPortraitWidth, KPortraitHeight);
+    return view;
+}
+
+- (void)awardActionCallback:(AwardAlertCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (void)showAlert {
+    [[UIApplication sharedApplication].keyWindow addSubview:self];
+    [self setPopAnimation];
+}
+
+- (void)showAlertInView:(UIView *)displayView {
+    [displayView addSubview:self];
+    [self setPopAnimation];
+}
+
+- (void)hiddenAction {
+    [self removeFromSuperview];
+}
+
+
+- (IBAction)sureAction:(id)sender {
+    if (self.callback) {
+        self.callback(YES);
+    }
+    [self hiddenAction];
+}
+
+- (IBAction)cancleAction:(id)sender {
+    if (self.callback) {
+        self.callback(NO);
+    }
+    [self hiddenAction];
+}
+
+
+- (CAGradientLayer *)createGradientLayerFromColor:(UIColor *)fromColor startPoint:(CGPoint)startPoint endColor:(UIColor *)endColor endPoint:(CGPoint)endPoint bounds:(CGRect)bounds {
+    CAGradientLayer *gradientLayer = [CAGradientLayer layer];
+    gradientLayer.colors = @[(__bridge id)fromColor.CGColor, (__bridge id)endColor.CGColor];
+    gradientLayer.startPoint = startPoint;
+    gradientLayer.endPoint = endPoint;
+    gradientLayer.frame = bounds;
+    gradientLayer.locations = @[@(0),@(1.0f)];
+    return gradientLayer;
+}
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 127 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/AwardAlert/KSAwardAlertView.xib

@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21225" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_0" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21207"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="KSAwardAlertView">
+            <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="MiZ-wq-ORz">
+                    <rect key="frame" x="59" y="156.66666666666663" width="257" height="354"/>
+                    <subviews>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="award_image" translatesAutoresizingMaskIntoConstraints="NO" id="IC2-xC-CLi">
+                            <rect key="frame" x="35.666666666666686" y="23" width="186" height="106"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="106" id="anK-1i-GVd"/>
+                                <constraint firstAttribute="width" constant="186" id="fOA-cb-ers"/>
+                            </constraints>
+                        </imageView>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="您有待领取奖品" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="YML-3d-3xZ">
+                            <rect key="frame" x="64" y="150.00000000000003" width="129" height="25"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="25" id="g0B-ln-iIz"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="18"/>
+                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <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="FdQ-H5-bhI">
+                            <rect key="frame" x="57" y="185.00000000000003" width="143" height="20"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="20" id="G7h-27-P1x"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                            <color key="textColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="shF-sU-HAn">
+                            <rect key="frame" x="44" y="276" width="169" height="40"/>
+                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <userDefinedRuntimeAttributes>
+                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                    <real key="value" value="10"/>
+                                </userDefinedRuntimeAttribute>
+                            </userDefinedRuntimeAttributes>
+                        </view>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="QeN-Iz-5Fd">
+                            <rect key="frame" x="44" y="276" width="169" height="40"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="169" id="7qk-v3-bhT"/>
+                                <constraint firstAttribute="height" constant="40" id="Zv6-71-ZF2"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <state key="normal" title="立即领取"/>
+                            <userDefinedRuntimeAttributes>
+                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                    <real key="value" value="10"/>
+                                </userDefinedRuntimeAttribute>
+                            </userDefinedRuntimeAttributes>
+                            <connections>
+                                <action selector="sureAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="bmf-Bg-PoU"/>
+                            </connections>
+                        </button>
+                    </subviews>
+                    <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstItem="FdQ-H5-bhI" firstAttribute="top" secondItem="YML-3d-3xZ" secondAttribute="bottom" constant="10" id="4b8-fZ-AAk"/>
+                        <constraint firstItem="YML-3d-3xZ" firstAttribute="top" secondItem="IC2-xC-CLi" secondAttribute="bottom" constant="21" id="5A5-vD-syR"/>
+                        <constraint firstItem="FdQ-H5-bhI" firstAttribute="centerX" secondItem="MiZ-wq-ORz" secondAttribute="centerX" id="Gye-jC-eR5"/>
+                        <constraint firstItem="QeN-Iz-5Fd" firstAttribute="centerX" secondItem="MiZ-wq-ORz" secondAttribute="centerX" id="Pcd-Q3-Ezv"/>
+                        <constraint firstItem="QeN-Iz-5Fd" firstAttribute="top" secondItem="shF-sU-HAn" secondAttribute="top" id="a63-7b-Ehi"/>
+                        <constraint firstItem="YML-3d-3xZ" firstAttribute="centerX" secondItem="MiZ-wq-ORz" secondAttribute="centerX" id="aRq-ob-Zrl"/>
+                        <constraint firstItem="IC2-xC-CLi" firstAttribute="top" secondItem="MiZ-wq-ORz" secondAttribute="top" constant="23" id="cSa-s7-MfX"/>
+                        <constraint firstItem="IC2-xC-CLi" firstAttribute="centerX" secondItem="MiZ-wq-ORz" secondAttribute="centerX" id="exL-ag-L9Q"/>
+                        <constraint firstAttribute="bottom" secondItem="QeN-Iz-5Fd" secondAttribute="bottom" constant="38" id="iRd-4w-yLl"/>
+                        <constraint firstAttribute="width" secondItem="MiZ-wq-ORz" secondAttribute="height" multiplier="257:354" id="l24-6q-vsW"/>
+                        <constraint firstItem="QeN-Iz-5Fd" firstAttribute="trailing" secondItem="shF-sU-HAn" secondAttribute="trailing" id="nPo-f6-IUt"/>
+                        <constraint firstItem="QeN-Iz-5Fd" firstAttribute="leading" secondItem="shF-sU-HAn" secondAttribute="leading" id="wY8-hs-shA"/>
+                        <constraint firstItem="QeN-Iz-5Fd" firstAttribute="bottom" secondItem="shF-sU-HAn" secondAttribute="bottom" id="zvl-z3-ehd"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="12"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                </view>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="bIK-mD-ZCc">
+                    <rect key="frame" x="167.66666666666666" y="520.66666666666663" width="40" height="40"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="40" id="0R3-Vj-qjX"/>
+                        <constraint firstAttribute="width" constant="40" id="B7L-cH-EMp"/>
+                    </constraints>
+                    <state key="normal" image="alert_cancle"/>
+                    <connections>
+                        <action selector="cancleAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="yjy-Uj-O67"/>
+                    </connections>
+                </button>
+            </subviews>
+            <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.46000000000000002" colorSpace="custom" customColorSpace="sRGB"/>
+            <constraints>
+                <constraint firstItem="MiZ-wq-ORz" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="Bew-aJ-rIM"/>
+                <constraint firstItem="bIK-mD-ZCc" firstAttribute="top" secondItem="MiZ-wq-ORz" secondAttribute="bottom" constant="10" id="JvZ-b3-XVX"/>
+                <constraint firstItem="MiZ-wq-ORz" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="59" id="Kgi-N1-xhh"/>
+                <constraint firstItem="bIK-mD-ZCc" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="vNa-JL-E2l"/>
+                <constraint firstItem="MiZ-wq-ORz" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" id="vpd-Ho-UBP"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="colorView" destination="shF-sU-HAn" id="n5q-60-PDe"/>
+            </connections>
+            <point key="canvasLocation" x="56.153846153846153" y="-11.018957345971563"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="alert_cancle" width="28" height="28"/>
+        <image name="award_image" width="186" height="106"/>
+    </resources>
+</document>

+ 24 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotAlbum/HomeHotAlbumCell.m

@@ -9,6 +9,8 @@
 
 @interface HomeHotAlbumCell ()
 
+@property (weak, nonatomic) IBOutlet UIImageView *tagImageView;
+
 @property (weak, nonatomic) IBOutlet UIImageView *albumImage;
 
 @property (weak, nonatomic) IBOutlet UILabel *albumNameLabel;
@@ -36,6 +38,28 @@
     else {
         [self.collectionImage setImage:[UIImage imageNamed:@"album_collect"]];
     }
+    
+    NSString *musicTag = model.paymentType;
+    NSArray *chargeArray = [musicTag componentsSeparatedByString:@","];
+    
+    BOOL isVIP = NO;
+    BOOL isCHARGE = NO;
+    for (NSInteger index = 0; index < chargeArray.count; index++) {
+        NSString *desc = chargeArray[index];
+        if ([desc isEqualToString:@"VIP"]) {
+            isVIP = YES;
+        }
+        else if ([desc isEqualToString:@"CHARGE"]) {
+            isCHARGE = YES;
+        }
+    }
+    self.tagImageView.hidden = NO;
+    if (isCHARGE == NO && isVIP == NO) {
+        self.tagImageView.hidden = YES;
+    }
+    else {
+        [self.tagImageView setImage:[UIImage imageNamed:@"albumTag_charge"]];
+    }
 }
 
 @end

+ 9 - 2
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotAlbum/HomeHotAlbumCell.xib

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21225" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
     <device id="retina6_1" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21207"/>
         <capability name="Safe area layout guides" minToolsVersion="9.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
@@ -29,6 +29,9 @@
                             </userDefinedRuntimeAttribute>
                         </userDefinedRuntimeAttributes>
                     </imageView>
+                    <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="albumTag_VIP" translatesAutoresizingMaskIntoConstraints="NO" id="kDC-Ga-mwz">
+                        <rect key="frame" x="3" y="10" width="26" height="14"/>
+                    </imageView>
                     <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="萨克斯新手…" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1bh-Zm-ov0">
                         <rect key="frame" x="3" y="114" width="94" height="20"/>
                         <constraints>
@@ -88,6 +91,8 @@
                 <constraint firstItem="1bh-Zm-ov0" firstAttribute="top" secondItem="mkp-8k-Rld" secondAttribute="bottom" constant="10" id="8Ah-sJ-mEm"/>
                 <constraint firstItem="mkp-8k-Rld" firstAttribute="centerX" secondItem="gTV-IL-0wX" secondAttribute="centerX" id="Oca-f5-sam"/>
                 <constraint firstItem="mkp-8k-Rld" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" constant="10" id="XeE-bJ-DC9"/>
+                <constraint firstItem="kDC-Ga-mwz" firstAttribute="leading" secondItem="mkp-8k-Rld" secondAttribute="leading" id="cTD-hZ-3NT"/>
+                <constraint firstItem="kDC-Ga-mwz" firstAttribute="top" secondItem="mkp-8k-Rld" secondAttribute="top" id="oAx-0F-MDG"/>
                 <constraint firstItem="1bh-Zm-ov0" firstAttribute="trailing" secondItem="mkp-8k-Rld" secondAttribute="trailing" id="pJb-VN-R1q"/>
                 <constraint firstItem="1bh-Zm-ov0" firstAttribute="leading" secondItem="mkp-8k-Rld" secondAttribute="leading" id="swt-MU-p2E"/>
                 <constraint firstItem="xPp-Kr-NCd" firstAttribute="bottom" secondItem="mkp-8k-Rld" secondAttribute="bottom" constant="-3" id="vEg-aT-hU0"/>
@@ -99,11 +104,13 @@
                 <outlet property="albumNameLabel" destination="1bh-Zm-ov0" id="KrW-Bf-gSu"/>
                 <outlet property="collectLabel" destination="HyK-tc-JYn" id="NNp-Qk-B0u"/>
                 <outlet property="collectionImage" destination="2m8-Or-9p5" id="iXy-DP-NiM"/>
+                <outlet property="tagImageView" destination="kDC-Ga-mwz" id="xoz-Vg-J8M"/>
             </connections>
             <point key="canvasLocation" x="305.79710144927537" y="89.0625"/>
         </collectionViewCell>
     </objects>
     <resources>
+        <image name="albumTag_VIP" width="26" height="14"/>
         <image name="album_collect" width="8" height="8"/>
         <image name="video_placeholder" width="103" height="72"/>
     </resources>

+ 15 - 0
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotMusic/HomeHotMusicCellView.m

@@ -27,6 +27,10 @@
 @property (weak, nonatomic) IBOutlet NSLayoutConstraint *qualityTagWidth;
 @property (weak, nonatomic) IBOutlet NSLayoutConstraint *qualityLeft;
 
+@property (weak, nonatomic) IBOutlet UIImageView *albumTag;
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *albumTagWidth;
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *albumTagLeft;
+
 @end
 
 @implementation HomeHotMusicCellView
@@ -51,6 +55,17 @@
         self.qualityLeft.constant = 0.0f;
     }
     
+    if (sourceModel.albumNums > 0) {
+        self.albumTag.hidden = NO;
+        self.albumTagWidth.constant = 15.0f;
+        self.albumTagLeft.constant = 5.0f;
+    }
+    else {
+        self.albumTag.hidden = YES;
+        self.albumTagWidth.constant = 0.0f;
+        self.albumTagLeft.constant = 0.0f;
+    }
+    
     if ([NSString isEmptyString:sourceModel.musicSheetName]) {
         self.songNameLabel.text = @"";
     }

+ 18 - 5
KulexiuForStudent/KulexiuForStudent/Module/Home/View/HotMusic/HomeHotMusicCellView.xib

@@ -23,19 +23,19 @@
                     </constraints>
                 </view>
                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="最伟大的作品" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7xw-r5-qc1">
-                    <rect key="frame" x="65" y="17.5" width="98" height="20"/>
+                    <rect key="frame" x="85" y="17.666666666666668" width="98" height="20.000000000000004"/>
                     <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                     <color key="textColor" red="0.1019607843" green="0.1019607843" blue="0.1019607843" alpha="1" colorSpace="calibratedRGB"/>
                     <nil key="highlightedColor"/>
                 </label>
                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="-周杰伦" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="jm2-P7-5K9">
-                    <rect key="frame" x="168" y="20" width="43" height="15"/>
+                    <rect key="frame" x="188" y="20" width="43" height="15"/>
                     <fontDescription key="fontDescription" type="system" pointSize="12"/>
                     <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
                     <nil key="highlightedColor"/>
                 </label>
                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="上传者:一把剑走天涯" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yx5-8B-fUi">
-                    <rect key="frame" x="11" y="49.5" width="123" height="15"/>
+                    <rect key="frame" x="11" y="49.666666666666664" width="123" height="14.999999999999993"/>
                     <fontDescription key="fontDescription" type="system" pointSize="12"/>
                     <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
                     <nil key="highlightedColor"/>
@@ -55,7 +55,7 @@
                     </constraints>
                 </view>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="28W-1K-xs7">
-                    <rect key="frame" x="11" y="79.5" width="390" height="0.5"/>
+                    <rect key="frame" x="11" y="79.666666666666671" width="390" height="0.3333333333333286"/>
                     <color key="backgroundColor" red="0.90980392160000001" green="0.90980392160000001" blue="0.90980392160000001" alpha="1" colorSpace="calibratedRGB"/>
                     <constraints>
                         <constraint firstAttribute="height" constant="0.5" id="MXY-Ik-nnJ"/>
@@ -68,6 +68,13 @@
                         <constraint firstAttribute="height" constant="17" id="dpI-He-aFb"/>
                     </constraints>
                 </imageView>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="music_albumTag" translatesAutoresizingMaskIntoConstraints="NO" id="Cxx-YR-LH0">
+                    <rect key="frame" x="65" y="20" width="15" height="15"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="15" id="Aq4-Sd-bfE"/>
+                        <constraint firstAttribute="width" constant="15" id="Hqu-Jg-wlv"/>
+                    </constraints>
+                </imageView>
                 <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fGG-J1-J8q">
                     <rect key="frame" x="0.0" y="0.0" width="414" height="80"/>
                     <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
@@ -78,10 +85,10 @@
             </subviews>
             <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
             <constraints>
+                <constraint firstItem="Cxx-YR-LH0" firstAttribute="leading" secondItem="nUD-13-vp7" secondAttribute="trailing" constant="5" id="5pk-CX-qTO"/>
                 <constraint firstItem="nUD-13-vp7" firstAttribute="centerY" secondItem="N1D-TV-iWW" secondAttribute="centerY" id="9kp-XG-xs3"/>
                 <constraint firstItem="6eO-qE-g8x" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="jm2-P7-5K9" secondAttribute="trailing" constant="10" id="BiV-XL-Qww"/>
                 <constraint firstAttribute="bottom" secondItem="28W-1K-xs7" secondAttribute="bottom" id="EEi-j6-bXC"/>
-                <constraint firstItem="7xw-r5-qc1" firstAttribute="leading" secondItem="nUD-13-vp7" secondAttribute="trailing" constant="5" id="GIe-Zj-QDP"/>
                 <constraint firstItem="N1D-TV-iWW" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="19" id="Gyv-2L-yeF"/>
                 <constraint firstItem="qrG-kH-VRz" firstAttribute="leading" secondItem="yx5-8B-fUi" secondAttribute="trailing" constant="12" id="Jbt-JJ-kdQ"/>
                 <constraint firstItem="nUD-13-vp7" firstAttribute="leading" secondItem="N1D-TV-iWW" secondAttribute="trailing" constant="5" id="LNt-pH-K0U"/>
@@ -91,6 +98,7 @@
                 <constraint firstItem="28W-1K-xs7" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="11" id="XMy-D4-KQK"/>
                 <constraint firstItem="qrG-kH-VRz" firstAttribute="centerY" secondItem="yx5-8B-fUi" secondAttribute="centerY" id="cMa-5P-a2v"/>
                 <constraint firstItem="6eO-qE-g8x" firstAttribute="leading" secondItem="qrG-kH-VRz" secondAttribute="trailing" constant="5" id="cPj-aW-vdE"/>
+                <constraint firstItem="7xw-r5-qc1" firstAttribute="leading" secondItem="Cxx-YR-LH0" secondAttribute="trailing" constant="5" id="dP6-V4-wqu"/>
                 <constraint firstAttribute="trailing" secondItem="28W-1K-xs7" secondAttribute="trailing" constant="13" id="dez-R9-Ydg"/>
                 <constraint firstAttribute="trailing" secondItem="fGG-J1-J8q" secondAttribute="trailing" id="j3e-Gz-5as"/>
                 <constraint firstAttribute="bottom" secondItem="fGG-J1-J8q" secondAttribute="bottom" id="jNd-iF-vI9"/>
@@ -101,11 +109,15 @@
                 <constraint firstItem="yx5-8B-fUi" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="11" id="tKz-3F-Rw0"/>
                 <constraint firstItem="fGG-J1-J8q" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="vln-aR-Mmc"/>
                 <constraint firstItem="7xw-r5-qc1" firstAttribute="centerY" secondItem="N1D-TV-iWW" secondAttribute="centerY" id="xew-7a-geL"/>
+                <constraint firstItem="7xw-r5-qc1" firstAttribute="centerY" secondItem="Cxx-YR-LH0" secondAttribute="centerY" id="zTO-MI-0nn"/>
             </constraints>
             <nil key="simulatedTopBarMetrics"/>
             <nil key="simulatedBottomBarMetrics"/>
             <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
             <connections>
+                <outlet property="albumTag" destination="Cxx-YR-LH0" id="8di-1S-tpn"/>
+                <outlet property="albumTagLeft" destination="5pk-CX-qTO" id="ucF-sm-pgl"/>
+                <outlet property="albumTagWidth" destination="Hqu-Jg-wlv" id="t2J-kH-tD9"/>
                 <outlet property="lineView" destination="28W-1K-xs7" id="4mk-r2-0Cz"/>
                 <outlet property="qualityLeft" destination="LNt-pH-K0U" id="aqL-h3-zpK"/>
                 <outlet property="qualityMusicTag" destination="nUD-13-vp7" id="gbb-4d-GRc"/>
@@ -122,6 +134,7 @@
     </objects>
     <resources>
         <image name="home_music_play" width="24" height="24"/>
+        <image name="music_albumTag" width="15" height="15"/>
         <image name="quality_tag" width="14" height="17"/>
         <systemColor name="systemBackgroundColor">
             <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>

+ 1 - 1
KulexiuForStudent/KulexiuForStudent/Module/Home/View/KSNewsAlert.m

@@ -25,7 +25,7 @@
 
 + (instancetype)shareInstance {
     KSNewsAlert *view = [[[NSBundle mainBundle] loadNibNamed:@"KSNewsAlert" owner:nil options:nil] firstObject];
-    view.frame = CGRectMake(0, 0, kScreenWidth, kScreenHeight);
+    view.frame = CGRectMake(0, 0, KPortraitWidth, KPortraitHeight);
     return view;
 };
 

+ 6 - 1
KulexiuForStudent/KulexiuForStudent/Module/Login/Controller/VefiCodeLoginController.m

@@ -27,9 +27,15 @@
     // Do any additional setup after loading the view.
     self.ks_prefersNavigationBarHidden = YES;
     [self configUI];
+    
+}
+
+- (void)viewDidAppear:(BOOL)animated {
+    [super viewDidAppear:animated];
     if (![NSString isEmptyString:self.phoneNo]) {
         [self queryVefiCode];
     }
+    [_bodyView showKeyboard];
 }
 
 - (void)configUI {
@@ -53,7 +59,6 @@
         self.automaticallyAdjustsScrollViewInsets = NO;
     }
     
-    [_bodyView showKeyboard];
 }
 
 - (void)operationAction:(VEFIACTION)action code:(NSString *)code {

+ 7 - 0
KulexiuForStudent/KulexiuForStudent/Module/Mine/Controller/MineViewController.m

@@ -254,6 +254,13 @@
             [self.navigationController pushViewController:webCtrl animated:YES];
         }
             break;
+        case MINEVIEWTYPE_AWARD:
+        {
+            KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
+            webCtrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/awardActivity"];
+            [self.navigationController pushViewController:webCtrl animated:YES];
+        }
+            break;
         default:
             break;
     }

+ 18 - 2
KulexiuForStudent/KulexiuForStudent/Module/Mine/Setting/Controller/UserAuthViewController.m

@@ -7,6 +7,7 @@
 
 #import "UserAuthViewController.h"
 #import "UserAuthBodyView.h"
+#import "KSBaseWKWebViewController.h"
 
 @interface UserAuthViewController ()
 
@@ -33,11 +34,22 @@
         make.top.right.bottom.left.mas_equalTo(self.view);
     }];
     MJWeakSelf;
-    [self.bodyView sureAuthCall:^{
-        [weakSelf authAction];
+    [self.bodyView sureAuthCall:^(BOOL toProtocalDetail) {
+        if (toProtocalDetail) {
+            [weakSelf toProtocalDetail];
+        }
+        else {
+            [weakSelf authAction];
+        }
     }];
 }
 
+- (void)toProtocalDetail {
+    KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
+    webCtrl.url = [NSString stringWithFormat:@"%@%@",WEBHOST, @"/#/previewProtocol"];
+    [self.navigationController pushViewController:webCtrl animated:YES];
+}
+
 - (void)sureCallback:(AuthSuccessCallback)callback {
     if (callback) {
         self.callback = callback;
@@ -52,6 +64,10 @@
         [self MBPShow:@"请输入身份证号"];
         return;
     }
+    else if (self.bodyView.isAgree == NO) {
+        [self MBPShow:@"请阅读并同意用户注册协议"];
+        return;
+    }
     [self showhud];
     [KSNetworkingManager realNameAuthRequest:KS_POST idCardNo:self.bodyView.cardField.text realName:self.bodyView.nameField.text success:^(NSDictionary * _Nonnull dic) {
         [self removehub];

+ 3 - 1
KulexiuForStudent/KulexiuForStudent/Module/Mine/Setting/View/UserAuthBodyView.h

@@ -9,7 +9,7 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-typedef void(^AuthSureCallback)(void);
+typedef void(^AuthSureCallback)(BOOL toProtocalDetail);
 
 @interface UserAuthBodyView : UIView
 
@@ -17,6 +17,8 @@ typedef void(^AuthSureCallback)(void);
 
 @property (weak, nonatomic) IBOutlet UITextField *cardField;
 
+@property (nonatomic, assign) BOOL isAgree;
+
 + (instancetype)shareInstance;
 
 - (void)sureAuthCall:(AuthSureCallback)callback;

+ 26 - 1
KulexiuForStudent/KulexiuForStudent/Module/Mine/Setting/View/UserAuthBodyView.m

@@ -11,6 +11,9 @@
 
 @property (nonatomic, copy) AuthSureCallback callback;
 
+@property (weak, nonatomic) IBOutlet UILabel *registerProtocalLabel;
+
+@property (weak, nonatomic) IBOutlet UIButton *sureButton;
 
 @end
 
@@ -20,6 +23,13 @@
     [super awakeFromNib];
     self.nameField.delegate = self;
     self.cardField.delegate = self;
+    
+    [self.sureButton setImage:[UIImage imageNamed:@"login_unseleted"] forState:UIControlStateNormal];
+    [self.sureButton setImage:[UIImage imageNamed:@"login_seleted"] forState:UIControlStateSelected];
+    self.isAgree = NO;
+    NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:@"我已阅读并同意《用户注册协议》" attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:12.0f], NSForegroundColorAttributeName:HexRGB(0x999999)}];
+    [attr addAttributes:@{NSForegroundColorAttributeName:THEMECOLOR} range:NSMakeRange(7, 8)];
+    [self.registerProtocalLabel setAttributedText:attr];
 }
 
 + (instancetype)shareInstance {
@@ -34,8 +44,23 @@
 }
 
 - (IBAction)sureAction:(id)sender {
+    [self endEditing:YES];
+    if (self.callback) {
+        self.callback(NO);
+    }
+}
+
+- (IBAction)selectButtonAction:(id)sender {
+    [self endEditing:YES];
+    self.sureButton.selected = !self.sureButton.selected;
+    _isAgree = self.sureButton.isSelected;
+}
+
+
+- (IBAction)registerProtocal:(id)sender {
+    [self endEditing:YES];
     if (self.callback) {
-        self.callback();
+        self.callback(YES);
     }
 }
 

+ 42 - 2
KulexiuForStudent/KulexiuForStudent/Module/Mine/Setting/View/UserAuthBodyView.xib

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21225" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
     <device id="retina6_1" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21207"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -108,17 +108,52 @@
                         <action selector="sureAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="TbP-ux-Lyc"/>
                     </connections>
                 </button>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="3Qw-9b-gHZ">
+                    <rect key="frame" x="28" y="256" width="30" height="30"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="30" id="8sW-7Y-fuE"/>
+                        <constraint firstAttribute="width" constant="30" id="eYw-NC-acC"/>
+                    </constraints>
+                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                    <state key="normal" image="login_unseleted"/>
+                    <connections>
+                        <action selector="selectButtonAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="1Lp-99-YPI"/>
+                    </connections>
+                </button>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="我已阅读并同意《用户注册协议》" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="gdT-Pm-kW0">
+                    <rect key="frame" x="58" y="263.5" width="184" height="15"/>
+                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="cSr-tq-ags">
+                    <rect key="frame" x="116" y="256" width="126" height="30"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="30" id="aid-iZ-H39"/>
+                    </constraints>
+                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                    <connections>
+                        <action selector="registerProtocal:" destination="iN0-l3-epB" eventType="touchUpInside" id="6Wj-m5-BRg"/>
+                    </connections>
+                </button>
             </subviews>
             <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
             <constraints>
+                <constraint firstItem="gdT-Pm-kW0" firstAttribute="leading" secondItem="3Qw-9b-gHZ" secondAttribute="trailing" id="11K-wW-UF0"/>
                 <constraint firstAttribute="trailing" secondItem="Ffm-T7-ztd" secondAttribute="trailing" constant="27" id="2BE-on-vRw"/>
+                <constraint firstItem="cSr-tq-ags" firstAttribute="trailing" secondItem="gdT-Pm-kW0" secondAttribute="trailing" id="83L-L9-QwE"/>
                 <constraint firstItem="aeI-9x-Zku" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="28" id="8Iw-kG-bru"/>
                 <constraint firstItem="zXT-wQ-9xf" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="15" id="E5t-Aw-Gex"/>
+                <constraint firstItem="3Qw-9b-gHZ" firstAttribute="leading" secondItem="aeI-9x-Zku" secondAttribute="leading" id="Py7-TB-dDf"/>
                 <constraint firstItem="zXT-wQ-9xf" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="27" id="TEH-LN-pPI"/>
+                <constraint firstItem="cSr-tq-ags" firstAttribute="centerY" secondItem="gdT-Pm-kW0" secondAttribute="centerY" id="Ukn-Ms-qhO"/>
                 <constraint firstAttribute="trailing" secondItem="zXT-wQ-9xf" secondAttribute="trailing" constant="27" id="WU6-BI-WfH"/>
                 <constraint firstAttribute="trailing" secondItem="aeI-9x-Zku" secondAttribute="trailing" constant="28" id="jQT-ed-bsl"/>
                 <constraint firstItem="aeI-9x-Zku" firstAttribute="top" secondItem="Ffm-T7-ztd" secondAttribute="bottom" constant="27" id="kRA-iQ-sHL"/>
+                <constraint firstItem="gdT-Pm-kW0" firstAttribute="centerY" secondItem="3Qw-9b-gHZ" secondAttribute="centerY" id="kv1-VO-7XW"/>
+                <constraint firstItem="cSr-tq-ags" firstAttribute="leading" secondItem="gdT-Pm-kW0" secondAttribute="leading" multiplier="2" id="l8O-hh-Dlv"/>
                 <constraint firstItem="Ffm-T7-ztd" firstAttribute="top" secondItem="zXT-wQ-9xf" secondAttribute="bottom" constant="15" id="pXk-lo-3Gc"/>
+                <constraint firstItem="3Qw-9b-gHZ" firstAttribute="top" secondItem="aeI-9x-Zku" secondAttribute="bottom" constant="15" id="psq-Kp-zqq"/>
                 <constraint firstItem="Ffm-T7-ztd" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="27" id="zeY-2I-CA2"/>
             </constraints>
             <nil key="simulatedTopBarMetrics"/>
@@ -127,8 +162,13 @@
             <connections>
                 <outlet property="cardField" destination="JWP-XS-Fwe" id="WSn-8z-FrL"/>
                 <outlet property="nameField" destination="3vY-NV-dp4" id="qPy-wI-AL0"/>
+                <outlet property="registerProtocalLabel" destination="gdT-Pm-kW0" id="H4b-MQ-rKh"/>
+                <outlet property="sureButton" destination="3Qw-9b-gHZ" id="0aI-C6-Z0r"/>
             </connections>
             <point key="canvasLocation" x="131.8840579710145" y="-21.763392857142858"/>
         </view>
     </objects>
+    <resources>
+        <image name="login_unseleted" width="15" height="15"/>
+    </resources>
 </document>

+ 1 - 0
KulexiuForStudent/KulexiuForStudent/Module/Mine/View/MineBodyView.h

@@ -26,6 +26,7 @@ typedef NS_ENUM(NSInteger, MINEVIEWTYPE) {
     MINEVIEWTYPE_FEEDBACK, // 反馈
     MINEVIEWTYPE_TICKET,
     MINEVIEWTYPE_CONTACT = 1017, // 联系我们
+    MINEVIEWTYPE_AWARD,   // 活动奖品
 };
 typedef void(^MineViewCallback)(MINEVIEWTYPE type);
 

+ 4 - 0
KulexiuForStudent/KulexiuForStudent/Module/Mine/View/MineBodyView.m

@@ -23,6 +23,8 @@
 
 @property (weak, nonatomic) IBOutlet UIView *ticketView;
 
+@property (weak, nonatomic) IBOutlet UIView *awardView;
+
 @property (weak, nonatomic) IBOutlet UILabel *residueCourseLabel;
 
 @property (weak, nonatomic) IBOutlet UILabel *followTeacherLabel;
@@ -145,12 +147,14 @@
         self.memberView.hidden = NO;
         self.recordView.hidden = NO;
         self.ticketView.hidden = NO;
+        self.awardView.hidden = NO;
     }
     else {
         self.memberViewHeight.constant = 0.0f;
         self.memberView.hidden = YES;
         self.recordView.hidden = YES;
         self.ticketView.hidden = YES;
+        self.awardView.hidden = YES;
     }
 }
 

+ 18 - 8
KulexiuForStudent/KulexiuForStudent/Module/Mine/View/MineBodyView.xib

@@ -356,7 +356,7 @@
                         <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="A7V-1n-5kh">
                             <rect key="frame" x="0.0" y="0.0" width="130" height="80"/>
                             <subviews>
-                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="1234" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lLR-pZ-jam">
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lLR-pZ-jam">
                                     <rect key="frame" x="0.0" y="14" width="130" height="26"/>
                                     <constraints>
                                         <constraint firstAttribute="height" constant="26" id="88S-nh-mi3"/>
@@ -393,7 +393,7 @@
                         <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="PYL-4D-6TG">
                             <rect key="frame" x="260" y="0.0" width="130" height="80"/>
                             <subviews>
-                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="222" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="gfo-ED-EEb">
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="gfo-ED-EEb">
                                     <rect key="frame" x="0.0" y="14" width="130" height="26"/>
                                     <constraints>
                                         <constraint firstAttribute="height" constant="26" id="60k-Q6-ldX"/>
@@ -434,7 +434,7 @@
                         <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="uWw-1c-qnY">
                             <rect key="frame" x="130" y="0.0" width="130" height="80"/>
                             <subviews>
-                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="222" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kXq-zC-0rd">
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kXq-zC-0rd">
                                     <rect key="frame" x="0.0" y="14" width="130" height="26"/>
                                     <constraints>
                                         <constraint firstAttribute="height" constant="26" id="EBC-n2-Ip5"/>
@@ -686,22 +686,22 @@
                                 <outletCollection property="gestureRecognizers" destination="CN2-UT-fL0" appends="YES" id="osB-ur-7WM"/>
                             </connections>
                         </view>
-                        <view hidden="YES" tag="1005" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="A9g-HO-Cfh">
+                        <view hidden="YES" tag="1018" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="A9g-HO-Cfh">
                             <rect key="frame" x="289.5" y="51" width="96.5" height="80"/>
                             <subviews>
-                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="3Gb-gF-PPI">
+                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="activity_award" translatesAutoresizingMaskIntoConstraints="NO" id="3Gb-gF-PPI">
                                     <rect key="frame" x="27.5" y="0.0" width="42" height="42"/>
                                     <constraints>
                                         <constraint firstAttribute="height" constant="42" id="LfR-Mb-1jJ"/>
                                         <constraint firstAttribute="width" constant="42" id="kSp-7v-IrP"/>
                                     </constraints>
                                 </imageView>
-                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="评测记录" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="M6z-ZK-pCe">
-                                    <rect key="frame" x="26" y="49" width="45" height="16"/>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="活动奖品" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="M6z-ZK-pCe">
+                                    <rect key="frame" x="23.5" y="49" width="49.5" height="16"/>
                                     <constraints>
                                         <constraint firstAttribute="height" constant="16" id="FxY-EK-KVj"/>
                                     </constraints>
-                                    <fontDescription key="fontDescription" type="system" pointSize="11"/>
+                                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
                                     <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
                                     <nil key="highlightedColor"/>
                                 </label>
@@ -714,6 +714,9 @@
                                 <constraint firstItem="M6z-ZK-pCe" firstAttribute="centerX" secondItem="3Gb-gF-PPI" secondAttribute="centerX" id="JYp-vW-0Vh"/>
                                 <constraint firstItem="M6z-ZK-pCe" firstAttribute="top" secondItem="3Gb-gF-PPI" secondAttribute="bottom" constant="7" id="kPT-nf-Wuv"/>
                             </constraints>
+                            <connections>
+                                <outletCollection property="gestureRecognizers" destination="1Cs-XZ-02t" appends="YES" id="YFQ-dv-VpT"/>
+                            </connections>
                         </view>
                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="服务工具" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Kfn-bS-Ygw">
                             <rect key="frame" x="14" y="14" width="66" height="22"/>
@@ -895,6 +898,7 @@
             <nil key="simulatedBottomBarMetrics"/>
             <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
             <connections>
+                <outlet property="awardView" destination="A9g-HO-Cfh" id="IKa-fq-2C9"/>
                 <outlet property="finishCourseLabel" destination="lLR-pZ-jam" id="cVd-kH-5uJ"/>
                 <outlet property="followTeacherLabel" destination="gfo-ED-EEb" id="Fn2-TG-zkD"/>
                 <outlet property="memberCountLabel" destination="6qT-My-OUw" id="zH9-FK-BPX"/>
@@ -987,8 +991,14 @@
                 <action selector="clickAction:" destination="iN0-l3-epB" id="qSk-kf-Kbw"/>
             </connections>
         </tapGestureRecognizer>
+        <tapGestureRecognizer id="1Cs-XZ-02t">
+            <connections>
+                <action selector="clickAction:" destination="iN0-l3-epB" id="iEV-bE-Lyb"/>
+            </connections>
+        </tapGestureRecognizer>
     </objects>
     <resources>
+        <image name="activity_award" width="42" height="42"/>
         <image name="member_bg" width="334" height="82"/>
         <image name="member_center" width="74" height="26"/>
         <image name="member_logo" width="19" height="18"/>