Przeglądaj źródła

我的主页其他课程类型

Steven 8 miesięcy temu
rodzic
commit
9240b3ca63
59 zmienionych plików z 2167 dodań i 349 usunięć
  1. 91 1
      KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj
  2. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/mine_arrow_down_grey.imageset/Contents.json
  3. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/mine_arrow_down_grey.imageset/mine_arrow_down_grey@2x.png
  4. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/mine_arrow_down_grey.imageset/mine_arrow_down_grey@3x.png
  5. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/fansGroup_alert_top.imageset/Contents.json
  6. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/fansGroup_alert_top.imageset/fansGroup_alert_top@2x.png
  7. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/fansGroup_alert_top.imageset/fansGroup_alert_top@3x.png
  8. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/minePage_search_green.imageset/Contents.json
  9. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/minePage_search_green.imageset/minePage_search_green@2x.png
  10. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/minePage_search_green.imageset/minePage_search_green@3x.png
  11. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_info_create_LiveCourse.imageset/Contents.json
  12. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_info_create_LiveCourse.imageset/mine_info_create_LiveCourse@2x.png
  13. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_info_create_LiveCourse.imageset/mine_info_create_LiveCourse@3x.png
  14. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_info_create_video.imageset/Contents.json
  15. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_info_create_video.imageset/mine_info_create_video@2x.png
  16. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_info_create_video.imageset/mine_info_create_video@3x.png
  17. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_info_upload_music.imageset/Contents.json
  18. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_info_upload_music.imageset/mine_info_upload_music@2x.png
  19. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_info_upload_music.imageset/mine_info_upload_music@3x.png
  20. 14 14
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/BankCard/View/KSConfirmAlertView.xib
  21. 11 39
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/Controller/MinePageViewController.m
  22. 2 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/Controller/MineVipProgramViewController.h
  23. 22 91
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/Controller/MineVipProgramViewController.m
  24. 2 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/AccompanyCourse/MinePageAccompanyCourseView.h
  25. 18 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/AccompanyCourse/MinePageAccompanyCourseView.m
  26. 16 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/FansGroupAlert/FansGroupAlertView.h
  27. 20 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/FansGroupAlert/FansGroupAlertView.m
  28. 46 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/FansGroupAlert/FansGroupAlertView.xib
  29. 1 12
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/HeadView/MinePageHeadView.xib
  30. 32 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineMusic/MinePageMusicSortView.h
  31. 74 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineMusic/MinePageMusicSortView.m
  32. 154 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineMusic/MinePageMusicSortView.xib
  33. 18 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineMusic/MinePageMusicView.h
  34. 383 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineMusic/MinePageMusicView.m
  35. 1 11
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageCourseView.m
  36. 16 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageLiveCourse/MinePageLiveCourseGroupCell.h
  37. 26 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageLiveCourse/MinePageLiveCourseGroupCell.m
  38. 69 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageLiveCourse/MinePageLiveCourseGroupCell.xib
  39. 24 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageLiveCourse/MinePageLiveCourseView.h
  40. 24 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageLiveCourse/MinePageLiveCourseView.m
  41. 1 8
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageMusicCell.h
  42. 6 37
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageMusicCell.m
  43. 36 22
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageMusicCell.xib
  44. 6 6
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageTipsView/MineCourseSettingView.m
  45. 16 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineVideoCourse/MinePageVideoCourseView.h
  46. 366 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineVideoCourse/MinePageVideoCourseView.m
  47. 20 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineVideoCourse/MinePageVideoGroupCell.h
  48. 88 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineVideoCourse/MinePageVideoGroupCell.m
  49. 236 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineVideoCourse/MinePageVideoGroupCell.xib
  50. 3 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VIPProgramCreate/MineVipProgramMainView.h
  51. 118 11
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VIPProgramCreate/MineVipProgramMainView.m
  52. 47 60
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VIPProgramCreate/MineVipProgramMainView.xib
  53. 3 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VIPProgramCreate/MineVipProgramNavView.h
  54. 7 6
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VIPProgramCreate/MineVipProgramNavView.m
  55. 7 27
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VIPProgramCreate/MineVipProgramNavView.xib
  56. 1 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VIPProgramCreate/ProgramAddButton.h
  57. 3 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VIPProgramCreate/ProgramAddButton.m
  58. 6 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VIPProgramCreate/ProgramAddButton.xib
  59. 1 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VipCourse/MinePageVIPCourseView.m

+ 91 - 1
KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj

@@ -422,6 +422,9 @@
 		BC28886D2A8101310064B773 /* KSSearchResultListController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2888682A8101300064B773 /* KSSearchResultListController.m */; };
 		BC28886E2A8101310064B773 /* KSSearchViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC28886A2A8101310064B773 /* KSSearchViewController.m */; };
 		BC29AD2C2BFAFAFA00D44848 /* KSLogManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BC29AD2A2BFAFAFA00D44848 /* KSLogManager.m */; };
+		BC2B716D2CEB135600A90AFF /* MinePageMusicView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2B716C2CEB135600A90AFF /* MinePageMusicView.m */; };
+		BC2B71702CEB158400A90AFF /* MinePageMusicSortView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC2B716F2CEB158400A90AFF /* MinePageMusicSortView.m */; };
+		BC2B71722CEB158B00A90AFF /* MinePageMusicSortView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC2B71712CEB158B00A90AFF /* MinePageMusicSortView.xib */; };
 		BC319C582CE7318800E1AF50 /* MineVipProgramHeadView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC319C572CE7318800E1AF50 /* MineVipProgramHeadView.m */; };
 		BC319C5A2CE7318E00E1AF50 /* MineVipProgramHeadView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC319C592CE7318E00E1AF50 /* MineVipProgramHeadView.xib */; };
 		BC319C5D2CE7412500E1AF50 /* MineVipProgramMainView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC319C5C2CE7412500E1AF50 /* MineVipProgramMainView.m */; };
@@ -891,6 +894,14 @@
 		BCA9CE5127FD954800D558C6 /* AccompanyRemarkCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCA9CE4F27FD954800D558C6 /* AccompanyRemarkCell.xib */; };
 		BCAD01C02872F54F0002CC40 /* LiveVideoListView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCAD01BF2872F54F0002CC40 /* LiveVideoListView.m */; };
 		BCAD01C22872F5560002CC40 /* LiveVideoListView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCAD01C12872F5560002CC40 /* LiveVideoListView.xib */; };
+		BCAF36EE2CEAE3E8009434AD /* FansGroupAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCAF36ED2CEAE3E8009434AD /* FansGroupAlertView.m */; };
+		BCAF36F02CEAE3EF009434AD /* FansGroupAlertView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCAF36EF2CEAE3EF009434AD /* FansGroupAlertView.xib */; };
+		BCAF36F42CEAE57B009434AD /* MinePageLiveCourseView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCAF36F32CEAE57B009434AD /* MinePageLiveCourseView.m */; };
+		BCAF36F82CEAE5F0009434AD /* MinePageVideoCourseView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCAF36F72CEAE5F0009434AD /* MinePageVideoCourseView.m */; };
+		BCAF36FC2CEAE6E9009434AD /* MinePageLiveCourseGroupCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BCAF36FA2CEAE6E9009434AD /* MinePageLiveCourseGroupCell.m */; };
+		BCAF36FD2CEAE6E9009434AD /* MinePageLiveCourseGroupCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCAF36FB2CEAE6E9009434AD /* MinePageLiveCourseGroupCell.xib */; };
+		BCAF37012CEAEA21009434AD /* MinePageVideoGroupCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BCAF36FF2CEAEA21009434AD /* MinePageVideoGroupCell.m */; };
+		BCAF37022CEAEA21009434AD /* MinePageVideoGroupCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCAF37002CEAEA21009434AD /* MinePageVideoGroupCell.xib */; };
 		BCB14112288A49710022C13A /* HomeButtonView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCB14110288A49710022C13A /* HomeButtonView.xib */; };
 		BCB14113288A49710022C13A /* HomeButtonView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCB14111288A49710022C13A /* HomeButtonView.m */; };
 		BCB399AC27F946A200AFF376 /* CourseNavView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCB399AB27F946A200AFF376 /* CourseNavView.m */; };
