Steven 2 年 前
コミット
7012226ec8
35 ファイル変更1166 行追加1038 行削除
  1. 42 44
      KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj
  2. BIN
      KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/UserInterfaceState.xcuserstate
  3. 70 6
      KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  4. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/chat_use_sex.imageset/Contents.json
  5. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/chat_use_sex.imageset/chat_use_sex@2x.png
  6. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/chat_use_sex.imageset/chat_use_sex@3x.png
  7. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/chat_user_subject.imageset/Contents.json
  8. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/chat_user_subject.imageset/chat_user_subject@2x.png
  9. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/chat_user_subject.imageset/chat_user_subject@3x.png
  10. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/mine_uid.imageset/Contents.json
  11. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/mine_uid.imageset/mine_uid@2x.png
  12. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/mine_uid.imageset/mine_uid@3x.png
  13. 8 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.h
  14. 18 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.m
  15. 4 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/KSChatUserDetailViewController.m
  16. 239 14
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Controller/HomeViewController.m
  17. 0 411
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Model/HomeHotMusicModel.m
  18. 16 11
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Model/HomeMusicModel.h
  19. 449 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Model/HomeMusicModel.m
  20. 2 2
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicCellView.h
  21. 2 2
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicCellView.m
  22. 1 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicView.m
  23. 1 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicView.xib
  24. 5 6
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeNewMusic/HomeNewMusicView.h
  25. 9 9
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeNewMusic/HomeNewMusicView.m
  26. 49 49
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeNewMusic/HomeNewMusicView.xib
  27. 0 23
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusicCellView.h
  28. 0 166
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusicCellView.m
  29. 0 154
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusicCellView.xib
  30. 0 19
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusicCollectionCell.h
  31. 0 62
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusicCollectionCell.m
  32. 0 57
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusicCollectionCell.xib
  33. 26 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeRecommendMusic/HomeRecommendMusicView.h
  34. 48 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeRecommendMusic/HomeRecommendMusicView.m
  35. 111 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeRecommendMusic/HomeRecommendMusicView.xib

+ 42 - 44
KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj

@@ -468,6 +468,11 @@
 		BC12638C28FEB5E600509E90 /* ChatUserInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = BC12638A28FEB5E600509E90 /* ChatUserInfo.m */; };
 		BC12638D28FEB5E600509E90 /* RecentPracticeModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC12638B28FEB5E600509E90 /* RecentPracticeModel.m */; };
 		BC12639028FEC8C200509E90 /* KSChatTagView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC12638F28FEC8C200509E90 /* KSChatTagView.m */; };
+		BC1263A428FF98BB00509E90 /* HomeNewMusicView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC1263A128FF98BB00509E90 /* HomeNewMusicView.m */; };
+		BC1263A528FF98BB00509E90 /* HomeNewMusicView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC1263A228FF98BB00509E90 /* HomeNewMusicView.xib */; };
+		BC1263AA28FF98C300509E90 /* HomeRecommendMusicView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC1263A728FF98C300509E90 /* HomeRecommendMusicView.xib */; };
+		BC1263AB28FF98C300509E90 /* HomeRecommendMusicView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC1263A828FF98C300509E90 /* HomeRecommendMusicView.m */; };
+		BC1263AE28FF9A0300509E90 /* HomeMusicModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC1263AD28FF9A0200509E90 /* HomeMusicModel.m */; };
 		BC1365B8280D130C00EB03E2 /* MyVideoCourseBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC1365B7280D130C00EB03E2 /* MyVideoCourseBodyView.m */; };
 		BC1365BB280D162400EB03E2 /* MyVideoSearchView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC1365BA280D162400EB03E2 /* MyVideoSearchView.m */; };
 		BC1365BD280D163200EB03E2 /* MyVideoSearchView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC1365BC280D163200EB03E2 /* MyVideoSearchView.xib */; };
@@ -569,16 +574,9 @@
 		BC4BCE7A2823AB6500522C8B /* KSAddressPickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4BCE792823AB6500522C8B /* KSAddressPickerView.m */; };
 		BC4BCE7D2823B66000522C8B /* AddressDetailBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4BCE7C2823B66000522C8B /* AddressDetailBodyView.m */; };
 		BC4BCE7F2823B66A00522C8B /* AddressDetailBodyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC4BCE7E2823B66A00522C8B /* AddressDetailBodyView.xib */; };
-		BC4CF28228D051C400961C61 /* HomeQualityMusic.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4CF27A28D051C300961C61 /* HomeQualityMusic.m */; };
-		BC4CF28328D051C500961C61 /* HomeQualityMusicCollectionCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC4CF27B28D051C400961C61 /* HomeQualityMusicCollectionCell.xib */; };
-		BC4CF28428D051C500961C61 /* HomeQualityMusicCollectionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4CF27D28D051C400961C61 /* HomeQualityMusicCollectionCell.m */; };
-		BC4CF28528D051C500961C61 /* HomeQualityMusicCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC4CF27F28D051C400961C61 /* HomeQualityMusicCellView.m */; };
-		BC4CF28628D051C500961C61 /* HomeQualityMusicCellView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC4CF28028D051C400961C61 /* HomeQualityMusicCellView.xib */; };
-		BC4CF28728D051C500961C61 /* HomeQualityMusic.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC4CF28128D051C400961C61 /* HomeQualityMusic.xib */; };
 		BC513E7A28A4D85F003F58C4 /* accomapny_animation.json in Resources */ = {isa = PBXBuildFile; fileRef = BC513E7928A4D85F003F58C4 /* accomapny_animation.json */; };
 		BC513E7C28A4D868003F58C4 /* musicRoom_animation.json in Resources */ = {isa = PBXBuildFile; fileRef = BC513E7B28A4D868003F58C4 /* musicRoom_animation.json */; };
 		BC513E7E28A4D874003F58C4 /* live_animation.json in Resources */ = {isa = PBXBuildFile; fileRef = BC513E7D28A4D874003F58C4 /* live_animation.json */; };
-		BC523B0D289D0FE300E9D66B /* HomeHotMusicModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC523B0B289D0FE300E9D66B /* HomeHotMusicModel.m */; };
 		BC523B1028A09F3000E9D66B /* MineHeadView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC523B0F28A09F2F00E9D66B /* MineHeadView.m */; };
 		BC523B1228A09F3800E9D66B /* MineHeadView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC523B1128A09F3800E9D66B /* MineHeadView.xib */; };
 		BC542E3328406EA400633781 /* UserAuthViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC542E3228406EA400633781 /* UserAuthViewController.m */; };
@@ -1883,6 +1881,14 @@
 		BC12638B28FEB5E600509E90 /* RecentPracticeModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RecentPracticeModel.m; sourceTree = "<group>"; };
 		BC12638E28FEC8C200509E90 /* KSChatTagView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSChatTagView.h; sourceTree = "<group>"; };
 		BC12638F28FEC8C200509E90 /* KSChatTagView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSChatTagView.m; sourceTree = "<group>"; };
+		BC1263A128FF98BB00509E90 /* HomeNewMusicView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeNewMusicView.m; sourceTree = "<group>"; };
+		BC1263A228FF98BB00509E90 /* HomeNewMusicView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HomeNewMusicView.xib; sourceTree = "<group>"; };
+		BC1263A328FF98BB00509E90 /* HomeNewMusicView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeNewMusicView.h; sourceTree = "<group>"; };
+		BC1263A728FF98C300509E90 /* HomeRecommendMusicView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HomeRecommendMusicView.xib; sourceTree = "<group>"; };
+		BC1263A828FF98C300509E90 /* HomeRecommendMusicView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeRecommendMusicView.m; sourceTree = "<group>"; };
+		BC1263A928FF98C300509E90 /* HomeRecommendMusicView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeRecommendMusicView.h; sourceTree = "<group>"; };
+		BC1263AC28FF9A0200509E90 /* HomeMusicModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeMusicModel.h; sourceTree = "<group>"; };
+		BC1263AD28FF9A0200509E90 /* HomeMusicModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeMusicModel.m; sourceTree = "<group>"; };
 		BC1365B6280D130C00EB03E2 /* MyVideoCourseBodyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyVideoCourseBodyView.h; sourceTree = "<group>"; };
 		BC1365B7280D130C00EB03E2 /* MyVideoCourseBodyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MyVideoCourseBodyView.m; sourceTree = "<group>"; };
 		BC1365B9280D162400EB03E2 /* MyVideoSearchView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyVideoSearchView.h; sourceTree = "<group>"; };
@@ -2040,20 +2046,9 @@
 		BC4BCE7B2823B66000522C8B /* AddressDetailBodyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AddressDetailBodyView.h; sourceTree = "<group>"; };
 		BC4BCE7C2823B66000522C8B /* AddressDetailBodyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AddressDetailBodyView.m; sourceTree = "<group>"; };
 		BC4BCE7E2823B66A00522C8B /* AddressDetailBodyView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AddressDetailBodyView.xib; sourceTree = "<group>"; };
-		BC4CF27928D051C300961C61 /* HomeQualityMusic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeQualityMusic.h; sourceTree = "<group>"; };
-		BC4CF27A28D051C300961C61 /* HomeQualityMusic.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeQualityMusic.m; sourceTree = "<group>"; };
-		BC4CF27B28D051C400961C61 /* HomeQualityMusicCollectionCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HomeQualityMusicCollectionCell.xib; sourceTree = "<group>"; };
-		BC4CF27C28D051C400961C61 /* HomeQualityMusicCellView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeQualityMusicCellView.h; sourceTree = "<group>"; };
-		BC4CF27D28D051C400961C61 /* HomeQualityMusicCollectionCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeQualityMusicCollectionCell.m; sourceTree = "<group>"; };
-		BC4CF27E28D051C400961C61 /* HomeQualityMusicCollectionCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeQualityMusicCollectionCell.h; sourceTree = "<group>"; };
-		BC4CF27F28D051C400961C61 /* HomeQualityMusicCellView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeQualityMusicCellView.m; sourceTree = "<group>"; };
-		BC4CF28028D051C400961C61 /* HomeQualityMusicCellView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HomeQualityMusicCellView.xib; sourceTree = "<group>"; };
-		BC4CF28128D051C400961C61 /* HomeQualityMusic.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HomeQualityMusic.xib; sourceTree = "<group>"; };
 		BC513E7928A4D85F003F58C4 /* accomapny_animation.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = accomapny_animation.json; sourceTree = "<group>"; };
 		BC513E7B28A4D868003F58C4 /* musicRoom_animation.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = musicRoom_animation.json; sourceTree = "<group>"; };
 		BC513E7D28A4D874003F58C4 /* live_animation.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = live_animation.json; sourceTree = "<group>"; };
-		BC523B0B289D0FE300E9D66B /* HomeHotMusicModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeHotMusicModel.m; sourceTree = "<group>"; };
-		BC523B0C289D0FE300E9D66B /* HomeHotMusicModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeHotMusicModel.h; sourceTree = "<group>"; };
 		BC523B0E28A09F2F00E9D66B /* MineHeadView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MineHeadView.h; sourceTree = "<group>"; };
 		BC523B0F28A09F2F00E9D66B /* MineHeadView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MineHeadView.m; sourceTree = "<group>"; };
 		BC523B1128A09F3800E9D66B /* MineHeadView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MineHeadView.xib; sourceTree = "<group>"; };
@@ -3991,6 +3986,8 @@
 		277935FC27E32BBF0010E277 /* Model */ = {
 			isa = PBXGroup;
 			children = (
+				BC1263AC28FF9A0200509E90 /* HomeMusicModel.h */,
+				BC1263AD28FF9A0200509E90 /* HomeMusicModel.m */,
 				BCA1136928A4D6E6007FAFB9 /* AnimationSource */,
 				BCDE359D289BC03E00A9A560 /* HomeAlbumModel.h */,
 				BCDE359C289BC03E00A9A560 /* HomeAlbumModel.m */,
@@ -4000,8 +3997,6 @@
 				BC9473FB282A5E71004B3B27 /* NoticeSourceModel.m */,
 				BCA193B4282A80A9004A585D /* RecentCourseModel.h */,
 				BCA193B3282A80A9004A585D /* RecentCourseModel.m */,
-				BC523B0C289D0FE300E9D66B /* HomeHotMusicModel.h */,
-				BC523B0B289D0FE300E9D66B /* HomeHotMusicModel.m */,
 			);
 			path = Model;
 			sourceTree = "<group>";
@@ -4009,8 +4004,9 @@
 		277935FD27E32BBF0010E277 /* View */ = {
 			isa = PBXGroup;
 			children = (
+				BC1263A628FF98C300509E90 /* HomeRecommendMusic */,
+				BC1263A028FF98BB00509E90 /* HomeNewMusic */,
 				BC8B641828F3E8D800A08D16 /* AwardAlert */,
-				BC4CF27828D051B500961C61 /* HomeQuality */,
 				BC4CF27728D0515700961C61 /* HomeMusic */,
 				BCA1134F28A242FC007FAFB9 /* HomeBannerView.h */,
 				BCA1135128A242FC007FAFB9 /* HomeBannerView.m */,
@@ -4911,6 +4907,26 @@
 			path = ChatUserInfo;
 			sourceTree = "<group>";
 		};
+		BC1263A028FF98BB00509E90 /* HomeNewMusic */ = {
+			isa = PBXGroup;
+			children = (
+				BC1263A128FF98BB00509E90 /* HomeNewMusicView.m */,
+				BC1263A228FF98BB00509E90 /* HomeNewMusicView.xib */,
+				BC1263A328FF98BB00509E90 /* HomeNewMusicView.h */,
+			);
+			path = HomeNewMusic;
+			sourceTree = "<group>";
+		};
+		BC1263A628FF98C300509E90 /* HomeRecommendMusic */ = {
+			isa = PBXGroup;
+			children = (
+				BC1263A728FF98C300509E90 /* HomeRecommendMusicView.xib */,
+				BC1263A828FF98C300509E90 /* HomeRecommendMusicView.m */,
+				BC1263A928FF98C300509E90 /* HomeRecommendMusicView.h */,
+			);
+			path = HomeRecommendMusic;
+			sourceTree = "<group>";
+		};
 		BC1365BE280D44D500EB03E2 /* NotiferMessage */ = {
 			isa = PBXGroup;
 			children = (
@@ -5221,22 +5237,6 @@
 			path = HomeMusic;
 			sourceTree = "<group>";
 		};
-		BC4CF27828D051B500961C61 /* HomeQuality */ = {
-			isa = PBXGroup;
-			children = (
-				BC4CF27928D051C300961C61 /* HomeQualityMusic.h */,
-				BC4CF27A28D051C300961C61 /* HomeQualityMusic.m */,
-				BC4CF28128D051C400961C61 /* HomeQualityMusic.xib */,
-				BC4CF27C28D051C400961C61 /* HomeQualityMusicCellView.h */,
-				BC4CF27F28D051C400961C61 /* HomeQualityMusicCellView.m */,
-				BC4CF28028D051C400961C61 /* HomeQualityMusicCellView.xib */,
-				BC4CF27E28D051C400961C61 /* HomeQualityMusicCollectionCell.h */,
-				BC4CF27D28D051C400961C61 /* HomeQualityMusicCollectionCell.m */,
-				BC4CF27B28D051C400961C61 /* HomeQualityMusicCollectionCell.xib */,
-			);
-			path = HomeQuality;
-			sourceTree = "<group>";
-		};
 		BC513E7F28A4D9BA003F58C4 /* images */ = {
 			isa = PBXGroup;
 			children = (
@@ -6889,7 +6889,6 @@
 				BCF61BE9280425DA0000ACFE /* InstrumentChooseCell.xib in Resources */,
 				BC76146F280D57220080FD1F /* HomeworkVideoView.xib in Resources */,
 				BC71D1FD2887FDD40010F14B /* img_31.png in Resources */,
-				BC4CF28628D051C500961C61 /* HomeQualityMusicCellView.xib in Resources */,
 				277931CE27E30FC20010E277 /* KSPremissionAlert.xib in Resources */,
 				BC4058942863028C00111BC5 /* NotiferNavView.xib in Resources */,
 				BCA353CF2858A86200377661 /* MusicRoomCourseCell.xib in Resources */,
@@ -7026,7 +7025,6 @@
 				27D83F5927F4225D00062476 /* LivePreviewBodyView.xib in Resources */,
 				BC41104A2806706800800BD9 /* HomeworkListCell.xib in Resources */,
 				BCD457A72863196F0010B493 /* CourseTimeSegView.xib in Resources */,
-				BC4CF28328D051C500961C61 /* HomeQualityMusicCollectionCell.xib in Resources */,
 				BC9070A428C7159F00237958 /* MyStyleNavView.xib in Resources */,
 				2779362E27E33C360010E277 /* LoginBodyView.xib in Resources */,
 				BC8B6E6E285836B600866917 /* low_staff.png in Resources */,
@@ -7042,6 +7040,7 @@
 				BC7CFFBA2817E9FC00CAEB21 /* echarts.min.js in Resources */,
 				BC3673D528A606A500059721 /* live_animation_2.png in Resources */,
 				BC71D2012887FDD40010F14B /* img_18.png in Resources */,
+				BC1263A528FF98BB00509E90 /* HomeNewMusicView.xib in Resources */,
 				BC0A22A0284751F80065C1AB /* KSCloseCourseView.xib in Resources */,
 				BCE6A08727F81B4D00C97704 /* MinePageSubmitView.xib in Resources */,
 				BC14A60F28A0AAE80086395C /* MineFunctionView.xib in Resources */,
@@ -7099,7 +7098,6 @@
 				BC71D1FE2887FDD40010F14B /* img_19.png in Resources */,
 				277D431F27E999A000107DB7 /* ModifyBodyView.xib in Resources */,
 				BC3ACD9C2890D88E00060E97 /* IncomeRecordHeadView.xib in Resources */,
-				BC4CF28728D051C500961C61 /* HomeQualityMusic.xib in Resources */,
 				BCC5840328A9FA8100BAB4CF /* cloud_animation_14.png in Resources */,
 				BC14A61928A0B04A0086395C /* MineBottomView.xib in Resources */,
 				BC8B6E5D2856ED0600866917 /* README.txt in Resources */,
@@ -7142,6 +7140,7 @@
 				BC3673DD28A606A500059721 /* accomapny_animation_3.png in Resources */,
 				BC8C2C662824EB9800FBA5D5 /* NotiferHeadView.xib in Resources */,
 				BC3673D728A606A500059721 /* live_animation_3.png in Resources */,
+				BC1263AA28FF98C300509E90 /* HomeRecommendMusicView.xib in Resources */,
 				2779329A27E30FEB0010E277 /* mss_browseLoading@2x.png in Resources */,
 				BC71D2042887FDD40010F14B /* img_26.png in Resources */,
 				27F9CAFC27EC1AF3003E0FE4 /* ContractListCell.xib in Resources */,
@@ -7258,7 +7257,6 @@
 				277931F327E30FC20010E277 /* UIView+Hints.m in Sources */,
 				2779321927E30FC30010E277 /* UITextView_Toolbar.m in Sources */,
 				BC285833280947BA0024697C /* EvaluateSortView.m in Sources */,
-				BC4CF28428D051C500961C61 /* HomeQualityMusicCollectionCell.m in Sources */,
 				BC32E109286AB142001434DD /* BaseAlertView.m in Sources */,
 				275E3DBF27F45EB90010EC30 /* KSLiveChatroomUserQuit.m in Sources */,
 				BCD6D16528195A91009A773E /* WithdrawApplyBodyView.m in Sources */,
@@ -7476,6 +7474,7 @@
 				BCB9FA40286DA337005D766B /* GuideViewController.m in Sources */,
 				BCC9F44B27F69BD200647449 /* KSIMService.m in Sources */,
 				277931C027E30FC20010E277 /* ArchiveTools.m in Sources */,
+				BC1263A428FF98BB00509E90 /* HomeNewMusicView.m in Sources */,
 				BCDE359E289BC03E00A9A560 /* HomeAlbumModel.m in Sources */,
 				277931FA27E30FC20010E277 /* CALayer+Layout.m in Sources */,
 				BC48C3B4282931C000EE65C5 /* ReceiveEvaluateCell.m in Sources */,
@@ -7530,7 +7529,6 @@
 				BCC9F42427F69BD200647449 /* VideoMaskView.m in Sources */,
 				BCB399BC27F9831D00AFF376 /* CourseForLiveCell.m in Sources */,
 				275B172227EB1BE60081FDEF /* KSRCSearchBar.m in Sources */,
-				BC4CF28528D051C500961C61 /* HomeQualityMusicCellView.m in Sources */,
 				BCC9F35527F5F4FD00647449 /* LiveSeatMember.m in Sources */,
 				277931DB27E30FC20010E277 /* UIButton+EnlargeEdge.m in Sources */,
 				2779324227E30FC30010E277 /* KSNetworkAccessibleManager.m in Sources */,
@@ -7543,6 +7541,7 @@
 				2779326927E30FD80010E277 /* FSCalendarCollectionViewLayout.m in Sources */,
 				BCFE54142817918600AD6786 /* MyIncomeListCell.m in Sources */,
 				BCC9F42527F69BD200647449 /* EmptyView.m in Sources */,
+				BC1263AB28FF98C300509E90 /* HomeRecommendMusicView.m in Sources */,
 				277931F127E30FC20010E277 /* NSString+CZHSizeExtension.m in Sources */,
 				27BC3B2127F2B70300D81E30 /* MusicMessageModel.m in Sources */,
 				BC5756B128B60096002302D8 /* HomeAuthAlertView.m in Sources */,
@@ -7655,7 +7654,6 @@
 				BCE6A08B27F823A300C97704 /* AccompanyCourseCell.m in Sources */,
 				BCC9F42627F69BD200647449 /* KSWhiteboardView.m in Sources */,
 				BCA193BE282B9866004A585D /* MinePageGroupModel.m in Sources */,
-				BC523B0D289D0FE300E9D66B /* HomeHotMusicModel.m in Sources */,
 				27F9CAEA27EC1780003E0FE4 /* KSJXBodyView.m in Sources */,
 				BCB633F827F6A18200ACFDCF /* KSTipsView.m in Sources */,
 				275E3DF627F467ED0010EC30 /* KSChatroomTextCell.m in Sources */,
@@ -7799,7 +7797,6 @@
 				275E3DC527F460030010EC30 /* KSLiveChatroomClose.m in Sources */,
 				277932B527E30FFE0010E277 /* SDCycleScrollView.m in Sources */,
 				BC063D842823CEFE000EB350 /* AddressListModel.m in Sources */,
-				BC4CF28228D051C400961C61 /* HomeQualityMusic.m in Sources */,
 				BCA353DB2858D97C00377661 /* MusicRoomListModel.m in Sources */,
 				2779323627E30FC30010E277 /* LLImageCache.m in Sources */,
 				277931D527E30FC20010E277 /* UIView+KSLayer.m in Sources */,
@@ -7905,6 +7902,7 @@
 				BCC9F41D27F69BD200647449 /* RecentSharedVideoCell.m in Sources */,
 				BC8B6E87285888B100866917 /* MyMusicRoomBodyView.m in Sources */,
 				2779331D27E311A10010E277 /* KSNetworkingManager.m in Sources */,
+				BC1263AE28FF9A0300509E90 /* HomeMusicModel.m in Sources */,
 				BCDE3594289B960100A9A560 /* HomeAlbumView.m in Sources */,
 				BC245705286C434800D1F7C0 /* GCDTimer.m in Sources */,
 				2779362C27E33C2B0010E277 /* LoginBodyView.m in Sources */,

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


+ 70 - 6
KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -286,8 +286,8 @@
             filePath = "KulexiuForTeacher/Module/Home/Controller/HomeViewController.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "452"
-            endingLineNumber = "452"
+            startingLineNumber = "466"
+            endingLineNumber = "466"
             landmarkName = "-requestAlbumSource"
             landmarkType = "7">
          </BreakpointContent>
@@ -423,16 +423,80 @@
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
-            uuid = "02FBB038-735F-450B-B1C0-DD0B6609CA34"
+            uuid = "47E9D8B1-7050-45D3-8E51-7E054423CF78"
             shouldBeEnabled = "Yes"
             ignoreCount = "0"
             continueAfterRunningActions = "No"
             filePath = "KulexiuForTeacher/Module/Chat/Controller/KSChatConversationViewController.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "840"
-            endingLineNumber = "840"
-            landmarkName = "-didTapCellPortrait:"
+            startingLineNumber = "860"
+            endingLineNumber = "860"
+            landmarkName = "-displayStudent:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "81413B7C-3B1C-409D-8750-658CC0ADAB16"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForTeacher/Module/Chat/Controller/KSChatUserDetailViewController.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "97"
+            endingLineNumber = "97"
+            landmarkName = "-requestUserMessage"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "6889381A-8D59-4072-B26C-AEDF274A9082"
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForTeacher/Common/Base/KSNetworkingManager.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "2364"
+            endingLineNumber = "2364"
+            landmarkName = "+queryUserRecentRequest:userId:success:faliure:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "43FEE13D-94E1-42E7-A0A2-C5FB83A9D8F1"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForTeacher/Common/Base/KSNetworkingManager.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "2351"
+            endingLineNumber = "2351"
+            landmarkName = "+queryUserById:rongCloudUserId:success:faliure:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "42E788EA-EF03-41BF-A717-E832F4F98A28"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicCellView.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "60"
+            endingLineNumber = "60"
+            landmarkName = "-configWithMusicModel:hiddenLineView:callback:"
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>

+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/chat_use_sex.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/chat_use_sex.imageset/chat_use_sex@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/chat_use_sex.imageset/chat_use_sex@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/chat_user_subject.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/chat_user_subject.imageset/chat_user_subject@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/chat_user_subject.imageset/chat_user_subject@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/mine_uid.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/mine_uid.imageset/mine_uid@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Chat/mine_uid.imageset/mine_uid@3x.png


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

@@ -1282,5 +1282,13 @@ NS_ASSUME_NONNULL_BEGIN
 /// @param faliure 失败
 + (void)queryUserRecentRequest:(NSString *)get userId:(NSString *)userId success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
 
+// /api-teacher/music/sheet/appMusicSheet
+/// 首页曲目数据
+/// @param post post
+/// @param version version
+/// @param success 成功
+/// @param faliure 失败
++ (void)homeAppMusicSheetRequest:(NSString *)post version:(NSString *)version success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
+
 @end
 NS_ASSUME_NONNULL_END

+ 18 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.m

@@ -2364,4 +2364,22 @@
     [self request:get andWithUrl:url and:parm success:success faliure:faliure];
 }
 
+// /api-teacher/music/sheet/appMusicSheet
+/// 首页曲目数据
+/// @param post post
+/// @param version version
+/// @param success 成功
+/// @param faliure 失败
++ (void)homeAppMusicSheetRequest:(NSString *)post version:(NSString *)version success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    [self configRequestMethodJSON];
+    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-teacher/music/sheet/appMusicSheet"];
+    NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+    [parm setValue:@(NO) forKey:@"myself"];
+    [parm setValue:@"PASS" forKey:@"auditStatus"];
+    [parm setValue:@(1) forKey:@"page"];
+    [parm setValue:@(20) forKey:@"rows"];
+    [parm setValue:version forKey:@"version"];
+    [parm setValue:@"ios-teacher" forKey:@"platform"];
+    [self request:post andWithUrl:url and:parm success:success faliure:faliure];
+}
 @end

+ 4 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Controller/KSChatUserDetailViewController.m

@@ -43,7 +43,10 @@
     [self.view addSubview:imageView];
     
     [self.view addSubview:self.navView];
-    
+    [self.navView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.top.mas_equalTo(self.view);
+        make.height.mas_equalTo(kNaviBarHeight);
+    }];
     self.scrollView.backgroundColor = [UIColor clearColor];
     self.scrollView.delegate = self;
     

+ 239 - 14
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Controller/HomeViewController.m

@@ -40,7 +40,6 @@
 #import "HomeAlbumView.h"
 #import "HomeAlbumModel.h"
 #import "HomeHotAlbumCell.h"
-#import "HomeHotMusicModel.h"
 
 #import "HomeHotMusicView.h"
 #import "HomeHotMusicCollectionCell.h"
@@ -54,6 +53,10 @@
 #import "HomeAuthAlertView.h"
 #import "KSAwardAlertView.h"
 
+#import "HomeNewMusicView.h"
+#import "HomeRecommendMusicView.h"
+#import "HomeMusicModel.h"
+
 #define BUTTONWIDTH (65)
 #define BUTTONHEIGHT (70)
 @interface HomeViewController ()<SDCycleScrollViewDelegate,UIScrollViewDelegate,UICollectionViewDelegate, UICollectionViewDelegateFlowLayout,UICollectionViewDataSource,TYCyclePagerViewDataSource,TYCyclePagerViewDelegate>
@@ -102,6 +105,18 @@
 @property (nonatomic, strong) UICollectionView *musicCollectionView; // 曲谱容器
 @property (nonatomic, assign) CGFloat hotMusicHeight; // music 高度
 
+// 推荐曲目
+@property (nonatomic, strong) HomeRecommendMusicView *recommendMusicView;
+@property (nonatomic, strong) UICollectionView *recommendMusicCollectionView; // 曲谱容器
+@property (nonatomic, strong) NSMutableArray *recommendMusicArray; // 曲谱数据
+@property (nonatomic, assign) CGFloat recommendMusicViewHeight; // music 高度
+
+// 最新曲目
+@property (nonatomic, strong) HomeNewMusicView *newestMusicView;
+@property (nonatomic, strong) UICollectionView *newestMusicCollectionView; // 曲谱容器
+@property (nonatomic, strong) NSMutableArray *newestMusicArray; // 曲谱数据
+@property (nonatomic, assign) CGFloat newestMusicViewHeight; // music 高度
+
 @property (nonatomic, strong) BadgeIntroduceView *intruduceAlert;
 
 @property (nonatomic, strong) HomeAuthAlertView *authAlertView;
@@ -242,7 +257,6 @@
         return;
     }
     // 如果今日已提示过,就不再提醒
-    // 如果今日已提示过,就不再提醒
     NSDictionary *awardAlertDic = UserDefaultObjectForKey(@"awardAlertTime");
     NSString *awardAlertTime = [awardAlertDic stringValueForKey:@"time"];
     NSDate *currendDate = [NSDate date];
@@ -482,31 +496,77 @@
     [self.albumCollectionView reloadData];
 }
 
