Explorar el Código

学生端我的课程

Steven hace 3 años
padre
commit
451a704dd5
Se han modificado 62 ficheros con 1199 adiciones y 211 borrados
  1. 22 0
      KulexiuForStudent/KulexiuForStudent.xcodeproj/project.pbxproj
  2. BIN
      KulexiuForStudent/KulexiuForStudent.xcworkspace/xcuserdata/wangzhi.xcuserdatad/UserInterfaceState.xcuserstate
  3. 11 4
      KulexiuForStudent/KulexiuForStudent/Common/Base/KSNetworkingManager.h
  4. 22 4
      KulexiuForStudent/KulexiuForStudent/Common/Base/KSNetworkingManager.m
  5. 135 1
      KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/Controller/MyCourseViewController.m
  6. 10 7
      KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/Model/AccompanyLessonModel.h
  7. 63 42
      KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/Model/AccompanyLessonModel.m
  8. 12 6
      KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/Model/LiveLessonModel.h
  9. 78 36
      KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/Model/LiveLessonModel.m
  10. 37 0
      KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/Model/VideoCourseModel.h
  11. 218 0
      KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/Model/VideoCourseModel.m
  12. 68 61
      KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/View/MyLessonBodyView.m
  13. 5 5
      KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/View/MyLessonSearchView.xib
  14. 3 6
      KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/View/MyLiveCourseCell.m
  15. 1 33
      KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/View/MyLiveCourseCell.xib
  16. 18 0
      KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/View/MyVideoCourseBodyView.h
  17. 251 0
      KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/View/MyVideoCourseBodyView.m
  18. 19 0
      KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/View/VideoCourseCell.h
  19. 50 0
      KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/View/VideoCourseCell.m
  20. 145 0
      KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/View/VideoCourseCell.xib
  21. BIN
      KulexiuForStudent/build/Debug-iphonesimulator/KulexiuForStudent.app/KulexiuForStudent
  22. 26 4
      KulexiuForStudent/build/Debug-iphonesimulator/KulexiuForStudent.app/_CodeSignature/CodeResources
  23. BIN
      KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/KulexiuForStudent-project-headers.hmap
  24. BIN
      KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/KSNetworkingManager.o
  25. 3 0
      KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/KulexiuForStudent.LinkFileList
  26. BIN
      KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/KulexiuForStudent_dependency_info.dat
  27. BIN
      KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/UIView+XIBView.dia
  28. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/AFNetworking.build/AFNetworking-all-target-headers.hmap
  29. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/CHIPageControl.build/CHIPageControl-all-non-framework-target-headers.hmap
  30. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/CHIPageControl.build/CHIPageControl-all-target-headers.hmap
  31. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/CHIPageControl.build/Objects-normal/x86_64/CHIPageControl-master.priors
  32. 2 2
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/CHIPageControl.build/Objects-normal/x86_64/CHIPageControl-master.swiftdeps
  33. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/IQKeyboardManager.build/IQKeyboardManager-all-non-framework-target-headers.hmap
  34. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/IQKeyboardManager.build/IQKeyboardManager-all-target-headers.hmap
  35. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/JXCategoryView.build/JXCategoryView-all-non-framework-target-headers.hmap
  36. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/JXCategoryView.build/JXCategoryView-all-target-headers.hmap
  37. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/JXPagingView.build/JXPagingView-all-non-framework-target-headers.hmap
  38. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/JXPagingView.build/JXPagingView-all-target-headers.hmap
  39. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/MBProgressHUD.build/MBProgressHUD-all-target-headers.hmap
  40. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/MJExtension.build/MJExtension-all-non-framework-target-headers.hmap
  41. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/MJExtension.build/MJExtension-all-target-headers.hmap
  42. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/MJRefresh.build/MJRefresh-all-target-headers.hmap
  43. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/Masonry.build/Masonry-all-target-headers.hmap
  44. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/Pods-KulexiuForStudent.build/Pods_KulexiuForStudent-all-non-framework-target-headers.hmap
  45. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/Pods-KulexiuForStudent.build/Pods_KulexiuForStudent-all-target-headers.hmap
  46. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/RSKImageCropper.build/RSKImageCropper-all-target-headers.hmap
  47. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/Reachability.build/Reachability-all-non-framework-target-headers.hmap
  48. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/Reachability.build/Reachability-all-target-headers.hmap
  49. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/SDWebImage.build/SDWebImage-all-target-headers.hmap
  50. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/SSZipArchive.build/SSZipArchive-all-non-framework-target-headers.hmap
  51. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/SSZipArchive.build/SSZipArchive-all-target-headers.hmap
  52. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/SocketRocket.build/SocketRocket-all-non-framework-target-headers.hmap
  53. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/SocketRocket.build/SocketRocket-all-target-headers.hmap
  54. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/Whiteboard-Whiteboard.build/Whiteboard-all-target-headers.hmap
  55. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/Whiteboard.build/Whiteboard-all-target-headers.hmap
  56. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/YYModel.build/YYModel-all-target-headers.hmap
  57. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/ZKCycleScrollView.build/ZKCycleScrollView-all-non-framework-target-headers.hmap
  58. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/ZKCycleScrollView.build/ZKCycleScrollView-all-target-headers.hmap
  59. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/dsBridge.build/dsBridge-all-non-framework-target-headers.hmap
  60. BIN
      KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/dsBridge.build/dsBridge-all-target-headers.hmap
  61. BIN
      KulexiuForStudent/build/XCBuildData/BuildDescriptionCacheIndex-604c88e60e61e13155f665cce0707a51
  62. BIN
      KulexiuForStudent/build/XCBuildData/build.db

+ 22 - 0
KulexiuForStudent/KulexiuForStudent.xcodeproj/project.pbxproj

@@ -361,6 +361,10 @@
 		BC0212FB27FC61D30040569F /* KSSegmentControl.m in Sources */ = {isa = PBXBuildFile; fileRef = BC0212FA27FC61D30040569F /* KSSegmentControl.m */; };
 		BC0212FE27FC66AA0040569F /* InstrumentMessageModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC0212FD27FC66AA0040569F /* InstrumentMessageModel.m */; };
 		BC02130127FC6ADD0040569F /* UIView+SubViewExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = BC02130027FC6ADD0040569F /* UIView+SubViewExtension.m */; };
+		BC0D1F6D281013DF00C5D9E5 /* MyVideoCourseBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC0D1F6C281013DF00C5D9E5 /* MyVideoCourseBodyView.m */; };
+		BC0D1F71281015B000C5D9E5 /* VideoCourseCell.m in Sources */ = {isa = PBXBuildFile; fileRef = BC0D1F6E281015AF00C5D9E5 /* VideoCourseCell.m */; };
+		BC0D1F72281015B000C5D9E5 /* VideoCourseCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC0D1F6F281015AF00C5D9E5 /* VideoCourseCell.xib */; };
+		BC0D1F752810165500C5D9E5 /* VideoCourseModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC0D1F742810165400C5D9E5 /* VideoCourseModel.m */; };
 		BC1191FF280ED64E00A716F7 /* MyCourseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC1191FE280ED64E00A716F7 /* MyCourseViewController.m */; };
 		BC119213280ED6A900A716F7 /* MyLessonBodyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC119200280ED6A600A716F7 /* MyLessonBodyView.m */; };
 		BC119215280ED6A900A716F7 /* MyLiveCourseCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC119203280ED6A700A716F7 /* MyLiveCourseCell.xib */; };
@@ -1231,6 +1235,13 @@
 		BC0212FD27FC66AA0040569F /* InstrumentMessageModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InstrumentMessageModel.m; sourceTree = "<group>"; };
 		BC0212FF27FC6ADD0040569F /* UIView+SubViewExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+SubViewExtension.h"; sourceTree = "<group>"; };
 		BC02130027FC6ADD0040569F /* UIView+SubViewExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+SubViewExtension.m"; sourceTree = "<group>"; };
+		BC0D1F6B281013DF00C5D9E5 /* MyVideoCourseBodyView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyVideoCourseBodyView.h; sourceTree = "<group>"; };
+		BC0D1F6C281013DF00C5D9E5 /* MyVideoCourseBodyView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MyVideoCourseBodyView.m; sourceTree = "<group>"; };
+		BC0D1F6E281015AF00C5D9E5 /* VideoCourseCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VideoCourseCell.m; sourceTree = "<group>"; };
+		BC0D1F6F281015AF00C5D9E5 /* VideoCourseCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = VideoCourseCell.xib; sourceTree = "<group>"; };
+		BC0D1F70281015B000C5D9E5 /* VideoCourseCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VideoCourseCell.h; sourceTree = "<group>"; };
+		BC0D1F732810165400C5D9E5 /* VideoCourseModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VideoCourseModel.h; sourceTree = "<group>"; };
+		BC0D1F742810165400C5D9E5 /* VideoCourseModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VideoCourseModel.m; sourceTree = "<group>"; };
 		BC1191FD280ED64E00A716F7 /* MyCourseViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MyCourseViewController.h; sourceTree = "<group>"; };
 		BC1191FE280ED64E00A716F7 /* MyCourseViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MyCourseViewController.m; sourceTree = "<group>"; };
 		BC119200280ED6A600A716F7 /* MyLessonBodyView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyLessonBodyView.m; sourceTree = "<group>"; };
@@ -3038,6 +3049,8 @@
 				BC11921F280ED6F400A716F7 /* AccompanyLessonModel.m */,
 				BC119221280ED6F500A716F7 /* LiveLessonModel.h */,
 				BC11921E280ED6F400A716F7 /* LiveLessonModel.m */,
+				BC0D1F732810165400C5D9E5 /* VideoCourseModel.h */,
+				BC0D1F742810165400C5D9E5 /* VideoCourseModel.m */,
 			);
 			path = Model;
 			sourceTree = "<group>";
@@ -3053,7 +3066,12 @@
 				BC119205280ED6A700A716F7 /* MyLiveCourseCell.h */,
 				BC119204280ED6A700A716F7 /* MyLiveCourseCell.m */,
 				BC119203280ED6A700A716F7 /* MyLiveCourseCell.xib */,
+				BC0D1F70281015B000C5D9E5 /* VideoCourseCell.h */,
+				BC0D1F6E281015AF00C5D9E5 /* VideoCourseCell.m */,
+				BC0D1F6F281015AF00C5D9E5 /* VideoCourseCell.xib */,
 				BC11920D280ED6A900A716F7 /* PopView */,
+				BC0D1F6B281013DF00C5D9E5 /* MyVideoCourseBodyView.h */,
+				BC0D1F6C281013DF00C5D9E5 /* MyVideoCourseBodyView.m */,
 			);
 			path = View;
 			sourceTree = "<group>";
@@ -3972,6 +3990,7 @@
 				BC119215280ED6A900A716F7 /* MyLiveCourseCell.xib in Resources */,
 				BC50171727FC0D8E00F8BCBC /* SubjectChooseBodyView.xib in Resources */,
 				BCB6359D27F6D2AB00ACFDCF /* tock.wav in Resources */,
+				BC0D1F72281015B000C5D9E5 /* VideoCourseCell.xib in Resources */,
 				BC11927B280FB07F00A716F7 /* AccompanyArrangeCell.xib in Resources */,
 				275E8AB327E18F8800DD3F6E /* Main.storyboard in Resources */,
 				277935B127E324A90010E277 /* mss_browseLoading@2x.png in Resources */,
@@ -4151,6 +4170,7 @@
 				BCB6346427F6D29600ACFDCF /* KSLiveChatroomSeatApply.m in Sources */,
 				BC0212FE27FC66AA0040569F /* InstrumentMessageModel.m in Sources */,
 				BCB6359F27F6D2AB00ACFDCF /* ClassTitleView.m in Sources */,
+				BC0D1F752810165500C5D9E5 /* VideoCourseModel.m in Sources */,
 				BC119276280FB01100A716F7 /* AccompanyHomeworkCell.m in Sources */,
 				277935AC27E324A80010E277 /* MSSBrowseBaseViewController.m in Sources */,
 				2779352427E324A60010E277 /* KSUtilities.m in Sources */,
@@ -4362,6 +4382,7 @@
 				BCB6347227F6D29600ACFDCF /* KSChatInputView.m in Sources */,
 				275E8AAA27E18F8800DD3F6E /* AppDelegate.m in Sources */,
 				2779356427E324A70010E277 /* KSFullDatePicker.m in Sources */,
+				BC0D1F6D281013DF00C5D9E5 /* MyVideoCourseBodyView.m in Sources */,
 				2723B5CF27F157BE00E0B90B /* GroupMemberModel.m in Sources */,
 				2723B62A27F157D500E0B90B /* GroupSettingViewController.m in Sources */,
 				2779359127E324A80010E277 /* FastForwardView.m in Sources */,