@@ -1895,6 +1906,11 @@
 		BC28886B2A8101310064B773 /* KSSearchViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSSearchViewController.h; sourceTree = "<group>"; };
 		BC29AD292BFAFAFA00D44848 /* KSLogManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSLogManager.h; sourceTree = "<group>"; };
 		BC29AD2A2BFAFAFA00D44848 /* KSLogManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSLogManager.m; sourceTree = "<group>"; };
+		BC2B716B2CEB135600A90AFF /* MinePageMusicView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MinePageMusicView.h; sourceTree = "<group>"; };
+		BC2B716C2CEB135600A90AFF /* MinePageMusicView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MinePageMusicView.m; sourceTree = "<group>"; };
+		BC2B716E2CEB158400A90AFF /* MinePageMusicSortView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MinePageMusicSortView.h; sourceTree = "<group>"; };
+		BC2B716F2CEB158400A90AFF /* MinePageMusicSortView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MinePageMusicSortView.m; sourceTree = "<group>"; };
+		BC2B71712CEB158B00A90AFF /* MinePageMusicSortView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MinePageMusicSortView.xib; sourceTree = "<group>"; };
 		BC319C562CE7318800E1AF50 /* MineVipProgramHeadView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MineVipProgramHeadView.h; sourceTree = "<group>"; };
 		BC319C572CE7318800E1AF50 /* MineVipProgramHeadView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MineVipProgramHeadView.m; sourceTree = "<group>"; };
 		BC319C592CE7318E00E1AF50 /* MineVipProgramHeadView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MineVipProgramHeadView.xib; sourceTree = "<group>"; };
@@ -2631,6 +2647,19 @@
 		BCAD01BE2872F54F0002CC40 /* LiveVideoListView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LiveVideoListView.h; sourceTree = "<group>"; };
 		BCAD01BF2872F54F0002CC40 /* LiveVideoListView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LiveVideoListView.m; sourceTree = "<group>"; };
 		BCAD01C12872F5560002CC40 /* LiveVideoListView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = LiveVideoListView.xib; sourceTree = "<group>"; };
+		BCAF36EC2CEAE3E8009434AD /* FansGroupAlertView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FansGroupAlertView.h; sourceTree = "<group>"; };
+		BCAF36ED2CEAE3E8009434AD /* FansGroupAlertView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FansGroupAlertView.m; sourceTree = "<group>"; };
+		BCAF36EF2CEAE3EF009434AD /* FansGroupAlertView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FansGroupAlertView.xib; sourceTree = "<group>"; };
+		BCAF36F22CEAE57B009434AD /* MinePageLiveCourseView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MinePageLiveCourseView.h; sourceTree = "<group>"; };
+		BCAF36F32CEAE57B009434AD /* MinePageLiveCourseView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MinePageLiveCourseView.m; sourceTree = "<group>"; };
+		BCAF36F62CEAE5F0009434AD /* MinePageVideoCourseView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MinePageVideoCourseView.h; sourceTree = "<group>"; };
+		BCAF36F72CEAE5F0009434AD /* MinePageVideoCourseView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MinePageVideoCourseView.m; sourceTree = "<group>"; };
+		BCAF36F92CEAE6E9009434AD /* MinePageLiveCourseGroupCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MinePageLiveCourseGroupCell.h; sourceTree = "<group>"; };
+		BCAF36FA2CEAE6E9009434AD /* MinePageLiveCourseGroupCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MinePageLiveCourseGroupCell.m; sourceTree = "<group>"; };
+		BCAF36FB2CEAE6E9009434AD /* MinePageLiveCourseGroupCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MinePageLiveCourseGroupCell.xib; sourceTree = "<group>"; };
+		BCAF36FE2CEAEA21009434AD /* MinePageVideoGroupCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MinePageVideoGroupCell.h; sourceTree = "<group>"; };
+		BCAF36FF2CEAEA21009434AD /* MinePageVideoGroupCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MinePageVideoGroupCell.m; sourceTree = "<group>"; };
+		BCAF37002CEAEA21009434AD /* MinePageVideoGroupCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MinePageVideoGroupCell.xib; sourceTree = "<group>"; };
 		BCB1410F288A49710022C13A /* HomeButtonView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeButtonView.h; sourceTree = "<group>"; };
 		BCB14110288A49710022C13A /* HomeButtonView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HomeButtonView.xib; sourceTree = "<group>"; };
 		BCB14111288A49710022C13A /* HomeButtonView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeButtonView.m; sourceTree = "<group>"; };
@@ -3294,9 +3323,13 @@
 		275FA55C27F31A7400EB6240 /* View */ = {
 			isa = PBXGroup;
 			children = (
+				BCAF36EB2CEAE3D7009434AD /* FansGroupAlert */,
 				BC4766252CE72ED8002574E5 /* VIPProgramCreate */,
-				BC4766192CE72150002574E5 /* AccompanyCourse */,
 				BC433E5D2CE6F7D8002870EC /* VipCourse */,
+				BC4766192CE72150002574E5 /* AccompanyCourse */,
+				BCAF36F12CEAE54E009434AD /* MinePageLiveCourse */,
+				BCAF36F52CEAE5CD009434AD /* MineVideoCourse */,
+				BC2B716A2CEB133800A90AFF /* MineMusic */,
 				BC433E512CE6E4E1002870EC /* GradientLine */,
 				BCFB9BA82CE58E6D00B66BC0 /* MinePageTipsView */,
 				BC221FB128C82EF400F99802 /* MinePageSort */,
@@ -4998,6 +5031,18 @@
 			path = LogManager;
 			sourceTree = "<group>";
 		};
+		BC2B716A2CEB133800A90AFF /* MineMusic */ = {
+			isa = PBXGroup;
+			children = (
+				BC2B716B2CEB135600A90AFF /* MinePageMusicView.h */,
+				BC2B716C2CEB135600A90AFF /* MinePageMusicView.m */,
+				BC2B716E2CEB158400A90AFF /* MinePageMusicSortView.h */,
+				BC2B716F2CEB158400A90AFF /* MinePageMusicSortView.m */,
+				BC2B71712CEB158B00A90AFF /* MinePageMusicSortView.xib */,
+			);
+			path = MineMusic;
+			sourceTree = "<group>";
+		};
 		BC31BF342B219C5700F7D538 /* Widget */ = {
 			isa = PBXGroup;
 			children = (
@@ -6796,6 +6841,40 @@
 			path = View;
 			sourceTree = "<group>";
 		};
+		BCAF36EB2CEAE3D7009434AD /* FansGroupAlert */ = {
+			isa = PBXGroup;
+			children = (
+				BCAF36EC2CEAE3E8009434AD /* FansGroupAlertView.h */,
+				BCAF36ED2CEAE3E8009434AD /* FansGroupAlertView.m */,
+				BCAF36EF2CEAE3EF009434AD /* FansGroupAlertView.xib */,
+			);
+			path = FansGroupAlert;
+			sourceTree = "<group>";
+		};
+		BCAF36F12CEAE54E009434AD /* MinePageLiveCourse */ = {
+			isa = PBXGroup;
+			children = (
+				BCAF36F22CEAE57B009434AD /* MinePageLiveCourseView.h */,
+				BCAF36F32CEAE57B009434AD /* MinePageLiveCourseView.m */,
+				BCAF36F92CEAE6E9009434AD /* MinePageLiveCourseGroupCell.h */,
+				BCAF36FA2CEAE6E9009434AD /* MinePageLiveCourseGroupCell.m */,
+				BCAF36FB2CEAE6E9009434AD /* MinePageLiveCourseGroupCell.xib */,
+			);
+			path = MinePageLiveCourse;
+			sourceTree = "<group>";
+		};
+		BCAF36F52CEAE5CD009434AD /* MineVideoCourse */ = {
+			isa = PBXGroup;
+			children = (
+				BCAF36F62CEAE5F0009434AD /* MinePageVideoCourseView.h */,
+				BCAF36F72CEAE5F0009434AD /* MinePageVideoCourseView.m */,
+				BCAF36FE2CEAEA21009434AD /* MinePageVideoGroupCell.h */,
+				BCAF36FF2CEAEA21009434AD /* MinePageVideoGroupCell.m */,
+				BCAF37002CEAEA21009434AD /* MinePageVideoGroupCell.xib */,
+			);
+			path = MineVideoCourse;
+			sourceTree = "<group>";
+		};
 		BCB633DF27F6A18100ACFDCF /* TipsView */ = {
 			isa = PBXGroup;
 			children = (
@@ -7593,6 +7672,7 @@
 				BCC5840628A9FA8100BAB4CF /* cloud_animation_13.png in Resources */,
 				BCC0F6F42A8CF11700C4EFA4 /* TXClassRoomAlertView.xib in Resources */,
 				BC71DEF62A89F470003F165E /* TXChatAreaTopView.xib in Resources */,
+				BCAF37022CEAEA21009434AD /* MinePageVideoGroupCell.xib in Resources */,
 				BC71D292288811BF0010F14B /* tabbar1.json in Resources */,
 				BCE6A0A027F84E4500C97704 /* MineIntroduceCell.xib in Resources */,
 				2728086C27E6C12900DB71EA /* FirstSettingBodyView.xib in Resources */,
@@ -7664,6 +7744,7 @@
 				BCC408E92AFCE11900C60249 /* MusicPublistAlert.xib in Resources */,
 				BC9EFEB42C0480A500CFA7B1 /* GroupBanBottomView.xib in Resources */,
 				2780C92927E490CA00A95A4F /* VefiBodyView.xib in Resources */,
+				BC2B71722CEB158B00A90AFF /* MinePageMusicSortView.xib in Resources */,
 				BCFB9BAD2CE58E9900B66BC0 /* MinePageCourseTipsView.xib in Resources */,
 				BCC5840828A9FA8100BAB4CF /* cloud_animation_10.png in Resources */,
 				BCA9CE4427FD947C00D558C6 /* AccompanyArrangeCell.xib in Resources */,
@@ -7847,6 +7928,7 @@
 				BC106BA62A8F45AA000759A9 /* TXLiveDownSeatView.xib in Resources */,
 				BC1263A528FF98BB00509E90 /* HomeNewMusicView.xib in Resources */,
 				BCE6A08727F81B4D00C97704 /* MinePageSubmitView.xib in Resources */,
+				BCAF36FD2CEAE6E9009434AD /* MinePageLiveCourseGroupCell.xib in Resources */,
 				BC71DF0D2A89F470003F165E /* NewTXMetronomeAlertView.xib in Resources */,
 				BC31BF902B219C5700F7D538 /* TunerSettingView.xib in Resources */,
 				BC14A60F28A0AAE80086395C /* MineFunctionView.xib in Resources */,
@@ -7860,6 +7942,7 @@
 				BCC5840B28A9FA8100BAB4CF /* cloud_animation_7.png in Resources */,
 				BCC03F9F280579A500461B7C /* MyLiveCourseCell.xib in Resources */,
 				BCC583FF28A9FA8100BAB4CF /* cloud_animation_18.png in Resources */,
+				BCAF36F02CEAE3EF009434AD /* FansGroupAlertView.xib in Resources */,
 				BCC583F628A9FA8100BAB4CF /* cloud_animation_20.png in Resources */,
 				BC71DF022A89F470003F165E /* MainDisplayView.xib in Resources */,
 				BC221FB628C82F0C00F99802 /* MinePageSortView.xib in Resources */,
@@ -8143,6 +8226,7 @@
 				2755C07427EC905E007D9070 /* GroupMemberModel.m in Sources */,
 				BCECE2252B3D648700C0D555 /* CourseFileDisplayView.m in Sources */,
 				BC31BF872B219C5700F7D538 /* KSMetronomePlayer.m in Sources */,
+				BCAF37012CEAEA21009434AD /* MinePageVideoGroupCell.m in Sources */,
 				BCC9F44627F69BD200647449 /* RoomMember.m in Sources */,
 				2780C92727E490BD00A95A4F /* VefiBodyView.m in Sources */,
 				BC15535A2AB33AFD00C1C347 /* TenantCreateStuView.m in Sources */,
@@ -8380,12 +8464,14 @@
 				2779361E27E3338E0010E277 /* KSUpdateManager.m in Sources */,
 				BCC9F42827F69BD200647449 /* WhiteUtils.m in Sources */,
 				BC106BB42A8F4BC9000759A9 /* LiveModuleService.m in Sources */,
+				BCAF36EE2CEAE3E8009434AD /* FansGroupAlertView.m in Sources */,
 				BCDF822F2A8A3176005F8B82 /* KSValuePopView.m in Sources */,
 				BCEA75262819103300886A86 /* UnbindBodyView.m in Sources */,
 				BC9EFE962C04804200CFA7B1 /* KSMuteTipsView.m in Sources */,
 				BC542E4328407AD200633781 /* UserSettingViewController.m in Sources */,
 				BCB14113288A49710022C13A /* HomeButtonView.m in Sources */,
 				BC9EFEB52C0480A500CFA7B1 /* GroupBanNavView.m in Sources */,
+				BCAF36F82CEAE5F0009434AD /* MinePageVideoCourseView.m in Sources */,
 				2779360C27E32BE50010E277 /* LoginViewController.m in Sources */,
 				BC84183A2AC2D83700D8F90E /* NewPwdModifyViewController.m in Sources */,
 				27F9CB0E27EC5DF5003E0FE4 /* KSRCloudMediaManager.m in Sources */,
@@ -8397,6 +8483,7 @@
 				BCF425ED2AB975D200BCD942 /* TenantMineHeadView.m in Sources */,
 				27FC2F6D27F1BE4800FCC239 /* VideoCourseViewController.m in Sources */,
 				BC161CE72AE0FD590071530A /* TenantGroupSortView.m in Sources */,
+				BC2B716D2CEB135600A90AFF /* MinePageMusicView.m in Sources */,
 				2779321227E30FC30010E277 /* YKNodeModel.m in Sources */,
 				BC31BF8A2B219C5700F7D538 /* KSGaugeColorView.m in Sources */,
 				BCFB9B972CE4903800B66BC0 /* MusicRoomGroupViewController.m in Sources */,
@@ -8527,6 +8614,7 @@
 				2779326E27E30FD80010E277 /* FSCalendarCalculator.m in Sources */,
 				BC9AA0C82ABC3C7B00CD954D /* KSPhotoChooseView.m in Sources */,
 				BCDF821F2A8A2F36005F8B82 /* KSSliderView.m in Sources */,
+				BC2B71702CEB158400A90AFF /* MinePageMusicSortView.m in Sources */,
 				BCB9FA6B2872D57E005D766B /* LiveListModel.m in Sources */,
 				BCFB9B8D2CE48D3A00B66BC0 /* VipCouseInfoCell.m in Sources */,
 				BC9AA0D52ABC430B00CD954D /* KSCustomLoadingView.m in Sources */,
@@ -8596,6 +8684,7 @@
 				BCA353ED2859B4EC00377661 /* MusicRoomHomeworkStudentController.m in Sources */,
 				BC6BEAA4288A4C2A00022109 /* KSHomeButton.m in Sources */,
 				27A2F63027E70E57009E2380 /* UserInfo.m in Sources */,
+				BCAF36F42CEAE57B009434AD /* MinePageLiveCourseView.m in Sources */,
 				BCEA751A2818D59300886A86 /* BankNameModel.m in Sources */,
 				BC38C48F2AFA20AB00ABFCC2 /* KSNewGifRefreshFooter.m in Sources */,
 				BC02BCE428B324C9005CB483 /* LiveApplyControlView.m in Sources */,
@@ -8613,6 +8702,7 @@
 				BC71DF1C2A89F470003F165E /* IACircleSliderThumbLayer.m in Sources */,
 				BC31BF912B219C5700F7D538 /* TunerSettingView.m in Sources */,
 				2779320927E30FC30010E277 /* KSRecordPowerAnimationView.m in Sources */,
+				BCAF36FC2CEAE6E9009434AD /* MinePageLiveCourseGroupCell.m in Sources */,
 				BC106C552A9365DE000759A9 /* ClassMemberEmptyView.m in Sources */,
 				BC02BCE628B324C9005CB483 /* LiveDownSeatView.m in Sources */,
 				27BC3B3327F2FD2D00D81E30 /* VideoListBodyView.m in Sources */,

+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/mine_arrow_down_grey.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/mine_arrow_down_grey.imageset/mine_arrow_down_grey@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/mine_arrow_down_grey.imageset/mine_arrow_down_grey@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/fansGroup_alert_top.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/fansGroup_alert_top.imageset/fansGroup_alert_top@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/fansGroup_alert_top.imageset/fansGroup_alert_top@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/minePage_search_green.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/minePage_search_green.imageset/minePage_search_green@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/minePage_search_green.imageset/minePage_search_green@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_info_create_LiveCourse.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_info_create_LiveCourse.imageset/mine_info_create_LiveCourse@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_info_create_LiveCourse.imageset/mine_info_create_LiveCourse@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_info_create_video.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_info_create_video.imageset/mine_info_create_video@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_info_create_video.imageset/mine_info_create_video@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_info_upload_music.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_info_upload_music.imageset/mine_info_upload_music@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/mine_info_upload_music.imageset/mine_info_upload_music@3x.png


+ 14 - 14
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/BankCard/View/KSConfirmAlertView.xib

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22155" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" 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="22131"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
         <capability name="System colors in document resources" minToolsVersion="11.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
@@ -15,7 +15,7 @@
             <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
             <subviews>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="o0i-hr-vBK">
-                    <rect key="frame" x="52" y="355.5" width="310" height="185.5"/>
+                    <rect key="frame" x="52" y="353" width="310" height="190.5"/>
                     <subviews>
                         <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="accell_left" translatesAutoresizingMaskIntoConstraints="NO" id="MxM-wt-Gha">
                             <rect key="frame" x="18" y="25" width="4" height="14"/>
@@ -25,23 +25,23 @@
                             </constraints>
                         </imageView>
                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="解绑银行卡" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="wNN-c7-gwa">
-                            <rect key="frame" x="29" y="17" width="92" height="30"/>
+                            <rect key="frame" x="29" y="17" width="84.5" height="30"/>
                             <constraints>
                                 <constraint firstAttribute="height" constant="30" id="X8Y-43-Gzf"/>
                             </constraints>
-                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
-                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="17"/>
+                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                             <nil key="highlightedColor"/>
                         </label>
                         <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="rUR-gG-b2o">
-                            <rect key="frame" x="13" y="124.5" width="139.5" height="44"/>
+                            <rect key="frame" x="13" y="129.5" width="139.5" height="44"/>
                             <constraints>
                                 <constraint firstAttribute="height" constant="44" id="lU8-6N-QFC"/>
                             </constraints>
                             <fontDescription key="fontDescription" type="system" pointSize="16"/>
                             <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                             <state key="normal" title="取消">
-                                <color key="titleColor" red="0.1764705882352941" green="0.7803921568627451" blue="0.66666666666666663" alpha="1" colorSpace="calibratedRGB"/>
+                                <color key="titleColor" red="0.1764705882352941" green="0.7803921568627451" blue="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                             </state>
                             <userDefinedRuntimeAttributes>
                                 <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
@@ -51,7 +51,7 @@
                                     <real key="value" value="1"/>
                                 </userDefinedRuntimeAttribute>
                                 <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
-                                    <color key="value" red="0.1764705882352941" green="0.7803921568627451" blue="0.66666666666666663" alpha="1" colorSpace="calibratedRGB"/>
+                                    <color key="value" red="0.1764705882352941" green="0.7803921568627451" blue="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                 </userDefinedRuntimeAttribute>
                             </userDefinedRuntimeAttributes>
                             <connections>
@@ -59,8 +59,8 @@
                             </connections>
                         </button>
                         <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="QEw-9N-XM6">
-                            <rect key="frame" x="157.5" y="124.5" width="139.5" height="44"/>
-                            <color key="backgroundColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="calibratedRGB"/>
+                            <rect key="frame" x="157.5" y="129.5" width="139.5" height="44"/>
+                            <color key="backgroundColor" red="0.1764705882352941" green="0.7803921568627451" blue="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                             <constraints>
                                 <constraint firstAttribute="height" constant="44" id="CC0-XV-4Ze"/>
                             </constraints>
@@ -77,9 +77,9 @@
                             </connections>
                         </button>
                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="解绑后将无法将收入结算,请确认是否继续解绑" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dpE-gf-YK1">
-                            <rect key="frame" x="19" y="67" width="277" height="33.5"/>
-                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
-                            <color key="textColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="1" colorSpace="calibratedRGB"/>
+                            <rect key="frame" x="19" y="67" width="277" height="38.5"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                            <color key="textColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                             <nil key="highlightedColor"/>
                         </label>
                     </subviews>

+ 11 - 39
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/Controller/MinePageViewController.m

@@ -19,6 +19,8 @@
 #import "MyStyleViewController.h"
 #import "JXCategoryIndicatorGradientLineView.h"
 #import "MinePageAccompanyCourseView.h"
+#import "MinePageVideoCourseView.h"
+#import "MinePageMusicView.h"
 
 #define HEADER_HEIGHT (50)
 
@@ -83,7 +85,7 @@
     self.categoryView.indicators = @[lineView];
     
     _pagerView = [self preferredPagingView];
-    self.pagerView.frame = CGRectMake(0, topHeight, KPortraitWidth, KPortraitHeight - iPhoneXSafeBottomMargin - topHeight);
+    self.pagerView.frame = CGRectMake(0, topHeight, KPortraitWidth, KPortraitHeight - topHeight);
     self.pagerView.mainTableView.gestureDelegate = self;
     self.pagerView.backgroundColor = [UIColor clearColor];
     self.pagerView.mainTableView.backgroundColor = [UIColor clearColor];
@@ -137,20 +139,8 @@
     [self requestSubjectList];
     if (self.listViewArray.count > self.categoryView.selectedIndex) {
         id value = self.listViewArray[self.categoryView.selectedIndex];
-        if ([value isKindOfClass:[MinePageCourseView class]]) {
-            MinePageCourseView *listView = (MinePageCourseView *)value;
-            [listView beginFirstRefresh];
-        }
-        else if ([value isKindOfClass:[MinePageAccompanyCourseView class]]) {
-            MinePageAccompanyCourseView *listView = (MinePageAccompanyCourseView *)value;
-            [listView beginFirstRefresh];
-        }
-        else if ([value isKindOfClass:[MinePageVIPCourseView class]]) {
-            MinePageVIPCourseView *listView = (MinePageVIPCourseView *)value;
-            [listView beginFirstRefresh];
-        }
-        else if ([value isKindOfClass:[kSJXCollectionView class]]) {
-            MinePageVideoView *listView = (MinePageVideoView *)value;
+        if ([value isKindOfClass:[KSJXBodyView class]]) {
+            KSJXBodyView *listView = (KSJXBodyView *)value;
             [listView beginFirstRefresh];
         }
     }
@@ -243,12 +233,6 @@
         [self.listViewArray replaceObjectAtIndex:index withObject:listView];
         self.listViewArray[index] = listView;
         listView.selectIndex = index;
-//        if (self.teacherInfo) {
-//            listView.teaherStatus = self.teacherInfo.entryStatus;
-//        }
-//        else {
-//            listView.teaherStatus = @"PASS";
-//        }
         [listView beginFirstRefresh];
         return listView;
     }
@@ -269,35 +253,23 @@
         [listView beginFirstRefresh];
         return listView;
     }
-    else if (index == 4) { // 乐谱
-        MinePageCourseView *listView = [[MinePageCourseView alloc] init];
+    else if (index == 3) { // 视频课
+        MinePageVideoCourseView *listView = [[MinePageVideoCourseView alloc] init];
         listView.naviController = self.navigationController;
         [self.listViewArray replaceObjectAtIndex:index withObject:listView];
         self.listViewArray[index] = listView;
         listView.selectIndex = index;
-        if (self.teacherInfo) {
-            listView.teaherStatus = self.teacherInfo.entryStatus;
-        }
-        else {
-            listView.teaherStatus = @"PASS";
-        }
-        if (self.subjectList) {
-            listView.subjectList = [self.subjectList mutableCopy];
-        }
         [listView beginFirstRefresh];
         return listView;
     }
-    else { // 视频课
-        MinePageVideoView *listView = [[MinePageVideoView alloc] init];
+    else { // 乐谱
+        MinePageMusicView *listView = [[MinePageMusicView alloc] init];
         listView.naviController = self.navigationController;
         [self.listViewArray replaceObjectAtIndex:index withObject:listView];
         self.listViewArray[index] = listView;
         listView.selectIndex = index;
-        if (self.teacherInfo) {
-            listView.teaherStatus = self.teacherInfo.entryStatus;
-        }
-        else {
-            listView.teaherStatus = @"PASS";
+        if (self.subjectList) {
+            listView.subjectList = [self.subjectList mutableCopy];
         }
         [listView beginFirstRefresh];
         return listView;

+ 2 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/Controller/MineVipProgramViewController.h

@@ -11,6 +11,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 @interface MineVipProgramViewController : KSBaseViewController
 
+@property (nonatomic, assign) BOOL isVipProgram;
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 22 - 91
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/Controller/MineVipProgramViewController.m

@@ -7,16 +7,13 @@
 
 #import "MineVipProgramViewController.h"
 #import "MineVipProgramNavView.h"
-#import "MineVipProgramHeadView.h"
-#import "MinePageVipProgramCell.h"
+#import "MineVipProgramMainView.h"
 
-@interface MineVipProgramViewController ()<UITableViewDelegate, UITableViewDataSource>
+@interface MineVipProgramViewController ()
 
 @property (nonatomic, strong) MineVipProgramNavView *navView;
 
-@property (nonatomic, strong) MineVipProgramHeadView *addView;
-
-@property (nonatomic, strong) UITableView *tableView;
+@property (nonatomic, strong) MineVipProgramMainView *settingView;
 
 @end
 
@@ -27,127 +24,61 @@
     // Do any additional setup after loading the view.
     self.ks_prefersNavigationBarHidden = YES;
     [self configUI];
+    [self requestData];
 }
 
 - (void)configUI {
     
     CGFloat navHeight = [MineVipProgramNavView getViewHeight];
+    NSString *navTitle = @"设置趣纠课";
+    if (self.isVipProgram) {
+        navTitle = @"设置VIP定制课";
+    }
     [self.view addSubview:self.navView];
     [self.navView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.right.top.mas_equalTo(self.view);
         make.height.mas_equalTo(navHeight);
     }];
-    CGFloat addHeight = [MineVipProgramHeadView getViewHeight];
-    [self.view addSubview:self.addView];
-    [self.addView mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.left.right.mas_equalTo(self.view);
-        make.top.mas_equalTo(self.navView.mas_bottom);
-        make.height.mas_equalTo(addHeight);
-    }];
-    [self.view addSubview:self.tableView];
-    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+    [self.view addSubview:self.settingView];
+    [self.settingView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.right.bottom.mas_equalTo(self.view);
-        make.top.mas_equalTo(self.addView.mas_bottom);
-    }];
-    
-    MJWeakSelf;
-    self.tableView.mj_header = [KSGifRefreshHeader headerWithRefreshingBlock:^{
-        [weakSelf resetParamenter];
-        [weakSelf requestData];
-    }];
-    self.tableView.mj_footer = [KSGifRefreshFooter footerWithRefreshingBlock:^{
-        if (weakSelf.isLoadMore) {
-            weakSelf.pages += 1;
-            [weakSelf requestData];
-        }
-        else {
-            [weakSelf.tableView.mj_footer endRefreshingWithNoMoreData];
-        }
+        make.top.mas_equalTo(self.navView.mas_bottom);
     }];
 }
 
-- (void)viewWillAppear:(BOOL)animated {
-    [super viewWillAppear:animated];
-    [self requestData];
-}
 
-- (void)resetParamenter {
-    self.pages = 1;
-    self.isLoadMore = YES;
-    self.dataArray = [NSMutableArray array];
-    [self.tableView.mj_footer resetNoMoreData];
-    [self setPromptString:@"暂无内容" imageName:@"empty_course" inView:self.tableView];
-    [self.tableView reloadData];
-}
 
 - (void)requestData {
-    
+    [self.settingView configSubjectNameArray:@[@"长笛",@"口风琴",@"葫芦丝",@"长号"] subjectIds:@[@"1",@"2",@"3",@"4"] durationArray:@[@"25",@"45",@"60"] minPrice:200 maxPrice:500];
 }
 
 
-#pragma mark ----- table data source
-- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
-    return self.dataArray.count;
-}
-
-- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
-    MinePageVipProgramCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MinePageVipProgramCell"];
-    return cell;
-}
 
-#pragma mark ---- lazying
-
-- (UITableView *)tableView {
-    if (!_tableView) {
-        _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
-        _tableView.backgroundColor = [UIColor clearColor];
-        _tableView.showsVerticalScrollIndicator = NO;
-        _tableView.dataSource = self;
-        _tableView.delegate = self;
-        _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
-        _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
-        [_tableView registerNib:[UINib nibWithNibName:@"MinePageVipProgramCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"MinePageVipProgramCell"];
-        _tableView.rowHeight = 88.0f;
-    }
-    return _tableView;
-}
 
 - (MineVipProgramNavView *)navView {
     if (!_navView) {
         _navView = [MineVipProgramNavView sharedInstance];
         MJWeakSelf;
-        [_navView navActionCallback:^(BOOL isBack) {
-            [weakSelf navAction:isBack];
+        [_navView navActionCallback:^{
+            [weakSelf backAction];
         }];
     }
     return _navView;
 }
 
-- (void)navAction:(BOOL)isBack {
-    if (isBack) {
-        [self backAction];
-    }
-    else {
-        [self showTipsAlert];
-    }
-}
-
-- (void)showTipsAlert {
-    
-}
-
-- (MineVipProgramHeadView *)addView {
-    if (!_addView) {
-        _addView = [MineVipProgramHeadView sharedIntance];
+- (MineVipProgramMainView *)settingView {
+    if (!_settingView) {
+        _settingView = [MineVipProgramMainView sharedInstanace];
         MJWeakSelf;
-        [_addView addActionCallback:^{
-            [weakSelf addProgramAction];
+        [_settingView settingCallback:^(PROGRAM_SETTING type, NSString * _Nullable subjectId, NSString * _Nullable duration, NSString * _Nullable priceNum) {
+            [weakSelf submitProgram:type subjectId:subjectId duration:duration price:priceNum];
         }];
+        
     }
-    return _addView;
+    return _settingView;
 }
 
-- (void)addProgramAction {
+- (void)submitProgram:(PROGRAM_SETTING)type subjectId:(NSString *)subjectId duration:(NSString *)duration price:(NSString *)price {
     
 }
 

+ 2 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/AccompanyCourse/MinePageAccompanyCourseView.h

@@ -13,6 +13,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 @interface MinePageAccompanyCourseView : KSJXBodyView
 
+
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 18 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/AccompanyCourse/MinePageAccompanyCourseView.m

@@ -10,6 +10,7 @@
 #import "MinePageCourseTipsView.h"
 #import "MineCourseSettingView.h"
 #import "KSBaseWKWebViewController.h"
+#import "KSConfirmAlertView.h"
 
 @interface MinePageAccompanyCourseView ()<UITableViewDelegate,UITableViewDataSource>
 
@@ -322,6 +323,23 @@
     }
     return isExistenceNetwork;
 }
+
+- (void)showAlert:(NSString *)programId {
+    KSConfirmAlertView *alert = [KSConfirmAlertView shareInstance];
+    MJWeakSelf;
+    [alert configWithTitle:@"提示" subTitle:@"确认删除该课程方案吗?"];
+    [alert opreationSure:^{
+        [weakSelf deleteProgram:programId];
+    } cancel:^{
+        
+    }];
+    [alert showAlert];
+}
+
+- (void)deleteProgram:(NSString *)programId {
+    
+}
+
 /*
 // Only override drawRect: if you perform custom drawing.
 // An empty implementation adversely affects performance during animation.

+ 16 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/FansGroupAlert/FansGroupAlertView.h

@@ -0,0 +1,16 @@
+//
+//  FansGroupAlertView.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FansGroupAlertView : UIView
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 20 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/FansGroupAlert/FansGroupAlertView.m

@@ -0,0 +1,20 @@
+//
+//  FansGroupAlertView.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import "FansGroupAlertView.h"
+
+@implementation FansGroupAlertView
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 46 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/FansGroupAlert/FansGroupAlertView.xib

@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
+        <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="FansGroupAlertView">
+            <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="sqT-l2-2xZ">
+                    <rect key="frame" x="46.666666666666657" y="368" width="300" height="325"/>
+                    <subviews>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="fansGroup_alert_top" translatesAutoresizingMaskIntoConstraints="NO" id="2UF-fm-A6l">
+                            <rect key="frame" x="0.0" y="0.0" width="300" height="113"/>
+                        </imageView>
+                    </subviews>
+                    <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstAttribute="width" constant="300" id="7q4-Wf-OUU"/>
+                        <constraint firstAttribute="trailing" secondItem="2UF-fm-A6l" secondAttribute="trailing" id="DUz-5t-U1V"/>
+                        <constraint firstItem="2UF-fm-A6l" firstAttribute="leading" secondItem="sqT-l2-2xZ" secondAttribute="leading" id="cHl-3b-AQT"/>
+                        <constraint firstItem="2UF-fm-A6l" firstAttribute="top" secondItem="sqT-l2-2xZ" secondAttribute="top" id="e3B-JJ-mJz"/>
+                    </constraints>
+                </view>
+            </subviews>
+            <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
+            <constraints>
+                <constraint firstItem="sqT-l2-2xZ" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="7eq-zA-u5e"/>
+                <constraint firstItem="sqT-l2-2xZ" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" id="g7Q-Wm-SOP"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <point key="canvasLocation" x="55.725190839694655" y="19.718309859154932"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="fansGroup_alert_top" width="300" height="113"/>
+    </resources>
+</document>

+ 1 - 12
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/HeadView/MinePageHeadView.xib

@@ -60,7 +60,7 @@
                                     </connections>
                                 </button>
                             </subviews>
-                            <color key="backgroundColor" red="1" green="1" blue="1" alpha="0.10000000000000001" colorSpace="custom" customColorSpace="sRGB"/>
+                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                             <constraints>
                                 <constraint firstItem="jZ4-hZ-vd0" firstAttribute="top" secondItem="0dw-OD-PbF" secondAttribute="top" id="1j3-ch-PFu"/>
                                 <constraint firstAttribute="trailing" secondItem="jZ4-hZ-vd0" secondAttribute="trailing" id="2Cv-b1-2vL"/>
@@ -72,17 +72,6 @@
                                 <constraint firstAttribute="trailing" secondItem="7HZ-cT-HAA" secondAttribute="trailing" id="bpl-vO-fvM"/>
                                 <constraint firstAttribute="bottom" secondItem="7HZ-cT-HAA" secondAttribute="bottom" id="cIc-7z-1qK"/>
                             </constraints>
-                            <userDefinedRuntimeAttributes>
-                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
-                                    <real key="value" value="14"/>
-                                </userDefinedRuntimeAttribute>
-                                <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
-                                    <real key="value" value="1"/>
-                                </userDefinedRuntimeAttribute>
-                                <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
-                                    <color key="value" red="1" green="1" blue="1" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
-                                </userDefinedRuntimeAttribute>
-                            </userDefinedRuntimeAttributes>
                         </view>
                     </subviews>
                     <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>

+ 32 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineMusic/MinePageMusicSortView.h

@@ -0,0 +1,32 @@
+//
+//  MinePageMusicSortView.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import <UIKit/UIKit.h>
+typedef NS_ENUM(NSInteger, MINEMUSICSORT) {
+    MINEMUSICSORT_SUBJECT,
+    MINEMUSICSORT_SEARCH,
+};
+
+typedef void(^MineMusicSortCallback)(MINEMUSICSORT type, NSString * _Nullable searchKey);
+
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface MinePageMusicSortView : UIView
+
+@property (weak, nonatomic) IBOutlet UILabel *subjectLabel;
+
++ (instancetype)shareInstance;
+
+- (void)searchActionCallback:(MineMusicSortCallback)callback;
+
++ (CGFloat)getViewHeight;
+
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 74 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineMusic/MinePageMusicSortView.m

@@ -0,0 +1,74 @@
+//
+//  MinePageMusicSortView.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import "MinePageMusicSortView.h"
+
+@interface MinePageMusicSortView ()<UITextFieldDelegate>
+
+@property (weak, nonatomic) IBOutlet UIView *subjectView;
+
+@property (weak, nonatomic) IBOutlet UITextField *searchField;
+
+@property (nonatomic, copy) MineMusicSortCallback callback;
+
+@end
+
+@implementation MinePageMusicSortView
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    self.searchField.delegate = self;
+
+}
+
++ (instancetype)shareInstance {
+    MinePageMusicSortView *view = [[[NSBundle mainBundle] loadNibNamed:@"MinePageMusicSortView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)searchActionCallback:(MineMusicSortCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (IBAction)chooseSubject:(id)sender {
+    [self endEditing:YES];
+    if (self.callback) {
+        self.callback(MINEMUSICSORT_SUBJECT, nil);
+    }
+}
+
+
+- (IBAction)searchAction:(id)sender {
+    [self endEditing:YES];
+    if (self.callback) {
+        self.callback(MINEMUSICSORT_SEARCH, self.searchField.text);
+    }
+}
+
+- (BOOL)textFieldShouldReturn:(UITextField *)textField {
+    [self endEditing:YES];
+    if (self.callback) {
+        self.callback(MINEMUSICSORT_SEARCH, textField.text);
+    }
+    return YES;
+}
+
+
++ (CGFloat)getViewHeight {
+    return 58.0f;
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 154 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineMusic/MinePageMusicSortView.xib

@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
+        <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="MinePageMusicSortView">
+            <rect key="frame" x="0.0" y="0.0" width="393" height="65"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="C6L-qv-swO">
+                    <rect key="frame" x="0.0" y="0.0" width="393" height="65"/>
+                    <subviews>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Xmo-XL-5yx">
+                            <rect key="frame" x="14" y="12" width="82" height="34"/>
+                            <subviews>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="全部声部" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="n2B-hz-KHC">
+                                    <rect key="frame" x="0.0" y="8.6666666666666679" width="63" height="17"/>
+                                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                    <color key="textColor" red="0.074509803921568626" green="0.078431372549019607" blue="0.082352941176470587" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="mine_arrow_down_grey" translatesAutoresizingMaskIntoConstraints="NO" id="0bT-xj-tf9">
+                                    <rect key="frame" x="67" y="14.666666666666668" width="7" height="5"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="5" id="4zm-NN-XxY"/>
+                                        <constraint firstAttribute="width" constant="7" id="HKU-KM-3Q7"/>
+                                    </constraints>
+                                </imageView>
+                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="rYW-e4-QzV">
+                                    <rect key="frame" x="0.0" y="0.0" width="82" height="34"/>
+                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                    <connections>
+                                        <action selector="chooseSubject:" destination="iN0-l3-epB" eventType="touchUpInside" id="XKC-ay-mN4"/>
+                                    </connections>
+                                </button>
+                            </subviews>
+                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <constraints>
+                                <constraint firstAttribute="bottom" secondItem="rYW-e4-QzV" secondAttribute="bottom" id="4SG-wN-4Ep"/>
+                                <constraint firstItem="n2B-hz-KHC" firstAttribute="centerY" secondItem="Xmo-XL-5yx" secondAttribute="centerY" id="5qC-iu-wr4"/>
+                                <constraint firstAttribute="width" constant="82" id="9HK-iz-dwn"/>
+                                <constraint firstAttribute="trailing" secondItem="rYW-e4-QzV" secondAttribute="trailing" id="FSq-Da-HXd"/>
+                                <constraint firstItem="rYW-e4-QzV" firstAttribute="leading" secondItem="Xmo-XL-5yx" secondAttribute="leading" id="IQU-C7-f32"/>
+                                <constraint firstAttribute="trailing" secondItem="0bT-xj-tf9" secondAttribute="trailing" constant="8" id="Lx9-a4-WyI"/>
+                                <constraint firstItem="0bT-xj-tf9" firstAttribute="centerY" secondItem="Xmo-XL-5yx" secondAttribute="centerY" id="OjR-X5-FGa"/>
+                                <constraint firstItem="0bT-xj-tf9" firstAttribute="leading" secondItem="n2B-hz-KHC" secondAttribute="trailing" constant="4" id="p3u-DI-Qvl"/>
+                                <constraint firstAttribute="height" constant="34" id="pn1-2s-zqR"/>
+                                <constraint firstItem="rYW-e4-QzV" firstAttribute="top" secondItem="Xmo-XL-5yx" secondAttribute="top" id="xZJ-dP-sso"/>
+                                <constraint firstItem="n2B-hz-KHC" firstAttribute="leading" secondItem="Xmo-XL-5yx" secondAttribute="leading" id="y0H-9f-WsD"/>
+                            </constraints>
+                            <userDefinedRuntimeAttributes>
+                                <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
+                                    <color key="value" red="0.94117647059999998" green="0.94117647059999998" blue="0.94117647059999998" alpha="1" colorSpace="calibratedRGB"/>
+                                </userDefinedRuntimeAttribute>
+                            </userDefinedRuntimeAttributes>
+                        </view>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="zmq-VS-Fd4">
+                            <rect key="frame" x="106" y="12" width="273" height="34"/>
+                            <subviews>
+                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="minePage_search_green" translatesAutoresizingMaskIntoConstraints="NO" id="OpW-7s-Lsd">
+                                    <rect key="frame" x="12" y="9" width="16" height="16"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="16" id="GSL-vH-nDG"/>
+                                        <constraint firstAttribute="height" constant="16" id="rkt-0B-uDb"/>
+                                    </constraints>
+                                </imageView>
+                                <textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入曲目关键词" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="aQD-Vo-e2o">
+                                    <rect key="frame" x="33.999999999999993" y="0.0" width="111.33333333333331" height="34"/>
+                                    <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                    <textInputTraits key="textInputTraits" returnKeyType="done" enablesReturnKeyAutomatically="YES"/>
+                                </textField>
+                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="qwh-HK-LRR">
+                                    <rect key="frame" x="214" y="3" width="56" height="28"/>
+                                    <color key="backgroundColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="56" id="Hz0-Sf-Etc"/>
+                                        <constraint firstAttribute="height" constant="28" id="r3o-Wi-Osd"/>
+                                    </constraints>
+                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
+                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                    <state key="normal" title="搜索"/>
+                                    <userDefinedRuntimeAttributes>
+                                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                            <real key="value" value="14"/>
+                                        </userDefinedRuntimeAttribute>
+                                    </userDefinedRuntimeAttributes>
+                                    <connections>
+                                        <action selector="searchAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="QLm-oj-aYt"/>
+                                    </connections>
+                                </button>
+                            </subviews>
+                            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <constraints>
+                                <constraint firstItem="OpW-7s-Lsd" firstAttribute="centerY" secondItem="zmq-VS-Fd4" secondAttribute="centerY" id="1J6-4j-Q89"/>
+                                <constraint firstAttribute="trailing" secondItem="qwh-HK-LRR" secondAttribute="trailing" constant="3" id="6DO-Gm-gfH"/>
+                                <constraint firstItem="qwh-HK-LRR" firstAttribute="centerY" secondItem="zmq-VS-Fd4" secondAttribute="centerY" id="8cM-Uo-hP9"/>
+                                <constraint firstItem="aQD-Vo-e2o" firstAttribute="leading" secondItem="OpW-7s-Lsd" secondAttribute="trailing" constant="6" id="9Vj-Ou-ghD"/>
+                                <constraint firstItem="aQD-Vo-e2o" firstAttribute="top" secondItem="zmq-VS-Fd4" secondAttribute="top" id="REH-Jm-kwv"/>
+                                <constraint firstAttribute="height" constant="34" id="VN6-pv-gdP"/>
+                                <constraint firstAttribute="bottom" secondItem="aQD-Vo-e2o" secondAttribute="bottom" id="Ybc-1c-Brl"/>
+                                <constraint firstItem="OpW-7s-Lsd" firstAttribute="leading" secondItem="zmq-VS-Fd4" secondAttribute="leading" constant="12" id="bab-xF-GSF"/>
+                            </constraints>
+                            <userDefinedRuntimeAttributes>
+                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                    <real key="value" value="17"/>
+                                </userDefinedRuntimeAttribute>
+                            </userDefinedRuntimeAttributes>
+                        </view>
+                    </subviews>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstItem="zmq-VS-Fd4" firstAttribute="leading" secondItem="Xmo-XL-5yx" secondAttribute="trailing" constant="10" id="53B-HT-cwh"/>
+                        <constraint firstItem="zmq-VS-Fd4" firstAttribute="centerY" secondItem="Xmo-XL-5yx" secondAttribute="centerY" id="Sg7-SM-gqm"/>
+                        <constraint firstItem="Xmo-XL-5yx" firstAttribute="top" secondItem="C6L-qv-swO" secondAttribute="top" constant="12" id="jYq-Vo-8Ez"/>
+                        <constraint firstAttribute="trailing" secondItem="zmq-VS-Fd4" secondAttribute="trailing" constant="14" id="kAO-DH-EKE"/>
+                        <constraint firstItem="Xmo-XL-5yx" firstAttribute="leading" secondItem="C6L-qv-swO" secondAttribute="leading" constant="14" id="oHY-cP-jfO"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="10"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                </view>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstItem="C6L-qv-swO" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="8bv-f3-rkK"/>
+                <constraint firstItem="C6L-qv-swO" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="RtK-SQ-nDg"/>
+                <constraint firstAttribute="trailing" secondItem="C6L-qv-swO" secondAttribute="trailing" id="aCo-JE-IG4"/>
+                <constraint firstAttribute="bottom" secondItem="C6L-qv-swO" secondAttribute="bottom" id="eTc-M3-kcO"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="searchField" destination="aQD-Vo-e2o" id="31J-08-JHU"/>
+                <outlet property="subjectLabel" destination="n2B-hz-KHC" id="UJ6-FP-R5W"/>
+                <outlet property="subjectView" destination="Xmo-XL-5yx" id="yHj-SU-R5W"/>
+            </connections>
+            <point key="canvasLocation" x="55.725190839694655" y="-73.591549295774655"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="minePage_search_green" width="16" height="16"/>
+        <image name="mine_arrow_down_grey" width="8" height="4.6666665077209473"/>
+    </resources>
+</document>

+ 18 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineMusic/MinePageMusicView.h

@@ -0,0 +1,18 @@
+//
+//  MinePageMusicView.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import "KSJXBodyView.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface MinePageMusicView : KSJXBodyView
+
+@property (nonatomic, strong) NSMutableArray *subjectList;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 383 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineMusic/MinePageMusicView.m

@@ -0,0 +1,383 @@
+//
+//  MinePageMusicView.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import "MinePageMusicView.h"
+#import "StateView.h"
+#import "Reachability.h"
+#import "MineCourseSettingView.h"
+#import "MinePageMusicCell.h"
+#import "KSBaseWKWebViewController.h"
+#import "MusicMessageModel.h"
+#import "MinePageMusicSortView.h"
+#import <KSChoosePicker.h>
+
+@interface MinePageMusicView ()<UITableViewDelegate,UITableViewDataSource>
+
+@property (nonatomic, assign) BOOL isLoadMore;
+@property (nonatomic, assign) NSInteger rows;
+@property (nonatomic, assign) NSInteger pages;
+
+@property (nonatomic, strong) NSMutableArray *dataArray;
+
+@property (nonatomic, strong) StateView *promptView;
+@property (nonatomic, strong) UIView *promptPlaceView;
+
+@property (nonatomic, assign) BOOL networkAvaiable; // 网络是否可用
+
+@property (nonatomic, strong) UIView *headView;
+
+@property (nonatomic, strong) MineCourseSettingView *settingView;
+
+@property (nonatomic, strong) MinePageMusicSortView *sortView;
+
+@property (nonatomic, strong) NSString *searchKey;
+
+@property (nonatomic, strong) NSString *subjectIds;
+
+@end
+
+@implementation MinePageMusicView
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        self.backgroundColor = HexRGB(0xf8f9fc);
+        self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height) style:UITableViewStylePlain];
+        self.tableView.backgroundColor = HexRGB(0xf8f9fc);
+        self.tableView.showsVerticalScrollIndicator = NO;
+        self.tableView.dataSource = self;
+        self.tableView.delegate = self;
+        self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+        [self addSubview:self.tableView];
+        self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
+        [self.tableView registerNib:[UINib nibWithNibName:@"MinePageMusicCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"MinePageMusicCell"];
+
+        UIView *bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 10)];
+        bottomView.backgroundColor = HexRGB(0xf8f9fc);
+        self.tableView.tableFooterView = bottomView;
+        
+        MJWeakSelf;
+        self.tableView.mj_header = [KSGifRefreshHeader headerWithRefreshingBlock:^{
+            [weakSelf resetParamenter];
+            [weakSelf requestData];
+        }];
+        self.tableView.mj_footer = [KSGifRefreshFooter footerWithRefreshingBlock:^{
+            if (weakSelf.isLoadMore) {
+                weakSelf.pages += 1;
+                [weakSelf requestData];
+            }
+            else {
+                [weakSelf.tableView.mj_footer endRefreshingWithNoMoreData];
+            }
+        }];
+    }
+    return self;
+}
+
+- (void)refreshAndRequestData {
+    [self resetParamenter];
+    [self requestData];
+}
+
+- (void)resetParamenter {
+    self.isLoadMore = YES;
+    self.pages = 1;
+    self.rows = 10;
+    
+    self.dataArray = [NSMutableArray array];
+    [self.tableView.mj_footer resetNoMoreData];
+    [self setPromptString:@"暂无内容" imageName:@"empty_course" inView:self.tableView];
+    [self.tableView reloadData];
+}
+
+- (void)endRefresh {
+    @weakObj(self);
+    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+        @strongObj(self);
+        [self.tableView.mj_header endRefreshing];
+        [self.tableView.mj_footer endRefreshing];
+    });
+}
+
+- (void)requestData { // 乐谱
+    [KSNetworkingManager musicListRequest:KS_POST auditStatus:@"PASS" page:self.pages rows:self.rows search:self.searchKey subjectIds:self.subjectIds success:^(NSDictionary * _Nonnull dic) {
+        [self endRefresh];
+        if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
+            NSArray *sourceArray = [[dic ks_dictionaryValueForKey:@"data"] ks_arrayValueForKey:@"rows"];
+            for (NSDictionary *parm in sourceArray) {
+                MusicMessageModel *model = [[MusicMessageModel alloc] initWithDictionary:parm];
+                [self.dataArray addObject:model];
+            }
+            if (sourceArray.count < self.rows) {
+                self.isLoadMore = NO;
+            }
+        }
+        else {
+            [LOADING_MANAGER MBShowAUTOHidingInWindow:MESSAGEKEY];
+        }
+        [self.tableView reloadData];
+        [self changePromptLabelStateWithArray:self.dataArray];
+    } faliure:^(NSError * _Nonnull error) {
+        [self endRefresh];
+        if (self.networkAvaiable == NO) {
+            [self setPromptString:@"暂无网络" imageName:@"no_networking" inView:self.tableView];
+        }
+        [self.dataArray removeAllObjects];
+        [self.tableView reloadData];
+        [self changePromptLabelStateWithArray:self.dataArray];
+    }];
+}
+
+- (void)beginRefreshImmediately {
+    [self.tableView.mj_header beginRefreshing];
+}
+
+- (void)beginFirstRefresh {
+    if (!self.isHeaderRefreshed) {
+        [self beginRefreshImmediately];
+    }
+}
+- (void)selectCellAtIndexPath:(NSIndexPath *)indexPath {
+    
+    if (self.lastSelectedIndexPath == indexPath) {
+        return;
+    }
+    if (self.lastSelectedIndexPath != nil) {
+        UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:self.lastSelectedIndexPath];
+        [cell setSelected:NO animated:NO];
+    }
+    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
+    [cell setSelected:YES animated:NO];
+    self.lastSelectedIndexPath = indexPath;
+}
+
+- (void)layoutSubviews {
+    [super layoutSubviews];
+    CGFloat settingHeight = [MineCourseSettingView getViewHeight];
+    CGFloat sortHeight = [MinePageMusicSortView getViewHeight];
+
+    CGFloat headHeight = settingHeight + sortHeight;
+    
+    if (![self.subviews containsObject:self.headView]) {
+        [self addSubview:self.headView];
+        [self evaluateHeadView];
+        [self.headView mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.left.right.top.mas_equalTo(self);
+            make.height.mas_equalTo(headHeight);
+        }];
+    }
+    
+    [self.tableView mas_remakeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.bottom.mas_equalTo(self);
+        make.top.mas_equalTo(self.headView.mas_bottom);
+    }];
+}
+
+- (void)evaluateHeadView {
+    
+    CGFloat settingHeight = [MineCourseSettingView getViewHeight];
+    [self.headView addSubview:self.settingView];
+    [self.settingView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.mas_equalTo(self.headView.mas_top);
+        make.left.right.mas_equalTo(self.headView);
+        make.height.mas_equalTo(settingHeight);
+    }];
+    CGFloat sortHeight = [MinePageMusicSortView getViewHeight];
+    [self.headView addSubview:self.sortView];
+    [self.sortView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.headView);
+        make.bottom.mas_equalTo(self.headView.mas_bottom);
+        make.height.mas_equalTo(sortHeight);
+    }];
+}
+
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataArray.count;
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
+    return 82.0f;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    MinePageMusicCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MinePageMusicCell"];
+    MusicMessageModel *model = [self.dataArray objectAtIndex:indexPath.row];
+    [cell configWithMessage:model];
+    return cell;
+}
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    MusicMessageModel *model = self.dataArray[indexPath.row];
+    KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
+    ctrl.url = [NSString stringWithFormat:@"%@%@%@", WEBHOST, @"/#/music-detail?id=",model.internalBaseClassIdentifier];
+    [self.naviController pushViewController:ctrl animated:YES];
+}
+
+#pragma mark ----- lazying
+- (UIView *)headView {
+    if (!_headView) {
+        _headView = [[UIView alloc] initWithFrame:CGRectZero];
+        _headView.backgroundColor = [UIColor clearColor];
+    }
+    return _headView;
+}
+
+- (MinePageMusicSortView *)sortView {
+    if (!_sortView) {
+        _sortView = [MinePageMusicSortView shareInstance];
+        MJWeakSelf;
+        [_sortView searchActionCallback:^(MINEMUSICSORT type, NSString * _Nullable searchKey) {
+            [weakSelf musicSortAction:type searchKey:searchKey];
+        }];
+    }
+    return _sortView;
+}
+
+- (void)musicSortAction:(MINEMUSICSORT)type searchKey:(NSString *)searchKey {
+    switch (type) {
+        case MINEMUSICSORT_SUBJECT:
+        {
+            [self searchSubject];
+        }
+            break;
+        case MINEMUSICSORT_SEARCH:
+        {
+            [self evaluateSource:searchKey];
+        }
+            break;
+        default:
+            break;
+    }
+}
+
+
+- (void)evaluateSource:(NSString *)searchKey {
+    self.searchKey = searchKey;
+    [self refreshAndRequestData];
+}
+
+- (void)searchSubject {
+    if (self.subjectList.count) {
+        NSMutableArray *nameArray = [NSMutableArray array];
+        [nameArray addObject:@"全部"];
+        for (NSDictionary *parm in self.subjectList) {
+            [nameArray addObject:[parm ks_stringValueForKey:@"subjectName"]];
+        }
+        MJWeakSelf;
+        KSChoosePicker *picker = [[KSChoosePicker alloc] initWithTitle:@"" sourceData:nameArray lastChooseIndex:0 sureButtonColor:THEMECOLOR chooseReturnWithBlock:^(NSString * _Nonnull returnValue, NSInteger chooseIndex) {
+            if (chooseIndex == 0) {
+                weakSelf.sortView.subjectLabel.text = @"全部声部";
+                weakSelf.subjectIds = nil;
+            }
+            else {
+                weakSelf.sortView.subjectLabel.text = returnValue;
+                NSDictionary *parm = self.subjectList[chooseIndex-1];
+                weakSelf.subjectIds = [parm ks_stringValueForKey:@"subjectId"];
+            }
+            [weakSelf refreshAndRequestData];
+        } cancel:^{
+        }];
+        [picker showPicker];
+    }
+    else {
+        [LOADING_MANAGER MBShowAUTOHidingInWindow:@"无声部信息"];
+    }
+}
+
+
+- (MineCourseSettingView *)settingView {
+    if (!_settingView) {
+        _settingView = [MineCourseSettingView shareInstance];
+        MJWeakSelf;
+        [_settingView configWithCourseType:COURSE_TYPE_MUSIC callback:^{
+            [weakSelf settingCourseAction];
+        }];
+    }
+    return _settingView;
+}
+
+- (void)settingCourseAction {
+    // 上传乐谱
+    KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
+    webCtrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/videoCreate"];
+    [self.naviController pushViewController:webCtrl animated:YES];
+}
+
+
+
+/**
+ 设置没有数据时的显示
+ 
+ @param promptString 提示语
+ @param imgName 图片名称
+ @param view 显示在什么地方
+ */
+- (void)setPromptString:(NSString *)promptString imageName:(NSString *)imgName inView:(UIView *)view {
+    if (self.promptView != nil) {
+        [self.promptView removeFromSuperview];
+    }
+    else {
+        self.promptView = [[StateView alloc]init];
+        self.promptView.frame = CGRectMake(0, 0, KPortraitWidth, KPortraitHeight - 300);
+    }
+    _promptPlaceView = view;
+    //当请求不到数据时 ,自定义提示view 将会出现;
+    self.promptView.imageName = imgName;
+    self.promptView.alpha = 0.0f;
+    [self.promptView setText:promptString];
+    [view addSubview:self.promptView];
+}
+
+// 结束刷新后调用方法
+- (void)changePromptLabelStateWithArray:(NSMutableArray *)array {
+    NSInteger count;
+    if (array.count) {
+        count = array.count;
+    } else {
+        count = 0;
+    }
+    
+    [UIView animateWithDuration:0.1 animations:^{
+        [[self promptView] setAlpha:count ? 0.0f :1.0f ] ;
+    }] ;
+    
+}
+
+- (BOOL)networkAvaiable {
+    return [self checkNetworkAvaiable];
+}
+
+- (BOOL)checkNetworkAvaiable {
+    BOOL isExistenceNetwork = YES;
+    Reachability *reach = [Reachability reachabilityWithHostName:@"www.apple.com"];
+    switch ([reach currentReachabilityStatus]) {
+        case NotReachable:
+            isExistenceNetwork = NO;
+            //NSLog(@"notReachable");
+            break;
+        case ReachableViaWiFi:
+            isExistenceNetwork = YES;
+            //NSLog(@"WIFI");
+            break;
+        case ReachableViaWWAN:
+            isExistenceNetwork = YES;
+            //NSLog(@"3G");
+            break;
+    }
+    return isExistenceNetwork;
+}
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 1 - 11
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageCourseView.m

@@ -307,17 +307,7 @@
     else {
         MusicMessageModel *model = self.dataArray[indexPath.row];
         MinePageMusicCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MinePageMusicCell"];
-        ROWINDEX rowIndex = ROWINDEX_MIDDLE;
-        if (indexPath.row == 0 && self.dataArray.count == 1) {
-            rowIndex = ROWINDEX_TOP_BOTTOM;
-        }
-        else if (indexPath.row == 0) {
-            rowIndex = ROWINDEX_TOP;
-        }
-        else if (indexPath.row == self.dataArray.count - 1) {
-            rowIndex = ROWINDEX_BOTTOM;
-        }
-        [cell configWithMessage:model rowIndex:rowIndex];
+        [cell configWithMessage:model];
         return cell;
     }
 }

+ 16 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageLiveCourse/MinePageLiveCourseGroupCell.h

@@ -0,0 +1,16 @@
+//
+//  MinePageLiveCourseGroupCell.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface MinePageLiveCourseGroupCell : UITableViewCell
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 26 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageLiveCourse/MinePageLiveCourseGroupCell.m

@@ -0,0 +1,26 @@
+//
+//  MinePageLiveCourseGroupCell.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import "MinePageLiveCourseGroupCell.h"
+
+@implementation MinePageLiveCourseGroupCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+    self.selectionStyle = UITableViewCellSelectionStyleNone;
+}
+
+
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end

+ 69 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageLiveCourse/MinePageLiveCourseGroupCell.xib

@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
+        <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"/>
+        <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="236" id="KGk-i7-Jjw" customClass="MinePageLiveCourseGroupCell">
+            <rect key="frame" x="0.0" y="0.0" width="335" height="236"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+            <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
+                <rect key="frame" x="0.0" y="0.0" width="335" height="236"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="SVw-BB-Sxt">
+                        <rect key="frame" x="14" y="0.0" width="307" height="224"/>
+                        <subviews>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="goo-Bu-bsj">
+                                <rect key="frame" x="8" y="14" width="35" height="24"/>
+                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                            </imageView>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="开课时间:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cRF-wl-5mR">
+                                <rect key="frame" x="51" y="16" width="63" height="17"/>
+                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/>
+                                <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="2024-11-16 09:30" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="XmG-2z-3ZS">
+                                <rect key="frame" x="122" y="16" width="123" height="17"/>
+                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/>
+                                <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="HqD-99-lz3">
+                                <rect key="frame" x="12" y="57" width="283" height="128"/>
+                            </imageView>
+                        </subviews>
+                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                        <constraints>
+                            <constraint firstItem="HqD-99-lz3" firstAttribute="leading" secondItem="SVw-BB-Sxt" secondAttribute="leading" constant="12" id="HsW-Dj-t8J"/>
+                            <constraint firstAttribute="trailing" secondItem="HqD-99-lz3" secondAttribute="trailing" constant="12" id="pTs-tB-JHG"/>
+                        </constraints>
+                        <userDefinedRuntimeAttributes>
+                            <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                <real key="value" value="6"/>
+                            </userDefinedRuntimeAttribute>
+                        </userDefinedRuntimeAttributes>
+                    </view>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="SVw-BB-Sxt" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="14" id="DA1-zh-8dt"/>
+                    <constraint firstAttribute="trailing" secondItem="SVw-BB-Sxt" secondAttribute="trailing" constant="14" id="Edl-zX-LKU"/>
+                    <constraint firstItem="SVw-BB-Sxt" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="O0z-Wz-0cq"/>
+                    <constraint firstAttribute="bottom" secondItem="SVw-BB-Sxt" secondAttribute="bottom" constant="12" id="iUf-0K-E3E"/>
+                </constraints>
+            </tableViewCellContentView>
+            <viewLayoutGuide key="safeArea" id="aW0-zy-SZf"/>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <point key="canvasLocation" x="66.412213740458014" y="87.323943661971839"/>
+        </tableViewCell>
+    </objects>
+</document>

+ 24 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageLiveCourse/MinePageLiveCourseView.h

@@ -0,0 +1,24 @@
+//
+//  MinePageLiveCourseView.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import "KSJXBodyView.h"
+#import "StateView.h"
+#import "Reachability.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface MinePageLiveCourseView : KSJXBodyView
+
+@property (nonatomic, strong) NSString *teaherStatus;
+
+@property (nonatomic, assign) BOOL liveFlag; // 是否有直播权限
+
+@property (nonatomic, strong) NSMutableArray *subjectList;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 24 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageLiveCourse/MinePageLiveCourseView.m

@@ -0,0 +1,24 @@
+//
+//  MinePageLiveCourseView.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import "MinePageLiveCourseView.h"
+
+@interface MinePageLiveCourseView ()
+
+@end
+
+@implementation MinePageLiveCourseView
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 1 - 8
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageMusicCell.h

@@ -10,16 +10,9 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-typedef NS_ENUM(NSInteger, ROWINDEX) {
-    ROWINDEX_TOP,
-    ROWINDEX_MIDDLE,
-    ROWINDEX_BOTTOM,
-    ROWINDEX_TOP_BOTTOM,
-};
-
 @interface MinePageMusicCell : UITableViewCell
 
-- (void)configWithMessage:(MusicMessageModel *)songMessage rowIndex:(ROWINDEX)rowIndex;
+- (void)configWithMessage:(MusicMessageModel *)songMessage;
 
 @end
 

+ 6 - 37
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageMusicCell.m

@@ -27,6 +27,7 @@
 @property (weak, nonatomic) IBOutlet UIImageView *albumTag;
 @property (weak, nonatomic) IBOutlet NSLayoutConstraint *albumTagWidth;
 @property (weak, nonatomic) IBOutlet NSLayoutConstraint *albumTagLeft;
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *albumTagRight;
 
 @end
 
@@ -38,40 +39,7 @@
     self.selectionStyle = UITableViewCellSelectionStyleNone;
 }
 
-- (void)configWithMessage:(MusicMessageModel *)songMessage rowIndex:(ROWINDEX)rowIndex {
-    
-    if (rowIndex == ROWINDEX_TOP) {
-        UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, KPortraitWidth - 28, 80) byRoundingCorners:UIRectCornerTopLeft|UIRectCornerTopRight cornerRadii:CGSizeMake(10, 10)];
-        CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
-        maskLayer.frame = self.bgView.bounds;
-        maskLayer.path = maskPath.CGPath;
-        self.bgView.layer.mask = maskLayer;
-        self.lineView.hidden = NO;
-    }
-    else if (rowIndex == ROWINDEX_BOTTOM) {
-        UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, KPortraitWidth - 28, 80) byRoundingCorners:UIRectCornerBottomLeft|UIRectCornerBottomRight cornerRadii:CGSizeMake(10, 10)];
-        CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
-        maskLayer.frame = self.bgView.bounds;
-        maskLayer.path = maskPath.CGPath;
-        self.bgView.layer.mask = maskLayer;
-        self.lineView.hidden = YES;
-    }
-    else if (rowIndex == ROWINDEX_TOP_BOTTOM) {
-        UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, KPortraitWidth - 28, 80) byRoundingCorners:UIRectCornerTopLeft|UIRectCornerTopRight|UIRectCornerBottomLeft|UIRectCornerBottomRight cornerRadii:CGSizeMake(10, 10)];
-        CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
-        maskLayer.frame = self.bgView.bounds;
-        maskLayer.path = maskPath.CGPath;
-        self.bgView.layer.mask = maskLayer;
-        self.lineView.hidden = YES;
-    }
-    else {
-        UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, KPortraitWidth - 28, 80) byRoundingCorners:UIRectCornerBottomLeft|UIRectCornerBottomRight cornerRadii:CGSizeMake(0, 0)];
-        CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
-        maskLayer.frame = self.bgView.bounds;
-        maskLayer.path = maskPath.CGPath;
-        self.bgView.layer.mask = maskLayer;
-        self.lineView.hidden = NO;
-    }
+- (void)configWithMessage:(MusicMessageModel *)songMessage {
     
     if (songMessage.exquisiteFlag) {
         self.qualityMusicTag.hidden = NO;
@@ -80,17 +48,18 @@
     else {
         self.qualityMusicTag.hidden = NO;
         self.qualityTagWidth.constant = 0.0f;
+        self.albumTagLeft.constant = 0.0f;
     }
     
     if (songMessage.albumNums > 0) {
         self.albumTag.hidden = NO;
         self.albumTagWidth.constant = 15.0f;
-        self.albumTagLeft.constant = 5.0f;
+        self.albumTagRight.constant = 5.0f;
     }
     else {
         self.albumTag.hidden = YES;
         self.albumTagWidth.constant = 0.0f;
-        self.albumTagLeft.constant = 0.0f;
+        self.albumTagRight.constant = 0.0f;
     }
     
     self.songName.text = [NSString returnNoNullStringWithString:songMessage.musicSheetName];
@@ -124,7 +93,7 @@
 }
 - (CGFloat)getTagViewMaxWidth:(NSString *)teacherName {
     CGFloat width = [self getStringWidthInLabel:teacherName font:[UIFont systemFontOfSize:10.0f]];
-    return KPortraitWidth - 70  - 28 - 12 - width - 7;
+    return KPortraitWidth - 71  - 28 - 14 - width - 43;
 }
 
 - (void)configTagViewWithTagArray:(NSArray *)tagArray maxWidth:(CGFloat)maxWidth {

+ 36 - 22
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageMusicCell.xib

@@ -1,9 +1,9 @@
 <?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" useSafeAreas="YES" colorMatched="YES">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" 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="21207"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
         <capability name="Safe area layout guides" minToolsVersion="9.0"/>
         <capability name="System colors in document resources" minToolsVersion="11.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
@@ -12,67 +12,75 @@
         <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
         <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
         <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="127" id="KGk-i7-Jjw" customClass="MinePageMusicCell">
-            <rect key="frame" x="0.0" y="0.0" width="413" height="80"/>
+            <rect key="frame" x="0.0" y="0.0" width="413" height="82"/>
             <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
             <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
-                <rect key="frame" x="0.0" y="0.0" width="413" height="80"/>
+                <rect key="frame" x="0.0" y="0.0" width="413" height="82"/>
                 <autoresizingMask key="autoresizingMask"/>
                 <subviews>
                     <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="eZd-kc-RgJ">
-                        <rect key="frame" x="14" y="0.0" width="385" height="80"/>
+                        <rect key="frame" x="14" y="0.0" width="385" height="70"/>
                         <subviews>
                             <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="music_logo" translatesAutoresizingMaskIntoConstraints="NO" id="xBX-sV-7hK">
-                                <rect key="frame" x="11" y="16" width="48" height="48"/>
+                                <rect key="frame" x="11" y="11" width="48" height="48"/>
                                 <constraints>
                                     <constraint firstAttribute="height" constant="48" id="sWr-09-0yg"/>
                                     <constraint firstAttribute="width" constant="48" id="wUC-OQ-6R6"/>
                                 </constraints>
+                                <userDefinedRuntimeAttributes>
+                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                        <real key="value" value="6"/>
+                                    </userDefinedRuntimeAttribute>
+                                </userDefinedRuntimeAttributes>
                             </imageView>
                             <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="野蜂飞舞" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5wX-Qg-UK0">
-                                <rect key="frame" x="109" y="16" width="57.5" height="17"/>
-                                <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/>
-                                <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                                <rect key="frame" x="110" y="11" width="64" height="22"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="22" id="B5b-Ny-aJH"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
+                                <color key="textColor" red="0.10196078431372549" green="0.10196078431372549" blue="0.10196078431372549" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                 <nil key="highlightedColor"/>
                             </label>
                             <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="作曲:尼古拉" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="KNo-AM-8Um">
-                                <rect key="frame" x="70" y="47" width="74" height="17"/>
+                                <rect key="frame" x="71" y="43" width="72" height="17"/>
                                 <constraints>
                                     <constraint firstAttribute="height" constant="17" id="er2-yj-87Q"/>
                                 </constraints>
                                 <fontDescription key="fontDescription" type="system" pointSize="12"/>
-                                <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                                <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                 <nil key="highlightedColor"/>
                             </label>
                             <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="qO5-Vi-5dQ">
-                                <rect key="frame" x="151" y="47.5" width="191" height="16"/>
+                                <rect key="frame" x="152" y="43.5" width="190" height="16"/>
                                 <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                 <constraints>
                                     <constraint firstAttribute="height" constant="16" id="gHY-Dt-fsS"/>
                                 </constraints>
                             </view>
                             <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="home_music_play" translatesAutoresizingMaskIntoConstraints="NO" id="qyC-cX-e8b">
-                                <rect key="frame" x="347" y="28" width="24" height="24"/>
+                                <rect key="frame" x="347" y="23" width="24" height="24"/>
                                 <constraints>
                                     <constraint firstAttribute="width" constant="24" id="44z-Nn-HMw"/>
                                     <constraint firstAttribute="height" constant="24" id="JCu-SN-qbD"/>
                                 </constraints>
                             </imageView>
                             <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="0z5-RP-2Hy">
-                                <rect key="frame" x="14" y="79.5" width="356" height="0.5"/>
+                                <rect key="frame" x="14" y="69.5" width="356" height="0.5"/>
                                 <color key="backgroundColor" red="0.90980392156862744" green="0.90980392156862744" blue="0.90980392156862744" alpha="1" colorSpace="calibratedRGB"/>
                                 <constraints>
                                     <constraint firstAttribute="height" constant="0.5" id="YI5-ye-ONm"/>
                                 </constraints>
                             </view>
                             <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="quality_tag" translatesAutoresizingMaskIntoConstraints="NO" id="V5J-Oe-JUu">
-                                <rect key="frame" x="70" y="16" width="14" height="17"/>
+                                <rect key="frame" x="71" y="13.5" width="14" height="17"/>
                                 <constraints>
                                     <constraint firstAttribute="height" constant="17" id="xdw-Ba-Xol"/>
                                     <constraint firstAttribute="width" constant="14" id="zIi-7h-39m"/>
                                 </constraints>
                             </imageView>
                             <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="music_albumTag" translatesAutoresizingMaskIntoConstraints="NO" id="bS2-6F-Dlf">
-                                <rect key="frame" x="89" y="17" width="15" height="15"/>
+                                <rect key="frame" x="90" y="14.5" width="15" height="15"/>
                                 <constraints>
                                     <constraint firstAttribute="width" constant="15" id="bzd-5z-FHf"/>
                                     <constraint firstAttribute="height" constant="15" id="inM-ti-NXZ"/>
@@ -82,31 +90,36 @@
                         <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                         <constraints>
                             <constraint firstItem="5wX-Qg-UK0" firstAttribute="centerY" secondItem="bS2-6F-Dlf" secondAttribute="centerY" id="0aR-CG-9DL"/>
-                            <constraint firstItem="V5J-Oe-JUu" firstAttribute="leading" secondItem="xBX-sV-7hK" secondAttribute="trailing" constant="11" id="2Kg-B5-VdV"/>
+                            <constraint firstItem="V5J-Oe-JUu" firstAttribute="leading" secondItem="xBX-sV-7hK" secondAttribute="trailing" constant="12" id="2Kg-B5-VdV"/>
                             <constraint firstItem="bS2-6F-Dlf" firstAttribute="leading" secondItem="V5J-Oe-JUu" secondAttribute="trailing" constant="5" id="Ao9-gq-Sbk"/>
+                            <constraint firstItem="KNo-AM-8Um" firstAttribute="top" secondItem="5wX-Qg-UK0" secondAttribute="bottom" constant="10" id="BQe-U3-FwI"/>
                             <constraint firstAttribute="bottom" secondItem="0z5-RP-2Hy" secondAttribute="bottom" id="EdW-Qt-gFP"/>
-                            <constraint firstItem="V5J-Oe-JUu" firstAttribute="top" secondItem="xBX-sV-7hK" secondAttribute="top" id="IGY-yN-8PM"/>
                             <constraint firstItem="bS2-6F-Dlf" firstAttribute="centerY" secondItem="V5J-Oe-JUu" secondAttribute="centerY" id="LXc-IA-yRk"/>
                             <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="5wX-Qg-UK0" secondAttribute="trailing" constant="10" id="SV6-Ua-YmU"/>
-                            <constraint firstItem="KNo-AM-8Um" firstAttribute="bottom" secondItem="xBX-sV-7hK" secondAttribute="bottom" id="WM8-AX-Frc"/>
                             <constraint firstItem="qyC-cX-e8b" firstAttribute="centerY" secondItem="eZd-kc-RgJ" secondAttribute="centerY" id="XHu-lk-zgJ"/>
+                            <constraint firstItem="5wX-Qg-UK0" firstAttribute="top" secondItem="eZd-kc-RgJ" secondAttribute="top" constant="11" id="Y1c-IF-iZt"/>
                             <constraint firstItem="0z5-RP-2Hy" firstAttribute="leading" secondItem="eZd-kc-RgJ" secondAttribute="leading" constant="14" id="a6A-id-sIZ"/>
                             <constraint firstItem="5wX-Qg-UK0" firstAttribute="centerY" secondItem="bS2-6F-Dlf" secondAttribute="centerY" id="aiE-ev-am8"/>
-                            <constraint firstItem="KNo-AM-8Um" firstAttribute="leading" secondItem="xBX-sV-7hK" secondAttribute="trailing" constant="11" id="c1W-4A-lpJ"/>
+                            <constraint firstItem="KNo-AM-8Um" firstAttribute="leading" secondItem="xBX-sV-7hK" secondAttribute="trailing" constant="12" id="c1W-4A-lpJ"/>
                             <constraint firstItem="5wX-Qg-UK0" firstAttribute="leading" secondItem="bS2-6F-Dlf" secondAttribute="trailing" constant="5" id="efM-ol-o41"/>
                             <constraint firstItem="xBX-sV-7hK" firstAttribute="leading" secondItem="eZd-kc-RgJ" secondAttribute="leading" constant="11" id="fgT-Ph-1JC"/>
                             <constraint firstItem="qyC-cX-e8b" firstAttribute="leading" secondItem="qO5-Vi-5dQ" secondAttribute="trailing" constant="5" id="ipq-5V-J1w"/>
-                            <constraint firstItem="qO5-Vi-5dQ" firstAttribute="leading" secondItem="KNo-AM-8Um" secondAttribute="trailing" constant="7" id="kc8-4f-j6V"/>
+                            <constraint firstItem="qO5-Vi-5dQ" firstAttribute="leading" secondItem="KNo-AM-8Um" secondAttribute="trailing" constant="9" id="kc8-4f-j6V"/>
                             <constraint firstItem="xBX-sV-7hK" firstAttribute="centerY" secondItem="eZd-kc-RgJ" secondAttribute="centerY" id="mAT-vQ-rp9"/>
                             <constraint firstItem="qO5-Vi-5dQ" firstAttribute="centerY" secondItem="KNo-AM-8Um" secondAttribute="centerY" id="mUc-zy-UY8"/>
                             <constraint firstAttribute="trailing" secondItem="0z5-RP-2Hy" secondAttribute="trailing" constant="15" id="ndn-cE-AmF"/>
                             <constraint firstAttribute="trailing" secondItem="qyC-cX-e8b" secondAttribute="trailing" constant="14" id="z9c-xm-3Bm"/>
                         </constraints>
+                        <userDefinedRuntimeAttributes>
+                            <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                <real key="value" value="6"/>
+                            </userDefinedRuntimeAttribute>
+                        </userDefinedRuntimeAttributes>
                     </view>
                 </subviews>
                 <constraints>
                     <constraint firstItem="eZd-kc-RgJ" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="14" id="0GK-n4-j5V"/>
-                    <constraint firstAttribute="bottom" secondItem="eZd-kc-RgJ" secondAttribute="bottom" id="QvQ-WA-Nao"/>
+                    <constraint firstAttribute="bottom" secondItem="eZd-kc-RgJ" secondAttribute="bottom" constant="12" id="QvQ-WA-Nao"/>
                     <constraint firstItem="eZd-kc-RgJ" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="aep-pP-Em7"/>
                     <constraint firstAttribute="trailing" secondItem="eZd-kc-RgJ" secondAttribute="trailing" constant="14" id="eRM-cn-jh6"/>
                 </constraints>
@@ -116,6 +129,7 @@
             <connections>
                 <outlet property="albumTag" destination="bS2-6F-Dlf" id="8Hy-HV-bXF"/>
                 <outlet property="albumTagLeft" destination="Ao9-gq-Sbk" id="U2A-y8-x4U"/>
+                <outlet property="albumTagRight" destination="efM-ol-o41" id="7BX-Me-quz"/>
                 <outlet property="albumTagWidth" destination="bzd-5z-FHf" id="0it-T3-Vco"/>
                 <outlet property="bgView" destination="eZd-kc-RgJ" id="DDC-wq-TIl"/>
                 <outlet property="lineView" destination="0z5-RP-2Hy" id="8tz-Y9-pUv"/>

+ 6 - 6
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageTipsView/MineCourseSettingView.m

@@ -62,20 +62,20 @@
             break;
         case COURSE_TYPE_LIVE:
         {
-            imgName = @"";
-            descTitle = @"";
+            imgName = @"mine_info_create_LiveCourse";
+            descTitle = @"创建直播课";
         }
             break;
         case COURSE_TYPE_VDIEO:
         {
-            imgName = @"";
-            descTitle = @"";
+            imgName = @"mine_info_create_video";
+            descTitle = @"创建视频课";
         }
             break;
         case COURSE_TYPE_MUSIC:
         {
-            imgName = @"";
-            descTitle = @"";
+            imgName = @"mine_info_upload_music";
+            descTitle = @"上传乐谱";
         }
             break;
         default:

+ 16 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineVideoCourse/MinePageVideoCourseView.h

@@ -0,0 +1,16 @@
+//
+//  MinePageVideoCourseView.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import "KSJXBodyView.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface MinePageVideoCourseView : KSJXBodyView
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 366 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineVideoCourse/MinePageVideoCourseView.m

@@ -0,0 +1,366 @@
+//
+//  MinePageVideoCourseView.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import "MinePageVideoCourseView.h"
+#import "StateView.h"
+#import "Reachability.h"
+#import "MinePageCourseTipsView.h"
+#import "MineCourseSettingView.h"
+#import "MinePageVideoGroupCell.h"
+#import "KSBaseWKWebViewController.h"
+
+@interface MinePageVideoCourseView ()<UITableViewDelegate,UITableViewDataSource>
+
+@property (nonatomic, assign) BOOL isLoadMore;
+@property (nonatomic, assign) NSInteger rows;
+@property (nonatomic, assign) NSInteger pages;
+
+@property (nonatomic, strong) NSMutableArray *dataArray;
+
+@property (nonatomic, strong) StateView *promptView;
+@property (nonatomic, strong) UIView *promptPlaceView;
+
+@property (nonatomic, assign) BOOL networkAvaiable; // 网络是否可用
+
+@property (nonatomic, strong) UIView *headView;
+
+@property (nonatomic, strong) MinePageCourseTipsView *tipsView;
+
+@property (nonatomic, strong) MineCourseSettingView *settingView;
+
+@property (nonatomic, assign) BOOL hideTips; // 是否隐藏提示
+
+@end
+
+@implementation MinePageVideoCourseView
+
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        self.backgroundColor = HexRGB(0xf8f9fc);
+        self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height) style:UITableViewStylePlain];
+        self.tableView.backgroundColor = HexRGB(0xf8f9fc);
+        self.tableView.showsVerticalScrollIndicator = NO;
+        self.tableView.dataSource = self;
+        self.tableView.delegate = self;
+        self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+        [self addSubview:self.tableView];
+        self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
+        [self.tableView registerNib:[UINib nibWithNibName:@"MinePageVideoGroupCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"MinePageVideoGroupCell"];
+
+        UIView *bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 10)];
+        bottomView.backgroundColor = HexRGB(0xf8f9fc);
+        self.tableView.tableFooterView = bottomView;
+        
+        MJWeakSelf;
+        self.tableView.mj_header = [KSGifRefreshHeader headerWithRefreshingBlock:^{
+            [weakSelf resetParamenter];
+            [weakSelf requestData];
+        }];
+        self.tableView.mj_footer = [KSGifRefreshFooter footerWithRefreshingBlock:^{
+            if (weakSelf.isLoadMore) {
+                weakSelf.pages += 1;
+                [weakSelf requestData];
+            }
+            else {
+                [weakSelf.tableView.mj_footer endRefreshingWithNoMoreData];
+            }
+        }];
+    }
+    return self;
+}
+
+- (void)refreshAndRequestData {
+    [self resetParamenter];
+    [self requestData];
+}
+
+- (void)resetParamenter {
+    self.isLoadMore = YES;
+    self.pages = 1;
+    self.rows = 10;
+    
+    self.dataArray = [NSMutableArray array];
+    [self.tableView.mj_footer resetNoMoreData];
+    [self setPromptString:@"暂无内容" imageName:@"empty_course" inView:self.tableView];
+    [self.tableView reloadData];
+}
+
+- (void)endRefresh {
+    @weakObj(self);
+    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+        @strongObj(self);
+        [self.tableView.mj_header endRefreshing];
+        [self.tableView.mj_footer endRefreshing];
+    });
+}
+
+- (void)requestData {
+    [KSNetworkingManager videoLessonListRequest:KS_POST lessonSubject:nil auditStatus:@"PASS" pageNo:self.pages pageSize:self.rows success:^(NSDictionary * _Nonnull dic) {
+        [self endRefresh];
+        if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
+            NSArray *sourceArray = [[dic ks_dictionaryValueForKey:@"data"] ks_arrayValueForKey:@"rows"];
+            for (NSDictionary *parm in sourceArray) {
+                VideoCourseModel *model = [[VideoCourseModel alloc] initWithDictionary:parm];
+                [self.dataArray addObject:model];
+            }
+            if (sourceArray.count < self.rows) {
+                self.isLoadMore = NO;
+            }
+        }
+        else {
+            [LOADING_MANAGER MBShowAUTOHidingInWindow:MESSAGEKEY];
+        }
+        [self.tableView reloadData];
+        [self changePromptLabelStateWithArray:self.dataArray];
+    } faliure:^(NSError * _Nonnull error) {
+        [self endRefresh];
+        if (self.networkAvaiable == NO) {
+            [self setPromptString:@"暂无网络" imageName:@"no_networking" inView:self.tableView];
+        }
+        [self.dataArray removeAllObjects];
+        [self.tableView reloadData];
+        [self changePromptLabelStateWithArray:self.dataArray];
+    }];
+}
+
+- (void)beginRefreshImmediately {
+    [self.tableView.mj_header beginRefreshing];
+}
+
+- (void)beginFirstRefresh {
+    if (!self.isHeaderRefreshed) {
+        [self beginRefreshImmediately];
+    }
+}
+- (void)selectCellAtIndexPath:(NSIndexPath *)indexPath {
+    
+    if (self.lastSelectedIndexPath == indexPath) {
+        return;
+    }
+    if (self.lastSelectedIndexPath != nil) {
+        UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:self.lastSelectedIndexPath];
+        [cell setSelected:NO animated:NO];
+    }
+    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
+    [cell setSelected:YES animated:NO];
+    self.lastSelectedIndexPath = indexPath;
+}
+
+- (void)layoutSubviews {
+    [super layoutSubviews];
+    CGFloat tipsHeight = [self.tipsView getViewHeight];
+    CGFloat settingHeight = [MineCourseSettingView getViewHeight];
+    CGFloat headHeight = 0.0f;
+    if (self.hideTips) {
+        headHeight = settingHeight + 12;
+    }
+    else {
+        headHeight = tipsHeight + settingHeight + 12;
+    }
+    
+    if (![self.subviews containsObject:self.headView]) {
+        [self addSubview:self.headView];
+        [self evaluateHeadView];
+        [self.headView mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.left.right.top.mas_equalTo(self);
+            make.height.mas_equalTo(headHeight);
+        }];
+    }
+    else {
+        [self.headView mas_updateConstraints:^(MASConstraintMaker *make) {
+            make.height.mas_equalTo(headHeight);
+        }];
+        if (self.hideTips) {
+            self.tipsView.hidden = YES;
+            [self.tipsView mas_updateConstraints:^(MASConstraintMaker *make) {
+                make.height.mas_equalTo(0);
+            }];
+        }
+        else {
+            self.tipsView.hidden = NO;
+            [self.tipsView mas_updateConstraints:^(MASConstraintMaker *make) {
+                make.height.mas_equalTo(tipsHeight);
+            }];
+        }
+    }
+    
+    [self.tableView mas_remakeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.bottom.mas_equalTo(self);
+        make.top.mas_equalTo(self.headView.mas_bottom);
+    }];
+}
+
+- (void)evaluateHeadView {
+    
+    CGFloat tipsHeight = 0.0f;
+    if (self.hideTips == NO) {
+        tipsHeight = [self.tipsView getViewHeight];
+    }
+    CGFloat settingHeight = [MineCourseSettingView getViewHeight];
+    [self.headView addSubview:self.tipsView];
+    [self.tipsView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.top.mas_equalTo(self.headView);
+        make.height.mas_equalTo(tipsHeight);
+    }];
+    [self.headView addSubview:self.settingView];
+    [self.settingView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.headView);
+        make.bottom.mas_equalTo(self.headView.mas_bottom).offset(-12);
+        make.height.mas_equalTo(settingHeight);
+    }];
+}
+
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataArray.count;
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
+    return 115.0f;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    MinePageVideoGroupCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MinePageVideoGroupCell"];
+    VideoCourseModel *model = [self.dataArray objectAtIndex:indexPath.row];
+    [cell configSourceModel:model];
+    return cell;
+}
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    VideoCourseModel *model = [self.dataArray objectAtIndex:indexPath.row];
+    KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
+    ctrl.url = [NSString stringWithFormat:@"%@%@%@", WEBHOST, @"/#/videoDetail?groupId=",model.internalBaseClassIdentifier];
+    [self.naviController pushViewController:ctrl animated:YES];
+}
+
+#pragma mark ----- lazying
+- (UIView *)headView {
+    if (!_headView) {
+        _headView = [[UIView alloc] initWithFrame:CGRectZero];
+        _headView.backgroundColor = [UIColor clearColor];
+    }
+    return _headView;
+}
+- (MinePageCourseTipsView *)tipsView {
+    if (!_tipsView) {
+        _tipsView = [MinePageCourseTipsView shareIntance];
+        MJWeakSelf;
+        [_tipsView configWithTypeImage:@"minePage_course_introduce" headTitle:@"什么是视频课?" descMsg:@"视频课是由老师根据教学内容精心录制的课程,购买后永久有效,您可以随时观看学习。" callback:^(COURSE_TIPS_ACTION action) {
+            [weakSelf courseTipsAction:action];
+        }];
+    }
+    return _tipsView;
+}
+
+- (MineCourseSettingView *)settingView {
+    if (!_settingView) {
+        _settingView = [MineCourseSettingView shareInstance];
+        MJWeakSelf;
+        [_settingView configWithCourseType:COURSE_TYPE_VDIEO callback:^{
+            [weakSelf settingCourseAction];
+        }];
+    }
+    return _settingView;
+}
+
+- (void)settingCourseAction {
+    // 创建视频课
+    KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
+    webCtrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/videoCreate"];
+    [self.naviController pushViewController:webCtrl animated:YES];
+}
+
+- (void)courseTipsAction:(COURSE_TIPS_ACTION)action {
+    switch (action) {
+        case COURSE_TIPS_ACTION_REMOVE:
+        {
+            self.hideTips = YES;
+            [self setNeedsLayout];
+        }
+            break;
+        case COURSE_TIPS_ACTION_STOPREMIND:
+        {
+            self.hideTips = YES;
+            [self setNeedsLayout];
+        }
+            break;
+        default:
+            break;
+    }
+}
+
+/**
+ 设置没有数据时的显示
+ 
+ @param promptString 提示语
+ @param imgName 图片名称
+ @param view 显示在什么地方
+ */
+- (void)setPromptString:(NSString *)promptString imageName:(NSString *)imgName inView:(UIView *)view {
+    if (self.promptView != nil) {
+        [self.promptView removeFromSuperview];
+    }
+    else {
+        self.promptView = [[StateView alloc]init];
+        self.promptView.frame = CGRectMake(0, 0, KPortraitWidth, KPortraitHeight - 300);
+    }
+    _promptPlaceView = view;
+    //当请求不到数据时 ,自定义提示view 将会出现;
+    self.promptView.imageName = imgName;
+    self.promptView.alpha = 0.0f;
+    [self.promptView setText:promptString];
+    [view addSubview:self.promptView];
+}
+
+// 结束刷新后调用方法
+- (void)changePromptLabelStateWithArray:(NSMutableArray *)array {
+    NSInteger count;
+    if (array.count) {
+        count = array.count;
+    } else {
+        count = 0;
+    }
+    
+    [UIView animateWithDuration:0.1 animations:^{
+        [[self promptView] setAlpha:count ? 0.0f :1.0f ] ;
+    }] ;
+    
+}
+
+- (BOOL)networkAvaiable {
+    return [self checkNetworkAvaiable];
+}
+
+- (BOOL)checkNetworkAvaiable {
+    BOOL isExistenceNetwork = YES;
+    Reachability *reach = [Reachability reachabilityWithHostName:@"www.apple.com"];
+    switch ([reach currentReachabilityStatus]) {
+        case NotReachable:
+            isExistenceNetwork = NO;
+            //NSLog(@"notReachable");
+            break;
+        case ReachableViaWiFi:
+            isExistenceNetwork = YES;
+            //NSLog(@"WIFI");
+            break;
+        case ReachableViaWWAN:
+            isExistenceNetwork = YES;
+            //NSLog(@"3G");
+            break;
+    }
+    return isExistenceNetwork;
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 20 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineVideoCourse/MinePageVideoGroupCell.h

@@ -0,0 +1,20 @@
+//
+//  MinePageVideoGroupCell.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import <UIKit/UIKit.h>
+#import "VideoCourseModel.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface MinePageVideoGroupCell : UITableViewCell
+
+- (void)configSourceModel:(VideoCourseModel *)model;
+
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 88 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineVideoCourse/MinePageVideoGroupCell.m

@@ -0,0 +1,88 @@
+//
+//  MinePageVideoGroupCell.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2024/11/18.
+//
+
+#import "MinePageVideoGroupCell.h"
+
+@interface MinePageVideoGroupCell ()
+
+@property (weak, nonatomic) IBOutlet UIImageView *coverImage;
+
+@property (weak, nonatomic) IBOutlet UILabel *courseTitle;
+
+@property (weak, nonatomic) IBOutlet UILabel *descLabel;
+
+@property (weak, nonatomic) IBOutlet UILabel *subjectLabel;
+
+@property (weak, nonatomic) IBOutlet UIView *statusView;
+
+@property (weak, nonatomic) IBOutlet UILabel *courseTag;
+
+@property (weak, nonatomic) IBOutlet UILabel *courseMessage;
+
+@property (weak, nonatomic) IBOutlet UILabel *courseCount;
+
+@end
+
+@implementation MinePageVideoGroupCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+    self.selectionStyle = UITableViewCellSelectionStyleNone;
+    [self setupRadius];
+}
+
+- (void)setupRadius {
+    _statusView.layer.cornerRadius = 7;
+    _statusView.layer.maskedCorners = kCALayerMaxXMaxYCorner | kCALayerMaxXMinYCorner;
+}
+
+- (void)configSourceModel:(VideoCourseModel *)model {
+    
+    [self.coverImage sd_setImageWithURL:[NSURL URLWithString:[model.lessonCoverUrl getUrlEndcodeString]] placeholderImage:[UIImage imageNamed:@"video_placeholder"]];
+    self.courseTitle.text = [NSString returnNoNullStringWithString:model.lessonName];
+   
+    if ([model.payType isEqualToString:@"VIP"]) {
+        self.courseTag.hidden = YES;
+        self.courseMessage.font = [UIFont systemFontOfSize:15.0f weight:UIFontWeightMedium];
+        self.courseMessage.text = @"会员";
+        self.courseMessage.textColor = HexRGB(0xC76E21);
+    }
+    else if ([model.payType isEqualToString:@"PAY"]) {
+        if (model.lessonPrice > 0) {
+            self.courseTag.hidden = NO;
+            self.courseMessage.textColor = HexRGB(0xF44541);
+            NSString *text = [NSString  stringWithFormat:@"%.2f",model.lessonPrice];
+            self.courseMessage.text = text;
+            self.courseMessage.font = [UIFont fontWithName:@"DIN Alternate Bold" size:18.0f];
+        }
+        else {
+            self.courseTag.hidden = YES;
+            self.courseMessage.text = @"免费";
+            self.courseMessage.font = [UIFont systemFontOfSize:15.0f weight:UIFontWeightMedium];
+            self.courseMessage.textColor = HexRGB(0x18B99A);
+        }
+    }
+    else {
+        self.courseMessage.text = @"";
+    }
+    self.courseCount.text = [NSString stringWithFormat:@"%.0f课时",model.lessonCount];
+    self.descLabel.text = [NSString stringWithFormat:@"%.0f人学习",model.countStudent];
+
+    self.subjectLabel.text = [NSString returnNoNullStringWithString:model.lessonSubjectName];
+    // 曲目
+    
+}
+
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end