-
-- (void)requestHotMusicList {
+- (void)requestHomeMusicMessage {
     dispatch_group_enter(self.requestGroup);
-    [KSNetworkingManager homeMusicListRequest:KS_POST version:[USER_MANAGER getCurrentVersion] success:^(NSDictionary * _Nonnull dic) {
+    [KSNetworkingManager homeAppMusicSheetRequest:KS_POST version:[USER_MANAGER getCurrentVersion] success:^(NSDictionary * _Nonnull dic) {
         dispatch_group_leave(self.requestGroup);
         if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
-            NSArray *sourceArray = [[dic dictionaryValueForKey:@"data"] arrayValueForKey:@"rows"];
-            NSMutableArray *musicArray = [NSMutableArray array];
-            for (NSDictionary *parm in sourceArray) {
-                HomeHotMusicModel *model = [[HomeHotMusicModel alloc] initWithDictionary:parm];
-                [musicArray addObject:model];
+            NSDictionary *result = [dic dictionaryValueForKey:@"data"];
+            NSArray *hotMusicSheet = [result arrayValueForKey:@"hotMusicSheet"]; // 最热曲目
+            NSMutableArray *hotArray = [NSMutableArray array];
+            for (NSDictionary *parm in hotMusicSheet) {
+                HomeMusicModel *model = [[HomeMusicModel alloc] initWithDictionary:parm];
+                [hotArray addObject:model];
             }
-            self.dataArray = [NSMutableArray arrayWithArray:musicArray];
+            self.dataArray = [NSMutableArray arrayWithArray:hotArray];
+            
+            NSArray *newMusicSheet = [result arrayValueForKey:@"newMusicSheet"]; // 最新曲目
+            NSMutableArray *newMusicArray = [NSMutableArray array];
+            for (NSDictionary *parm in newMusicSheet) {
+                HomeMusicModel *model = [[HomeMusicModel alloc] initWithDictionary:parm];
+                [newMusicArray addObject:model];
+            }
+            self.newestMusicArray = [NSMutableArray arrayWithArray:newMusicArray];
+            
+            NSArray *topMusicSheet = [result arrayValueForKey:@"topMusicSheet"]; // 推荐曲目
+            NSMutableArray *topMusicArray = [NSMutableArray array];
+            for (NSDictionary *parm in topMusicSheet) {
+                HomeMusicModel *model = [[HomeMusicModel alloc] initWithDictionary:parm];
+                [topMusicArray addObject:model];
+            }
+            self.recommendMusicArray = [NSMutableArray arrayWithArray:topMusicArray];
         }
         else {
             [self MBPShow:MESSAGEKEY];
         }
-        
     } faliure:^(NSError * _Nonnull error) {
         dispatch_group_leave(self.requestGroup);
     }];
 }
 
 
+
+
 - (void)refreshMusicView {
+    
+    if (self.recommendMusicArray.count) {
+        self.recommendMusicViewHeight = [HomeHotMusicView getViewHeight];
+        self.recommendMusicView.hidden = NO;
+    }
+    else {
+        self.recommendMusicViewHeight = CGFLOAT_MIN;
+        self.recommendMusicView.hidden = YES;
+    }
+    
+    [self.recommendMusicView mas_updateConstraints:^(MASConstraintMaker *make) {
+        make.height.mas_equalTo(self.recommendMusicViewHeight);
+    }];
+    [self.recommendMusicCollectionView reloadData];
+    
+    if (self.newestMusicArray.count) {
+        self.newestMusicViewHeight = [HomeHotMusicView getViewHeight];
+        self.newestMusicView.hidden = NO;
+    }
+    else {
+        self.newestMusicViewHeight = CGFLOAT_MIN;
+        self.newestMusicView.hidden = YES;
+    }
+    
+    [self.newestMusicView mas_updateConstraints:^(MASConstraintMaker *make) {
+        make.height.mas_equalTo(self.newestMusicViewHeight);
+    }];
+    [self.newestMusicCollectionView reloadData];
+    
     if (self.dataArray.count) {
         self.hotMusicHeight = [HomeHotMusicView getViewHeight];
         self.hotMusicView.hidden = NO;
@@ -598,11 +658,27 @@
         make.height.mas_equalTo(self.albumViewHeight);
     }];
     
+    [self.scrollView addSubview:self.recommendMusicView];
+    CGFloat recommendMusicHeadHeight = [HomeRecommendMusicView getViewHeight];
+    [self.recommendMusicView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.view);
+        make.top.mas_equalTo(self.albumView.mas_bottom);
+        make.height.mas_equalTo(recommendMusicHeadHeight);
+    }];
+    
+    [self.scrollView addSubview:self.newestMusicView];
+    CGFloat newMusicHeight = [HomeNewMusicView getViewHeight];
+    [self.newestMusicView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.view);
+        make.top.mas_equalTo(self.recommendMusicView.mas_bottom);
+        make.height.mas_equalTo(newMusicHeight);
+    }];
+    
     [self.scrollView addSubview:self.hotMusicView];
     CGFloat musicHeadHeight = [HomeHotMusicView getViewHeight];
     [self.hotMusicView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.right.mas_equalTo(self.view);
-        make.top.mas_equalTo(self.albumView.mas_bottom);
+        make.top.mas_equalTo(self.newestMusicView.mas_bottom);
         make.height.mas_equalTo(musicHeadHeight);
         make.bottom.mas_equalTo(self.scrollView.mas_bottom).offset(-10);
     }];
@@ -618,7 +694,7 @@
     [self requestRecentCourse];
     [self requestNotice];
     [self requestAlbumSource];
-    [self requestHotMusicList];
+    [self requestHomeMusicMessage];
     [self requestAwardMessage];
     
     dispatch_group_notify(self.requestGroup, dispatch_get_main_queue(), ^{
@@ -1062,6 +1138,16 @@
     if (collectionView == self.albumCollectionView) {
         return self.albumArray.count;
     }
+    else if (collectionView == self.recommendMusicCollectionView) {
+        NSInteger lastRowCount = (self.recommendMusicArray.count % 4) > 0 ? 1 : 0;
+        NSInteger count = self.recommendMusicArray.count / 4 + lastRowCount;
+        return count;
+    }
+    else if (collectionView == self.newestMusicCollectionView) {
+        NSInteger lastRowCount = (self.newestMusicArray.count % 4) > 0 ? 1 : 0;
+        NSInteger count = self.newestMusicArray.count / 4 + lastRowCount;
+        return count;
+    }
     else {
         NSInteger lastRowCount = (self.dataArray.count % 4) > 0 ? 1 : 0;
         NSInteger count = self.dataArray.count / 4 + lastRowCount;
@@ -1076,6 +1162,32 @@
         [cell configWithAlbumModel:model];
         return cell;
     }
+    else if (collectionView == self.recommendMusicCollectionView) {
+        NSMutableArray *songArray = [NSMutableArray array];
+        NSInteger length = indexPath.item * 4 + 4 > self.recommendMusicArray.count ? self.recommendMusicArray.count - indexPath.item * 4: 4;
+        NSRange range = NSMakeRange(indexPath.item * 4, length);
+        
+        songArray = [NSMutableArray arrayWithArray:[self.recommendMusicArray subarrayWithRange:range]];
+        HomeHotMusicCollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"HomeHotMusicCollectionCell" forIndexPath:indexPath];
+        MJWeakSelf;
+        [cell configWithSourceArray:songArray callback:^(NSString * _Nonnull songId) {
+            [weakSelf displaySongDetail:songId];
+        }];
+        return cell;
+    }
+    else if (collectionView == self.newestMusicCollectionView) {
+        NSMutableArray *songArray = [NSMutableArray array];
+        NSInteger length = indexPath.item * 4 + 4 > self.newestMusicArray.count ? self.newestMusicArray.count - indexPath.item * 4: 4;
+        NSRange range = NSMakeRange(indexPath.item * 4, length);
+        
+        songArray = [NSMutableArray arrayWithArray:[self.newestMusicArray subarrayWithRange:range]];
+        HomeHotMusicCollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"HomeHotMusicCollectionCell" forIndexPath:indexPath];
+        MJWeakSelf;
+        [cell configWithSourceArray:songArray callback:^(NSString * _Nonnull songId) {
+            [weakSelf displaySongDetail:songId];
+        }];
+        return cell;
+    }
     else {
         NSMutableArray *songArray = [NSMutableArray array];
         NSInteger length = indexPath.item * 4 + 4 > self.dataArray.count ? self.dataArray.count - indexPath.item * 4: 4;
@@ -1167,6 +1279,119 @@
     [self.navigationController pushViewController:ctrl animated:YES];
 }
 
