// // receiveSaveRecordTableView.m // 双子星云手机 // // Created by xd h on 2024/5/23. // #import "receiveSaveRecordTableView.h" #import "boxReceiveFileRecordCell.h" #import "UIScrollView+EmptyDataSet.h" #import "uploadFileRecordTableViewHeadView.h" #import "boxSaveFileManager.h" @interface receiveSaveRecordTableView() { } @property (nonatomic, strong) NSMutableArray *curDataArr; @end @implementation receiveSaveRecordTableView - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { [self initCommon]; [self initTableHeaderInSectionFun]; _selectModelArr = [NSMutableArray new]; _curDataArr = [NSMutableArray new]; } return self; } - (void)initCommon { self.delegate = self; self.dataSource = self; self.showsVerticalScrollIndicator = NO; self.showsHorizontalScrollIndicator = NO; [self setSeparatorStyle:(UITableViewCellSeparatorStyleNone)]; [self setSeparatorColor:[UIColor clearColor]]; [self setBackgroundColor:[UIColor clearColor]]; [self setTableFooterView:[UIView new]]; [self setBounces:YES]; if (@available(iOS 15.0, *)) { self.sectionHeaderTopPadding = 0; } //空数据引入第三方开源处理 self.emptyDataSetSource = self; self.emptyDataSetDelegate = self; } - (void)setOutSideDataArr:(NSMutableArray *)outSideDataArr{ if(!outSideDataArr || outSideDataArr.count != 3){ return; } _outSideDataArr = outSideDataArr; _boxSaveingArr = [NSMutableArray arrayWithArray:outSideDataArr[0]]; _boxSaveDoneArr = [NSMutableArray arrayWithArray:outSideDataArr[1]]; _boxSavefailArr = [NSMutableArray arrayWithArray:outSideDataArr[2]]; if(!_boxSaveingArr){ _boxSaveingArr = [NSMutableArray new]; } if(!_boxSaveDoneArr){ _boxSaveDoneArr = [NSMutableArray new]; } if(!_boxSavefailArr){ _boxSavefailArr = [NSMutableArray new]; } [self RefreshAllDataFun]; } - (void)RefreshAllDataFun { NSMutableArray *totalArr = [NSMutableArray new]; if(_boxSaveingArr.count>0){ [totalArr addObject:_boxSaveingArr]; } if(_boxSavefailArr.count>0){ [totalArr addObject:_boxSavefailArr]; } if(_boxSaveDoneArr.count>0){ [totalArr addObject:_boxSaveDoneArr]; } _curDataArr = totalArr; [self reloadDataFun]; } #pragma mark - 列表委托 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return _curDataArr.count; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if(section < _curDataArr.count){ NSArray *curArr = _curDataArr[section]; return curArr.count; } return 0; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ NSInteger row = indexPath.row; NSInteger section = indexPath.section; static NSString *identifier = @"boxReceiveFileRecordCell"; boxReceiveFileRecordCell * cell = [tableView dequeueReusableCellWithIdentifier:identifier]; cell.selectionStyle = UITableViewCellSelectionStyleNone; if (!cell){ cell = [[boxReceiveFileRecordCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:identifier]; [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; [cell setBackgroundColor:[UIColor clearColor]]; [cell setAccessoryType:(UITableViewCellAccessoryNone)]; } if(section < _curDataArr.count){ NSMutableArray *curArr = _curDataArr[section]; if(row < curArr.count){ ShareFileDataModel *model = curArr[row]; cell.curShareFileDataModel = model; cell.isEditType = _isEditType; if(_isEditType){ if([_selectModelArr containsObject:model]){ cell.isSelectType = YES; } else{ cell.isSelectType = NO; } } KWeakSelf cell.didLongPressClick = ^{ [weakSelf didLongPressClickFun]; }; cell.didClckSelectBut = ^(BOOL isSelect) { [weakSelf selectModelOneByOne:model BySelect:isSelect]; }; cell.didTapPressClick = ^{ [weakSelf didClickReSaveByOne:model withRefreshType:YES]; }; } } return cell; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ return 70; } - (UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { NSInteger curType = 0;// 0 上传中 1 失败 2 完成 if(section == 2){ curType = 2; } else if(section == 1){ if(_boxSaveingArr.count == 0){ curType = 2; } else if(_boxSavefailArr.count == 0){ curType = 2; } else{ curType = 1; } } else{ if(_boxSaveingArr.count > 0){ curType = 0; } else if(_boxSavefailArr.count > 0){ curType = 1; } else{ curType = 2; } } [self RefresHeadUIFun]; if(curType == 2){ return _doneHeadView; } else if(curType == 1){ return _failHeadView; } else{ return _boxSaveingHeadView; } } - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 40; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ [tableView deselectRowAtIndexPath:indexPath animated:YES]; } #pragma mark 空数据 - (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView { NSString *imageName = @"common_no_data_pic"; return [UIImage imageNamed:imageName]; } - (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView { NSString *leftText = NSLocalizedString(@"common_no_data_tip",nil); NSString *rightText = NSLocalizedString(@"share_save_notData_Tips",nil); NSString *totalStr = [[NSString alloc] initWithFormat:@"%@\n\n%@",leftText,rightText]; NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:totalStr]; NSRange leftRange = NSMakeRange([totalStr rangeOfString:leftText].location, [totalStr rangeOfString:leftText].length); UIColor *leftColor =[UIColor hwColor:@"#666666" alpha:1.0]; [attrStr addAttribute:NSForegroundColorAttributeName value:leftColor range:leftRange]; [attrStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:16.0] range:leftRange]; NSRange redRange = NSMakeRange([totalStr rangeOfString:rightText].location, [totalStr rangeOfString:rightText].length); UIColor *noteColor =[UIColor hwColor:@"#959799" alpha:1.0]; [attrStr addAttribute:NSForegroundColorAttributeName value:noteColor range:redRange]; [attrStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:12.0] range:redRange]; // 创建一个NSMutableParagraphStyle对象 // NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; // paragraphStyle.lineSpacing = 10; // 行间距设置为10 // [attrStr addAttribute:NSParagraphStyleAttributeName // value:paragraphStyle // range:NSMakeRange(0, totalStr.length)]; return attrStr; } //调整图片位置 - (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView { return -150; } -(void)reloadDataFun{ mainBlock(^{ [self RefresHeadUIFun]; [self reloadData]; }); } #pragma mark 初始化段头 - (void)initTableHeaderInSectionFun { KWeakSelf if(!_boxSaveingHeadView){ _boxSaveingHeadView = [[uploadFileRecordTableViewHeadView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_W, 40)]; //headView.backgroundColor = [UIColor greenColor]; NSString *leftStr = NSLocalizedString(@"box_receive_Record_receiveing",nil); //NSString *rightStr = NSLocalizedString(@"File_upload_Record_all_suspend",nil); //NSString *rightSelectStr = NSLocalizedString(@"File_upload_Record_all_open",nil); NSString *titleStr = [[NSString alloc] initWithFormat:@"%@ (%ld)",leftStr,_boxSaveingArr.count]; _boxSaveingHeadView.titleLabel.text = titleStr; // [_boxSaveingHeadView.rightButton setTitle:rightStr forState:UIControlStateNormal]; // [_boxSaveingHeadView.rightButton setTitle:rightSelectStr forState:UIControlStateSelected]; _boxSaveingHeadView.rightButton.hidden = YES; _boxSaveingHeadView.didClickButFun = ^{ [weakSelf didClickRightButtonFun:0]; }; } if(!_failHeadView){ _failHeadView = [[uploadFileRecordTableViewHeadView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_W, 40)]; //headView.backgroundColor = [UIColor greenColor]; NSString *leftStr = NSLocalizedString(@"box_receive_Record_fail",nil); NSString *rightStr = NSLocalizedString(@"box_save_fail_reSave_All",nil); NSString *titleStr = [[NSString alloc] initWithFormat:@"%@ (%ld)",leftStr,_boxSavefailArr.count]; _failHeadView.titleLabel.text = titleStr; [_failHeadView.rightButton setTitle:rightStr forState:UIControlStateNormal]; //[_failHeadView.rightButton setTitle:rightStr forState:UIControlStateNormal]; //_failHeadView.rightButton.hidden = YES; _failHeadView.didClickButFun = ^{ [weakSelf didClickRightButtonFun:2]; }; } if(!_doneHeadView){ _doneHeadView = [[uploadFileRecordTableViewHeadView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_W, 40)]; //headView.backgroundColor = [UIColor greenColor]; NSString *leftStr = NSLocalizedString(@"box_receive_Record_suc",nil); //NSString *rightStr = NSLocalizedString(@"File_upload_Record_clear_Record",nil); NSString *titleStr = [[NSString alloc] initWithFormat:@"%@ (%ld)",leftStr,_boxSaveDoneArr.count]; _doneHeadView.titleLabel.text = titleStr; //[_doneHeadView.rightButton setTitle:rightStr forState:UIControlStateNormal]; _doneHeadView.rightButton.hidden = YES; _doneHeadView.didClickButFun = ^{ [weakSelf didClickRightButtonFun:1]; }; } } #pragma mark 点击头部右边按钮 - (void)didClickRightButtonFun:(NSInteger)section { // if(_didClickSectionHeadViewRightButton){ // _didClickSectionHeadViewRightButton(section); // } if(section == 2){ [self didClickAllReSaveFun]; } } #pragma mark 刷新头部数据 -(void)RefresHeadUIFun { if(_boxSaveingHeadView){ NSString *leftStr = NSLocalizedString(@"box_receive_Record_receiveing",nil); NSString *rightStr = NSLocalizedString(@"File_upload_Record_all_suspend",nil); NSString *rightSelectStr = NSLocalizedString(@"File_upload_Record_all_open",nil); NSString *titleStr = [[NSString alloc] initWithFormat:@"%@ (%ld)",leftStr,_boxSaveingArr.count]; _boxSaveingHeadView.titleLabel.text = titleStr; [_boxSaveingHeadView.rightButton setTitle:rightStr forState:UIControlStateNormal]; [_boxSaveingHeadView.rightButton setTitle:rightSelectStr forState:UIControlStateSelected]; if(_boxSaveingArr.count == 0){ _boxSaveingHeadView.hidden = YES; } else{ _boxSaveingHeadView.hidden = NO; } } if(_failHeadView){ NSString *leftStr = NSLocalizedString(@"box_receive_Record_fail",nil); NSString *rightStr = NSLocalizedString(@"box_save_fail_reSave_All",nil); NSString *titleStr = [[NSString alloc] initWithFormat:@"%@ (%ld)",leftStr,_boxSavefailArr.count]; _failHeadView.titleLabel.text = titleStr; [_failHeadView.rightButton setTitle:rightStr forState:UIControlStateNormal]; if(_boxSavefailArr.count == 0){ _failHeadView.hidden = YES; } else{ _failHeadView.hidden = NO; } } if(_doneHeadView){ NSString *leftStr = NSLocalizedString(@"box_receive_Record_suc",nil); NSString *rightStr = NSLocalizedString(@"File_upload_Record_clear_Record",nil); NSString *titleStr = [[NSString alloc] initWithFormat:@"%@ (%ld)",leftStr,_boxSaveDoneArr.count]; _doneHeadView.titleLabel.text = titleStr; [_doneHeadView.rightButton setTitle:rightStr forState:UIControlStateNormal]; if(_boxSaveDoneArr.count == 0){ _doneHeadView.hidden = YES; } else{ _doneHeadView.hidden = NO; } } } #pragma mark 点击全选 - (void)setIsSelectAllType:(BOOL)isSelectAllType { //_selectModelArr = [NSMutableArray arrayWithArray:_curDataArr]; _selectModelArr = [NSMutableArray new]; if(isSelectAllType){ [_selectModelArr addObjectsFromArray:_boxSaveingArr]; [_selectModelArr addObjectsFromArray:_boxSavefailArr]; [_selectModelArr addObjectsFromArray:_boxSaveDoneArr]; } [self reloadDataFun]; } -(void)setIsEditType:(BOOL)isEditType { _isEditType = isEditType; if(_isEditType){ //_bgScrollV.scrollEnabled = NO; } else{ //_bgScrollV.scrollEnabled = YES; [_selectModelArr removeAllObjects]; } [self reloadDataFun]; } #pragma mark cell长按时间 - (void)didLongPressClickFun{ self.isEditType = YES; if(self->_didLongPressClick){ self->_didLongPressClick(); } } #pragma mark 单个点击选中 取消 - (void)selectModelOneByOne:(ShareFileDataModel*)model BySelect:(BOOL)isSelcet { if(isSelcet){ [_selectModelArr addObject:model]; } else{ [_selectModelArr removeObject:model]; } } #pragma mark 单个点击选中后删除 - (void)deleteModelOneByOneFun{ if(!_selectModelArr || _selectModelArr.count==0){ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [SVProgressHUD dismiss]; }); return; } [[boxSaveFileManager shareInstance] deleteBoxSaveFileRecordBy:_selectModelArr]; for (ShareFileDataModel *dataModel in _selectModelArr) { [self handleTotalArrByDelete:dataModel]; } [_selectModelArr removeAllObjects]; [self reloadDataFun]; } - (void)handleTotalArrByDelete:(ShareFileDataModel*)delModel { if(delModel.saveboxStateType == saveBoxStateDone) { NSMutableArray *arr = _boxSaveDoneArr; [self deteleModel:delModel inArr:arr]; } else if(delModel.saveboxStateType == saveBoxStateFail){ NSMutableArray *arr = _boxSavefailArr; [self deteleModel:delModel inArr:arr]; } else{ NSMutableArray *arr = _boxSaveingArr; [self deteleModel:delModel inArr:arr]; } } #pragma mark 处理删除内存数据 - (void)deteleModel:(ShareFileDataModel*)delModel inArr:(NSMutableArray*)delArr{ for (ShareFileDataModel *dataModel in delArr) { if(delModel.bg_id.integerValue == dataModel.bg_id.integerValue){ [delArr removeObject:dataModel]; break;; } } } #pragma mark 单个全部重试 - (void)didClickAllReSaveFun { NSArray *curFailArr = [_boxSavefailArr copy]; BOOL isRefreshType = NO; for (int i=0; i_boxSaveingArr addObject:dataModel]; //更新数据库 [[boxSaveFileManager shareInstance] addBoxSaveRecordFunBy:@[dataModel] complete:^(BOOL isSuccess) { }]; [weakSelf RefreshAllDataFun]; if(self->_didClickReSaveBlock && isRefreshType){ self->_didClickReSaveBlock(dataModel); } }); } @end