+ 236 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineVideoCourse/MinePageVideoGroupCell.xib

@@ -0,0 +1,236 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23504" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <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"/>
+        <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="130" id="KGk-i7-Jjw" customClass="MinePageVideoGroupCell">
+            <rect key="frame" x="0.0" y="0.0" width="375" height="115"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+            <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
+                <rect key="frame" x="0.0" y="0.0" width="375" height="115"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Iek-sC-1GK">
+                        <rect key="frame" x="14" y="0.0" width="347" height="103"/>
+                        <subviews>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="video_placeholder" translatesAutoresizingMaskIntoConstraints="NO" id="Urc-7X-bjd">
+                                <rect key="frame" x="12" y="12" width="146" height="79"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="146" id="lGQ-2r-Egz"/>
+                                </constraints>
+                                <userDefinedRuntimeAttributes>
+                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                        <real key="value" value="6"/>
+                                    </userDefinedRuntimeAttribute>
+                                </userDefinedRuntimeAttributes>
+                            </imageView>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="9i1-fb-rxX">
+                                <rect key="frame" x="12" y="17" width="42" height="14"/>
+                                <subviews>
+                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="已上架" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5pt-pW-NIS">
+                                        <rect key="frame" x="6" y="0.0" width="30" height="14"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="14" id="E1t-e9-4v5"/>
+                                        </constraints>
+                                        <fontDescription key="fontDescription" type="system" pointSize="10"/>
+                                        <color key="textColor" red="0.1764705882352941" green="0.7803921568627451" blue="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                        <nil key="highlightedColor"/>
+                                    </label>
+                                </subviews>
+                                <color key="backgroundColor" red="0.83529411764705885" green="1" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                <constraints>
+                                    <constraint firstItem="5pt-pW-NIS" firstAttribute="leading" secondItem="9i1-fb-rxX" secondAttribute="leading" constant="6" id="Kis-v7-4m0"/>
+                                    <constraint firstAttribute="trailing" secondItem="5pt-pW-NIS" secondAttribute="trailing" constant="6" id="QHl-gm-qCO"/>
+                                    <constraint firstAttribute="bottom" secondItem="5pt-pW-NIS" secondAttribute="bottom" id="Xq3-Qo-eJz"/>
+                                    <constraint firstItem="5pt-pW-NIS" firstAttribute="top" secondItem="9i1-fb-rxX" secondAttribute="top" id="Y7g-OV-z6S"/>
+                                </constraints>
+                            </view>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="RcF-yJ-tJm">
+                                <rect key="frame" x="128" y="73" width="26" height="14"/>
+                                <subviews>
+                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="长笛" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kR8-BM-hQh">
+                                        <rect key="frame" x="4" y="1" width="18" height="12"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="12" id="0TK-PC-z5s"/>
+                                        </constraints>
+                                        <fontDescription key="fontDescription" type="system" pointSize="9"/>
+                                        <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                        <nil key="highlightedColor"/>
+                                    </label>
+                                </subviews>
+                                <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.40000000000000002" colorSpace="custom" customColorSpace="sRGB"/>
+                                <constraints>
+                                    <constraint firstAttribute="trailing" secondItem="kR8-BM-hQh" secondAttribute="trailing" constant="4" id="1d3-6R-UaX"/>
+                                    <constraint firstItem="kR8-BM-hQh" firstAttribute="leading" secondItem="RcF-yJ-tJm" secondAttribute="leading" constant="4" id="Ouu-dD-EFa"/>
+                                    <constraint firstItem="kR8-BM-hQh" firstAttribute="top" secondItem="RcF-yJ-tJm" secondAttribute="top" constant="1" id="QEq-Z2-4c5"/>
+                                    <constraint firstAttribute="bottom" secondItem="kR8-BM-hQh" secondAttribute="bottom" constant="1" id="gXq-0I-1ah"/>
+                                </constraints>
+                                <userDefinedRuntimeAttributes>
+                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                        <real key="value" value="3"/>
+                                    </userDefinedRuntimeAttribute>
+                                </userDefinedRuntimeAttributes>
+                            </view>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="749" text="120" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aDf-J7-afk">
+                                <rect key="frame" x="309" y="68" width="26" height="21"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="21" id="XYc-0A-8Bi"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" name="DINAlternate-Bold" family="DIN Alternate" pointSize="18"/>
+                                <color key="textColor" red="0.95686274509803915" green="0.27058823529411763" blue="0.25490196078431371" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="LNr-YI-NbI">
+                                <rect key="frame" x="238.99999999999997" y="43" width="50.666666666666657" height="18"/>
+                                <subviews>
+                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="4课时" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1Ba-1k-4et">
+                                        <rect key="frame" x="6" y="0.0" width="38.666666666666664" height="18"/>
+                                        <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                        <color key="textColor" red="0.46666666666666667" green="0.46666666666666667" blue="0.46666666666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                        <nil key="highlightedColor"/>
+                                    </label>
+                                </subviews>
+                                <color key="backgroundColor" red="0.96078431372549022" green="0.96470588235294119" blue="0.98039215686274506" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                <constraints>
+                                    <constraint firstAttribute="trailing" secondItem="1Ba-1k-4et" secondAttribute="trailing" constant="6" id="QKI-fZ-f6W"/>
+                                    <constraint firstAttribute="bottom" secondItem="1Ba-1k-4et" secondAttribute="bottom" id="QWe-wN-kqH"/>
+                                    <constraint firstAttribute="height" constant="18" id="gIl-GQ-pUj"/>
+                                    <constraint firstItem="1Ba-1k-4et" firstAttribute="top" secondItem="LNr-YI-NbI" secondAttribute="top" id="o3e-mM-FUy"/>
+                                    <constraint firstItem="1Ba-1k-4et" firstAttribute="leading" secondItem="LNr-YI-NbI" secondAttribute="leading" constant="6" id="syW-Jd-AQ1"/>
+                                </constraints>
+                                <userDefinedRuntimeAttributes>
+                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                        <real key="value" value="3"/>
+                                    </userDefinedRuntimeAttribute>
+                                </userDefinedRuntimeAttributes>
+                            </view>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="R6O-Fy-ndS">
+                                <rect key="frame" x="170" y="43" width="65" height="18"/>
+                                <subviews>
+                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="3首曲目" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1oP-Xc-XQe">
+                                        <rect key="frame" x="6" y="0.0" width="53" height="18"/>
+                                        <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                        <color key="textColor" red="0.46666666666666667" green="0.46666666666666667" blue="0.46666666666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                        <nil key="highlightedColor"/>
+                                    </label>
+                                </subviews>
+                                <color key="backgroundColor" red="0.96078431372549022" green="0.96470588235294119" blue="0.98039215686274506" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                <constraints>
+                                    <constraint firstItem="1oP-Xc-XQe" firstAttribute="leading" secondItem="R6O-Fy-ndS" secondAttribute="leading" constant="6" id="18G-Tw-TeR"/>
+                                    <constraint firstAttribute="bottom" secondItem="1oP-Xc-XQe" secondAttribute="bottom" id="A35-co-3I6"/>
+                                    <constraint firstAttribute="height" constant="18" id="Ci2-iD-iIf"/>
+                                    <constraint firstAttribute="trailing" secondItem="1oP-Xc-XQe" secondAttribute="trailing" constant="6" id="PcF-No-4JI"/>
+                                    <constraint firstItem="1oP-Xc-XQe" firstAttribute="top" secondItem="R6O-Fy-ndS" secondAttribute="top" id="QGC-XF-oPC"/>
+                                </constraints>
+                                <userDefinedRuntimeAttributes>
+                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                        <real key="value" value="3"/>
+                                    </userDefinedRuntimeAttribute>
+                                </userDefinedRuntimeAttributes>
+                            </view>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Yph-bo-BEh">
+                                <rect key="frame" x="170" y="69" width="57" height="19"/>
+                                <subviews>
+                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="24人学习" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="TBF-PK-cBD">
+                                        <rect key="frame" x="2" y="2" width="53" height="15"/>
+                                        <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                                        <color key="textColor" red="1" green="0.40784313725490196" blue="0.15294117647058825" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                        <nil key="highlightedColor"/>
+                                    </label>
+                                </subviews>
+                                <color key="backgroundColor" red="1" green="0.50196078431372548" blue="0.17254901960784313" alpha="0.070000000000000007" colorSpace="custom" customColorSpace="sRGB"/>
+                                <constraints>
+                                    <constraint firstItem="TBF-PK-cBD" firstAttribute="leading" secondItem="Yph-bo-BEh" secondAttribute="leading" constant="2" id="7A0-cE-rYs"/>
+                                    <constraint firstAttribute="trailing" secondItem="TBF-PK-cBD" secondAttribute="trailing" constant="2" id="KJB-Hk-0de"/>
+                                    <constraint firstItem="TBF-PK-cBD" firstAttribute="centerY" secondItem="Yph-bo-BEh" secondAttribute="centerY" id="QdZ-Tl-XNY"/>
+                                    <constraint firstAttribute="height" constant="19" id="pbm-0K-BLc"/>
+                                </constraints>
+                                <userDefinedRuntimeAttributes>
+                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                        <real key="value" value="2"/>
+                                    </userDefinedRuntimeAttribute>
+                                </userDefinedRuntimeAttributes>
+                            </view>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="从零开始学竖笛视频课" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QJe-I1-Sdq">
+                                <rect key="frame" x="170" y="14" width="165" height="21"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="21" id="qbs-t9-9OY"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" weight="medium" pointSize="15"/>
+                                <color key="textColor" red="0.074509803921568626" green="0.078431372549019607" blue="0.082352941176470587" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="¥" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="krJ-Zv-zp3">
+                                <rect key="frame" x="300" y="71" width="7" height="17"/>
+                                <fontDescription key="fontDescription" name="DINAlternate-Bold" family="DIN Alternate" pointSize="14"/>
+                                <color key="textColor" red="0.95686274510000002" green="0.27058823529999998" blue="0.25490196079999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                        </subviews>
+                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                        <constraints>
+                            <constraint firstItem="QJe-I1-Sdq" firstAttribute="leading" secondItem="Urc-7X-bjd" secondAttribute="trailing" constant="12" id="0in-79-mLI"/>
+                            <constraint firstAttribute="trailing" secondItem="QJe-I1-Sdq" secondAttribute="trailing" constant="12" id="6fy-SO-PDY"/>
+                            <constraint firstAttribute="bottom" secondItem="aDf-J7-afk" secondAttribute="bottom" constant="14" id="AOi-i1-YN1"/>
+                            <constraint firstItem="aDf-J7-afk" firstAttribute="bottom" secondItem="krJ-Zv-zp3" secondAttribute="bottom" constant="1" id="CwD-Mt-GGg"/>
+                            <constraint firstItem="LNr-YI-NbI" firstAttribute="top" secondItem="QJe-I1-Sdq" secondAttribute="bottom" constant="8" id="GAE-I3-6S0"/>
+                            <constraint firstItem="RcF-yJ-tJm" firstAttribute="bottom" secondItem="Urc-7X-bjd" secondAttribute="bottom" constant="-4" id="J8T-7j-fBh"/>
+                            <constraint firstItem="QJe-I1-Sdq" firstAttribute="top" secondItem="Iek-sC-1GK" secondAttribute="top" constant="14" id="Mla-In-jSh"/>
+                            <constraint firstItem="Yph-bo-BEh" firstAttribute="leading" secondItem="Urc-7X-bjd" secondAttribute="trailing" constant="12" id="Qnr-A8-Aj4"/>
+                            <constraint firstItem="aDf-J7-afk" firstAttribute="leading" secondItem="krJ-Zv-zp3" secondAttribute="trailing" constant="2" id="SKl-X1-apk"/>
+                            <constraint firstItem="R6O-Fy-ndS" firstAttribute="top" secondItem="QJe-I1-Sdq" secondAttribute="bottom" constant="8" id="Syf-wf-YGU"/>
+                            <constraint firstItem="Yph-bo-BEh" firstAttribute="bottom" secondItem="Urc-7X-bjd" secondAttribute="bottom" constant="-3" id="WCS-YZ-v18"/>
+                            <constraint firstItem="Urc-7X-bjd" firstAttribute="leading" secondItem="Iek-sC-1GK" secondAttribute="leading" constant="12" id="XX8-Oi-1g5"/>
+                            <constraint firstItem="LNr-YI-NbI" firstAttribute="leading" secondItem="R6O-Fy-ndS" secondAttribute="trailing" constant="4" id="h21-BN-v7A"/>
+                            <constraint firstAttribute="trailing" secondItem="aDf-J7-afk" secondAttribute="trailing" constant="12" id="lyg-ck-FP4"/>
+                            <constraint firstItem="Urc-7X-bjd" firstAttribute="top" secondItem="Iek-sC-1GK" secondAttribute="top" constant="12" id="n1w-Qq-hVx"/>
+                            <constraint firstItem="RcF-yJ-tJm" firstAttribute="trailing" secondItem="Urc-7X-bjd" secondAttribute="trailing" constant="-4" id="ncs-NX-2EF"/>
+                            <constraint firstItem="R6O-Fy-ndS" firstAttribute="leading" secondItem="Urc-7X-bjd" secondAttribute="trailing" constant="12" id="rcR-nu-sGV"/>
+                            <constraint firstItem="9i1-fb-rxX" firstAttribute="leading" secondItem="Iek-sC-1GK" secondAttribute="leading" constant="12" id="x7I-7l-f2N"/>
+                            <constraint firstItem="9i1-fb-rxX" firstAttribute="top" secondItem="Iek-sC-1GK" secondAttribute="top" constant="17" id="xnQ-am-yig"/>
+                            <constraint firstAttribute="bottom" secondItem="Urc-7X-bjd" secondAttribute="bottom" constant="12" id="z99-tc-ykV"/>
+                        </constraints>
+                        <userDefinedRuntimeAttributes>
+                            <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                <real key="value" value="6"/>
+                            </userDefinedRuntimeAttribute>
+                        </userDefinedRuntimeAttributes>
+                    </view>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="Iek-sC-1GK" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="Dec-CQ-qp3"/>
+                    <constraint firstAttribute="trailing" secondItem="Iek-sC-1GK" secondAttribute="trailing" constant="14" id="Luw-yX-OhX"/>
+                    <constraint firstItem="Iek-sC-1GK" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="14" id="OPd-LU-ghe"/>
+                    <constraint firstAttribute="bottom" secondItem="Iek-sC-1GK" secondAttribute="bottom" constant="12" id="ois-iW-dO7"/>
+                </constraints>
+            </tableViewCellContentView>
+            <viewLayoutGuide key="safeArea" id="aW0-zy-SZf"/>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <connections>
+                <outlet property="courseCount" destination="1Ba-1k-4et" id="8Eb-Ni-ke1"/>
+                <outlet property="courseMessage" destination="aDf-J7-afk" id="M7z-hs-hnL"/>
+                <outlet property="courseTag" destination="krJ-Zv-zp3" id="KwY-Ij-4Hy"/>
+                <outlet property="courseTitle" destination="QJe-I1-Sdq" id="8X2-dW-fGS"/>
+                <outlet property="coverImage" destination="Urc-7X-bjd" id="ZuA-2q-9s2"/>
+                <outlet property="descLabel" destination="TBF-PK-cBD" id="sG4-tA-K3O"/>
+                <outlet property="statusView" destination="9i1-fb-rxX" id="zSD-L7-Tcw"/>
+                <outlet property="subjectLabel" destination="kR8-BM-hQh" id="P9f-CX-r06"/>
+            </connections>
+            <point key="canvasLocation" x="51.145038167938928" y="71.478873239436624"/>
+        </tableViewCell>
+    </objects>
+    <resources>
+        <image name="video_placeholder" width="103" height="72"/>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

