// // MyVideoCourseBodyView.m // KulexiuForTeacher // // Created by 王智 on 2022/4/18. // #import "MyVideoCourseBodyView.h" #import "VideoCourseCell.h" #import "VideoCourseModel.h" #import "KSBaseWKWebViewController.h" #import "AuthDisplayView.h" #import "MyVideoSearchView.h" #import "NewClassPopView.h" #import "KSChoosePicker.h" @interface MyVideoCourseBodyView () @property (nonatomic, strong) NSMutableArray *dataArray; @property (nonatomic, strong) StateView *promptView; @property (nonatomic, strong) UIView *promptPlaceView; @property (nonatomic, assign) BOOL networkAvaiable; // 网络是否可用 @property (nonatomic, assign) BOOL isLoadMore; @property (nonatomic, assign) NSInteger rows; @property (nonatomic, assign) NSInteger pages; @property (nonatomic, strong) NSString *audioStatus; @property (nonatomic, strong) NSString *searchKey; @property (nonatomic, strong) AuthDisplayView *authView; @property (nonatomic, copy) MyVideoSearchView *sortView; @property (nonatomic, strong) NewClassPopView *popView; @property (nonatomic, assign) BOOL authStatus; @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.audioStatus = @"PASS"; self.dataArray = [NSMutableArray array]; [self.collectionView.mj_footer resetNoMoreData]; [self setPromptString:@"暂无内容" imageName:@"wd_img_zwsj" inView:self.collectionView]; [self.collectionView reloadData]; } - (void)requestData { [KSNetworkingManager videoLessonListRequest:KS_POST lessonSubject:self.searchKey auditStatus:self.audioStatus pageNo:self.pages pageSize:self.rows success:^(NSDictionary * _Nonnull dic) { [self endRefresh]; if ([dic integerValueForKey:@"code"] == 200 && [dic boolValueForKey:@"status"]) { NSArray *sourceArray = [[dic dictionaryValueForKey:@"data"] arrayValueForKey:@"rows"]; for (NSDictionary *parm in sourceArray) { VideoCourseModel *model = [[VideoCourseModel alloc] initWithDictionary:parm]; [self.dataArray addObject:model]; } if (sourceArray.count < self.rows) { self.isLoadMore = NO; } } else { [self MBPShow:MESSAGEKEY]; } [self.collectionView reloadData]; [self changePromptLabelStateWithArray:self.dataArray]; } faliure:^(NSError * _Nonnull error) { [self endRefresh]; if (self.networkAvaiable == NO) { [self setPromptString:@"暂无网络" imageName:@"no_networking" inView:self.collectionView]; } [self.dataArray removeAllObjects]; [self.collectionView reloadData]; [self changePromptLabelStateWithArray:self.dataArray]; }]; } - (void)beginRefreshImmediately { [self.collectionView.mj_header beginRefreshing]; } - (void)selectCellAtIndexPath:(NSIndexPath *)indexPath { if (self.lastSelectedIndexPath == indexPath) { return; } if (self.lastSelectedIndexPath != nil) { UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:self.lastSelectedIndexPath]; [cell setSelected:NO]; } UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:indexPath]; [cell setSelected:YES]; self.lastSelectedIndexPath = indexPath; } - (void)layoutSubviews { [super layoutSubviews]; CGFloat topHeight = 55.0f; self.collectionView.frame = CGRectMake(0, topHeight, self.bounds.size.width, self.bounds.size.height - topHeight); if (!_sortView) { _sortView = [MyVideoSearchView shareInstance]; _sortView.frame = CGRectMake(0, 0, kScreenWidth, 55); MJWeakSelf; [_sortView sortAction:^{ [weakSelf showSortView]; }]; [self addSubview:self.sortView]; } if (self.authStatus == NO) { [self showAuthView]; } else { [self hideAuthView]; } } - (void)showSortView { if (self.subjectList.count) { NSMutableArray *nameArray = [NSMutableArray array]; [nameArray addObject:@"全部"]; for (NSDictionary *parm in self.subjectList) { [nameArray addObject:[parm stringValueForKey:@"subjectName"]]; } MJWeakSelf; KSChoosePicker *picker = [[KSChoosePicker alloc] initWithTitle:@"声部筛选" sourceData:nameArray chooseReturnWithBlock:^(NSString * _Nonnull returnValue, NSInteger chooseIndex) { if (chooseIndex == 0) { weakSelf.sortView.sortTitleLabel.text = @"全部声部"; weakSelf.searchKey = @""; } else { weakSelf.sortView.sortTitleLabel.text = returnValue; NSDictionary *parm = self.subjectList[chooseIndex-1]; weakSelf.searchKey = [parm stringValueForKey:@"subjectId"]; } self.sortView.arrowUp = NO; [weakSelf refreshAndRequestData]; } cancel:^{ self.sortView.arrowUp = NO; }]; [picker showPicker]; } else { [self MBPShow:@"无声部信息"]; self.sortView.arrowUp = NO; } } - (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; } - (void)setTeaherStatus:(NSString *)teaherStatus { _teaherStatus = teaherStatus; if ([teaherStatus isEqualToString:@"PASS"]) { self.authStatus = YES; } else { self.authStatus = NO; } if (self.authStatus == NO) { [self showAuthView]; } else { [self hideAuthView]; } } - (void)configAuthDisplay { [self.authView configDisplayMessage:[self getAuthDisplayMessage]]; if ([self.teaherStatus isEqualToString:@"DOING"]) { self.authView.sureButton.userInteractionEnabled = NO; self.authView.sureButton.hidden = YES; } else { self.authView.sureButton.userInteractionEnabled = YES; self.authView.sureButton.hidden = NO; } } - (void)showAuthView { [self configAuthDisplay]; if ([self.subviews containsObject:self.authView]) { [self bringSubviewToFront:self.authView]; } else { [self addSubview:self.authView]; [self.authView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.top.bottom.right.mas_equalTo(self); }]; } } - (void)hideAuthView { if ([self.subviews containsObject:self.authView]) { [self.authView removeFromSuperview]; self.authView = nil; } } - (AuthDisplayView *)authView { if (!_authView) { _authView = [AuthDisplayView shareInstance]; [_authView.imageView setImage:[UIImage imageNamed:[self getAuthDisplayImage]]]; [_authView configDisplayMessage:[self getAuthDisplayMessage]]; MJWeakSelf; [_authView sureCallback:^{ [weakSelf authAction]; }]; } return _authView; } - (NSString *)getAuthDisplayImage { return @"authTeacher_accompany"; } - (NSString *)getAuthDisplayMessage { if ([self.teaherStatus isEqualToString:@"DOING"]) { return @"您已提交认证申请,请耐心等待审核结果~"; } else { return @"您还没有完成老师认证,认证后才可创建直播课哦~"; } } - (void)authAction { KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init]; webCtrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/teacherCert"]; [self.naviController pushViewController:webCtrl animated:YES]; } /* // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. - (void)drawRect:(CGRect)rect { // Drawing code } */ @end