Steven 1 рік тому
батько
коміт
85010ab56e
27 змінених файлів з 271 додано та 109 видалено
  1. 12 2
      KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj
  2. 1 7
      KulexiuForTeacher/KulexiuForTeacher/AppDelegate.m
  3. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/live_student_micOff.imageset/Contents.json
  4. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/live_student_micOff.imageset/live_student_micOff@2x.png
  5. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/live_student_micOff.imageset/live_student_micOff@3x.png
  6. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/live_student_micOn.imageset/Contents.json
  7. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/live_student_micOn.imageset/live_student_micOn@2x.png
  8. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/live_student_micOn.imageset/live_student_micOn@3x.png
  9. 22 0
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/NewClassroom/classEmpty_student.imageset/Contents.json
  10. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/NewClassroom/classEmpty_student.imageset/classEmpty_student@2x.png
  11. BIN
      KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/NewClassroom/classEmpty_student.imageset/classEmpty_student@3x.png
  12. 0 1
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/KSNetworkingManager.m
  13. 7 5
      KulexiuForTeacher/KulexiuForTeacher/Common/Base/LoginManger/TXIMLinsenter.m
  14. 1 1
      KulexiuForTeacher/KulexiuForTeacher/Module/Login/Model/UserInfoManager.m
  15. 2 0
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Courseware/Model/CoursewareListModel.h
  16. 14 3
      KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Courseware/Model/CoursewareListModel.m
  17. 3 2
      KulexiuForTeacher/KulexiuForTeacher/Module/TXClassRoom/Controller/TXClassroomViewController.m
  18. 1 1
      KulexiuForTeacher/KulexiuForTeacher/Module/TXClassRoom/View/AccompanyDisplay/AccompanyView.m
  19. 1 1
      KulexiuForTeacher/KulexiuForTeacher/Module/TXClassRoom/View/CoursewareView/CoursewareAlertView.h
  20. 2 10
      KulexiuForTeacher/KulexiuForTeacher/Module/TXClassRoom/View/CoursewareView/CoursewareAlertView.m
  21. 2 1
      KulexiuForTeacher/KulexiuForTeacher/Module/TXClassRoom/View/MemberList/ClassMemberListView.m
  22. 6 8
      KulexiuForTeacher/KulexiuForTeacher/Module/TXClassRoom/View/MemberList/MemberListCell.xib
  23. 34 67
      KulexiuForTeacher/KulexiuForTeacher/Module/TXClassRoom/View/NewWhiteboard/KSBoardAddStaffView.xib
  24. 20 0
      KulexiuForTeacher/KulexiuForTeacher/Module/TXClassRoom/View/VideoList/ClassMemberEmptyView.h
  25. 26 0
      KulexiuForTeacher/KulexiuForTeacher/Module/TXClassRoom/View/VideoList/ClassMemberEmptyView.m
  26. 45 0
      KulexiuForTeacher/KulexiuForTeacher/Module/TXClassRoom/View/VideoList/ClassMemberEmptyView.xib
  27. 28 0
      KulexiuForTeacher/KulexiuForTeacher/Module/TXClassRoom/View/VideoList/TXClassroomVideoListView.m

+ 12 - 2
KulexiuForTeacher/KulexiuForTeacher.xcodeproj/project.pbxproj

@@ -489,6 +489,8 @@
 		BC106BB42A8F4BC9000759A9 /* LiveModuleService.m in Sources */ = {isa = PBXBuildFile; fileRef = BC106BB32A8F4BC9000759A9 /* LiveModuleService.m */; };
 		BC106BB62A8F6E94000759A9 /* ShareMusicCellContentView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC106BB52A8F6E93000759A9 /* ShareMusicCellContentView.xib */; };
 		BC106BB82A8F6EAB000759A9 /* ShareLiveCellContentView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC106BB72A8F6EAB000759A9 /* ShareLiveCellContentView.xib */; };
+		BC106C542A9365DE000759A9 /* ClassMemberEmptyView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BC106C512A9365DC000759A9 /* ClassMemberEmptyView.xib */; };
+		BC106C552A9365DE000759A9 /* ClassMemberEmptyView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC106C522A9365DD000759A9 /* ClassMemberEmptyView.m */; };
 		BC1191ED280E55CB00A716F7 /* EvaluateDetailModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC1191EB280E55CA00A716F7 /* EvaluateDetailModel.m */; };
 		BC1191F0280E8A2800A716F7 /* TableCourseModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BC1191EF280E8A2800A716F7 /* TableCourseModel.m */; };
 		BC1191F3280EAB9600A716F7 /* AccompanyDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = BC1191F1280EAB9600A716F7 /* AccompanyDetailViewController.m */; };
@@ -2058,6 +2060,9 @@
 		BC106BB32A8F4BC9000759A9 /* LiveModuleService.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LiveModuleService.m; sourceTree = "<group>"; };
 		BC106BB52A8F6E93000759A9 /* ShareMusicCellContentView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ShareMusicCellContentView.xib; sourceTree = "<group>"; };
 		BC106BB72A8F6EAB000759A9 /* ShareLiveCellContentView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ShareLiveCellContentView.xib; sourceTree = "<group>"; };
+		BC106C512A9365DC000759A9 /* ClassMemberEmptyView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ClassMemberEmptyView.xib; sourceTree = "<group>"; };
+		BC106C522A9365DD000759A9 /* ClassMemberEmptyView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ClassMemberEmptyView.m; sourceTree = "<group>"; };
+		BC106C532A9365DE000759A9 /* ClassMemberEmptyView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ClassMemberEmptyView.h; sourceTree = "<group>"; };
 		BC1191EB280E55CA00A716F7 /* EvaluateDetailModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EvaluateDetailModel.m; sourceTree = "<group>"; };
 		BC1191EC280E55CB00A716F7 /* EvaluateDetailModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EvaluateDetailModel.h; sourceTree = "<group>"; };
 		BC1191EE280E8A2700A716F7 /* TableCourseModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TableCourseModel.h; sourceTree = "<group>"; };
@@ -6341,6 +6346,9 @@
 				BC71DEEE2A89F46F003F165E /* TXClassroomVideoListCell.m */,
 				BC71DEF12A89F46F003F165E /* TXClassroomVideoListView.h */,
 				BC71DEEF2A89F46F003F165E /* TXClassroomVideoListView.m */,