+ 3 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VIPProgramCreate/MineVipProgramMainView.h

@@ -20,10 +20,12 @@ NS_ASSUME_NONNULL_BEGIN
 
 + (instancetype)sharedInstanace;
 
-- (void)configSubjectNameArray:(NSMutableArray *)subjectNameArray subjectIds:(NSMutableArray *)subjectIdArray durationArray:(NSMutableArray *)timesArray minPrice:(NSInteger)minPrice maxPrice:(NSInteger)maxPrice;
+- (void)configSubjectNameArray:(NSArray *)subjectNameArray subjectIds:(NSArray *)subjectIdArray durationArray:(NSArray *)timesArray minPrice:(NSInteger)minPrice maxPrice:(NSInteger)maxPrice;
 
 - (void)settingCallback:(ProgramSettingCallback)callback;
 
+- (void)displayInView:(UIView *)displayView;
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 118 - 11
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VIPProgramCreate/MineVipProgramMainView.m

@@ -6,12 +6,16 @@
 //
 
 #import "MineVipProgramMainView.h"
+#import "ProgramAddButton.h"
 
 @interface MineVipProgramMainView ()<UITextFieldDelegate>
 
 @property (weak, nonatomic) IBOutlet UIView *subjectContainer;
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *subjectContainerHeight;
 
 @property (weak, nonatomic) IBOutlet UIView *durationContainer;