@@ -4375,6 +4396,7 @@
 				BCB6357127F6D2A300ACFDCF /* RTCService.m in Sources */,
 				2723B62427F157D500E0B90B /* NoticeEditBodyView.m in Sources */,
 				BCB6354327F6D2A300ACFDCF /* RecentSharedWhiteboardCell.m in Sources */,
+				BC0D1F71281015B000C5D9E5 /* VideoCourseCell.m in Sources */,
 				2779352F27E324A60010E277 /* UIView+Hints.m in Sources */,
 				2779351D27E324A60010E277 /* NSString+zh_SafeAccess.m in Sources */,
 				BCB6354727F6D2A300ACFDCF /* PersonListView.m in Sources */,

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


+ 11 - 4
KulexiuForStudent/KulexiuForStudent/Common/Base/KSNetworkingManager.h

@@ -431,7 +431,7 @@ NS_ASSUME_NONNULL_BEGIN
 /// @param faliure 失败
 + (void)queryStudentPracticeCourse:(NSString *)post classMonth:(NSString *)classMonth status:(NSString *)status subjectId:(NSString *)subjectId page:(NSInteger)page rows:(NSInteger)rows success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
 
-// /api-student/courseSchedule/queryTeacherLiveCourse
+// /api-student/courseSchedule/queryStudentLiveCourse
 /// 我的课程-直播课
 /// @param post post
 /// @param classDate 月份 yyyy-MM
@@ -441,10 +441,17 @@ NS_ASSUME_NONNULL_BEGIN
 /// @param rows 条数
 /// @param success 成功
 /// @param faliure 失败
-+ (void)queryTeacherLiveCourse:(NSString *)post classDate:(NSString *)classDate status:(NSString *)status subjectId:(NSString *)subjectId page:(NSInteger)page rows:(NSInteger)rows success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
++ (void)queryMyLiveCourse:(NSString *)post classDate:(NSString *)classDate status:(NSString *)status subjectId:(NSString *)subjectId page:(NSInteger)page rows:(NSInteger)rows success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
 
-// /api-student/videoLesson/selectGroup
-//+ (void)videoLessonGroupRequest:(NSString *)post
+// /api-student/videoLesson/selectMyGroup
+
+/// 视频课列表查询
+/// @param post post
+/// @param page 分页
+/// @param rows 条数
+/// @param success 成功
+/// @param faliure 失败
++ (void)videoLessonGroupRequest:(NSString *)post page:(NSInteger)page rows:(NSInteger)rows success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure;
 
 @end
 

+ 22 - 4
KulexiuForStudent/KulexiuForStudent/Common/Base/KSNetworkingManager.m

@@ -924,7 +924,7 @@
 /// @param faliure 失败
 + (void)queryStudentPracticeCourse:(NSString *)post classMonth:(NSString *)classMonth status:(NSString *)status subjectId:(NSString *)subjectId page:(NSInteger)page rows:(NSInteger)rows success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
     [self configRequestMethodJSON];
-    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-teacher/courseSchedule/queryStudentPracticeCourse"];
+    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-student/courseSchedule/queryStudentPracticeCourse"];
     NSMutableDictionary *parm = [NSMutableDictionary dictionary];
     [parm setValue:classMonth forKey:@"classMonth"];
     [parm setValue:status forKey:@"status"];
@@ -935,7 +935,7 @@
     [self request:post andWithUrl:url and:parm success:success faliure:faliure];
 }
 
-// /api-teacher/courseSchedule/queryTeacherLiveCourse
+// /api-student/courseSchedule/queryStudentLiveCourse
 /// 我的课程-直播课
 /// @param post post
 /// @param classDate 月份 yyyy-MM
@@ -945,9 +945,9 @@
 /// @param rows 条数
 /// @param success 成功
 /// @param faliure 失败
-+ (void)queryTeacherLiveCourse:(NSString *)post classDate:(NSString *)classDate status:(NSString *)status subjectId:(NSString *)subjectId page:(NSInteger)page rows:(NSInteger)rows success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
++ (void)queryMyLiveCourse:(NSString *)post classDate:(NSString *)classDate status:(NSString *)status subjectId:(NSString *)subjectId page:(NSInteger)page rows:(NSInteger)rows success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
     [self configRequestMethodJSON];
-    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-teacher/courseSchedule/queryTeacherLiveCourse"];
+    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-student/courseSchedule/queryStudentLiveCourse"];
     NSMutableDictionary *parm = [NSMutableDictionary dictionary];
     [parm setValue:classDate forKey:@"classDate"];
     [parm setValue:status forKey:@"status"];
@@ -957,4 +957,22 @@
     [parm setValue:UserDefault(UIDKey) forKey:@"studentId"];
     [self request:post andWithUrl:url and:parm success:success faliure:faliure];
 }
+
+// /api-student/videoLesson/selectMyGroup
+
+/// 视频课列表查询
+/// @param post post
+/// @param page 分页
+/// @param rows 条数
+/// @param success 成功
+/// @param faliure 失败
++ (void)videoLessonGroupRequest:(NSString *)post page:(NSInteger)page rows:(NSInteger)rows success:(void(^)(NSDictionary *dic))success faliure:(void(^)(NSError *error))faliure {
+    [self configRequestMethodJSON];
+    NSString *url = [NSString stringWithFormat:@"%@%@", hostURL, @"/api-student/videoLesson/selectMyGroup"];
+    NSMutableDictionary *parm = [NSMutableDictionary dictionary];
+    [parm setValue:@(page) forKey:@"page"];
+    [parm setValue:@(rows) forKey:@"rows"];
+    [self request:post andWithUrl:url and:parm success:success faliure:faliure];
+}
+
 @end

+ 135 - 1
KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/Controller/MyCourseViewController.m

@@ -6,8 +6,18 @@
 //
 
 #import "MyCourseViewController.h"
+#import "MyLessonBodyView.h"
+#import "MyVideoCourseBodyView.h"
+#import "JXCategoryView.h"
+#import "JXPagerListRefreshView.h"
 
-@interface MyCourseViewController ()
+#define HEADER_HEIGHT (64)
+
+@interface MyCourseViewController ()<JXPagerViewDelegate, JXPagerMainTableViewGestureDelegate,JXCategoryViewDelegate>
+
+@property (nonatomic, assign) NSInteger selectedIndex;
+
+@property (nonatomic, strong) NSMutableArray *listViewArray;
 
 @end
 
@@ -18,8 +28,132 @@
     // Do any additional setup after loading the view.
     [self allocTitle:@"我的课程"];
     self.titles = @[@"陪练课",@"直播课",@"视频课"];