+				BC106C532A9365DE000759A9 /* ClassMemberEmptyView.h */,
+				BC106C522A9365DD000759A9 /* ClassMemberEmptyView.m */,
+				BC106C512A9365DC000759A9 /* ClassMemberEmptyView.xib */,
 			);
 			path = VideoList;
 			sourceTree = "<group>";
@@ -7089,9 +7097,9 @@
 		BCC0F6EF2A8CF11700C4EFA4 /* TXClassRoomAlert */ = {
 			isa = PBXGroup;
 			children = (
+				BCC0F6F22A8CF11700C4EFA4 /* TXClassRoomAlertView.h */,
 				BCC0F6F02A8CF11700C4EFA4 /* TXClassRoomAlertView.m */,
 				BCC0F6F12A8CF11700C4EFA4 /* TXClassRoomAlertView.xib */,
-				BCC0F6F22A8CF11700C4EFA4 /* TXClassRoomAlertView.h */,
 			);
 			path = TXClassRoomAlert;
 			sourceTree = "<group>";
@@ -7373,8 +7381,8 @@
 		BCDF82262A8A307F005F8B82 /* ZoomControl */ = {
 			isa = PBXGroup;
 			children = (
-				BCDF82272A8A307F005F8B82 /* ZoomControl.m */,
 				BCDF82282A8A307F005F8B82 /* ZoomControl.h */,
+				BCDF82272A8A307F005F8B82 /* ZoomControl.m */,
 			);
 			path = ZoomControl;
 			sourceTree = "<group>";
@@ -7698,6 +7706,7 @@
 				BC2456F4286BEFDA00D1F7C0 /* MineEmptyVideoCell.xib in Resources */,
 				BCA1134928A22A66007FAFB9 /* HomeHotMusicCollectionCell.xib in Resources */,
 				BCE6A09B27F83E8E00C97704 /* MinePageVideoCell.xib in Resources */,
+				BC106C542A9365DE000759A9 /* ClassMemberEmptyView.xib in Resources */,
 				BCC5841C28AA36D700BAB4CF /* BadgeIntroduceView.xib in Resources */,
 				BCC583F728A9FA8100BAB4CF /* cloud_animation_21.png in Resources */,
 				BCE06F2D2818147000234817 /* KSConfirmAlertView.xib in Resources */,
@@ -8621,6 +8630,7 @@
 				BC71DF1C2A89F470003F165E /* IACircleSliderThumbLayer.m in Sources */,
 				BCDBC59D286156E700647197 /* LiveRoomViewController.m in Sources */,
 				2779320927E30FC30010E277 /* KSRecordPowerAnimationView.m in Sources */,
+				BC106C552A9365DE000759A9 /* ClassMemberEmptyView.m in Sources */,
 				BC02BCE628B324C9005CB483 /* LiveDownSeatView.m in Sources */,
 				27BC3B3327F2FD2D00D81E30 /* VideoListBodyView.m in Sources */,
 				BCFE541028178FF600AD6786 /* MyIncomeViewController.m in Sources */,

+ 1 - 7
KulexiuForTeacher/KulexiuForTeacher/AppDelegate.m

@@ -169,13 +169,7 @@
 }
 
 - (void)displayUnreadMessageCount {
-    int unreadMsgCount = [[RCIMClient sharedRCIMClient] getUnreadCount:@[ @(ConversationType_PRIVATE),@(ConversationType_APPSERVICE), @(ConversationType_GROUP),@(ConversationType_SYSTEM)
-    ]];
-    if (unreadMsgCount >= 1) {
-        [self.tabBarController noteNewsWithIndex:2 count:unreadMsgCount];
-    } else {
-        [self.tabBarController clearNewsWithIndex:2];
-    }
+    [self countUnreadMessage];
 }
 
 - (void)registerSDK {

+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/live_student_micOff.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/live_student_micOff.imageset/live_student_micOff@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/live_student_micOff.imageset/live_student_micOff@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/live_student_micOn.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/live_student_micOn.imageset/live_student_micOn@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/Live/live_student_micOn.imageset/live_student_micOn@3x.png


+ 22 - 0
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/NewClassroom/classEmpty_student.imageset/Contents.json

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

BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/NewClassroom/classEmpty_student.imageset/classEmpty_student@2x.png


BIN
KulexiuForTeacher/KulexiuForTeacher/Assets.xcassets/NewClassroom/classEmpty_student.imageset/classEmpty_student@3x.png


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

@@ -9,7 +9,6 @@
 #import "KeyChainTools.h"
 #import "LoginViewController.h"
 #import "AppDelegate.h"
-#import <RongIMKit/RongIMKit.h>
 #import "JPUSHService.h"
 #import "RCConnectionManager.h"
 #import "CustomNavViewController.h"

+ 7 - 5
KulexiuForTeacher/KulexiuForTeacher/Common/Base/LoginManger/TXIMLinsenter.m

@@ -9,6 +9,7 @@
 #import "KSTabBarViewController.h"
 #import "AppDelegate+AppService.h"
 #import "ClassroomService.h"
+#import "TXLiveTextMessage.h"
 
 @interface TXIMLinsenter ()<TUILoginListener,V2TIMConversationListener,V2TIMSimpleMsgListener,V2TIMSignalingListener,V2TIMGroupListener>
 
@@ -30,6 +31,7 @@
 
 - (void)TXIMLoginWithUserId:(NSString *)userId sig:(NSString *)userSig callback:(TXIMLoginCallback)callback {
     [TUILogin addLoginListener:self];
+    [[V2TIMManager sharedInstance] addConversationListener:self];
     [[V2TIMManager sharedInstance] addSimpleMsgListener:self];
     [[V2TIMManager sharedInstance] addGroupListener:self];
     [TUILogin login:CONFIG_TXSDKAPPID userID:userId userSig:userSig succ:^{
@@ -129,17 +131,17 @@
 - (void)onRecvGroupTextMessage:(NSString *)msgID groupID:(NSString *)groupID sender:(V2TIMGroupMemberInfo *)info text:(NSString *)text {
     // 收到群组文本消息
     if ([groupID containsString:@"LIVE"]) { // 判断是否是直播群消息
-//        TXLiveTextMessage *message = [[TXLiveTextMessage alloc] init];
-//        message.messageId = msgID;
-//        message.groupId = groupID;
-//        [[NSNotificationCenter defaultCenter] postNotificationName:OnReceiveTXLiveMessageNotification object:@{@"message":message}];
+        TXLiveTextMessage *message = [[TXLiveTextMessage alloc] init];
+        message.messageId = msgID;
+        message.groupId = groupID;
+        [[NSNotificationCenter defaultCenter] postNotificationName:OnReceiveTXLiveMessageNotification object:@{@"message":message}];
     }
 }
 
 - (void)onRecvGroupCustomMessage:(NSString *)msgID groupID:(NSString *)groupID sender:(V2TIMGroupMemberInfo *)info customData:(NSData *)data {
     // 收到自定义群组消息
     if ([groupID containsString:@"LIVE"]) { // 判断是否是直播群消息
-//        [[NSNotificationCenter defaultCenter] postNotificationName:OnReceiveTXLiveMessageNotification object:@{@"message":[data mj_JSONObject],@"msgID" : msgID, @"groupID" : groupID}];
+        [[NSNotificationCenter defaultCenter] postNotificationName:OnReceiveTXLiveMessageNotification object:@{@"message":[data mj_JSONObject],@"msgID" : msgID, @"groupID" : groupID}];
     }
     else {
         NSDictionary *receiveMsg = @{@"message":[data mj_JSONObject],@"msgID" : msgID, @"groupID" : groupID};

+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/Login/Model/UserInfoManager.m

@@ -60,7 +60,7 @@
         else if ([vc isKindOfClass:[UITabBarController class]]) {
             if ([vc.presentedViewController isKindOfClass:NSClassFromString(@"CustomNavViewController")]) {
                 CustomNavViewController *nav = (CustomNavViewController *)vc.presentedViewController;
-                if ([nav.visibleViewController isKindOfClass:NSClassFromString(@"LiveRoomViewController")]) {
+                if ([nav.visibleViewController isKindOfClass:NSClassFromString(@"TXLiveRoomViewController")]) {
                     [self checkTokenEnableCallback:^(BOOL enable) {
                         if (enable) {
                             [[NSNotificationCenter defaultCenter] postNotificationName:@"liveroomQuit" object:nil];

+ 2 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Courseware/Model/CoursewareListModel.h

@@ -12,7 +12,9 @@
 @interface CoursewareListModel : NSObject <NSCoding, NSCopying>
 
 @property (nonatomic, strong) NSString *internalBaseClassIdentifier;
+@property (nonatomic, strong) NSString *musicSheetAccompanimentId;
 @property (nonatomic, strong) NSString *mp3url;
+@property (nonatomic, strong) NSString *url;
 @property (nonatomic, assign) double musicStatus;
 @property (nonatomic, strong) NSString *delFlag;
 @property (nonatomic, strong) NSString *titleImg;

+ 14 - 3
KulexiuForTeacher/KulexiuForTeacher/Module/Mine/Courseware/Model/CoursewareListModel.m

@@ -10,6 +10,7 @@
 
 NSString *const kCoursewareListModelId = @"id";
 NSString *const kCoursewareListModelMp3url = @"mp3url";
+NSString *const kCoursewareListModelUrl = @"url";
 NSString *const kCoursewareListModelMusicStatus = @"musicStatus";
 NSString *const kCoursewareListModelDelFlag = @"delFlag";
 NSString *const kCoursewareListModelTitleImg = @"titleImg";
@@ -23,6 +24,7 @@ NSString *const kCoursewareListModelUsername = @"username";
 NSString *const kCoursewareListModelMusicSheetName = @"musicSheetName";
 NSString *const kCoursewareListModelStatus = @"status";
 NSString *const kCoursewareListModelUpdateTime = @"updateTime";
+NSString *const kCoursewareListModelMusicSheetAccompanimentId = @"musicSheetAccompanimentId";
 
 
 @interface CoursewareListModel ()
@@ -35,6 +37,7 @@ NSString *const kCoursewareListModelUpdateTime = @"updateTime";
 
 @synthesize internalBaseClassIdentifier = _internalBaseClassIdentifier;
 @synthesize mp3url = _mp3url;
+@synthesize url = _url;
 @synthesize musicStatus = _musicStatus;
 @synthesize delFlag = _delFlag;
 @synthesize titleImg = _titleImg;
@@ -48,7 +51,7 @@ NSString *const kCoursewareListModelUpdateTime = @"updateTime";
 @synthesize musicSheetName = _musicSheetName;
 @synthesize status = _status;
 @synthesize updateTime = _updateTime;
-
+@synthesize musicSheetAccompanimentId = _musicSheetAccompanimentId;
 
 + (instancetype)modelObjectWithDictionary:(NSDictionary *)dict
 {
@@ -77,7 +80,8 @@ NSString *const kCoursewareListModelUpdateTime = @"updateTime";
             self.musicSheetName = [self objectOrNilForKey:kCoursewareListModelMusicSheetName fromDictionary:dict];
             self.status = [[self objectOrNilForKey:kCoursewareListModelStatus fromDictionary:dict] doubleValue];
             self.updateTime = [self objectOrNilForKey:kCoursewareListModelUpdateTime fromDictionary:dict];
-
+        self.url = [self objectOrNilForKey:kCoursewareListModelUrl fromDictionary:dict];
+        self.musicSheetAccompanimentId = [self objectOrNilForKey:kCoursewareListModelMusicSheetAccompanimentId fromDictionary:dict];
     }
     
     return self;
@@ -102,7 +106,8 @@ NSString *const kCoursewareListModelUpdateTime = @"updateTime";
     [mutableDict setValue:self.musicSheetName forKey:kCoursewareListModelMusicSheetName];
     [mutableDict setValue:[NSNumber numberWithDouble:self.status] forKey:kCoursewareListModelStatus];
     [mutableDict setValue:self.updateTime forKey:kCoursewareListModelUpdateTime];
-
+    [mutableDict setValue:self.url forKey:kCoursewareListModelUrl];
+    [mutableDict setValue:self.musicSheetAccompanimentId forKey:kCoursewareListModelMusicSheetAccompanimentId];
     return [NSDictionary dictionaryWithDictionary:mutableDict];
 }
 
@@ -144,6 +149,8 @@ NSString *const kCoursewareListModelUpdateTime = @"updateTime";
     self.musicSheetName = [aDecoder decodeObjectForKey:kCoursewareListModelMusicSheetName];
     self.status = [aDecoder decodeDoubleForKey:kCoursewareListModelStatus];
     self.updateTime = [aDecoder decodeObjectForKey:kCoursewareListModelUpdateTime];
+    self.url = [aDecoder decodeObjectForKey:kCoursewareListModelUrl];
+    self.musicSheetAccompanimentId = [aDecoder decodeObjectForKey:kCoursewareListModelMusicSheetAccompanimentId];
     return self;
 }
 
@@ -165,6 +172,8 @@ NSString *const kCoursewareListModelUpdateTime = @"updateTime";
     [aCoder encodeObject:_musicSheetName forKey:kCoursewareListModelMusicSheetName];
     [aCoder encodeDouble:_status forKey:kCoursewareListModelStatus];
     [aCoder encodeObject:_updateTime forKey:kCoursewareListModelUpdateTime];
+    [aCoder encodeObject:_url forKey:kCoursewareListModelUrl];
+    [aCoder encodeObject:_musicSheetAccompanimentId forKey:kCoursewareListModelMusicSheetAccompanimentId];
 }
 
 - (id)copyWithZone:(NSZone *)zone
@@ -188,6 +197,8 @@ NSString *const kCoursewareListModelUpdateTime = @"updateTime";
         copy.musicSheetName = [self.musicSheetName copyWithZone:zone];
         copy.status = self.status;
         copy.updateTime = [self.updateTime copyWithZone:zone];
+        copy.url = [self.url copyWithZone:zone];
+        copy.musicSheetAccompanimentId = [self.musicSheetAccompanimentId copyWithZone:zone];
     }
     
     return copy;

+ 3 - 2
KulexiuForTeacher/KulexiuForTeacher/Module/TXClassRoom/Controller/TXClassroomViewController.m

@@ -2062,6 +2062,7 @@
         });
     });
 }
+
 - (void)recordSongMessageWithSongId:(NSString *)songId songName:(NSString *)songName isAccompany:(BOOL)isAccompany songUrl:(NSString *)songUrl {
     self.songId = songId;
     self.songUrl = songUrl;
@@ -2085,8 +2086,8 @@
         _coursewareView = [CoursewareAlertView shareInstance];
         [_coursewareView configUI];
         MJWeakSelf;
-        [_coursewareView chooseCoursewareCallback:^(NSString * _Nonnull musicUrl, NSString * _Nonnull musicName, NSString * _Nonnull songId) {
-            [weakSelf notiferStudentDownload:songId songUrl:nil accompanyUrl:musicUrl songName:musicName];
+        [_coursewareView chooseCoursewareCallback:^(NSString * _Nonnull url, NSString * _Nonnull musicUrl, NSString * _Nonnull musicName, NSString * _Nonnull songId) {
+            [weakSelf notiferStudentDownload:songId songUrl:url accompanyUrl:musicUrl songName:musicName];
         }];
     }
     return _coursewareView;

+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/TXClassRoom/View/AccompanyDisplay/AccompanyView.m

@@ -280,7 +280,7 @@
                 
                 for (ClassSongMessage *memberSong in member.songMessage) { // 获取成员的曲目
                     if (memberSong.musicScoreAccompanimentId == songMessage.musicScoreAccompanimentId) {
-                        if (memberSong.downStatus == 2) { // 下载失败
+                        if (memberSong.downStatus) { // 下载失败
                             isFailed = YES;
                         }
                         else if (memberSong.downStatus == 0) { // 下载中

+ 1 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/TXClassRoom/View/CoursewareView/CoursewareAlertView.h

@@ -9,7 +9,7 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-typedef void(^ChooseMusicCallback)(NSString *musicUrl, NSString *musicName, NSString *songId);
+typedef void(^ChooseMusicCallback)(NSString *url, NSString *musicUrl, NSString *musicName, NSString *songId);
 
 typedef void(^ChooseImageCallback)(NSString *musicImages);
 

+ 2 - 10
KulexiuForTeacher/KulexiuForTeacher/Module/TXClassRoom/View/CoursewareView/CoursewareAlertView.m

@@ -92,15 +92,7 @@
             [weakSelf.tableView.mj_footer endRefreshingWithNoMoreData];
         }
     }];
-//    [KSGifRefreshFooter footerWithRefreshingBlock:^{
-//        if (weakSelf.isLoadMore) {
-//            weakSelf.pages += 1;
-//            [weakSelf requestData];
-//        }
-//        else {
-//            [weakSelf.tableView.mj_footer endRefreshingWithNoMoreData];
-//        }
-//    }];
+    
     [self loadFirstData];
 }
 
@@ -230,7 +222,7 @@
 - (IBAction)sureAction:(id)sender {
     if (self.callback) {
         CoursewareListModel *lastModel = self.sourceArray[self.lastChooseIndex];
-        self.callback(lastModel.mp3url, lastModel.musicSheetName, [NSString stringWithFormat:@"%.0f",lastModel.musicSheetId]);
+        self.callback(lastModel.url,lastModel.mp3url, lastModel.musicSheetName, lastModel.musicSheetAccompanimentId);
     }
     
     if (self.imageCallback) {

+ 2 - 1
KulexiuForTeacher/KulexiuForTeacher/Module/TXClassRoom/View/MemberList/ClassMemberListView.m

@@ -147,7 +147,8 @@
     NSString *leftTitle = [NSString stringWithFormat:@"在线成员(%zd)",inClassCount];
     NSString *rightTitle = [NSString stringWithFormat:@"未进入成员(%zd)", ([ClassroomService sharedService].currentRoom.studentNums - inClassCount)];
     _titles = @[leftTitle,rightTitle];
-    [self.pagerView reloadData];
+    self.categoryView.titles = _titles;
+    [self.categoryView reloadData];
 }
 
 - (void)reloadPersonList {

+ 6 - 8
KulexiuForTeacher/KulexiuForTeacher/Module/TXClassRoom/View/MemberList/MemberListCell.xib

@@ -1,10 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
     <device id="retina6_1" orientation="portrait" appearance="light"/>
     <dependencies>
         <deployment identifier="iOS"/>
         <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/>
-        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -30,7 +29,7 @@
                         </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="zC0-bq-h3j">
-                        <rect key="frame" x="60" y="14" width="123" height="22"/>
+                        <rect key="frame" x="60" y="14" width="133" height="22"/>
                         <constraints>
                             <constraint firstAttribute="height" constant="22" id="Bh9-Lf-Pob"/>
                         </constraints>
@@ -39,7 +38,7 @@
                         <nil key="highlightedColor"/>
                     </label>
                     <button opaque="NO" tag="1001" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="YtC-Te-aTQ">
-                        <rect key="frame" x="215" y="5" width="40" height="40"/>
+                        <rect key="frame" x="225" y="5" width="40" height="40"/>
                         <constraints>
                             <constraint firstAttribute="width" constant="40" id="Yeq-Qy-Faq"/>
                             <constraint firstAttribute="height" constant="40" id="ZOW-wh-g8A"/>
@@ -50,7 +49,7 @@
                         </connections>
                     </button>
                     <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="handup_image" translatesAutoresizingMaskIntoConstraints="NO" id="tEL-P5-Wsu">
-                        <rect key="frame" x="188" y="14" width="22" height="22"/>
+                        <rect key="frame" x="198" y="14" width="22" height="22"/>
                         <constraints>
                             <constraint firstAttribute="width" constant="22" id="T1V-18-IdU"/>
                             <constraint firstAttribute="height" constant="22" id="oxR-LF-Iq5"/>
@@ -64,7 +63,7 @@
                         </constraints>
                     </view>
                     <button opaque="NO" tag="1002" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="tlf-d9-VlB">
-                        <rect key="frame" x="260" y="5" width="40" height="40"/>
+                        <rect key="frame" x="270" y="5" width="40" height="40"/>
                         <constraints>
                             <constraint firstAttribute="height" constant="40" id="6AD-KS-9TO"/>
                             <constraint firstAttribute="width" constant="40" id="fpP-5I-KRC"/>
@@ -82,7 +81,7 @@
                     <constraint firstItem="YtC-Te-aTQ" firstAttribute="leading" secondItem="tEL-P5-Wsu" secondAttribute="trailing" constant="5" id="OhC-cl-PYk"/>
                     <constraint firstItem="tEL-P5-Wsu" firstAttribute="leading" secondItem="zC0-bq-h3j" secondAttribute="trailing" constant="5" id="ULB-IV-NLg"/>
                     <constraint firstItem="zC0-bq-h3j" firstAttribute="leading" secondItem="ojL-FB-WJJ" secondAttribute="trailing" constant="10" id="V1y-Da-C6z"/>
-                    <constraint firstAttribute="trailing" secondItem="tlf-d9-VlB" secondAttribute="trailing" constant="20" id="Xgd-1f-upn"/>
+                    <constraint firstAttribute="trailing" secondItem="tlf-d9-VlB" secondAttribute="trailing" constant="10" id="Xgd-1f-upn"/>
                     <constraint firstItem="zC0-bq-h3j" firstAttribute="centerY" secondItem="ojL-FB-WJJ" secondAttribute="centerY" id="aWe-rI-PF7"/>
                     <constraint firstItem="tlf-d9-VlB" firstAttribute="centerY" secondItem="YtC-Te-aTQ" secondAttribute="centerY" id="gkh-rq-b96"/>
                     <constraint firstItem="ojL-FB-WJJ" firstAttribute="centerY" secondItem="H2p-sc-9uM" secondAttribute="centerY" id="jI5-aZ-ojp"/>
@@ -92,7 +91,6 @@
                     <constraint firstAttribute="trailing" secondItem="pWw-PT-bgM" secondAttribute="trailing" constant="20" id="yT0-5Q-7e9"/>
                 </constraints>
             </tableViewCellContentView>
-            <viewLayoutGuide key="safeArea" id="aW0-zy-SZf"/>
             <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
             <connections>
                 <outlet property="cameraButton" destination="tlf-d9-VlB" id="VIA-Cp-L4Q"/>

+ 34 - 67
KulexiuForTeacher/KulexiuForTeacher/Module/TXClassRoom/View/NewWhiteboard/KSBoardAddStaffView.xib

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="19529" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
     <device id="retina6_1" orientation="portrait" appearance="dark"/>
     <dependencies>
         <deployment identifier="iOS"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19519"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -14,11 +14,11 @@
             <autoresizingMask key="autoresizingMask"/>
             <subviews>
                 <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="bpU-Hl-OBf">
-                    <rect key="frame" x="47" y="19" width="320" height="240"/>
+                    <rect key="frame" x="47" y="37.5" width="320" height="203"/>
                     <subviews>
                         <button opaque="NO" tag="1001" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="FYm-Ka-43V">
-                            <rect key="frame" x="168.5" y="105" width="93" height="63"/>
-                            <color key="backgroundColor" red="0.1764705882352941" green="0.17254901960784313" blue="0.21568627450980393" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <rect key="frame" x="168.5" y="60" width="93" height="63"/>
+                            <color key="backgroundColor" red="0.97647058823529409" green="0.97647058823529409" blue="0.97647058823529409" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                             <constraints>
                                 <constraint firstAttribute="width" constant="93" id="gc2-Xr-UHS"/>
                                 <constraint firstAttribute="height" constant="63" id="k0X-8B-3oa"/>
@@ -40,49 +40,9 @@
                                 <action selector="staffChooseAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="lgL-En-n04"/>
                             </connections>
                         </button>
-                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6Up-0t-rtI">
-                            <rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
-                            <subviews>
-                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="wS4-Vb-qmU">
-                                    <rect key="frame" x="280" y="0.0" width="40" height="43"/>
-                                    <constraints>
-                                        <constraint firstAttribute="width" constant="40" id="MCq-5i-SUu"/>
-                                    </constraints>
-                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
-                                    <state key="normal" title="" image="cancle_white"/>
-                                    <connections>
-                                        <action selector="cancelAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="N5Q-Lw-QeN"/>
-                                    </connections>
-                                </button>
-                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="提示" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="jVG-D8-YNu">
-                                    <rect key="frame" x="17" y="11.5" width="33" height="20"/>
-                                    <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
-                                    <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                                    <nil key="highlightedColor"/>
-                                </label>
-                            </subviews>
-                            <color key="backgroundColor" red="0.31764705882352939" green="0.30980392156862746" blue="0.37254901960784315" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
-                            <constraints>
-                                <constraint firstItem="jVG-D8-YNu" firstAttribute="leading" secondItem="6Up-0t-rtI" secondAttribute="leading" constant="17" id="7Gx-PJ-PL5"/>
-                                <constraint firstAttribute="trailing" secondItem="wS4-Vb-qmU" secondAttribute="trailing" id="Pzh-oK-T1X"/>
-                                <constraint firstAttribute="bottom" secondItem="wS4-Vb-qmU" secondAttribute="bottom" id="TU8-u2-Pca"/>
-                                <constraint firstAttribute="height" constant="43" id="aJh-cc-JqY"/>
-                                <constraint firstItem="jVG-D8-YNu" firstAttribute="centerY" secondItem="6Up-0t-rtI" secondAttribute="centerY" id="fhd-4V-Qi4"/>
-                                <constraint firstItem="wS4-Vb-qmU" firstAttribute="top" secondItem="6Up-0t-rtI" secondAttribute="top" id="oqU-eN-pDE"/>
-                            </constraints>
-                        </view>
-                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="是否需要添加高音或低音谱" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="USX-dS-mgY">
-                            <rect key="frame" x="17" y="63" width="196" height="22"/>
-                            <constraints>
-                                <constraint firstAttribute="height" constant="22" id="2ed-rJ-0mU"/>
-                            </constraints>
-                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
-                            <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
-                            <nil key="highlightedColor"/>
-                        </label>
                         <button opaque="NO" tag="1000" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xFj-5i-Tg0">
-                            <rect key="frame" x="58.5" y="105" width="93" height="63"/>
-                            <color key="backgroundColor" red="0.1764705882" green="0.17254901959999999" blue="0.2156862745" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <rect key="frame" x="58.5" y="60" width="93" height="63"/>
+                            <color key="backgroundColor" red="0.97647058823529409" green="0.97647058823529409" blue="0.97647058823529409" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                             <constraints>
                                 <constraint firstAttribute="width" constant="93" id="Q1f-t5-VWM"/>
                                 <constraint firstAttribute="height" constant="63" id="Weg-GS-as4"/>
@@ -105,20 +65,22 @@
                             </connections>
                         </button>
                         <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kkq-YF-WJ0">
-                            <rect key="frame" x="17" y="193" width="135" height="34"/>
+                            <rect key="frame" x="17" y="148" width="135" height="40"/>
                             <constraints>
                                 <constraint firstAttribute="width" constant="135" id="5jr-Oy-go5"/>
-                                <constraint firstAttribute="height" constant="34" id="7eD-LC-8wu"/>
+                                <constraint firstAttribute="height" constant="40" id="7eD-LC-8wu"/>
                             </constraints>
-                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
                             <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
-                            <state key="normal" title="不需要"/>
+                            <state key="normal" title="不需要">
+                                <color key="titleColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            </state>
                             <userDefinedRuntimeAttributes>
                                 <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
-                                    <real key="value" value="4"/>
+                                    <real key="value" value="20"/>
                                 </userDefinedRuntimeAttribute>
                                 <userDefinedRuntimeAttribute type="color" keyPath="borderColor">
-                                    <color key="value" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                    <color key="value" red="0.85882352941176465" green="0.85882352941176465" blue="0.85882352941176465" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                 </userDefinedRuntimeAttribute>
                                 <userDefinedRuntimeAttribute type="number" keyPath="borderWidth">
                                     <real key="value" value="1"/>
@@ -129,42 +91,48 @@
                             </connections>
                         </button>
                         <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="AHb-Lo-38M">
-                            <rect key="frame" x="168" y="193" width="135" height="34"/>
-                            <color key="backgroundColor" red="0.396078431372549" green="0.38823529411764707" blue="0.46274509803921571" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            <rect key="frame" x="168" y="148" width="135" height="40"/>
+                            <color key="backgroundColor" red="0.0039215686274509803" green="0.75686274509803919" blue="0.70980392156862748" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                             <constraints>
                                 <constraint firstAttribute="width" constant="135" id="OLq-Rq-wo0"/>
-                                <constraint firstAttribute="height" constant="34" id="hNG-BX-nU8"/>
+                                <constraint firstAttribute="height" constant="40" id="hNG-BX-nU8"/>
                             </constraints>
-                            <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
                             <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                             <state key="normal" title="确认"/>
                             <userDefinedRuntimeAttributes>
                                 <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
-                                    <real key="value" value="4"/>
+                                    <real key="value" value="20"/>
                                 </userDefinedRuntimeAttribute>
                             </userDefinedRuntimeAttributes>
                             <connections>
                                 <action selector="sureAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="64z-JL-lNV"/>
                             </connections>
                         </button>
+                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="是否需要添加高音或低音谱号" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="jVG-D8-YNu">
+                            <rect key="frame" x="53.5" y="20" width="213" height="24"/>
+                            <constraints>
+                                <constraint firstAttribute="height" constant="24" id="EcM-1u-hnK"/>
+                            </constraints>
+                            <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/>
+                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
                     </subviews>
-                    <color key="backgroundColor" red="0.20784313725490194" green="0.20392156862745098" blue="0.24313725490196078" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                    <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                     <constraints>
                         <constraint firstAttribute="trailing" secondItem="AHb-Lo-38M" secondAttribute="trailing" constant="17" id="0nR-5H-5aO"/>
-                        <constraint firstAttribute="trailing" secondItem="6Up-0t-rtI" secondAttribute="trailing" id="7Ql-jg-C99"/>
-                        <constraint firstItem="6Up-0t-rtI" firstAttribute="top" secondItem="bpU-Hl-OBf" secondAttribute="top" id="A2c-Fg-UEM"/>
+                        <constraint firstItem="jVG-D8-YNu" firstAttribute="centerX" secondItem="bpU-Hl-OBf" secondAttribute="centerX" id="CBa-8T-d2A"/>
+                        <constraint firstItem="jVG-D8-YNu" firstAttribute="top" secondItem="bpU-Hl-OBf" secondAttribute="top" constant="20" id="Cx2-9i-Ti7"/>
                         <constraint firstItem="FYm-Ka-43V" firstAttribute="top" secondItem="xFj-5i-Tg0" secondAttribute="top" id="ImZ-iz-fyE"/>
-                        <constraint firstItem="USX-dS-mgY" firstAttribute="top" secondItem="6Up-0t-rtI" secondAttribute="bottom" constant="20" id="KX9-R9-gqy"/>
                         <constraint firstAttribute="width" constant="320" id="MDj-vf-stF"/>
                         <constraint firstItem="FYm-Ka-43V" firstAttribute="leading" secondItem="xFj-5i-Tg0" secondAttribute="trailing" constant="17" id="R3S-Ac-lN4"/>
                         <constraint firstItem="AHb-Lo-38M" firstAttribute="top" secondItem="kkq-YF-WJ0" secondAttribute="top" id="SCL-Jz-nwo"/>
-                        <constraint firstItem="xFj-5i-Tg0" firstAttribute="top" secondItem="USX-dS-mgY" secondAttribute="bottom" constant="20" id="az8-ei-Wnm"/>
+                        <constraint firstItem="xFj-5i-Tg0" firstAttribute="top" secondItem="jVG-D8-YNu" secondAttribute="bottom" constant="16" id="hWr-q9-cat"/>
                         <constraint firstItem="kkq-YF-WJ0" firstAttribute="leading" secondItem="bpU-Hl-OBf" secondAttribute="leading" constant="17" id="mcE-e4-zu2"/>
-                        <constraint firstItem="6Up-0t-rtI" firstAttribute="leading" secondItem="bpU-Hl-OBf" secondAttribute="leading" id="nEa-lT-kgh"/>
                         <constraint firstItem="AHb-Lo-38M" firstAttribute="top" secondItem="FYm-Ka-43V" secondAttribute="bottom" constant="25" id="qUD-P5-tAU"/>
                         <constraint firstItem="xFj-5i-Tg0" firstAttribute="trailing" secondItem="bpU-Hl-OBf" secondAttribute="centerX" constant="-8.5" id="rM6-Ax-9DZ"/>
-                        <constraint firstAttribute="height" constant="240" id="vHd-OH-EBx"/>
-                        <constraint firstItem="USX-dS-mgY" firstAttribute="leading" secondItem="bpU-Hl-OBf" secondAttribute="leading" constant="17" id="xux-Bj-8Tk"/>
+                        <constraint firstAttribute="height" constant="203" id="vHd-OH-EBx"/>
                     </constraints>
                 </view>
             </subviews>
@@ -184,7 +152,6 @@
         </view>
     </objects>
     <resources>
-        <image name="cancle_white" width="16" height="15"/>
         <image name="highStaff_selected" width="46" height="46"/>
         <image name="lowStaff_nomal" width="46" height="46"/>
     </resources>

+ 20 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/TXClassRoom/View/VideoList/ClassMemberEmptyView.h

@@ -0,0 +1,20 @@
+//
+//  ClassMemberEmptyView.h
+//  TeacherDaya
+//
+//  Created by 王智 on 2023/8/21.
+//  Copyright © 2023 DayaMusic. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ClassMemberEmptyView : UIView
+
++ (instancetype)shareInstance;
+
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 26 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/TXClassRoom/View/VideoList/ClassMemberEmptyView.m

@@ -0,0 +1,26 @@
+//
+//  ClassMemberEmptyView.m
+//  TeacherDaya
+//
+//  Created by 王智 on 2023/8/21.
+//  Copyright © 2023 DayaMusic. All rights reserved.
+//
+
+#import "ClassMemberEmptyView.h"
+
+@implementation ClassMemberEmptyView
+
+
++ (instancetype)shareInstance {
+    ClassMemberEmptyView *view = [[[NSBundle mainBundle] loadNibNamed:@"ClassMemberEmptyView" owner:nil options:nil] lastObject];
+    return view;
+}
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+@end

+ 45 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/TXClassRoom/View/VideoList/ClassMemberEmptyView.xib

@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+    <device id="retina6_12" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="ClassMemberEmptyView">
+            <rect key="frame" x="0.0" y="0.0" width="328" height="370"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <subviews>
+                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="classEmpty_student" translatesAutoresizingMaskIntoConstraints="NO" id="alY-Ba-WxW">
+                    <rect key="frame" x="138" y="150" width="52" height="44"/>
+                </imageView>
+                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="暂无学员" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ABw-6M-8eX">
+                    <rect key="frame" x="135.33333333333334" y="200" width="57.333333333333343" height="20"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="20" id="6aP-0Q-t42"/>
+                    </constraints>
+                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                    <color key="textColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
+                    <nil key="highlightedColor"/>
+                </label>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+            <constraints>
+                <constraint firstItem="ABw-6M-8eX" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="9e1-uc-Lsd"/>
+                <constraint firstItem="alY-Ba-WxW" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" constant="-13" id="Ody-Vw-eXS"/>
+                <constraint firstItem="ABw-6M-8eX" firstAttribute="top" secondItem="alY-Ba-WxW" secondAttribute="bottom" constant="6" id="gUO-vn-HDd"/>
+                <constraint firstItem="alY-Ba-WxW" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="qTc-tm-0pa"/>
+            </constraints>
+            <nil key="simulatedTopBarMetrics"/>
+            <nil key="simulatedBottomBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <point key="canvasLocation" x="151.14503816793894" y="-180.98591549295776"/>
+        </view>
+    </objects>
+    <resources>
+        <image name="classEmpty_student" width="52" height="44"/>
+    </resources>
+</document>

+ 28 - 0
KulexiuForTeacher/KulexiuForTeacher/Module/TXClassRoom/View/VideoList/TXClassroomVideoListView.m

@@ -9,6 +9,7 @@
 #import "TXClassroomVideoListView.h"
 #import "TXClassroomVideoListCell.h"
 #import "ClassroomService.h"
+#import "ClassMemberEmptyView.h"
 
 
 
@@ -22,6 +23,8 @@
 
 @property (nonatomic, strong) UIView *leftButtonView;
 
+@property (nonatomic, strong) ClassMemberEmptyView *emtpyView;
+
 @end
 
 @implementation TXClassroomVideoListView
@@ -32,6 +35,7 @@
         self.backgroundColor = [UIColor whiteColor];
         [self addSubview:self.leftButtonView];
         [self addSubview:self.videoListTableView];
+        [self addEmptyView];
         _signalSemaphore = dispatch_semaphore_create(1);
         _signalQualitySemaphore = dispatch_semaphore_create(1);
         _signalVolumeSemaphore = dispatch_semaphore_create(1);
@@ -40,6 +44,14 @@
     return self;
 }
 
+- (void)addEmptyView {
+    [self.videoListTableView addSubview:self.emtpyView];
+    [self.emtpyView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.right.top.bottom.mas_equalTo(self.videoListTableView);
+    }];
+    self.emtpyView.alpha = 0.0f;
+}
+
 - (void)getDataSource {
     dispatch_async(self.videoListQueue, ^{
         MJ_LOCK(self.signalSemaphore);
@@ -96,11 +108,20 @@
         dispatch_async(dispatch_get_main_queue(), ^{
             self.videoDataSource = [lastArray mutableCopy];
             [self.videoListTableView reloadData];
+            [self changeEmptyDisplay];
         });
         MJ_UNLOCK(self.signalSemaphore)
     });
 }
 
+- (void)changeEmptyDisplay {
+    NSInteger count = self.videoDataSource.count;
+    [UIView animateWithDuration:0.1 animations:^{
+//        [self.emtpyView setAlpha:count ? 0.0f :1.0f];
+        [self.emtpyView setAlpha:1];
+    }] ;
+}
+
 - (void)updateUserVideo:(NSString *)userId {
     dispatch_async(self.videoListQueue, ^{
         MJ_LOCK(self.signalSemaphore)
@@ -261,6 +282,13 @@
         [self.delegate videoListView:self didHideView:YES];
     }
 }
+
+- (ClassMemberEmptyView *)emtpyView {
+    if (!_emtpyView) {
+        _emtpyView = [ClassMemberEmptyView shareInstance];
+    }
+    return _emtpyView;
+}
 /*
 // Only override drawRect: if you perform custom drawing.
 // An empty implementation adversely affects performance during animation.