+#pragma mark --- 推荐曲目
+- (HomeRecommendMusicView *)recommendMusicView {
+    if (!_recommendMusicView) {
+        _recommendMusicView = [HomeRecommendMusicView shareInstance];
+        MJWeakSelf;
+        [_recommendMusicView homeMusicMore:^{
+            [weakSelf moreRecommendMusic];
+        }];
+        [_recommendMusicView.musicContentView addSubview:self.recommendMusicCollectionView];
+        [self.recommendMusicCollectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.left.right.bottom.top.mas_equalTo(_recommendMusicView.musicContentView);
+        }];
+    }
+    return _recommendMusicView;
+}
+
+- (UICollectionView *)recommendMusicCollectionView {
+    if (!_recommendMusicCollectionView) {
+        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
+        layout.sectionInset = UIEdgeInsetsMake(12, 14, 12, 14);
+        layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+        _recommendMusicCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
+        _recommendMusicCollectionView.backgroundColor = [UIColor clearColor];
+        _recommendMusicCollectionView.delegate = self;
+        _recommendMusicCollectionView.dataSource = self;
+        _recommendMusicCollectionView.showsVerticalScrollIndicator = NO;
+        _recommendMusicCollectionView.showsHorizontalScrollIndicator = NO;
+        if (@available(iOS 11.0, *)) {
+            _recommendMusicCollectionView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
+        } else {
+            // Fallback on earlier versions
+            if (@available(iOS 13.0, *)) {
+                _recommendMusicCollectionView.automaticallyAdjustsScrollIndicatorInsets = NO;
+            } else {
+                // Fallback on earlier versions
+            }
+        }
+        [_recommendMusicCollectionView registerNib:[UINib nibWithNibName:@"HomeHotMusicCollectionCell" bundle:[NSBundle mainBundle]] forCellWithReuseIdentifier:@"HomeHotMusicCollectionCell"];
+    }
+    return _recommendMusicCollectionView;
+}
+
+- (NSMutableArray *)recommendMusicArray {
+    if (!_recommendMusicArray) {
+        _recommendMusicArray  = [NSMutableArray array];
+    }
+    return _recommendMusicArray;
+}
+
+- (void)moreRecommendMusic {
+    KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
+    ctrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/music-list"];
+    [self.navigationController pushViewController:ctrl animated:YES];
+}
+
+#pragma mark ---- 最新曲目
+- (HomeNewMusicView *)newestMusicView {
+    if (!_newestMusicView) {
+        if (!_newestMusicView) {
+            _newestMusicView = [HomeNewMusicView shareInstance];
+            MJWeakSelf;
+            [_newestMusicView homeMusicMore:^{
+                [weakSelf moreNewMusic];
+            }];
+            [_newestMusicView.musicContentView addSubview:self.newestMusicCollectionView];
+            [self.newestMusicCollectionView mas_makeConstraints:^(MASConstraintMaker *make) {
+                make.left.right.bottom.top.mas_equalTo(_newestMusicView.musicContentView);
+            }];
+        }
+        return _newestMusicView;
+    }
+    return _newestMusicView;
+}
+
+- (UICollectionView *)newestMusicCollectionView {
+    if (!_newestMusicCollectionView) {
+        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
+        layout.sectionInset = UIEdgeInsetsMake(12, 14, 12, 14);
+        layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
+        _newestMusicCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
+        _newestMusicCollectionView.backgroundColor = [UIColor clearColor];
+        _newestMusicCollectionView.delegate = self;
+        _newestMusicCollectionView.dataSource = self;
+        _newestMusicCollectionView.showsVerticalScrollIndicator = NO;
+        _newestMusicCollectionView.showsHorizontalScrollIndicator = NO;
+        if (@available(iOS 11.0, *)) {
+            _newestMusicCollectionView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
+        } else {
+            // Fallback on earlier versions
+            if (@available(iOS 13.0, *)) {
+                _newestMusicCollectionView.automaticallyAdjustsScrollIndicatorInsets = NO;
+            } else {
+                // Fallback on earlier versions
+            }
+        }
+        [_newestMusicCollectionView registerNib:[UINib nibWithNibName:@"HomeHotMusicCollectionCell" bundle:[NSBundle mainBundle]] forCellWithReuseIdentifier:@"HomeHotMusicCollectionCell"];
+    }
+    return _newestMusicCollectionView;
+}
+
+- (NSMutableArray *)newestMusicArray {
+    if (!_newestMusicArray) {
+        _newestMusicArray = [NSMutableArray array];
+    }
+    return _newestMusicArray;
+}
+
+- (void)moreNewMusic {
+    KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
+    ctrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/music-list"];
+    [self.navigationController pushViewController:ctrl animated:YES];
+}
+
 
 #pragma mark ---- 更多曲目
 - (HomeHotMusicView *)hotMusicView {

+ 0 - 411
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Model/HomeHotMusicModel.m

@@ -1,411 +0,0 @@
-//
-//  HomeHotMusicModel.m
-//
-//  Created by Steven  on 2022/8/5
-//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
-//
-
-#import "HomeHotMusicModel.h"
-
-
-NSString *const kHomeHotMusicModelMetronomeUrl = @"metronomeUrl";
-NSString *const kHomeHotMusicModelMusicSheetName = @"musicSheetName";
-NSString *const kHomeHotMusicModelNotation = @"notation";
-NSString *const kHomeHotMusicModelId = @"id";
-NSString *const kHomeHotMusicModelXmlFileUrl = @"xmlFileUrl";
-NSString *const kHomeHotMusicModelShowFingering = @"showFingering";
-NSString *const kHomeHotMusicModelRemark = @"remark";
-NSString *const kHomeHotMusicModelState = @"state";
-NSString *const kHomeHotMusicModelFavoriteCount = @"favoriteCount";
-NSString *const kHomeHotMusicModelUrl = @"url";
-NSString *const kHomeHotMusicModelMusicPrice = @"musicPrice";
-NSString *const kHomeHotMusicModelSortNumber = @"sortNumber";
-NSString *const kHomeHotMusicModelPlay = @"play";
-NSString *const kHomeHotMusicModelAddUserAvatar = @"addUserAvatar";
-NSString *const kHomeHotMusicModelAudioType = @"audioType";
-NSString *const kHomeHotMusicModelCanEvaluate = @"canEvaluate";
-NSString *const kHomeHotMusicModelDelFlag = @"delFlag";
-NSString *const kHomeHotMusicModelMusicTagNames = @"musicTagNames";
-NSString *const kHomeHotMusicModelSubjectNames = @"subjectNames";
-NSString *const kHomeHotMusicModelChargeType = @"chargeType";
-NSString *const kHomeHotMusicModelUpdateTime = @"updateTime";
-NSString *const kHomeHotMusicModelUpdateBy = @"updateBy";
-NSString *const kHomeHotMusicModelMusicTag = @"musicTag";
-NSString *const kHomeHotMusicModelExtConfigJson = @"extConfigJson";
-NSString *const kHomeHotMusicModelAddName = @"addName";
-NSString *const kHomeHotMusicModelFavorite = @"favorite";
-NSString *const kHomeHotMusicModelAuditStatus = @"auditStatus";
-NSString *const kHomeHotMusicModelCreateBy = @"createBy";
-NSString *const kHomeHotMusicModelMidiUrl = @"midiUrl";
-NSString *const kHomeHotMusicModelTopFlag = @"topFlag";
-NSString *const kHomeHotMusicModelComposer = @"composer";
-NSString *const kHomeHotMusicModelSourceType = @"sourceType";
-NSString *const kHomeHotMusicModelHotFlag = @"hotFlag";
-NSString *const kHomeHotMusicModelMp3Type = @"mp3Type";
-NSString *const kHomeHotMusicModelCreateTime = @"createTime";
-NSString *const kHomeHotMusicModelPlaySpeed = @"playSpeed";
-NSString *const kHomeHotMusicModelHasBeat = @"hasBeat";
-NSString *const kHomeHotMusicModelAudioFileUrl = @"audioFileUrl";
-NSString *const kHomeHotMusicModelReason = @"reason";
-NSString *const kHomeHotMusicModelAuditVersion = @"auditVersion";
-NSString *const kHomeHotMusicModelMusicSubject = @"musicSubject";
-NSString *const kHomeHotMusicModelUserId = @"userId";
-NSString *const kHomeHotMusicModelSubmitAuditTime = @"submitAuditTime";
-NSString *const kHomeHotMusicModelExquisiteFlag = @"exquisiteFlag";
-
-NSString *const kHomeHotMusicModelPaymentType = @"paymentType";
-NSString *const kHomeHotMusicModelAlbumNums = @"albumNums";
-
-@interface HomeHotMusicModel ()
-
-- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict;
-
-@end
-
-@implementation HomeHotMusicModel
-
-@synthesize metronomeUrl = _metronomeUrl;
-@synthesize musicSheetName = _musicSheetName;
-@synthesize notation = _notation;
-@synthesize internalBaseClassIdentifier = _internalBaseClassIdentifier;
-@synthesize xmlFileUrl = _xmlFileUrl;
-@synthesize showFingering = _showFingering;
-@synthesize remark = _remark;
-@synthesize state = _state;
-@synthesize favoriteCount = _favoriteCount;
-@synthesize url = _url;
-@synthesize musicPrice = _musicPrice;
-@synthesize sortNumber = _sortNumber;
-@synthesize play = _play;
-@synthesize addUserAvatar = _addUserAvatar;
-@synthesize audioType = _audioType;
-@synthesize canEvaluate = _canEvaluate;
-@synthesize delFlag = _delFlag;
-@synthesize musicTagNames = _musicTagNames;
-@synthesize subjectNames = _subjectNames;
-@synthesize chargeType = _chargeType;
-@synthesize updateTime = _updateTime;
-@synthesize updateBy = _updateBy;
-@synthesize musicTag = _musicTag;
-@synthesize extConfigJson = _extConfigJson;
-@synthesize addName = _addName;
-@synthesize favorite = _favorite;
-@synthesize auditStatus = _auditStatus;
-@synthesize createBy = _createBy;
-@synthesize midiUrl = _midiUrl;
-@synthesize topFlag = _topFlag;
-@synthesize composer = _composer;
-@synthesize sourceType = _sourceType;
-@synthesize hotFlag = _hotFlag;
-@synthesize mp3Type = _mp3Type;
-@synthesize createTime = _createTime;
-@synthesize playSpeed = _playSpeed;
-@synthesize hasBeat = _hasBeat;
-@synthesize audioFileUrl = _audioFileUrl;
-@synthesize reason = _reason;
-@synthesize auditVersion = _auditVersion;
-@synthesize musicSubject = _musicSubject;
-@synthesize userId = _userId;
-@synthesize submitAuditTime = _submitAuditTime;
-@synthesize exquisiteFlag = _exquisiteFlag;
-@synthesize paymentType = _paymentType;
-@synthesize albumNums = _albumNums;
-
-+ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict
-{
-    return [[self alloc] initWithDictionary:dict];
-}
-
-- (instancetype)initWithDictionary:(NSDictionary *)dict
-{
-    self = [super init];
-    
-    // This check serves to make sure that a non-NSDictionary object
-    // passed into the model class doesn't break the parsing.
-    if(self && [dict isKindOfClass:[NSDictionary class]]) {
-            self.metronomeUrl = [self objectOrNilForKey:kHomeHotMusicModelMetronomeUrl fromDictionary:dict];
-            self.musicSheetName = [self objectOrNilForKey:kHomeHotMusicModelMusicSheetName fromDictionary:dict];
-            self.notation = [[self objectOrNilForKey:kHomeHotMusicModelNotation fromDictionary:dict] doubleValue];
-            self.internalBaseClassIdentifier = [[self objectOrNilForKey:kHomeHotMusicModelId fromDictionary:dict] doubleValue];
-            self.xmlFileUrl = [self objectOrNilForKey:kHomeHotMusicModelXmlFileUrl fromDictionary:dict];
-            self.showFingering = [[self objectOrNilForKey:kHomeHotMusicModelShowFingering fromDictionary:dict] doubleValue];
-            self.remark = [self objectOrNilForKey:kHomeHotMusicModelRemark fromDictionary:dict];
-            self.state = [[self objectOrNilForKey:kHomeHotMusicModelState fromDictionary:dict] doubleValue];
-            self.favoriteCount = [[self objectOrNilForKey:kHomeHotMusicModelFavoriteCount fromDictionary:dict] doubleValue];
-            self.url = [self objectOrNilForKey:kHomeHotMusicModelUrl fromDictionary:dict];
-            self.musicPrice = [[self objectOrNilForKey:kHomeHotMusicModelMusicPrice fromDictionary:dict] doubleValue];
-            self.sortNumber = [[self objectOrNilForKey:kHomeHotMusicModelSortNumber fromDictionary:dict] doubleValue];
-            self.play = [self objectOrNilForKey:kHomeHotMusicModelPlay fromDictionary:dict];
-            self.addUserAvatar = [self objectOrNilForKey:kHomeHotMusicModelAddUserAvatar fromDictionary:dict];
-            self.audioType = [self objectOrNilForKey:kHomeHotMusicModelAudioType fromDictionary:dict];
-            self.canEvaluate = [[self objectOrNilForKey:kHomeHotMusicModelCanEvaluate fromDictionary:dict] doubleValue];
-            self.delFlag = [[self objectOrNilForKey:kHomeHotMusicModelDelFlag fromDictionary:dict] boolValue];
-            self.musicTagNames = [self objectOrNilForKey:kHomeHotMusicModelMusicTagNames fromDictionary:dict];
-            self.subjectNames = [self objectOrNilForKey:kHomeHotMusicModelSubjectNames fromDictionary:dict];
-            self.chargeType = [self objectOrNilForKey:kHomeHotMusicModelChargeType fromDictionary:dict];
-            self.updateTime = [self objectOrNilForKey:kHomeHotMusicModelUpdateTime fromDictionary:dict];
-            self.updateBy = [[self objectOrNilForKey:kHomeHotMusicModelUpdateBy fromDictionary:dict] doubleValue];
-            self.musicTag = [self objectOrNilForKey:kHomeHotMusicModelMusicTag fromDictionary:dict];
-            self.extConfigJson = [self objectOrNilForKey:kHomeHotMusicModelExtConfigJson fromDictionary:dict];
-            self.addName = [self objectOrNilForKey:kHomeHotMusicModelAddName fromDictionary:dict];
-            self.favorite = [self objectOrNilForKey:kHomeHotMusicModelFavorite fromDictionary:dict];
-            self.auditStatus = [self objectOrNilForKey:kHomeHotMusicModelAuditStatus fromDictionary:dict];
-            self.createBy = [[self objectOrNilForKey:kHomeHotMusicModelCreateBy fromDictionary:dict] doubleValue];
-            self.midiUrl = [self objectOrNilForKey:kHomeHotMusicModelMidiUrl fromDictionary:dict];
-            self.topFlag = [[self objectOrNilForKey:kHomeHotMusicModelTopFlag fromDictionary:dict] doubleValue];
-            self.composer = [self objectOrNilForKey:kHomeHotMusicModelComposer fromDictionary:dict];
-            self.sourceType = [self objectOrNilForKey:kHomeHotMusicModelSourceType fromDictionary:dict];
-            self.hotFlag = [self objectOrNilForKey:kHomeHotMusicModelHotFlag fromDictionary:dict];
-            self.mp3Type = [self objectOrNilForKey:kHomeHotMusicModelMp3Type fromDictionary:dict];
-            self.createTime = [self objectOrNilForKey:kHomeHotMusicModelCreateTime fromDictionary:dict];
-            self.playSpeed = [[self objectOrNilForKey:kHomeHotMusicModelPlaySpeed fromDictionary:dict] doubleValue];
-            self.hasBeat = [self objectOrNilForKey:kHomeHotMusicModelHasBeat fromDictionary:dict];
-            self.audioFileUrl = [self objectOrNilForKey:kHomeHotMusicModelAudioFileUrl fromDictionary:dict];
-            self.reason = [self objectOrNilForKey:kHomeHotMusicModelReason fromDictionary:dict];
-            self.auditVersion = [[self objectOrNilForKey:kHomeHotMusicModelAuditVersion fromDictionary:dict] doubleValue];
-            self.musicSubject = [self objectOrNilForKey:kHomeHotMusicModelMusicSubject fromDictionary:dict];
-            self.userId = [[self objectOrNilForKey:kHomeHotMusicModelUserId fromDictionary:dict] doubleValue];
-            self.submitAuditTime = [self objectOrNilForKey:kHomeHotMusicModelSubmitAuditTime fromDictionary:dict];
-        self.exquisiteFlag = [[self objectOrNilForKey:kHomeHotMusicModelExquisiteFlag fromDictionary:dict] boolValue];
-        self.paymentType = [self objectOrNilForKey:kHomeHotMusicModelPaymentType fromDictionary:dict];
-        self.albumNums = [[self objectOrNilForKey:kHomeHotMusicModelAlbumNums fromDictionary:dict] integerValue];
-    }
-    
-    return self;
-    
-}
-
-- (NSDictionary *)dictionaryRepresentation
-{
-    NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
-    [mutableDict setValue:self.metronomeUrl forKey:kHomeHotMusicModelMetronomeUrl];
-    [mutableDict setValue:self.musicSheetName forKey:kHomeHotMusicModelMusicSheetName];
-    [mutableDict setValue:[NSNumber numberWithDouble:self.notation] forKey:kHomeHotMusicModelNotation];
-    [mutableDict setValue:[NSNumber numberWithDouble:self.internalBaseClassIdentifier] forKey:kHomeHotMusicModelId];
-    [mutableDict setValue:self.xmlFileUrl forKey:kHomeHotMusicModelXmlFileUrl];
-    [mutableDict setValue:[NSNumber numberWithDouble:self.showFingering] forKey:kHomeHotMusicModelShowFingering];
-    [mutableDict setValue:self.remark forKey:kHomeHotMusicModelRemark];
-    [mutableDict setValue:[NSNumber numberWithDouble:self.state] forKey:kHomeHotMusicModelState];
-    [mutableDict setValue:[NSNumber numberWithDouble:self.favoriteCount] forKey:kHomeHotMusicModelFavoriteCount];
-    [mutableDict setValue:self.url forKey:kHomeHotMusicModelUrl];
-    [mutableDict setValue:[NSNumber numberWithDouble:self.musicPrice] forKey:kHomeHotMusicModelMusicPrice];
-    [mutableDict setValue:[NSNumber numberWithDouble:self.sortNumber] forKey:kHomeHotMusicModelSortNumber];
-    [mutableDict setValue:self.play forKey:kHomeHotMusicModelPlay];
-    [mutableDict setValue:self.addUserAvatar forKey:kHomeHotMusicModelAddUserAvatar];
-    [mutableDict setValue:self.audioType forKey:kHomeHotMusicModelAudioType];
-    [mutableDict setValue:[NSNumber numberWithDouble:self.canEvaluate] forKey:kHomeHotMusicModelCanEvaluate];
-    [mutableDict setValue:[NSNumber numberWithBool:self.delFlag] forKey:kHomeHotMusicModelDelFlag];
-    [mutableDict setValue:self.musicTagNames forKey:kHomeHotMusicModelMusicTagNames];
-    [mutableDict setValue:self.subjectNames forKey:kHomeHotMusicModelSubjectNames];
-    [mutableDict setValue:self.chargeType forKey:kHomeHotMusicModelChargeType];
-    [mutableDict setValue:self.updateTime forKey:kHomeHotMusicModelUpdateTime];
-    [mutableDict setValue:[NSNumber numberWithDouble:self.updateBy] forKey:kHomeHotMusicModelUpdateBy];
-    [mutableDict setValue:self.musicTag forKey:kHomeHotMusicModelMusicTag];
-    [mutableDict setValue:self.extConfigJson forKey:kHomeHotMusicModelExtConfigJson];
-    [mutableDict setValue:self.addName forKey:kHomeHotMusicModelAddName];
-    [mutableDict setValue:self.favorite forKey:kHomeHotMusicModelFavorite];
-    [mutableDict setValue:self.auditStatus forKey:kHomeHotMusicModelAuditStatus];
-    [mutableDict setValue:[NSNumber numberWithDouble:self.createBy] forKey:kHomeHotMusicModelCreateBy];
-    [mutableDict setValue:self.midiUrl forKey:kHomeHotMusicModelMidiUrl];
-    [mutableDict setValue:[NSNumber numberWithDouble:self.topFlag] forKey:kHomeHotMusicModelTopFlag];
-    [mutableDict setValue:self.composer forKey:kHomeHotMusicModelComposer];
-    [mutableDict setValue:self.sourceType forKey:kHomeHotMusicModelSourceType];
-    [mutableDict setValue:self.hotFlag forKey:kHomeHotMusicModelHotFlag];
-    [mutableDict setValue:self.mp3Type forKey:kHomeHotMusicModelMp3Type];
-    [mutableDict setValue:self.createTime forKey:kHomeHotMusicModelCreateTime];
-    [mutableDict setValue:[NSNumber numberWithDouble:self.playSpeed] forKey:kHomeHotMusicModelPlaySpeed];
-    [mutableDict setValue:self.hasBeat forKey:kHomeHotMusicModelHasBeat];
-    [mutableDict setValue:self.audioFileUrl forKey:kHomeHotMusicModelAudioFileUrl];
-    [mutableDict setValue:self.reason forKey:kHomeHotMusicModelReason];
-    [mutableDict setValue:[NSNumber numberWithDouble:self.auditVersion] forKey:kHomeHotMusicModelAuditVersion];
-    [mutableDict setValue:self.musicSubject forKey:kHomeHotMusicModelMusicSubject];
-    [mutableDict setValue:[NSNumber numberWithDouble:self.userId] forKey:kHomeHotMusicModelUserId];
-    [mutableDict setValue:self.submitAuditTime forKey:kHomeHotMusicModelSubmitAuditTime];
-    [mutableDict setValue:[NSNumber numberWithBool:self.exquisiteFlag] forKey:kHomeHotMusicModelExquisiteFlag];
-    [mutableDict setValue:self.paymentType forKey:kHomeHotMusicModelPaymentType];
-    [mutableDict setValue:[NSNumber numberWithInteger:self.albumNums] forKey:kHomeHotMusicModelAlbumNums];
-    return [NSDictionary dictionaryWithDictionary:mutableDict];
-}
-
-- (NSString *)description 
-{
-    return [NSString stringWithFormat:@"%@", [self dictionaryRepresentation]];
-}
-
-#pragma mark - Helper Method
-- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict
-{
-    id object = [dict objectForKey:aKey];
-    if ([object isKindOfClass:[NSNumber class]]) {
-        NSNumber *number = object;
-        object = [number stringValue];
-    }
-    return [object isEqual:[NSNull null]] ? nil : object;
-}
-
-
-#pragma mark - NSCoding Methods
-
-- (id)initWithCoder:(NSCoder *)aDecoder
-{
-    self = [super init];
-
-    self.metronomeUrl = [aDecoder decodeObjectForKey:kHomeHotMusicModelMetronomeUrl];
-    self.musicSheetName = [aDecoder decodeObjectForKey:kHomeHotMusicModelMusicSheetName];
-    self.notation = [aDecoder decodeDoubleForKey:kHomeHotMusicModelNotation];
-    self.internalBaseClassIdentifier = [aDecoder decodeDoubleForKey:kHomeHotMusicModelId];
-    self.xmlFileUrl = [aDecoder decodeObjectForKey:kHomeHotMusicModelXmlFileUrl];
-    self.showFingering = [aDecoder decodeDoubleForKey:kHomeHotMusicModelShowFingering];
-    self.remark = [aDecoder decodeObjectForKey:kHomeHotMusicModelRemark];
-    self.state = [aDecoder decodeDoubleForKey:kHomeHotMusicModelState];
-    self.favoriteCount = [aDecoder decodeDoubleForKey:kHomeHotMusicModelFavoriteCount];
-    self.url = [aDecoder decodeObjectForKey:kHomeHotMusicModelUrl];
-    self.musicPrice = [aDecoder decodeDoubleForKey:kHomeHotMusicModelMusicPrice];
-    self.sortNumber = [aDecoder decodeDoubleForKey:kHomeHotMusicModelSortNumber];
-    self.play = [aDecoder decodeObjectForKey:kHomeHotMusicModelPlay];
-    self.addUserAvatar = [aDecoder decodeObjectForKey:kHomeHotMusicModelAddUserAvatar];
-    self.audioType = [aDecoder decodeObjectForKey:kHomeHotMusicModelAudioType];
-    self.canEvaluate = [aDecoder decodeDoubleForKey:kHomeHotMusicModelCanEvaluate];
-    self.delFlag = [aDecoder decodeBoolForKey:kHomeHotMusicModelDelFlag];
-    self.musicTagNames = [aDecoder decodeObjectForKey:kHomeHotMusicModelMusicTagNames];
-    self.subjectNames = [aDecoder decodeObjectForKey:kHomeHotMusicModelSubjectNames];
-    self.chargeType = [aDecoder decodeObjectForKey:kHomeHotMusicModelChargeType];
-    self.updateTime = [aDecoder decodeObjectForKey:kHomeHotMusicModelUpdateTime];
-    self.updateBy = [aDecoder decodeDoubleForKey:kHomeHotMusicModelUpdateBy];
-    self.musicTag = [aDecoder decodeObjectForKey:kHomeHotMusicModelMusicTag];
-    self.extConfigJson = [aDecoder decodeObjectForKey:kHomeHotMusicModelExtConfigJson];
-    self.addName = [aDecoder decodeObjectForKey:kHomeHotMusicModelAddName];
-    self.favorite = [aDecoder decodeObjectForKey:kHomeHotMusicModelFavorite];
-    self.auditStatus = [aDecoder decodeObjectForKey:kHomeHotMusicModelAuditStatus];
-    self.createBy = [aDecoder decodeDoubleForKey:kHomeHotMusicModelCreateBy];
-    self.midiUrl = [aDecoder decodeObjectForKey:kHomeHotMusicModelMidiUrl];
-    self.topFlag = [aDecoder decodeDoubleForKey:kHomeHotMusicModelTopFlag];
-    self.composer = [aDecoder decodeObjectForKey:kHomeHotMusicModelComposer];
-    self.sourceType = [aDecoder decodeObjectForKey:kHomeHotMusicModelSourceType];
-    self.hotFlag = [aDecoder decodeObjectForKey:kHomeHotMusicModelHotFlag];
-    self.mp3Type = [aDecoder decodeObjectForKey:kHomeHotMusicModelMp3Type];
-    self.createTime = [aDecoder decodeObjectForKey:kHomeHotMusicModelCreateTime];
-    self.playSpeed = [aDecoder decodeDoubleForKey:kHomeHotMusicModelPlaySpeed];
-    self.hasBeat = [aDecoder decodeObjectForKey:kHomeHotMusicModelHasBeat];
-    self.audioFileUrl = [aDecoder decodeObjectForKey:kHomeHotMusicModelAudioFileUrl];
-    self.reason = [aDecoder decodeObjectForKey:kHomeHotMusicModelReason];
-    self.auditVersion = [aDecoder decodeDoubleForKey:kHomeHotMusicModelAuditVersion];
-    self.musicSubject = [aDecoder decodeObjectForKey:kHomeHotMusicModelMusicSubject];
-    self.userId = [aDecoder decodeDoubleForKey:kHomeHotMusicModelUserId];
-    self.submitAuditTime = [aDecoder decodeObjectForKey:kHomeHotMusicModelSubmitAuditTime];
-    self.exquisiteFlag = [aDecoder decodeBoolForKey:kHomeHotMusicModelExquisiteFlag];
-    self.paymentType = [aDecoder decodeObjectForKey:kHomeHotMusicModelPaymentType];
-    self.albumNums = [aDecoder decodeIntegerForKey:kHomeHotMusicModelAlbumNums];
-    return self;
-}
-
-- (void)encodeWithCoder:(NSCoder *)aCoder
-{
-
-    [aCoder encodeObject:_metronomeUrl forKey:kHomeHotMusicModelMetronomeUrl];
-    [aCoder encodeObject:_musicSheetName forKey:kHomeHotMusicModelMusicSheetName];
-    [aCoder encodeDouble:_notation forKey:kHomeHotMusicModelNotation];
-    [aCoder encodeDouble:_internalBaseClassIdentifier forKey:kHomeHotMusicModelId];
-    [aCoder encodeObject:_xmlFileUrl forKey:kHomeHotMusicModelXmlFileUrl];
-    [aCoder encodeDouble:_showFingering forKey:kHomeHotMusicModelShowFingering];
-    [aCoder encodeObject:_remark forKey:kHomeHotMusicModelRemark];
-    [aCoder encodeDouble:_state forKey:kHomeHotMusicModelState];
-    [aCoder encodeDouble:_favoriteCount forKey:kHomeHotMusicModelFavoriteCount];
-    [aCoder encodeObject:_url forKey:kHomeHotMusicModelUrl];
-    [aCoder encodeDouble:_musicPrice forKey:kHomeHotMusicModelMusicPrice];
-    [aCoder encodeDouble:_sortNumber forKey:kHomeHotMusicModelSortNumber];
-    [aCoder encodeObject:_play forKey:kHomeHotMusicModelPlay];
-    [aCoder encodeObject:_addUserAvatar forKey:kHomeHotMusicModelAddUserAvatar];
-    [aCoder encodeObject:_audioType forKey:kHomeHotMusicModelAudioType];
-    [aCoder encodeDouble:_canEvaluate forKey:kHomeHotMusicModelCanEvaluate];
-    [aCoder encodeBool:_delFlag forKey:kHomeHotMusicModelDelFlag];
-    [aCoder encodeObject:_musicTagNames forKey:kHomeHotMusicModelMusicTagNames];
-    [aCoder encodeObject:_subjectNames forKey:kHomeHotMusicModelSubjectNames];
-    [aCoder encodeObject:_chargeType forKey:kHomeHotMusicModelChargeType];
-    [aCoder encodeObject:_updateTime forKey:kHomeHotMusicModelUpdateTime];
-    [aCoder encodeDouble:_updateBy forKey:kHomeHotMusicModelUpdateBy];
-    [aCoder encodeObject:_musicTag forKey:kHomeHotMusicModelMusicTag];
-    [aCoder encodeObject:_extConfigJson forKey:kHomeHotMusicModelExtConfigJson];
-    [aCoder encodeObject:_addName forKey:kHomeHotMusicModelAddName];
-    [aCoder encodeObject:_favorite forKey:kHomeHotMusicModelFavorite];
-    [aCoder encodeObject:_auditStatus forKey:kHomeHotMusicModelAuditStatus];
-    [aCoder encodeDouble:_createBy forKey:kHomeHotMusicModelCreateBy];
-    [aCoder encodeObject:_midiUrl forKey:kHomeHotMusicModelMidiUrl];
-    [aCoder encodeDouble:_topFlag forKey:kHomeHotMusicModelTopFlag];
-    [aCoder encodeObject:_composer forKey:kHomeHotMusicModelComposer];
-    [aCoder encodeObject:_sourceType forKey:kHomeHotMusicModelSourceType];
-    [aCoder encodeObject:_hotFlag forKey:kHomeHotMusicModelHotFlag];
-    [aCoder encodeObject:_mp3Type forKey:kHomeHotMusicModelMp3Type];
-    [aCoder encodeObject:_createTime forKey:kHomeHotMusicModelCreateTime];
-    [aCoder encodeDouble:_playSpeed forKey:kHomeHotMusicModelPlaySpeed];
-    [aCoder encodeObject:_hasBeat forKey:kHomeHotMusicModelHasBeat];
-    [aCoder encodeObject:_audioFileUrl forKey:kHomeHotMusicModelAudioFileUrl];
-    [aCoder encodeObject:_reason forKey:kHomeHotMusicModelReason];
-    [aCoder encodeDouble:_auditVersion forKey:kHomeHotMusicModelAuditVersion];
-    [aCoder encodeObject:_musicSubject forKey:kHomeHotMusicModelMusicSubject];
-    [aCoder encodeDouble:_userId forKey:kHomeHotMusicModelUserId];
-    [aCoder encodeObject:_submitAuditTime forKey:kHomeHotMusicModelSubmitAuditTime];
-    [aCoder encodeBool:_exquisiteFlag forKey:kHomeHotMusicModelExquisiteFlag];
-    [aCoder encodeObject:_paymentType forKey:kHomeHotMusicModelPaymentType];
-    [aCoder encodeInteger:_albumNums forKey:kHomeHotMusicModelAlbumNums];
-}
-
-- (id)copyWithZone:(NSZone *)zone
-{
-    HomeHotMusicModel *copy = [[HomeHotMusicModel alloc] init];
-    
-    if (copy) {
-
-        copy.metronomeUrl = [self.metronomeUrl copyWithZone:zone];
-        copy.musicSheetName = [self.musicSheetName copyWithZone:zone];
-        copy.notation = self.notation;
-        copy.internalBaseClassIdentifier = self.internalBaseClassIdentifier;
-        copy.xmlFileUrl = [self.xmlFileUrl copyWithZone:zone];
-        copy.showFingering = self.showFingering;
-        copy.remark = [self.remark copyWithZone:zone];
-        copy.state = self.state;
-        copy.favoriteCount = self.favoriteCount;
-        copy.url = [self.url copyWithZone:zone];
-        copy.musicPrice = self.musicPrice;
-        copy.sortNumber = self.sortNumber;
-        copy.play = [self.play copyWithZone:zone];
-        copy.addUserAvatar = [self.addUserAvatar copyWithZone:zone];
-        copy.audioType = [self.audioType copyWithZone:zone];
-        copy.canEvaluate = self.canEvaluate;
-        copy.delFlag = self.delFlag;
-        copy.musicTagNames = [self.musicTagNames copyWithZone:zone];
-        copy.subjectNames = [self.subjectNames copyWithZone:zone];
-        copy.chargeType = [self.chargeType copyWithZone:zone];
-        copy.updateTime = [self.updateTime copyWithZone:zone];
-        copy.updateBy = self.updateBy;
-        copy.musicTag = [self.musicTag copyWithZone:zone];
-        copy.extConfigJson = [self.extConfigJson copyWithZone:zone];
-        copy.addName = [self.addName copyWithZone:zone];
-        copy.favorite = [self.favorite copyWithZone:zone];
-        copy.auditStatus = [self.auditStatus copyWithZone:zone];
-        copy.createBy = self.createBy;
-        copy.midiUrl = [self.midiUrl copyWithZone:zone];
-        copy.topFlag = self.topFlag;
-        copy.composer = [self.composer copyWithZone:zone];
-        copy.sourceType = [self.sourceType copyWithZone:zone];
-        copy.hotFlag = [self.hotFlag copyWithZone:zone];
-        copy.mp3Type = [self.mp3Type copyWithZone:zone];
-        copy.createTime = [self.createTime copyWithZone:zone];
-        copy.playSpeed = self.playSpeed;
-        copy.hasBeat = [self.hasBeat copyWithZone:zone];
-        copy.audioFileUrl = [self.audioFileUrl copyWithZone:zone];
-        copy.reason = [self.reason copyWithZone:zone];
-        copy.auditVersion = self.auditVersion;
-        copy.musicSubject = [self.musicSubject copyWithZone:zone];
-        copy.userId = self.userId;
-        copy.submitAuditTime = [self.submitAuditTime copyWithZone:zone];
-        copy.exquisiteFlag = self.exquisiteFlag;
-        copy.paymentType = [self.paymentType copyWithZone:zone];
-        copy.albumNums = self.albumNums;
-    }
-    
-    return copy;
-}
-
-
-@end

+ 16 - 11
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Model/HomeHotMusicModel.h → KulexiuForTeacher/KulexiuForTeacher/Module/Home/Model/HomeMusicModel.h

@@ -1,7 +1,7 @@
 //
-//  HomeHotMusicModel.h
+//  HomeMusicModel.h
 //
-//  Created by Steven  on 2022/8/5
+//  Created by Steven  on 2022/10/19
 //  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
 //
 
@@ -9,20 +9,25 @@
 
 
 
-@interface HomeHotMusicModel : NSObject <NSCoding, NSCopying>
+@interface HomeMusicModel : NSObject <NSCoding, NSCopying>
 
 @property (nonatomic, strong) NSString *metronomeUrl;
 @property (nonatomic, strong) NSString *musicSheetName;
-@property (nonatomic, assign) double notation;
+@property (nonatomic, assign) double albumNums;
 @property (nonatomic, assign) double internalBaseClassIdentifier;
 @property (nonatomic, strong) NSString *xmlFileUrl;
 @property (nonatomic, assign) double showFingering;
-@property (nonatomic, strong) NSString *remark;
+@property (nonatomic, assign) double albumSortNumber;
 @property (nonatomic, assign) double state;
+@property (nonatomic, strong) NSString *remark;
+@property (nonatomic, strong) NSString *titleImg;
+@property (nonatomic, assign) double notation;
+@property (nonatomic, strong) NSString *musicImg;
 @property (nonatomic, assign) double favoriteCount;
 @property (nonatomic, strong) NSString *url;
 @property (nonatomic, assign) double musicPrice;
 @property (nonatomic, assign) double sortNumber;
+@property (nonatomic, assign) double exquisiteFlag;
 @property (nonatomic, strong) NSString *play;
 @property (nonatomic, strong) NSString *addUserAvatar;
 @property (nonatomic, strong) NSString *audioType;
@@ -36,15 +41,18 @@
 @property (nonatomic, strong) NSString *musicTag;
 @property (nonatomic, strong) NSString *extConfigJson;
 @property (nonatomic, strong) NSString *addName;
-@property (nonatomic, strong) NSString *favorite;
+@property (nonatomic, strong) NSString *paymentType;
+@property (nonatomic, assign) double favorite;
 @property (nonatomic, strong) NSString *auditStatus;
 @property (nonatomic, assign) double createBy;
-@property (nonatomic, strong) NSString *midiUrl;
+@property (nonatomic, strong) NSString *accompanimentType;
 @property (nonatomic, assign) double topFlag;
+@property (nonatomic, strong) NSString *midiUrl;
 @property (nonatomic, strong) NSString *composer;
 @property (nonatomic, strong) NSString *sourceType;
-@property (nonatomic, strong) NSString *hotFlag;
+@property (nonatomic, strong) NSString *firstPassAuditTime;
 @property (nonatomic, strong) NSString *mp3Type;
+@property (nonatomic, strong) NSString *hotFlag;
 @property (nonatomic, strong) NSString *createTime;
 @property (nonatomic, assign) double playSpeed;
 @property (nonatomic, strong) NSString *hasBeat;
@@ -54,9 +62,6 @@
 @property (nonatomic, strong) NSString *musicSubject;
 @property (nonatomic, assign) double userId;
 @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;

+ 449 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Model/HomeMusicModel.m

@@ -0,0 +1,449 @@
+//
+//  HomeMusicModel.m
+//
+//  Created by Steven  on 2022/10/19
+//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
+//
+
+#import "HomeMusicModel.h"
+
+
+NSString *const kHomeMusicModelMetronomeUrl = @"metronomeUrl";
+NSString *const kHomeMusicModelMusicSheetName = @"musicSheetName";
+NSString *const kHomeMusicModelAlbumNums = @"albumNums";
+NSString *const kHomeMusicModelId = @"id";
+NSString *const kHomeMusicModelXmlFileUrl = @"xmlFileUrl";
+NSString *const kHomeMusicModelShowFingering = @"showFingering";
+NSString *const kHomeMusicModelAlbumSortNumber = @"albumSortNumber";
+NSString *const kHomeMusicModelState = @"state";
+NSString *const kHomeMusicModelRemark = @"remark";
+NSString *const kHomeMusicModelTitleImg = @"titleImg";
+NSString *const kHomeMusicModelNotation = @"notation";
+NSString *const kHomeMusicModelMusicImg = @"musicImg";
+NSString *const kHomeMusicModelFavoriteCount = @"favoriteCount";
+NSString *const kHomeMusicModelUrl = @"url";
+NSString *const kHomeMusicModelMusicPrice = @"musicPrice";
+NSString *const kHomeMusicModelSortNumber = @"sortNumber";
+NSString *const kHomeMusicModelExquisiteFlag = @"exquisiteFlag";
+NSString *const kHomeMusicModelPlay = @"play";
+NSString *const kHomeMusicModelAddUserAvatar = @"addUserAvatar";
+NSString *const kHomeMusicModelAudioType = @"audioType";
+NSString *const kHomeMusicModelCanEvaluate = @"canEvaluate";
+NSString *const kHomeMusicModelDelFlag = @"delFlag";
+NSString *const kHomeMusicModelMusicTagNames = @"musicTagNames";
+NSString *const kHomeMusicModelSubjectNames = @"subjectNames";
+NSString *const kHomeMusicModelChargeType = @"chargeType";
+NSString *const kHomeMusicModelUpdateTime = @"updateTime";
+NSString *const kHomeMusicModelUpdateBy = @"updateBy";
+NSString *const kHomeMusicModelMusicTag = @"musicTag";
+NSString *const kHomeMusicModelExtConfigJson = @"extConfigJson";
+NSString *const kHomeMusicModelAddName = @"addName";
+NSString *const kHomeMusicModelPaymentType = @"paymentType";
+NSString *const kHomeMusicModelFavorite = @"favorite";
+NSString *const kHomeMusicModelAuditStatus = @"auditStatus";
+NSString *const kHomeMusicModelCreateBy = @"createBy";
+NSString *const kHomeMusicModelAccompanimentType = @"accompanimentType";
+NSString *const kHomeMusicModelTopFlag = @"topFlag";
+NSString *const kHomeMusicModelMidiUrl = @"midiUrl";
+NSString *const kHomeMusicModelComposer = @"composer";
+NSString *const kHomeMusicModelSourceType = @"sourceType";
+NSString *const kHomeMusicModelFirstPassAuditTime = @"firstPassAuditTime";
+NSString *const kHomeMusicModelMp3Type = @"mp3Type";
+NSString *const kHomeMusicModelHotFlag = @"hotFlag";
+NSString *const kHomeMusicModelCreateTime = @"createTime";
+NSString *const kHomeMusicModelPlaySpeed = @"playSpeed";
+NSString *const kHomeMusicModelHasBeat = @"hasBeat";
+NSString *const kHomeMusicModelAudioFileUrl = @"audioFileUrl";
+NSString *const kHomeMusicModelReason = @"reason";
+NSString *const kHomeMusicModelAuditVersion = @"auditVersion";
+NSString *const kHomeMusicModelMusicSubject = @"musicSubject";
+NSString *const kHomeMusicModelUserId = @"userId";
+NSString *const kHomeMusicModelSubmitAuditTime = @"submitAuditTime";
+
+
+@interface HomeMusicModel ()
+
+- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict;
+
+@end
+
+@implementation HomeMusicModel
+
+@synthesize metronomeUrl = _metronomeUrl;
+@synthesize musicSheetName = _musicSheetName;
+@synthesize albumNums = _albumNums;
+@synthesize internalBaseClassIdentifier = _internalBaseClassIdentifier;
+@synthesize xmlFileUrl = _xmlFileUrl;
+@synthesize showFingering = _showFingering;
+@synthesize albumSortNumber = _albumSortNumber;
+@synthesize state = _state;
+@synthesize remark = _remark;
+@synthesize titleImg = _titleImg;
+@synthesize notation = _notation;
+@synthesize musicImg = _musicImg;
+@synthesize favoriteCount = _favoriteCount;
+@synthesize url = _url;
+@synthesize musicPrice = _musicPrice;
+@synthesize sortNumber = _sortNumber;
+@synthesize exquisiteFlag = _exquisiteFlag;
+@synthesize play = _play;
+@synthesize addUserAvatar = _addUserAvatar;
+@synthesize audioType = _audioType;
+@synthesize canEvaluate = _canEvaluate;
+@synthesize delFlag = _delFlag;
+@synthesize musicTagNames = _musicTagNames;
+@synthesize subjectNames = _subjectNames;
+@synthesize chargeType = _chargeType;
+@synthesize updateTime = _updateTime;
+@synthesize updateBy = _updateBy;
+@synthesize musicTag = _musicTag;
+@synthesize extConfigJson = _extConfigJson;
+@synthesize addName = _addName;
+@synthesize paymentType = _paymentType;
+@synthesize favorite = _favorite;
+@synthesize auditStatus = _auditStatus;
+@synthesize createBy = _createBy;
+@synthesize accompanimentType = _accompanimentType;
+@synthesize topFlag = _topFlag;
+@synthesize midiUrl = _midiUrl;
+@synthesize composer = _composer;
+@synthesize sourceType = _sourceType;
+@synthesize firstPassAuditTime = _firstPassAuditTime;
+@synthesize mp3Type = _mp3Type;
+@synthesize hotFlag = _hotFlag;
+@synthesize createTime = _createTime;
+@synthesize playSpeed = _playSpeed;
+@synthesize hasBeat = _hasBeat;
+@synthesize audioFileUrl = _audioFileUrl;
+@synthesize reason = _reason;
+@synthesize auditVersion = _auditVersion;
+@synthesize musicSubject = _musicSubject;
+@synthesize userId = _userId;
+@synthesize submitAuditTime = _submitAuditTime;
+
+
++ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict
+{
+    return [[self alloc] initWithDictionary:dict];
+}
+
+- (instancetype)initWithDictionary:(NSDictionary *)dict
+{
+    self = [super init];
+    
+    // This check serves to make sure that a non-NSDictionary object
+    // passed into the model class doesn't break the parsing.
+    if(self && [dict isKindOfClass:[NSDictionary class]]) {
+            self.metronomeUrl = [self objectOrNilForKey:kHomeMusicModelMetronomeUrl fromDictionary:dict];
+            self.musicSheetName = [self objectOrNilForKey:kHomeMusicModelMusicSheetName fromDictionary:dict];
+            self.albumNums = [[self objectOrNilForKey:kHomeMusicModelAlbumNums fromDictionary:dict] doubleValue];
+            self.internalBaseClassIdentifier = [[self objectOrNilForKey:kHomeMusicModelId fromDictionary:dict] doubleValue];
+            self.xmlFileUrl = [self objectOrNilForKey:kHomeMusicModelXmlFileUrl fromDictionary:dict];
+            self.showFingering = [[self objectOrNilForKey:kHomeMusicModelShowFingering fromDictionary:dict] doubleValue];
+            self.albumSortNumber = [[self objectOrNilForKey:kHomeMusicModelAlbumSortNumber fromDictionary:dict] doubleValue];
+            self.state = [[self objectOrNilForKey:kHomeMusicModelState fromDictionary:dict] doubleValue];
+            self.remark = [self objectOrNilForKey:kHomeMusicModelRemark fromDictionary:dict];
+            self.titleImg = [self objectOrNilForKey:kHomeMusicModelTitleImg fromDictionary:dict];
+            self.notation = [[self objectOrNilForKey:kHomeMusicModelNotation fromDictionary:dict] doubleValue];
+            self.musicImg = [self objectOrNilForKey:kHomeMusicModelMusicImg fromDictionary:dict];
+            self.favoriteCount = [[self objectOrNilForKey:kHomeMusicModelFavoriteCount fromDictionary:dict] doubleValue];
+            self.url = [self objectOrNilForKey:kHomeMusicModelUrl fromDictionary:dict];
+            self.musicPrice = [[self objectOrNilForKey:kHomeMusicModelMusicPrice fromDictionary:dict] doubleValue];
+            self.sortNumber = [[self objectOrNilForKey:kHomeMusicModelSortNumber fromDictionary:dict] doubleValue];
+            self.exquisiteFlag = [[self objectOrNilForKey:kHomeMusicModelExquisiteFlag fromDictionary:dict] doubleValue];
+            self.play = [self objectOrNilForKey:kHomeMusicModelPlay fromDictionary:dict];
+            self.addUserAvatar = [self objectOrNilForKey:kHomeMusicModelAddUserAvatar fromDictionary:dict];
+            self.audioType = [self objectOrNilForKey:kHomeMusicModelAudioType fromDictionary:dict];
+            self.canEvaluate = [[self objectOrNilForKey:kHomeMusicModelCanEvaluate fromDictionary:dict] doubleValue];
+            self.delFlag = [[self objectOrNilForKey:kHomeMusicModelDelFlag fromDictionary:dict] boolValue];
+            self.musicTagNames = [self objectOrNilForKey:kHomeMusicModelMusicTagNames fromDictionary:dict];
+            self.subjectNames = [self objectOrNilForKey:kHomeMusicModelSubjectNames fromDictionary:dict];
+            self.chargeType = [self objectOrNilForKey:kHomeMusicModelChargeType fromDictionary:dict];
+            self.updateTime = [self objectOrNilForKey:kHomeMusicModelUpdateTime fromDictionary:dict];
+            self.updateBy = [[self objectOrNilForKey:kHomeMusicModelUpdateBy fromDictionary:dict] doubleValue];
+            self.musicTag = [self objectOrNilForKey:kHomeMusicModelMusicTag fromDictionary:dict];
+            self.extConfigJson = [self objectOrNilForKey:kHomeMusicModelExtConfigJson fromDictionary:dict];
+            self.addName = [self objectOrNilForKey:kHomeMusicModelAddName fromDictionary:dict];
+            self.paymentType = [self objectOrNilForKey:kHomeMusicModelPaymentType fromDictionary:dict];
+            self.favorite = [[self objectOrNilForKey:kHomeMusicModelFavorite fromDictionary:dict] doubleValue];
+            self.auditStatus = [self objectOrNilForKey:kHomeMusicModelAuditStatus fromDictionary:dict];
+            self.createBy = [[self objectOrNilForKey:kHomeMusicModelCreateBy fromDictionary:dict] doubleValue];
+            self.accompanimentType = [self objectOrNilForKey:kHomeMusicModelAccompanimentType fromDictionary:dict];
+            self.topFlag = [[self objectOrNilForKey:kHomeMusicModelTopFlag fromDictionary:dict] doubleValue];
+            self.midiUrl = [self objectOrNilForKey:kHomeMusicModelMidiUrl fromDictionary:dict];
+            self.composer = [self objectOrNilForKey:kHomeMusicModelComposer fromDictionary:dict];
+            self.sourceType = [self objectOrNilForKey:kHomeMusicModelSourceType fromDictionary:dict];
+            self.firstPassAuditTime = [self objectOrNilForKey:kHomeMusicModelFirstPassAuditTime fromDictionary:dict];
+            self.mp3Type = [self objectOrNilForKey:kHomeMusicModelMp3Type fromDictionary:dict];
+            self.hotFlag = [self objectOrNilForKey:kHomeMusicModelHotFlag fromDictionary:dict];
+            self.createTime = [self objectOrNilForKey:kHomeMusicModelCreateTime fromDictionary:dict];
+            self.playSpeed = [[self objectOrNilForKey:kHomeMusicModelPlaySpeed fromDictionary:dict] doubleValue];
+            self.hasBeat = [self objectOrNilForKey:kHomeMusicModelHasBeat fromDictionary:dict];
+            self.audioFileUrl = [self objectOrNilForKey:kHomeMusicModelAudioFileUrl fromDictionary:dict];
+            self.reason = [self objectOrNilForKey:kHomeMusicModelReason fromDictionary:dict];
+            self.auditVersion = [[self objectOrNilForKey:kHomeMusicModelAuditVersion fromDictionary:dict] doubleValue];
+            self.musicSubject = [self objectOrNilForKey:kHomeMusicModelMusicSubject fromDictionary:dict];
+            self.userId = [[self objectOrNilForKey:kHomeMusicModelUserId fromDictionary:dict] doubleValue];
+            self.submitAuditTime = [self objectOrNilForKey:kHomeMusicModelSubmitAuditTime fromDictionary:dict];
+
+    }
+    
+    return self;
+    
+}
+
+- (NSDictionary *)dictionaryRepresentation
+{
+    NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
+    [mutableDict setValue:self.metronomeUrl forKey:kHomeMusicModelMetronomeUrl];
+    [mutableDict setValue:self.musicSheetName forKey:kHomeMusicModelMusicSheetName];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.albumNums] forKey:kHomeMusicModelAlbumNums];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.internalBaseClassIdentifier] forKey:kHomeMusicModelId];
+    [mutableDict setValue:self.xmlFileUrl forKey:kHomeMusicModelXmlFileUrl];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.showFingering] forKey:kHomeMusicModelShowFingering];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.albumSortNumber] forKey:kHomeMusicModelAlbumSortNumber];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.state] forKey:kHomeMusicModelState];
+    [mutableDict setValue:self.remark forKey:kHomeMusicModelRemark];
+    [mutableDict setValue:self.titleImg forKey:kHomeMusicModelTitleImg];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.notation] forKey:kHomeMusicModelNotation];
+    [mutableDict setValue:self.musicImg forKey:kHomeMusicModelMusicImg];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.favoriteCount] forKey:kHomeMusicModelFavoriteCount];
+    [mutableDict setValue:self.url forKey:kHomeMusicModelUrl];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.musicPrice] forKey:kHomeMusicModelMusicPrice];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.sortNumber] forKey:kHomeMusicModelSortNumber];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.exquisiteFlag] forKey:kHomeMusicModelExquisiteFlag];
+    [mutableDict setValue:self.play forKey:kHomeMusicModelPlay];
+    [mutableDict setValue:self.addUserAvatar forKey:kHomeMusicModelAddUserAvatar];
+    [mutableDict setValue:self.audioType forKey:kHomeMusicModelAudioType];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.canEvaluate] forKey:kHomeMusicModelCanEvaluate];
+    [mutableDict setValue:[NSNumber numberWithBool:self.delFlag] forKey:kHomeMusicModelDelFlag];
+    [mutableDict setValue:self.musicTagNames forKey:kHomeMusicModelMusicTagNames];
+    [mutableDict setValue:self.subjectNames forKey:kHomeMusicModelSubjectNames];
+    [mutableDict setValue:self.chargeType forKey:kHomeMusicModelChargeType];
+    [mutableDict setValue:self.updateTime forKey:kHomeMusicModelUpdateTime];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.updateBy] forKey:kHomeMusicModelUpdateBy];
+    [mutableDict setValue:self.musicTag forKey:kHomeMusicModelMusicTag];
+    [mutableDict setValue:self.extConfigJson forKey:kHomeMusicModelExtConfigJson];
+    [mutableDict setValue:self.addName forKey:kHomeMusicModelAddName];
+    [mutableDict setValue:self.paymentType forKey:kHomeMusicModelPaymentType];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.favorite] forKey:kHomeMusicModelFavorite];
+    [mutableDict setValue:self.auditStatus forKey:kHomeMusicModelAuditStatus];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.createBy] forKey:kHomeMusicModelCreateBy];
+    [mutableDict setValue:self.accompanimentType forKey:kHomeMusicModelAccompanimentType];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.topFlag] forKey:kHomeMusicModelTopFlag];
+    [mutableDict setValue:self.midiUrl forKey:kHomeMusicModelMidiUrl];
+    [mutableDict setValue:self.composer forKey:kHomeMusicModelComposer];
+    [mutableDict setValue:self.sourceType forKey:kHomeMusicModelSourceType];
+    [mutableDict setValue:self.firstPassAuditTime forKey:kHomeMusicModelFirstPassAuditTime];
+    [mutableDict setValue:self.mp3Type forKey:kHomeMusicModelMp3Type];
+    [mutableDict setValue:self.hotFlag forKey:kHomeMusicModelHotFlag];
+    [mutableDict setValue:self.createTime forKey:kHomeMusicModelCreateTime];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.playSpeed] forKey:kHomeMusicModelPlaySpeed];
+    [mutableDict setValue:self.hasBeat forKey:kHomeMusicModelHasBeat];
+    [mutableDict setValue:self.audioFileUrl forKey:kHomeMusicModelAudioFileUrl];
+    [mutableDict setValue:self.reason forKey:kHomeMusicModelReason];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.auditVersion] forKey:kHomeMusicModelAuditVersion];
+    [mutableDict setValue:self.musicSubject forKey:kHomeMusicModelMusicSubject];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.userId] forKey:kHomeMusicModelUserId];
+    [mutableDict setValue:self.submitAuditTime forKey:kHomeMusicModelSubmitAuditTime];
+
+    return [NSDictionary dictionaryWithDictionary:mutableDict];
+}
+
+- (NSString *)description 
+{
+    return [NSString stringWithFormat:@"%@", [self dictionaryRepresentation]];
+}
+
+#pragma mark - Helper Method
+- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict
+{
+    id object = [dict objectForKey:aKey];
+    if ([object isKindOfClass:[NSNumber class]]) {
+        NSNumber *number = object;
+        object = [number stringValue];
+    }
+    return [object isEqual:[NSNull null]] ? nil : object;
+}
+
+
+#pragma mark - NSCoding Methods
+
+- (id)initWithCoder:(NSCoder *)aDecoder
+{
+    self = [super init];
+
+    self.metronomeUrl = [aDecoder decodeObjectForKey:kHomeMusicModelMetronomeUrl];
+    self.musicSheetName = [aDecoder decodeObjectForKey:kHomeMusicModelMusicSheetName];
+    self.albumNums = [aDecoder decodeDoubleForKey:kHomeMusicModelAlbumNums];
+    self.internalBaseClassIdentifier = [aDecoder decodeDoubleForKey:kHomeMusicModelId];
+    self.xmlFileUrl = [aDecoder decodeObjectForKey:kHomeMusicModelXmlFileUrl];
+    self.showFingering = [aDecoder decodeDoubleForKey:kHomeMusicModelShowFingering];
+    self.albumSortNumber = [aDecoder decodeDoubleForKey:kHomeMusicModelAlbumSortNumber];
+    self.state = [aDecoder decodeDoubleForKey:kHomeMusicModelState];
+    self.remark = [aDecoder decodeObjectForKey:kHomeMusicModelRemark];
+    self.titleImg = [aDecoder decodeObjectForKey:kHomeMusicModelTitleImg];
+    self.notation = [aDecoder decodeDoubleForKey:kHomeMusicModelNotation];
+    self.musicImg = [aDecoder decodeObjectForKey:kHomeMusicModelMusicImg];
+    self.favoriteCount = [aDecoder decodeDoubleForKey:kHomeMusicModelFavoriteCount];
+    self.url = [aDecoder decodeObjectForKey:kHomeMusicModelUrl];
+    self.musicPrice = [aDecoder decodeDoubleForKey:kHomeMusicModelMusicPrice];
+    self.sortNumber = [aDecoder decodeDoubleForKey:kHomeMusicModelSortNumber];
+    self.exquisiteFlag = [aDecoder decodeDoubleForKey:kHomeMusicModelExquisiteFlag];
+    self.play = [aDecoder decodeObjectForKey:kHomeMusicModelPlay];
+    self.addUserAvatar = [aDecoder decodeObjectForKey:kHomeMusicModelAddUserAvatar];
+    self.audioType = [aDecoder decodeObjectForKey:kHomeMusicModelAudioType];
+    self.canEvaluate = [aDecoder decodeDoubleForKey:kHomeMusicModelCanEvaluate];
+    self.delFlag = [aDecoder decodeBoolForKey:kHomeMusicModelDelFlag];
+    self.musicTagNames = [aDecoder decodeObjectForKey:kHomeMusicModelMusicTagNames];
+    self.subjectNames = [aDecoder decodeObjectForKey:kHomeMusicModelSubjectNames];
+    self.chargeType = [aDecoder decodeObjectForKey:kHomeMusicModelChargeType];
+    self.updateTime = [aDecoder decodeObjectForKey:kHomeMusicModelUpdateTime];
+    self.updateBy = [aDecoder decodeDoubleForKey:kHomeMusicModelUpdateBy];
+    self.musicTag = [aDecoder decodeObjectForKey:kHomeMusicModelMusicTag];
+    self.extConfigJson = [aDecoder decodeObjectForKey:kHomeMusicModelExtConfigJson];
+    self.addName = [aDecoder decodeObjectForKey:kHomeMusicModelAddName];
+    self.paymentType = [aDecoder decodeObjectForKey:kHomeMusicModelPaymentType];
+    self.favorite = [aDecoder decodeDoubleForKey:kHomeMusicModelFavorite];
+    self.auditStatus = [aDecoder decodeObjectForKey:kHomeMusicModelAuditStatus];
+    self.createBy = [aDecoder decodeDoubleForKey:kHomeMusicModelCreateBy];
+    self.accompanimentType = [aDecoder decodeObjectForKey:kHomeMusicModelAccompanimentType];
+    self.topFlag = [aDecoder decodeDoubleForKey:kHomeMusicModelTopFlag];
+    self.midiUrl = [aDecoder decodeObjectForKey:kHomeMusicModelMidiUrl];
+    self.composer = [aDecoder decodeObjectForKey:kHomeMusicModelComposer];
+    self.sourceType = [aDecoder decodeObjectForKey:kHomeMusicModelSourceType];
+    self.firstPassAuditTime = [aDecoder decodeObjectForKey:kHomeMusicModelFirstPassAuditTime];
+    self.mp3Type = [aDecoder decodeObjectForKey:kHomeMusicModelMp3Type];
+    self.hotFlag = [aDecoder decodeObjectForKey:kHomeMusicModelHotFlag];
+    self.createTime = [aDecoder decodeObjectForKey:kHomeMusicModelCreateTime];
+    self.playSpeed = [aDecoder decodeDoubleForKey:kHomeMusicModelPlaySpeed];
+    self.hasBeat = [aDecoder decodeObjectForKey:kHomeMusicModelHasBeat];
+    self.audioFileUrl = [aDecoder decodeObjectForKey:kHomeMusicModelAudioFileUrl];
+    self.reason = [aDecoder decodeObjectForKey:kHomeMusicModelReason];
+    self.auditVersion = [aDecoder decodeDoubleForKey:kHomeMusicModelAuditVersion];
+    self.musicSubject = [aDecoder decodeObjectForKey:kHomeMusicModelMusicSubject];
+    self.userId = [aDecoder decodeDoubleForKey:kHomeMusicModelUserId];
+    self.submitAuditTime = [aDecoder decodeObjectForKey:kHomeMusicModelSubmitAuditTime];
+    return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder
+{
+
+    [aCoder encodeObject:_metronomeUrl forKey:kHomeMusicModelMetronomeUrl];
+    [aCoder encodeObject:_musicSheetName forKey:kHomeMusicModelMusicSheetName];
+    [aCoder encodeDouble:_albumNums forKey:kHomeMusicModelAlbumNums];
+    [aCoder encodeDouble:_internalBaseClassIdentifier forKey:kHomeMusicModelId];
+    [aCoder encodeObject:_xmlFileUrl forKey:kHomeMusicModelXmlFileUrl];
+    [aCoder encodeDouble:_showFingering forKey:kHomeMusicModelShowFingering];
+    [aCoder encodeDouble:_albumSortNumber forKey:kHomeMusicModelAlbumSortNumber];
+    [aCoder encodeDouble:_state forKey:kHomeMusicModelState];
+    [aCoder encodeObject:_remark forKey:kHomeMusicModelRemark];
+    [aCoder encodeObject:_titleImg forKey:kHomeMusicModelTitleImg];
+    [aCoder encodeDouble:_notation forKey:kHomeMusicModelNotation];
+    [aCoder encodeObject:_musicImg forKey:kHomeMusicModelMusicImg];
+    [aCoder encodeDouble:_favoriteCount forKey:kHomeMusicModelFavoriteCount];
+    [aCoder encodeObject:_url forKey:kHomeMusicModelUrl];
+    [aCoder encodeDouble:_musicPrice forKey:kHomeMusicModelMusicPrice];
+    [aCoder encodeDouble:_sortNumber forKey:kHomeMusicModelSortNumber];
+    [aCoder encodeDouble:_exquisiteFlag forKey:kHomeMusicModelExquisiteFlag];
+    [aCoder encodeObject:_play forKey:kHomeMusicModelPlay];
+    [aCoder encodeObject:_addUserAvatar forKey:kHomeMusicModelAddUserAvatar];
+    [aCoder encodeObject:_audioType forKey:kHomeMusicModelAudioType];
+    [aCoder encodeDouble:_canEvaluate forKey:kHomeMusicModelCanEvaluate];
+    [aCoder encodeBool:_delFlag forKey:kHomeMusicModelDelFlag];
+    [aCoder encodeObject:_musicTagNames forKey:kHomeMusicModelMusicTagNames];
+    [aCoder encodeObject:_subjectNames forKey:kHomeMusicModelSubjectNames];
+    [aCoder encodeObject:_chargeType forKey:kHomeMusicModelChargeType];
+    [aCoder encodeObject:_updateTime forKey:kHomeMusicModelUpdateTime];
+    [aCoder encodeDouble:_updateBy forKey:kHomeMusicModelUpdateBy];
+    [aCoder encodeObject:_musicTag forKey:kHomeMusicModelMusicTag];
+    [aCoder encodeObject:_extConfigJson forKey:kHomeMusicModelExtConfigJson];
+    [aCoder encodeObject:_addName forKey:kHomeMusicModelAddName];
+    [aCoder encodeObject:_paymentType forKey:kHomeMusicModelPaymentType];
+    [aCoder encodeDouble:_favorite forKey:kHomeMusicModelFavorite];
+    [aCoder encodeObject:_auditStatus forKey:kHomeMusicModelAuditStatus];
+    [aCoder encodeDouble:_createBy forKey:kHomeMusicModelCreateBy];
+    [aCoder encodeObject:_accompanimentType forKey:kHomeMusicModelAccompanimentType];
+    [aCoder encodeDouble:_topFlag forKey:kHomeMusicModelTopFlag];
+    [aCoder encodeObject:_midiUrl forKey:kHomeMusicModelMidiUrl];
+    [aCoder encodeObject:_composer forKey:kHomeMusicModelComposer];
+    [aCoder encodeObject:_sourceType forKey:kHomeMusicModelSourceType];
+    [aCoder encodeObject:_firstPassAuditTime forKey:kHomeMusicModelFirstPassAuditTime];
+    [aCoder encodeObject:_mp3Type forKey:kHomeMusicModelMp3Type];
+    [aCoder encodeObject:_hotFlag forKey:kHomeMusicModelHotFlag];
+    [aCoder encodeObject:_createTime forKey:kHomeMusicModelCreateTime];
+    [aCoder encodeDouble:_playSpeed forKey:kHomeMusicModelPlaySpeed];
+    [aCoder encodeObject:_hasBeat forKey:kHomeMusicModelHasBeat];
+    [aCoder encodeObject:_audioFileUrl forKey:kHomeMusicModelAudioFileUrl];
+    [aCoder encodeObject:_reason forKey:kHomeMusicModelReason];
+    [aCoder encodeDouble:_auditVersion forKey:kHomeMusicModelAuditVersion];
+    [aCoder encodeObject:_musicSubject forKey:kHomeMusicModelMusicSubject];
+    [aCoder encodeDouble:_userId forKey:kHomeMusicModelUserId];
+    [aCoder encodeObject:_submitAuditTime forKey:kHomeMusicModelSubmitAuditTime];
+}
+
+- (id)copyWithZone:(NSZone *)zone
+{
+    HomeMusicModel *copy = [[HomeMusicModel alloc] init];
+    
+    if (copy) {
+
+        copy.metronomeUrl = [self.metronomeUrl copyWithZone:zone];
+        copy.musicSheetName = [self.musicSheetName copyWithZone:zone];
+        copy.albumNums = self.albumNums;
+        copy.internalBaseClassIdentifier = self.internalBaseClassIdentifier;
+        copy.xmlFileUrl = [self.xmlFileUrl copyWithZone:zone];
+        copy.showFingering = self.showFingering;
+        copy.albumSortNumber = self.albumSortNumber;
+        copy.state = self.state;
+        copy.remark = [self.remark copyWithZone:zone];
+        copy.titleImg = [self.titleImg copyWithZone:zone];
+        copy.notation = self.notation;
+        copy.musicImg = [self.musicImg copyWithZone:zone];
+        copy.favoriteCount = self.favoriteCount;
+        copy.url = [self.url copyWithZone:zone];
+        copy.musicPrice = self.musicPrice;
+        copy.sortNumber = self.sortNumber;
+        copy.exquisiteFlag = self.exquisiteFlag;
+        copy.play = [self.play copyWithZone:zone];
+        copy.addUserAvatar = [self.addUserAvatar copyWithZone:zone];
+        copy.audioType = [self.audioType copyWithZone:zone];
+        copy.canEvaluate = self.canEvaluate;
+        copy.delFlag = self.delFlag;
+        copy.musicTagNames = [self.musicTagNames copyWithZone:zone];
+        copy.subjectNames = [self.subjectNames copyWithZone:zone];
+        copy.chargeType = [self.chargeType copyWithZone:zone];
+        copy.updateTime = [self.updateTime copyWithZone:zone];
+        copy.updateBy = self.updateBy;
+        copy.musicTag = [self.musicTag copyWithZone:zone];
+        copy.extConfigJson = [self.extConfigJson copyWithZone:zone];
+        copy.addName = [self.addName copyWithZone:zone];
+        copy.paymentType = [self.paymentType copyWithZone:zone];
+        copy.favorite = self.favorite;
+        copy.auditStatus = [self.auditStatus copyWithZone:zone];
+        copy.createBy = self.createBy;
+        copy.accompanimentType = [self.accompanimentType copyWithZone:zone];
+        copy.topFlag = self.topFlag;
+        copy.midiUrl = [self.midiUrl copyWithZone:zone];
+        copy.composer = [self.composer copyWithZone:zone];
+        copy.sourceType = [self.sourceType copyWithZone:zone];
+        copy.firstPassAuditTime = [self.firstPassAuditTime copyWithZone:zone];
+        copy.mp3Type = [self.mp3Type copyWithZone:zone];
+        copy.hotFlag = [self.hotFlag copyWithZone:zone];
+        copy.createTime = [self.createTime copyWithZone:zone];
+        copy.playSpeed = self.playSpeed;
+        copy.hasBeat = [self.hasBeat copyWithZone:zone];
+        copy.audioFileUrl = [self.audioFileUrl copyWithZone:zone];
+        copy.reason = [self.reason copyWithZone:zone];
+        copy.auditVersion = self.auditVersion;
+        copy.musicSubject = [self.musicSubject copyWithZone:zone];
+        copy.userId = self.userId;
+        copy.submitAuditTime = [self.submitAuditTime copyWithZone:zone];
+    }
+    
+    return copy;
+}
+
+
+@end

+ 2 - 2
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicCellView.h

@@ -6,7 +6,7 @@
 //
 
 #import <UIKit/UIKit.h>
-#import "HomeHotMusicModel.h"
+#import "HomeMusicModel.h"
 
 typedef void(^HotMusicDetailBlock)(NSString * _Nonnull songId);
 
@@ -15,7 +15,7 @@ NS_ASSUME_NONNULL_BEGIN
 @interface HomeHotMusicCellView : UIView
 + (instancetype)shareInstance;
 
-- (void)configWithMusicModel:(HomeHotMusicModel *)sourceModel hiddenLineView:(BOOL)hideLineView callback:(HotMusicDetailBlock)callback;
+- (void)configWithMusicModel:(HomeMusicModel *)sourceModel hiddenLineView:(BOOL)hideLineView callback:(HotMusicDetailBlock)callback;
 
 @end
 

+ 2 - 2
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicCellView.m

@@ -20,7 +20,7 @@
 
 @property (nonatomic, copy) HotMusicDetailBlock callback;
 
-@property (nonatomic, strong) HomeHotMusicModel *model;
+@property (nonatomic, strong) HomeMusicModel *model;
 
 @property (weak, nonatomic) IBOutlet UIImageView *qualityMusicTag;
 @property (weak, nonatomic) IBOutlet NSLayoutConstraint *qualityTagWidth;
@@ -37,7 +37,7 @@
     return view;
 }
 