+@property (weak, nonatomic) IBOutlet NSLayoutConstraint *durationContainerHeight;
+
 @property (weak, nonatomic) IBOutlet UITextField *priceTextField;
 
 @property (nonatomic, copy) ProgramSettingCallback callback;
@@ -26,11 +30,15 @@
 
 @property (nonatomic, assign) NSInteger maxPrice;
 
-@property (nonatomic, strong) NSMutableArray *subjectNameArray;
+@property (nonatomic, strong) NSArray *subjectNameArray;
+
+@property (nonatomic, strong) NSArray *subjectIdArray;
+
+@property (nonatomic, strong) NSArray *timesArray;
 
-@property (nonatomic, strong) NSMutableArray *subjectIdArray;
+@property (nonatomic, assign) NSInteger subjectChooseIndex;
 
-@property (nonatomic, strong) NSMutableArray *timesArray;
+@property (nonatomic, assign) NSInteger durationChooseIndex;
 
 @end
 
@@ -46,7 +54,7 @@
     return view;
 }
 
-- (void)configSubjectNameArray:(NSMutableArray *)subjectNameArray subjectIds:(NSMutableArray *)subjectIdArray durationArray:(NSMutableArray *)timesArray minPrice:(NSInteger)minPrice maxPrice:(NSInteger)maxPrice {
+- (void)configSubjectNameArray:(NSArray *)subjectNameArray subjectIds:(NSArray *)subjectIdArray durationArray:(NSArray *)timesArray minPrice:(NSInteger)minPrice maxPrice:(NSInteger)maxPrice {
     self.subjectNameArray = subjectNameArray;
     self.subjectIdArray = subjectIdArray;
     self.timesArray = timesArray;
@@ -59,22 +67,109 @@
 }
 
 - (void)evaluateButton {
+    [self.subjectContainer removeAllSubViews];
+    [self.durationContainer removeAllSubViews];
+    CGFloat buttonLeft = 12.0f;
+    CGFloat buttonSpace = 8.0f;
     
+    CGFloat buttonWidth = ((KPortraitWidth - 14 * 2) - buttonLeft * 2 - buttonSpace * 2) / 3.0f;
+    CGFloat buttonHeight = 26.0f;
+    CGFloat subjectColumn = self.subjectNameArray.count / 3 + self.subjectNameArray.count % 3;
+    CGFloat subjectViewHeight = buttonHeight * subjectColumn + buttonSpace * (subjectColumn - 1) + 12;
+    self.subjectContainerHeight.constant = subjectViewHeight;
+    
+    CGFloat durationColumn = self.timesArray.count / 3 + self.timesArray.count % 3;
+    CGFloat durationViewHeight = buttonHeight * durationColumn + buttonSpace * (durationColumn - 1) + 12;
+    self.durationContainerHeight.constant = durationViewHeight;
+    // 声部设置
+    for (NSInteger subjectIndex = 0; subjectIndex < self.subjectNameArray.count; subjectIndex++) {
+        
+        NSString *subjectName = self.subjectNameArray[subjectIndex];
+        ProgramAddButton *button = [self addSettingButton:subjectName tag:1000+subjectIndex];
+        if (subjectIndex == 0) {
+            self.subjectChooseIndex = subjectIndex+1000;
+            button.isChoose = YES;
+        }
+        MJWeakSelf;
+        [button buttonActionCallback:^(NSInteger buttonIndex) {
+            [weakSelf refreshChooseStatus:buttonIndex isSubject:YES];
+        }];
+        [self.subjectContainer addSubview:button];
+        CGFloat leftSpace = buttonLeft + (buttonWidth + buttonSpace) * (subjectIndex % 3);
+        CGFloat topSpace = (buttonHeight + buttonSpace) * (subjectIndex / 3);
+        [button mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.width.mas_equalTo(buttonWidth);
+            make.height.mas_equalTo(buttonHeight);
+            make.left.mas_equalTo(leftSpace);
+            make.top.mas_equalTo(topSpace);
+        }];
+    }
+    // 时长设置
+    for (NSInteger durationIndex = 0; durationIndex < self.timesArray.count; durationIndex++) {
+        NSString *durationName = self.timesArray[durationIndex];
+        ProgramAddButton *button = [self addSettingButton:durationName tag:2000+durationIndex];
+        if (durationIndex == 0) {
+            self.durationChooseIndex = durationIndex+2000;
+            button.isChoose = YES;
+        }
+        MJWeakSelf;
+        [button buttonActionCallback:^(NSInteger buttonIndex) {
+            [weakSelf refreshChooseStatus:buttonIndex isSubject:NO];
+        }];
+        [self.durationContainer addSubview:button];
+        CGFloat leftSpace = buttonLeft + (buttonWidth + buttonSpace) * (durationIndex % 3);
+        CGFloat topSpace = (buttonHeight + buttonSpace) * (durationIndex / 3);
+        [button mas_makeConstraints:^(MASConstraintMaker *make) {
+            make.width.mas_equalTo(buttonWidth);
+            make.height.mas_equalTo(buttonHeight);
+            make.left.mas_equalTo(leftSpace);
+            make.top.mas_equalTo(topSpace);
+        }];
+    }
 }
 
