Bläddra i källkod

课表日历控件调整

Steven 3 år sedan
förälder
incheckning
d4a50beb8f
100 ändrade filer med 4222 tillägg och 58 borttagningar
  1. 139 23
      KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj
  2. 1 1
      KulexiuForTeacher/KulexiuForTeacher.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/xcschememanagement.plist
  3. 8 0
      KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
  4. BIN
      KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/UserInterfaceState.xcuserstate
  5. 18 0
      KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/WorkspaceSettings.xcsettings
  6. 64 0
      KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
  7. 6 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/Contents.json
  8. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/arrow_down.imageset/Contents.json
  9. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/arrow_down.imageset/arrow_down@2x.png
  10. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/arrow_down.imageset/arrow_down@3x.png
  11. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/arrow_up.imageset/Contents.json
  12. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/arrow_up.imageset/arrow_up@2x.png
  13. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/arrow_up.imageset/arrow_up@3x.png
  14. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/course_chat.imageset/Contents.json
  15. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/course_chat.imageset/course_chat@2x.png
  16. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/course_chat.imageset/course_chat@3x.png
  17. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/course_time.imageset/Contents.json
  18. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/course_time.imageset/course_time@2x.png
  19. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/course_time.imageset/course_time@3x.png
  20. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/down_arrow.imageset/Contents.json
  21. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/down_arrow.imageset/down_arrow@2x.png
  22. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/down_arrow.imageset/down_arrow@3x.png
  23. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/up_arrow.imageset/Contents.json
  24. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/up_arrow.imageset/up_arrow@2x.png
  25. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/up_arrow.imageset/up_arrow@3x.png
  26. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/accompany_setting.imageset/Contents.json
  27. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/accompany_setting.imageset/accompany_setting@2x.png
  28. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/accompany_setting.imageset/accompany_setting@3x.png
  29. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/liveCourse_create.imageset/Contents.json
  30. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/liveCourse_create.imageset/liveCourse_create@2x.png
  31. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/liveCourse_create.imageset/liveCourse_create@3x.png
  32. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/videoCourse_create.imageset/Contents.json
  33. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/videoCourse_create.imageset/videoCourse_create@2x.png
  34. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Home/videoCourse_create.imageset/videoCourse_create@3x.png
  35. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/MinePage/mine_fans.imageset/Contents.json
  36. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/MinePage/mine_fans.imageset/mine_fans@2x.png
  37. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/MinePage/mine_fans.imageset/mine_fans@3x.png
  38. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/MinePage/mine_introduce.imageset/Contents.json
  39. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/MinePage/mine_introduce.imageset/mine_introduce@2x.png
  40. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/MinePage/mine_introduce.imageset/mine_introduce@3x.png
  41. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/MinePage/mine_video.imageset/Contents.json
  42. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/MinePage/mine_video.imageset/mine_video@2x.png
  43. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Mine/MinePage/mine_video.imageset/mine_video@3x.png
  44. 1 1
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.h
  45. 4 4
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.m
  46. 1 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Define/PrefixHeader.pch
  47. 18 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Tools/Category/UIView+SubViewExtension.h
  48. 18 0
      KulexiuForTeacher/KulexiuForTeacher/Common/Tools/Category/UIView+SubViewExtension.m
  49. 2 7
      KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Group/View/GroupSettingBodyView.m
  50. 1 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/Controller/NewClassRoomViewController.m
  51. 337 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Course/Controller/CourseViewController.m
  52. 21 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Course/View/CourseForLiveCell.h
  53. 42 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Course/View/CourseForLiveCell.m
  54. 219 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Course/View/CourseForLiveCell.xib
  55. 26 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Course/View/CourseNavView.h
  56. 43 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Course/View/CourseNavView.m
  57. 76 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Course/View/CourseNavView.xib
  58. 25 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Course/View/LTSCalendarBottomView.h
  59. 45 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Course/View/LTSCalendarBottomView.m
  60. 73 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Course/View/LTSCalendarBottomView.xib
  61. 1 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Music/Controller/MyMusicViewController.m
  62. 1 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Music/View/MusicMessageCell.m
  63. 2 2
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Music/View/MusicMessageCell.xib
  64. 2 2
      KulexiuForTeacher/KulexiuForTeacher/Module/Home/Music/View/MusicUploadView.xib
  65. 1 6
      KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/SeatContentView.m
  66. 3 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Controller/MineViewController.m
  67. 1 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/Controller/MinePageViewController.h
  68. 260 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/Controller/MinePageViewController.m
  69. 26 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/AccompanyCourseCell.h
  70. 47 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/AccompanyCourseCell.m
  71. 189 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/AccompanyCourseCell.xib
  72. 18 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/LiveCourseCell.h
  73. 37 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/LiveCourseCell.m
  74. 181 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/LiveCourseCell.xib
  75. 16 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineFansGroupCell.h
  76. 34 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineFansGroupCell.m
  77. 103 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineFansGroupCell.xib
  78. 18 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineIntroduceCell.h
  79. 41 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineIntroduceCell.m
  80. 138 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineIntroduceCell.xib
  81. 5 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageCourseView.h
  82. 338 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageCourseView.m
  83. 85 3
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageHeadView.m
  84. 7 2
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageHeadView.xib
  85. 3 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageMienBodyView.h
  86. 125 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageMienBodyView.m
  87. 19 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageMusicCell.h
  88. 102 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageMusicCell.m
  89. 145 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageMusicCell.xib
  90. 33 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageSubmitView.h
  91. 88 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageSubmitView.m
  92. 99 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageSubmitView.xib
  93. 19 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageVideoCell.h
  94. 43 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageVideoCell.m
  95. 139 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageVideoCell.xib
  96. 2 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageVideoView.h
  97. 272 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageVideoView.m
  98. 18 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineVideoCell.h
  99. 29 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineVideoCell.m
  100. 80 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineVideoCell.xib

+ 139 - 23
KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj

@@ -436,6 +436,12 @@
 		27FC2F6627F1BBFE00FCC239 /* MyMusicViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 27FC2F6527F1BBFE00FCC239 /* MyMusicViewController.m */; };
 		27FC2F6D27F1BE4800FCC239 /* VideoCourseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 27FC2F6C27F1BE4800FCC239 /* VideoCourseViewController.m */; };
 		BC6C303A27F586A60044BC0F /* KSRCMessageModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC6C303927F586A60044BC0F /* KSRCMessageModel.m */; };
+		BCB399AC27F946A200AFF376 /* CourseNavView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCB399AB27F946A200AFF376 /* CourseNavView.m */; };
+		BCB399AE27F946AA00AFF376 /* CourseNavView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCB399AD27F946AA00AFF376 /* CourseNavView.xib */; };
+		BCB399B227F94B5A00AFF376 /* LTSCalendarBottomView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCB399B027F94B5A00AFF376 /* LTSCalendarBottomView.m */; };
+		BCB399B327F94B5A00AFF376 /* LTSCalendarBottomView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCB399B127F94B5A00AFF376 /* LTSCalendarBottomView.xib */; };
+		BCB399BC27F9831D00AFF376 /* CourseForLiveCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BCB399BA27F9831D00AFF376 /* CourseForLiveCell.m */; };
+		BCB399BD27F9831D00AFF376 /* CourseForLiveCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCB399BB27F9831D00AFF376 /* CourseForLiveCell.xib */; };
 		BCB633F527F6A18200ACFDCF /* NewClassRoomViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BCB633D827F6A18100ACFDCF /* NewClassRoomViewController.m */; };
 		BCB633F627F6A18200ACFDCF /* LocalRenderManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BCB633DC27F6A18100ACFDCF /* LocalRenderManager.m */; };
 		BCB633F727F6A18200ACFDCF /* ClassroomTimerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BCB633DD27F6A18100ACFDCF /* ClassroomTimerManager.m */; };
@@ -522,6 +528,23 @@
 		BCC9F44927F69BD200647449 /* ClassroomService.m in Sources */ = {isa = PBXBuildFile; fileRef = BCC9F40027F69BD200647449 /* ClassroomService.m */; };
 		BCC9F44A27F69BD200647449 /* RTCService.m in Sources */ = {isa = PBXBuildFile; fileRef = BCC9F40227F69BD200647449 /* RTCService.m */; };
 		BCC9F44B27F69BD200647449 /* KSIMService.m in Sources */ = {isa = PBXBuildFile; fileRef = BCC9F40627F69BD200647449 /* KSIMService.m */; };
+		BCE6A07F27F7FACA00C97704 /* UIView+SubViewExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = BCE6A07E27F7FACA00C97704 /* UIView+SubViewExtension.m */; };
+		BCE6A08527F81B4200C97704 /* MinePageSubmitView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCE6A08427F81B4200C97704 /* MinePageSubmitView.m */; };
+		BCE6A08727F81B4D00C97704 /* MinePageSubmitView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCE6A08627F81B4D00C97704 /* MinePageSubmitView.xib */; };
+		BCE6A08B27F823A300C97704 /* AccompanyCourseCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BCE6A08927F823A300C97704 /* AccompanyCourseCell.m */; };
+		BCE6A08C27F823A300C97704 /* AccompanyCourseCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCE6A08A27F823A300C97704 /* AccompanyCourseCell.xib */; };
+		BCE6A09027F823BE00C97704 /* LiveCourseCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BCE6A08E27F823BE00C97704 /* LiveCourseCell.m */; };
+		BCE6A09127F823BE00C97704 /* LiveCourseCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCE6A08F27F823BE00C97704 /* LiveCourseCell.xib */; };
+		BCE6A09527F823DC00C97704 /* MinePageMusicCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BCE6A09327F823DC00C97704 /* MinePageMusicCell.m */; };
+		BCE6A09627F823DC00C97704 /* MinePageMusicCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCE6A09427F823DC00C97704 /* MinePageMusicCell.xib */; };
+		BCE6A09A27F83E8E00C97704 /* MinePageVideoCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BCE6A09827F83E8E00C97704 /* MinePageVideoCell.m */; };
+		BCE6A09B27F83E8E00C97704 /* MinePageVideoCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCE6A09927F83E8E00C97704 /* MinePageVideoCell.xib */; };
+		BCE6A09F27F84E4500C97704 /* MineIntroduceCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BCE6A09D27F84E4500C97704 /* MineIntroduceCell.m */; };
+		BCE6A0A027F84E4500C97704 /* MineIntroduceCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCE6A09E27F84E4500C97704 /* MineIntroduceCell.xib */; };
+		BCE6A0A427F8517900C97704 /* MineVideoCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BCE6A0A227F8517900C97704 /* MineVideoCell.m */; };
+		BCE6A0A527F8517900C97704 /* MineVideoCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCE6A0A327F8517900C97704 /* MineVideoCell.xib */; };
+		BCE6A0A927F852CD00C97704 /* MineFansGroupCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BCE6A0A727F852CD00C97704 /* MineFansGroupCell.m */; };
+		BCE6A0AA27F852CD00C97704 /* MineFansGroupCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCE6A0A827F852CD00C97704 /* MineFansGroupCell.xib */; };
 		BCF1BA5127F5C4DD00FA36C4 /* KSLiveChatroomMemberCount.m in Sources */ = {isa = PBXBuildFile; fileRef = BCF1BA5027F5C4DD00FA36C4 /* KSLiveChatroomMemberCount.m */; };
 		BCF1BA5427F5CB5800FA36C4 /* LiveSeatApplyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BCF1BA5327F5CB5800FA36C4 /* LiveSeatApplyView.m */; };
 		BCF1BA5627F5CBA100FA36C4 /* LiveSeatApplyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BCF1BA5527F5CBA100FA36C4 /* LiveSeatApplyView.xib */; };
@@ -1337,6 +1360,15 @@
 		AC7237F12804B8A0533DF9FE /* Pods-KulexiuForTeacher.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-KulexiuForTeacher.debug.xcconfig"; path = "Target Support Files/Pods-KulexiuForTeacher/Pods-KulexiuForTeacher.debug.xcconfig"; sourceTree = "<group>"; };
 		BC6C303827F586A60044BC0F /* KSRCMessageModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSRCMessageModel.h; sourceTree = "<group>"; };
 		BC6C303927F586A60044BC0F /* KSRCMessageModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSRCMessageModel.m; sourceTree = "<group>"; };
+		BCB399AA27F946A200AFF376 /* CourseNavView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CourseNavView.h; sourceTree = "<group>"; };
+		BCB399AB27F946A200AFF376 /* CourseNavView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CourseNavView.m; sourceTree = "<group>"; };
+		BCB399AD27F946AA00AFF376 /* CourseNavView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CourseNavView.xib; sourceTree = "<group>"; };
+		BCB399AF27F94B5A00AFF376 /* LTSCalendarBottomView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LTSCalendarBottomView.h; sourceTree = "<group>"; };
+		BCB399B027F94B5A00AFF376 /* LTSCalendarBottomView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LTSCalendarBottomView.m; sourceTree = "<group>"; };
+		BCB399B127F94B5A00AFF376 /* LTSCalendarBottomView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LTSCalendarBottomView.xib; sourceTree = "<group>"; };
+		BCB399B927F9831D00AFF376 /* CourseForLiveCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CourseForLiveCell.h; sourceTree = "<group>"; };
+		BCB399BA27F9831D00AFF376 /* CourseForLiveCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CourseForLiveCell.m; sourceTree = "<group>"; };
+		BCB399BB27F9831D00AFF376 /* CourseForLiveCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CourseForLiveCell.xib; sourceTree = "<group>"; };
 		BCB633D727F6A18100ACFDCF /* NewClassRoomViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NewClassRoomViewController.h; sourceTree = "<group>"; };
 		BCB633D827F6A18100ACFDCF /* NewClassRoomViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NewClassRoomViewController.m; sourceTree = "<group>"; };
 		BCB633DA27F6A18100ACFDCF /* LocalRenderManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocalRenderManager.h; sourceTree = "<group>"; };
@@ -1509,6 +1541,32 @@
 		BCC9F40327F69BD200647449 /* RTCService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCService.h; sourceTree = "<group>"; };
 		BCC9F40527F69BD200647449 /* KSIMService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KSIMService.h; sourceTree = "<group>"; };
 		BCC9F40627F69BD200647449 /* KSIMService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = KSIMService.m; sourceTree = "<group>"; };
+		BCE6A07D27F7FACA00C97704 /* UIView+SubViewExtension.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIView+SubViewExtension.h"; sourceTree = "<group>"; };
+		BCE6A07E27F7FACA00C97704 /* UIView+SubViewExtension.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIView+SubViewExtension.m"; sourceTree = "<group>"; };
+		BCE6A08327F81B4200C97704 /* MinePageSubmitView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MinePageSubmitView.h; sourceTree = "<group>"; };
+		BCE6A08427F81B4200C97704 /* MinePageSubmitView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MinePageSubmitView.m; sourceTree = "<group>"; };
+		BCE6A08627F81B4D00C97704 /* MinePageSubmitView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MinePageSubmitView.xib; sourceTree = "<group>"; };
+		BCE6A08827F823A300C97704 /* AccompanyCourseCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AccompanyCourseCell.h; sourceTree = "<group>"; };
+		BCE6A08927F823A300C97704 /* AccompanyCourseCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AccompanyCourseCell.m; sourceTree = "<group>"; };
+		BCE6A08A27F823A300C97704 /* AccompanyCourseCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AccompanyCourseCell.xib; sourceTree = "<group>"; };
+		BCE6A08D27F823BE00C97704 /* LiveCourseCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LiveCourseCell.h; sourceTree = "<group>"; };
+		BCE6A08E27F823BE00C97704 /* LiveCourseCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LiveCourseCell.m; sourceTree = "<group>"; };
+		BCE6A08F27F823BE00C97704 /* LiveCourseCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = LiveCourseCell.xib; sourceTree = "<group>"; };
+		BCE6A09227F823DC00C97704 /* MinePageMusicCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MinePageMusicCell.h; sourceTree = "<group>"; };
+		BCE6A09327F823DC00C97704 /* MinePageMusicCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MinePageMusicCell.m; sourceTree = "<group>"; };
+		BCE6A09427F823DC00C97704 /* MinePageMusicCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MinePageMusicCell.xib; sourceTree = "<group>"; };
+		BCE6A09727F83E8E00C97704 /* MinePageVideoCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MinePageVideoCell.h; sourceTree = "<group>"; };
+		BCE6A09827F83E8E00C97704 /* MinePageVideoCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MinePageVideoCell.m; sourceTree = "<group>"; };
+		BCE6A09927F83E8E00C97704 /* MinePageVideoCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MinePageVideoCell.xib; sourceTree = "<group>"; };
+		BCE6A09C27F84E4500C97704 /* MineIntroduceCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MineIntroduceCell.h; sourceTree = "<group>"; };
+		BCE6A09D27F84E4500C97704 /* MineIntroduceCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MineIntroduceCell.m; sourceTree = "<group>"; };
+		BCE6A09E27F84E4500C97704 /* MineIntroduceCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MineIntroduceCell.xib; sourceTree = "<group>"; };
+		BCE6A0A127F8517900C97704 /* MineVideoCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MineVideoCell.h; sourceTree = "<group>"; };
+		BCE6A0A227F8517900C97704 /* MineVideoCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MineVideoCell.m; sourceTree = "<group>"; };
+		BCE6A0A327F8517900C97704 /* MineVideoCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MineVideoCell.xib; sourceTree = "<group>"; };
+		BCE6A0A627F852CD00C97704 /* MineFansGroupCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MineFansGroupCell.h; sourceTree = "<group>"; };
+		BCE6A0A727F852CD00C97704 /* MineFansGroupCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MineFansGroupCell.m; sourceTree = "<group>"; };
+		BCE6A0A827F852CD00C97704 /* MineFansGroupCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MineFansGroupCell.xib; sourceTree = "<group>"; };
 		BCF1BA4F27F5C4DD00FA36C4 /* KSLiveChatroomMemberCount.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KSLiveChatroomMemberCount.h; sourceTree = "<group>"; };
 		BCF1BA5027F5C4DD00FA36C4 /* KSLiveChatroomMemberCount.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KSLiveChatroomMemberCount.m; sourceTree = "<group>"; };
 		BCF1BA5227F5CB5800FA36C4 /* LiveSeatApplyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LiveSeatApplyView.h; sourceTree = "<group>"; };
@@ -1807,6 +1865,30 @@
 				27D83F3E27F3EA8A00062476 /* MinePageCourseView.m */,
 				27D83F4027F3EAA700062476 /* MinePageVideoView.h */,
 				27D83F4127F3EAA700062476 /* MinePageVideoView.m */,
+				BCE6A08327F81B4200C97704 /* MinePageSubmitView.h */,
+				BCE6A08427F81B4200C97704 /* MinePageSubmitView.m */,
+				BCE6A08627F81B4D00C97704 /* MinePageSubmitView.xib */,
+				BCE6A09C27F84E4500C97704 /* MineIntroduceCell.h */,
+				BCE6A09D27F84E4500C97704 /* MineIntroduceCell.m */,
+				BCE6A09E27F84E4500C97704 /* MineIntroduceCell.xib */,
+				BCE6A0A127F8517900C97704 /* MineVideoCell.h */,
+				BCE6A0A227F8517900C97704 /* MineVideoCell.m */,
+				BCE6A0A327F8517900C97704 /* MineVideoCell.xib */,
+				BCE6A0A627F852CD00C97704 /* MineFansGroupCell.h */,
+				BCE6A0A727F852CD00C97704 /* MineFansGroupCell.m */,
+				BCE6A0A827F852CD00C97704 /* MineFansGroupCell.xib */,
+				BCE6A08827F823A300C97704 /* AccompanyCourseCell.h */,
+				BCE6A08927F823A300C97704 /* AccompanyCourseCell.m */,
+				BCE6A08A27F823A300C97704 /* AccompanyCourseCell.xib */,
+				BCE6A08D27F823BE00C97704 /* LiveCourseCell.h */,
+				BCE6A08E27F823BE00C97704 /* LiveCourseCell.m */,
+				BCE6A08F27F823BE00C97704 /* LiveCourseCell.xib */,
+				BCE6A09727F83E8E00C97704 /* MinePageVideoCell.h */,
+				BCE6A09827F83E8E00C97704 /* MinePageVideoCell.m */,
+				BCE6A09927F83E8E00C97704 /* MinePageVideoCell.xib */,
+				BCE6A09227F823DC00C97704 /* MinePageMusicCell.h */,
+				BCE6A09327F823DC00C97704 /* MinePageMusicCell.m */,
+				BCE6A09427F823DC00C97704 /* MinePageMusicCell.xib */,
 			);
 			path = View;
 			sourceTree = "<group>";
@@ -2065,6 +2147,8 @@
 				277930C627E30FBD0010E277 /* UIView+XIBView.m */,
 				277930D927E30FBD0010E277 /* UrlDecode.h */,
 				277930C827E30FBD0010E277 /* UrlDecode.m */,
+				BCE6A07D27F7FACA00C97704 /* UIView+SubViewExtension.h */,
+				BCE6A07E27F7FACA00C97704 /* UIView+SubViewExtension.m */,
 			);
 			path = Category;
 			sourceTree = "<group>";
