uploadFileRecordBodyView.m 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503
  1. //
  2. // uploadFileRecordBodyView.m
  3. // 隐私保护
  4. //
  5. // Created by xd h on 2023/11/15.
  6. //
  7. #import "uploadFileRecordBodyView.h"
  8. #import "uploadFileRecordCell.h"
  9. #import "UIScrollView+EmptyDataSet.h"
  10. #import "uploadFileDataModel.h"
  11. #import "uploadFileRecordTableViewHeadView.h"
  12. #import "ComontAlretViewController.h"
  13. #import "uploadFileManager.h"
  14. @interface uploadFileRecordBodyView ()<UITableViewDelegate,UITableViewDataSource,UIScrollViewDelegate,DZNEmptyDataSetSource, DZNEmptyDataSetDelegate>
  15. @property (nonatomic,strong) uploadFileRecordTableViewHeadView *leftHeadView;
  16. @property (nonatomic,strong) uploadFileRecordTableViewHeadView *midHeadView;
  17. @property (nonatomic,strong) uploadFileRecordTableViewHeadView *rightHeadView;
  18. @property (nonatomic,strong) NSMutableArray *selectModelArr;
  19. @end
  20. @implementation uploadFileRecordBodyView
  21. - (id)initWithFrame:(CGRect)frame{
  22. self = [super initWithFrame:frame];
  23. _selectIndex = 1;
  24. [self drawAnyView];
  25. _selectModelArr = [NSMutableArray new];
  26. return self;
  27. }
  28. - (void)drawAnyView{
  29. [self setBackgroundColor:[UIColor whiteColor]];
  30. NSInteger maxNum = 3;
  31. _bgScrollV = [[UIScrollView alloc] init];
  32. _bgScrollV.showsHorizontalScrollIndicator = NO;
  33. _bgScrollV.pagingEnabled = YES;
  34. _bgScrollV.delegate = self;
  35. [self addSubview:_bgScrollV];
  36. [_bgScrollV mas_makeConstraints:^(MASConstraintMaker *make) {
  37. make.left.mas_equalTo(0);
  38. make.right.mas_equalTo(0);
  39. make.top.mas_equalTo(0);
  40. make.bottom.mas_equalTo(0);
  41. }];
  42. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.15 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  43. mainBlock(^{
  44. CGRect frame = self->_bgScrollV.frame;
  45. self->_bgScrollV.contentSize = CGSizeMake(maxNum* SCREEN_W, frame.size.height);
  46. for (NSInteger i= 0; i<maxNum; i++) {
  47. UITableView *curTableview = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
  48. curTableview.delegate = self;
  49. curTableview.dataSource = self;
  50. curTableview.showsVerticalScrollIndicator = NO;
  51. curTableview.showsHorizontalScrollIndicator = NO;
  52. // _tableView.contentInset = UIEdgeInsetsMake(-H_STATE_BAR, 0, 0, 0);
  53. [curTableview setSeparatorStyle:(UITableViewCellSeparatorStyleNone)];
  54. [curTableview setSeparatorColor:[UIColor clearColor]];
  55. [curTableview setBackgroundColor:[UIColor clearColor]];
  56. [curTableview setTableFooterView:[UIView new]];
  57. [curTableview setBounces:YES];
  58. if (@available(iOS 15.0, *)) {
  59. curTableview.sectionHeaderTopPadding = 0;
  60. }
  61. [self->_bgScrollV addSubview:curTableview];
  62. curTableview.tag = 10 +i;
  63. //空数据引入第三方开源处理
  64. curTableview.emptyDataSetSource = self;
  65. curTableview.emptyDataSetDelegate = self;
  66. [curTableview mas_makeConstraints:^(MASConstraintMaker *make) {
  67. make.left.mas_equalTo(SCREEN_W * i);
  68. make.width.mas_equalTo(SCREEN_W);
  69. make.top.mas_equalTo(0);
  70. make.height.mas_equalTo(frame.size.height);
  71. //make.bottom.mas_equalTo(0);
  72. }];
  73. uploadFileRecordTableViewHeadView *headView = [[uploadFileRecordTableViewHeadView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_W, 40)];
  74. curTableview.tableHeaderView = headView;
  75. KWeakSelf
  76. headView.didClickButFun = ^{
  77. if(headView == self->_leftHeadView)
  78. {
  79. [weakSelf didClickAllSuspendInLoadingFun];
  80. }
  81. else if(headView == self->_midHeadView)
  82. {
  83. [weakSelf didClickClearRecordInDoneFun];
  84. }
  85. };
  86. if(i==0){
  87. self->_leftHeadView = headView;
  88. }
  89. else if(i==1){
  90. self->_midHeadView = headView;
  91. }
  92. else if(i==2){
  93. self->_rightHeadView = headView;
  94. }
  95. }
  96. });
  97. });
  98. }
  99. #pragma mark - 列表委托
  100. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
  101. return 1;
  102. }
  103. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  104. NSInteger tag = tableView.tag - 10;
  105. if(_allDataArr && tag <_allDataArr.count){
  106. NSMutableArray *curArr = _allDataArr[tag];
  107. return curArr.count;
  108. }
  109. return 0;
  110. }
  111. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
  112. NSInteger row = indexPath.row;
  113. static NSString *identifier = @"uploadFileRecordCell";
  114. uploadFileRecordCell * cell = [tableView dequeueReusableCellWithIdentifier:identifier];
  115. cell.selectionStyle = UITableViewCellSelectionStyleNone;
  116. if (!cell){
  117. cell = [[uploadFileRecordCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:identifier];
  118. [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
  119. [cell setBackgroundColor:[UIColor clearColor]];
  120. [cell setAccessoryType:(UITableViewCellAccessoryNone)];
  121. }
  122. NSInteger tag = tableView.tag - 10;
  123. if(_allDataArr && tag <_allDataArr.count){
  124. NSMutableArray *curArr = _allDataArr[tag];
  125. if(row < curArr.count){
  126. uploadFileDataModel *model = curArr[row];
  127. cell.curUploadFileDataModel = model;
  128. cell.isEditType = _isEditType;
  129. if(_isEditType){
  130. if([_selectModelArr containsObject:model]){
  131. cell.isSelectType = YES;
  132. }
  133. else{
  134. cell.isSelectType = NO;
  135. }
  136. }
  137. KWeakSelf
  138. cell.didLongPressClick = ^{
  139. weakSelf.isEditType = YES;
  140. if(self->_didLongPressClick){
  141. self->_didLongPressClick();
  142. }
  143. };
  144. cell.didClckSelectBut = ^(BOOL isSelect) {
  145. [weakSelf selectModelOneByOne:model BySelect:isSelect];
  146. };
  147. cell.didTapPressClick = ^{
  148. if(model.curUploadStateType == uploadStateUploading){
  149. [weakSelf handleUploadingStateTapFunBy:YES with:model];
  150. }
  151. else if(model.curUploadStateType == uploadStateSuspend){
  152. [weakSelf handleUploadingStateTapFunBy:NO with:model];
  153. }
  154. };
  155. }
  156. }
  157. return cell;
  158. }
  159. - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
  160. return 70;
  161. }
  162. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
  163. [tableView deselectRowAtIndexPath:indexPath animated:YES];
  164. }
  165. //- (void)scrollViewDidScroll:(UIScrollView *)scrollView
  166. - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
  167. {
  168. if(_bgScrollV != scrollView) return;
  169. CGFloat x = scrollView.contentOffset.x;
  170. NSInteger index = (x+1)/SCREEN_W;
  171. index += 1;//因为头部是从1开始的
  172. //HLog(@"index:%ld",index);
  173. if(_didScrollFun){
  174. _didScrollFun(index);
  175. }
  176. }
  177. #pragma mark 空数据
  178. - (UIImage *)imageForEmptyDataSet:(UIScrollView *)scrollView {
  179. return [UIImage imageNamed:@"uploadFile_noData"];
  180. }
  181. - (NSAttributedString *)titleForEmptyDataSet:(UIScrollView *)scrollView {
  182. NSString *text = NSLocalizedString(@"File_upload_Record_no_data",nil);
  183. NSDictionary *attributes = @{NSFontAttributeName: [UIFont systemFontOfSize:16.0f],
  184. NSForegroundColorAttributeName: HW999999Color};
  185. return [[NSAttributedString alloc] initWithString:text attributes:attributes];
  186. }
  187. //调整图片位置
  188. - (CGFloat)verticalOffsetForEmptyDataSet:(UIScrollView *)scrollView {
  189. return -150;
  190. }
  191. - (void)setSelectIndex:(NSInteger)selectIndex
  192. {
  193. _selectIndex = selectIndex;
  194. CGPoint poit = _bgScrollV.contentOffset;
  195. poit.x = SCREEN_W * (selectIndex -1);
  196. [UIView animateWithDuration:0.2 animations:^{
  197. self->_bgScrollV.contentOffset = poit;
  198. }];
  199. }
  200. - (void)setAllDataArr:(NSMutableArray *)allDataArr
  201. {
  202. _allDataArr = allDataArr;
  203. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.15 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  204. if(self->_allDataArr.count >=3){
  205. [self RefresHeadUIFunBy:self->_allDataArr[0] withMidArr:self->_allDataArr[1] withRightArr:self->_allDataArr[2]];
  206. }
  207. });
  208. mainBlock(^{
  209. //刷新数据
  210. [self reloadAllDataFun];
  211. });
  212. }
  213. #pragma mark 熟悉全部数据
  214. - (void)reloadAllDataFun
  215. {
  216. // NSArray *subViews = [self->_bgScrollV subviews];
  217. // for (UITableView *tableView in subViews) {
  218. // if([tableView isKindOfClass:[UITableView class]]){
  219. // [tableView reloadData];
  220. // }
  221. // }
  222. if(_allDataArr.count == 3){
  223. [self RefreshDataWithUploadingArr:_allDataArr[0] withDoneArr:_allDataArr[1] withfailArr:_allDataArr[2]];
  224. }
  225. }
  226. - (void)RefreshDataWithUploadingArr:(NSMutableArray* _Nullable)uploadingArr withDoneArr:(NSMutableArray* _Nullable)doneArr withfailArr:(NSMutableArray* _Nullable)failArr
  227. {
  228. if(uploadingArr){
  229. UITableView *curTabview = [self->_bgScrollV viewWithTag:10];
  230. if([curTabview isKindOfClass:[UITableView class]]){
  231. [_allDataArr replaceObjectAtIndex:0 withObject:uploadingArr];
  232. [curTabview reloadData];
  233. }
  234. }
  235. if(doneArr){
  236. UITableView *curTabview = [self->_bgScrollV viewWithTag:11];
  237. if([curTabview isKindOfClass:[UITableView class]]){
  238. [_allDataArr replaceObjectAtIndex:1 withObject:doneArr];
  239. [curTabview reloadData];
  240. }
  241. }
  242. if(failArr){
  243. UITableView *curTabview = [self->_bgScrollV viewWithTag:12];
  244. if([curTabview isKindOfClass:[UITableView class]]){
  245. [_allDataArr replaceObjectAtIndex:2 withObject:failArr];
  246. [curTabview reloadData];
  247. }
  248. }
  249. [self RefresHeadUIFunBy:uploadingArr withMidArr:doneArr withRightArr:failArr];
  250. }
  251. #pragma mark 熟悉头部数据
  252. -(void)RefresHeadUIFunBy:(NSMutableArray*)letfArr withMidArr:(NSMutableArray*)midArr withRightArr:(NSMutableArray*)rightArr
  253. {
  254. if(letfArr){
  255. NSString *leftStr = NSLocalizedString(@"File_upload_Record_uploading",nil);
  256. NSString *rightStr = NSLocalizedString(@"File_upload_Record_all_suspend",nil);
  257. NSString *rightSelectStr = NSLocalizedString(@"File_upload_Record_all_open",nil);
  258. NSString *titleStr = [[NSString alloc] initWithFormat:@"%@ (%ld)",leftStr,letfArr.count];
  259. _leftHeadView.titleLabel.text = titleStr;
  260. [_leftHeadView.rightButton setTitle:rightStr forState:UIControlStateNormal];
  261. [_leftHeadView.rightButton setTitle:rightSelectStr forState:UIControlStateSelected];
  262. if(letfArr.count == 0){
  263. _leftHeadView.hidden = YES;
  264. }
  265. else{
  266. _leftHeadView.hidden = NO;
  267. }
  268. }
  269. if(midArr){
  270. NSString *leftStr = NSLocalizedString(@"File_upload_Record_did_upload",nil);
  271. NSString *rightStr = NSLocalizedString(@"File_upload_Record_clear_Record",nil);
  272. NSString *titleStr = [[NSString alloc] initWithFormat:@"%@ (%ld)",leftStr,midArr.count];
  273. _midHeadView.titleLabel.text = titleStr;
  274. [_midHeadView.rightButton setTitle:rightStr forState:UIControlStateNormal];
  275. if(midArr.count == 0){
  276. _midHeadView.hidden = YES;
  277. }
  278. else{
  279. _midHeadView.hidden = NO;
  280. }
  281. }
  282. if(rightArr){
  283. NSString *leftStr = NSLocalizedString(@"File_upload_Record_did_upload",nil);
  284. NSString *rightStr = NSLocalizedString(@"File_upload_Record_clear_Record",nil);
  285. NSString *titleStr = [[NSString alloc] initWithFormat:@"%@ (%ld)",leftStr,midArr.count];
  286. _rightHeadView.titleLabel.text = titleStr;
  287. [_rightHeadView.rightButton setTitle:rightStr forState:UIControlStateNormal];
  288. if(rightArr.count == 0){
  289. _rightHeadView.hidden = YES;
  290. }
  291. else{
  292. _rightHeadView.hidden = NO;
  293. }
  294. }
  295. }
  296. #pragma mark 点击上传中的全部暂停
  297. - (void)didClickAllSuspendInLoadingFun
  298. {
  299. _leftHeadView.rightButton.selected = !_leftHeadView.rightButton.selected;
  300. if(_leftHeadView.rightButton.selected){
  301. [[uploadFileManager shareInstance] suspendUploadFileFun:YES];
  302. }
  303. else{
  304. NSMutableArray *leftArr = _allDataArr[0];
  305. [[uploadFileManager shareInstance] reUploadFileFunBy:leftArr];
  306. }
  307. }
  308. #pragma mark 点击上传成功的清空记录
  309. - (void)didClickClearRecordInDoneFun
  310. {
  311. /*弹窗提示二次确认*/
  312. KWeakSelf
  313. ComontAlretViewController *nextVC = [[ComontAlretViewController alloc] initWithTiTle:NSLocalizedString(@"File_upload_Record_clear_Tip_title",nil)
  314. msg:NSLocalizedString(@"File_upload_Record_clear_Tip_msg",nil)
  315. imageStr:nil
  316. cancelTitle:NSLocalizedString(@"other_cancel",nil)
  317. okTitle:NSLocalizedString(@"other_comment_ok",nil) isOkBtnHighlight:YES
  318. didClickOk:^{
  319. [weakSelf ClearAllRecordInDoneFun];
  320. } didClickCancel:^{
  321. }];
  322. nextVC.modalPresentationStyle = UIModalPresentationCustom;
  323. [_curVC presentViewController:nextVC animated:YES completion:^{
  324. nextVC.view.superview.backgroundColor = [UIColor clearColor];
  325. }];
  326. }
  327. - (void)ClearAllRecordInDoneFun
  328. {
  329. [[uploadFileManager shareInstance] deleteUploadFileRecordBy:_allDataArr[1] complete:^(BOOL isSuccess) {
  330. HLog(@"isSuccess:%d",isSuccess);
  331. if(isSuccess){
  332. [self->_allDataArr replaceObjectAtIndex:1 withObject:[NSMutableArray new]];
  333. [self reloadAllDataFun];
  334. }
  335. }];
  336. }
  337. #pragma mark 点击上传失败的清空记录
  338. -(void)setIsEditType:(BOOL)isEditType
  339. {
  340. _isEditType = isEditType;
  341. if(_isEditType){
  342. _bgScrollV.scrollEnabled = NO;
  343. }
  344. else{
  345. _bgScrollV.scrollEnabled = YES;
  346. [_selectModelArr removeAllObjects];
  347. }
  348. [self reloadAllDataFun];
  349. }
  350. #pragma mark 点击全选
  351. - (void)setIsSelectAllType:(BOOL)isSelectAllType
  352. {
  353. if(isSelectAllType && _allDataArr && _allDataArr.count > (_selectIndex-1)){
  354. _selectModelArr = [NSMutableArray arrayWithArray:_allDataArr[_selectIndex-1]];
  355. [self reloadAllDataFun];
  356. }
  357. }
  358. #pragma mark 单个点击选中 取消
  359. - (void)selectModelOneByOne:(uploadFileDataModel*)model BySelect:(BOOL)isSelcet
  360. {
  361. if(isSelcet){
  362. [_selectModelArr addObject:model];
  363. }
  364. else{
  365. [_selectModelArr removeObject:model];
  366. }
  367. }
  368. #pragma mark 单个点击选中后删除
  369. - (void)deleteModelOneByOneFun{
  370. if(!_selectModelArr || _selectModelArr.count==0){
  371. return;
  372. }
  373. [[uploadFileManager shareInstance] deleteUploadFileRecordBy:_selectModelArr complete:^(BOOL isSuccess) {
  374. HLog(@"isSuccess:%d",isSuccess);
  375. if(isSuccess){
  376. NSMutableArray *curArr = self->_allDataArr[self->_selectIndex -1];
  377. [curArr removeObjectsInArray:self->_selectModelArr];
  378. [self reloadAllDataFun];
  379. self->_selectModelArr = [NSMutableArray new];
  380. }
  381. }];
  382. }
  383. #pragma mark 处理上传中的 状态点击事件
  384. - (void)handleUploadingStateTapFunBy:(BOOL)isSuspendType with:(uploadFileDataModel*)model
  385. {
  386. if (isSuspendType) {
  387. [[uploadFileManager shareInstance] suspendUploadFileFun:NO];
  388. }
  389. else{
  390. NSMutableArray*arr = [NSMutableArray new];
  391. [arr addObject:model];
  392. [[uploadFileManager shareInstance] reUploadFileFunBy:arr];
  393. }
  394. }
  395. @end