-- (void)settingCallback:(ProgramSettingCallback)callback {
-    if (self.callback) {
-        self.callback = callback;
+- (void)refreshChooseStatus:(NSInteger)buttonIndex isSubject:(BOOL)isSubject {
+    if (isSubject) {
+        if (buttonIndex != self.subjectChooseIndex) {
+            ProgramAddButton *preButton = [self.subjectContainer viewWithTag:self.subjectChooseIndex];
+            preButton.isChoose = NO;
+            ProgramAddButton *currentButton = [self.subjectContainer viewWithTag:buttonIndex];
+            currentButton.isChoose = YES;
+            self.subjectChooseIndex = buttonIndex;
+        }
+    }
+    else {
+        if (buttonIndex != self.durationChooseIndex) {
+            ProgramAddButton *preButton = [self.durationContainer viewWithTag:self.durationChooseIndex];
+            preButton.isChoose = NO;
+            ProgramAddButton *currentButton = [self.durationContainer viewWithTag:buttonIndex];
+            currentButton.isChoose = YES;
+            self.durationChooseIndex = buttonIndex;
+        }
     }
 }
 
+- (ProgramAddButton *)addSettingButton:(NSString *)title tag:(NSInteger)tag {
+    ProgramAddButton *button = [ProgramAddButton sharedInstance];
+    [button configWithTitle:title nomalBgColor:HexRGB(0xF8F8F8) nomalTitleColor:HexRGB(0x999999) selectedBgColor:HexRGB(0xE9FFF8) selectedTitleColor:HexRGB(0x2DC7AA) tag:tag];
+    return button;
+}
 
-- (IBAction)cancelAction:(id)sender {
-    
+- (void)settingCallback:(ProgramSettingCallback)callback {
     if (self.callback) {
-        self.callback(PROGRAM_SETTING_CANEL, nil, nil, nil);
+        self.callback = callback;
     }
 }
+- (void)displayInView:(UIView *)displayView {
+    if (!displayView) {
+        displayView = [NSObject getKeyWindow];
+    }
+    [displayView addSubview:self];
+    [self mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.top.bottom.mas_equalTo(displayView);
+    }];
+}
+
 
 - (IBAction)sureButtonClick:(id)sender {
     [self endEditing:YES];
@@ -82,13 +177,25 @@
         [LOADING_MANAGER MBShowAUTOHidingInWindow:@"请设置课时单价"];
         return;
     }
+    self.subjectId = self.subjectIdArray[self.subjectChooseIndex - 1000];
+    self.duration = self.timesArray[self.durationChooseIndex - 2000];
     if (self.callback) {
         self.callback(PROGRAM_SETTING_SURE, self.subjectId, self.duration, self.price);
     }
 }
 
 - (void)textFieldDidEndEditing:(UITextField *)textField {
-    
+    NSString *priceSetting = textField.text;
+    if (![NSString isEmptyString:priceSetting]) {
+        double priceNum = [priceSetting doubleValue];
+        if (priceNum > self.maxPrice) {
+            textField.text = [NSString stringWithFormat:@"%zd", self.maxPrice];
+        }
+        else if (priceNum < self.minPrice) {
+            textField.text = [NSString stringWithFormat:@"%zd", self.minPrice];
+        }
+    }
+    self.price = textField.text;
 }
 
 /*

+ 47 - 60
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VIPProgramCreate/MineVipProgramMainView.xib

@@ -11,26 +11,14 @@
         <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
         <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
         <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="MineVipProgramMainView">
-            <rect key="frame" x="0.0" y="0.0" width="393" height="956"/>
+            <rect key="frame" x="0.0" y="0.0" width="393" height="707"/>
             <autoresizingMask key="autoresizingMask"/>
             <subviews>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="AOD-2f-maw">
-                    <rect key="frame" x="0.0" y="413" width="393" height="543"/>
+                    <rect key="frame" x="0.0" y="0.0" width="393" height="485"/>
                     <subviews>
-                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="添加课程方案" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4HD-ko-BI7">
-                            <rect key="frame" x="142.66666666666666" y="18" width="108" height="22"/>
-                            <constraints>
-                                <constraint firstAttribute="height" constant="22" id="Osy-fa-r0K"/>
-                            </constraints>
-                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="18"/>
-                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            <nil key="highlightedColor"/>
-                        </label>
-                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="course_tips_del" translatesAutoresizingMaskIntoConstraints="NO" id="c4f-Ul-Gwx">
-                            <rect key="frame" x="367" y="22" width="14" height="14"/>
-                        </imageView>
                         <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Z6O-VU-4de">
-                            <rect key="frame" x="14" y="58" width="365" height="105"/>
+                            <rect key="frame" x="14" y="0.0" width="365" height="105"/>
                             <subviews>
                                 <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="course_subject_icon" translatesAutoresizingMaskIntoConstraints="NO" id="b7C-5p-GT4">
                                     <rect key="frame" x="12" y="14" width="18" height="18"/>
@@ -74,7 +62,7 @@
                             </userDefinedRuntimeAttributes>
                         </view>
                         <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="t4K-Qm-dNe">
-                            <rect key="frame" x="14" y="175" width="365" height="81"/>
+                            <rect key="frame" x="14" y="117" width="365" height="81"/>
                             <subviews>
                                 <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="course_duration_icon" translatesAutoresizingMaskIntoConstraints="NO" id="d2B-4E-Ya0">
                                     <rect key="frame" x="12" y="14" width="18" height="18"/>
@@ -118,7 +106,7 @@
                             </userDefinedRuntimeAttributes>
                         </view>
                         <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="gBS-cn-QZe">
-                            <rect key="frame" x="14" y="268" width="365" height="81"/>
+                            <rect key="frame" x="14" y="210" width="365" height="81"/>
                             <subviews>
                                 <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="course_price_icon" translatesAutoresizingMaskIntoConstraints="NO" id="VMb-PP-5Gb">
                                     <rect key="frame" x="12" y="14" width="18" height="18"/>
@@ -136,24 +124,39 @@
                                     <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                     <nil key="highlightedColor"/>
                                 </label>
-                                <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="200~500" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="79J-f2-acm">
-                                    <rect key="frame" x="12" y="43" width="75" height="26"/>
+                                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Cr4-IU-RQh">
+                                    <rect key="frame" x="12" y="45" width="75" height="26"/>
+                                    <subviews>
+                                        <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="200~500" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="79J-f2-acm">
+                                            <rect key="frame" x="5" y="0.0" width="70" height="26"/>
+                                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                            <textInputTraits key="textInputTraits" keyboardType="numberPad"/>
+                                            <userDefinedRuntimeAttributes>
+                                                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                                    <real key="value" value="4"/>
+                                                </userDefinedRuntimeAttribute>
+                                            </userDefinedRuntimeAttributes>
+                                        </textField>
+                                    </subviews>
                                     <color key="backgroundColor" red="0.97254901960784312" green="0.97254901960784312" blue="0.97254901960784312" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                     <constraints>
-                                        <constraint firstAttribute="height" constant="26" id="Jfc-fe-aBf"/>
-                                        <constraint firstAttribute="width" constant="75" id="T3J-gf-Vcm"/>
+                                        <constraint firstAttribute="trailing" secondItem="79J-f2-acm" secondAttribute="trailing" id="0Hz-ht-4Ce"/>
+                                        <constraint firstAttribute="height" constant="26" id="DX4-1C-FHE"/>
+                                        <constraint firstAttribute="width" constant="75" id="Dfs-eA-3O0"/>
+                                        <constraint firstItem="79J-f2-acm" firstAttribute="top" secondItem="Cr4-IU-RQh" secondAttribute="top" id="OwC-A6-pTi"/>
+                                        <constraint firstItem="79J-f2-acm" firstAttribute="leading" secondItem="Cr4-IU-RQh" secondAttribute="leading" constant="5" id="png-8j-nUR"/>
+                                        <constraint firstAttribute="bottom" secondItem="79J-f2-acm" secondAttribute="bottom" id="qB9-0n-FGu"/>
                                     </constraints>
-                                    <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
-                                    <textInputTraits key="textInputTraits" keyboardType="numberPad"/>
                                     <userDefinedRuntimeAttributes>
                                         <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
                                             <real key="value" value="4"/>
                                         </userDefinedRuntimeAttribute>
                                     </userDefinedRuntimeAttributes>
-                                </textField>
+                                </view>
                                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="元" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Nm5-9Z-1Nh">
-                                    <rect key="frame" x="100" y="46" width="16" height="20"/>
+                                    <rect key="frame" x="100" y="48" width="16" height="20"/>
                                     <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
                                     <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                     <nil key="highlightedColor"/>
@@ -164,12 +167,12 @@
                                 <constraint firstItem="VMb-PP-5Gb" firstAttribute="top" secondItem="gBS-cn-QZe" secondAttribute="top" constant="14" id="59c-F4-feV"/>
                                 <constraint firstItem="vK5-qa-MOt" firstAttribute="top" secondItem="gBS-cn-QZe" secondAttribute="top" constant="12" id="BtH-EM-rsc"/>
                                 <constraint firstItem="vK5-qa-MOt" firstAttribute="leading" secondItem="VMb-PP-5Gb" secondAttribute="trailing" constant="4" id="Bze-LU-S4C"/>
-                                <constraint firstItem="Nm5-9Z-1Nh" firstAttribute="centerY" secondItem="79J-f2-acm" secondAttribute="centerY" id="Erw-mp-9Xk"/>
-                                <constraint firstItem="79J-f2-acm" firstAttribute="top" secondItem="VMb-PP-5Gb" secondAttribute="bottom" constant="11" id="HYG-sL-AYR"/>
+                                <constraint firstItem="Cr4-IU-RQh" firstAttribute="leading" secondItem="gBS-cn-QZe" secondAttribute="leading" constant="12" id="Dpb-8T-1n6"/>
+                                <constraint firstItem="Nm5-9Z-1Nh" firstAttribute="leading" secondItem="Cr4-IU-RQh" secondAttribute="trailing" constant="13" id="PUR-iB-mBp"/>
                                 <constraint firstItem="VMb-PP-5Gb" firstAttribute="leading" secondItem="gBS-cn-QZe" secondAttribute="leading" constant="12" id="Wuq-xr-sqJ"/>
                                 <constraint firstAttribute="height" constant="81" id="YWC-3L-07Y"/>
-                                <constraint firstItem="79J-f2-acm" firstAttribute="leading" secondItem="gBS-cn-QZe" secondAttribute="leading" constant="12" id="n8Y-YQ-6i3"/>
-                                <constraint firstItem="Nm5-9Z-1Nh" firstAttribute="leading" secondItem="79J-f2-acm" secondAttribute="trailing" constant="13" id="yVA-6l-kKP"/>
+                                <constraint firstItem="Nm5-9Z-1Nh" firstAttribute="centerY" secondItem="Cr4-IU-RQh" secondAttribute="centerY" id="cAz-av-TSb"/>
+                                <constraint firstItem="Cr4-IU-RQh" firstAttribute="top" secondItem="vK5-qa-MOt" secondAttribute="bottom" constant="11" id="dFN-hp-k5b"/>
                             </constraints>
                             <userDefinedRuntimeAttributes>
                                 <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
@@ -178,7 +181,7 @@
                             </userDefinedRuntimeAttributes>
                         </view>
                         <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="HZy-FP-oUi">
-                            <rect key="frame" x="28" y="469" width="337" height="44"/>
+                            <rect key="frame" x="28" y="411" width="337" height="44"/>
                             <color key="backgroundColor" red="0.1764705882352941" green="0.7803921568627451" blue="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                             <constraints>
                                 <constraint firstAttribute="height" constant="44" id="zXM-Gn-Lug"/>
@@ -195,7 +198,7 @@
                             </connections>
                         </button>
                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" usesAttributedText="YES" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VEl-dh-zDQ">
-                            <rect key="frame" x="14" y="361" width="365" height="24"/>
+                            <rect key="frame" x="14" y="303" width="365" height="24"/>
                             <constraints>
                                 <constraint firstAttribute="height" constant="24" id="77a-du-4fi"/>
                             </constraints>
@@ -211,7 +214,7 @@
                             <nil key="highlightedColor"/>
                         </label>
                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" usesAttributedText="YES" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ob3-72-Iij">
-                            <rect key="frame" x="14" y="385" width="365" height="24"/>
+                            <rect key="frame" x="14" y="327" width="365" height="24"/>
                             <constraints>
                                 <constraint firstAttribute="height" constant="24" id="H1o-Ny-Lwz"/>
                             </constraints>
@@ -219,7 +222,7 @@
                                 <fragment content="您的课程预计收入为:单课时">
                                     <attributes>
                                         <color key="NSColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                        <font key="NSFont" size="14" name=".PingFangUITextSC-Regular"/>
+                                        <font key="NSFont" metaFont="system" size="14"/>
                                         <font key="NSOriginalFont" metaFont="system" size="14"/>
                                         <paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
                                     </attributes>
@@ -248,7 +251,7 @@
                                 <fragment content="元">
                                     <attributes>
                                         <color key="NSColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                        <font key="NSFont" size="14" name=".PingFangUITextSC-Regular"/>
+                                        <font key="NSFont" metaFont="system" size="14"/>
                                         <font key="NSOriginalFont" metaFont="system" size="14"/>
                                         <paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
                                     </attributes>
@@ -263,7 +266,7 @@
                                 <fragment content="节">
                                     <attributes>
                                         <color key="NSColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                                        <font key="NSFont" size="14" name=".PingFangUITextSC-Regular"/>
+                                        <font key="NSFont" metaFont="system" size="14"/>
                                         <font key="NSOriginalFont" metaFont="system" size="14"/>
                                         <paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
                                     </attributes>
@@ -272,7 +275,7 @@
                             <nil key="highlightedColor"/>
                         </label>
                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" usesAttributedText="YES" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="JtV-Fm-8Zn">
-                            <rect key="frame" x="14" y="409" width="365" height="24"/>
+                            <rect key="frame" x="14" y="351" width="365" height="24"/>
                             <constraints>
                                 <constraint firstAttribute="height" constant="24" id="0kZ-z0-Cm5"/>
                             </constraints>
@@ -288,7 +291,7 @@
                             <nil key="highlightedColor"/>
                         </label>
                         <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" usesAttributedText="YES" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="8cf-Hr-8hz">
-                            <rect key="frame" x="14" y="433" width="365" height="24"/>
+                            <rect key="frame" x="14" y="375" width="365" height="24"/>
                             <constraints>
                                 <constraint firstAttribute="height" constant="24" id="8qD-eD-KIP"/>
                             </constraints>
@@ -333,38 +336,25 @@
                             </attributedString>
                             <nil key="highlightedColor"/>
                         </label>
-                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="M6Q-RC-90f">
-                            <rect key="frame" x="349" y="0.0" width="44" height="58"/>
-                            <constraints>
-                                <constraint firstAttribute="width" constant="44" id="HCO-k3-nfU"/>
-                            </constraints>
-                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
-                            <connections>
-                                <action selector="cancelAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="q8r-dV-O3i"/>
-                            </connections>
-                        </button>
                     </subviews>
                     <color key="backgroundColor" red="0.97254901960784312" green="0.97647058823529409" blue="0.9882352941176471" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                     <constraints>
                         <constraint firstAttribute="trailing" secondItem="VEl-dh-zDQ" secondAttribute="trailing" constant="14" id="0Oe-OS-Uxx"/>
-                        <constraint firstAttribute="trailing" secondItem="c4f-Ul-Gwx" secondAttribute="trailing" constant="12" id="0i4-7j-CUf"/>
                         <constraint firstAttribute="trailing" secondItem="Z6O-VU-4de" secondAttribute="trailing" constant="14" id="27f-ig-the"/>
                         <constraint firstItem="Ob3-72-Iij" firstAttribute="leading" secondItem="AOD-2f-maw" secondAttribute="leading" constant="14" id="2bm-nq-gaN"/>
                         <constraint firstAttribute="trailing" secondItem="HZy-FP-oUi" secondAttribute="trailing" constant="28" id="3VL-Ip-h8E"/>
                         <constraint firstItem="gBS-cn-QZe" firstAttribute="top" secondItem="t4K-Qm-dNe" secondAttribute="bottom" constant="12" id="89c-fY-RMD"/>
                         <constraint firstItem="8cf-Hr-8hz" firstAttribute="top" secondItem="JtV-Fm-8Zn" secondAttribute="bottom" id="B0I-qm-xGg"/>
                         <constraint firstAttribute="trailing" secondItem="t4K-Qm-dNe" secondAttribute="trailing" constant="14" id="C7K-GU-Xc0"/>
+                        <constraint firstItem="Z6O-VU-4de" firstAttribute="top" secondItem="AOD-2f-maw" secondAttribute="top" id="CkY-SS-lOP"/>
                         <constraint firstAttribute="trailing" secondItem="JtV-Fm-8Zn" secondAttribute="trailing" constant="14" id="DEU-17-qda"/>
                         <constraint firstItem="8cf-Hr-8hz" firstAttribute="leading" secondItem="AOD-2f-maw" secondAttribute="leading" constant="14" id="Fhd-hY-e57"/>
                         <constraint firstItem="t4K-Qm-dNe" firstAttribute="top" secondItem="Z6O-VU-4de" secondAttribute="bottom" constant="12" id="GlB-qd-Izq"/>
                         <constraint firstItem="JtV-Fm-8Zn" firstAttribute="leading" secondItem="AOD-2f-maw" secondAttribute="leading" constant="14" id="HJ9-nE-bfI"/>
                         <constraint firstAttribute="trailing" secondItem="Ob3-72-Iij" secondAttribute="trailing" constant="14" id="LcB-LY-bdL"/>
                         <constraint firstItem="t4K-Qm-dNe" firstAttribute="leading" secondItem="AOD-2f-maw" secondAttribute="leading" constant="14" id="Rk1-Wb-6CP"/>
-                        <constraint firstItem="M6Q-RC-90f" firstAttribute="top" secondItem="AOD-2f-maw" secondAttribute="top" id="SkD-eP-SMJ"/>
                         <constraint firstItem="Z6O-VU-4de" firstAttribute="leading" secondItem="AOD-2f-maw" secondAttribute="leading" constant="14" id="Xnz-Vz-KKV"/>
                         <constraint firstAttribute="trailing" secondItem="gBS-cn-QZe" secondAttribute="trailing" constant="14" id="YiI-KQ-jVg"/>
-                        <constraint firstItem="c4f-Ul-Gwx" firstAttribute="top" secondItem="AOD-2f-maw" secondAttribute="top" constant="22" id="aqt-qB-7ct"/>
-                        <constraint firstAttribute="trailing" secondItem="M6Q-RC-90f" secondAttribute="trailing" id="dGe-lZ-v59"/>
                         <constraint firstItem="gBS-cn-QZe" firstAttribute="leading" secondItem="AOD-2f-maw" secondAttribute="leading" constant="14" id="dpj-t1-1MK"/>
                         <constraint firstItem="JtV-Fm-8Zn" firstAttribute="top" secondItem="Ob3-72-Iij" secondAttribute="bottom" id="fJG-5y-Zk4"/>
                         <constraint firstAttribute="trailing" secondItem="8cf-Hr-8hz" secondAttribute="trailing" constant="14" id="fnx-7y-SEd"/>
@@ -374,35 +364,32 @@
                         <constraint firstItem="VEl-dh-zDQ" firstAttribute="top" secondItem="gBS-cn-QZe" secondAttribute="bottom" constant="12" id="oSa-6A-gfB"/>
                         <constraint firstItem="HZy-FP-oUi" firstAttribute="top" secondItem="8cf-Hr-8hz" secondAttribute="bottom" constant="12" id="rPe-zz-IsM"/>
                         <constraint firstItem="VEl-dh-zDQ" firstAttribute="leading" secondItem="AOD-2f-maw" secondAttribute="leading" constant="14" id="tPw-d7-5Z0"/>
-                        <constraint firstItem="Z6O-VU-4de" firstAttribute="top" secondItem="4HD-ko-BI7" secondAttribute="bottom" constant="18" id="uFb-8o-fcq"/>
-                        <constraint firstItem="4HD-ko-BI7" firstAttribute="centerX" secondItem="AOD-2f-maw" secondAttribute="centerX" id="vba-GG-X7X"/>
-                        <constraint firstItem="4HD-ko-BI7" firstAttribute="top" secondItem="AOD-2f-maw" secondAttribute="top" constant="18" id="vlx-xK-Szh"/>
-                        <constraint firstItem="Z6O-VU-4de" firstAttribute="top" secondItem="M6Q-RC-90f" secondAttribute="bottom" id="z5V-eM-i4E"/>
                     </constraints>
                 </view>
             </subviews>
-            <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
+            <color key="backgroundColor" red="0.97254901960784312" green="0.97647058823529409" blue="0.9882352941176471" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
             <constraints>
                 <constraint firstAttribute="trailing" secondItem="AOD-2f-maw" secondAttribute="trailing" id="GxI-kK-atw"/>
                 <constraint firstItem="AOD-2f-maw" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="I5g-WO-kXQ"/>
-                <constraint firstAttribute="bottom" secondItem="AOD-2f-maw" secondAttribute="bottom" id="z3f-2l-9Au"/>
+                <constraint firstItem="AOD-2f-maw" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="j6v-Tp-2R5"/>
             </constraints>
             <nil key="simulatedTopBarMetrics"/>
             <nil key="simulatedBottomBarMetrics"/>
             <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
             <connections>
                 <outlet property="durationContainer" destination="rxq-ZU-nkf" id="hl9-ZB-u7j"/>
+                <outlet property="durationContainerHeight" destination="ooA-7L-hHZ" id="ByT-lR-Val"/>
                 <outlet property="priceTextField" destination="79J-f2-acm" id="PKK-S3-wXS"/>
                 <outlet property="subjectContainer" destination="4nG-HF-YhK" id="N9y-lr-HBR"/>
+                <outlet property="subjectContainerHeight" destination="yJD-Eb-G9D" id="zH7-mE-KHA"/>
             </connections>
-            <point key="canvasLocation" x="58.778625954198468" y="56.338028169014088"/>
+            <point key="canvasLocation" x="58.778625954198468" y="-31.338028169014088"/>
         </view>
     </objects>
     <resources>
         <image name="course_duration_icon" width="18" height="18"/>
         <image name="course_price_icon" width="18" height="18"/>
         <image name="course_subject_icon" width="18" height="18"/>
-        <image name="course_tips_del" width="14" height="14"/>
         <systemColor name="systemBackgroundColor">
             <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
         </systemColor>

+ 3 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VIPProgramCreate/MineVipProgramNavView.h

@@ -7,7 +7,7 @@
 
 #import <UIKit/UIKit.h>
 
-typedef void(^ProgramNavCallback)(BOOL isBack);
+typedef void(^ProgramNavCallback)(void);
 
 NS_ASSUME_NONNULL_BEGIN
 
@@ -15,6 +15,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 + (instancetype)sharedInstance;
 
+- (void)configTitle:(NSString *)title;
+
 - (void)navActionCallback:(ProgramNavCallback)callback;
 
 + (CGFloat)getViewHeight;

+ 7 - 6
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VIPProgramCreate/MineVipProgramNavView.m

@@ -9,6 +9,8 @@
 
 @interface MineVipProgramNavView ()
 
+@property (weak, nonatomic) IBOutlet UILabel *titleLabel;
+
 @property (nonatomic, copy) ProgramNavCallback callback;
 
 @end
@@ -26,18 +28,17 @@
     }
 }
 
-- (IBAction)backAction:(id)sender {
-    if (self.callback) {
-        self.callback(YES);
-    }
+- (void)configTitle:(NSString *)title {
+    self.titleLabel.text = title;
 }
 
-- (IBAction)showAlert:(id)sender {
+- (IBAction)backAction:(id)sender {
     if (self.callback) {
-        self.callback(NO);
+        self.callback();
     }
 }
 
+
 + (CGFloat)getViewHeight {
     return kNaviBarHeight;
 }

+ 7 - 27
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VIPProgramCreate/MineVipProgramNavView.xib

@@ -4,7 +4,6 @@
     <dependencies>
         <deployment identifier="iOS"/>
         <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23506"/>
-        <capability name="System colors in document resources" minToolsVersion="11.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -30,45 +29,27 @@
                                 <action selector="backAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="g1b-hj-Srg"/>
                             </connections>
                         </button>
-                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="VIP定制课设置" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="oLK-ro-388">
-                            <rect key="frame" x="136.66666666666666" y="11" width="119.99999999999997" height="22"/>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="设置VIP定制课" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="oLK-ro-388">
+                            <rect key="frame" x="135.66666666666666" y="11" width="121.66666666666666" height="22"/>
                             <fontDescription key="fontDescription" type="system" weight="medium" pointSize="18"/>
                             <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
                             <nil key="highlightedColor"/>
                         </label>
-                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="program_tips" translatesAutoresizingMaskIntoConstraints="NO" id="6Ge-Aj-t4I">
-                            <rect key="frame" x="358" y="12" width="20" height="20"/>
-                        </imageView>
-                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fJd-sn-j4n">
-                            <rect key="frame" x="349" y="0.0" width="44" height="44"/>
-                            <constraints>
-                                <constraint firstAttribute="width" constant="44" id="unj-Qa-f4i"/>
-                            </constraints>
-                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
-                            <connections>
-                                <action selector="showAlert:" destination="iN0-l3-epB" eventType="touchUpInside" id="c8Y-Ki-PXT"/>
-                            </connections>
-                        </button>
                     </subviews>
-                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                     <constraints>
                         <constraint firstItem="snd-KJ-Hzd" firstAttribute="leading" secondItem="bc8-oD-lqn" secondAttribute="leading" id="0OC-jk-nZd"/>
                         <constraint firstItem="oLK-ro-388" firstAttribute="centerY" secondItem="bc8-oD-lqn" secondAttribute="centerY" id="2C5-dW-BEo"/>
                         <constraint firstItem="snd-KJ-Hzd" firstAttribute="top" secondItem="bc8-oD-lqn" secondAttribute="top" id="4Z0-Er-nuF"/>
-                        <constraint firstItem="fJd-sn-j4n" firstAttribute="top" secondItem="bc8-oD-lqn" secondAttribute="top" id="5Ye-Pp-cNz"/>
                         <constraint firstItem="XN8-cR-W0z" firstAttribute="leading" secondItem="bc8-oD-lqn" secondAttribute="leading" constant="15" id="EYt-Au-4jZ"/>
                         <constraint firstAttribute="bottom" secondItem="snd-KJ-Hzd" secondAttribute="bottom" id="Ff6-PX-bm9"/>
-                        <constraint firstItem="6Ge-Aj-t4I" firstAttribute="centerY" secondItem="bc8-oD-lqn" secondAttribute="centerY" id="KYa-0O-7Pi"/>
-                        <constraint firstAttribute="bottom" secondItem="fJd-sn-j4n" secondAttribute="bottom" id="c2r-Qt-qEv"/>
-                        <constraint firstAttribute="trailing" secondItem="6Ge-Aj-t4I" secondAttribute="trailing" constant="15" id="dac-zh-8vR"/>
                         <constraint firstItem="XN8-cR-W0z" firstAttribute="centerY" secondItem="bc8-oD-lqn" secondAttribute="centerY" id="eD9-g7-IPT"/>
                         <constraint firstAttribute="height" constant="44" id="jAP-eQ-wgr"/>
                         <constraint firstItem="oLK-ro-388" firstAttribute="centerX" secondItem="bc8-oD-lqn" secondAttribute="centerX" id="qM6-qg-08d"/>
-                        <constraint firstAttribute="trailing" secondItem="fJd-sn-j4n" secondAttribute="trailing" id="tQI-Dh-INp"/>
                     </constraints>
                 </view>
             </subviews>
-            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <color key="backgroundColor" red="0.97254901960784312" green="0.97647058823529409" blue="0.9882352941176471" alpha="1" colorSpace="calibratedRGB"/>
             <constraints>
                 <constraint firstAttribute="trailing" secondItem="bc8-oD-lqn" secondAttribute="trailing" id="G8R-sJ-Jj2"/>
                 <constraint firstItem="bc8-oD-lqn" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="Zvb-DO-gbq"/>
@@ -77,14 +58,13 @@
             <nil key="simulatedTopBarMetrics"/>
             <nil key="simulatedBottomBarMetrics"/>
             <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="titleLabel" destination="oLK-ro-388" id="xrE-dc-N8c"/>
+            </connections>
             <point key="canvasLocation" x="58.778625954198468" y="55.985915492957751"/>
         </view>
     </objects>
     <resources>
         <image name="back_black" width="12" height="20"/>
-        <image name="program_tips" width="20" height="20"/>
-        <systemColor name="systemBackgroundColor">
-            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-        </systemColor>
     </resources>
 </document>

+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VIPProgramCreate/ProgramAddButton.h

@@ -16,7 +16,7 @@ NS_ASSUME_NONNULL_BEGIN
 
 @property (nonatomic, assign) BOOL isChoose;
 
-- (instancetype)sharedInstance;
++ (instancetype)sharedInstance;
 
 - (void)configWithTitle:(NSString *)title nomalBgColor:(UIColor *)nomalBgColor nomalTitleColor:(UIColor *)nomalTitleColor selectedBgColor:(UIColor *)selectedBgColor selectedTitleColor:(UIColor *)selectedTitleColor tag:(NSInteger)tagIndex;
 

+ 3 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VIPProgramCreate/ProgramAddButton.m

@@ -30,7 +30,7 @@
 @implementation ProgramAddButton
 
 
-- (instancetype)sharedInstance {
++ (instancetype)sharedInstance {
     ProgramAddButton *view = [[[NSBundle mainBundle] loadNibNamed:@"ProgramAddButton" owner:nil options:nil] firstObject];
     return view;
 }
@@ -42,6 +42,7 @@
     self.selectedBgColor = selectedBgColor;
     self.selectedTitleColor = selectedTitleColor;
     self.buttonIndex = tagIndex;
+    self.tag = tagIndex;
 }
 
 - (void)buttonActionCallback:(PraagamAddButtonCallback)callback {
@@ -51,6 +52,7 @@
     
 }
 - (IBAction)buttonAction:(id)sender {
+    
     if (self.callback) {
         self.callback(self.buttonIndex);
     }

+ 6 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VIPProgramCreate/ProgramAddButton.xib

@@ -45,6 +45,12 @@
                         <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
                             <real key="value" value="4"/>
                         </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
+                            <real key="value" value="1"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
+                            <color key="value" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                        </userDefinedRuntimeAttribute>
                     </userDefinedRuntimeAttributes>
                 </view>
             </subviews>

+ 1 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/VipCourse/MinePageVIPCourseView.m

@@ -238,6 +238,7 @@
 - (void)settingCourseAction {
     // 设置VIP课程方案
     MineVipProgramViewController *ctrl = [[MineVipProgramViewController alloc] init];
+    ctrl.isVipProgram = YES;
     [self.naviController pushViewController:ctrl animated:YES];
 }