@@ -2375,37 +2459,37 @@
 		2779324327E30FD70010E277 /* FSCalendar */ = {
 			isa = PBXGroup;
 			children = (
-				2779324427E30FD70010E277 /* FSCalendarCollectionView.m */,
-				2779324527E30FD70010E277 /* FSCalendarWeekdayView.h */,
-				2779324627E30FD70010E277 /* FSCalendarCollectionViewLayout.h */,
-				2779324727E30FD70010E277 /* FSCalendarDelegationProxy.m */,
-				2779324827E30FD70010E277 /* FSCalendarExtensions.h */,
-				2779324927E30FD70010E277 /* FSCalendarDelegationFactory.m */,
-				2779324A27E30FD70010E277 /* FSCalendarSeparatorDecorationView.h */,
-				2779324B27E30FD70010E277 /* FSCalendarCalculator.h */,
-				2779324C27E30FD70010E277 /* FSCalendarHeaderView.h */,
-				2779324D27E30FD70010E277 /* FSCalendarConstants.h */,
+				2779325F27E30FD70010E277 /* FSCalendar.h */,
+				2779325227E30FD70010E277 /* FSCalendar.m */,
 				2779324E27E30FD70010E277 /* FSCalendarAppearance.h */,
-				2779324F27E30FD70010E277 /* FSCalendarTransitionCoordinator.h */,
+				2779326227E30FD70010E277 /* FSCalendarAppearance.m */,
+				2779324B27E30FD70010E277 /* FSCalendarCalculator.h */,
+				2779325C27E30FD70010E277 /* FSCalendarCalculator.m */,
+				2779326027E30FD70010E277 /* FSCalendarCell.h */,
 				2779325027E30FD70010E277 /* FSCalendarCell.m */,
-				2779325127E30FD70010E277 /* FSCalendarStickyHeader.m */,
-				2779325227E30FD70010E277 /* FSCalendar.m */,
-				2779325327E30FD70010E277 /* FSCalendarCollectionViewLayout.m */,
-				2779325427E30FD70010E277 /* FSCalendarWeekdayView.m */,
 				2779325527E30FD70010E277 /* FSCalendarCollectionView.h */,
-				2779325627E30FD70010E277 /* FSCalendarDynamicHeader.h */,
-				2779325727E30FD70010E277 /* FSCalendarSeparatorDecorationView.m */,
+				2779324427E30FD70010E277 /* FSCalendarCollectionView.m */,
+				2779324627E30FD70010E277 /* FSCalendarCollectionViewLayout.h */,
+				2779325327E30FD70010E277 /* FSCalendarCollectionViewLayout.m */,
+				2779324D27E30FD70010E277 /* FSCalendarConstants.h */,
+				2779325B27E30FD70010E277 /* FSCalendarConstants.m */,
 				2779325827E30FD70010E277 /* FSCalendarDelegationFactory.h */,
-				2779325927E30FD70010E277 /* FSCalendarExtensions.m */,
+				2779324927E30FD70010E277 /* FSCalendarDelegationFactory.m */,
 				2779325A27E30FD70010E277 /* FSCalendarDelegationProxy.h */,
-				2779325B27E30FD70010E277 /* FSCalendarConstants.m */,
-				2779325C27E30FD70010E277 /* FSCalendarCalculator.m */,
+				2779324727E30FD70010E277 /* FSCalendarDelegationProxy.m */,
+				2779325627E30FD70010E277 /* FSCalendarDynamicHeader.h */,
+				2779324827E30FD70010E277 /* FSCalendarExtensions.h */,
+				2779325927E30FD70010E277 /* FSCalendarExtensions.m */,
+				2779324C27E30FD70010E277 /* FSCalendarHeaderView.h */,
 				2779325D27E30FD70010E277 /* FSCalendarHeaderView.m */,
+				2779324A27E30FD70010E277 /* FSCalendarSeparatorDecorationView.h */,
+				2779325727E30FD70010E277 /* FSCalendarSeparatorDecorationView.m */,
 				2779325E27E30FD70010E277 /* FSCalendarStickyHeader.h */,
-				2779325F27E30FD70010E277 /* FSCalendar.h */,
-				2779326027E30FD70010E277 /* FSCalendarCell.h */,
+				2779325127E30FD70010E277 /* FSCalendarStickyHeader.m */,
+				2779324F27E30FD70010E277 /* FSCalendarTransitionCoordinator.h */,
 				2779326127E30FD70010E277 /* FSCalendarTransitionCoordinator.m */,
-				2779326227E30FD70010E277 /* FSCalendarAppearance.m */,
+				2779324527E30FD70010E277 /* FSCalendarWeekdayView.h */,
+				2779325427E30FD70010E277 /* FSCalendarWeekdayView.m */,
 			);
 			path = FSCalendar;
 			sourceTree = "<group>";
@@ -2841,6 +2925,15 @@
 		2779360927E32BBF0010E277 /* View */ = {
 			isa = PBXGroup;
 			children = (
+				BCB399AA27F946A200AFF376 /* CourseNavView.h */,
+				BCB399AB27F946A200AFF376 /* CourseNavView.m */,
+				BCB399AD27F946AA00AFF376 /* CourseNavView.xib */,
+				BCB399AF27F94B5A00AFF376 /* LTSCalendarBottomView.h */,
+				BCB399B027F94B5A00AFF376 /* LTSCalendarBottomView.m */,
+				BCB399B127F94B5A00AFF376 /* LTSCalendarBottomView.xib */,
+				BCB399B927F9831D00AFF376 /* CourseForLiveCell.h */,
+				BCB399BA27F9831D00AFF376 /* CourseForLiveCell.m */,
+				BCB399BB27F9831D00AFF376 /* CourseForLiveCell.xib */,
 			);
 			path = View;
 			sourceTree = "<group>";
@@ -3834,10 +3927,12 @@
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				BCE6A0A027F84E4500C97704 /* MineIntroduceCell.xib in Resources */,
 				2728086C27E6C12900DB71EA /* FirstSettingBodyView.xib in Resources */,
 				275E8A7727E18F2800DD3F6E /* LaunchScreen.storyboard in Resources */,
 				277932EA27E310070010E277 /* TZImagePickerController.bundle in Resources */,
 				277932B427E30FFE0010E277 /* SDQWMaskCustomView.xib in Resources */,
+				BCE6A09127F823BE00C97704 /* LiveCourseCell.xib in Resources */,
 				275B172B27EB269F0081FDEF /* ChatAddressHeaderView.xib in Resources */,
 				275FA56427F31AEE00EB6240 /* MinePageHeadView.xib in Resources */,
 				275B173127EB27960081FDEF /* GroupCreateView.xib in Resources */,
@@ -3857,9 +3952,12 @@
 				2708565E27EDA83100EC8E72 /* GroupMemberListCell.xib in Resources */,
 				2780A06627E81E5E00447CFD /* MineNavView.xib in Resources */,
 				27A2F62A27E6C996009E2380 /* KSImageAlert.xib in Resources */,
+				BCE6A0AA27F852CD00C97704 /* MineFansGroupCell.xib in Resources */,
+				BCB399B327F94B5A00AFF376 /* LTSCalendarBottomView.xib in Resources */,
 				2708565327ED8B8C00EC8E72 /* GroupApplyChooseAllCell.xib in Resources */,
 				275E3DEE27F467BF0010EC30 /* LiveRoomBottomView.xib in Resources */,
 				27BC3B2B27F2DB9600D81E30 /* MusicUploadView.xib in Resources */,
+				BCE6A09B27F83E8E00C97704 /* MinePageVideoCell.xib in Resources */,
 				2723B68E27F1686100E0B90B /* HomeNavView.xib in Resources */,
 				275E3DE927F4679E0010EC30 /* LiveRoomHeadView.xib in Resources */,
 				27D83F4E27F3EC2100062476 /* CreateLiveBodyView.xib in Resources */,
@@ -3873,11 +3971,16 @@
 				277D433127E9A50800107DB7 /* PhoneCheckBodyView.xib in Resources */,
 				BCF1BA5627F5CBA100FA36C4 /* LiveSeatApplyView.xib in Resources */,
 				2708565927ED961900EC8E72 /* ApplyBottomView.xib in Resources */,
+				BCB399AE27F946AA00AFF376 /* CourseNavView.xib in Resources */,
 				275B170D27EB14AC0081FDEF /* KSChatListSearchView.xib in Resources */,
 				27D83F5927F4225D00062476 /* LivePreviewBodyView.xib in Resources */,
 				2779362E27E33C360010E277 /* LoginBodyView.xib in Resources */,
+				BCB399BD27F9831D00AFF376 /* CourseForLiveCell.xib in Resources */,
 				2723B68927F1643B00E0B90B /* HomeBodyView.xib in Resources */,
+				BCE6A0A527F8517900C97704 /* MineVideoCell.xib in Resources */,
 				BCC9F40727F69BD200647449 /* SealClass.strings in Resources */,
+				BCE6A08C27F823A300C97704 /* AccompanyCourseCell.xib in Resources */,
+				BCE6A08727F81B4D00C97704 /* MinePageSubmitView.xib in Resources */,
 				27A54CF927E9BD8B007309A3 /* FeedbackBodyView.xib in Resources */,
 				BCB6340527F6A2F000ACFDCF /* tock.wav in Resources */,
 				BCB6340627F6A2F000ACFDCF /* tick.wav in Resources */,
@@ -3885,6 +3988,7 @@
 				BCF1BA5B27F5CF3C00FA36C4 /* LiveSeatApplyCell.xib in Resources */,
 				2780C92427E4903500A95A4F /* PasswordBodyView.xib in Resources */,
 				27F902FF27E864AE00C08A19 /* KSNetworkAlert.xib in Resources */,
+				BCE6A09627F823DC00C97704 /* MinePageMusicCell.xib in Resources */,
 				277D431F27E999A000107DB7 /* ModifyBodyView.xib in Resources */,
 				27A54CFE27E9BDC5007309A3 /* AboutUsBodyView.xib in Resources */,
 				2779329827E30FEB0010E277 /* mss_browseLoading@3x.png in Resources */,
@@ -3978,6 +4082,7 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				BCE6A08527F81B4200C97704 /* MinePageSubmitView.m in Sources */,
 				2779323227E30FC30010E277 /* ALCalendarManager.m in Sources */,
 				2779326F27E30FD80010E277 /* FSCalendarHeaderView.m in Sources */,
 				275E3DF727F467ED0010EC30 /* LiveRoomLikeLayer.m in Sources */,
@@ -4071,19 +4176,23 @@
 				27F9CAF727EC1A16003E0FE4 /* UITableView+SCIndexView.m in Sources */,
 				275E3DC827F460720010EC30 /* KSLiveChatroomKickOut.m in Sources */,
 				2779361B27E32C3A0010E277 /* MineViewController.m in Sources */,
+				BCE6A09027F823BE00C97704 /* LiveCourseCell.m in Sources */,
 				27A54D0127E9CD38007309A3 /* AddressViewController.m in Sources */,
+				BCE6A07F27F7FACA00C97704 /* UIView+SubViewExtension.m in Sources */,
 				2779321B27E30FC30010E277 /* SearchView.m in Sources */,
 				2708565227ED8B8C00EC8E72 /* GroupApplyChooseAllCell.m in Sources */,
 				277932BC27E30FFE0010E277 /* TAAbstractDotView.m in Sources */,
 				277931D927E30FC20010E277 /* NSObject+AutoProperty.m in Sources */,
 				2779324127E30FC30010E277 /* VoNetWorking.m in Sources */,
 				275E3DF127F467D80010EC30 /* SeatContentView.m in Sources */,
+				BCE6A09F27F84E4500C97704 /* MineIntroduceCell.m in Sources */,
 				BCF1BA5A27F5CF3C00FA36C4 /* LiveSeatApplyCell.m in Sources */,
 				BCC9F43527F69BD200647449 /* DisplayCommandMessage.m in Sources */,
 				BCC9F43F27F69BD200647449 /* DeviceMessage.m in Sources */,
 				275E3DD127F463140010EC30 /* KSLiveChatroomSeatApply.m in Sources */,
 				2779322427E30FC30010E277 /* ShopButton.m in Sources */,
 				277932EC27E310070010E277 /* TZImageManager.m in Sources */,
+				BCE6A0A927F852CD00C97704 /* MineFansGroupCell.m in Sources */,
 				2779323727E30FC30010E277 /* LLFileManager.m in Sources */,
 				27F902F127E8614D00C08A19 /* SettingViewController.m in Sources */,
 				BCB633FF27F6A18200ACFDCF /* MainToolView.m in Sources */,
@@ -4130,6 +4239,7 @@
 				BCC9F44B27F69BD200647449 /* KSIMService.m in Sources */,
 				277931C027E30FC20010E277 /* ArchiveTools.m in Sources */,
 				277931FA27E30FC20010E277 /* CALayer+Layout.m in Sources */,
+				BCE6A09A27F83E8E00C97704 /* MinePageVideoCell.m in Sources */,
 				BCC9F41A27F69BD200647449 /* VideoListView.m in Sources */,
 				27F9030027E864AE00C08A19 /* NetworkBodyView.m in Sources */,
 				BCC9F40927F69BD200647449 /* ZoomControl.m in Sources */,
@@ -4160,6 +4270,7 @@
 				27D83F4227F3EAA700062476 /* MinePageVideoView.m in Sources */,
 				BCC9F44127F69BD200647449 /* ApplySpeechResultMessage.m in Sources */,
 				BCC9F42427F69BD200647449 /* VideoMaskView.m in Sources */,
+				BCB399BC27F9831D00AFF376 /* CourseForLiveCell.m in Sources */,
 				277932F127E310070010E277 /* TZLocationManager.m in Sources */,
 				BCB633FA27F6A18200ACFDCF /* KSBeatView.m in Sources */,
 				275B172227EB1BE60081FDEF /* KSRCSearchBar.m in Sources */,
@@ -4250,6 +4361,7 @@
 				BCC9F43827F69BD200647449 /* TicketExpiredMessage.m in Sources */,
 				2779336027E31CB40010E277 /* UIView+KSExtension.m in Sources */,
 				2779321C27E30FC30010E277 /* prodectButton.m in Sources */,
+				BCE6A08B27F823A300C97704 /* AccompanyCourseCell.m in Sources */,
 				BCC9F42627F69BD200647449 /* KSWhiteboardView.m in Sources */,
 				27F9CAEA27EC1780003E0FE4 /* KSJXBodyView.m in Sources */,
 				BCB633F827F6A18200ACFDCF /* KSTipsView.m in Sources */,
@@ -4350,6 +4462,7 @@
 				27A2F62D27E70D0A009E2380 /* UserInfoManager.m in Sources */,
 				BCF1BA5427F5CB5800FA36C4 /* LiveSeatApplyView.m in Sources */,
 				BCC9F41327F69BD200647449 /* MessageDataSource.m in Sources */,
+				BCE6A0A427F8517900C97704 /* MineVideoCell.m in Sources */,
 				277932F327E310070010E277 /* TZImageRequestOperation.m in Sources */,
 				BCC9F43B27F69BD200647449 /* AssistantTransferMessage.m in Sources */,
 				277932BA27E30FFE0010E277 /* TAPageControl.m in Sources */,
@@ -4361,6 +4474,7 @@
 				2779335827E316DD0010E277 /* FastForwardView.m in Sources */,
 				277935DC27E326650010E277 /* RecordCheckManager.m in Sources */,
 				275E3DB327F45D380010EC30 /* KSLiveChatroomDownSeat.m in Sources */,
+				BCB399AC27F946A200AFF376 /* CourseNavView.m in Sources */,
 				BCC9F41E27F69BD200647449 /* UpgradeDidApplyView.m in Sources */,
 				275B16FA27EB08230081FDEF /* CreateFansGroupViewController.m in Sources */,
 				BCC9F43927F69BD200647449 /* WhiteboardMessage.m in Sources */,
@@ -4402,11 +4516,13 @@
 				277931C427E30FC20010E277 /* NSMutableArray+KSSafe.m in Sources */,
 				275B172127EB1BE60081FDEF /* KSSearchResultViewCell.m in Sources */,
 				277931C327E30FC20010E277 /* NSArray+KSSafe.m in Sources */,
+				BCE6A09527F823DC00C97704 /* MinePageMusicCell.m in Sources */,
 				27D83F3F27F3EA8A00062476 /* MinePageCourseView.m in Sources */,
 				BCC9F41D27F69BD200647449 /* RecentSharedVideoCell.m in Sources */,
 				2779331D27E311A10010E277 /* KSNetworkingManager.m in Sources */,
 				2779362C27E33C2B0010E277 /* LoginBodyView.m in Sources */,
 				277931DD27E30FC20010E277 /* UIImage+Resize.m in Sources */,
+				BCB399B227F94B5A00AFF376 /* LTSCalendarBottomView.m in Sources */,
 				275E3DA327F441EC0010EC30 /* KSEnterLiveroomManager.m in Sources */,
 				2779323327E30FC30010E277 /* StateView.m in Sources */,
 				275E3DE427F467410010EC30 /* KSChatInputBarControl.m in Sources */,

+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher.xcodeproj/xcuserdata/wangzhi.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -7,7 +7,7 @@
 		<key>KulexiuForTeacher.xcscheme_^#shared#^_</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>25</integer>
+			<integer>16</integer>
 		</dict>
 	</dict>
 </dict>

+ 8 - 0
KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>PreviewsEnabled</key>
+	<false/>
+</dict>
+</plist>

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


+ 18 - 0
KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/WorkspaceSettings.xcsettings

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>BuildLocationStyle</key>
+	<string>UseTargetSettings</string>
+	<key>CustomBuildLocationType</key>
+	<string>RelativeToDerivedData</string>
+	<key>DerivedDataLocationStyle</key>
+	<string>Default</string>
+	<key>IssueFilterStyle</key>
+	<string>ShowActiveSchemeOnly</string>
+	<key>LiveSourceIssuesEnabled</key>
+	<true/>
+	<key>ShowSharedSchemesAutomaticallyEnabled</key>
+	<true/>
+</dict>
+</plist>

+ 64 - 0
KulexiuForTeacher/KulexiuForTeacher.xcworkspace/xcuserdata/wangzhi.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -52,5 +52,69 @@
             landmarkType = "7">
          </BreakpointContent>
       </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "72E23352-A316-4517-8337-A8346A67E0E8"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForTeacher/Module/Mine/VideoCourse/View/VideoListBodyView.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "98"
+            endingLineNumber = "98"
+            landmarkName = "-requestData"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "4D592ED6-9698-4815-861C-E9010F16CA8B"
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForTeacher/Module/Mine/VideoCourse/Controller/VideoCourseViewController.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "49"
+            endingLineNumber = "49"
+            landmarkName = "-configUI"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "E0C1263F-8FA9-46A8-BB40-062478B36981"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForTeacher/Common/ThirdPart/FSCalendar/FSCalendarCell.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "270"
+            endingLineNumber = "270"
+            landmarkName = "-colorForCurrentStateInDictionary:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "080FF14A-F403-4423-AA87-DBB74590AE5E"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "KulexiuForTeacher/Common/ThirdPart/FSCalendar/FSCalendar.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "1417"
+            endingLineNumber = "1417"
+            landmarkName = "-reloadDataForCell:atIndexPath:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
    </Breakpoints>
 </Bucket>

+ 6 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/Contents.json

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

+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/arrow_down.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/arrow_down.imageset/arrow_down@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/arrow_down.imageset/arrow_down@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/arrow_up.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/arrow_up.imageset/arrow_up@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/arrow_up.imageset/arrow_up@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/course_chat.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/course_chat.imageset/course_chat@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/course_chat.imageset/course_chat@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/course_time.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/course_time.imageset/course_time@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/course_time.imageset/course_time@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/down_arrow.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/down_arrow.imageset/down_arrow@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/down_arrow.imageset/down_arrow@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/up_arrow.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/up_arrow.imageset/up_arrow@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Course/up_arrow.imageset/up_arrow@3x.png


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

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

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


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


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

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

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


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


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

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

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


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


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

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

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


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


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

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

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


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


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

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

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


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


+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.h

@@ -394,7 +394,7 @@ NS_ASSUME_NONNULL_BEGIN
 + (void)imGroupNoticeDelRequest:(NSString *)post noticeID:(NSString *)noticeID success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
 
 #pragma mark ----- 视频课相关
-// /api-admin/video/lesson/group/list
+// /api-teacher/videoLessonGroup/page
 // 视频课列表查询
 
 /// 视频课列表查询

+ 4 - 4
KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.m

@@ -881,7 +881,7 @@
 }
 
 #pragma mark ----- 视频课相关
-// /api-admin/video/lesson/group/list
+// /api-teacher/videoLessonGroup/page
 // 视频课列表查询
 
 /// 视频课列表查询
@@ -893,11 +893,11 @@
 /// @param faliure 失败
 + (void)videoLessonListRequest:(NSString *)post auditStatus:(NSString *)auditStatus pageNo:(NSInteger)pageNo pageSize:(NSInteger)pageSize success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
     [self configRequestMethodJSON];
-    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-admin/video/lesson/group/list"];
+    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-teacher/videoLessonGroup/page"];
     NSMutableDictionary *parm = [NSMutableDictionary dictionary];
     [parm setValue:auditStatus forKey:@"auditStatus"];
-    [parm setValue:@(pageNo) forKey:@"pageNo"];
-    [parm setValue:@(pageSize) forKey:@"pageSize"];
+    [parm setValue:@(pageNo) forKey:@"page"];
+    [parm setValue:@(pageSize) forKey:@"rows"];
     [parm setValue:UserDefault(UIDKey) forKey:@"teacherId"];
     [self request:post andWithUrl:url and:parm success:success faliure:faliure];
 }

+ 1 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/Define/PrefixHeader.pch

@@ -32,6 +32,7 @@
 
 #import "KSGifRefreshHeader.h"
 #import "KSGifRefreshFooter.h"
+#import "UIView+SubViewExtension.h"
 
 // 加密使用 NSString+MD5
 #define DEFAULT_SALT (@"D5sIlPU2")

+ 18 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/Tools/Category/UIView+SubViewExtension.h

@@ -0,0 +1,18 @@
+//
+//  UIView+SubViewExtension.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/2.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface UIView (SubViewExtension)
+
+- (void)removeAllSubViews;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 18 - 0
KulexiuForTeacher/KulexiuForTeacher/Common/Tools/Category/UIView+SubViewExtension.m

@@ -0,0 +1,18 @@
+//
+//  UIView+SubViewExtension.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/2.
+//
+
+#import "UIView+SubViewExtension.h"
+
+@implementation UIView (SubViewExtension)
+
+- (void)removeAllSubViews {
+    while (self.subviews.count) {
+        [self.subviews.lastObject removeFromSuperview];
+    }
+}
+
+@end

+ 2 - 7
KulexiuForTeacher/KulexiuForTeacher/Module/Chat/Group/View/GroupSettingBodyView.m

@@ -138,8 +138,7 @@ typedef void(^ChooseMemberCallback)(NSString *targetId);
     else {
         self.memberCount.text = [NSString stringWithFormat:@"查看全部%zd名群成员", studentArray.count];
     }
-    
-    [self removeAllSubviews:self.memberView];
+    [self.memberView removeAllSubViews];
     CGFloat width = kScreenWidth / 5;
     NSInteger count = 0;
     if (studentArray.count < 5) {
@@ -161,11 +160,7 @@ typedef void(^ChooseMemberCallback)(NSString *targetId);
     
 }
 