-- (void)configWithMusicModel:(HomeHotMusicModel *)sourceModel hiddenLineView:(BOOL)hideLineView callback:(HotMusicDetailBlock)callback {
+- (void)configWithMusicModel:(HomeMusicModel *)sourceModel hiddenLineView:(BOOL)hideLineView callback:(HotMusicDetailBlock)callback {
     if (callback) {
         self.callback = callback;
     }

+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicView.m

@@ -33,7 +33,7 @@
 }
 
 + (CGFloat)getViewHeight {
-    return 384;
+    return 384.0f;
 }
 
 /*

+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeMusic/HomeHotMusicView.xib

@@ -25,7 +25,7 @@
                         </userDefinedRuntimeAttribute>
                     </userDefinedRuntimeAttributes>
                 </view>
-                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="热曲目" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ObF-3e-j29">
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="热曲目" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ObF-3e-j29">
                     <rect key="frame" x="35" y="30" width="65.5" height="22"/>
                     <constraints>
                         <constraint firstAttribute="height" constant="22" id="cPc-Bd-itn"/>

+ 5 - 6
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusic.h → KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeNewMusic/HomeNewMusicView.h

@@ -1,24 +1,23 @@
 //
-//  HomeQualityMusic.h
+//  HomeNewMusicView.h
 //  KulexiuForStudent
 //
-//  Created by 王智 on 2022/9/13.
+//  Created by 王智 on 2022/10/19.
 //
 
 #import <UIKit/UIKit.h>
 
 NS_ASSUME_NONNULL_BEGIN
 
-typedef void(^HomeQualityMusicBlock)(void);
+typedef void(^HomeNewMusicActionBlock)(void);
 
-
-@interface HomeQualityMusic : UIView
+@interface HomeNewMusicView : UIView
 
 @property (weak, nonatomic) IBOutlet UIView *musicContentView;
 
 + (instancetype)shareInstance;
 
-- (void)homeMusicMore:(HomeQualityMusicBlock)callback;
+- (void)homeMusicMore:(HomeNewMusicActionBlock)callback;
 
 + (CGFloat)getViewHeight;
 

+ 9 - 9
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusic.m → KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeNewMusic/HomeNewMusicView.m

@@ -1,26 +1,26 @@
 //
-//  HomeQualityMusic.m
+//  HomeNewMusicView.m
 //  KulexiuForStudent
 //
-//  Created by 王智 on 2022/9/13.
+//  Created by 王智 on 2022/10/19.
 //
 
-#import "HomeQualityMusic.h"
+#import "HomeNewMusicView.h"
 
-@interface HomeQualityMusic ()
+@interface HomeNewMusicView ()
 
-@property (nonatomic, copy) HomeQualityMusicBlock callback;
+@property (nonatomic, copy) HomeNewMusicActionBlock callback;
 
 @end
 
-@implementation HomeQualityMusic
+@implementation HomeNewMusicView
 
 + (instancetype)shareInstance {
-    HomeQualityMusic *view = [[[NSBundle mainBundle] loadNibNamed:@"HomeQualityMusic" owner:nil options:nil] firstObject];
+    HomeNewMusicView *view = [[[NSBundle mainBundle] loadNibNamed:@"HomeNewMusicView" owner:nil options:nil] firstObject];
     return view;
 }
 
-- (void)homeMusicMore:(HomeQualityMusicBlock)callback {
+- (void)homeMusicMore:(HomeNewMusicActionBlock)callback {
     if (callback) {
         self.callback = callback;
     }
@@ -33,7 +33,7 @@
 }
 
 + (CGFloat)getViewHeight {
-    return 384;
+    return 384.0f;
 }
 
 /*

+ 49 - 49
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusic.xib → KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeNewMusic/HomeNewMusicView.xib

@@ -1,23 +1,23 @@
 <?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">
-    <device id="retina6_1" orientation="portrait" appearance="light"/>
+<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="20020"/>
+        <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="HomeQualityMusic">
-            <rect key="frame" x="0.0" y="0.0" width="414" height="384"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="HomeNewMusicView">
+            <rect key="frame" x="0.0" y="0.0" width="390" height="388"/>
             <autoresizingMask key="autoresizingMask"/>
             <subviews>
-                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="lPT-H8-gYH">
-                    <rect key="frame" x="355" y="32" width="45" height="18"/>
-                    <color key="backgroundColor" red="0.94901960780000005" green="0.94901960780000005" blue="0.94901960780000005" alpha="1" colorSpace="calibratedRGB"/>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="fy2-nu-LBW">
+                    <rect key="frame" x="331" y="32" width="45" height="18"/>
+                    <color key="backgroundColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="0.10000000000000001" colorSpace="calibratedRGB"/>
                     <constraints>
-                        <constraint firstAttribute="height" constant="18" id="rqo-E9-b6q"/>
+                        <constraint firstAttribute="height" constant="18" id="ydg-Ix-Mz0"/>
                     </constraints>
                     <userDefinedRuntimeAttributes>
                         <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
@@ -25,87 +25,87 @@
                         </userDefinedRuntimeAttribute>
                     </userDefinedRuntimeAttributes>
                 </view>
-                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="精品曲目" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xtD-wk-lfc">
-                    <rect key="frame" x="24" y="30" width="73.5" height="22"/>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="最新曲目" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6CW-e0-al3">
+                    <rect key="frame" x="24" y="30" width="73.666666666666671" height="22"/>
                     <constraints>
-                        <constraint firstAttribute="height" constant="22" id="GCx-Ai-iPi"/>
+                        <constraint firstAttribute="height" constant="22" id="ykn-Z7-imu"/>
                     </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="calibratedRGB"/>
                     <nil key="highlightedColor"/>
                 </label>
-                <button opaque="NO" tag="1008" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="w8u-6P-UD0">
-                    <rect key="frame" x="361" y="26" width="34" height="30"/>
+                <button opaque="NO" tag="1008" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="csk-1t-0jz">
+                    <rect key="frame" x="337" y="26" width="34" height="30"/>
                     <constraints>
-                        <constraint firstAttribute="height" constant="30" id="z8P-gp-qVr"/>
+                        <constraint firstAttribute="height" constant="30" id="M3e-Eg-6I0"/>
                     </constraints>
                     <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
                     <state key="normal">
                         <color key="titleColor" red="0.46666666670000001" green="0.46666666670000001" blue="0.46666666670000001" alpha="0.84705882349999995" colorSpace="calibratedRGB"/>
                     </state>
                     <connections>
-                        <action selector="moreMusic:" destination="iN0-l3-epB" eventType="touchUpInside" id="u7G-43-8r5"/>
+                        <action selector="moreMusic:" destination="iN0-l3-epB" eventType="touchUpInside" id="ct8-zE-u5F"/>
                     </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="hff-Ky-dYH">
-                    <rect key="frame" x="361" y="34" width="25" height="14.5"/>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="更多" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2pb-rc-jX4">
+                    <rect key="frame" x="337" y="33.666666666666664" width="25" height="14.666666666666664"/>
                     <fontDescription key="fontDescription" type="system" pointSize="12"/>
-                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
+                    <color key="textColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="calibratedRGB"/>
                     <nil key="highlightedColor"/>
                 </label>
-                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_more" translatesAutoresizingMaskIntoConstraints="NO" id="4ND-Zx-0De">
-                    <rect key="frame" x="389" y="37" width="6" height="8"/>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_more_green" translatesAutoresizingMaskIntoConstraints="NO" id="lcO-IB-Crt">
+                    <rect key="frame" x="365" y="37" width="6" height="8"/>
                     <constraints>
-                        <constraint firstAttribute="width" constant="6" id="1cL-Os-olf"/>
-                        <constraint firstAttribute="height" constant="8" id="AA6-Yn-afz"/>
+                        <constraint firstAttribute="width" constant="6" id="Hcf-3X-Mrv"/>
+                        <constraint firstAttribute="height" constant="8" id="SAN-px-udA"/>
                     </constraints>
                 </imageView>
-                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_left" translatesAutoresizingMaskIntoConstraints="NO" id="A0I-27-Obf">
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_left" translatesAutoresizingMaskIntoConstraints="NO" id="Gnt-En-BW7">
                     <rect key="frame" x="14" y="32" width="4" height="18"/>
                     <constraints>
-                        <constraint firstAttribute="width" constant="4" id="tUz-af-bVs"/>
-                        <constraint firstAttribute="height" constant="18" id="x0h-NC-fZU"/>
+                        <constraint firstAttribute="height" constant="18" id="B5g-ev-PbH"/>
+                        <constraint firstAttribute="width" constant="4" id="Jx9-Q2-wT3"/>
                     </constraints>
                 </imageView>
-                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="fx6-Fa-y4K">
-                    <rect key="frame" x="0.0" y="64" width="414" height="320"/>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="csN-Ie-7a8">
+                    <rect key="frame" x="0.0" y="68" width="390" height="320"/>
                     <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                     <constraints>
-                        <constraint firstAttribute="height" constant="320" id="iKE-PR-OQe"/>
+                        <constraint firstAttribute="height" constant="320" id="MyF-Wi-MeL"/>
                     </constraints>
                 </view>
             </subviews>
             <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
             <constraints>
-                <constraint firstItem="hff-Ky-dYH" firstAttribute="centerY" secondItem="xtD-wk-lfc" secondAttribute="centerY" id="1gj-B1-ja3"/>
-                <constraint firstItem="4ND-Zx-0De" firstAttribute="centerY" secondItem="xtD-wk-lfc" secondAttribute="centerY" id="7l9-L0-3Uz"/>
-                <constraint firstItem="xtD-wk-lfc" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="30" id="AD4-Jl-yII"/>
-                <constraint firstItem="hff-Ky-dYH" firstAttribute="leading" secondItem="lPT-H8-gYH" secondAttribute="leading" constant="6" id="IE2-Rp-Rds"/>
-                <constraint firstAttribute="trailing" secondItem="lPT-H8-gYH" secondAttribute="trailing" constant="14" id="IwF-RJ-ca2"/>
-                <constraint firstAttribute="trailing" secondItem="fx6-Fa-y4K" secondAttribute="trailing" id="V8J-iY-IKF"/>
-                <constraint firstItem="w8u-6P-UD0" firstAttribute="centerY" secondItem="xtD-wk-lfc" secondAttribute="centerY" id="VUh-lm-mOL"/>
-                <constraint firstItem="4ND-Zx-0De" firstAttribute="leading" secondItem="hff-Ky-dYH" secondAttribute="trailing" constant="3" id="YPP-aj-QAe"/>
-                <constraint firstItem="A0I-27-Obf" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="a4e-J3-6Dc"/>
-                <constraint firstItem="fx6-Fa-y4K" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="hqs-f6-oXc"/>
-                <constraint firstItem="hff-Ky-dYH" firstAttribute="leading" secondItem="w8u-6P-UD0" secondAttribute="leading" id="i2q-4t-g9I"/>
-                <constraint firstItem="lPT-H8-gYH" firstAttribute="centerY" secondItem="hff-Ky-dYH" secondAttribute="centerY" id="i6d-23-f5H"/>
-                <constraint firstItem="xtD-wk-lfc" firstAttribute="centerY" secondItem="A0I-27-Obf" secondAttribute="centerY" id="jJn-Gv-pq4"/>
-                <constraint firstItem="4ND-Zx-0De" firstAttribute="trailing" secondItem="lPT-H8-gYH" secondAttribute="trailing" constant="-5" id="k7K-QU-8B2"/>
-                <constraint firstItem="xtD-wk-lfc" firstAttribute="leading" secondItem="A0I-27-Obf" secondAttribute="trailing" constant="6" id="lAX-HW-Nos"/>
-                <constraint firstItem="4ND-Zx-0De" firstAttribute="trailing" secondItem="w8u-6P-UD0" secondAttribute="trailing" id="uiR-an-LoO"/>
-                <constraint firstItem="fx6-Fa-y4K" firstAttribute="top" secondItem="xtD-wk-lfc" secondAttribute="bottom" constant="12" id="xbb-eK-wFh"/>
+                <constraint firstItem="fy2-nu-LBW" firstAttribute="centerY" secondItem="2pb-rc-jX4" secondAttribute="centerY" id="AWf-kl-zgq"/>
+                <constraint firstItem="6CW-e0-al3" firstAttribute="centerY" secondItem="Gnt-En-BW7" secondAttribute="centerY" id="BaT-WH-9yM"/>
+                <constraint firstAttribute="trailing" secondItem="fy2-nu-LBW" secondAttribute="trailing" constant="14" id="C4h-mj-8Jc"/>
+                <constraint firstItem="lcO-IB-Crt" firstAttribute="trailing" secondItem="csk-1t-0jz" secondAttribute="trailing" id="FJn-ed-iAe"/>
+                <constraint firstItem="lcO-IB-Crt" firstAttribute="trailing" secondItem="fy2-nu-LBW" secondAttribute="trailing" constant="-5" id="H4r-bu-SAz"/>
+                <constraint firstItem="csN-Ie-7a8" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="K1Y-fg-RQv"/>
+                <constraint firstItem="Gnt-En-BW7" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="Mgl-Vu-HI9"/>
+                <constraint firstItem="lcO-IB-Crt" firstAttribute="leading" secondItem="2pb-rc-jX4" secondAttribute="trailing" constant="3" id="PVy-22-561"/>
+                <constraint firstItem="csN-Ie-7a8" firstAttribute="top" secondItem="csk-1t-0jz" secondAttribute="bottom" constant="12" id="Puf-fP-R0z"/>
+                <constraint firstAttribute="trailing" secondItem="csN-Ie-7a8" secondAttribute="trailing" id="WCb-7V-4Xm"/>
+                <constraint firstItem="6CW-e0-al3" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="30" id="a2j-vq-f2z"/>
+                <constraint firstItem="2pb-rc-jX4" firstAttribute="centerY" secondItem="6CW-e0-al3" secondAttribute="centerY" id="b6v-h7-2c0"/>
+                <constraint firstItem="2pb-rc-jX4" firstAttribute="leading" secondItem="csk-1t-0jz" secondAttribute="leading" id="dx0-PV-TnS"/>
+                <constraint firstItem="6CW-e0-al3" firstAttribute="leading" secondItem="Gnt-En-BW7" secondAttribute="trailing" constant="6" id="fI8-yL-qTO"/>
+                <constraint firstItem="2pb-rc-jX4" firstAttribute="leading" secondItem="fy2-nu-LBW" secondAttribute="leading" constant="6" id="i1k-cJ-1as"/>
+                <constraint firstItem="lcO-IB-Crt" firstAttribute="centerY" secondItem="6CW-e0-al3" secondAttribute="centerY" id="jG3-Lk-KHu"/>
+                <constraint firstItem="csk-1t-0jz" firstAttribute="centerY" secondItem="6CW-e0-al3" secondAttribute="centerY" id="lrP-rE-aW8"/>
             </constraints>
             <nil key="simulatedTopBarMetrics"/>
             <nil key="simulatedBottomBarMetrics"/>
             <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
             <connections>
-                <outlet property="musicContentView" destination="fx6-Fa-y4K" id="8dC-xz-C7v"/>
+                <outlet property="musicContentView" destination="csN-Ie-7a8" id="97f-Jb-JoE"/>
             </connections>
-            <point key="canvasLocation" x="131.8840579710145" y="-122.54464285714285"/>
+            <point key="canvasLocation" x="101.53846153846153" y="-28.436018957345969"/>
         </view>
     </objects>
     <resources>
         <image name="home_left" width="4" height="18"/>
-        <image name="home_more" width="6" height="8"/>
+        <image name="home_more_green" width="5" height="8"/>
     </resources>
 </document>

+ 0 - 23
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusicCellView.h

@@ -1,23 +0,0 @@
-//
-//  HomeQualityMusicCellView.h
-//  KulexiuForStudent
-//
-//  Created by 王智 on 2022/9/13.
-//
-
-#import <UIKit/UIKit.h>
-#import "HomeHotMusicModel.h"
-
-typedef void(^QualityMusicDetailBlock)(NSString * _Nonnull songId);
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface HomeQualityMusicCellView : UIView
-
-+ (instancetype)shareInstance;
-
-- (void)configWithMusicModel:(HomeHotMusicModel *)sourceModel hiddenLineView:(BOOL)hideLineView callback:(QualityMusicDetailBlock)callback;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 166
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusicCellView.m

@@ -1,166 +0,0 @@
-//
-//  HomeQualityMusicCellView.m
-//  KulexiuForStudent
-//
-//  Created by 王智 on 2022/9/13.
-//
-
-#import "HomeQualityMusicCellView.h"
-
-@interface HomeQualityMusicCellView ()
-
-@property (weak, nonatomic) IBOutlet UILabel *statusLabel;
-@property (weak, nonatomic) IBOutlet UIView *statusView;
-@property (weak, nonatomic) IBOutlet UILabel *songNameLabel;
-@property (weak, nonatomic) IBOutlet UILabel *songAuth;
-@property (weak, nonatomic) IBOutlet UILabel *uploadName;
-
-@property (weak, nonatomic) IBOutlet UIView *tagView;
-@property (weak, nonatomic) IBOutlet UIView *lineView;
-
-@property (nonatomic, copy) QualityMusicDetailBlock callback;
-
-@property (nonatomic, strong) HomeHotMusicModel *model;
-
-@end
-
-@implementation HomeQualityMusicCellView
-
-
-+ (instancetype)shareInstance {
-    HomeQualityMusicCellView *view = [[[NSBundle mainBundle] loadNibNamed:@"HomeQualityMusicCellView" owner:nil options:nil] firstObject];
-    return view;
-}
-
-- (void)configWithMusicModel:(HomeHotMusicModel *)sourceModel hiddenLineView:(BOOL)hideLineView callback:(QualityMusicDetailBlock)callback {
-    if (callback) {
-        self.callback = callback;
-    }
-    self.model = sourceModel;
-    if ([NSString isEmptyString:sourceModel.musicSheetName]) {
-        self.songNameLabel.text = @"";
-    }
-    else {
-        NSString *musicName = @"";
-        if (sourceModel.musicSheetName.length > 10) {
-            musicName = [NSString stringWithFormat:@"%@...",[sourceModel.musicSheetName substringToIndex:9]];
-        }
-        else {
-            musicName = sourceModel.musicSheetName;
-        }
-        self.songNameLabel.text = musicName;
-    }
-    if ([NSString isEmptyString:sourceModel.composer]) {
-        self.songAuth.text = @"";
-    }
-    else {
-        NSString *songAuth = @"";
-        if (sourceModel.composer.length > 4) {
-            songAuth = [NSString stringWithFormat:@"-%@...",[sourceModel.composer substringToIndex:4]];
-        }
-        else {
-            songAuth = [NSString stringWithFormat:@"-%@",sourceModel.composer];
-        }
-        self.songAuth.text = songAuth;
-    }
-    NSArray *tagArray = nil;
-    if (![NSString isEmptyString:sourceModel.subjectNames]) {
-        tagArray = [sourceModel.subjectNames componentsSeparatedByString:@","];
-    }
-    
-    NSString *owner = @"";
-    if ([NSString isEmptyString:sourceModel.addName]) {
-        owner = [NSString stringWithFormat:@"上传者:游客%.0f",sourceModel.userId];
-    }
-    else {
-        owner = sourceModel.addName;
-        if (sourceModel.addName.length > 4) {
-            owner = [NSString stringWithFormat:@"上传者:%@...",[sourceModel.addName substringToIndex:4]];
-        }
-        else {
-            owner = [NSString stringWithFormat:@"上传者:%@",sourceModel.addName];
-        }
-    }
-    self.uploadName.text = owner;
-
-    CGFloat maxWidth = [self getTagViewMaxWidth:owner];
-    [self configTagViewWithTagArray:tagArray maxWidth:maxWidth];
-    self.lineView.hidden = hideLineView;
-    
-    if ([sourceModel.chargeType isEqualToString:@"VIP"]) {
-        self.statusView.layer.borderColor = HexRGB(0xCD863E).CGColor;
-        self.statusLabel.text = @"会员";
-        self.statusLabel.textColor = HexRGB(0xCD863E);
-    }
-    else if ([sourceModel.chargeType isEqualToString:@"CHARGE"]) {
-        self.statusView.layer.borderColor = HexRGB(0x3591CE).CGColor;
-        self.statusLabel.text = @"点播";
-        self.statusLabel.textColor = HexRGB(0x3591CE);
-    }
-    else {
-        self.statusView.layer.borderColor = HexRGB(0x01B84F).CGColor;
-        self.statusLabel.text = @"免费";
-        self.statusLabel.textColor = HexRGB(0x01B84F);
-    }
-}
-
-- (CGFloat)getTagViewMaxWidth:(NSString *)teacherName {
-    CGFloat width = [self getStringWidthInLabel:teacherName font:[UIFont systemFontOfSize:12.0f]];
-    return kScreenWidth*0.83 - 48 - width - 12;
-}
-
-- (void)configTagViewWithTagArray:(NSArray *)tagArray maxWidth:(CGFloat)maxWidth {
-    [self.tagView removeAllSubViews];
-    CGFloat width = maxWidth;
-    CGFloat xSpace = 0.0f;
-    for (NSInteger i = 0; i < tagArray.count; i++) {
-        NSString *tagString = tagArray[i];
-        CGFloat labelWidth = [self getStringWidthInLabel:tagString font:[UIFont systemFontOfSize:10.0f]];
-        CGFloat viewWidth = labelWidth + 10;
-        if (xSpace + viewWidth > width) {
-            return;
-        }
-        CGRect frame = CGRectMake(xSpace, 0, viewWidth, 16.0f);
-        [self createTagLabelViewWithName:tagString frame:frame];
-        xSpace += (viewWidth + 5);
-    }
-}
-
-- (CGFloat)getStringWidthInLabel:(NSString *)tagString font:(UIFont *)font {
-    CGFloat width = [tagString boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, 16.0f) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:font} context:nil].size.width+1;
-    return width;
-}
-
-- (void)createTagLabelViewWithName:(NSString *)name frame:(CGRect)frame {
-    UIView *bgView = [[UIView alloc] initWithFrame:frame];
-    bgView.backgroundColor = HexRGB(0xEFFBF9);
-    bgView.layer.cornerRadius = 8.0f;
-    [self.tagView addSubview:bgView];
-    
-    UILabel *tagLabel = [[UILabel alloc] init];
-    tagLabel.text = name;
-    tagLabel.textColor = THEMECOLOR;
-    tagLabel.font = [UIFont systemFontOfSize:10.0f];
-    tagLabel.textAlignment = NSTextAlignmentCenter;
-    [bgView addSubview:tagLabel];
-    [tagLabel mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.left.mas_equalTo(bgView.mas_left).offset(5);
-        make.right.mas_equalTo(bgView.mas_right).offset(-5);
-        make.top.bottom.mas_equalTo(bgView);
-    }];
-}
-- (IBAction)buttonAction:(id)sender {
-    if (self.callback) {
-        NSString *songId = [NSString stringWithFormat:@"%.0f",self.model.internalBaseClassIdentifier];
-        self.callback(songId);
-    }
-}
-/*
-// Only override drawRect: if you perform custom drawing.
-// An empty implementation adversely affects performance during animation.
-- (void)drawRect:(CGRect)rect {
-    // Drawing code
-}
-*/
-
-@end

+ 0 - 154
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusicCellView.xib

@@ -1,154 +0,0 @@
-<?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">
-    <device id="retina6_1" orientation="portrait" appearance="light"/>
-    <dependencies>
-        <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
-        <capability name="System colors in document resources" minToolsVersion="11.0"/>
-        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
-    </dependencies>
-    <objects>
-        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
-        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
-        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="HomeQualityMusicCellView">
-            <rect key="frame" x="0.0" y="0.0" width="414" height="76"/>
-            <autoresizingMask key="autoresizingMask"/>
-            <subviews>
-                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="-周杰伦" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bMh-Ig-EXo">
-                    <rect key="frame" x="169" y="11" 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>
-                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="enw-Zc-6ly">
-                    <rect key="frame" x="11" y="75.5" width="390" height="0.5"/>
-                    <color key="backgroundColor" red="0.90980392160000001" green="0.90980392160000001" blue="0.90980392160000001" alpha="1" colorSpace="calibratedRGB"/>
-                    <constraints>
-                        <constraint firstAttribute="height" constant="0.5" id="ffG-qD-zRD"/>
-                    </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="ooE-dG-95h">
-                    <rect key="frame" x="11" y="40.5" width="123" 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="lOd-BK-RpK">
-                    <rect key="frame" x="66" y="8.5" width="98" height="20"/>
-                    <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>
-                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ezP-fo-Bd0">
-                    <rect key="frame" x="146" y="40" width="220" height="16"/>
-                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                    <constraints>
-                        <constraint firstAttribute="height" constant="16" id="75t-8f-cek"/>
-                    </constraints>
-                </view>
-                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jKC-KV-7YE">
-                    <rect key="frame" x="11" y="10" width="31" height="17"/>
-                    <subviews>
-                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="免费" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dAJ-DA-DwA">
-                            <rect key="frame" x="5" y="1" width="21" height="14"/>
-                            <constraints>
-                                <constraint firstAttribute="height" constant="14" id="M1C-DA-m9J"/>
-                            </constraints>
-                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="10"/>
-                            <color key="textColor" red="0.0039215686269999999" green="0.75686274509999996" blue="0.70980392160000005" alpha="1" colorSpace="calibratedRGB"/>
-                            <nil key="highlightedColor"/>
-                            <userDefinedRuntimeAttributes>
-                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
-                                    <real key="value" value="4"/>
-                                </userDefinedRuntimeAttribute>
-                            </userDefinedRuntimeAttributes>
-                        </label>
-                    </subviews>
-                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
-                    <constraints>
-                        <constraint firstAttribute="trailing" secondItem="dAJ-DA-DwA" secondAttribute="trailing" constant="5" id="74Q-AP-Va1"/>
-                        <constraint firstItem="dAJ-DA-DwA" firstAttribute="top" secondItem="jKC-KV-7YE" secondAttribute="top" constant="1" id="Mu5-cn-6Cj"/>
-                        <constraint firstAttribute="bottom" secondItem="dAJ-DA-DwA" secondAttribute="bottom" constant="2" id="NzK-AH-7RJ"/>
-                        <constraint firstAttribute="width" constant="31" id="Vwl-t7-akm"/>
-                        <constraint firstItem="dAJ-DA-DwA" firstAttribute="leading" secondItem="jKC-KV-7YE" secondAttribute="leading" constant="5" id="wfG-Nz-FIc"/>
-                    </constraints>
-                    <userDefinedRuntimeAttributes>
-                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
-                            <real key="value" value="4"/>
-                        </userDefinedRuntimeAttribute>
-                        <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
-                            <real key="value" value="1"/>
-                        </userDefinedRuntimeAttribute>
-                    </userDefinedRuntimeAttributes>
-                </view>
-                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_music_play" translatesAutoresizingMaskIntoConstraints="NO" id="Gee-ao-VvB">
-                    <rect key="frame" x="371" y="26" width="24" height="24"/>
-                    <constraints>
-                        <constraint firstAttribute="width" constant="24" id="P0u-bD-AJp"/>
-                        <constraint firstAttribute="height" constant="24" id="TtK-xA-5DI"/>
-                    </constraints>
-                </imageView>
-                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="quality_tag" translatesAutoresizingMaskIntoConstraints="NO" id="oej-cG-7t5">
-                    <rect key="frame" x="47" y="10" width="14" height="17"/>
-                    <constraints>
-                        <constraint firstAttribute="width" constant="14" id="Kle-GR-r8s"/>
-                        <constraint firstAttribute="height" constant="17" id="nZC-ud-pC9"/>
-                    </constraints>
-                </imageView>
-                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="YDh-qy-4zR">
-                    <rect key="frame" x="0.0" y="0.0" width="414" height="76"/>
-                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
-                    <connections>
-                        <action selector="buttonAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="as6-4S-4Tg"/>
-                    </connections>
-                </button>
-            </subviews>
-            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-            <constraints>
-                <constraint firstItem="lOd-BK-RpK" firstAttribute="centerY" secondItem="jKC-KV-7YE" secondAttribute="centerY" id="0Gc-uo-cn9"/>
-                <constraint firstAttribute="bottom" secondItem="YDh-qy-4zR" secondAttribute="bottom" id="5qF-hs-bvd"/>
-                <constraint firstItem="Gee-ao-VvB" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" id="61L-GU-EMs"/>
-                <constraint firstItem="ezP-fo-Bd0" firstAttribute="centerY" secondItem="ooE-dG-95h" secondAttribute="centerY" id="7dY-hB-AFe"/>
-                <constraint firstItem="ooE-dG-95h" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="11" id="7zN-kf-VRL"/>
-                <constraint firstAttribute="trailing" secondItem="enw-Zc-6ly" secondAttribute="trailing" constant="13" id="97n-rJ-kOK"/>
-                <constraint firstItem="ooE-dG-95h" firstAttribute="top" secondItem="lOd-BK-RpK" secondAttribute="bottom" constant="12" id="BGR-2w-rcI"/>
-                <constraint firstItem="lOd-BK-RpK" firstAttribute="leading" secondItem="oej-cG-7t5" secondAttribute="trailing" constant="5" id="CUS-LP-wWr"/>
-                <constraint firstItem="enw-Zc-6ly" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="11" id="Epj-gl-jOP"/>
-                <constraint firstItem="YDh-qy-4zR" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="Ja4-dV-KwW"/>
-                <constraint firstAttribute="trailing" secondItem="YDh-qy-4zR" secondAttribute="trailing" id="QMx-PT-siH"/>
-                <constraint firstItem="bMh-Ig-EXo" firstAttribute="centerY" secondItem="lOd-BK-RpK" secondAttribute="centerY" id="Rsb-fE-N6e"/>
-                <constraint firstItem="ezP-fo-Bd0" firstAttribute="leading" secondItem="ooE-dG-95h" secondAttribute="trailing" constant="12" id="Sl7-ct-Oxa"/>
-                <constraint firstItem="YDh-qy-4zR" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="T8F-eW-soQ"/>
-                <constraint firstItem="Gee-ao-VvB" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="bMh-Ig-EXo" secondAttribute="trailing" constant="10" id="Toa-wC-w1H"/>
-                <constraint firstItem="jKC-KV-7YE" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="10" id="cRQ-EO-Crg"/>
-                <constraint firstItem="oej-cG-7t5" firstAttribute="centerY" secondItem="jKC-KV-7YE" secondAttribute="centerY" id="f8u-zC-Y9L"/>
-                <constraint firstItem="bMh-Ig-EXo" firstAttribute="leading" secondItem="lOd-BK-RpK" secondAttribute="trailing" constant="5" id="hLd-6k-q1I"/>
-                <constraint firstItem="jKC-KV-7YE" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="11" id="heC-iE-kkj"/>
-                <constraint firstAttribute="bottom" secondItem="enw-Zc-6ly" secondAttribute="bottom" id="kbn-HE-kEb"/>
-                <constraint firstItem="oej-cG-7t5" firstAttribute="leading" secondItem="jKC-KV-7YE" secondAttribute="trailing" constant="5" id="pAM-Oo-8N9"/>
-                <constraint firstItem="Gee-ao-VvB" firstAttribute="leading" secondItem="ezP-fo-Bd0" secondAttribute="trailing" constant="5" id="pfM-UG-4Bf"/>
-                <constraint firstAttribute="trailing" secondItem="Gee-ao-VvB" secondAttribute="trailing" constant="19" id="y4W-Sv-SPn"/>
-            </constraints>
-            <nil key="simulatedTopBarMetrics"/>
-            <nil key="simulatedBottomBarMetrics"/>
-            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
-            <connections>
-                <outlet property="lineView" destination="enw-Zc-6ly" id="nhX-K3-ze4"/>
-                <outlet property="songAuth" destination="bMh-Ig-EXo" id="zNe-oZ-AtU"/>
-                <outlet property="songNameLabel" destination="lOd-BK-RpK" id="zCb-DL-R8W"/>
-                <outlet property="statusLabel" destination="dAJ-DA-DwA" id="x7Z-ju-8Y9"/>
-                <outlet property="statusView" destination="jKC-KV-7YE" id="QFY-7g-Bdg"/>
-                <outlet property="tagView" destination="ezP-fo-Bd0" id="MxV-R3-5Yi"/>
-                <outlet property="uploadName" destination="ooE-dG-95h" id="lTE-8T-VdF"/>
-            </connections>
-            <point key="canvasLocation" x="131.8840579710145" y="-198.88392857142856"/>
-        </view>
-    </objects>
-    <resources>
-        <image name="home_music_play" width="24" height="24"/>
-        <image name="quality_tag" width="14" height="17"/>
-        <systemColor name="systemBackgroundColor">
-            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-        </systemColor>
-    </resources>
-</document>

+ 0 - 19
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusicCollectionCell.h

@@ -1,19 +0,0 @@
-//
-//  HomeQualityMusicCollectionCell.h
-//  KulexiuForStudent
-//
-//  Created by 王智 on 2022/9/13.
-//
-
-#import <UIKit/UIKit.h>
-#import "HomeQualityMusicCellView.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface HomeQualityMusicCollectionCell : UICollectionViewCell
-
-- (void)configWithSourceArray:(NSMutableArray *)songArray callback:(QualityMusicDetailBlock)callback;
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 62
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusicCollectionCell.m

@@ -1,62 +0,0 @@
-//
-//  HomeQualityMusicCollectionCell.m
-//  KulexiuForStudent
-//
-//  Created by 王智 on 2022/9/13.
-//
-
-#import "HomeQualityMusicCollectionCell.h"
-
-@interface HomeQualityMusicCollectionCell ()
-
-@property (weak, nonatomic) IBOutlet UIView *containerView;
-
-@property (nonatomic, copy) QualityMusicDetailBlock callback;
-
-@end
-
-@implementation HomeQualityMusicCollectionCell
-
-- (void)awakeFromNib {
-    [super awakeFromNib];
-    // Initialization code
-    
-    CAGradientLayer *layer = [self createGradientLayerFromColor:HexRGB(0xFFF4EC) startPoint:CGPointMake(0.5, 0) endColor:HexRGB(0xFFFDFB) endPoint:CGPointMake(0.5, 1) bounds:CGRectMake(0, 0, KPortraitWidth * 0.83, 320)];
-    layer.cornerRadius = 10.0f;
-    layer.masksToBounds = YES;
-    [self.containerView.layer addSublayer:layer];
-}
-
-- (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;
-}
-
-- (void)configWithSourceArray:(NSMutableArray *)songArray callback:(QualityMusicDetailBlock)callback {
-    if (callback) {
-        self.callback = callback;
-    }
-    [self.containerView removeAllSubViews];
-    CGFloat width = KPortraitWidth * 0.83;
-    for (NSInteger i = 0; i < songArray.count; i++) {
-        // 添加按钮
-        HomeQualityMusicCellView *cell = [HomeQualityMusicCellView shareInstance];
-        cell.frame = CGRectMake(0, 80 * i, width, 80);
-        BOOL hideLineView = i == songArray.count - 1 ? YES : NO;
-        MJWeakSelf;
-        [cell configWithMusicModel:songArray[i] hiddenLineView:hideLineView callback:^(NSString * _Nonnull songId) {
-            if (weakSelf.callback) {
-                weakSelf.callback(songId);
-            }
-        }];
-        [self.containerView addSubview:cell];
-    }
-    
-}
-
-@end

+ 0 - 57
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeQuality/HomeQualityMusicCollectionCell.xib

@@ -1,57 +0,0 @@
-<?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">
-    <device id="retina6_1" orientation="portrait" appearance="light"/>
-    <dependencies>
-        <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
-        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
-        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
-    </dependencies>
-    <objects>
-        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
-        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
-        <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="gTV-IL-0wX" customClass="HomeQualityMusicCollectionCell">
-            <rect key="frame" x="0.0" y="0.0" width="283" height="215"/>
-            <autoresizingMask key="autoresizingMask"/>
-            <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
-                <rect key="frame" x="0.0" y="0.0" width="283" height="215"/>
-                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
-                <subviews>
-                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="nES-5a-lQe">
-                        <rect key="frame" x="0.0" y="0.0" width="283" height="215"/>
-                        <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                        <userDefinedRuntimeAttributes>
-                            <userDefinedRuntimeAttribute type="size" keyPath="shadowOffset">
-                                <size key="value" width="0.0" height="2"/>
-                            </userDefinedRuntimeAttribute>
-                            <userDefinedRuntimeAttribute type="color" keyPath="shadowUIColor">
-                                <color key="value" red="0.8980392157" green="0.8980392157" blue="0.8980392157" alpha="0.10000000000000001" colorSpace="custom" customColorSpace="calibratedRGB"/>
-                            </userDefinedRuntimeAttribute>
-                            <userDefinedRuntimeAttribute type="number" keyPath="shadowOpacity">
-                                <real key="value" value="1"/>
-                            </userDefinedRuntimeAttribute>
-                            <userDefinedRuntimeAttribute type="number" keyPath="shadowRadius">
-                                <real key="value" value="2"/>
-                            </userDefinedRuntimeAttribute>
-                            <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
-                                <real key="value" value="10"/>
-                            </userDefinedRuntimeAttribute>
-                        </userDefinedRuntimeAttributes>
-                    </view>
-                </subviews>
-            </view>
-            <viewLayoutGuide key="safeArea" id="SEy-5g-ep8"/>
-            <constraints>
-                <constraint firstAttribute="bottom" secondItem="nES-5a-lQe" secondAttribute="bottom" id="WCC-Kn-8Og"/>
-                <constraint firstItem="nES-5a-lQe" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" id="X5c-4T-rDj"/>
-                <constraint firstItem="nES-5a-lQe" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="ewL-RL-8Ll"/>
-                <constraint firstAttribute="trailing" secondItem="nES-5a-lQe" secondAttribute="trailing" id="qyi-0y-TNA"/>
-            </constraints>
-            <size key="customSize" width="283" height="215"/>
-            <connections>
-                <outlet property="containerView" destination="nES-5a-lQe" id="JDf-wS-K7C"/>
-            </connections>
-            <point key="canvasLocation" x="300.72463768115944" y="130.24553571428572"/>
-        </collectionViewCell>
-    </objects>
-</document>

+ 26 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeRecommendMusic/HomeRecommendMusicView.h

@@ -0,0 +1,26 @@
+//
+//  HomeRecommendMusicView.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/10/19.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef void(^HomeRecommendMusicActionBlock)(void);
+
+@interface HomeRecommendMusicView : UIView
+
+@property (weak, nonatomic) IBOutlet UIView *musicContentView;
+
++ (instancetype)shareInstance;
+
+- (void)homeMusicMore:(HomeRecommendMusicActionBlock)callback;
+
++ (CGFloat)getViewHeight;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 48 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeRecommendMusic/HomeRecommendMusicView.m

@@ -0,0 +1,48 @@
+//
+//  HomeRecommendMusicView.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/10/19.
+//
+
+#import "HomeRecommendMusicView.h"
+
+@interface HomeRecommendMusicView ()
+
+@property (nonatomic, strong) HomeRecommendMusicActionBlock callback;
+
+@end
+
+@implementation HomeRecommendMusicView
+
++ (instancetype)shareInstance {
+    HomeRecommendMusicView *view = [[[NSBundle mainBundle] loadNibNamed:@"HomeRecommendMusicView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)homeMusicMore:(HomeRecommendMusicActionBlock)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (IBAction)moreMusic:(id)sender {
+    if (self.callback) {
+        self.callback();
+    }
+}
+
++ (CGFloat)getViewHeight {
+    return 384.0f;
+}
+
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 111 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/View/HomeRecommendMusic/HomeRecommendMusicView.xib

@@ -0,0 +1,111 @@
+<?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="HomeRecommendMusicView">
+            <rect key="frame" x="0.0" y="0.0" width="390" height="308"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="gSD-Yz-KRC">
+                    <rect key="frame" x="331" y="32" width="45" height="18"/>
+                    <color key="backgroundColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="0.10000000000000001" colorSpace="calibratedRGB"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="18" id="kBH-qS-EqY"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="9"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                </view>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="推荐曲目" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4Gb-9V-Vs2">
+                    <rect key="frame" x="24" y="30" width="73.666666666666671" height="22"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="22" id="j7f-c1-B4o"/>
+                    </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="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <button opaque="NO" tag="1008" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="0Ql-Fk-cYb">
+                    <rect key="frame" x="337" y="26" width="34" height="30"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="30" id="t0v-AC-yCX"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
+                    <state key="normal">
+                        <color key="titleColor" red="0.46666666670000001" green="0.46666666670000001" blue="0.46666666670000001" alpha="0.84705882349999995" colorSpace="calibratedRGB"/>
+                    </state>
+                    <connections>
+                        <action selector="moreMusic:" destination="iN0-l3-epB" eventType="touchUpInside" id="nbh-dJ-kNs"/>
+                    </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="Mli-0b-3pS">
+                    <rect key="frame" x="337" y="33.666666666666664" width="25" height="14.666666666666664"/>
+                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                    <color key="textColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_more_green" translatesAutoresizingMaskIntoConstraints="NO" id="IEk-2m-N7I">
+                    <rect key="frame" x="365" y="37" width="6" height="8"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="6" id="byI-Z3-gT0"/>
+                        <constraint firstAttribute="height" constant="8" id="qoy-h5-4Bu"/>
+                    </constraints>
+                </imageView>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_left" translatesAutoresizingMaskIntoConstraints="NO" id="Te8-hi-wDF">
+                    <rect key="frame" x="14" y="32" width="4" height="18"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="18" id="0nb-Nj-2lG"/>
+                        <constraint firstAttribute="width" constant="4" id="g6O-Mb-yas"/>
+                    </constraints>
+                </imageView>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="sOs-N5-Dh3">
+                    <rect key="frame" x="0.0" y="68" width="390" height="320"/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="320" id="J92-zM-Vmh"/>
+                    </constraints>
+                </view>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstItem="Mli-0b-3pS" firstAttribute="leading" secondItem="0Ql-Fk-cYb" secondAttribute="leading" id="6pf-y6-Wao"/>
+                <constraint firstItem="Mli-0b-3pS" firstAttribute="centerY" secondItem="4Gb-9V-Vs2" secondAttribute="centerY" id="7BW-Dc-nmW"/>
+                <constraint firstItem="gSD-Yz-KRC" firstAttribute="centerY" secondItem="Mli-0b-3pS" secondAttribute="centerY" id="837-8X-pmv"/>
+                <constraint firstItem="Te8-hi-wDF" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="8cI-bD-Tsc"/>
+                <constraint firstItem="IEk-2m-N7I" firstAttribute="leading" secondItem="Mli-0b-3pS" secondAttribute="trailing" constant="3" id="9Qa-kh-8Ez"/>
+                <constraint firstItem="IEk-2m-N7I" firstAttribute="trailing" secondItem="gSD-Yz-KRC" secondAttribute="trailing" constant="-5" id="AKW-PK-EIG"/>
+                <constraint firstItem="4Gb-9V-Vs2" firstAttribute="leading" secondItem="Te8-hi-wDF" secondAttribute="trailing" constant="6" id="EPn-Mj-O3D"/>
+                <constraint firstAttribute="trailing" secondItem="gSD-Yz-KRC" secondAttribute="trailing" constant="14" id="JMj-P1-q8L"/>
+                <constraint firstItem="4Gb-9V-Vs2" firstAttribute="centerY" secondItem="Te8-hi-wDF" secondAttribute="centerY" id="Pj3-mD-xum"/>
+                <constraint firstItem="4Gb-9V-Vs2" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" constant="30" id="Pt2-sD-VP8"/>
+                <constraint firstItem="IEk-2m-N7I" firstAttribute="centerY" secondItem="4Gb-9V-Vs2" secondAttribute="centerY" id="TpR-es-wzb"/>
+                <constraint firstItem="Mli-0b-3pS" firstAttribute="leading" secondItem="gSD-Yz-KRC" secondAttribute="leading" constant="6" id="VFz-yi-c52"/>
+                <constraint firstItem="sOs-N5-Dh3" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="Yn3-lz-qgY"/>
+                <constraint firstAttribute="trailing" secondItem="sOs-N5-Dh3" secondAttribute="trailing" id="ZKj-Zg-Isk"/>
+                <constraint firstItem="IEk-2m-N7I" firstAttribute="trailing" secondItem="0Ql-Fk-cYb" secondAttribute="trailing" id="crv-Dd-v7v"/>
+                <constraint firstItem="0Ql-Fk-cYb" firstAttribute="centerY" secondItem="4Gb-9V-Vs2" secondAttribute="centerY" id="goy-VI-GLl"/>
+                <constraint firstItem="sOs-N5-Dh3" firstAttribute="top" secondItem="0Ql-Fk-cYb" secondAttribute="bottom" constant="12" id="ljt-Ui-TI9"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="musicContentView" destination="sOs-N5-Dh3" id="ara-7Z-J8V"/>
+            </connections>
+            <point key="canvasLocation" x="101.53846153846153" y="-82.464454976303315"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="home_left" width="4" height="18"/>
+        <image name="home_more_green" width="5" height="8"/>
+    </resources>
+</document>