+    [self configUI];
+}
+
+- (void)configUI {
+    [self.scrollView removeFromSuperview];
+    self.view.backgroundColor = HexRGB(0xf6f8f9);
+    
+    _categoryView = [[JXCategoryTitleView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, HEADER_HEIGHT)];
+    self.categoryView.titles = self.titles;
+    self.categoryView.delegate = self;
+    self.categoryView.titleFont = [UIFont systemFontOfSize:17.0f];
+    self.categoryView.titleSelectedFont = [UIFont systemFontOfSize:17.0f weight:UIFontWeightMedium];
+    self.categoryView.titleSelectedColor = HexRGB(0x333333);
+    self.categoryView.titleColor = HexRGB(0x666666);
+    self.categoryView.titleColorGradientEnabled = YES;
+    self.categoryView.backgroundColor = [UIColor whiteColor];
+    
+    JXCategoryIndicatorLineView *lineView = [[JXCategoryIndicatorLineView alloc] init];
+    lineView.indicatorColor = THEMECOLOR;
+    lineView.indicatorWidth = 16;
+    self.categoryView.indicators = @[lineView];
+    
+    _pagerView = [self preferredPagingView];
+    self.pagerView.frame = CGRectMake(0, 0, kScreenWidth, kScreenHeight - kNaviBarHeight - iPhoneXSafeBottomMargin);
+    self.pagerView.backgroundColor = [UIColor clearColor];
+    self.pagerView.mainTableView.backgroundColor = [UIColor clearColor];
+    self.pagerView.listContainerView.backgroundColor = [UIColor clearColor];
+    self.pagerView.mainTableView.gestureDelegate = self;
+    self.categoryView.listContainer = (id<JXCategoryViewListContainer>)self.pagerView.listContainerView;
+    self.pagerView.listContainerView.listCellBackgroundColor = [UIColor clearColor];
+    [self.view addSubview:self.pagerView];
+}
+
+- (void)viewWillAppear:(BOOL)animated {
+    [super viewWillAppear:animated];
+    self.navigationController.interactivePopGestureRecognizer.enabled = YES;
+    if (self.listViewArray.count > self.categoryView.selectedIndex) {
+        id value = self.listViewArray[self.categoryView.selectedIndex];
+        if ([value isKindOfClass:[MyVideoCourseBodyView class]]) {
+            MyVideoCourseBodyView *listView = (MyVideoCourseBodyView *)value;
+            [listView beginFirstRefresh];
+        }
+        else if ([value isKindOfClass:[MyLessonBodyView class]]) {
+            MyLessonBodyView *listView = (MyLessonBodyView *)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 == 2) {
+        MyVideoCourseBodyView *listView = [[MyVideoCourseBodyView alloc] init];
+        listView.naviController = self.navigationController;
+        [self.listViewArray replaceObjectAtIndex:index withObject:listView];
+        self.listViewArray[index] = listView;
+        listView.selectIndex = index;
+        [listView beginFirstRefresh];
+        return listView;
+    }
+    else {
+        MyLessonBodyView *listView = [[MyLessonBodyView alloc] init];
+        listView.naviController = self.navigationController;
+        [self.listViewArray replaceObjectAtIndex:index withObject:listView];
+        self.listViewArray[index] = listView;
+        listView.selectIndex = index;
+        [listView beginFirstRefresh];
+        return listView;
+    }
+    
+}
+
+#pragma mark - JXCategoryViewDelegate
+- (void)categoryView:(JXCategoryBaseView *)categoryView didSelectedItemAtIndex:(NSInteger)index {
+    self.navigationController.interactivePopGestureRecognizer.enabled = (index == 0);
+}
+
+
+#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]];
+}
+
+
+- (NSMutableArray *)listViewArray {
+    if (!_listViewArray) {
+        _listViewArray = [NSMutableArray arrayWithArray:@[@"",@"",@""]];
+    }
+    return _listViewArray;
+}
 /*
 #pragma mark - Navigation
 

+ 10 - 7
KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/Model/AccompanyLessonModel.h

@@ -1,7 +1,7 @@
 //
 //  AccompanyLessonModel.h
 //
-//  Created by Steven  on 2022/4/12
+//  Created by Steven  on 2022/4/20
 //  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
 //
 
@@ -11,16 +11,19 @@
 
 @interface AccompanyLessonModel : NSObject <NSCoding, NSCopying>
 
-@property (nonatomic, strong) NSString *status;
-@property (nonatomic, assign) double userId;
 @property (nonatomic, strong) NSString *classDate;
-@property (nonatomic, strong) NSString *endTime;
-@property (nonatomic, assign) double internalBaseClassIdentifier;
-@property (nonatomic, strong) NSString *userName;
+@property (nonatomic, strong) NSString *internalBaseClassIdentifier;
+@property (nonatomic, strong) NSString *subjectId;
+@property (nonatomic, strong) NSString *courseId;
 @property (nonatomic, strong) NSString *avatar;
-@property (nonatomic, assign) double subjectId;
+@property (nonatomic, strong) NSString *userId;
+@property (nonatomic, strong) NSString *endTime;
+@property (nonatomic, strong) NSString *signInTime;
+@property (nonatomic, strong) NSString *courseGoupId;
 @property (nonatomic, strong) NSString *subjectName;
+@property (nonatomic, strong) NSString *userName;
 @property (nonatomic, strong) NSString *startTime;
+@property (nonatomic, strong) NSString *status;
 
 + (instancetype)modelObjectWithDictionary:(NSDictionary *)dict;
 - (instancetype)initWithDictionary:(NSDictionary *)dict;

+ 63 - 42
KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/Model/AccompanyLessonModel.m

@@ -1,23 +1,26 @@
 //
 //  AccompanyLessonModel.m
 //
-//  Created by Steven  on 2022/4/12
+//  Created by Steven  on 2022/4/20
 //  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
 //
 
 #import "AccompanyLessonModel.h"
 
 
-NSString *const kAccompanyLessonModelStatus = @"status";
-NSString *const kAccompanyLessonModelUserId = @"userId";
 NSString *const kAccompanyLessonModelClassDate = @"classDate";
-NSString *const kAccompanyLessonModelEndTime = @"endTime";
 NSString *const kAccompanyLessonModelId = @"id";
-NSString *const kAccompanyLessonModelUserName = @"userName";
-NSString *const kAccompanyLessonModelAvatar = @"avatar";
 NSString *const kAccompanyLessonModelSubjectId = @"subjectId";
+NSString *const kAccompanyLessonModelCourseId = @"courseId";
+NSString *const kAccompanyLessonModelAvatar = @"avatar";
+NSString *const kAccompanyLessonModelUserId = @"userId";
+NSString *const kAccompanyLessonModelEndTime = @"endTime";
+NSString *const kAccompanyLessonModelSignInTime = @"signInTime";
+NSString *const kAccompanyLessonModelCourseGoupId = @"courseGoupId";
 NSString *const kAccompanyLessonModelSubjectName = @"subjectName";
+NSString *const kAccompanyLessonModelUserName = @"userName";
 NSString *const kAccompanyLessonModelStartTime = @"startTime";
+NSString *const kAccompanyLessonModelStatus = @"status";
 
 
 @interface AccompanyLessonModel ()
@@ -28,16 +31,19 @@ NSString *const kAccompanyLessonModelStartTime = @"startTime";
 
 @implementation AccompanyLessonModel
 
-@synthesize status = _status;
-@synthesize userId = _userId;
 @synthesize classDate = _classDate;
-@synthesize endTime = _endTime;
 @synthesize internalBaseClassIdentifier = _internalBaseClassIdentifier;
-@synthesize userName = _userName;
-@synthesize avatar = _avatar;
 @synthesize subjectId = _subjectId;
+@synthesize courseId = _courseId;
+@synthesize avatar = _avatar;
+@synthesize userId = _userId;
+@synthesize endTime = _endTime;
+@synthesize signInTime = _signInTime;
+@synthesize courseGoupId = _courseGoupId;
 @synthesize subjectName = _subjectName;
+@synthesize userName = _userName;
 @synthesize startTime = _startTime;
+@synthesize status = _status;
 
 
 + (instancetype)modelObjectWithDictionary:(NSDictionary *)dict
@@ -52,16 +58,19 @@ NSString *const kAccompanyLessonModelStartTime = @"startTime";
     // This check serves to make sure that a non-NSDictionary object
     // passed into the model class doesn't break the parsing.
     if(self && [dict isKindOfClass:[NSDictionary class]]) {
-            self.status = [self objectOrNilForKey:kAccompanyLessonModelStatus fromDictionary:dict];
-            self.userId = [[self objectOrNilForKey:kAccompanyLessonModelUserId fromDictionary:dict] doubleValue];
             self.classDate = [self objectOrNilForKey:kAccompanyLessonModelClassDate fromDictionary:dict];
-            self.endTime = [self objectOrNilForKey:kAccompanyLessonModelEndTime fromDictionary:dict];
-            self.internalBaseClassIdentifier = [[self objectOrNilForKey:kAccompanyLessonModelId fromDictionary:dict] doubleValue];
-            self.userName = [self objectOrNilForKey:kAccompanyLessonModelUserName fromDictionary:dict];
+            self.internalBaseClassIdentifier = [self objectOrNilForKey:kAccompanyLessonModelId fromDictionary:dict];
+            self.subjectId = [self objectOrNilForKey:kAccompanyLessonModelSubjectId fromDictionary:dict];
+            self.courseId = [self objectOrNilForKey:kAccompanyLessonModelCourseId fromDictionary:dict];
             self.avatar = [self objectOrNilForKey:kAccompanyLessonModelAvatar fromDictionary:dict];
-            self.subjectId = [[self objectOrNilForKey:kAccompanyLessonModelSubjectId fromDictionary:dict] doubleValue];
+            self.userId = [self objectOrNilForKey:kAccompanyLessonModelUserId fromDictionary:dict];
+            self.endTime = [self objectOrNilForKey:kAccompanyLessonModelEndTime fromDictionary:dict];
+            self.signInTime = [self objectOrNilForKey:kAccompanyLessonModelSignInTime fromDictionary:dict];
+            self.courseGoupId = [self objectOrNilForKey:kAccompanyLessonModelCourseGoupId fromDictionary:dict];
             self.subjectName = [self objectOrNilForKey:kAccompanyLessonModelSubjectName fromDictionary:dict];
+            self.userName = [self objectOrNilForKey:kAccompanyLessonModelUserName fromDictionary:dict];
             self.startTime = [self objectOrNilForKey:kAccompanyLessonModelStartTime fromDictionary:dict];
+            self.status = [self objectOrNilForKey:kAccompanyLessonModelStatus fromDictionary:dict];
 
     }
     
@@ -72,21 +81,24 @@ NSString *const kAccompanyLessonModelStartTime = @"startTime";
 - (NSDictionary *)dictionaryRepresentation
 {
     NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
-    [mutableDict setValue:self.status forKey:kAccompanyLessonModelStatus];
-    [mutableDict setValue:[NSNumber numberWithDouble:self.userId] forKey:kAccompanyLessonModelUserId];
     [mutableDict setValue:self.classDate forKey:kAccompanyLessonModelClassDate];
-    [mutableDict setValue:self.endTime forKey:kAccompanyLessonModelEndTime];
-    [mutableDict setValue:[NSNumber numberWithDouble:self.internalBaseClassIdentifier] forKey:kAccompanyLessonModelId];
-    [mutableDict setValue:self.userName forKey:kAccompanyLessonModelUserName];
+    [mutableDict setValue:self.internalBaseClassIdentifier forKey:kAccompanyLessonModelId];
+    [mutableDict setValue:self.subjectId forKey:kAccompanyLessonModelSubjectId];
+    [mutableDict setValue:self.courseId forKey:kAccompanyLessonModelCourseId];
     [mutableDict setValue:self.avatar forKey:kAccompanyLessonModelAvatar];
-    [mutableDict setValue:[NSNumber numberWithDouble:self.subjectId] forKey:kAccompanyLessonModelSubjectId];
+    [mutableDict setValue:self.userId forKey:kAccompanyLessonModelUserId];
+    [mutableDict setValue:self.endTime forKey:kAccompanyLessonModelEndTime];
+    [mutableDict setValue:self.signInTime forKey:kAccompanyLessonModelSignInTime];
+    [mutableDict setValue:self.courseGoupId forKey:kAccompanyLessonModelCourseGoupId];
     [mutableDict setValue:self.subjectName forKey:kAccompanyLessonModelSubjectName];
+    [mutableDict setValue:self.userName forKey:kAccompanyLessonModelUserName];
     [mutableDict setValue:self.startTime forKey:kAccompanyLessonModelStartTime];
+    [mutableDict setValue:self.status forKey:kAccompanyLessonModelStatus];
 
     return [NSDictionary dictionaryWithDictionary:mutableDict];
 }
 
-- (NSString *)description 
+- (NSString *)description
 {
     return [NSString stringWithFormat:@"%@", [self dictionaryRepresentation]];
 }
@@ -109,32 +121,38 @@ NSString *const kAccompanyLessonModelStartTime = @"startTime";
 {
     self = [super init];
 
-    self.status = [aDecoder decodeObjectForKey:kAccompanyLessonModelStatus];
-    self.userId = [aDecoder decodeDoubleForKey:kAccompanyLessonModelUserId];
     self.classDate = [aDecoder decodeObjectForKey:kAccompanyLessonModelClassDate];
-    self.endTime = [aDecoder decodeObjectForKey:kAccompanyLessonModelEndTime];
-    self.internalBaseClassIdentifier = [aDecoder decodeDoubleForKey:kAccompanyLessonModelId];
-    self.userName = [aDecoder decodeObjectForKey:kAccompanyLessonModelUserName];
+    self.internalBaseClassIdentifier = [aDecoder decodeObjectForKey:kAccompanyLessonModelId];
+    self.subjectId = [aDecoder decodeObjectForKey:kAccompanyLessonModelSubjectId];
+    self.courseId = [aDecoder decodeObjectForKey:kAccompanyLessonModelCourseId];
     self.avatar = [aDecoder decodeObjectForKey:kAccompanyLessonModelAvatar];
-    self.subjectId = [aDecoder decodeDoubleForKey:kAccompanyLessonModelSubjectId];
+    self.userId = [aDecoder decodeObjectForKey:kAccompanyLessonModelUserId];
+    self.endTime = [aDecoder decodeObjectForKey:kAccompanyLessonModelEndTime];
+    self.signInTime = [aDecoder decodeObjectForKey:kAccompanyLessonModelSignInTime];
+    self.courseGoupId = [aDecoder decodeObjectForKey:kAccompanyLessonModelCourseGoupId];
     self.subjectName = [aDecoder decodeObjectForKey:kAccompanyLessonModelSubjectName];
+    self.userName = [aDecoder decodeObjectForKey:kAccompanyLessonModelUserName];
     self.startTime = [aDecoder decodeObjectForKey:kAccompanyLessonModelStartTime];
+    self.status = [aDecoder decodeObjectForKey:kAccompanyLessonModelStatus];
     return self;
 }
 
 - (void)encodeWithCoder:(NSCoder *)aCoder
 {
 
-    [aCoder encodeObject:_status forKey:kAccompanyLessonModelStatus];
-    [aCoder encodeDouble:_userId forKey:kAccompanyLessonModelUserId];
     [aCoder encodeObject:_classDate forKey:kAccompanyLessonModelClassDate];
-    [aCoder encodeObject:_endTime forKey:kAccompanyLessonModelEndTime];
-    [aCoder encodeDouble:_internalBaseClassIdentifier forKey:kAccompanyLessonModelId];
-    [aCoder encodeObject:_userName forKey:kAccompanyLessonModelUserName];
+    [aCoder encodeObject:_internalBaseClassIdentifier forKey:kAccompanyLessonModelId];
+    [aCoder encodeObject:_subjectId forKey:kAccompanyLessonModelSubjectId];
+    [aCoder encodeObject:_courseId forKey:kAccompanyLessonModelCourseId];
     [aCoder encodeObject:_avatar forKey:kAccompanyLessonModelAvatar];
-    [aCoder encodeDouble:_subjectId forKey:kAccompanyLessonModelSubjectId];
+    [aCoder encodeObject:_userId forKey:kAccompanyLessonModelUserId];
+    [aCoder encodeObject:_endTime forKey:kAccompanyLessonModelEndTime];
+    [aCoder encodeObject:_signInTime forKey:kAccompanyLessonModelSignInTime];
+    [aCoder encodeObject:_courseGoupId forKey:kAccompanyLessonModelCourseGoupId];
     [aCoder encodeObject:_subjectName forKey:kAccompanyLessonModelSubjectName];
+    [aCoder encodeObject:_userName forKey:kAccompanyLessonModelUserName];
     [aCoder encodeObject:_startTime forKey:kAccompanyLessonModelStartTime];
+    [aCoder encodeObject:_status forKey:kAccompanyLessonModelStatus];
 }
 
 - (id)copyWithZone:(NSZone *)zone
@@ -143,16 +161,19 @@ NSString *const kAccompanyLessonModelStartTime = @"startTime";
     
     if (copy) {
 
-        copy.status = [self.status copyWithZone:zone];
-        copy.userId = self.userId;
         copy.classDate = [self.classDate copyWithZone:zone];
-        copy.endTime = [self.endTime copyWithZone:zone];
-        copy.internalBaseClassIdentifier = self.internalBaseClassIdentifier;
-        copy.userName = [self.userName copyWithZone:zone];
+        copy.internalBaseClassIdentifier = [self.internalBaseClassIdentifier copyWithZone:zone];
+        copy.subjectId = [self.subjectId copyWithZone:zone];
+        copy.courseId = [self.courseId copyWithZone:zone];
         copy.avatar = [self.avatar copyWithZone:zone];
-        copy.subjectId = self.subjectId;
+        copy.userId = [self.userId copyWithZone:zone];
+        copy.endTime = [self.endTime copyWithZone:zone];
+        copy.signInTime = [self.signInTime copyWithZone:zone];
+        copy.courseGoupId = [self.courseGoupId copyWithZone:zone];
         copy.subjectName = [self.subjectName copyWithZone:zone];
+        copy.userName = [self.userName copyWithZone:zone];
         copy.startTime = [self.startTime copyWithZone:zone];
+        copy.status = [self.status copyWithZone:zone];
     }
     
     return copy;

+ 12 - 6
KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/Model/LiveLessonModel.h

@@ -1,7 +1,7 @@
 //
 //  LiveLessonModel.h
 //
-//  Created by Steven  on 2022/4/12
+//  Created by Steven  on 2022/4/20
 //  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
 //
 
@@ -11,14 +11,20 @@
 
 @interface LiveLessonModel : NSObject <NSCoding, NSCopying>
 
-@property (nonatomic, strong) NSString *status;
-@property (nonatomic, assign) double studentCount;
-@property (nonatomic, strong) NSString *courseGroupId;
+@property (nonatomic, strong) NSString *classDate;
+@property (nonatomic, strong) NSString *courseType;
+@property (nonatomic, strong) NSString *subjectId;
+@property (nonatomic, strong) NSString *courseId;
+@property (nonatomic, strong) NSString *avatar;
+@property (nonatomic, strong) NSString *userId;
 @property (nonatomic, strong) NSString *endTime;
-@property (nonatomic, strong) NSString *backgroundPic;
+@property (nonatomic, strong) NSString *courseGoupId;
+@property (nonatomic, strong) NSString *cover;
 @property (nonatomic, strong) NSString *subjectName;
+@property (nonatomic, strong) NSString *payCount;
 @property (nonatomic, strong) NSString *startTime;
-@property (nonatomic, strong) NSString *courseGroupName;
+@property (nonatomic, strong) NSString *status;
+@property (nonatomic, strong) NSString *name;
 
 + (instancetype)modelObjectWithDictionary:(NSDictionary *)dict;
 - (instancetype)initWithDictionary:(NSDictionary *)dict;

+ 78 - 36
KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/Model/LiveLessonModel.m

@@ -1,21 +1,27 @@
 //
 //  LiveLessonModel.m
 //
-//  Created by Steven  on 2022/4/12
+//  Created by Steven  on 2022/4/20
 //  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
 //
 
 #import "LiveLessonModel.h"
 
 
-NSString *const kLiveLessonModelStatus = @"status";
-NSString *const kLiveLessonModelStudentCount = @"studentCount";
-NSString *const kLiveLessonModelCourseGroupId = @"courseGroupId";
+NSString *const kLiveLessonModelClassDate = @"classDate";
+NSString *const kLiveLessonModelCourseType = @"courseType";
+NSString *const kLiveLessonModelSubjectId = @"subjectId";
+NSString *const kLiveLessonModelCourseId = @"courseId";
+NSString *const kLiveLessonModelAvatar = @"avatar";
+NSString *const kLiveLessonModelUserId = @"userId";
 NSString *const kLiveLessonModelEndTime = @"endTime";
-NSString *const kLiveLessonModelBackgroundPic = @"backgroundPic";
+NSString *const kLiveLessonModelCourseGoupId = @"courseGoupId";
+NSString *const kLiveLessonModelCover = @"cover";
 NSString *const kLiveLessonModelSubjectName = @"subjectName";
+NSString *const kLiveLessonModelPayCount = @"payCount";
 NSString *const kLiveLessonModelStartTime = @"startTime";
-NSString *const kLiveLessonModelCourseGroupName = @"courseGroupName";
+NSString *const kLiveLessonModelStatus = @"status";
+NSString *const kLiveLessonModelName = @"name";
 
 
 @interface LiveLessonModel ()
@@ -26,14 +32,20 @@ NSString *const kLiveLessonModelCourseGroupName = @"courseGroupName";
 
 @implementation LiveLessonModel
 
-@synthesize status = _status;
-@synthesize studentCount = _studentCount;
-@synthesize courseGroupId = _courseGroupId;
+@synthesize classDate = _classDate;
+@synthesize courseType = _courseType;
+@synthesize subjectId = _subjectId;
+@synthesize courseId = _courseId;
+@synthesize avatar = _avatar;
+@synthesize userId = _userId;
 @synthesize endTime = _endTime;
-@synthesize backgroundPic = _backgroundPic;
+@synthesize courseGoupId = _courseGoupId;
+@synthesize cover = _cover;
 @synthesize subjectName = _subjectName;
+@synthesize payCount = _payCount;
 @synthesize startTime = _startTime;
-@synthesize courseGroupName = _courseGroupName;
+@synthesize status = _status;
+@synthesize name = _name;
 
 
 + (instancetype)modelObjectWithDictionary:(NSDictionary *)dict
@@ -48,14 +60,20 @@ NSString *const kLiveLessonModelCourseGroupName = @"courseGroupName";
     // This check serves to make sure that a non-NSDictionary object
     // passed into the model class doesn't break the parsing.
     if(self && [dict isKindOfClass:[NSDictionary class]]) {
-            self.status = [self objectOrNilForKey:kLiveLessonModelStatus fromDictionary:dict];
-            self.studentCount = [[self objectOrNilForKey:kLiveLessonModelStudentCount fromDictionary:dict] doubleValue];
-            self.courseGroupId = [self objectOrNilForKey:kLiveLessonModelCourseGroupId fromDictionary:dict];
+            self.classDate = [self objectOrNilForKey:kLiveLessonModelClassDate fromDictionary:dict];
+            self.courseType = [self objectOrNilForKey:kLiveLessonModelCourseType fromDictionary:dict];
+            self.subjectId = [self objectOrNilForKey:kLiveLessonModelSubjectId fromDictionary:dict];
+            self.courseId = [self objectOrNilForKey:kLiveLessonModelCourseId fromDictionary:dict];
+            self.avatar = [self objectOrNilForKey:kLiveLessonModelAvatar fromDictionary:dict];
+            self.userId = [self objectOrNilForKey:kLiveLessonModelUserId fromDictionary:dict];
             self.endTime = [self objectOrNilForKey:kLiveLessonModelEndTime fromDictionary:dict];
-            self.backgroundPic = [self objectOrNilForKey:kLiveLessonModelBackgroundPic fromDictionary:dict];
+            self.courseGoupId = [self objectOrNilForKey:kLiveLessonModelCourseGoupId fromDictionary:dict];
+            self.cover = [self objectOrNilForKey:kLiveLessonModelCover fromDictionary:dict];
             self.subjectName = [self objectOrNilForKey:kLiveLessonModelSubjectName fromDictionary:dict];
+            self.payCount = [self objectOrNilForKey:kLiveLessonModelPayCount fromDictionary:dict];
             self.startTime = [self objectOrNilForKey:kLiveLessonModelStartTime fromDictionary:dict];
-            self.courseGroupName = [self objectOrNilForKey:kLiveLessonModelCourseGroupName fromDictionary:dict];
+            self.status = [self objectOrNilForKey:kLiveLessonModelStatus fromDictionary:dict];
+            self.name = [self objectOrNilForKey:kLiveLessonModelName fromDictionary:dict];
 
     }
     
@@ -66,14 +84,20 @@ NSString *const kLiveLessonModelCourseGroupName = @"courseGroupName";
 - (NSDictionary *)dictionaryRepresentation
 {
     NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
-    [mutableDict setValue:self.status forKey:kLiveLessonModelStatus];
-    [mutableDict setValue:[NSNumber numberWithDouble:self.studentCount] forKey:kLiveLessonModelStudentCount];
-    [mutableDict setValue:self.courseGroupId forKey:kLiveLessonModelCourseGroupId];
+    [mutableDict setValue:self.classDate forKey:kLiveLessonModelClassDate];
+    [mutableDict setValue:self.courseType forKey:kLiveLessonModelCourseType];
+    [mutableDict setValue:self.subjectId forKey:kLiveLessonModelSubjectId];
+    [mutableDict setValue:self.courseId forKey:kLiveLessonModelCourseId];
+    [mutableDict setValue:self.avatar forKey:kLiveLessonModelAvatar];
+    [mutableDict setValue:self.userId forKey:kLiveLessonModelUserId];
     [mutableDict setValue:self.endTime forKey:kLiveLessonModelEndTime];
-    [mutableDict setValue:self.backgroundPic forKey:kLiveLessonModelBackgroundPic];
+    [mutableDict setValue:self.courseGoupId forKey:kLiveLessonModelCourseGoupId];
+    [mutableDict setValue:self.cover forKey:kLiveLessonModelCover];
     [mutableDict setValue:self.subjectName forKey:kLiveLessonModelSubjectName];
+    [mutableDict setValue:self.payCount forKey:kLiveLessonModelPayCount];
     [mutableDict setValue:self.startTime forKey:kLiveLessonModelStartTime];
-    [mutableDict setValue:self.courseGroupName forKey:kLiveLessonModelCourseGroupName];
+    [mutableDict setValue:self.status forKey:kLiveLessonModelStatus];
+    [mutableDict setValue:self.name forKey:kLiveLessonModelName];
 
     return [NSDictionary dictionaryWithDictionary:mutableDict];
 }
@@ -101,28 +125,40 @@ NSString *const kLiveLessonModelCourseGroupName = @"courseGroupName";
 {
     self = [super init];
 
-    self.status = [aDecoder decodeObjectForKey:kLiveLessonModelStatus];
-    self.studentCount = [aDecoder decodeDoubleForKey:kLiveLessonModelStudentCount];
-    self.courseGroupId = [aDecoder decodeObjectForKey:kLiveLessonModelCourseGroupId];
+    self.classDate = [aDecoder decodeObjectForKey:kLiveLessonModelClassDate];
+    self.courseType = [aDecoder decodeObjectForKey:kLiveLessonModelCourseType];
+    self.subjectId = [aDecoder decodeObjectForKey:kLiveLessonModelSubjectId];
+    self.courseId = [aDecoder decodeObjectForKey:kLiveLessonModelCourseId];
+    self.avatar = [aDecoder decodeObjectForKey:kLiveLessonModelAvatar];
+    self.userId = [aDecoder decodeObjectForKey:kLiveLessonModelUserId];
     self.endTime = [aDecoder decodeObjectForKey:kLiveLessonModelEndTime];
-    self.backgroundPic = [aDecoder decodeObjectForKey:kLiveLessonModelBackgroundPic];
+    self.courseGoupId = [aDecoder decodeObjectForKey:kLiveLessonModelCourseGoupId];
+    self.cover = [aDecoder decodeObjectForKey:kLiveLessonModelCover];
     self.subjectName = [aDecoder decodeObjectForKey:kLiveLessonModelSubjectName];
+    self.payCount = [aDecoder decodeObjectForKey:kLiveLessonModelPayCount];
     self.startTime = [aDecoder decodeObjectForKey:kLiveLessonModelStartTime];
-    self.courseGroupName = [aDecoder decodeObjectForKey:kLiveLessonModelCourseGroupName];
+    self.status = [aDecoder decodeObjectForKey:kLiveLessonModelStatus];
+    self.name = [aDecoder decodeObjectForKey:kLiveLessonModelName];
     return self;
 }
 
 - (void)encodeWithCoder:(NSCoder *)aCoder
 {
 
-    [aCoder encodeObject:_status forKey:kLiveLessonModelStatus];
-    [aCoder encodeDouble:_studentCount forKey:kLiveLessonModelStudentCount];
-    [aCoder encodeObject:_courseGroupId forKey:kLiveLessonModelCourseGroupId];
+    [aCoder encodeObject:_classDate forKey:kLiveLessonModelClassDate];
+    [aCoder encodeObject:_courseType forKey:kLiveLessonModelCourseType];
+    [aCoder encodeObject:_subjectId forKey:kLiveLessonModelSubjectId];
+    [aCoder encodeObject:_courseId forKey:kLiveLessonModelCourseId];
+    [aCoder encodeObject:_avatar forKey:kLiveLessonModelAvatar];
+    [aCoder encodeObject:_userId forKey:kLiveLessonModelUserId];
     [aCoder encodeObject:_endTime forKey:kLiveLessonModelEndTime];
-    [aCoder encodeObject:_backgroundPic forKey:kLiveLessonModelBackgroundPic];
+    [aCoder encodeObject:_courseGoupId forKey:kLiveLessonModelCourseGoupId];
+    [aCoder encodeObject:_cover forKey:kLiveLessonModelCover];
     [aCoder encodeObject:_subjectName forKey:kLiveLessonModelSubjectName];
+    [aCoder encodeObject:_payCount forKey:kLiveLessonModelPayCount];
     [aCoder encodeObject:_startTime forKey:kLiveLessonModelStartTime];
-    [aCoder encodeObject:_courseGroupName forKey:kLiveLessonModelCourseGroupName];
+    [aCoder encodeObject:_status forKey:kLiveLessonModelStatus];
+    [aCoder encodeObject:_name forKey:kLiveLessonModelName];
 }
 
 - (id)copyWithZone:(NSZone *)zone
@@ -131,14 +167,20 @@ NSString *const kLiveLessonModelCourseGroupName = @"courseGroupName";
     
     if (copy) {
 
-        copy.status = [self.status copyWithZone:zone];
-        copy.studentCount = self.studentCount;
-        copy.courseGroupId = [self.courseGroupId copyWithZone:zone];
+        copy.classDate = [self.classDate copyWithZone:zone];
+        copy.courseType = [self.courseType copyWithZone:zone];
+        copy.subjectId = [self.subjectId copyWithZone:zone];
+        copy.courseId = [self.courseId copyWithZone:zone];
+        copy.avatar = [self.avatar copyWithZone:zone];
+        copy.userId = [self.userId copyWithZone:zone];
         copy.endTime = [self.endTime copyWithZone:zone];
-        copy.backgroundPic = [self.backgroundPic copyWithZone:zone];
+        copy.courseGoupId = [self.courseGoupId copyWithZone:zone];
+        copy.cover = [self.cover copyWithZone:zone];
         copy.subjectName = [self.subjectName copyWithZone:zone];
+        copy.payCount = [self.payCount copyWithZone:zone];
         copy.startTime = [self.startTime copyWithZone:zone];
-        copy.courseGroupName = [self.courseGroupName copyWithZone:zone];
+        copy.status = [self.status copyWithZone:zone];
+        copy.name = [self.name copyWithZone:zone];
     }
     
     return copy;

+ 37 - 0
KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/Model/VideoCourseModel.h

@@ -0,0 +1,37 @@
+//
+//  VideoCourseModel.h
+//
+//  Created by   on 2022/3/29
+//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+
+@interface VideoCourseModel : NSObject <NSCoding, NSCopying>
+
+@property (nonatomic, assign) double internalBaseClassIdentifier;
+@property (nonatomic, strong) NSString *lessonCoverUrl;
+@property (nonatomic, assign) double lessonCount;
+@property (nonatomic, strong) NSString *lessonDesc;
+@property (nonatomic, assign) double lessonPrice;
+@property (nonatomic, assign) double countStudent;
+@property (nonatomic, strong) NSString *lessonName;
+@property (nonatomic, strong) NSString *avatar;
+@property (nonatomic, strong) NSString *lessonSubject;
+@property (nonatomic, assign) double teacherId;
+@property (nonatomic, assign) double hotFlag;
+@property (nonatomic, strong) NSString *username;
+@property (nonatomic, strong) NSString *createTime;
+@property (nonatomic, assign) double auditStatus;
+@property (nonatomic, assign) double sortNumber;
+@property (nonatomic, strong) NSString *lessonTag;
+@property (nonatomic, assign) double topFlag;
+@property (nonatomic, strong) NSString *updateTime;
+
++ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict;
+- (instancetype)initWithDictionary:(NSDictionary *)dict;
+- (NSDictionary *)dictionaryRepresentation;
+
+@end

+ 218 - 0
KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/Model/VideoCourseModel.m

@@ -0,0 +1,218 @@
+//
+//  VideoCourseModel.m
+//
+//  Created by Steven  on 2022/4/2
+//  Copyright (c) 2022 __MyCompanyName__. All rights reserved.
+//
+
+#import "VideoCourseModel.h"
+
+
+NSString *const kVideoCourseModelId = @"id";
+NSString *const kVideoCourseModelLessonCoverUrl = @"lessonCoverUrl";
+NSString *const kVideoCourseModelLessonCount = @"lessonCount";
+NSString *const kVideoCourseModelLessonDesc = @"lessonDesc";
+NSString *const kVideoCourseModelLessonPrice = @"lessonPrice";
+NSString *const kVideoCourseModelCountStudent = @"countStudent";
+NSString *const kVideoCourseModelLessonName = @"lessonName";
+NSString *const kVideoCourseModelAvatar = @"avatar";
+NSString *const kVideoCourseModelLessonSubject = @"lessonSubject";
+NSString *const kVideoCourseModelTeacherId = @"teacherId";
+NSString *const kVideoCourseModelHotFlag = @"hotFlag";
+NSString *const kVideoCourseModelUsername = @"username";
+NSString *const kVideoCourseModelCreateTime = @"createTime";
+NSString *const kVideoCourseModelAuditStatus = @"auditStatus";
+NSString *const kVideoCourseModelSortNumber = @"sortNumber";
+NSString *const kVideoCourseModelLessonTag = @"lessonTag";
+NSString *const kVideoCourseModelTopFlag = @"topFlag";
+NSString *const kVideoCourseModelUpdateTime = @"updateTime";
+
+
+@interface VideoCourseModel ()
+
+- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict;
+
+@end
+
+@implementation VideoCourseModel
+
+@synthesize internalBaseClassIdentifier = _internalBaseClassIdentifier;
+@synthesize lessonCoverUrl = _lessonCoverUrl;
+@synthesize lessonCount = _lessonCount;
+@synthesize lessonDesc = _lessonDesc;
+@synthesize lessonPrice = _lessonPrice;
+@synthesize countStudent = _countStudent;
+@synthesize lessonName = _lessonName;
+@synthesize avatar = _avatar;
+@synthesize lessonSubject = _lessonSubject;
+@synthesize teacherId = _teacherId;
+@synthesize hotFlag = _hotFlag;
+@synthesize username = _username;
+@synthesize createTime = _createTime;
+@synthesize auditStatus = _auditStatus;
+@synthesize sortNumber = _sortNumber;
+@synthesize lessonTag = _lessonTag;
+@synthesize topFlag = _topFlag;
+@synthesize updateTime = _updateTime;
+
+
++ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict
+{
+    return [[self alloc] initWithDictionary:dict];
+}
+
+- (instancetype)initWithDictionary:(NSDictionary *)dict
+{
+    self = [super init];
+    
+    // This check serves to make sure that a non-NSDictionary object
+    // passed into the model class doesn't break the parsing.
+    if(self && [dict isKindOfClass:[NSDictionary class]]) {
+            self.internalBaseClassIdentifier = [[self objectOrNilForKey:kVideoCourseModelId fromDictionary:dict] doubleValue];
+            self.lessonCoverUrl = [self objectOrNilForKey:kVideoCourseModelLessonCoverUrl fromDictionary:dict];
+            self.lessonCount = [[self objectOrNilForKey:kVideoCourseModelLessonCount fromDictionary:dict] doubleValue];
+            self.lessonDesc = [self objectOrNilForKey:kVideoCourseModelLessonDesc fromDictionary:dict];
+            self.lessonPrice = [[self objectOrNilForKey:kVideoCourseModelLessonPrice fromDictionary:dict] doubleValue];
+            self.countStudent = [[self objectOrNilForKey:kVideoCourseModelCountStudent fromDictionary:dict] doubleValue];
+            self.lessonName = [self objectOrNilForKey:kVideoCourseModelLessonName fromDictionary:dict];
+            self.avatar = [self objectOrNilForKey:kVideoCourseModelAvatar fromDictionary:dict];
+            self.lessonSubject = [self objectOrNilForKey:kVideoCourseModelLessonSubject fromDictionary:dict];
+            self.teacherId = [[self objectOrNilForKey:kVideoCourseModelTeacherId fromDictionary:dict] doubleValue];
+            self.hotFlag = [[self objectOrNilForKey:kVideoCourseModelHotFlag fromDictionary:dict] doubleValue];
+            self.username = [self objectOrNilForKey:kVideoCourseModelUsername fromDictionary:dict];
+            self.createTime = [self objectOrNilForKey:kVideoCourseModelCreateTime fromDictionary:dict];
+            self.auditStatus = [[self objectOrNilForKey:kVideoCourseModelAuditStatus fromDictionary:dict] doubleValue];
+            self.sortNumber = [[self objectOrNilForKey:kVideoCourseModelSortNumber fromDictionary:dict] doubleValue];
+            self.lessonTag = [self objectOrNilForKey:kVideoCourseModelLessonTag fromDictionary:dict];
+            self.topFlag = [[self objectOrNilForKey:kVideoCourseModelTopFlag fromDictionary:dict] doubleValue];
+            self.updateTime = [self objectOrNilForKey:kVideoCourseModelUpdateTime fromDictionary:dict];
+
+    }
+    
+    return self;
+    
+}
+
+- (NSDictionary *)dictionaryRepresentation
+{
+    NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.internalBaseClassIdentifier] forKey:kVideoCourseModelId];
+    [mutableDict setValue:self.lessonCoverUrl forKey:kVideoCourseModelLessonCoverUrl];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.lessonCount] forKey:kVideoCourseModelLessonCount];
+    [mutableDict setValue:self.lessonDesc forKey:kVideoCourseModelLessonDesc];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.lessonPrice] forKey:kVideoCourseModelLessonPrice];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.countStudent] forKey:kVideoCourseModelCountStudent];
+    [mutableDict setValue:self.lessonName forKey:kVideoCourseModelLessonName];
+    [mutableDict setValue:self.avatar forKey:kVideoCourseModelAvatar];
+    [mutableDict setValue:self.lessonSubject forKey:kVideoCourseModelLessonSubject];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.teacherId] forKey:kVideoCourseModelTeacherId];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.hotFlag] forKey:kVideoCourseModelHotFlag];
+    [mutableDict setValue:self.username forKey:kVideoCourseModelUsername];
+    [mutableDict setValue:self.createTime forKey:kVideoCourseModelCreateTime];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.auditStatus] forKey:kVideoCourseModelAuditStatus];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.sortNumber] forKey:kVideoCourseModelSortNumber];
+    [mutableDict setValue:self.lessonTag forKey:kVideoCourseModelLessonTag];
+    [mutableDict setValue:[NSNumber numberWithDouble:self.topFlag] forKey:kVideoCourseModelTopFlag];
+    [mutableDict setValue:self.updateTime forKey:kVideoCourseModelUpdateTime];
+
+    return [NSDictionary dictionaryWithDictionary:mutableDict];
+}
+
+- (NSString *)description
+{
+    return [NSString stringWithFormat:@"%@", [self dictionaryRepresentation]];
+}
+
+#pragma mark - Helper Method
+- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict
+{
+    id object = [dict objectForKey:aKey];
+    if ([object isKindOfClass:[NSNumber class]]) {
+        NSNumber *number = object;
+        object = [number stringValue];
+    }
+    return [object isEqual:[NSNull null]] ? nil : object;
+}
+
+
+#pragma mark - NSCoding Methods
+
+- (id)initWithCoder:(NSCoder *)aDecoder
+{
+    self = [super init];
+
+    self.internalBaseClassIdentifier = [aDecoder decodeDoubleForKey:kVideoCourseModelId];
+    self.lessonCoverUrl = [aDecoder decodeObjectForKey:kVideoCourseModelLessonCoverUrl];
+    self.lessonCount = [aDecoder decodeDoubleForKey:kVideoCourseModelLessonCount];
+    self.lessonDesc = [aDecoder decodeObjectForKey:kVideoCourseModelLessonDesc];
+    self.lessonPrice = [aDecoder decodeDoubleForKey:kVideoCourseModelLessonPrice];
+    self.countStudent = [aDecoder decodeDoubleForKey:kVideoCourseModelCountStudent];
+    self.lessonName = [aDecoder decodeObjectForKey:kVideoCourseModelLessonName];
+    self.avatar = [aDecoder decodeObjectForKey:kVideoCourseModelAvatar];
+    self.lessonSubject = [aDecoder decodeObjectForKey:kVideoCourseModelLessonSubject];
+    self.teacherId = [aDecoder decodeDoubleForKey:kVideoCourseModelTeacherId];
+    self.hotFlag = [aDecoder decodeDoubleForKey:kVideoCourseModelHotFlag];
+    self.username = [aDecoder decodeObjectForKey:kVideoCourseModelUsername];
+    self.createTime = [aDecoder decodeObjectForKey:kVideoCourseModelCreateTime];
+    self.auditStatus = [aDecoder decodeDoubleForKey:kVideoCourseModelAuditStatus];
+    self.sortNumber = [aDecoder decodeDoubleForKey:kVideoCourseModelSortNumber];
+    self.lessonTag = [aDecoder decodeObjectForKey:kVideoCourseModelLessonTag];
+    self.topFlag = [aDecoder decodeDoubleForKey:kVideoCourseModelTopFlag];
+    self.updateTime = [aDecoder decodeObjectForKey:kVideoCourseModelUpdateTime];
+    return self;
+}
+
+- (void)encodeWithCoder:(NSCoder *)aCoder
+{
+
+    [aCoder encodeDouble:_internalBaseClassIdentifier forKey:kVideoCourseModelId];
+    [aCoder encodeObject:_lessonCoverUrl forKey:kVideoCourseModelLessonCoverUrl];
+    [aCoder encodeDouble:_lessonCount forKey:kVideoCourseModelLessonCount];
+    [aCoder encodeObject:_lessonDesc forKey:kVideoCourseModelLessonDesc];
+    [aCoder encodeDouble:_lessonPrice forKey:kVideoCourseModelLessonPrice];
+    [aCoder encodeDouble:_countStudent forKey:kVideoCourseModelCountStudent];
+    [aCoder encodeObject:_lessonName forKey:kVideoCourseModelLessonName];
+    [aCoder encodeObject:_avatar forKey:kVideoCourseModelAvatar];
+    [aCoder encodeObject:_lessonSubject forKey:kVideoCourseModelLessonSubject];
+    [aCoder encodeDouble:_teacherId forKey:kVideoCourseModelTeacherId];
+    [aCoder encodeDouble:_hotFlag forKey:kVideoCourseModelHotFlag];
+    [aCoder encodeObject:_username forKey:kVideoCourseModelUsername];
+    [aCoder encodeObject:_createTime forKey:kVideoCourseModelCreateTime];
+    [aCoder encodeDouble:_auditStatus forKey:kVideoCourseModelAuditStatus];
+    [aCoder encodeDouble:_sortNumber forKey:kVideoCourseModelSortNumber];
+    [aCoder encodeObject:_lessonTag forKey:kVideoCourseModelLessonTag];
+    [aCoder encodeDouble:_topFlag forKey:kVideoCourseModelTopFlag];
+    [aCoder encodeObject:_updateTime forKey:kVideoCourseModelUpdateTime];
+}
+
+- (id)copyWithZone:(NSZone *)zone
+{
+    VideoCourseModel *copy = [[VideoCourseModel alloc] init];
+    
+    if (copy) {
+
+        copy.internalBaseClassIdentifier = self.internalBaseClassIdentifier;
+        copy.lessonCoverUrl = [self.lessonCoverUrl copyWithZone:zone];
+        copy.lessonCount = self.lessonCount;
+        copy.lessonDesc = [self.lessonDesc copyWithZone:zone];
+        copy.lessonPrice = self.lessonPrice;
+        copy.countStudent = self.countStudent;
+        copy.lessonName = [self.lessonName copyWithZone:zone];
+        copy.avatar = [self.avatar copyWithZone:zone];
+        copy.lessonSubject = [self.lessonSubject copyWithZone:zone];
+        copy.teacherId = self.teacherId;
+        copy.hotFlag = self.hotFlag;
+        copy.username = [self.username copyWithZone:zone];
+        copy.createTime = [self.createTime copyWithZone:zone];
+        copy.auditStatus = self.auditStatus;
+        copy.sortNumber = self.sortNumber;
+        copy.lessonTag = [self.lessonTag copyWithZone:zone];
+        copy.topFlag = self.topFlag;
+        copy.updateTime = [self.updateTime copyWithZone:zone];
+    }
+    
+    return copy;
+}
+
+
+@end

+ 68 - 61
KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/View/MyLessonBodyView.m

@@ -15,7 +15,7 @@
 #import "MyLessonSearchView.h"
 #import "NewClassPopView.h"
 #import "KSFullDatePicker.h"
-
+#import "AccompanyDetailViewController.h"
 
 @interface MyLessonBodyView ()<UITableViewDelegate,UITableViewDataSource>
 
@@ -123,62 +123,62 @@
 
 - (void)requestData {
     if (self.selectIndex == 0) { // 陪练课
-//        [KSNetworkingManager accompanyCourseRequest:KS_POST classMonth:self.classDate status:self.status subjectId:self.subjectId page:self.pages rows: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) {
-//                    AccompanyLessonModel *model = [[AccompanyLessonModel alloc] initWithDictionary:parm];
-//                    [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];
-//        }];
+        [KSNetworkingManager queryStudentPracticeCourse:KS_POST classMonth:self.classDate status:self.status subjectId:self.subjectId page:self.pages rows: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) {
+                    AccompanyLessonModel *model = [[AccompanyLessonModel alloc] initWithDictionary:parm];
+                    [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];
+        }];
     }
     else { // 直播课
-//        [KSNetworkingManager queryTeacherLiveCourse:KS_POST classDate:self.classDate status:self.status subjectId:self.subjectId page:self.pages rows: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) {
-//                    LiveLessonModel *model = [[LiveLessonModel alloc] initWithDictionary:parm];
-//                    [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];
-//        }];
+        [KSNetworkingManager queryMyLiveCourse:KS_POST classDate:self.classDate status:self.status subjectId:self.subjectId page:self.pages rows: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) {
+                    LiveLessonModel *model = [[LiveLessonModel alloc] initWithDictionary:parm];
+                    [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];
+        }];
     }
 }
 
@@ -380,7 +380,7 @@
         case ACCOMPANY_TYPE_CHAT: // 聊天
         {
             KSChatConversationViewController *conversationVC = [[KSChatConversationViewController alloc] init];
-            conversationVC.targetId = [NSString stringWithFormat:@"%.0f",model.userId];
+            conversationVC.targetId = model.userId;
             conversationVC.conversationType = ConversationType_PRIVATE;
             [self.naviController pushViewController:conversationVC animated:YES];
         }
@@ -397,13 +397,14 @@
 }
 
 - (void)showAccompanyDetail:(AccompanyLessonModel *)model {
-    
+    AccompanyDetailViewController *detailVC = [[AccompanyDetailViewController alloc] init];
+    detailVC.courseId = model.courseId;
+    detailVC.courseGroupId = model.courseGoupId;
+    detailVC.teacherId = model.userId;
+    [self.naviController pushViewController:detailVC animated:YES];
 }
 
 
-- (void)courseAdjustAction:(AccompanyLessonModel *)model {
-    
-}
 
 - (void)chatAction:(NSString *)targetId {
     KSChatConversationViewController *conversationVC = [[KSChatConversationViewController alloc] init];
@@ -414,9 +415,15 @@
 
 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     if (indexPath.row == 0) { // 进入陪练课详情
-        
+        AccompanyLessonModel *model = self.dataArray[indexPath.row];
+        [self showAccompanyDetail:model];
     }
     else { // 直播课程组详情
+        LiveLessonModel *model = self.dataArray[indexPath.row];
+        KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
+        NSString *url = [NSString stringWithFormat:@"%@/#/liveDetail?groupId=%@&classId=%@", WEBHOST, model.courseGoupId,model.courseId];
+        ctrl.url = url;
+        [self.naviController pushViewController:ctrl animated:YES];
         
     }
 }

+ 5 - 5
KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/View/MyLessonSearchView.xib

@@ -37,7 +37,7 @@
                                     </connections>
                                 </button>
                             </subviews>
-                            <color key="backgroundColor" red="0.96078431369999995" green="0.96078431369999995" blue="0.96078431369999995" alpha="1" colorSpace="calibratedRGB"/>
+                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                             <constraints>
                                 <constraint firstAttribute="trailing" secondItem="CSP-VE-Q55" secondAttribute="trailing" id="0bd-hm-rCy"/>
                                 <constraint firstAttribute="bottom" secondItem="CSP-VE-Q55" secondAttribute="bottom" id="5ye-zJ-qJd"/>
@@ -68,7 +68,7 @@
                                     </connections>
                                 </button>
                             </subviews>
-                            <color key="backgroundColor" red="0.96078431369999995" green="0.96078431369999995" blue="0.96078431369999995" alpha="1" colorSpace="calibratedRGB"/>
+                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                             <constraints>
                                 <constraint firstAttribute="trailing" secondItem="OTv-DP-LWv" secondAttribute="trailing" constant="20" id="Agt-B1-juL"/>
                                 <constraint firstItem="4ob-Ur-wiA" firstAttribute="leading" secondItem="EXN-FR-v0M" secondAttribute="leading" id="GtX-9e-ehq"/>
@@ -99,7 +99,7 @@
                                     </connections>
                                 </button>
                             </subviews>
-                            <color key="backgroundColor" red="0.96078431369999995" green="0.96078431369999995" blue="0.96078431369999995" alpha="1" colorSpace="calibratedRGB"/>
+                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                             <constraints>
                                 <constraint firstItem="2nN-nP-Pcx" firstAttribute="centerY" secondItem="tfS-Rc-iEN" secondAttribute="centerY" id="5EQ-2B-7AS"/>
                                 <constraint firstAttribute="trailing" secondItem="cgC-dL-lRH" secondAttribute="trailing" id="736-JC-2Pv"/>
@@ -110,7 +110,7 @@
                             </constraints>
                         </view>
                     </subviews>
-                    <color key="backgroundColor" red="0.96078431369999995" green="0.96078431369999995" blue="0.96078431369999995" alpha="1" colorSpace="calibratedRGB"/>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                     <constraints>
                         <constraint firstItem="tfS-Rc-iEN" firstAttribute="leading" secondItem="EXN-FR-v0M" secondAttribute="trailing" constant="10" id="4dx-rG-JsD"/>
                         <constraint firstItem="EXN-FR-v0M" firstAttribute="bottom" secondItem="sav-8B-TD3" secondAttribute="bottom" id="9F3-pd-MYs"/>
@@ -141,7 +141,7 @@
                     </userDefinedRuntimeAttributes>
                 </view>
             </subviews>
-            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
             <constraints>
                 <constraint firstAttribute="trailing" secondItem="LpR-2y-gXZ" secondAttribute="trailing" id="TJN-ui-GfD"/>
                 <constraint firstItem="LpR-2y-gXZ" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="cRb-QE-c94"/>

+ 3 - 6
KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/View/MyLiveCourseCell.m

@@ -15,8 +15,6 @@
 
 @property (weak, nonatomic) IBOutlet UILabel *subjectName;
 
-@property (weak, nonatomic) IBOutlet UILabel *descLabel;
-
 @property (weak, nonatomic) IBOutlet UILabel *timeLabel;
 
 @property (weak, nonatomic) IBOutlet UILabel *statusLabel;
@@ -38,11 +36,10 @@
     if (callback) {
         self.callback = callback;
     }
-    [self.courseCoverImage sd_setImageWithURL:[NSURL URLWithString:model.backgroundPic] placeholderImage:[UIImage imageNamed:@"video_placeholder"]];
-    self.courseNameLabel.text = [NSString returnNoNullStringWithString:model.courseGroupName];
+    [self.courseCoverImage sd_setImageWithURL:[NSURL URLWithString:model.avatar] placeholderImage:[UIImage imageNamed:@"video_placeholder"]];
+    self.courseNameLabel.text = [NSString returnNoNullStringWithString:model.name];
     self.subjectName.text = [NSString returnNoNullStringWithString:model.subjectName];
-    self.descLabel.text = [NSString stringWithFormat:@"%.0f人已购买",model.studentCount];
-    self.targetId = model.courseGroupId;
+    self.targetId = model.courseGoupId;
     // time
     NSDateFormatter *formatter = [NSObject getDateformatter];
     [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

+ 1 - 33
KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/View/MyLiveCourseCell.xib

@@ -58,34 +58,6 @@
                                 <color key="textColor" red="0.1764705882" green="0.78039215689999997" blue="0.66666666669999997" alpha="1" colorSpace="calibratedRGB"/>
                                 <nil key="highlightedColor"/>
                             </label>
-                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Nk8-cr-bIe">
-                                <rect key="frame" x="165.5" y="68" width="190.5" height="20"/>
-                                <subviews>
-                                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="L8Z-vN-njT">
-                                        <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="kC6-Sk-pFt"/>
-                                            <constraint firstAttribute="width" constant="1" id="sHX-nY-QUC"/>
-                                        </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="Z2r-ta-wPC">
-                                        <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 firstAttribute="height" constant="20" id="6hD-Zm-lqn"/>
-                                    <constraint firstItem="Z2r-ta-wPC" firstAttribute="leading" secondItem="L8Z-vN-njT" secondAttribute="trailing" constant="6" id="DdG-Rm-I06"/>
-                                    <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="Z2r-ta-wPC" secondAttribute="trailing" constant="2" id="Jyv-hq-k4o"/>
-                                    <constraint firstItem="L8Z-vN-njT" firstAttribute="centerY" secondItem="Nk8-cr-bIe" secondAttribute="centerY" id="VPS-kd-fiV"/>
-                                    <constraint firstItem="L8Z-vN-njT" firstAttribute="leading" secondItem="Nk8-cr-bIe" secondAttribute="leading" id="l6d-g2-l32"/>
-                                    <constraint firstItem="Z2r-ta-wPC" firstAttribute="centerY" secondItem="Nk8-cr-bIe" secondAttribute="centerY" id="npN-uI-5WD"/>
-                                </constraints>
-                            </view>
                             <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="course_time" translatesAutoresizingMaskIntoConstraints="NO" id="zwg-bj-X8b">
                                 <rect key="frame" x="11" y="114" width="16" height="16"/>
                                 <constraints>
@@ -139,13 +111,11 @@
                         <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                         <constraints>
                             <constraint firstItem="9C1-zD-NKp" firstAttribute="leading" secondItem="NWN-u6-1To" secondAttribute="trailing" constant="12" id="9xV-WZ-Jeb"/>
-                            <constraint firstAttribute="trailing" secondItem="Nk8-cr-bIe" secondAttribute="trailing" constant="12" id="CVV-yo-0Sx"/>
                             <constraint firstItem="zwg-bj-X8b" firstAttribute="leading" secondItem="9Mv-FD-03n" secondAttribute="leading" constant="11" id="Eg4-fY-s6L"/>
                             <constraint firstItem="VrX-Hy-enc" firstAttribute="top" secondItem="Z3n-pP-QqQ" secondAttribute="bottom" constant="8" id="HJr-KG-LRz"/>
                             <constraint firstItem="Z3n-pP-QqQ" firstAttribute="top" secondItem="NWN-u6-1To" secondAttribute="bottom" constant="15" id="HWE-Lc-PGR"/>
                             <constraint firstAttribute="trailing" secondItem="VrX-Hy-enc" secondAttribute="trailing" constant="11" id="IuH-hK-LDm"/>
                             <constraint firstItem="QUH-rb-n4x" firstAttribute="leading" secondItem="zwg-bj-X8b" secondAttribute="trailing" constant="7" id="Kv8-pd-LT7"/>
-                            <constraint firstItem="Nk8-cr-bIe" firstAttribute="centerY" secondItem="8e5-WE-PwG" secondAttribute="centerY" id="WJO-du-YZM"/>
                             <constraint firstItem="2Kh-s4-xZJ" firstAttribute="leading" secondItem="9C1-zD-NKp" secondAttribute="trailing" constant="5" id="Wf6-Mf-Upf"/>
                             <constraint firstItem="zwg-bj-X8b" firstAttribute="top" secondItem="Z3n-pP-QqQ" secondAttribute="bottom" constant="11" id="YNp-yH-cDb"/>
                             <constraint firstItem="NWN-u6-1To" firstAttribute="top" secondItem="9Mv-FD-03n" secondAttribute="top" constant="16" id="cGY-p8-lN7"/>
@@ -158,7 +128,6 @@
                             <constraint firstAttribute="trailing" secondItem="Z3n-pP-QqQ" secondAttribute="trailing" constant="10" id="oVA-kc-t3T"/>
                             <constraint firstItem="8e5-WE-PwG" firstAttribute="bottom" secondItem="NWN-u6-1To" secondAttribute="bottom" constant="-1" id="r3t-nW-e8s"/>
                             <constraint firstItem="QUH-rb-n4x" firstAttribute="centerY" secondItem="zwg-bj-X8b" secondAttribute="centerY" id="uBT-wz-dHP"/>
-                            <constraint firstItem="Nk8-cr-bIe" firstAttribute="leading" secondItem="8e5-WE-PwG" secondAttribute="trailing" constant="5" id="zoz-sK-NnJ"/>
                         </constraints>
                         <userDefinedRuntimeAttributes>
                             <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
@@ -179,7 +148,6 @@
             <connections>
                 <outlet property="courseCoverImage" destination="NWN-u6-1To" id="5H2-Pf-5WA"/>
                 <outlet property="courseNameLabel" destination="9C1-zD-NKp" id="dMl-ob-iwk"/>
-                <outlet property="descLabel" destination="Z2r-ta-wPC" id="DTT-W9-umA"/>
                 <outlet property="statusLabel" destination="VrX-Hy-enc" id="6M9-tY-aZT"/>
                 <outlet property="subjectName" destination="GLH-rY-bmS" id="CtN-f5-rMC"/>
                 <outlet property="timeLabel" destination="QUH-rb-n4x" id="RV0-zl-r5M"/>
@@ -190,7 +158,7 @@
     <resources>
         <image name="chat_chat" width="19" height="18"/>
         <image name="course_time" width="16" height="16"/>
-        <image name="video_placeholder" width="168" height="111"/>
+        <image name="video_placeholder" width="103" height="72"/>
         <systemColor name="systemBackgroundColor">
             <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
         </systemColor>

+ 18 - 0
KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/View/MyVideoCourseBodyView.h

@@ -0,0 +1,18 @@
+//
+//  MyVideoCourseBodyView.h
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/4/20.
+//
+
+#import "kSJXCollectionView.h"
+#import "StateView.h"
+#import "Reachability.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface MyVideoCourseBodyView : kSJXCollectionView
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 251 - 0
KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/View/MyVideoCourseBodyView.m

@@ -0,0 +1,251 @@
+//
+//  MyVideoCourseBodyView.m
+//  KulexiuForStudent
+//
+//  Created by 王智 on 2022/4/20.
+//
+
+#import "MyVideoCourseBodyView.h"
+#import "VideoCourseCell.h"
+#import "VideoCourseModel.h"
+#import "KSBaseWKWebViewController.h"
+
+@interface MyVideoCourseBodyView ()<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;
+
+@end
+
+@implementation MyVideoCourseBodyView
+
+- (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:@"VideoCourseCell" bundle:[NSBundle mainBundle]] forCellWithReuseIdentifier:@"VideoCourseCell"];
+        [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 videoLessonGroupRequest:KS_POST page:self.pages rows: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];
+            }
+            
+            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];
+    self.collectionView.frame = self.bounds;
+}
+
+- (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 {
+    VideoCourseCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"VideoCourseCell" forIndexPath:indexPath];
+    
+    VideoCourseModel *model = [self.dataArray objectAtIndex:indexPath.row];
+    BOOL isCheck = self.selectIndex != 0;
+    [cell configSourceModel:model isInCheck:isCheck];
+    return cell;
+}
+
+- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
+    VideoCourseModel *model = [self.dataArray objectAtIndex:indexPath.row];
+    NSString *url = [NSString stringWithFormat:@"%@%@%.0f", WEBHOST, @"/#/videoDetail?groupId=",model.internalBaseClassIdentifier];
+    KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
+    ctrl.url = url;
+    [self.naviController pushViewController:ctrl animated:YES];
+}
+
+- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
+    return CGSizeMake((kScreenWidth - 28 - 11) / 2.0f, 200);
+}
+/**
+ 设置没有数据时的显示
+ 
+ @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;
+}
+
+
+
+- (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.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 19 - 0
KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/View/VideoCourseCell.h

@@ -0,0 +1,19 @@
+//
+//  VideoCourseCell.h
+//  KulexiuForTeacher
+//
+//  Created by Kyle on 2022/3/29.
+//
+
+#import <UIKit/UIKit.h>
+#import "VideoCourseModel.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface VideoCourseCell : UICollectionViewCell
+
+- (void)configSourceModel:(VideoCourseModel *)model isInCheck:(BOOL)isCheck;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 50 - 0
KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/View/VideoCourseCell.m

@@ -0,0 +1,50 @@
+//
+//  VideoCourseCell.m
+//  KulexiuForTeacher
+//
+//  Created by Kyle on 2022/3/29.
+//
+
+#import "VideoCourseCell.h"
+
+@interface VideoCourseCell ()
+
+@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 UIView *descView;
+@property (weak, nonatomic) IBOutlet UILabel *descLabel;
+
+@end
+
+@implementation VideoCourseCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)configSourceModel:(VideoCourseModel *)model isInCheck:(BOOL)isCheck {
+    [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];
+    if (isCheck) {
+        self.descView.hidden = YES;
+        self.descLabel.text = @"";
+    }
+    else {
+        self.descView.hidden = NO;
+        self.descLabel.text = [NSString stringWithFormat:@"%.0f人已购买",model.countStudent];
+    }
+}
+
+@end

+ 145 - 0
KulexiuForStudent/KulexiuForStudent/Module/Mine/MineCourse/View/VideoCourseCell.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"/>
+        <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="gTV-IL-0wX" customClass="VideoCourseCell">
+            <rect key="frame" x="0.0" y="0.0" width="168" height="200"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
+                <rect key="frame" x="0.0" y="0.0" width="168" height="200"/>
+                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                <subviews>
+                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ZgA-i1-RHm">
+                        <rect key="frame" x="0.0" y="0.0" width="168" height="200"/>
+                        <subviews>
+                            <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="video_placeholder" translatesAutoresizingMaskIntoConstraints="NO" id="G9V-fH-gog">
+                                <rect key="frame" x="0.0" y="0.0" width="168" height="111"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="111" id="6CZ-fO-O3c"/>
+                                </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="yCS-l4-WAt">
+                                <rect key="frame" x="11" y="117" width="146" height="17"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                <color key="textColor" red="0.10196078431372549" green="0.10196078431372549" blue="0.10196078431372549" alpha="0.84705882352941175" 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="Yib-mA-6Ou">
+                                <rect key="frame" x="9" y="164" width="81" height="20"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="20" id="fo4-3I-tde"/>
+                                </constraints>
+                                <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/>
+                                <color key="textColor" red="0.1764705882352941" green="0.7803921568627451" blue="0.66666666666666663" 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="3il-XM-fqj">
+                                <rect key="frame" x="11" y="139" width="20" height="20"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="20" id="1af-AW-k6Y"/>
+                                    <constraint firstAttribute="height" constant="20" id="Y9m-cV-JYR"/>
+                                </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="wbK-Jo-ZbH">
+                                <rect key="frame" x="36" y="141.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="bIp-3Q-l9m">
+                                <rect key="frame" x="79" y="139" width="79" height="20"/>
+                                <subviews>
+                                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="00e-da-LHX">
+                                        <rect key="frame" x="0.0" y="4.5" width="1" height="11"/>
+                                        <color key="backgroundColor" red="0.82745098039215681" green="0.82745098039215681" blue="0.82745098039215681" alpha="1" colorSpace="calibratedRGB"/>
+                                        <constraints>
+                                            <constraint firstAttribute="width" constant="1" id="DB4-3O-ysi"/>
+                                            <constraint firstAttribute="height" constant="11" id="WC2-EJ-sEy"/>
+                                        </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="Spj-bd-Syo">
+                                        <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.50196078431372548" blue="0.17254901960784313" alpha="1" colorSpace="calibratedRGB"/>
+                                        <nil key="highlightedColor"/>
+                                    </label>
+                                </subviews>
+                                <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                                <constraints>
+                                    <constraint firstItem="Spj-bd-Syo" firstAttribute="leading" secondItem="00e-da-LHX" secondAttribute="trailing" constant="6" id="DcA-GQ-uex"/>
+                                    <constraint firstItem="00e-da-LHX" firstAttribute="leading" secondItem="bIp-3Q-l9m" secondAttribute="leading" id="PAd-8V-fS6"/>
+                                    <constraint firstItem="Spj-bd-Syo" firstAttribute="centerY" secondItem="bIp-3Q-l9m" secondAttribute="centerY" id="bcy-rr-kIP"/>
+                                    <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="Spj-bd-Syo" secondAttribute="trailing" constant="2" id="eRd-Ja-Uy9"/>
+                                    <constraint firstAttribute="height" constant="20" id="hgn-YW-c4O"/>
+                                    <constraint firstItem="00e-da-LHX" firstAttribute="centerY" secondItem="bIp-3Q-l9m" secondAttribute="centerY" id="sCN-Nb-Z2j"/>
+                                </constraints>
+                            </view>
+                        </subviews>
+                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+                        <constraints>
+                            <constraint firstItem="yCS-l4-WAt" firstAttribute="leading" secondItem="ZgA-i1-RHm" secondAttribute="leading" constant="11" id="1Ls-Wb-fRT"/>
+                            <constraint firstItem="G9V-fH-gog" firstAttribute="top" secondItem="ZgA-i1-RHm" secondAttribute="top" id="5ix-vd-TUM"/>
+                            <constraint firstItem="Yib-mA-6Ou" firstAttribute="leading" secondItem="ZgA-i1-RHm" secondAttribute="leading" constant="9" id="74G-dg-JPA"/>
+                            <constraint firstItem="G9V-fH-gog" firstAttribute="leading" secondItem="ZgA-i1-RHm" secondAttribute="leading" id="9e1-eo-OKH"/>
+                            <constraint firstItem="yCS-l4-WAt" firstAttribute="top" secondItem="G9V-fH-gog" secondAttribute="bottom" constant="6" id="EOx-Xx-BzN"/>
+                            <constraint firstItem="3il-XM-fqj" firstAttribute="top" secondItem="yCS-l4-WAt" secondAttribute="bottom" constant="5" id="Jjh-pl-Duz"/>
+                            <constraint firstAttribute="trailing" secondItem="yCS-l4-WAt" secondAttribute="trailing" constant="11" id="N8r-qo-ZmS"/>
+                            <constraint firstItem="3il-XM-fqj" firstAttribute="leading" secondItem="ZgA-i1-RHm" secondAttribute="leading" constant="11" id="P7e-LF-pGN"/>
+                            <constraint firstItem="wbK-Jo-ZbH" firstAttribute="centerY" secondItem="3il-XM-fqj" secondAttribute="centerY" id="TWM-PS-Pnk"/>
+                            <constraint firstItem="Yib-mA-6Ou" firstAttribute="top" secondItem="3il-XM-fqj" secondAttribute="bottom" constant="5" id="TeL-Vw-ZDm"/>
+                            <constraint firstItem="wbK-Jo-ZbH" firstAttribute="leading" secondItem="3il-XM-fqj" secondAttribute="trailing" constant="5" id="gE4-f5-Im6"/>
+                            <constraint firstItem="bIp-3Q-l9m" firstAttribute="leading" secondItem="wbK-Jo-ZbH" secondAttribute="trailing" constant="6" id="ort-Rw-FuH"/>
+                            <constraint firstAttribute="trailing" secondItem="bIp-3Q-l9m" secondAttribute="trailing" constant="10" id="rAH-2L-iRc"/>
+                            <constraint firstAttribute="trailing" secondItem="G9V-fH-gog" secondAttribute="trailing" id="sWA-Zo-Iyz"/>
+                            <constraint firstItem="bIp-3Q-l9m" firstAttribute="centerY" secondItem="wbK-Jo-ZbH" secondAttribute="centerY" id="yTm-Tw-5qJ"/>
+                        </constraints>
+                    </view>
+                </subviews>
+            </view>
+            <viewLayoutGuide key="safeArea" id="SEy-5g-ep8"/>
+            <constraints>
+                <constraint firstItem="ZgA-i1-RHm" firstAttribute="leading" secondItem="gTV-IL-0wX" secondAttribute="leading" id="NcT-mF-toU"/>
+                <constraint firstAttribute="bottom" secondItem="ZgA-i1-RHm" secondAttribute="bottom" id="TwI-2v-j0t"/>
+                <constraint firstItem="ZgA-i1-RHm" firstAttribute="top" secondItem="gTV-IL-0wX" secondAttribute="top" id="iHB-AW-C7d"/>
+                <constraint firstAttribute="trailing" secondItem="ZgA-i1-RHm" secondAttribute="trailing" id="jjA-3j-GiE"/>
+            </constraints>
+            <size key="customSize" width="229" height="243"/>
+            <userDefinedRuntimeAttributes>
+                <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
+                    <real key="value" value="5"/>
+                </userDefinedRuntimeAttribute>
+            </userDefinedRuntimeAttributes>
+            <connections>
+                <outlet property="courseMessage" destination="Yib-mA-6Ou" id="hPM-ZS-6ZL"/>
+                <outlet property="courseTitle" destination="yCS-l4-WAt" id="1Wb-8W-iHt"/>
+                <outlet property="coverImage" destination="G9V-fH-gog" id="8HX-tu-M6Z"/>
+                <outlet property="descLabel" destination="Spj-bd-Syo" id="nNb-i0-kTJ"/>
+                <outlet property="descView" destination="bIp-3Q-l9m" id="dqb-bI-PbZ"/>
+                <outlet property="teacherAvatar" destination="3il-XM-fqj" id="cCU-eN-inL"/>
+                <outlet property="teacherName" destination="wbK-Jo-ZbH" id="hq7-Jt-Ikb"/>
+            </connections>
+            <point key="canvasLocation" x="260.86956521739131" y="22.433035714285712"/>
+        </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>

BIN
KulexiuForStudent/build/Debug-iphonesimulator/KulexiuForStudent.app/KulexiuForStudent


+ 26 - 4
KulexiuForStudent/build/Debug-iphonesimulator/KulexiuForStudent.app/_CodeSignature/CodeResources

@@ -1095,11 +1095,11 @@
 		</data>
 		<key>MyLessonSearchView.nib</key>
 		<data>
-		qp2nQGEF2d8+Co8KtmZzzGx3l+8=
+		zqrtN+SCRwhX+6iR0gVvkLAjmFI=
 		</data>
 		<key>MyLiveCourseCell.nib</key>
 		<data>
-		FRfgYJWduUFCWx7+2NmfNpM7i3Q=
+		QZYS09yS5uEDNHMvNEnfnrjb71I=
 		</data>
 		<key>NetworkBodyView.nib</key>
 		<data>
@@ -3407,6 +3407,14 @@
 		<data>
 		yVjLrS2llO7uoMB/WJ8bYeuYToI=
 		</data>
+		<key>VideoCourseCell.nib/objects-12.3+.nib</key>
+		<data>
+		cbUgH7PX7btOI66HMlSipkFcjZ4=
+		</data>
+		<key>VideoCourseCell.nib/runtime.nib</key>
+		<data>
+		fCNMz8CrXP96zI1T/7UUgMQlLHk=
+		</data>
 		<key>WMPlayer.bundle/bottom_shadow.png</key>
 		<data>
 		oh1Lgp3Gne8A9SoT2lXlNbCauFM=
@@ -5210,14 +5218,14 @@
 		<dict>
 			<key>hash2</key>
 			<data>
-			az2nd6GjPqeQJRWODCmAf0E1ON0uogID6s9t7p0s/cU=
+			R9BOyJuX4MeWNg26njLG1F57A+z2/qLzR1yyRYfZB98=
 			</data>
 		</dict>
 		<key>MyLiveCourseCell.nib</key>
 		<dict>
 			<key>hash2</key>
 			<data>
-			4AxeHiFyGjNpST+sLN7VcKL3rvO75YAc4CSYt+q11mk=
+			1Us/Wy8KSe+ApW8r755ingvgedMNf47DFRZj7FlWHOg=
 			</data>
 		</dict>
 		<key>NetworkBodyView.nib</key>
@@ -9073,6 +9081,20 @@
 			kPom9rwh8SquBzNRiIU0OGKx+Qd3xJVXokzO64YlL2w=
 			</data>
 		</dict>
+		<key>VideoCourseCell.nib/objects-12.3+.nib</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			dNlS9MNuHBCtyeh8S/ozt5xJAU0d9B7ew+eHe86Kidw=
+			</data>
+		</dict>
+		<key>VideoCourseCell.nib/runtime.nib</key>
+		<dict>
+			<key>hash2</key>
+			<data>
+			erz3M0FAog8O/YV1Zes/erb1hbEXybgvtGkoxC8IH40=
+			</data>
+		</dict>
 		<key>WMPlayer.bundle/bottom_shadow.png</key>
 		<dict>
 			<key>hash2</key>

BIN
KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/KulexiuForStudent-project-headers.hmap


BIN
KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/KSNetworkingManager.o


+ 3 - 0
KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/KulexiuForStudent.LinkFileList

@@ -12,6 +12,7 @@
 /Users/wangzhi/DayaWorkspace/Klx_student/KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/KSLiveChatroomSeatApply.o
 /Users/wangzhi/DayaWorkspace/Klx_student/KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/InstrumentMessageModel.o
 /Users/wangzhi/DayaWorkspace/Klx_student/KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/ClassTitleView.o
+/Users/wangzhi/DayaWorkspace/Klx_student/KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/VideoCourseModel.o
 /Users/wangzhi/DayaWorkspace/Klx_student/KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/AccompanyHomeworkCell.o
 /Users/wangzhi/DayaWorkspace/Klx_student/KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/MSSBrowseBaseViewController.o
 /Users/wangzhi/DayaWorkspace/Klx_student/KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/KSUtilities.o
@@ -223,6 +224,7 @@
 /Users/wangzhi/DayaWorkspace/Klx_student/KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/KSChatInputView.o
 /Users/wangzhi/DayaWorkspace/Klx_student/KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/AppDelegate.o
 /Users/wangzhi/DayaWorkspace/Klx_student/KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/KSFullDatePicker.o
+/Users/wangzhi/DayaWorkspace/Klx_student/KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/MyVideoCourseBodyView.o
 /Users/wangzhi/DayaWorkspace/Klx_student/KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/GroupMemberModel.o
 /Users/wangzhi/DayaWorkspace/Klx_student/KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/GroupSettingViewController.o
 /Users/wangzhi/DayaWorkspace/Klx_student/KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/FastForwardView.o
@@ -236,6 +238,7 @@
 /Users/wangzhi/DayaWorkspace/Klx_student/KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/RTCService.o
 /Users/wangzhi/DayaWorkspace/Klx_student/KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/NoticeEditBodyView.o
 /Users/wangzhi/DayaWorkspace/Klx_student/KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/RecentSharedWhiteboardCell.o
+/Users/wangzhi/DayaWorkspace/Klx_student/KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/VideoCourseCell.o
 /Users/wangzhi/DayaWorkspace/Klx_student/KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/UIView+Hints.o
 /Users/wangzhi/DayaWorkspace/Klx_student/KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/NSString+zh_SafeAccess.o
 /Users/wangzhi/DayaWorkspace/Klx_student/KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/PersonListView.o

BIN
KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/KulexiuForStudent_dependency_info.dat


BIN
KulexiuForStudent/build/KulexiuForStudent.build/Debug-iphonesimulator/KulexiuForStudent.build/Objects-normal/x86_64/UIView+XIBView.dia


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/AFNetworking.build/AFNetworking-all-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/CHIPageControl.build/CHIPageControl-all-non-framework-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/CHIPageControl.build/CHIPageControl-all-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/CHIPageControl.build/Objects-normal/x86_64/CHIPageControl-master.priors


+ 2 - 2
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/CHIPageControl.build/Objects-normal/x86_64/CHIPageControl-master.swiftdeps

@@ -1,7 +1,7 @@
 version: "Apple Swift version 5.6 (swiftlang-5.6.0.323.62 clang-1316.0.20.8)"
 options: "1df5a087573c1c3cd07e8076f6918d3928f13c31665350d2c288f48bd5050822"
-build_start_time: [1650442917, 284811019]
-build_end_time: [1650442917, 458616971]
+build_start_time: [1650450138, 947250843]
+build_end_time: [1650450139, 115302085]
 inputs:
   "/Users/wangzhi/DayaWorkspace/Klx_student/KulexiuForStudent/Pods/CHIPageControl/CHIPageControl/CHIPageControlAji.swift": [1649151994, 661623716]
   "/Users/wangzhi/DayaWorkspace/Klx_student/KulexiuForStudent/Pods/CHIPageControl/CHIPageControl/CHIPageControlAleppo.swift": [1649151994, 661175489]

BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/IQKeyboardManager.build/IQKeyboardManager-all-non-framework-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/IQKeyboardManager.build/IQKeyboardManager-all-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/JXCategoryView.build/JXCategoryView-all-non-framework-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/JXCategoryView.build/JXCategoryView-all-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/JXPagingView.build/JXPagingView-all-non-framework-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/JXPagingView.build/JXPagingView-all-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/MBProgressHUD.build/MBProgressHUD-all-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/MJExtension.build/MJExtension-all-non-framework-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/MJExtension.build/MJExtension-all-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/MJRefresh.build/MJRefresh-all-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/Masonry.build/Masonry-all-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/Pods-KulexiuForStudent.build/Pods_KulexiuForStudent-all-non-framework-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/Pods-KulexiuForStudent.build/Pods_KulexiuForStudent-all-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/RSKImageCropper.build/RSKImageCropper-all-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/Reachability.build/Reachability-all-non-framework-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/Reachability.build/Reachability-all-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/SDWebImage.build/SDWebImage-all-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/SSZipArchive.build/SSZipArchive-all-non-framework-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/SSZipArchive.build/SSZipArchive-all-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/SocketRocket.build/SocketRocket-all-non-framework-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/SocketRocket.build/SocketRocket-all-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/Whiteboard-Whiteboard.build/Whiteboard-all-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/Whiteboard.build/Whiteboard-all-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/YYModel.build/YYModel-all-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/ZKCycleScrollView.build/ZKCycleScrollView-all-non-framework-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/ZKCycleScrollView.build/ZKCycleScrollView-all-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/dsBridge.build/dsBridge-all-non-framework-target-headers.hmap


BIN
KulexiuForStudent/build/Pods.build/Debug-iphonesimulator/dsBridge.build/dsBridge-all-target-headers.hmap


BIN
KulexiuForStudent/build/XCBuildData/BuildDescriptionCacheIndex-604c88e60e61e13155f665cce0707a51


BIN
KulexiuForStudent/build/XCBuildData/build.db