-- (void)removeAllSubviews:(UIView *)view {
-    while (view.subviews.count) {
-        [view.subviews.lastObject removeFromSuperview];
-    }
-}
+
 
 // 群联系人
 - (IBAction)contractPerson:(id)sender {

+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Classroom/Controller/NewClassRoomViewController.m

@@ -1187,7 +1187,7 @@ typedef NS_ENUM(NSInteger, ACCOMPANYACTION) {
 
 - (UILabel *)timeLabel {
     if (!_timeLabel) {
-        _timeLabel = [[UILabel alloc] initWithFrame:CGRectMake(kScreenWidth - self.videoListView.width - 40 - TTimeLableWidth - iPhoneXSafeBottomMargin, 25, TTimeLableWidth, TTimeLableHeight)];
+        _timeLabel = [[UILabel alloc] initWithFrame:CGRectMake(kScreenWidth - self.videoListView.tz_width - 40 - TTimeLableWidth - iPhoneXSafeBottomMargin, 25, TTimeLableWidth, TTimeLableHeight)];
         _timeLabel.font = [UIFont systemFontOfSize:16];
         _timeLabel.textAlignment = NSTextAlignmentRight;
         _timeLabel.textColor = HexRGB(0xFF5500);

+ 337 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Course/Controller/CourseViewController.m

@@ -6,8 +6,36 @@
 //
 
 #import "CourseViewController.h"
+#import "FSCalendar.h"
+#import "CourseNavView.h"
+#import "LTSCalendarBottomView.h"
+#import "KSFullDatePicker.h"
+#import "AccompanyCourseCell.h"
+#import "LiveCourseCell.h"
 
-@interface CourseViewController ()
+@interface CourseViewController ()<UITableViewDataSource,UITableViewDelegate,FSCalendarDataSource,FSCalendarDelegate,UIGestureRecognizerDelegate>
+{
+    void * _KVOContext;
+}
+@property (nonatomic, strong) CourseNavView *navHeadView;
+
+@property (nonatomic, strong) NSString *chooseMonth;
+
+@property (nonatomic, strong) NSString *chooseDay;
+
+@property (nonatomic,strong) FSCalendar *calendar;
+
+@property (strong, nonatomic) NSCalendar *gregorian;
+
+@property (nonatomic, strong) UITableView *tableView;
+
+@property (strong, nonatomic) UIPanGestureRecognizer *scopeGesture;
+
+@property (strong, nonatomic) NSDateFormatter *dateFormatter;
+
+@property (nonatomic, strong) LTSCalendarBottomView *calendarBottom;
+
+@property (nonatomic, assign) BOOL cancleRequest;
 
 @end
 
@@ -16,6 +44,314 @@
 - (void)viewDidLoad {
     [super viewDidLoad];
     // Do any additional setup after loading the view.
+    self.ks_prefersNavigationBarHidden = YES;
+    [self configUI];
+}
+
+- (void)loadCalendarInfo {
+    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+    formatter.timeZone = [NSTimeZone systemTimeZone];
+    [formatter setDateFormat:@"yyyy-MM"];
+    NSDate *date = [NSDate date];
+    self.chooseMonth = [formatter stringFromDate:date];
+    self.chooseDay = [NSString stringWithFormat:@"%@ 00:00:00", [formatter stringFromDate:date]];
+    [self.calendar selectDate:date];
+    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
+    [self loadMonthCourse:self.chooseMonth];
+    if (![NSString isEmptyString:self.chooseDay]) {
+        [self getCourseByDate:self.chooseDay];
+    }
+}
+
+- (void)configUI {
+    [self.view addSubview:self.navHeadView];
+    [self.navHeadView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.top.mas_equalTo(self.view);
+        make.height.mas_equalTo(kNaviBarHeight);
+    }];
+    
+    [self.scrollView mas_remakeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.view);
+        make.top.mas_equalTo(self.navHeadView.mas_bottom);
+        make.bottom.mas_equalTo(self.view.mas_bottom);
+    }];
+    
+    UIView *containerView = [[UIView alloc] initWithFrame:CGRectZero];
+    containerView.backgroundColor = [UIColor clearColor];
+    [self.scrollView addSubview:containerView];
+    [containerView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.edges.mas_equalTo(self.scrollView);
+        make.width.mas_equalTo(self.scrollView);
+    }];
+    
+    self.calendar = [[FSCalendar alloc] init];
+    [self configCalendar];
+    [containerView addSubview:self.calendar];
+    [self.calendar mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(containerView);
+        make.top.mas_equalTo(containerView.mas_top);
+        make.height.mas_equalTo(300);
+    }];
+    self.calendarBottom = [LTSCalendarBottomView shareInstance];
+    MJWeakSelf;
+    [self.calendarBottom changeDisplay:^{
+        [weakSelf changeDisplay];
+    }];
+    [containerView addSubview:self.calendarBottom];
+    [self.calendarBottom mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(containerView);
+        make.top.mas_equalTo(self.calendar.mas_bottom);
+        make.height.mas_equalTo(40);
+    }];
+    
+    [containerView addSubview:self.tableView];
+    CGFloat tableHeight = kScreenHeight - kNaviBarHeight - kTabBarHeight - 300 - 40;
+    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.mas_equalTo(self.view);
+        make.top.mas_equalTo(self.calendarBottom.mas_bottom);
+        make.height.mas_equalTo(tableHeight);
+    }];
+    [containerView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.bottom.mas_equalTo(self.tableView.mas_bottom);
+    }];
+    
+    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self.calendar action:@selector(handleScopeGesture:)];
+    panGesture.delegate = self;
+    panGesture.minimumNumberOfTouches = 1;
+    panGesture.maximumNumberOfTouches = 2;
+    [self.scrollView addGestureRecognizer:panGesture];
+    self.scopeGesture = panGesture;
+    [self.tableView.panGestureRecognizer requireGestureRecognizerToFail:panGesture];
+    self.scrollView.mj_header = [KSGifRefreshHeader headerWithRefreshingBlock:^{
+        [weakSelf.calendar setToday:[NSDate date]];
+        [weakSelf loadMonthCourse:weakSelf.chooseMonth];
+        if (![NSString isEmptyString:weakSelf.chooseDay]) {
+            [weakSelf getCourseByDate:weakSelf.chooseDay];
+        }
+    }];
+    if (@available(iOS 11.0, *)) {
+        self.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
+    } else {
+        // Fallback on earlier versions
+        self.automaticallyAdjustsScrollViewInsets = NO;
+    }
+}
+
+- (void)endRefresh {
+    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+        [self.scrollView.mj_header endRefreshing];
+    });
+}
+
+
+#pragma mark ---- calender action
+
+
+
+// 收起或展开日历
+- (void)changeDisplay {
+    FSCalendarScope selectedScope = self.calendar.scope ==  FSCalendarScopeMonth ?  FSCalendarScopeWeek : FSCalendarScopeMonth;
+    [self.calendar setScope:selectedScope animated:YES];
+    NSString *imgName = selectedScope == FSCalendarScopeWeek ? @"arrow_down" : @"arrow_up";
+    [self.calendarBottom.arrowImage setImage:[UIImage imageNamed:imgName]];
+}
+
+- (void)configCalendar {
+    self.calendar.backgroundColor = [UIColor whiteColor];
+    self.calendar.appearance.titleFont = [UIFont systemFontOfSize:14.0f weight:UIFontWeightMedium];
+    self.calendar.appearance.titleDefaultColor = HexRGB(0x444444);
+    self.calendar.appearance.titleTodayColor = HexRGB(0x444444);
+    self.calendar.appearance.titleSelectionColor = [UIColor whiteColor];
+    self.calendar.appearance.selectionColor = THEMECOLOR;
+    self.calendar.appearance.weekdayFont = [UIFont systemFontOfSize:14.0f];
+    self.calendar.appearance.weekdayTextColor = HexRGB(0x777777);
+    self.calendar.appearance.titleWeekendColor = THEMECOLOR;
+    self.calendar.appearance.todaySelectionColor = THEMECOLOR;
+    self.calendar.appearance.todayColor = [UIColor whiteColor];
+    self.calendar.appearance.todayBorderColor = [UIColor whiteColor];
+    self.calendar.appearance.borderRadius = 0.1f;
+    self.calendar.appearance.borderDefaultColor = [UIColor whiteColor];
+    self.calendar.appearance.titleHightlightColor = HexRGB(0x444444);
+    self.calendar.appearance.subtitleFont = [UIFont systemFontOfSize:10.0f];
+    self.calendar.appearance.subtitleOffset = CGPointMake(0, 3);
+    self.calendar.appearance.subtitleTodayColor = HexRGB(0xff6363);
+    self.calendar.appearance.subtitleDefaultColor = HexRGB(0xff6363);
+    self.calendar.appearance.subtitleSelectionColor = [UIColor whiteColor];
+    self.calendar.dataSource = self;
+    self.calendar.delegate = self;
+//    self.calendar.firstWeekday = 2;
+    self.calendar.appearance.caseOptions = FSCalendarCaseOptionsWeekdayUsesSingleUpperCase|FSCalendarCaseOptionsHeaderUsesUpperCase;
+    self.calendar.calendarHeaderView.hidden = YES;
+    self.calendar.locale = [NSLocale localeWithLocaleIdentifier:@"zh_CN"];
+    [self.calendar addObserver:self forKeyPath:@"scope" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:_KVOContext];
+    self.calendar.placeholderType = FSCalendarPlaceholderTypeNone;
+    self.calendar.scope = FSCalendarScopeMonth;
+    [self.calendar selectDate:[NSDate date] scrollToDate:YES];
+}
+#pragma mark - FSCalendarDataSource
+- (NSString *)calendar:(FSCalendar *)calendar subtitleForDate:(NSDate *)date {
+//    if (calendar.highlightDates) {
+//        <#statements#>
+//    }
+    // 判断有课的日期显示subtitle
+    return @"有课";
+    
+}
+#pragma mark - FSCalendarDelegate
+- (void)calendar:(FSCalendar *)calendar boundingRectWillChange:(CGRect)bounds animated:(BOOL)animated
+{
+    [calendar mas_updateConstraints:^(MASConstraintMaker *make) {
+        make.height.mas_equalTo(bounds.size.height);
+        // Do other updates
+    }];
+    [self.tableView mas_updateConstraints:^(MASConstraintMaker *make) {
+        make.height.mas_equalTo(kScreenHeight - kTabBarHeight - bounds.size.height - kNaviBarHeight - 40);
+    }];
+    [self.view layoutIfNeeded];
+}
+- (void)calendar:(FSCalendar *)calendar didSelectDate:(NSDate *)date atMonthPosition:(FSCalendarMonthPosition)monthPosition
+{
+    NSLog(@"did select date %@",[self.dateFormatter stringFromDate:date]);
+    
+    NSMutableArray *selectedDates = [NSMutableArray arrayWithCapacity:calendar.selectedDates.count];
+    [calendar.selectedDates enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
+        [selectedDates addObject:[self.dateFormatter stringFromDate:obj]];
+    }];
+    self.navHeadView.navTitle.text = [self.dateFormatter stringFromDate:date];
+    NSLog(@"selected dates is %@",selectedDates);
+    if (monthPosition == FSCalendarMonthPositionNext || monthPosition == FSCalendarMonthPositionPrevious) {
+        [calendar setCurrentPage:date animated:YES];
+    }
+    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+    formatter.timeZone = [NSTimeZone systemTimeZone];
+    [formatter setDateFormat:@"yyyy-MM-dd"];
+    NSString *dateStr = [formatter stringFromDate:date];
+    dateStr = [NSString stringWithFormat:@"%@ 00:00:00", dateStr];
+    self.chooseDay = dateStr;
+    [self getCourseByDate:dateStr];
+}
+
+
+
+- (void)calendarCurrentPageDidChange:(FSCalendar *)calendar
+{
+    self.navHeadView.navTitle.text = [self.dateFormatter stringFromDate:calendar.currentPage];
+    NSLog(@"%s %@", __FUNCTION__, [self.dateFormatter stringFromDate:calendar.currentPage]);
+    // 获取当前月份信息
+    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+    formatter.timeZone = [NSTimeZone systemTimeZone];
+    [formatter setDateFormat:@"yyyy-MM"];
+    NSString *month = [formatter stringFromDate:calendar.currentPage];
+    if (![_chooseMonth isEqualToString:month]) {
+        _chooseMonth = month;
+        [self loadMonthCourse:month];
+    }
+    [formatter setDateFormat:@"yyyy-MM-dd"];
+    NSString *chooseDay = [formatter stringFromDate:calendar.currentPage];
+    self.chooseDay = chooseDay;
+    [self.calendar selectDate:calendar.currentPage];
+    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
+    NSString *currentDate = [formatter stringFromDate:calendar.currentPage];
+    [self getCourseByDate:currentDate];
+}
+
+#pragma mark --- 获取当前月份有课日期
+- (void)loadMonthCourse:(NSString *)month {
+    
+}
+
+#pragma mark --- 获取当日课程
+- (void)getCourseByDate:(NSString *)date {
+    
+}
+
+#pragma mark - <UIGestureRecognizerDelegate>
+
+// Whether scope gesture should begin
+- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
+{
+    BOOL shouldBegin = self.tableView.contentOffset.y <= -self.tableView.contentInset.top;
+    if (shouldBegin) {
+        CGPoint velocity = [self.scopeGesture velocityInView:self.view];
+        switch (self.calendar.scope) {
+            case FSCalendarScopeMonth:
+                return velocity.y < 0;
+            case FSCalendarScopeWeek:
+                return velocity.y > 0;
+        }
+    }
+    return shouldBegin;
+}
+
+#pragma mark - KVO
+
+- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
+{
+    if (context == _KVOContext) {
+        FSCalendarScope oldScope = [change[NSKeyValueChangeOldKey] unsignedIntegerValue];
+        FSCalendarScope newScope = [change[NSKeyValueChangeNewKey] unsignedIntegerValue];
+        NSLog(@"From %@ to %@",(oldScope==FSCalendarScopeWeek?@"week":@"month"),(newScope==FSCalendarScopeWeek?@"week":@"month"));
+    } else {
+        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
+    }
+}
+
+#pragma mark --- table data source
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
+    return 1;
+}
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
+    return  self.dataArray.count;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    AccompanyCourseCell *cell = [tableView dequeueReusableCellWithIdentifier:@"AccompanyCourseCell"];
+    return cell;
+}
+
+#pragma mark --- lazying
+
+- (CourseNavView *)navHeadView {
+    if (!_navHeadView) {
+        _navHeadView = [CourseNavView shareInstance];
+        MJWeakSelf;
+        [_navHeadView chooseNavCallback:^{
+            [weakSelf displayMounthPicker];
+        }];
+        
+    }
+    return _navHeadView;
+}
+
+- (void)displayMounthPicker {
+    
+}
+- (NSDateFormatter *)dateFormatter {
+    if (!_dateFormatter) {
+       _dateFormatter = [[NSDateFormatter alloc] init];
+        _dateFormatter.timeZone = [NSTimeZone systemTimeZone];
+        _dateFormatter.dateFormat = @"yyyy年MM月";
+    }
+    return _dateFormatter;
+}
+- (UITableView *)tableView {
+    if (!_tableView) {
+        _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
+        _tableView.delegate = self;
+        _tableView.dataSource = self;
+        _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+        _tableView.backgroundColor = [UIColor clearColor];
+        _tableView.showsVerticalScrollIndicator = NO;
+        _tableView.rowHeight = UITableViewAutomaticDimension;
+        _tableView.estimatedRowHeight = 130;
+        [_tableView registerNib:[UINib nibWithNibName:@"AccompanyCourseCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"AccompanyCourseCell"];
+        [_tableView registerNib:[UINib nibWithNibName:@"LiveCourseCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"LiveCourseCell"];
+        UIView *bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 15)];
+        bottomView.backgroundColor = [UIColor clearColor];
+        _tableView.tableFooterView = bottomView;
+        
+    }
+    return _tableView;
 }
 
 /*

+ 21 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Course/View/CourseForLiveCell.h

@@ -0,0 +1,21 @@
+//
+//  CourseForLiveCell.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/3.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef NS_ENUM(NSInteger, LIVECOURSEACTION) {
+    LIVECOURSEACTION_CHAT, // 聊天
+    LIVECOURSEACTION_LIVEROOM, // 上课
+};
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CourseForLiveCell : UITableViewCell
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 42 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Course/View/CourseForLiveCell.m

@@ -0,0 +1,42 @@
+//
+//  CourseForLiveCell.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/3.
+//
+
+#import "CourseForLiveCell.h"
+
+@interface CourseForLiveCell ()
+
+@property (weak, nonatomic) IBOutlet UILabel *timeLabel;
+
+@property (weak, nonatomic) IBOutlet UILabel *courseStatusLabel;
+@property (weak, nonatomic) IBOutlet UILabel *courseName;
+@property (weak, nonatomic) IBOutlet UILabel *subjectLabel;
+@property (weak, nonatomic) IBOutlet UILabel *descLabel;
+@property (weak, nonatomic) IBOutlet UIButton *operationButton;
+
+@end
+
+@implementation CourseForLiveCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+- (IBAction)chatAction:(id)sender {
+    
+}
+
+- (IBAction)joinLiveroom:(id)sender {
+    
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end

+ 219 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Course/View/CourseForLiveCell.xib

@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="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="159" id="KGk-i7-Jjw" customClass="CourseForLiveCell">
+            <rect key="frame" x="0.0" y="0.0" width="394" height="159"/>
+            <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="394" height="159"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="K4l-Dq-CXi">
+                        <rect key="frame" x="14" y="0.0" width="366" height="147"/>
+                        <subviews>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5Lp-rU-nqx">
+                                <rect key="frame" x="10" y="38" width="346" height="1"/>
+                                <color key="backgroundColor" red="0.94901960780000005" green="0.94901960780000005" blue="0.94901960780000005" alpha="1" colorSpace="calibratedRGB"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="1" id="eTt-Xt-i1V"/>
+                                </constraints>
+                            </view>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="course_time" translatesAutoresizingMaskIntoConstraints="NO" id="pTS-nC-xAK">
+                                <rect key="frame" x="11" y="12" width="16" height="16"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="16" id="8mn-T2-CXB"/>
+                                    <constraint firstAttribute="width" constant="16" id="xwh-Vf-z9n"/>
+                                </constraints>
+                            </imageView>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="2021/09/17 14:00~14:25" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="T9A-D2-1YE">
+                                <rect key="frame" x="34" y="12" width="147" height="16"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="13"/>
+                                <color key="textColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="进行中" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7HA-oy-GhL">
+                                <rect key="frame" x="305" y="11.5" width="50" height="17"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="50" id="Gc8-dU-wiy"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
+                                <color key="textColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="user_default_avatal" translatesAutoresizingMaskIntoConstraints="NO" id="wA2-zs-RYl">
+                                <rect key="frame" x="11" y="56" width="47" height="47"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="47" id="9Wg-OO-U4i"/>
+                                    <constraint firstAttribute="height" constant="47" id="uww-MX-dub"/>
+                                </constraints>
+                                <userDefinedRuntimeAttributes>
+                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                        <real key="value" value="5"/>
+                                    </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="dEp-ou-JBA">
+                                <rect key="frame" x="68" y="56" width="152" height="24"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="24" id="fXZ-Y5-AoA"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
+                                <color key="textColor" red="0.1019607843" green="0.1019607843" blue="0.1019607843" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="EoV-cQ-MON">
+                                <rect key="frame" x="68" y="83" width="44" height="20"/>
+                                <subviews>
+                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="单簧管" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="EmG-Yo-nbA">
+                                        <rect key="frame" x="5" y="0.0" width="34" height="20"/>
+                                        <fontDescription key="fontDescription" type="system" pointSize="11"/>
+                                        <color key="textColor" red="1" green="0.54901960780000003" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                                        <nil key="highlightedColor"/>
+                                    </label>
+                                </subviews>
+                                <color key="backgroundColor" red="1" green="0.94509803920000002" blue="0.87058823529999996" alpha="1" colorSpace="calibratedRGB"/>
+                                <constraints>
+                                    <constraint firstItem="EmG-Yo-nbA" firstAttribute="top" secondItem="EoV-cQ-MON" secondAttribute="top" id="6FH-yM-KLs"/>
+                                    <constraint firstItem="EmG-Yo-nbA" firstAttribute="leading" secondItem="EoV-cQ-MON" secondAttribute="leading" constant="5" id="Jal-Ca-e3Z"/>
+                                    <constraint firstAttribute="bottom" secondItem="EmG-Yo-nbA" secondAttribute="bottom" id="Sb9-A9-sOD"/>
+                                    <constraint firstAttribute="trailing" secondItem="EmG-Yo-nbA" secondAttribute="trailing" constant="5" id="XrD-po-Cbo"/>
+                                    <constraint firstAttribute="height" constant="20" id="jbp-dN-C7f"/>
+                                </constraints>
+                                <userDefinedRuntimeAttributes>
+                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                        <real key="value" value="4"/>
+                                    </userDefinedRuntimeAttribute>
+                                </userDefinedRuntimeAttributes>
+                            </view>
+                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="2TM-qv-v7e">
+                                <rect key="frame" x="225" y="53" width="30" height="30"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="30" id="lbN-u0-SFA"/>
+                                    <constraint firstAttribute="height" constant="30" id="x6Y-49-gGY"/>
+                                </constraints>
+                                <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                <state key="normal" image="course_chat"/>
+                                <connections>
+                                    <action selector="chatAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="58o-ti-5y4"/>
+                                </connections>
+                            </button>
+                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="bRl-1p-cZu">
+                                <rect key="frame" x="284" y="99" width="70" height="28"/>
+                                <color key="backgroundColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="calibratedRGB"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="28" id="Uge-1g-sLY"/>
+                                    <constraint firstAttribute="width" constant="70" id="laQ-tC-9hL"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" 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="joinLiveroom:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="5Gm-WE-4Mb"/>
+                                </connections>
+                            </button>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="MTB-cE-tDv">
+                                <rect key="frame" x="117" y="83" width="157" height="20"/>
+                                <subviews>
+                                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Nzy-gR-bLh">
+                                        <rect key="frame" x="0.0" y="4.5" width="1" height="11"/>
+                                        <color key="backgroundColor" red="0.82745098039999998" green="0.82745098039999998" blue="0.82745098039999998" alpha="1" colorSpace="calibratedRGB"/>
+                                        <constraints>
+                                            <constraint firstAttribute="width" constant="1" id="aMh-3R-oxO"/>
+                                            <constraint firstAttribute="height" constant="11" id="rQe-eX-5YW"/>
+                                        </constraints>
+                                    </view>
+                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="6人已购买" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="do8-lR-Cg5">
+                                        <rect key="frame" x="7" y="3.5" width="52.5" height="13.5"/>
+                                        <fontDescription key="fontDescription" type="system" pointSize="11"/>
+                                        <color key="textColor" red="0.41568627450000001" green="0.41568627450000001" blue="0.41568627450000001" alpha="1" colorSpace="calibratedRGB"/>
+                                        <nil key="highlightedColor"/>
+                                    </label>
+                                </subviews>
+                                <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                <constraints>
+                                    <constraint firstItem="do8-lR-Cg5" firstAttribute="leading" secondItem="Nzy-gR-bLh" secondAttribute="trailing" constant="6" id="3rt-yE-sdU"/>
+                                    <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="do8-lR-Cg5" secondAttribute="trailing" constant="2" id="67s-lU-r5O"/>
+                                    <constraint firstItem="Nzy-gR-bLh" firstAttribute="centerY" secondItem="MTB-cE-tDv" secondAttribute="centerY" id="PV3-rD-yuv"/>
+                                    <constraint firstItem="do8-lR-Cg5" firstAttribute="centerY" secondItem="MTB-cE-tDv" secondAttribute="centerY" id="Y6P-5i-Xw7"/>
+                                    <constraint firstItem="Nzy-gR-bLh" firstAttribute="leading" secondItem="MTB-cE-tDv" secondAttribute="leading" id="dB5-tY-mrR"/>
+                                    <constraint firstAttribute="height" constant="20" id="qhL-Rb-u4u"/>
+                                </constraints>
+                            </view>
+                        </subviews>
+                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                        <constraints>
+                            <constraint firstItem="MTB-cE-tDv" firstAttribute="leading" secondItem="EoV-cQ-MON" secondAttribute="trailing" constant="5" id="1Tg-po-DCR"/>
+                            <constraint firstItem="dEp-ou-JBA" firstAttribute="leading" secondItem="wA2-zs-RYl" secondAttribute="trailing" constant="10" id="2aJ-Aq-JdO"/>
+                            <constraint firstItem="EoV-cQ-MON" firstAttribute="leading" secondItem="dEp-ou-JBA" secondAttribute="leading" id="7Vb-7S-FZM"/>
+                            <constraint firstItem="7HA-oy-GhL" firstAttribute="centerY" secondItem="T9A-D2-1YE" secondAttribute="centerY" id="7cG-kE-7oR"/>
+                            <constraint firstItem="2TM-qv-v7e" firstAttribute="leading" secondItem="dEp-ou-JBA" secondAttribute="trailing" constant="5" id="BMA-h3-EFf"/>
+                            <constraint firstItem="EoV-cQ-MON" firstAttribute="bottom" secondItem="wA2-zs-RYl" secondAttribute="bottom" id="Chd-et-KWm"/>
+                            <constraint firstAttribute="bottom" secondItem="bRl-1p-cZu" secondAttribute="bottom" constant="20" id="DSL-E3-U1J"/>
+                            <constraint firstItem="T9A-D2-1YE" firstAttribute="centerY" secondItem="pTS-nC-xAK" secondAttribute="centerY" id="Hlv-G6-Ihl"/>
+                            <constraint firstAttribute="trailing" secondItem="5Lp-rU-nqx" secondAttribute="trailing" constant="10" id="IrU-1o-C7S"/>
+                            <constraint firstItem="7HA-oy-GhL" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="T9A-D2-1YE" secondAttribute="trailing" constant="10" id="LMB-sX-uzM"/>
+                            <constraint firstItem="wA2-zs-RYl" firstAttribute="leading" secondItem="K4l-Dq-CXi" secondAttribute="leading" constant="11" id="Lc0-sK-oXd"/>
+                            <constraint firstItem="wA2-zs-RYl" firstAttribute="top" secondItem="5Lp-rU-nqx" secondAttribute="bottom" constant="17" id="MsY-pI-vsy"/>
+                            <constraint firstAttribute="trailing" secondItem="bRl-1p-cZu" secondAttribute="trailing" constant="12" id="OK3-7Z-Oyp"/>
+                            <constraint firstItem="T9A-D2-1YE" firstAttribute="leading" secondItem="pTS-nC-xAK" secondAttribute="trailing" constant="7" id="OQD-n7-8U1"/>
+                            <constraint firstItem="dEp-ou-JBA" firstAttribute="top" secondItem="wA2-zs-RYl" secondAttribute="top" id="OSg-qL-j0d"/>
+                            <constraint firstAttribute="trailing" secondItem="7HA-oy-GhL" secondAttribute="trailing" constant="11" id="Whn-GB-iyS"/>
+                            <constraint firstItem="5Lp-rU-nqx" firstAttribute="top" secondItem="pTS-nC-xAK" secondAttribute="bottom" constant="10" id="ZN2-we-wfB"/>
+                            <constraint firstItem="5Lp-rU-nqx" firstAttribute="leading" secondItem="K4l-Dq-CXi" secondAttribute="leading" constant="10" id="jA3-t4-xid"/>
+                            <constraint firstItem="pTS-nC-xAK" firstAttribute="leading" secondItem="K4l-Dq-CXi" secondAttribute="leading" constant="11" id="kAp-53-8XF"/>
+                            <constraint firstItem="pTS-nC-xAK" firstAttribute="top" secondItem="K4l-Dq-CXi" secondAttribute="top" constant="12" id="o1E-Us-bQ3"/>
+                            <constraint firstItem="bRl-1p-cZu" firstAttribute="leading" secondItem="MTB-cE-tDv" secondAttribute="trailing" constant="10" id="swi-oP-0xd"/>
+                            <constraint firstItem="MTB-cE-tDv" firstAttribute="centerY" secondItem="EoV-cQ-MON" secondAttribute="centerY" id="uTO-Pb-zuG"/>
+                            <constraint firstItem="2TM-qv-v7e" firstAttribute="centerY" secondItem="dEp-ou-JBA" secondAttribute="centerY" id="zPS-Ez-UpN"/>
+                        </constraints>
+                        <userDefinedRuntimeAttributes>
+                            <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                <real key="value" value="10"/>
+                            </userDefinedRuntimeAttribute>
+                        </userDefinedRuntimeAttributes>
+                    </view>
+                </subviews>
+                <constraints>
+                    <constraint firstAttribute="trailing" secondItem="K4l-Dq-CXi" secondAttribute="trailing" constant="14" id="3Ni-Vy-cdt"/>
+                    <constraint firstItem="K4l-Dq-CXi" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="14" id="4T7-px-9ay"/>
+                    <constraint firstItem="K4l-Dq-CXi" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="FWT-A0-KVM"/>
+                    <constraint firstAttribute="bottom" secondItem="K4l-Dq-CXi" secondAttribute="bottom" constant="12" id="v7e-as-Fu3"/>
+                </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="courseName" destination="dEp-ou-JBA" id="LV9-4Y-wth"/>
+                <outlet property="courseStatusLabel" destination="7HA-oy-GhL" id="oYn-6I-C5g"/>
+                <outlet property="descLabel" destination="do8-lR-Cg5" id="Z6u-4z-HUa"/>
+                <outlet property="operationButton" destination="bRl-1p-cZu" id="vAM-C4-OKI"/>
+                <outlet property="subjectLabel" destination="EmG-Yo-nbA" id="2Fr-ld-btf"/>
+                <outlet property="timeLabel" destination="T9A-D2-1YE" id="s2Z-He-4uC"/>
+            </connections>
+            <point key="canvasLocation" x="185.50724637681162" y="116.18303571428571"/>
+        </tableViewCell>
+    </objects>
+    <resources>
+        <image name="course_chat" width="19" height="18"/>
+        <image name="course_time" width="16" height="16"/>
+        <image name="user_default_avatal" width="52" height="52"/>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

+ 26 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Course/View/CourseNavView.h

@@ -0,0 +1,26 @@
+//
+//  CourseNavView.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/3.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef void(^ChooseMouthAction)(void);
+
+@interface CourseNavView : UIView
+
+@property (weak, nonatomic) IBOutlet UIImageView *arrowImage;
+
+@property (weak, nonatomic) IBOutlet UILabel *navTitle;
+
++ (instancetype)shareInstance;
+
+- (void)chooseNavCallback:(ChooseMouthAction)callback;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 43 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Course/View/CourseNavView.m

@@ -0,0 +1,43 @@
+//
+//  CourseNavView.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/3.
+//
+
+#import "CourseNavView.h"
+
+@interface CourseNavView ()
+
+@property (nonatomic, copy) ChooseMouthAction callback;
+
+@end
+
+@implementation CourseNavView
+
++ (instancetype)shareInstance {
+    CourseNavView *view = [[[NSBundle mainBundle] loadNibNamed:@"CourseNavView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)chooseNavCallback:(ChooseMouthAction)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (IBAction)buttonClickAction:(id)sender {
+    if (self.callback) {
+        self.callback();
+    }
+}
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 76 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Course/View/CourseNavView.xib

@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <capability name="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="CourseNavView">
+            <rect key="frame" x="0.0" y="0.0" width="414" height="96"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="39y-6W-6HN">
+                    <rect key="frame" x="0.0" y="95" width="414" height="1"/>
+                    <color key="backgroundColor" red="0.94901960784313721" green="0.94901960784313721" blue="0.94901960784313721" alpha="1" colorSpace="calibratedRGB"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="1" id="ac4-Yf-3QJ"/>
+                    </constraints>
+                </view>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="2022年9月" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="GTO-1Q-b8D">
+                    <rect key="frame" x="161" y="50" width="92" height="25"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="25" id="TrO-ED-Ma7"/>
+                    </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"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="down_arrow" translatesAutoresizingMaskIntoConstraints="NO" id="Aty-TD-8f6">
+                    <rect key="frame" x="258" y="59.5" width="8" height="6"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="6" id="FGW-RQ-sze"/>
+                        <constraint firstAttribute="width" constant="8" id="FOk-8J-bnb"/>
+                    </constraints>
+                </imageView>
+                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="cUO-Eu-mKa">
+                    <rect key="frame" x="161" y="42.5" width="105" height="40"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="40" id="rgA-0Q-cHA"/>
+                    </constraints>
+                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                    <connections>
+                        <action selector="buttonClickAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="Of1-Yv-4sa"/>
+                    </connections>
+                </button>
+            </subviews>
+            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstAttribute="trailing" secondItem="39y-6W-6HN" secondAttribute="trailing" id="0Sc-7V-pPL"/>
+                <constraint firstItem="Aty-TD-8f6" firstAttribute="leading" secondItem="GTO-1Q-b8D" secondAttribute="trailing" constant="5" id="5aF-jm-Cpl"/>
+                <constraint firstItem="Aty-TD-8f6" firstAttribute="centerY" secondItem="GTO-1Q-b8D" secondAttribute="centerY" id="KGA-yE-Id2"/>
+                <constraint firstItem="39y-6W-6HN" firstAttribute="top" secondItem="GTO-1Q-b8D" secondAttribute="bottom" constant="20" id="Um0-5Z-VgP"/>
+                <constraint firstAttribute="bottom" secondItem="39y-6W-6HN" secondAttribute="bottom" id="Wn3-ho-ctn"/>
+                <constraint firstItem="39y-6W-6HN" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="ad9-yT-IV2"/>
+                <constraint firstItem="Aty-TD-8f6" firstAttribute="trailing" secondItem="cUO-Eu-mKa" secondAttribute="trailing" id="deD-vu-Bdf"/>
+                <constraint firstItem="GTO-1Q-b8D" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="fnH-cs-lh8"/>
+                <constraint firstItem="GTO-1Q-b8D" firstAttribute="leading" secondItem="cUO-Eu-mKa" secondAttribute="leading" id="k3o-sg-pI4"/>
+                <constraint firstItem="GTO-1Q-b8D" firstAttribute="centerY" secondItem="cUO-Eu-mKa" secondAttribute="centerY" id="vpg-A7-bif"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="arrowImage" destination="Aty-TD-8f6" id="XvH-NJ-BSR"/>
+                <outlet property="navTitle" destination="GTO-1Q-b8D" id="RMQ-Kd-GIA"/>
+            </connections>
+            <point key="canvasLocation" x="240.57971014492756" y="132.58928571428572"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="down_arrow" width="8" height="6"/>
+    </resources>
+</document>

+ 25 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Course/View/LTSCalendarBottomView.h

@@ -0,0 +1,25 @@
+//
+//  LTSCalendarBottomView.h
+//  TeacherDaya
+//
+//  Created by Kyle on 2019/9/20.
+//  Copyright © 2019 DayaMusic. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef void(^DisplayCallback)(void);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface LTSCalendarBottomView : UIView
+
+@property (weak, nonatomic) IBOutlet UIImageView *arrowImage;
+
++ (instancetype)shareInstance;
+
+- (void)changeDisplay:(DisplayCallback)callback;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 45 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Course/View/LTSCalendarBottomView.m

@@ -0,0 +1,45 @@
+//
+//  LTSCalendarBottomView.m
+//  TeacherDaya
+//
+//  Created by Kyle on 2019/9/20.
+//  Copyright © 2019 DayaMusic. All rights reserved.
+//
+
+#import "LTSCalendarBottomView.h"
+
+@interface LTSCalendarBottomView ()
+
+@property (nonatomic, copy) DisplayCallback callback;
+
+@property (weak, nonatomic) IBOutlet UIView *contentView;
+
+@end
+
+@implementation LTSCalendarBottomView
+
++ (instancetype)shareInstance {
+    LTSCalendarBottomView *view = [[[NSBundle mainBundle] loadNibNamed:@"LTSCalendarBottomView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)changeDisplay:(DisplayCallback)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+- (IBAction)tapAction:(id)sender {
+    if (self.callback) {
+        self.callback();
+    }
+}
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 73 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Course/View/LTSCalendarBottomView.xib

@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <capability name="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="LTSCalendarBottomView">
+            <rect key="frame" x="0.0" y="0.0" width="414" height="94"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="zge-3A-nKD">
+                    <rect key="frame" x="0.0" y="0.0" width="414" height="84"/>
+                    <subviews>
+                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="TGP-I2-itY">
+                            <rect key="frame" x="177" y="0.0" width="60" height="84"/>
+                            <subviews>
+                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="arrow_down" translatesAutoresizingMaskIntoConstraints="NO" id="hQ4-1S-a8X">
+                                    <rect key="frame" x="20" y="37.5" width="20" height="9"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="9" id="enh-ma-vTY"/>
+                                        <constraint firstAttribute="width" constant="20" id="yx1-8C-boD"/>
+                                    </constraints>
+                                </imageView>
+                            </subviews>
+                            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                            <gestureRecognizers/>
+                            <constraints>
+                                <constraint firstItem="hQ4-1S-a8X" firstAttribute="centerY" secondItem="TGP-I2-itY" secondAttribute="centerY" id="OCb-5I-7z9"/>
+                                <constraint firstItem="hQ4-1S-a8X" firstAttribute="centerX" secondItem="TGP-I2-itY" secondAttribute="centerX" id="mba-6W-6vu"/>
+                                <constraint firstAttribute="width" constant="60" id="yVs-2N-0Uc"/>
+                            </constraints>
+                            <connections>
+                                <outletCollection property="gestureRecognizers" destination="Naj-lG-D6n" appends="YES" id="0Yp-3f-M8g"/>
+                            </connections>
+                        </view>
+                    </subviews>
+                    <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                    <constraints>
+                        <constraint firstAttribute="bottom" secondItem="TGP-I2-itY" secondAttribute="bottom" id="87O-vg-Laa"/>
+                        <constraint firstItem="TGP-I2-itY" firstAttribute="top" secondItem="zge-3A-nKD" secondAttribute="top" id="KGI-rO-h7i"/>
+                        <constraint firstItem="TGP-I2-itY" firstAttribute="centerX" secondItem="zge-3A-nKD" secondAttribute="centerX" id="Lkl-r1-dZ4"/>
+                    </constraints>
+                </view>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstItem="zge-3A-nKD" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="69N-ba-wTi"/>
+                <constraint firstItem="zge-3A-nKD" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="exZ-zP-9fu"/>
+                <constraint firstAttribute="bottom" secondItem="zge-3A-nKD" secondAttribute="bottom" constant="10" id="o72-4j-kf5"/>
+                <constraint firstAttribute="trailing" secondItem="zge-3A-nKD" secondAttribute="trailing" id="zhY-nN-liX"/>
+            </constraints>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="arrowImage" destination="hQ4-1S-a8X" id="qe0-Ph-AvT"/>
+                <outlet property="contentView" destination="zge-3A-nKD" id="gg4-tc-Hnq"/>
+            </connections>
+            <point key="canvasLocation" x="137.68115942028987" y="59.598214285714285"/>
+        </view>
+        <tapGestureRecognizer id="Naj-lG-D6n">
+            <connections>
+                <action selector="tapAction:" destination="iN0-l3-epB" id="2zE-r6-SQj"/>
+            </connections>
+        </tapGestureRecognizer>
+    </objects>
+    <resources>
+        <image name="arrow_down" width="20" height="9"/>
+    </resources>
+</document>

+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Music/Controller/MyMusicViewController.m

@@ -62,7 +62,7 @@
     self.categoryView.listContainer = (id<JXCategoryViewListContainer>)self.pagerView.listContainerView;
 }
 
-- (void)rightBtnClick { // 创建视频课
+- (void)rightBtnClick { 
     KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
     webCtrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/teacherCert"];
     [self.navigationController pushViewController:webCtrl animated:YES];

+ 1 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Music/View/MusicMessageCell.m

@@ -54,6 +54,7 @@
 }
 
 - (void)configTagViewWithTagArray:(NSArray *)tagArray maxWidth:(CGFloat)maxWidth {
+    [self.tagView removeAllSubViews];
     CGFloat width = maxWidth;
     CGFloat xSpace = 0.0f;
     for (NSInteger i = 0; i < tagArray.count; i++) {

+ 2 - 2
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Music/View/MusicMessageCell.xib

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="19529" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
     <device id="retina6_1" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19519"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
         <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"/>

+ 2 - 2
KulexiuForTeacher/KulexiuForTeacher/Module/Home/Music/View/MusicUploadView.xib

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="19529" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
     <device id="retina6_1" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19519"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
         <capability name="System colors in document resources" minToolsVersion="11.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>

+ 1 - 6
KulexiuForTeacher/KulexiuForTeacher/Module/Live/View/SeatContentView.m

@@ -124,7 +124,7 @@
 }
 
 - (void)refreshSeatUI {
-    [self removeAllSubviews:self];
+    [self removeAllSubViews];
     CGFloat space = 10;
     CGFloat width = 54;
     CGFloat height = 70;
@@ -136,11 +136,6 @@
     }
 }
 
-- (void)removeAllSubviews:(UIView *)view {
-    while (view.subviews.count) {
-        [view.subviews.lastObject removeFromSuperview];
-    }
-}
 
 /*
 // Only override drawRect: if you perform custom drawing.

+ 3 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Controller/MineViewController.m

@@ -16,6 +16,7 @@
 #import "TeacherInfo.h"
 #import "VideoCourseViewController.h"
 #import "CreateLiveViewController.h"
+#import "MinePageViewController.h"
 
 @interface MineViewController ()
 
@@ -116,7 +117,8 @@
             break;
         case MINEVIEWTYPE_HOMEPAGE: // 我的主页
         {
-            
+            MinePageViewController *pageCtrl = [[MinePageViewController alloc] init];
+            [self.navigationController pushViewController:pageCtrl animated:YES];
         }
             break;
         case MINEVIEWTYPE_MIEN: // 个人风采

+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/Controller/MinePageViewController.h

@@ -11,7 +11,7 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface MinePageViewController : KSBaseViewController <JXCategoryListContentViewDelegate>
+@interface MinePageViewController : KSBaseViewController
 
 @property (nonatomic, strong) JXPagerView *pagerView;
 @property (nonatomic, strong, readonly) JXCategoryTitleView *categoryView;

+ 260 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/Controller/MinePageViewController.m

@@ -6,8 +6,26 @@
 //
 
 #import "MinePageViewController.h"
+#import "MinePageHeadView.h"
+#import "JXCategoryView.h"
+#import "JXPagerListRefreshView.h"
+#import "MinePageMienBodyView.h"
+#import "MinePageCourseView.h"
+#import "MinePageVideoView.h"
+#import "TeacherInfo.h"
+#import "UserInfoManager.h"
 
-@interface MinePageViewController ()
+#define HEADER_HEIGHT (64)
+
+@interface MinePageViewController ()<JXPagerViewDelegate, JXPagerMainTableViewGestureDelegate,JXCategoryViewDelegate>
+
+@property (nonatomic, strong) MinePageHeadView *headView;
+
+@property (nonatomic, assign) NSInteger selectedIndex;
+
+@property (nonatomic, strong) NSMutableArray *listViewArray;
+
+@property (nonatomic, strong) TeacherInfo *teacherInfo;
 
 @end
 
@@ -17,8 +35,249 @@
     [super viewDidLoad];
     // Do any additional setup after loading the view.
     self.ks_prefersNavigationBarHidden = YES;
+    _titles = @[@"个人风采",@"陪练课",@"直播课",@"视频课",@"乐谱"];
+    [self configUI];
+}
+
+- (void)configUI {
+    
+    [self.scrollView removeFromSuperview];
+    [self.view addSubview:self.headView];
+    CGFloat headHeight = [self.headView getViewHeight];
+    self.headView.frame = CGRectMake(0, 0, kScreenWidth, headHeight);
+    
+    _categoryView = [[JXCategoryTitleView alloc] initWithFrame:CGRectMake(0, headHeight, kScreenWidth, HEADER_HEIGHT)];
+    _categoryView.backgroundColor = HexRGB(0xf6f8f9);
+    self.categoryView.titles = self.titles;
+    self.categoryView.delegate = self;
+    self.categoryView.titleFont = [UIFont systemFontOfSize:16.0f];
+    self.categoryView.titleSelectedFont = [UIFont systemFontOfSize:18.0f weight:UIFontWeightMedium];
+    self.categoryView.titleSelectedColor = HexRGB(0x333333);
+    self.categoryView.titleColor = HexRGB(0x666666);
+    self.categoryView.titleColorGradientEnabled = YES;
+    
+    JXCategoryIndicatorLineView *lineView = [[JXCategoryIndicatorLineView alloc] init];
+    lineView.indicatorColor = THEMECOLOR;
+    lineView.indicatorWidth = 16;
+    self.categoryView.indicators = @[lineView];
+    
+    _pagerView = [self preferredPagingView];
+    self.pagerView.frame = CGRectMake(0, headHeight, kScreenWidth, kScreenHeight - iPhoneXSafeBottomMargin - headHeight);
+    self.pagerView.mainTableView.gestureDelegate = self;
+    self.pagerView.backgroundColor = [UIColor clearColor];
+    self.pagerView.mainTableView.backgroundColor = [UIColor clearColor];
+    self.pagerView.listContainerView.backgroundColor = [UIColor clearColor];
+    self.pagerView.listContainerView.listCellBackgroundColor = [UIColor clearColor];
+    [self.view addSubview:self.pagerView];
+    self.categoryView.listContainer = (id<JXCategoryViewListContainer>)self.pagerView.listContainerView;
+}
+
+- (void)requestTeachMessage {
+    [KSNetworkingManager queryTeacherInfoRequest:KS_GET success:^(NSDictionary * _Nonnull dic) {
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            self.teacherInfo = [[TeacherInfo alloc] initWithDictionary:[dic dictionaryValueForKey:@"data"]];
+            NSString *rongToken = UserDefault(RongTokenKey);
+            if ([NSString isEmptyString:rongToken]) {
+                [USER_MANAGER queryUserInfoConnectRongCloud:YES];
+            }
+            [self refreshHeadView];
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+    } faliure:^(NSError * _Nonnull error) {
+        
+    }];
+}
+
+- (void)refreshHeadView {
+    [self.headView configSource:self.teacherInfo];
+    // 刷新老师认证和音乐人认证状态
+    [self refreshAuthStatus];
+}
+
+- (void)refreshAuthStatus {
+    for (NSInteger index = 0; index < self.listViewArray.count; index++) {
+        id view = self.listViewArray[index];
+        if ([view isKindOfClass:[MinePageCourseView class]]) {
+            MinePageCourseView *courseView = (MinePageCourseView *)view;
+            courseView.teaherAuth = self.teacherInfo.entryStatus == 2;
+            courseView.musicianAuthStatus = self.teacherInfo.musicianAuthStatus == 2;
+        }
+        else if ([view isKindOfClass:[MinePageVideoView class]]) {
+            MinePageVideoView *videoCourseView = (MinePageVideoView *)view;
+            videoCourseView.teaherAuth = self.teacherInfo.entryStatus == 2;
+        }
+    }
+}
+
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    self.navigationController.interactivePopGestureRecognizer.enabled = YES;
+    [self requestTeachMessage];
+    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:[kSJXCollectionView class]]) {
+            MinePageVideoView *listView = (MinePageVideoView *)value;
+            [listView beginFirstRefresh];
+        }
+    }
+}
+
+- (void)viewDidAppear:(BOOL)animated {
+    [super viewDidAppear:animated];
+    self.navigationController.interactivePopGestureRecognizer.enabled = (self.categoryView.selectedIndex == 0);
+}
+
+- (JXPagerView *)preferredPagingView {
+    return [[JXPagerListRefreshView alloc] initWithDelegate:self];
+}
+
+#pragma mark - JXPagerViewDelegate
+
+- (UIView *)tableHeaderViewInPagerView:(JXPagerView *)pagerView {
+    return [UIView new];
+}
+
+- (NSUInteger)tableHeaderViewHeightInPagerView:(JXPagerView *)pagerView {
+    return CGFLOAT_MIN;
+}
+
+- (NSUInteger)heightForPinSectionHeaderInPagerView:(JXPagerView *)pagerView {
+    return HEADER_HEIGHT;
+}
+
+- (UIView *)viewForPinSectionHeaderInPagerView:(JXPagerView *)pagerView {
+    return self.categoryView;
+}
+
+- (NSInteger)numberOfListsInPagerView:(JXPagerView *)pagerView {
+    //和categoryView的item数量一致
+    return self.titles.count;
+}
+
+- (id<JXPagerViewListViewDelegate>)pagerView:(JXPagerView *)pagerView initListAtIndex:(NSInteger)index {
+    if (index == 0) { // 个人风采
+        MinePageMienBodyView *listView = [[MinePageMienBodyView alloc] init];
+        listView.naviController = self.navigationController;
+        [self.listViewArray replaceObjectAtIndex:index withObject:listView];
+        self.listViewArray[index] = listView;
+        listView.selectIndex = index;
+        [listView beginFirstRefresh];
+        return listView;
+    }
+    else if (index == 1) { // 陪练课
+        MinePageCourseView *listView = [[MinePageCourseView alloc] init];
+        listView.naviController = self.navigationController;
+        [self.listViewArray replaceObjectAtIndex:index withObject:listView];
+        self.listViewArray[index] = listView;
+        listView.selectIndex = index;
+        if (self.teacherInfo) {
+            listView.teaherAuth = self.teacherInfo.entryStatus == 2;
+        }
+        else {
+            listView.teaherAuth = YES;
+        }
+        [listView beginFirstRefresh];
+        return listView;
+    }
+    else if (index == 2) { // 直播
+        MinePageCourseView *listView = [[MinePageCourseView alloc] init];
+        listView.naviController = self.navigationController;
+        [self.listViewArray replaceObjectAtIndex:index withObject:listView];
+        self.listViewArray[index] = listView;
+        listView.selectIndex = index;
+        if (self.teacherInfo) {
+            listView.teaherAuth = self.teacherInfo.entryStatus == 2;
+        }
+        else {
+            listView.teaherAuth = YES;
+        }
+        [listView beginFirstRefresh];
+        return listView;
+    }
+    else if (index == 4) { // 乐谱
+        MinePageCourseView *listView = [[MinePageCourseView alloc] init];
+        listView.naviController = self.navigationController;
+        [self.listViewArray replaceObjectAtIndex:index withObject:listView];
+        self.listViewArray[index] = listView;
+        listView.selectIndex = index;
+        if (self.teacherInfo) {
+            listView.musicianAuthStatus = self.teacherInfo.musicianAuthStatus == 2;
+        }
+        else {
+            listView.musicianAuthStatus = YES;
+        }
+        [listView beginFirstRefresh];
+        return listView;
+    }
+    else { // 视频课
+        MinePageVideoView *listView = [[MinePageVideoView alloc] init];
+        listView.naviController = self.navigationController;
+        [self.listViewArray replaceObjectAtIndex:index withObject:listView];
+        self.listViewArray[index] = listView;
+        listView.selectIndex = index;
+        if (self.teacherInfo) {
+            listView.teaherAuth = self.teacherInfo.entryStatus == 2;
+        }
+        else {
+            listView.teaherAuth = YES;
+        }
+        [listView beginFirstRefresh];
+        return listView;
+    }
 }
 
+
+#pragma mark - JXCategoryViewDelegate
+- (void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index {
+    self.navigationController.interactivePopGestureRecognizer.enabled = (index == 0);
+    if (self.listViewArray.count > index) {
+        id value = self.listViewArray[index];
+        if ([value isKindOfClass:[KSJXBodyView class]]) {
+            KSJXBodyView *listView = (KSJXBodyView *)value;
+            [listView beginFirstRefresh];
+        }
+        else if ([value isKindOfClass:[kSJXCollectionView class]]) {
+            kSJXCollectionView *listView = (kSJXCollectionView *)value;
+            [listView beginFirstRefresh];
+        }
+    }
+}
+
+
+#pragma mark - JXPagerMainTableViewGestureDelegate
+- (BOOL)mainTableViewGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
+    //禁止categoryView左右滑动的时候,上下和左右都可以滚动
+    if (otherGestureRecognizer == self.categoryView.collectionView.panGestureRecognizer) {
+        return NO;
+    }
+    return [gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]];
+}
+#pragma mark --- lazying
+- (MinePageHeadView *)headView {
+    if (!_headView) {
+        _headView = [MinePageHeadView shareInstance];
+        MJWeakSelf;
+        [_headView backAction:^{
+            [weakSelf backAction];
+        }];
+    }
+    return _headView;
+}
+
+- (NSMutableArray *)listViewArray {
+    if (!_listViewArray) {
+        _listViewArray = [NSMutableArray arrayWithArray:@[@"",@"",@"",@"",@""]];
+    }
+    return _listViewArray;
+}
+
+
 /*
 #pragma mark - Navigation
 

+ 26 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/AccompanyCourseCell.h

@@ -0,0 +1,26 @@
+//
+//  AccompanyCourseCell.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/2.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef NS_ENUM(NSInteger, ACCOMPANY_TYPE) {
+    ACCOMPANY_TYPE_CHAT,
+    ACCOMPANY_TYPE_JOINROOM,
+    ACCOMPANY_TYPE_ADJUST,
+};
+
+typedef void(^AccompanyCourseCallback)(ACCOMPANY_TYPE type, id source);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface AccompanyCourseCell : UITableViewCell
+
+
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 47 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/AccompanyCourseCell.m

@@ -0,0 +1,47 @@
+//
+//  AccompanyCourseCell.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/2.
+//
+
+#import "AccompanyCourseCell.h"
+
+@interface AccompanyCourseCell ()
+@property (weak, nonatomic) IBOutlet UILabel *courseTime;
+@property (weak, nonatomic) IBOutlet UILabel *courseStatus;
+@property (weak, nonatomic) IBOutlet UIImageView *studentAvatar;
+@property (weak, nonatomic) IBOutlet UILabel *studentName;
+@property (weak, nonatomic) IBOutlet UILabel *studentSubject;
+
+@property (weak, nonatomic) IBOutlet UIButton *opreationButton;
+
+@end
+
+@interface AccompanyCourseCell ()
+
+@end
+
+@implementation AccompanyCourseCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+    self.selectionStyle = UITableViewCellSelectionStyleNone;
+}
+
+- (IBAction)chatAction:(id)sender {
+    
+}
+
+- (IBAction)courseAction:(id)sender {
+    
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end

+ 189 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/AccompanyCourseCell.xib

@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="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" id="KGk-i7-Jjw" customClass="AccompanyCourseCell">
+            <rect key="frame" x="0.0" y="0.0" width="414" height="127"/>
+            <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="414" height="127"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="hEp-yz-qU7">
+                        <rect key="frame" x="14" y="0.0" width="386" height="115"/>
+                        <subviews>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="wXs-1T-7ew">
+                                <rect key="frame" x="10" y="38" width="366" height="1"/>
+                                <color key="backgroundColor" red="0.94901960784313721" green="0.94901960784313721" blue="0.94901960784313721" alpha="1" colorSpace="calibratedRGB"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="1" id="r83-A3-xqW"/>
+                                </constraints>
+                            </view>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="course_time" translatesAutoresizingMaskIntoConstraints="NO" id="3FJ-PP-t5u">
+                                <rect key="frame" x="11" y="12" width="16" height="16"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="16" id="kGT-bb-CIU"/>
+                                    <constraint firstAttribute="height" constant="16" id="tQi-IQ-bdk"/>
+                                </constraints>
+                            </imageView>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="2021/09/17 14:00~14:25" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="y3h-K3-zJ8">
+                                <rect key="frame" x="34" y="12" width="147" height="16"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="13"/>
+                                <color key="textColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="进行中" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="XKr-bP-maa">
+                                <rect key="frame" x="325" y="11.5" width="50" height="17"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="50" id="cYb-s7-ndU"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
+                                <color key="textColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="user_default_avatal" translatesAutoresizingMaskIntoConstraints="NO" id="foX-kQ-NZi">
+                                <rect key="frame" x="11" y="56" width="47" height="47"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="47" id="cRs-VR-QQw"/>
+                                    <constraint firstAttribute="width" constant="47" id="t7w-Ui-5tY"/>
+                                </constraints>
+                                <userDefinedRuntimeAttributes>
+                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                        <real key="value" value="5"/>
+                                    </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="eJa-81-RrN">
+                                <rect key="frame" x="68" y="56" width="49" height="24"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="24" id="u07-aD-Pru"/>
+                                </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="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dGh-TI-XLP">
+                                <rect key="frame" x="68" y="83" width="44" height="20"/>
+                                <subviews>
+                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="单簧管" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="mz9-eT-OVS">
+                                        <rect key="frame" x="5" y="0.0" width="34" height="20"/>
+                                        <fontDescription key="fontDescription" type="system" pointSize="11"/>
+                                        <color key="textColor" red="1" green="0.5490196078431373" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                                        <nil key="highlightedColor"/>
+                                    </label>
+                                </subviews>
+                                <color key="backgroundColor" red="1" green="0.94509803921568625" blue="0.87058823529411766" alpha="1" colorSpace="calibratedRGB"/>
+                                <constraints>
+                                    <constraint firstAttribute="bottom" secondItem="mz9-eT-OVS" secondAttribute="bottom" id="5gk-Fm-zz0"/>
+                                    <constraint firstItem="mz9-eT-OVS" firstAttribute="leading" secondItem="dGh-TI-XLP" secondAttribute="leading" constant="5" id="D7V-i6-966"/>
+                                    <constraint firstItem="mz9-eT-OVS" firstAttribute="top" secondItem="dGh-TI-XLP" secondAttribute="top" id="Hfm-VX-vtc"/>
+                                    <constraint firstAttribute="height" constant="20" id="UmQ-Xh-8WZ"/>
+                                    <constraint firstAttribute="trailing" secondItem="mz9-eT-OVS" secondAttribute="trailing" constant="5" id="z12-0a-6PU"/>
+                                </constraints>
+                                <userDefinedRuntimeAttributes>
+                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                        <real key="value" value="4"/>
+                                    </userDefinedRuntimeAttribute>
+                                </userDefinedRuntimeAttributes>
+                            </view>
+                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="NOA-EQ-Fjn">
+                                <rect key="frame" x="122" y="53" width="30" height="30"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="30" id="87u-cE-Y5V"/>
+                                    <constraint firstAttribute="width" constant="30" id="gOV-9c-ibN"/>
+                                </constraints>
+                                <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                                <state key="normal" image="course_chat"/>
+                                <connections>
+                                    <action selector="chatAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="oA7-RL-IvS"/>
+                                </connections>
+                            </button>
+                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="42d-Nb-iRS">
+                                <rect key="frame" x="304" y="67" width="70" height="28"/>
+                                <color key="backgroundColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="calibratedRGB"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="70" id="FVJ-kk-We8"/>
+                                    <constraint firstAttribute="height" constant="28" id="Hin-5d-6me"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" 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="courseAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="4Hc-wC-kDj"/>
+                                </connections>
+                            </button>
+                        </subviews>
+                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                        <constraints>
+                            <constraint firstItem="XKr-bP-maa" firstAttribute="centerY" secondItem="y3h-K3-zJ8" secondAttribute="centerY" id="2ud-Y3-DkF"/>
+                            <constraint firstItem="wXs-1T-7ew" firstAttribute="top" secondItem="3FJ-PP-t5u" secondAttribute="bottom" constant="10" id="4AU-q2-JKK"/>
+                            <constraint firstItem="eJa-81-RrN" firstAttribute="top" secondItem="foX-kQ-NZi" secondAttribute="top" id="9f4-fS-Mjm"/>
+                            <constraint firstItem="dGh-TI-XLP" firstAttribute="bottom" secondItem="foX-kQ-NZi" secondAttribute="bottom" id="Azp-AH-Ulo"/>
+                            <constraint firstItem="NOA-EQ-Fjn" firstAttribute="centerY" secondItem="eJa-81-RrN" secondAttribute="centerY" id="Dh1-vS-VH4"/>
+                            <constraint firstItem="y3h-K3-zJ8" firstAttribute="leading" secondItem="3FJ-PP-t5u" secondAttribute="trailing" constant="7" id="HDn-Dn-gXp"/>
+                            <constraint firstItem="wXs-1T-7ew" firstAttribute="leading" secondItem="hEp-yz-qU7" secondAttribute="leading" constant="10" id="MuH-hq-nak"/>
+                            <constraint firstAttribute="bottom" secondItem="42d-Nb-iRS" secondAttribute="bottom" constant="20" id="PRc-Qs-mXb"/>
+                            <constraint firstItem="3FJ-PP-t5u" firstAttribute="leading" secondItem="hEp-yz-qU7" secondAttribute="leading" constant="11" id="SPj-TQ-Naq"/>
+                            <constraint firstItem="eJa-81-RrN" firstAttribute="leading" secondItem="foX-kQ-NZi" secondAttribute="trailing" constant="10" id="XMS-cQ-9qv"/>
+                            <constraint firstItem="3FJ-PP-t5u" firstAttribute="top" secondItem="hEp-yz-qU7" secondAttribute="top" constant="12" id="ZIs-gJ-5ER"/>
+                            <constraint firstItem="foX-kQ-NZi" firstAttribute="leading" secondItem="hEp-yz-qU7" secondAttribute="leading" constant="11" id="fzi-Jo-dW2"/>
+                            <constraint firstItem="XKr-bP-maa" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="y3h-K3-zJ8" secondAttribute="trailing" constant="10" id="iWy-rf-ocs"/>
+                            <constraint firstItem="foX-kQ-NZi" firstAttribute="top" secondItem="wXs-1T-7ew" secondAttribute="bottom" constant="17" id="jyB-6O-Z10"/>
+                            <constraint firstItem="y3h-K3-zJ8" firstAttribute="centerY" secondItem="3FJ-PP-t5u" secondAttribute="centerY" id="krf-gM-z84"/>
+                            <constraint firstAttribute="trailing" secondItem="XKr-bP-maa" secondAttribute="trailing" constant="11" id="n7L-Ge-hdB"/>
+                            <constraint firstItem="NOA-EQ-Fjn" firstAttribute="leading" secondItem="eJa-81-RrN" secondAttribute="trailing" constant="5" id="oGP-bV-vh8"/>
+                            <constraint firstItem="dGh-TI-XLP" firstAttribute="leading" secondItem="eJa-81-RrN" secondAttribute="leading" id="qFE-Ju-IOj"/>
+                            <constraint firstAttribute="trailing" secondItem="42d-Nb-iRS" secondAttribute="trailing" constant="12" id="tvp-eu-D3U"/>
+                            <constraint firstAttribute="trailing" secondItem="wXs-1T-7ew" secondAttribute="trailing" constant="10" id="yzO-qN-lJn"/>
+                        </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 firstAttribute="bottom" secondItem="hEp-yz-qU7" secondAttribute="bottom" constant="12" id="1H8-ep-qYi"/>
+                    <constraint firstItem="hEp-yz-qU7" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="14" id="Kid-r9-L7D"/>
+                    <constraint firstItem="hEp-yz-qU7" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="sEC-om-6Mn"/>
+                    <constraint firstAttribute="trailing" secondItem="hEp-yz-qU7" secondAttribute="trailing" constant="14" id="zlt-1I-Jvx"/>
+                </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="courseStatus" destination="XKr-bP-maa" id="lUj-uE-gX6"/>
+                <outlet property="courseTime" destination="y3h-K3-zJ8" id="BQP-Dh-J69"/>
+                <outlet property="opreationButton" destination="42d-Nb-iRS" id="Jez-ID-7gC"/>
+                <outlet property="studentAvatar" destination="foX-kQ-NZi" id="9D9-zE-vdE"/>
+                <outlet property="studentName" destination="eJa-81-RrN" id="Lob-ln-gKG"/>
+                <outlet property="studentSubject" destination="mz9-eT-OVS" id="99G-qb-mJx"/>
+            </connections>
+            <point key="canvasLocation" x="131.8840579710145" y="95.424107142857139"/>
+        </tableViewCell>
+    </objects>
+    <resources>
+        <image name="course_chat" width="19" height="18"/>
+        <image name="course_time" width="16" height="16"/>
+        <image name="user_default_avatal" width="52" height="52"/>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

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

@@ -0,0 +1,18 @@
+//
+//  LiveCourseCell.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/2.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface LiveCourseCell : UITableViewCell
+
+
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 37 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/LiveCourseCell.m

@@ -0,0 +1,37 @@
+//
+//  LiveCourseCell.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/2.
+//
+
+#import "LiveCourseCell.h"
+
+@interface LiveCourseCell ()
+
+@property (weak, nonatomic) IBOutlet UIImageView *coverImage;
+@property (weak, nonatomic) IBOutlet UILabel *courseName;
+@property (weak, nonatomic) IBOutlet UIImageView *teacherAvatar;
+@property (weak, nonatomic) IBOutlet UILabel *teacherName;
+@property (weak, nonatomic) IBOutlet UILabel *orderUser;
+@property (weak, nonatomic) IBOutlet UILabel *courseTime;
+@property (weak, nonatomic) IBOutlet UILabel *priceLabel;
+
+
+@end
+
+@implementation LiveCourseCell
+
+- (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

+ 181 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/LiveCourseCell.xib

@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="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" id="KGk-i7-Jjw" customClass="LiveCourseCell">
+            <rect key="frame" x="0.0" y="0.0" width="414" height="153"/>
+            <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="414" height="153"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Mvt-WC-c3g">
+                        <rect key="frame" x="14" y="0.0" width="386" height="141"/>
+                        <subviews>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="video_placeholder" translatesAutoresizingMaskIntoConstraints="NO" id="xxS-NZ-g2N">
+                                <rect key="frame" x="11" y="16" width="105" height="71"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="71" id="4W8-zD-2Qz"/>
+                                    <constraint firstAttribute="width" constant="105" id="WVS-We-aZW"/>
+                                </constraints>
+                                <userDefinedRuntimeAttributes>
+                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                        <real key="value" value="4"/>
+                                    </userDefinedRuntimeAttribute>
+                                </userDefinedRuntimeAttributes>
+                            </imageView>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ubJ-4G-VNk">
+                                <rect key="frame" x="10" y="102" width="366" height="1"/>
+                                <color key="backgroundColor" red="0.94901960784313721" green="0.94901960784313721" blue="0.94901960784313721" alpha="1" colorSpace="calibratedRGB"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="1" id="Cz6-mp-tqs"/>
+                                </constraints>
+                            </view>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="从零开始学竖笛直播课" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fS2-h4-cBg">
+                                <rect key="frame" x="128" y="17" width="248" height="20"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="20" id="cuo-ww-100"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" weight="medium" pointSize="15"/>
+                                <color key="textColor" red="0.10196078431372549" green="0.10196078431372549" blue="0.10196078431372549" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="¥120/4课时" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="pom-27-xPp">
+                                <rect key="frame" x="294" y="111" width="81" height="20"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="20" id="PkK-Ar-40O"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
+                                <color key="textColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="user_default_avatal" translatesAutoresizingMaskIntoConstraints="NO" id="BL0-yX-dfU">
+                                <rect key="frame" x="130" y="66" width="20" height="20"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="20" id="dr1-Zf-der"/>
+                                    <constraint firstAttribute="height" constant="20" id="qhN-5d-oHo"/>
+                                </constraints>
+                                <userDefinedRuntimeAttributes>
+                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                        <real key="value" value="10"/>
+                                    </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="MXm-cL-DLC">
+                                <rect key="frame" x="155" y="68" width="40" height="16"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="13"/>
+                                <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="1P8-Tt-vJy">
+                                <rect key="frame" x="201" y="66" width="173" height="20"/>
+                                <subviews>
+                                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="JgQ-vo-sMT">
+                                        <rect key="frame" x="0.0" y="4.5" width="1" height="11"/>
+                                        <color key="backgroundColor" red="0.82745098039999998" green="0.82745098039999998" blue="0.82745098039999998" alpha="1" colorSpace="calibratedRGB"/>
+                                        <constraints>
+                                            <constraint firstAttribute="width" constant="1" id="8Hx-cG-KCI"/>
+                                            <constraint firstAttribute="height" constant="11" id="rIv-7J-HCi"/>
+                                        </constraints>
+                                    </view>
+                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="6人已购买" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="alu-CI-VLe">
+                                        <rect key="frame" x="7" y="2" width="61.5" height="16"/>
+                                        <fontDescription key="fontDescription" type="system" pointSize="13"/>
+                                        <color key="textColor" red="1" green="0.50196078430000002" blue="0.17254901959999999" alpha="1" colorSpace="calibratedRGB"/>
+                                        <nil key="highlightedColor"/>
+                                    </label>
+                                </subviews>
+                                <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                                <constraints>
+                                    <constraint firstItem="JgQ-vo-sMT" firstAttribute="leading" secondItem="1P8-Tt-vJy" secondAttribute="leading" id="4HF-8s-wMC"/>
+                                    <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="alu-CI-VLe" secondAttribute="trailing" constant="2" id="7Uh-ca-kl6"/>
+                                    <constraint firstItem="alu-CI-VLe" firstAttribute="leading" secondItem="JgQ-vo-sMT" secondAttribute="trailing" constant="6" id="9qV-gl-OsT"/>
+                                    <constraint firstItem="JgQ-vo-sMT" firstAttribute="centerY" secondItem="1P8-Tt-vJy" secondAttribute="centerY" id="HPg-Ld-Lbj"/>
+                                    <constraint firstAttribute="height" constant="20" id="V7b-7h-JH6"/>
+                                    <constraint firstItem="alu-CI-VLe" firstAttribute="centerY" secondItem="1P8-Tt-vJy" secondAttribute="centerY" id="bIf-kK-SVI"/>
+                                </constraints>
+                            </view>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="course_time" translatesAutoresizingMaskIntoConstraints="NO" id="61W-Je-OUA">
+                                <rect key="frame" x="11" y="114" width="16" height="16"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="16" id="Yzw-mW-EhA"/>
+                                    <constraint firstAttribute="width" constant="16" id="kZw-k1-310"/>
+                                </constraints>
+                            </imageView>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="2021/09/17 14:00~14:25" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dnA-By-ThI">
+                                <rect key="frame" x="34" y="114" width="147" height="16"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="13"/>
+                                <color key="textColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                        </subviews>
+                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                        <constraints>
+                            <constraint firstItem="xxS-NZ-g2N" firstAttribute="leading" secondItem="Mvt-WC-c3g" secondAttribute="leading" constant="11" id="1sN-cR-l8Q"/>
+                            <constraint firstAttribute="trailing" secondItem="fS2-h4-cBg" secondAttribute="trailing" constant="10" id="6Cp-qd-kCN"/>
+                            <constraint firstItem="BL0-yX-dfU" firstAttribute="leading" secondItem="xxS-NZ-g2N" secondAttribute="trailing" constant="14" id="Gbd-BG-sia"/>
+                            <constraint firstItem="MXm-cL-DLC" firstAttribute="centerY" secondItem="BL0-yX-dfU" secondAttribute="centerY" id="Kgo-4i-c9Z"/>
+                            <constraint firstItem="dnA-By-ThI" firstAttribute="centerY" secondItem="61W-Je-OUA" secondAttribute="centerY" id="OvF-75-Nfb"/>
+                            <constraint firstItem="ubJ-4G-VNk" firstAttribute="top" secondItem="xxS-NZ-g2N" secondAttribute="bottom" constant="15" id="QQH-1A-wcB"/>
+                            <constraint firstAttribute="trailing" secondItem="1P8-Tt-vJy" secondAttribute="trailing" constant="12" id="UNf-bn-NGG"/>
+                            <constraint firstItem="fS2-h4-cBg" firstAttribute="leading" secondItem="xxS-NZ-g2N" secondAttribute="trailing" constant="12" id="W9V-Py-L3p"/>
+                            <constraint firstItem="ubJ-4G-VNk" firstAttribute="leading" secondItem="Mvt-WC-c3g" secondAttribute="leading" constant="10" id="XPT-f9-5Pb"/>
+                            <constraint firstAttribute="trailing" secondItem="pom-27-xPp" secondAttribute="trailing" constant="11" id="apX-z2-tWj"/>
+                            <constraint firstItem="BL0-yX-dfU" firstAttribute="bottom" secondItem="xxS-NZ-g2N" secondAttribute="bottom" constant="-1" id="btl-DG-Sfp"/>
+                            <constraint firstItem="xxS-NZ-g2N" firstAttribute="top" secondItem="Mvt-WC-c3g" secondAttribute="top" constant="16" id="jSd-RY-pLM"/>
+                            <constraint firstItem="61W-Je-OUA" firstAttribute="leading" secondItem="Mvt-WC-c3g" secondAttribute="leading" constant="11" id="kPQ-yR-Otc"/>
+                            <constraint firstItem="1P8-Tt-vJy" firstAttribute="leading" secondItem="MXm-cL-DLC" secondAttribute="trailing" constant="6" id="kde-1c-4bz"/>
+                            <constraint firstItem="MXm-cL-DLC" firstAttribute="leading" secondItem="BL0-yX-dfU" secondAttribute="trailing" constant="5" id="kf6-VF-jse"/>
+                            <constraint firstItem="pom-27-xPp" firstAttribute="top" secondItem="ubJ-4G-VNk" secondAttribute="bottom" constant="8" id="pi1-8d-yCC"/>
+                            <constraint firstItem="fS2-h4-cBg" firstAttribute="top" secondItem="xxS-NZ-g2N" secondAttribute="top" constant="1" id="png-nh-Js2"/>
+                            <constraint firstItem="61W-Je-OUA" firstAttribute="top" secondItem="ubJ-4G-VNk" secondAttribute="bottom" constant="11" id="tNX-e1-ZuP"/>
+                            <constraint firstAttribute="trailing" secondItem="ubJ-4G-VNk" secondAttribute="trailing" constant="10" id="uXN-wS-lsC"/>
+                            <constraint firstItem="1P8-Tt-vJy" firstAttribute="centerY" secondItem="MXm-cL-DLC" secondAttribute="centerY" id="w51-XM-Mq4"/>
+                            <constraint firstItem="dnA-By-ThI" firstAttribute="leading" secondItem="61W-Je-OUA" secondAttribute="trailing" constant="7" id="xvB-M5-qln"/>
+                        </constraints>
+                        <userDefinedRuntimeAttributes>
+                            <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                <real key="value" value="10"/>
+                            </userDefinedRuntimeAttribute>
+                        </userDefinedRuntimeAttributes>
+                    </view>
+                </subviews>
+                <constraints>
+                    <constraint firstAttribute="bottom" secondItem="Mvt-WC-c3g" secondAttribute="bottom" constant="12" id="074-qk-pYu"/>
+                    <constraint firstItem="Mvt-WC-c3g" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="9Mf-aM-fvr"/>
+                    <constraint firstAttribute="trailing" secondItem="Mvt-WC-c3g" secondAttribute="trailing" constant="14" id="Rqa-iv-AiC"/>
+                    <constraint firstItem="Mvt-WC-c3g" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="14" id="xtd-4n-5so"/>
+                </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="courseName" destination="fS2-h4-cBg" id="MBL-3f-0NB"/>
+                <outlet property="courseTime" destination="dnA-By-ThI" id="zYH-8K-CD9"/>
+                <outlet property="coverImage" destination="xxS-NZ-g2N" id="AVE-vD-hDf"/>
+                <outlet property="orderUser" destination="alu-CI-VLe" id="g7W-md-Ny2"/>
+                <outlet property="priceLabel" destination="pom-27-xPp" id="YX9-DU-Cu6"/>
+                <outlet property="teacherAvatar" destination="BL0-yX-dfU" id="lqv-h8-ALv"/>
+                <outlet property="teacherName" destination="MXm-cL-DLC" id="fmJ-YR-WPh"/>
+            </connections>
+            <point key="canvasLocation" x="131.8840579710145" y="104.46428571428571"/>
+        </tableViewCell>
+    </objects>
+    <resources>
+        <image name="course_time" width="16" height="16"/>
+        <image name="user_default_avatal" width="52" height="52"/>
+        <image name="video_placeholder" width="168" height="111"/>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

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

@@ -0,0 +1,16 @@
+//
+//  MineFansGroupCell.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/2.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface MineFansGroupCell : UITableViewCell
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 34 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineFansGroupCell.m

@@ -0,0 +1,34 @@
+//
+//  MineFansGroupCell.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/2.
+//
+
+#import "MineFansGroupCell.h"
+
+@interface MineFansGroupCell ()
+
+@property (weak, nonatomic) IBOutlet UIImageView *groupAvatar;
+@property (weak, nonatomic) IBOutlet UILabel *groupName;
+@property (weak, nonatomic) IBOutlet UILabel *desc;
+
+
+@end
+
+
+@implementation MineFansGroupCell
+
+- (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

+ 103 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineFansGroupCell.xib

@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="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="234" id="KGk-i7-Jjw" customClass="MineFansGroupCell">
+            <rect key="frame" x="0.0" y="0.0" width="320" height="72"/>
+            <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="320" height="72"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="PF4-YY-Sdv">
+                        <rect key="frame" x="14" y="0.0" width="292" height="72"/>
+                        <subviews>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="李老师粉丝群" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="T58-uk-4lw">
+                                <rect key="frame" x="69" y="15" width="211" height="22"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="22" id="UGj-Jh-YGq"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                                <color key="textColor" red="0.1019607843" green="0.1019607843" blue="0.1019607843" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="chat_group_Logo" translatesAutoresizingMaskIntoConstraints="NO" id="t1I-iJ-VAv">
+                                <rect key="frame" x="12" y="15" width="42" height="42"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="42" id="HSu-PY-Mmm"/>
+                                    <constraint firstAttribute="width" constant="42" id="WoR-5F-K6u"/>
+                                </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="lQS-Ke-d1u">
+                                <rect key="frame" x="69" y="37" width="211" height="22"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="22" id="sAK-ut-LjD"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                        </subviews>
+                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                        <constraints>
+                            <constraint firstItem="t1I-iJ-VAv" firstAttribute="centerY" secondItem="PF4-YY-Sdv" secondAttribute="centerY" id="8TC-a8-7MK"/>
+                            <constraint firstItem="lQS-Ke-d1u" firstAttribute="top" secondItem="T58-uk-4lw" secondAttribute="bottom" id="QYl-Ub-RTz"/>
+                            <constraint firstItem="lQS-Ke-d1u" firstAttribute="leading" secondItem="T58-uk-4lw" secondAttribute="leading" id="XXF-5y-KZb"/>
+                            <constraint firstItem="t1I-iJ-VAv" firstAttribute="leading" secondItem="PF4-YY-Sdv" secondAttribute="leading" constant="12" id="boU-vp-b1H"/>
+                            <constraint firstAttribute="trailing" secondItem="T58-uk-4lw" secondAttribute="trailing" constant="12" id="dZb-bE-IxK"/>
+                            <constraint firstItem="T58-uk-4lw" firstAttribute="top" secondItem="t1I-iJ-VAv" secondAttribute="top" id="fCU-EI-HG0"/>
+                            <constraint firstItem="T58-uk-4lw" firstAttribute="leading" secondItem="t1I-iJ-VAv" secondAttribute="trailing" constant="15" id="fHy-PN-eB2"/>
+                            <constraint firstAttribute="trailing" secondItem="lQS-Ke-d1u" secondAttribute="trailing" constant="12" id="sLo-wd-SkU"/>
+                        </constraints>
+                    </view>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="李老师粉丝群" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="X8D-mp-JC3">
+                        <rect key="frame" x="111" y="100" width="98" height="22"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="22" id="D2r-XY-tny"/>
+                        </constraints>
+                        <fontDescription key="fontDescription" type="system" pointSize="16"/>
+                        <color key="textColor" red="0.1019607843" green="0.1019607843" blue="0.1019607843" alpha="1" colorSpace="calibratedRGB"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                </subviews>
+                <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                <constraints>
+                    <constraint firstItem="PF4-YY-Sdv" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="4EJ-Ua-4s3"/>
+                    <constraint firstItem="X8D-mp-JC3" firstAttribute="top" secondItem="PF4-YY-Sdv" secondAttribute="bottom" constant="28" id="4hq-uV-DPi"/>
+                    <constraint firstItem="X8D-mp-JC3" firstAttribute="centerX" secondItem="PF4-YY-Sdv" secondAttribute="centerX" id="Gh1-Zo-Yyu"/>
+                    <constraint firstAttribute="trailing" secondItem="PF4-YY-Sdv" secondAttribute="trailing" constant="14" id="RJb-vy-t7a"/>
+                    <constraint firstItem="PF4-YY-Sdv" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="14" id="Vo1-tb-4hi"/>
+                    <constraint firstAttribute="bottom" secondItem="PF4-YY-Sdv" secondAttribute="bottom" id="xJD-XD-NsP"/>
+                </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="desc" destination="lQS-Ke-d1u" id="zdF-3c-SOm"/>
+                <outlet property="groupAvatar" destination="t1I-iJ-VAv" id="6ct-AH-33m"/>
+                <outlet property="groupName" destination="T58-uk-4lw" id="E3V-m8-Xqv"/>
+            </connections>
+            <point key="canvasLocation" x="131.8840579710145" y="139.28571428571428"/>
+        </tableViewCell>
+    </objects>
+    <resources>
+        <image name="chat_group_Logo" width="44" height="44"/>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

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

@@ -0,0 +1,18 @@
+//
+//  MineIntroduceCell.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/2.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface MineIntroduceCell : UITableViewCell
+
+- (void)configIntroduce:(NSString *)introduceString;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 41 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineIntroduceCell.m

@@ -0,0 +1,41 @@
+//
+//  MineIntroduceCell.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/2.
+//
+
+#import "MineIntroduceCell.h"
+
+@interface MineIntroduceCell ()
+
+@property (weak, nonatomic) IBOutlet UILabel *introduceLabel;
+
+@end
+
+
+@implementation MineIntroduceCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+    self.selectionStyle = UITableViewCellSelectionStyleNone;
+}
+
+- (void)configIntroduce:(NSString *)introduceString {
+    if ([NSString isEmptyString:introduceString]) {
+        introduceString = @"暂无简介内容";
+    }
+    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
+    [paragraphStyle setLineSpacing:4];//调整行间距
+    NSMutableAttributedString *attrs = [[NSMutableAttributedString alloc] initWithString:introduceString attributes:@{NSParagraphStyleAttributeName:paragraphStyle,NSFontAttributeName:[UIFont systemFontOfSize:13.0f],NSForegroundColorAttributeName:HexRGB(0x666666)}];
+    self.introduceLabel.attributedText = attrs;
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end

+ 138 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineIntroduceCell.xib

@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="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="192" id="KGk-i7-Jjw" customClass="MineIntroduceCell">
+            <rect key="frame" x="0.0" y="0.0" width="393" height="192"/>
+            <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="393" height="192"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="a3D-3i-sXd">
+                        <rect key="frame" x="14" y="12" width="365" height="168"/>
+                        <subviews>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="mine_introduce" translatesAutoresizingMaskIntoConstraints="NO" id="QkR-ME-ZRI">
+                                <rect key="frame" x="12" y="16" width="24" height="24"/>
+                            </imageView>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="个人介绍" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="DEP-oO-lGO">
+                                <rect key="frame" x="39" y="13" width="66" height="30"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="30" id="GuZ-yZ-DZq"/>
+                                </constraints>
+                                <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="calibratedRGB"/>
+                                <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="sg2-Sp-iC5">
+                                <rect key="frame" x="12" y="61" width="341" height="87"/>
+                                <attributedString key="attributedText">
+                                    <fragment content="毕业于中央音乐学员长笛专业,师从央音长笛系曾获">
+                                        <attributes>
+                                            <color key="NSColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="1" colorSpace="calibratedRGB"/>
+                                            <font key="NSFont" size="13" name=".PingFangSC-Regular"/>
+                                            <paragraphStyle key="NSParagraphStyle" alignment="natural" lineBreakMode="wordWrapping" baseWritingDirection="natural" lineSpacing="8" tighteningFactorForTruncation="0.0"/>
+                                        </attributes>
+                                    </fragment>
+                                    <fragment content="2016">
+                                        <attributes>
+                                            <color key="NSColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="1" colorSpace="calibratedRGB"/>
+                                            <font key="NSFont" metaFont="system"/>
+                                            <paragraphStyle key="NSParagraphStyle" alignment="natural" lineBreakMode="wordWrapping" baseWritingDirection="natural" lineSpacing="8" tighteningFactorForTruncation="0.0"/>
+                                        </attributes>
+                                    </fragment>
+                                    <fragment content="年锦绣杯长笛大赛冠军自">
+                                        <attributes>
+                                            <color key="NSColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="1" colorSpace="calibratedRGB"/>
+                                            <font key="NSFont" size="13" name=".PingFangSC-Regular"/>
+                                            <paragraphStyle key="NSParagraphStyle" alignment="natural" lineBreakMode="wordWrapping" baseWritingDirection="natural" lineSpacing="8" tighteningFactorForTruncation="0.0"/>
+                                        </attributes>
+                                    </fragment>
+                                    <fragment content="2018">
+                                        <attributes>
+                                            <color key="NSColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="1" colorSpace="calibratedRGB"/>
+                                            <font key="NSFont" metaFont="system"/>
+                                            <paragraphStyle key="NSParagraphStyle" alignment="natural" lineBreakMode="wordWrapping" baseWritingDirection="natural" lineSpacing="8" tighteningFactorForTruncation="0.0"/>
+                                        </attributes>
+                                    </fragment>
+                                    <fragment content="年起研究长笛启蒙、考级到专业考试教育总结出一套适合各个阶段需要的教学方式所教学员考级通过率">
+                                        <attributes>
+                                            <color key="NSColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="1" colorSpace="calibratedRGB"/>
+                                            <font key="NSFont" size="13" name=".PingFangSC-Regular"/>
+                                            <paragraphStyle key="NSParagraphStyle" alignment="natural" lineBreakMode="wordWrapping" baseWritingDirection="natural" lineSpacing="8" tighteningFactorForTruncation="0.0"/>
+                                        </attributes>
+                                    </fragment>
+                                    <fragment content="100%">
+                                        <attributes>
+                                            <color key="NSColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="1" colorSpace="calibratedRGB"/>
+                                            <font key="NSFont" metaFont="system"/>
+                                            <paragraphStyle key="NSParagraphStyle" alignment="natural" lineBreakMode="wordWrapping" baseWritingDirection="natural" lineSpacing="8" tighteningFactorForTruncation="0.0"/>
+                                        </attributes>
+                                    </fragment>
+                                    <fragment content=",专业院校复试率">
+                                        <attributes>
+                                            <color key="NSColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="1" colorSpace="calibratedRGB"/>
+                                            <font key="NSFont" size="13" name=".PingFangSC-Regular"/>
+                                            <paragraphStyle key="NSParagraphStyle" alignment="natural" lineBreakMode="wordWrapping" baseWritingDirection="natural" lineSpacing="8" tighteningFactorForTruncation="0.0"/>
+                                        </attributes>
+                                    </fragment>
+                                    <fragment content="92%">
+                                        <attributes>
+                                            <color key="NSColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="1" colorSpace="calibratedRGB"/>
+                                            <font key="NSFont" metaFont="system"/>
+                                            <paragraphStyle key="NSParagraphStyle" alignment="natural" lineBreakMode="wordWrapping" baseWritingDirection="natural" lineSpacing="8" tighteningFactorForTruncation="0.0"/>
+                                        </attributes>
+                                    </fragment>
+                                </attributedString>
+                                <nil key="highlightedColor"/>
+                            </label>
+                        </subviews>
+                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                        <constraints>
+                            <constraint firstAttribute="trailing" secondItem="sg2-Sp-iC5" secondAttribute="trailing" constant="12" id="1Y3-jk-FKI"/>
+                            <constraint firstItem="sg2-Sp-iC5" firstAttribute="leading" secondItem="a3D-3i-sXd" secondAttribute="leading" constant="12" id="7hV-i9-0cR"/>
+                            <constraint firstItem="DEP-oO-lGO" firstAttribute="centerY" secondItem="QkR-ME-ZRI" secondAttribute="centerY" id="CmX-zB-pvi"/>
+                            <constraint firstItem="QkR-ME-ZRI" firstAttribute="top" secondItem="a3D-3i-sXd" secondAttribute="top" constant="16" id="Eol-2h-3j4"/>
+                            <constraint firstAttribute="bottom" secondItem="sg2-Sp-iC5" secondAttribute="bottom" constant="20" id="RlY-eF-6PN"/>
+                            <constraint firstItem="sg2-Sp-iC5" firstAttribute="top" secondItem="DEP-oO-lGO" secondAttribute="bottom" constant="18" id="Sac-GG-ls1"/>
+                            <constraint firstItem="QkR-ME-ZRI" firstAttribute="leading" secondItem="a3D-3i-sXd" secondAttribute="leading" constant="12" id="dHm-c2-Ms5"/>
+                            <constraint firstItem="DEP-oO-lGO" firstAttribute="leading" secondItem="QkR-ME-ZRI" secondAttribute="trailing" constant="3" id="f10-2F-RnQ"/>
+                        </constraints>
+                        <userDefinedRuntimeAttributes>
+                            <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                <real key="value" value="10"/>
+                            </userDefinedRuntimeAttribute>
+                        </userDefinedRuntimeAttributes>
+                    </view>
+                </subviews>
+                <constraints>
+                    <constraint firstAttribute="bottom" secondItem="a3D-3i-sXd" secondAttribute="bottom" constant="12" id="Hwh-IN-Oex"/>
+                    <constraint firstItem="a3D-3i-sXd" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="14" id="PHP-kU-MDA"/>
+                    <constraint firstItem="a3D-3i-sXd" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="12" id="rDy-Ml-yWc"/>
+                    <constraint firstAttribute="trailing" secondItem="a3D-3i-sXd" secondAttribute="trailing" constant="14" id="vll-Em-74E"/>
+                </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="introduceLabel" destination="sg2-Sp-iC5" id="wqP-t4-31E"/>
+            </connections>
+            <point key="canvasLocation" x="184.78260869565219" y="124.55357142857142"/>
+        </tableViewCell>
+    </objects>
+    <resources>
+        <image name="mine_introduce" width="24" height="24"/>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

+ 5 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageCourseView.h

@@ -6,6 +6,8 @@
 //
 
 #import "KSJXBodyView.h"
+#import "StateView.h"
+#import "Reachability.h"
 
 NS_ASSUME_NONNULL_BEGIN
 
@@ -13,6 +15,9 @@ NS_ASSUME_NONNULL_BEGIN
 @interface MinePageCourseView : KSJXBodyView
 
 
+@property (nonatomic, assign) BOOL teaherAuth;
+
+@property (nonatomic, assign) BOOL musicianAuthStatus;
 
 @end
 

+ 338 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageCourseView.m

@@ -6,9 +6,347 @@
 //
 
 #import "MinePageCourseView.h"
+#import "MinePageSubmitView.h"
+#import "KSBaseWKWebViewController.h"
+#import "MusicMessageModel.h"
+#import "AccompanyCourseCell.h"
+#import "LiveCourseCell.h"
+#import "MinePageMusicCell.h"
+
+@interface MinePageCourseView ()<UITableViewDelegate,UITableViewDataSource>
+
+@property (nonatomic, strong) NSMutableArray *dataArray;
+
+@property (nonatomic, strong) StateView *promptView;
+@property (nonatomic, strong) UIView *promptPlaceView;
+
+@property (nonatomic, assign) BOOL networkAvaiable; // 网络是否可用
+
+@property (nonatomic, assign) BOOL isLoadMore;
+@property (nonatomic, assign) NSInteger rows;
+@property (nonatomic, assign) NSInteger pages;
+
+@property (nonatomic, strong) MinePageSubmitView *uploadView;
+
+@end
 
 @implementation MinePageCourseView
 
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        self.backgroundColor = HexRGB(0xf6f8f9);
+        self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height) style:UITableViewStylePlain];
+        self.tableView.backgroundColor = HexRGB(0xf6f8f9);
+        self.tableView.showsVerticalScrollIndicator = NO;
+
+        self.tableView.dataSource = self;
+        self.tableView.delegate = self;
+        self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+        [self addSubview:self.tableView];
+        
+        
+        UIView *headView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 10)];
+        headView.backgroundColor = HexRGB(0xf6f8f9);
+        self.tableView.tableHeaderView = headView;
+        
+        UIView *bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 10)];
+        bottomView.backgroundColor = HexRGB(0xf6f8f9);
+        self.tableView.tableFooterView = bottomView;
+        
+        [self.tableView registerNib:[UINib nibWithNibName:@"AccompanyCourseCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"AccompanyCourseCell"];
+        [self.tableView registerNib:[UINib nibWithNibName:@"LiveCourseCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"LiveCourseCell"];
+        [self.tableView registerNib:[UINib nibWithNibName:@"MinePageMusicCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"MinePageMusicCell"];
+        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)endRefresh {
+    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+        [self.tableView.mj_header endRefreshing];
+        [self.tableView.mj_footer endRefreshing];
+    });
+}
+
+- (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:@"wd_img_zwsj" inView:self.tableView];
+    [self.tableView reloadData];
+}
+
+- (void)requestData {
+    if (self.selectIndex == 1) { // 陪练课
+        
+    }
+    else if (self.selectIndex == 2) { // 直播课
+        
+    }
+    else if (self.selectIndex == 4) { // 乐谱
+        [KSNetworkingManager musicListRequest:KS_POST auditStatus:@"1" pageNo:self.pages pageSize:self.rows success:^(NSDictionary * _Nonnull dic) {
+            [self endRefresh];
+            if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+                NSArray *sourceArray = [[dic dictionaryValueForKey:@"data"] arrayValueForKey:@"records"];
+                for (NSDictionary *parm in sourceArray) {
+                    MusicMessageModel *model = [[MusicMessageModel alloc] initWithDictionary:parm];
+                    [self.dataArray addObject:model];
+                }
+    //            for (int i = 0 ; i < 10; i++) {
+    //                MusicMessageModel *model = [[MusicMessageModel alloc] init];
+    //                model.username = @"hahahha";
+    //                model.chargeType = 0;
+    //                model.musicSheetName = @"小夜曲";
+    //                model.composer = @"肖邦";
+    //                model.musicTag = @"钢琴,古典,10级";
+    //                [self.dataArray addObject:model];
+    //            }
+                if (sourceArray.count < self.rows) {
+                    self.isLoadMore = NO;
+                }
+            }
+            else {
+                [self MBPShow: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 topHeight = 60.0f;
+    self.tableView.frame = CGRectMake(0, topHeight, self.bounds.size.width, self.bounds.size.height - topHeight);
+    if (![self.subviews containsObject:self.uploadView]) {
+        [self addSubview:self.uploadView];
+    }
+}
+
+#pragma mark - UITableViewDataSource
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return self.dataArray.count;
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (self.selectIndex == 1) {
+        return 100;
+    }
+    else if (self.selectIndex == 2) {
+        return 100;
+    }
+    else {
+        return 110.0f;;
+    }
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (self.selectIndex == 1) {
+        
+        AccompanyCourseCell *cell = [tableView dequeueReusableCellWithIdentifier:@"AccompanyCourseCell"];
+        return cell;
+    }
+    else if (self.selectIndex == 2) {
+        LiveCourseCell *cell = [tableView dequeueReusableCellWithIdentifier:@"LiveCourseCell"];
+        return cell;
+    }
+    else {
+        MusicMessageModel *model = self.dataArray[indexPath.row];
+        MinePageMusicCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MinePageMusicCell"];
+        [cell configWithMessage:model];
+        return cell;
+    }
+}
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (self.selectIndex == 2) { // 直播课详情
+        
+    }
+    else if (self.selectIndex == 4) { // 曲谱详情
+        
+    }
+}
+
+/**
+ 设置没有数据时的显示
+ 
+ @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, kScreenWidth, kScreenHeight - 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;
+}
+#pragma mark ----- lazying
+- (void)setTeaherAuth:(BOOL)teaherAuth {
+    _teaherAuth = teaherAuth;
+    if (self.selectIndex == 1) {
+        self.uploadView.type = teaherAuth ? MINEPAGETYPE_ACCOMPANY : MINEPAGETYPE_TEACHAUTH;
+    }
+    else if (self.selectIndex == 2) {
+        self.uploadView.type = teaherAuth ? MINEPAGETYPE_LIVE : MINEPAGETYPE_TEACHAUTH;
+    }
+}
+
+- (void)setMusicianAuthStatus:(BOOL)musicianAuthStatus {
+    _musicianAuthStatus = musicianAuthStatus;
+    if (self.selectIndex == 4) {
+        self.uploadView.type = musicianAuthStatus ? MINEPAGETYPE_MUSIC : MINEPAGETYPE_MUSICIANAUTH;
+    }
+}
+
+- (MinePageSubmitView *)uploadView {
+    if (!_uploadView) {
+        _uploadView = [MinePageSubmitView shareInstance];
+        CGFloat topHeight = 60.0f;
+        _uploadView.frame = CGRectMake(0, 0, kScreenWidth, topHeight);
+        MJWeakSelf;
+        [_uploadView opreationCallback:^(MINEPAGETYPE type) {
+            [weakSelf uploadAciton:type];
+        }];
+    }
+    return _uploadView;
+}
+
+- (void)uploadAciton:(MINEPAGETYPE)type {
+    switch (type) {
+        case MINEPAGETYPE_TEACHAUTH: // 老师认证
+        {
+            KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
+            webCtrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/teacherCert"];
+            [self.naviController pushViewController:webCtrl animated:YES];
+        }
+            break;
+        case MINEPAGETYPE_MUSICIANAUTH: // 音乐人认证
+        {
+            KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
+            webCtrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/musicCert"];
+            [self.naviController pushViewController:webCtrl animated:YES];
+        }
+            break;
+        case MINEPAGETYPE_ACCOMPANY:  // 陪练课设置
+        {
+            
+        }
+            break;
+        case MINEPAGETYPE_LIVE:  // 直播课设置
+        {
+            
+        }
+            break;
+        case MINEPAGETYPE_MUSIC:  // 上传曲谱
+        {
+            
+        }
+            break;
+        default:
+            break;
+    }
+}
 /*
 // Only override drawRect: if you perform custom drawing.
 // An empty implementation adversely affects performance during animation.

+ 85 - 3
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageHeadView.m

@@ -6,6 +6,8 @@
 //
 
 #import "MinePageHeadView.h"
+#import "TeacherInfo.h"
+#import "KSStarView.h"
 
 @interface MinePageHeadView ()
 
@@ -23,6 +25,8 @@
 
 @property (weak, nonatomic) IBOutlet UILabel *courseCount;
 
+@property (weak, nonatomic) IBOutlet KSStarView *starView;
+
 @property (nonatomic, copy) MinePageBack callback;
 
 @end
@@ -31,7 +35,8 @@
 
 - (void)awakeFromNib {
     [super awakeFromNib];
-    
+    self.starView.allowMark = NO;
+    self.topHeight.constant = iPhoneXSafeTopMargin + 55;
 }
 
 + (instancetype)shareInstance {
@@ -40,7 +45,43 @@
 }
 
 - (void)configSource:(id)source {
-    
+    if ([source isKindOfClass:[TeacherInfo class]]) {
+        TeacherInfo *infoMessage = source;
+        [self displayCount:infoMessage.fansNum inView:self.fansCount];
+        [self displayCount:infoMessage.expTime inView:self.courseCount];
+        self.starView.rate = infoMessage.starGrade / 5.0f;
+        if (![NSString isEmptyString:infoMessage.heardUrl]) {
+            [self.userAvatar sd_setImageWithURL:[NSURL URLWithString:infoMessage.heardUrl] placeholderImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
+        }
+        else {
+            [self.userAvatar setImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
+        }
+        if ([NSString isEmptyString:infoMessage.username]) {
+            self.teacherName.text = [NSString stringWithFormat:@"游客%@",infoMessage.userId];
+        }
+        else {
+            self.teacherName.text = infoMessage.username;
+        }
+        if ([NSString isEmptyString:infoMessage.subjectName]) {
+            [self.subjectView removeAllSubViews];
+        }
+        else {
+            NSArray *tagArray = [infoMessage.subjectName componentsSeparatedByString:@","];
+            CGFloat maxWidth = kScreenWidth - 28 - 10 - 80;
+            [self configTagViewWithTagArray:tagArray maxWidth:maxWidth];
+        }
+        
+    }
+}
+
+- (void)displayCount:(NSInteger)count inView:(UILabel *)descLabel {
+    if (count > 10000) {
+        double descNum = count / 10000.0;
+        descLabel.text = [NSString stringWithFormat:@"%.2f万",descNum];
+    }
+    else {
+        descLabel.text = [NSString stringWithFormat:@"%ld",count];
+    }
 }
 
 - (void)backAction:(MinePageBack)callback {
@@ -56,7 +97,48 @@
 }
 
 - (CGFloat)getViewHeight {
-    return 1110.0f;
+    return self.topHeight.constant + 10 +22 + 50 + 128 + 10;
+}
+
+- (void)configTagViewWithTagArray:(NSArray *)tagArray maxWidth:(CGFloat)maxWidth {
+    [self.subjectView removeAllSubViews];
+    CGFloat width = maxWidth;
+    CGFloat xSpace = 0.0f;
+    for (NSInteger i = 0; i < tagArray.count; i++) {
+        NSString *tagString = tagArray[i];
+        CGFloat labelWidth = [self getStringWidthInLabel:tagString font:[UIFont systemFontOfSize:11.0f]];
+        CGFloat viewWidth = labelWidth + 8;
+        if (xSpace + viewWidth > width) {
+            return;
+        }
+        CGRect frame = CGRectMake(xSpace, 0, viewWidth, 16.0f);
+        [self createTagLabelViewWithName:tagString frame:frame];
+        xSpace += (viewWidth + 6);
+    }
+}
+
+- (CGFloat)getStringWidthInLabel:(NSString *)tagString font:(UIFont *)font {
+    CGFloat width = [tagString boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, 16.0f) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:font} context:nil].size.width+1;
+    return width;
+}
+
+- (void)createTagLabelViewWithName:(NSString *)name frame:(CGRect)frame {
+    UIView *bgView = [[UIView alloc] initWithFrame:frame];
+    bgView.backgroundColor = HexRGB(0xfff1de);
+    bgView.layer.cornerRadius = 4.0f;
+    [self.subjectView addSubview:bgView];
+    
+    UILabel *tagLabel = [[UILabel alloc] init];
+    tagLabel.text = name;
+    tagLabel.textColor = HexRGB(0xff8c00);
+    tagLabel.font = [UIFont systemFontOfSize:11.0f];
+    tagLabel.textAlignment = NSTextAlignmentCenter;
+    [bgView addSubview:tagLabel];
+    [tagLabel mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.mas_equalTo(bgView.mas_left).offset(4);
+        make.right.mas_equalTo(bgView.mas_right).offset(-4);
+        make.top.bottom.mas_equalTo(bgView);
+    }];
 }
 /*
 // Only override drawRect: if you perform custom drawing.

+ 7 - 2
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageHeadView.xib

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="19529" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
     <device id="retina6_1" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19519"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -21,6 +21,10 @@
                 </imageView>
                 <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="back_white" translatesAutoresizingMaskIntoConstraints="NO" id="7zL-CV-PVX">
                     <rect key="frame" x="22" y="55" width="12" height="20"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="20" id="13W-Bp-Pfy"/>
+                        <constraint firstAttribute="width" constant="12" id="eg7-BZ-ne8"/>
+                    </constraints>
                 </imageView>
                 <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="LL3-u6-PTR">
                     <rect key="frame" x="0.0" y="43" width="44" height="44"/>
@@ -168,6 +172,7 @@
                 <outlet property="courseCount" destination="2OS-eZ-zCG" id="KpR-y1-5fZ"/>
                 <outlet property="fansCount" destination="Plf-H0-xrF" id="c79-za-jEs"/>
                 <outlet property="starBgView" destination="KYq-hR-Q3h" id="Awq-J5-ExS"/>
+                <outlet property="starView" destination="4dv-gx-6oZ" id="Gwi-kj-aNw"/>
                 <outlet property="subjectView" destination="gbV-Fp-BJg" id="B1u-Ok-Efj"/>
                 <outlet property="teacherName" destination="WL1-jV-cKh" id="ay9-eh-BiN"/>
                 <outlet property="topHeight" destination="2wx-ru-blr" id="gLE-Zt-0Fi"/>

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

@@ -6,10 +6,12 @@
 //
 
 #import <UIKit/UIKit.h>
+#import "KSJXBodyView.h"
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface MinePageMienBodyView : UIView
+@interface MinePageMienBodyView : KSJXBodyView
+
 
 @end
 

+ 125 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageMienBodyView.m

@@ -6,9 +6,134 @@
 //
 
 #import "MinePageMienBodyView.h"
+#import "MineIntroduceCell.h"
+#import "MineVideoCell.h"
+#import "MineFansGroupCell.h"
+
+
+@interface MinePageMienBodyView ()<UITableViewDelegate,UITableViewDataSource>
+
+@property (nonatomic, strong) NSMutableArray *fansGroupArray;
+
+@end
 
 @implementation MinePageMienBodyView
 
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        self.backgroundColor = HexRGB(0xf6f8f9);
+        self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height) style:UITableViewStyleGrouped];
+        self.tableView.backgroundColor = HexRGB(0xf6f8f9);
+        self.tableView.showsVerticalScrollIndicator = NO;
+        self.tableView.rowHeight = UITableViewAutomaticDimension;
+        self.tableView.estimatedRowHeight = 200.0f;
+        self.tableView.dataSource = self;
+        self.tableView.delegate = self;
+        self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
+        [self addSubview:self.tableView];
+        
+        
+        UIView *headView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 10)];
+        headView.backgroundColor = HexRGB(0xf6f8f9);
+        self.tableView.tableHeaderView = headView;
+        
+        UIView *bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 10)];
+        bottomView.backgroundColor = HexRGB(0xf6f8f9);
+        self.tableView.tableFooterView = bottomView;
+        
+        [self.tableView registerNib:[UINib nibWithNibName:@"MineIntroduceCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"MineIntroduceCell"];
+        [self.tableView registerNib:[UINib nibWithNibName:@"MineVideoCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"MineVideoCell"];
+        [self.tableView registerNib:[UINib nibWithNibName:@"MinePageMusicCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"MinePageMusicCell"];
+        
+        MJWeakSelf;
+        self.tableView.mj_header = [KSGifRefreshHeader headerWithRefreshingBlock:^{
+            [weakSelf requestData];
+        }];
+    }
+    return self;
+}
+
+- (void)requestData {
+    
+}
+
+- (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];
+    self.tableView.frame = self.bounds;
+}
+
+#pragma mark --- table data source
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
+    return 3;
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    if (section == 2) {
+        return self.fansGroupArray.count;
+    }
+    return 1;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (indexPath.section == 0) {
+        MineIntroduceCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MineIntroduceCell"];
+        return cell;
+    }
+    else if (indexPath.section == 1) {
+        MineVideoCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MineVideoCell"];
+        return cell;
+    }
+    else {
+        MineFansGroupCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MineFansGroupCell"];
+        return cell;
+    }
+}
+
+- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
+    if (section == 2) {
+        return [UIView new];
+    }
+    return [UIView new];
+}
+
+- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
+{
+    return [UIView new];
+}
+- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
+    if (section == 2) {
+        return 43.0f;
+    }
+    return CGFLOAT_MIN;
+}
+- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
+    return CGFLOAT_MIN;
+}
+
 /*
 // Only override drawRect: if you perform custom drawing.
 // An empty implementation adversely affects performance during animation.

+ 19 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageMusicCell.h

@@ -0,0 +1,19 @@
+//
+//  MinePageMusicCell.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/2.
+//
+
+#import <UIKit/UIKit.h>
+#import "MusicMessageModel.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface MinePageMusicCell : UITableViewCell
+
+- (void)configWithMessage:(MusicMessageModel *)songMessage;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 102 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageMusicCell.m

@@ -0,0 +1,102 @@
+//
+//  MinePageMusicCell.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/2.
+//
+
+#import "MinePageMusicCell.h"
+
+@interface MinePageMusicCell ()
+
+@property (weak, nonatomic) IBOutlet UILabel *songName;
+@property (weak, nonatomic) IBOutlet UILabel *songAuth;
+@property (weak, nonatomic) IBOutlet UIImageView *uploaderLogo;
+@property (weak, nonatomic) IBOutlet UILabel *uploaderName;
+@property (weak, nonatomic) IBOutlet UIImageView *typeImage;
+@property (weak, nonatomic) IBOutlet UIView *tagView;
+
+
+@end
+
+@implementation MinePageMusicCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+    self.selectionStyle = UITableViewCellSelectionStyleNone;
+}
+- (void)configWithMessage:(MusicMessageModel *)songMessage {
+    self.songName.text = [NSString returnNoNullStringWithString:songMessage.musicSheetName];
+    self.songAuth.text = [NSString returnNoNullStringWithString:songMessage.composer];
+    NSArray *tagArray = [songMessage.musicTag componentsSeparatedByString:@","];
+    CGFloat maxWidth = [self getTagViewMaxWidth:songMessage.username];
+    [self configTagViewWithTagArray:tagArray maxWidth:maxWidth];
+    NSString *typeImgName = @"";
+    if (songMessage.chargeType == 1) {
+        typeImgName = @"music_vip";
+    }
+    else if (songMessage.chargeType == 2) {
+        typeImgName = @"music_order";
+    }
+    else {
+        typeImgName = @"music_free";
+    }
+    [self.typeImage setImage:[UIImage imageNamed:typeImgName]];
+    
+    self.uploaderName.text = [NSString returnNoNullStringWithString:songMessage.username];
+    [self.uploaderLogo sd_setImageWithURL:[NSURL URLWithString:songMessage.avatar] placeholderImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
+}
+
+- (CGFloat)getTagViewMaxWidth:(NSString *)teacherName {
+    CGFloat width = [self getStringWidthInLabel:teacherName font:[UIFont systemFontOfSize:12.0f]];
+    return kScreenWidth - 45  - 10 - 14 - width - 8;
+}
+
+- (void)configTagViewWithTagArray:(NSArray *)tagArray maxWidth:(CGFloat)maxWidth {
+    [self.tagView removeAllSubViews];
+    CGFloat width = maxWidth;
+    CGFloat xSpace = 0.0f;
+    for (NSInteger i = 0; i < tagArray.count; i++) {
+        NSString *tagString = tagArray[i];
+        CGFloat labelWidth = [self getStringWidthInLabel:tagString font:[UIFont systemFontOfSize:11.0f]];
+        CGFloat viewWidth = labelWidth + 8;
+        if (xSpace + viewWidth > width) {
+            return;
+        }
+        CGRect frame = CGRectMake(xSpace, 0, viewWidth, 16.0f);
+        [self createTagLabelViewWithName:tagString frame:frame];
+        xSpace += (viewWidth + 6);
+    }
+}
+
+- (CGFloat)getStringWidthInLabel:(NSString *)tagString font:(UIFont *)font {
+    CGFloat width = [tagString boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, 16.0f) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:font} context:nil].size.width+1;
+    return width;
+}
+
+- (void)createTagLabelViewWithName:(NSString *)name frame:(CGRect)frame {
+    UIView *bgView = [[UIView alloc] initWithFrame:frame];
+    bgView.backgroundColor = HexRGB(0xfff1de);
+    bgView.layer.cornerRadius = 4.0f;
+    [self.tagView addSubview:bgView];
+    
+    UILabel *tagLabel = [[UILabel alloc] init];
+    tagLabel.text = name;
+    tagLabel.textColor = HexRGB(0xff8c00);
+    tagLabel.font = [UIFont systemFontOfSize:11.0f];
+    tagLabel.textAlignment = NSTextAlignmentCenter;
+    [bgView addSubview:tagLabel];
+    [tagLabel mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.mas_equalTo(bgView.mas_left).offset(4);
+        make.right.mas_equalTo(bgView.mas_right).offset(-4);
+        make.top.bottom.mas_equalTo(bgView);
+    }];
+}
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end

+ 145 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageMusicCell.xib

@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="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="127" id="KGk-i7-Jjw" customClass="MinePageMusicCell">
+            <rect key="frame" x="0.0" y="0.0" width="413" 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="413" height="115"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="eZd-kc-RgJ">
+                        <rect key="frame" x="14" y="0.0" width="385" height="103"/>
+                        <subviews>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="music_logo" translatesAutoresizingMaskIntoConstraints="NO" id="xBX-sV-7hK">
+                                <rect key="frame" x="11" y="10" width="41" height="40"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="40" id="sWr-09-0yg"/>
+                                    <constraint firstAttribute="width" constant="41" id="wUC-OQ-6R6"/>
+                                </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="5wX-Qg-UK0">
+                                <rect key="frame" x="66" y="10" width="58" height="20"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="20" id="889-hG-0pZ"/>
+                                </constraints>
+                                <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"/>
+                                <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="66" y="30" width="144" 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.41568627450000001" green="0.41568627450000001" blue="0.41568627450000001" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ujv-HX-L1j">
+                                <rect key="frame" x="10" y="60" width="365" height="1"/>
+                                <color key="backgroundColor" red="0.94901960780000005" green="0.94901960780000005" blue="0.94901960780000005" alpha="1" colorSpace="calibratedRGB"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="1" id="NtP-23-T7h"/>
+                                </constraints>
+                            </view>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="user_default_avatal" translatesAutoresizingMaskIntoConstraints="NO" id="vSK-7E-AyC">
+                                <rect key="frame" x="18" y="69" width="20" height="20"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="20" id="F5A-99-KtI"/>
+                                    <constraint firstAttribute="height" constant="20" id="fU8-o8-TXi"/>
+                                </constraints>
+                                <userDefinedRuntimeAttributes>
+                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                        <real key="value" value="10"/>
+                                    </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="9CL-j5-vYW">
+                                <rect key="frame" x="45" y="71.5" width="37" height="15"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                                <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="qO5-Vi-5dQ">
+                                <rect key="frame" x="90" y="71" width="285" 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="music_free" translatesAutoresizingMaskIntoConstraints="NO" id="USF-bE-ZKd">
+                                <rect key="frame" x="318" y="19" width="55" height="22"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="22" id="EPk-yc-6W4"/>
+                                    <constraint firstAttribute="width" constant="55" id="Pz0-aU-0vp"/>
+                                </constraints>
+                            </imageView>
+                        </subviews>
+                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                        <constraints>
+                            <constraint firstItem="9CL-j5-vYW" firstAttribute="leading" secondItem="vSK-7E-AyC" secondAttribute="trailing" constant="7" id="2iU-lx-nvt"/>
+                            <constraint firstAttribute="trailing" secondItem="ujv-HX-L1j" secondAttribute="trailing" constant="10" id="7ns-id-aE9"/>
+                            <constraint firstItem="USF-bE-ZKd" firstAttribute="top" secondItem="eZd-kc-RgJ" secondAttribute="top" constant="19" id="8Ac-2I-5Bb"/>
+                            <constraint firstItem="ujv-HX-L1j" firstAttribute="top" secondItem="xBX-sV-7hK" secondAttribute="bottom" constant="10" id="E5b-1U-0iA"/>
+                            <constraint firstItem="5wX-Qg-UK0" firstAttribute="top" secondItem="xBX-sV-7hK" secondAttribute="top" id="GF0-N4-mRC"/>
+                            <constraint firstItem="qO5-Vi-5dQ" firstAttribute="leading" secondItem="9CL-j5-vYW" secondAttribute="trailing" constant="8" id="Mwk-yU-CCk"/>
+                            <constraint firstAttribute="trailing" secondItem="qO5-Vi-5dQ" secondAttribute="trailing" constant="10" id="QtY-Jd-8A9"/>
+                            <constraint firstItem="KNo-AM-8Um" firstAttribute="leading" secondItem="5wX-Qg-UK0" secondAttribute="leading" id="SAG-7K-K4z"/>
+                            <constraint firstItem="ujv-HX-L1j" firstAttribute="leading" secondItem="eZd-kc-RgJ" secondAttribute="leading" constant="10" id="W3P-sN-SBL"/>
+                            <constraint firstAttribute="trailing" secondItem="USF-bE-ZKd" secondAttribute="trailing" constant="12" id="Ybb-b6-3qY"/>
+                            <constraint firstItem="9CL-j5-vYW" firstAttribute="centerY" secondItem="vSK-7E-AyC" secondAttribute="centerY" id="Zkd-jQ-rlp"/>
+                            <constraint firstItem="xBX-sV-7hK" firstAttribute="top" secondItem="eZd-kc-RgJ" secondAttribute="top" constant="10" id="bfC-BN-GUB"/>
+                            <constraint firstItem="qO5-Vi-5dQ" firstAttribute="centerY" secondItem="9CL-j5-vYW" secondAttribute="centerY" id="bvZ-Nk-Gun"/>
+                            <constraint firstItem="xBX-sV-7hK" firstAttribute="leading" secondItem="eZd-kc-RgJ" secondAttribute="leading" constant="11" id="fgT-Ph-1JC"/>
+                            <constraint firstItem="5wX-Qg-UK0" firstAttribute="leading" secondItem="xBX-sV-7hK" secondAttribute="trailing" constant="14" id="mCv-ht-Blc"/>
+                            <constraint firstItem="vSK-7E-AyC" firstAttribute="top" secondItem="ujv-HX-L1j" secondAttribute="bottom" constant="8" id="sTo-Cw-Y1I"/>
+                            <constraint firstItem="KNo-AM-8Um" firstAttribute="top" secondItem="5wX-Qg-UK0" secondAttribute="bottom" id="xBS-GS-6Av"/>
+                            <constraint firstItem="vSK-7E-AyC" firstAttribute="leading" secondItem="eZd-kc-RgJ" secondAttribute="leading" constant="18" id="zid-dV-bbP"/>
+                        </constraints>
+                        <userDefinedRuntimeAttributes>
+                            <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                <real key="value" value="10"/>
+                            </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" 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>
+            </tableViewCellContentView>
+            <viewLayoutGuide key="safeArea" id="aW0-zy-SZf"/>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <connections>
+                <outlet property="songAuth" destination="KNo-AM-8Um" id="sE3-sB-pLo"/>
+                <outlet property="songName" destination="5wX-Qg-UK0" id="ibp-Xx-gL2"/>
+                <outlet property="tagView" destination="qO5-Vi-5dQ" id="Jau-UE-yYr"/>
+                <outlet property="typeImage" destination="USF-bE-ZKd" id="Gfe-OL-mVO"/>
+                <outlet property="uploaderLogo" destination="vSK-7E-AyC" id="IzE-RN-iKH"/>
+                <outlet property="uploaderName" destination="9CL-j5-vYW" id="giB-AV-2Aq"/>
+            </connections>
+            <point key="canvasLocation" x="199.27536231884059" y="123.54910714285714"/>
+        </tableViewCell>
+    </objects>
+    <resources>
+        <image name="music_free" width="55" height="22"/>
+        <image name="music_logo" width="41" height="40"/>
+        <image name="user_default_avatal" width="52" height="52"/>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

+ 33 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageSubmitView.h

@@ -0,0 +1,33 @@
+//
+//  MinePageSubmitView.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/2.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef NS_ENUM(NSInteger, MINEPAGETYPE) {
+    MINEPAGETYPE_TEACHAUTH,     // 老师认证
+    MINEPAGETYPE_MUSICIANAUTH,  // 音乐人认证
+    MINEPAGETYPE_ACCOMPANY,     // 陪练课设置
+    MINEPAGETYPE_LIVE,          // 直播课设置
+    MINEPAGETYPE_VIDEO,         // 视频课设置
+    MINEPAGETYPE_MUSIC,         // 乐谱
+};
+
+typedef void(^MinePageSettingBlock)(MINEPAGETYPE type);
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface MinePageSubmitView : UIView
+
+@property (nonatomic, assign) MINEPAGETYPE type;
+
++ (instancetype)shareInstance;
+
+- (void)opreationCallback:(MinePageSettingBlock)callback;
+
+@end
+
+NS_ASSUME_NONNULL_END

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

@@ -0,0 +1,88 @@
+//
+//  MinePageSubmitView.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/2.
+//
+
+#import "MinePageSubmitView.h"
+
+@interface MinePageSubmitView ()
+@property (weak, nonatomic) IBOutlet UIImageView *typeImage;
+@property (weak, nonatomic) IBOutlet UILabel *typeName;
+
+@property (nonatomic, copy) MinePageSettingBlock callback;
+
+@end
+
+@implementation MinePageSubmitView
+
++ (instancetype)shareInstance {
+    MinePageSubmitView *view = [[[NSBundle mainBundle] loadNibNamed:@"MinePageSubmitView" owner:nil options:nil] firstObject];
+    return view;
+}
+
+- (void)opreationCallback:(MinePageSettingBlock)callback {
+    if (callback) {
+        self.callback = callback;
+    }
+}
+
+- (void)setType:(MINEPAGETYPE)type {
+    _type = type;
+    switch (type) {
+        case MINEPAGETYPE_TEACHAUTH: // 老师认证
+        {
+            
+        }
+            break;
+        case MINEPAGETYPE_MUSICIANAUTH:  // 音乐人认证
+        {
+            
+        }
+            break;
+        case MINEPAGETYPE_ACCOMPANY:
+        {
+            [self.typeImage setImage:[UIImage imageNamed:@"accompany_setting"]];
+            self.typeName.text = @"陪练课设置";
+        }
+            break;
+        case MINEPAGETYPE_LIVE:
+        {
+            [self.typeImage setImage:[UIImage imageNamed:@"liveCourse_create"]];
+            self.typeName.text = @"创建直播课";
+            
+        }
+            break;
+        case MINEPAGETYPE_VIDEO:
+        {
+            [self.typeImage setImage:[UIImage imageNamed:@"videoCourse_create"]];
+            self.typeName.text = @"创建视频课";
+        }
+            break;
+        case MINEPAGETYPE_MUSIC:
+        {
+            [self.typeImage setImage:[UIImage imageNamed:@"music_upload"]];
+            self.typeName.text = @"上传乐谱";
+        }
+            break;
+        default:
+            break;
+    }
+}
+
+- (IBAction)opreationAction:(UIButton *)sender {
+    if (self.callback) {
+        self.callback(self.type);
+    }
+}
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 99 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageSubmitView.xib

@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="System colors in document resources" minToolsVersion="11.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="MinePageSubmitView">
+            <rect key="frame" x="0.0" y="0.0" width="375" height="58"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Dkz-h0-c4S">
+                    <rect key="frame" x="14" y="9" width="347" height="40"/>
+                    <subviews>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="上传曲谱" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ze6-zr-A4T">
+                            <rect key="frame" x="142.5" y="10" width="62" height="20"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="20" id="pra-fq-YTU"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="15"/>
+                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="music_upload" translatesAutoresizingMaskIntoConstraints="NO" id="bae-GI-M8q">
+                            <rect key="frame" x="114.5" y="7" width="26" height="26"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="26" id="7mh-oo-dvi"/>
+                                <constraint firstAttribute="height" constant="26" id="faY-AF-gtM"/>
+                            </constraints>
+                        </imageView>
+                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="setting_next" translatesAutoresizingMaskIntoConstraints="NO" id="ow7-6t-Jk1">
+                            <rect key="frame" x="212.5" y="14.5" width="6" height="11"/>
+                        </imageView>
+                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="F5F-GJ-9lM">
+                            <rect key="frame" x="0.0" y="0.0" width="347" height="40"/>
+                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
+                            <connections>
+                                <action selector="opreationAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="ICc-F5-TKO"/>
+                            </connections>
+                        </button>
+                    </subviews>
+                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                    <constraints>
+                        <constraint firstItem="Ze6-zr-A4T" firstAttribute="centerX" secondItem="Dkz-h0-c4S" secondAttribute="centerX" id="3Cf-3S-39e"/>
+                        <constraint firstItem="F5F-GJ-9lM" firstAttribute="top" secondItem="Dkz-h0-c4S" secondAttribute="top" id="5nE-OV-vlr"/>
+                        <constraint firstItem="Ze6-zr-A4T" firstAttribute="leading" secondItem="bae-GI-M8q" secondAttribute="trailing" constant="2" id="8If-wI-pIm"/>
+                        <constraint firstItem="Ze6-zr-A4T" firstAttribute="centerY" secondItem="bae-GI-M8q" secondAttribute="centerY" id="IKs-x1-QTx"/>
+                        <constraint firstItem="F5F-GJ-9lM" firstAttribute="leading" secondItem="Dkz-h0-c4S" secondAttribute="leading" id="TIL-5J-rta"/>
+                        <constraint firstAttribute="bottom" secondItem="F5F-GJ-9lM" secondAttribute="bottom" id="TbQ-eS-BhL"/>
+                        <constraint firstItem="ow7-6t-Jk1" firstAttribute="leading" secondItem="Ze6-zr-A4T" secondAttribute="trailing" constant="8" id="Va1-mA-cIj"/>
+                        <constraint firstAttribute="trailing" secondItem="F5F-GJ-9lM" secondAttribute="trailing" id="Zut-Mp-Vpb"/>
+                        <constraint firstItem="ow7-6t-Jk1" firstAttribute="centerY" secondItem="Ze6-zr-A4T" secondAttribute="centerY" id="e1x-PS-czg"/>
+                        <constraint firstItem="Ze6-zr-A4T" firstAttribute="centerY" secondItem="Dkz-h0-c4S" secondAttribute="centerY" id="yr3-AB-hPw"/>
+                        <constraint firstAttribute="height" constant="40" id="zXB-81-XYD"/>
+                    </constraints>
+                    <userDefinedRuntimeAttributes>
+                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                            <real key="value" value="10"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
+                            <real key="value" value="1"/>
+                        </userDefinedRuntimeAttribute>
+                        <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
+                            <color key="value" red="0.8980392157" green="0.8980392157" blue="0.8980392157" alpha="1" colorSpace="calibratedRGB"/>
+                        </userDefinedRuntimeAttribute>
+                    </userDefinedRuntimeAttributes>
+                </view>
+            </subviews>
+            <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstItem="Dkz-h0-c4S" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="14" id="BY0-nJ-5VN"/>
+                <constraint firstItem="vUN-kp-3ea" firstAttribute="trailing" secondItem="Dkz-h0-c4S" secondAttribute="trailing" constant="14" id="md4-2z-Unv"/>
+                <constraint firstItem="Dkz-h0-c4S" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" id="vkC-YI-GOX"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <connections>
+                <outlet property="typeImage" destination="bae-GI-M8q" id="EHb-Ji-fNN"/>
+                <outlet property="typeName" destination="Ze6-zr-A4T" id="Gdl-yh-efk"/>
+            </connections>
+            <point key="canvasLocation" x="131.15942028985509" y="-115.17857142857142"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="music_upload" width="26" height="26"/>
+        <image name="setting_next" width="6" height="11"/>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

+ 19 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageVideoCell.h

@@ -0,0 +1,19 @@
+//
+//  MinePageVideoCell.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/2.
+//
+
+#import <UIKit/UIKit.h>
+#import "VideoCourseModel.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface MinePageVideoCell : UICollectionViewCell
+
+- (void)configSourceModel:(VideoCourseModel *)model;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 43 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageVideoCell.m

@@ -0,0 +1,43 @@
+//
+//  MinePageVideoCell.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/2.
+//
+
+#import "MinePageVideoCell.h"
+
+@interface MinePageVideoCell ()
+
+@property (weak, nonatomic) IBOutlet UIImageView *coverImage;
+
+@property (weak, nonatomic) IBOutlet UILabel *courseTitle;
+
+@property (weak, nonatomic) IBOutlet UIImageView *teacherAvatar;
+
+@property (weak, nonatomic) IBOutlet UILabel *teacherName;
+
+@property (weak, nonatomic) IBOutlet UILabel *courseMessage;
+
+@property (weak, nonatomic) IBOutlet UILabel *descLabel;
+
+@end
+
+@implementation MinePageVideoCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)configSourceModel:(VideoCourseModel *)model {
+    [self.coverImage sd_setImageWithURL:[NSURL URLWithString:model.lessonCoverUrl] placeholderImage:[UIImage imageNamed:@"video_placeholder"]];
+    self.courseTitle.text = [NSString returnNoNullStringWithString:model.lessonName];
+    [self.teacherAvatar sd_setImageWithURL:[NSURL URLWithString:model.avatar] placeholderImage:[UIImage imageNamed:USERDEFAULT_LOGO]];
+    self.teacherName.text = [NSString returnNoNullStringWithString:model.username];
+    self.courseMessage.text = [NSString  stringWithFormat:@"¥%.0f/%.0f课时",model.lessonPrice,model.lessonCount];
+    
+    self.descLabel.text = [NSString stringWithFormat:@"%.0f人已购买",model.countStudent];
+}
+
+@end

+ 139 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageVideoCell.xib

@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="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"/>
+        <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="gTV-IL-0wX" customClass="MinePageVideoCell">
+            <rect key="frame" x="0.0" y="0.0" width="207" height="239"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
+                <rect key="frame" x="0.0" y="0.0" width="207" height="239"/>
+                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                <subviews>
+                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="RA1-Ms-Rdt">
+                        <rect key="frame" x="0.0" y="0.0" width="207" height="239"/>
+                        <subviews>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="video_placeholder" translatesAutoresizingMaskIntoConstraints="NO" id="U59-Pt-Ft1">
+                                <rect key="frame" x="0.0" y="0.0" width="207" height="137"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" secondItem="U59-Pt-Ft1" secondAttribute="height" multiplier="168:111" id="vFb-cQ-HPy"/>
+                                </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="uOk-ia-Vh6">
+                                <rect key="frame" x="11" y="143" width="185" height="17"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                <color key="textColor" red="0.1019607843" green="0.1019607843" blue="0.1019607843" alpha="0.84705882349999995" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="¥120/4课时" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="W3y-Mv-wxM">
+                                <rect key="frame" x="9" y="187" width="81" height="20"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="20" id="e27-SE-MGk"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
+                                <color key="textColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="user_default_avatal" translatesAutoresizingMaskIntoConstraints="NO" id="yqj-pv-E9y">
+                                <rect key="frame" x="11" y="165" width="20" height="20"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="20" id="10h-7R-s14"/>
+                                    <constraint firstAttribute="height" constant="20" id="aYV-dF-zgt"/>
+                                </constraints>
+                                <userDefinedRuntimeAttributes>
+                                    <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                        <real key="value" value="10"/>
+                                    </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="Nwj-Ef-Sig">
+                                <rect key="frame" x="36" y="167.5" width="37" height="15"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                                <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="e8Z-Ri-oh9">
+                                <rect key="frame" x="79" y="165" width="118" height="20"/>
+                                <subviews>
+                                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="I0Q-VW-orJ">
+                                        <rect key="frame" x="0.0" y="4.5" width="1" height="11"/>
+                                        <color key="backgroundColor" red="0.82745098039999998" green="0.82745098039999998" blue="0.82745098039999998" alpha="1" colorSpace="calibratedRGB"/>
+                                        <constraints>
+                                            <constraint firstAttribute="height" constant="11" id="ZRv-4m-ap6"/>
+                                            <constraint firstAttribute="width" constant="1" id="b2J-4G-YmJ"/>
+                                        </constraints>
+                                    </view>
+                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="6人已购买" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1HX-v1-naa">
+                                        <rect key="frame" x="7" y="2.5" width="57" height="15"/>
+                                        <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                                        <color key="textColor" red="1" green="0.50196078430000002" blue="0.17254901959999999" alpha="1" colorSpace="calibratedRGB"/>
+                                        <nil key="highlightedColor"/>
+                                    </label>
+                                </subviews>
+                                <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                                <constraints>
+                                    <constraint firstItem="1HX-v1-naa" firstAttribute="centerY" secondItem="e8Z-Ri-oh9" secondAttribute="centerY" id="2td-qT-bcq"/>
+                                    <constraint firstItem="I0Q-VW-orJ" firstAttribute="leading" secondItem="e8Z-Ri-oh9" secondAttribute="leading" id="O00-V9-BYJ"/>
+                                    <constraint firstItem="1HX-v1-naa" firstAttribute="leading" secondItem="I0Q-VW-orJ" secondAttribute="trailing" constant="6" id="dM1-NL-96t"/>
+                                    <constraint firstItem="I0Q-VW-orJ" firstAttribute="centerY" secondItem="e8Z-Ri-oh9" secondAttribute="centerY" id="hbp-wS-HxG"/>
+                                    <constraint firstAttribute="height" constant="20" id="oJh-du-d2B"/>
+                                    <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="1HX-v1-naa" secondAttribute="trailing" constant="2" id="rS8-RP-vfC"/>
+                                </constraints>
+                            </view>
+                        </subviews>
+                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                        <constraints>
+                            <constraint firstItem="uOk-ia-Vh6" firstAttribute="top" secondItem="U59-Pt-Ft1" secondAttribute="bottom" constant="6" id="1pe-xh-lmN"/>
+                            <constraint firstAttribute="trailing" secondItem="U59-Pt-Ft1" secondAttribute="trailing" id="4Dp-mH-SWc"/>
+                            <constraint firstItem="yqj-pv-E9y" firstAttribute="leading" secondItem="RA1-Ms-Rdt" secondAttribute="leading" constant="11" id="8kQ-Qp-GAi"/>
+                            <constraint firstItem="yqj-pv-E9y" firstAttribute="top" secondItem="uOk-ia-Vh6" secondAttribute="bottom" constant="5" id="AJV-xP-ti7"/>
+                            <constraint firstItem="Nwj-Ef-Sig" firstAttribute="leading" secondItem="yqj-pv-E9y" secondAttribute="trailing" constant="5" id="Hbg-5d-IwB"/>
+                            <constraint firstItem="U59-Pt-Ft1" firstAttribute="top" secondItem="RA1-Ms-Rdt" secondAttribute="top" id="JRf-z3-v3b"/>
+                            <constraint firstItem="uOk-ia-Vh6" firstAttribute="leading" secondItem="RA1-Ms-Rdt" secondAttribute="leading" constant="11" id="RTH-lX-k5P"/>
+                            <constraint firstAttribute="trailing" secondItem="uOk-ia-Vh6" secondAttribute="trailing" constant="11" id="S4V-XM-Vxi"/>
+                            <constraint firstItem="U59-Pt-Ft1" firstAttribute="leading" secondItem="RA1-Ms-Rdt" secondAttribute="leading" id="UyZ-0m-Zce"/>
+                            <constraint firstItem="e8Z-Ri-oh9" firstAttribute="leading" secondItem="Nwj-Ef-Sig" secondAttribute="trailing" constant="6" id="Y31-jU-l4B"/>
+                            <constraint firstAttribute="trailing" secondItem="e8Z-Ri-oh9" secondAttribute="trailing" constant="10" id="ctU-1d-uaS"/>
+                            <constraint firstItem="W3y-Mv-wxM" firstAttribute="top" secondItem="yqj-pv-E9y" secondAttribute="bottom" constant="2" id="e3y-jZ-ZPa"/>
+                            <constraint firstItem="Nwj-Ef-Sig" firstAttribute="centerY" secondItem="yqj-pv-E9y" secondAttribute="centerY" id="lOz-ZL-BdG"/>
+                            <constraint firstItem="e8Z-Ri-oh9" firstAttribute="centerY" secondItem="Nwj-Ef-Sig" secondAttribute="centerY" id="wg1-be-1hH"/>
+                            <constraint firstItem="W3y-Mv-wxM" firstAttribute="leading" secondItem="RA1-Ms-Rdt" secondAttribute="leading" constant="9" id="xR2-mV-JFQ"/>
+                        </constraints>
+                    </view>
+                </subviews>
+            </view>
+            <viewLayoutGuide key="safeArea" id="SEy-5g-ep8"/>
+            <constraints>
+                <constraint firstAttribute="bottom" secondItem="RA1-Ms-Rdt" secondAttribute="bottom" id="8dJ-nf-dsf"/>
+                <constraint firstItem="RA1-Ms-Rdt" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="HwR-1n-wZS"/>
+                <constraint firstItem="RA1-Ms-Rdt" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" id="JeN-cc-UTb"/>
+                <constraint firstAttribute="trailing" secondItem="RA1-Ms-Rdt" secondAttribute="trailing" id="OE6-Fp-3Fh"/>
+            </constraints>
+            <size key="customSize" width="207" height="239"/>
+            <connections>
+                <outlet property="courseMessage" destination="W3y-Mv-wxM" id="Nsr-uP-v89"/>
+                <outlet property="courseTitle" destination="uOk-ia-Vh6" id="vHO-8t-9sg"/>
+                <outlet property="coverImage" destination="U59-Pt-Ft1" id="46O-sh-EXw"/>
+                <outlet property="descLabel" destination="1HX-v1-naa" id="RbV-LD-Rl1"/>
+                <outlet property="teacherAvatar" destination="yqj-pv-E9y" id="zcT-kt-aqU"/>
+                <outlet property="teacherName" destination="Nwj-Ef-Sig" id="gQl-V3-DUn"/>
+            </connections>
+            <point key="canvasLocation" x="245.6521739130435" y="142.96875"/>
+        </collectionViewCell>
+    </objects>
+    <resources>
+        <image name="user_default_avatal" width="52" height="52"/>
+        <image name="video_placeholder" width="168" height="111"/>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

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

@@ -12,6 +12,8 @@ NS_ASSUME_NONNULL_BEGIN
 /// 视频课table
 @interface MinePageVideoView : kSJXCollectionView
 
+@property (nonatomic, assign) BOOL teaherAuth;
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 272 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MinePageVideoView.m

@@ -6,9 +6,281 @@
 //
 
 #import "MinePageVideoView.h"
+#import "VideoCourseModel.h"
+#import "StateView.h"
+#import "Reachability.h"
+#import "MinePageVideoCell.h"
+#import "MinePageSubmitView.h"
+#import "KSBaseWKWebViewController.h"
+
+@interface MinePageVideoView ()<UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>
+
+@property (nonatomic, strong) NSMutableArray *dataArray;
+
+@property (nonatomic, strong) StateView *promptView;
+@property (nonatomic, strong) UIView *promptPlaceView;
+
+@property (nonatomic, assign) BOOL networkAvaiable; // 网络是否可用
+
+@property (nonatomic, assign) BOOL isLoadMore;
+@property (nonatomic, assign) NSInteger rows;
+@property (nonatomic, assign) NSInteger pages;
+
+@property (nonatomic, strong) MinePageSubmitView *uploadView;
+
+@end
 
 @implementation MinePageVideoView
 
+- (instancetype)initWithFrame:(CGRect)frame {
+    self = [super initWithFrame:frame];
+    if (self) {
+        self.backgroundColor = HexRGB(0xf6f8f9);
+        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
+        layout.sectionInset = UIEdgeInsetsMake(12, 14, 12, 14);
+        
+        self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height) collectionViewLayout:layout];
+        self.collectionView.backgroundColor = HexRGB(0xf6f8f9);
+        self.collectionView.delegate = self;
+        self.collectionView.dataSource = self;
+        self.collectionView.showsVerticalScrollIndicator = NO;
+        self.collectionView.showsHorizontalScrollIndicator = NO;
+        [self.collectionView registerNib:[UINib nibWithNibName:@"MinePageVideoCell" bundle:[NSBundle mainBundle]] forCellWithReuseIdentifier:@"MinePageVideoCell"];
+        [self addSubview:self.collectionView];
+        MJWeakSelf;
+        self.collectionView.mj_header = [KSGifRefreshHeader headerWithRefreshingBlock:^{
+            [weakSelf resetParamenter];
+            [weakSelf requestData];
+        }];
+        self.collectionView.mj_footer = [KSGifRefreshFooter footerWithRefreshingBlock:^{
+            if (weakSelf.isLoadMore) {
+                weakSelf.pages += 1;
+                [weakSelf requestData];
+            }
+            else {
+                [weakSelf.collectionView.mj_footer endRefreshingWithNoMoreData];
+            }
+        }];
+    }
+    return self;
+}
+
+- (void)endRefresh {
+    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+        [self.collectionView.mj_header endRefreshing];
+        [self.collectionView.mj_footer endRefreshing];
+    });
+}
+
+- (void)refreshAndRequestData {
+    [self resetParamenter];
+    [self requestData];
+}
+
+- (void)resetParamenter {
+    self.isLoadMore = YES;
+    self.pages = 1;
+    self.rows = 10;
+    self.dataArray = [NSMutableArray array];
+    [self.collectionView.mj_footer resetNoMoreData];
+    [self setPromptString:@"暂无内容" imageName:@"wd_img_zwsj" inView:self.collectionView];
+    [self.collectionView reloadData];
+}
+
+- (void)requestData {
+    [KSNetworkingManager videoLessonListRequest:KS_POST auditStatus:@"1" pageNo:self.pages pageSize:self.rows success:^(NSDictionary * _Nonnull dic) {
+        [self endRefresh];
+        if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) {
+            NSArray *sourceArray = [[dic dictionaryValueForKey:@"data"] arrayValueForKey:@"rows"];
+            for (NSDictionary *parm in sourceArray) {
+                VideoCourseModel *model = [[VideoCourseModel alloc] initWithDictionary:parm];
+                [self.dataArray addObject:model];
+            }
+                        for (int i = 0 ; i < 10; i++) {
+                            VideoCourseModel *model = [[VideoCourseModel alloc] init];
+                            model.username = @"hahahha";
+                            model.lessonName = @"小夜曲";
+                            model.lessonPrice = 5.0;
+                            model.countStudent = 88;
+                            [self.dataArray addObject:model];
+                        }
+            
+            if (sourceArray.count < self.rows) {
+                self.isLoadMore = NO;
+            }
+        }
+        else {
+            [self MBPShow:MESSAGEKEY];
+        }
+        [self.collectionView reloadData];
+        [self changePromptLabelStateWithArray:self.dataArray];
+    } faliure:^(NSError * _Nonnull error) {
+        [self endRefresh];
+        if (self.networkAvaiable == NO) {
+            [self setPromptString:@"暂无网络" imageName:@"no_networking" inView:self.collectionView];
+        }
+        [self.dataArray removeAllObjects];
+        [self.collectionView reloadData];
+        [self changePromptLabelStateWithArray:self.dataArray];
+    }];
+}
+
+- (void)beginRefreshImmediately {
+    [self.collectionView.mj_header beginRefreshing];
+}
+
+- (void)selectCellAtIndexPath:(NSIndexPath *)indexPath {
+    
+    if (self.lastSelectedIndexPath == indexPath) {
+        return;
+    }
+    if (self.lastSelectedIndexPath != nil) {
+        UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:self.lastSelectedIndexPath];
+        [cell setSelected:NO];
+    }
+    UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:indexPath];
+    [cell setSelected:YES];
+    self.lastSelectedIndexPath = indexPath;
+}
+
+- (void)layoutSubviews {
+    [super layoutSubviews];
+    CGFloat topHeight = 60.0f;
+    self.collectionView.frame = CGRectMake(0, topHeight, self.bounds.size.width, self.bounds.size.height - topHeight);
+    if (![self.subviews containsObject:self.uploadView]) {
+        [self addSubview:self.uploadView];
+    }
+}
+
+- (void)beginFirstRefresh {
+    if (!self.isHeaderRefreshed) {
+        [self beginRefreshImmediately];
+    }
+}
+
+#pragma mark ----- collection view
+- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
+    return 1;
+}
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
+    return self.dataArray.count;
+}
+
+- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
+    MinePageVideoCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"MinePageVideoCell" forIndexPath:indexPath];
+    
+    VideoCourseModel *model = [self.dataArray objectAtIndex:indexPath.row];
+    [cell configSourceModel:model];
+    return cell;
+}
+
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    
+}
+
+- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
+    return CGSizeMake((kScreenWidth - 28 - 11) / 2.0f, 220);
+}
+/**
+ 设置没有数据时的显示
+ 
+ @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, kScreenWidth, kScreenHeight - 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;
+}
+
+#pragma mark ----- lazying
+- (void)setTeaherAuth:(BOOL)teaherAuth {
+    _teaherAuth = teaherAuth;
+    self.uploadView.type = teaherAuth ? MINEPAGETYPE_ACCOMPANY : MINEPAGETYPE_TEACHAUTH;
+}
+
+- (MinePageSubmitView *)uploadView {
+    if (!_uploadView) {
+        _uploadView = [MinePageSubmitView shareInstance];
+        CGFloat topHeight = 60.0f;
+        _uploadView.frame = CGRectMake(0, 0, kScreenWidth, topHeight);
+        MJWeakSelf;
+        [_uploadView opreationCallback:^(MINEPAGETYPE type) {
+            [weakSelf uploadAciton:type];
+        }];
+    }
+    return _uploadView;
+}
+
+- (void)uploadAciton:(MINEPAGETYPE)type {
+    if (type == MINEPAGETYPE_TEACHAUTH) {
+        KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
+        webCtrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/teacherCert"];
+        [self.naviController pushViewController:webCtrl animated:YES];
+    }
+    else {
+        KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
+        webCtrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/videoCreate"];
+        [self.naviController pushViewController:webCtrl animated:YES];
+    }
+}
+- (NSMutableArray *)dataArray {
+    if (!_dataArray) {
+        _dataArray = [NSMutableArray array];
+    }
+    return _dataArray;
+}
 /*
 // Only override drawRect: if you perform custom drawing.
 // An empty implementation adversely affects performance during animation.

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

@@ -0,0 +1,18 @@
+//
+//  MineVideoCell.h
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/2.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface MineVideoCell : UITableViewCell
+
+@property (weak, nonatomic) IBOutlet UIView *videoContainer;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 29 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineVideoCell.m

@@ -0,0 +1,29 @@
+//
+//  MineVideoCell.m
+//  KulexiuForTeacher
+//
+//  Created by 王智 on 2022/4/2.
+//
+
+#import "MineVideoCell.h"
+
+@interface MineVideoCell ()
+
+@end
+
+
+@implementation MineVideoCell
+
+- (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

+ 80 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/MinePage/View/MineVideoCell.xib

@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="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="260" id="KGk-i7-Jjw" customClass="MineVideoCell">
+            <rect key="frame" x="0.0" y="0.0" width="373" height="260"/>
+            <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="373" height="260"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Kbc-sU-aNo">
+                        <rect key="frame" x="14" y="0.0" width="345" height="248"/>
+                        <subviews>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="mine_introduce" translatesAutoresizingMaskIntoConstraints="NO" id="HQf-zf-VPg">
+                                <rect key="frame" x="12" y="14" width="24" height="24"/>
+                            </imageView>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="个人介绍" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="GKG-Y1-2TR">
+                                <rect key="frame" x="39" y="11" width="66" height="30"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="30" id="gXX-Yw-50s"/>
+                                </constraints>
+                                <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="calibratedRGB"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5jL-Cm-W81">
+                                <rect key="frame" x="11" y="61" width="323" height="167"/>
+                                <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                            </view>
+                        </subviews>
+                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                        <constraints>
+                            <constraint firstItem="HQf-zf-VPg" firstAttribute="leading" secondItem="Kbc-sU-aNo" secondAttribute="leading" constant="12" id="3Si-q4-Eg9"/>
+                            <constraint firstItem="GKG-Y1-2TR" firstAttribute="centerY" secondItem="HQf-zf-VPg" secondAttribute="centerY" id="7H4-kZ-i0K"/>
+                            <constraint firstItem="GKG-Y1-2TR" firstAttribute="leading" secondItem="HQf-zf-VPg" secondAttribute="trailing" constant="3" id="FNZ-9y-D1x"/>
+                            <constraint firstItem="5jL-Cm-W81" firstAttribute="top" secondItem="GKG-Y1-2TR" secondAttribute="bottom" constant="20" id="MRu-mO-Pan"/>
+                            <constraint firstAttribute="trailing" secondItem="5jL-Cm-W81" secondAttribute="trailing" constant="11" id="NmJ-0j-yfj"/>
+                            <constraint firstAttribute="bottom" secondItem="5jL-Cm-W81" secondAttribute="bottom" constant="20" id="Sb3-sC-RcP"/>
+                            <constraint firstItem="5jL-Cm-W81" firstAttribute="leading" secondItem="Kbc-sU-aNo" secondAttribute="leading" constant="11" id="mqo-5J-vfY"/>
+                            <constraint firstItem="HQf-zf-VPg" firstAttribute="top" secondItem="Kbc-sU-aNo" secondAttribute="top" constant="14" id="tAD-Eu-T9B"/>
+                        </constraints>
+                        <userDefinedRuntimeAttributes>
+                            <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                                <real key="value" value="10"/>
+                            </userDefinedRuntimeAttribute>
+                        </userDefinedRuntimeAttributes>
+                    </view>
+                </subviews>
+                <constraints>
+                    <constraint firstAttribute="bottom" secondItem="Kbc-sU-aNo" secondAttribute="bottom" constant="12" id="a7c-2h-LKG"/>
+                    <constraint firstItem="Kbc-sU-aNo" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="14" id="ey0-Dm-4DM"/>
+                    <constraint firstAttribute="trailing" secondItem="Kbc-sU-aNo" secondAttribute="trailing" constant="14" id="lMX-4o-zeX"/>
+                    <constraint firstItem="Kbc-sU-aNo" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="tdu-pP-w8M"/>
+                </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="videoContainer" destination="5jL-Cm-W81" id="aTh-Cg-cFo"/>
+            </connections>
+            <point key="canvasLocation" x="170.28985507246378" y="147.99107142857142"/>
+        </tableViewCell>
+    </objects>
+    <resources>
+        <image name="mine_introduce" width="24" height="24"/>
+        <systemColor name="systemBackgroundColor">
+            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+        </systemColor>
+    </resources>
+</document>

Vissa filer visades inte eftersom för många filer har ändrats