RQHomePageSubjectOneOrFourViewModel.m 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. //
  2. // RQHomePageSubjectOneOrFourViewModel.m
  3. // SDJK
  4. //
  5. // Created by 张嵘 on 2021/7/29.
  6. //
  7. #import "RQHomePageSubjectOneOrFourViewModel.h"
  8. @interface RQHomePageSubjectOneOrFourViewModel ()
  9. @property (nonatomic, readwrite, assign) RQHomePageCarType homePageCarType;
  10. @property (nonatomic, readwrite, assign) RQHomePageSubjectType homePageSubjectType;
  11. @property (nonatomic, readwrite, strong) RQTreeListModel *treeListModel;
  12. @property (nonatomic, readwrite, copy) NSString *subjectStr;
  13. /// 交管12123服务
  14. @property (nonatomic, readwrite, strong) RQCommonGroupViewModel *group12123;
  15. @property (nonatomic, readwrite, strong) RQCommonGroupViewModel *groupFreeAndNew;
  16. @end
  17. @implementation RQHomePageSubjectOneOrFourViewModel
  18. #pragma mark - Public Method
  19. - (instancetype)initWithServices:(id<RQViewModelServices>)services params:(NSDictionary *)params {
  20. if (self = [super initWithServices:services params:params]) {
  21. self.homePageCarType = [params[RQHomePageCarTypeKey] integerValue];
  22. self.homePageSubjectType = [params[RQHomePageSubjectTypeKey] integerValue];
  23. }
  24. return self;
  25. }
  26. - (void)initialize {
  27. [super initialize];
  28. self.title = @"";
  29. ///配置数据
  30. [self rq_configureData];
  31. }
  32. #pragma mark - PrivateMethod
  33. - (void)rq_configureData {
  34. @weakify(self)
  35. __block NSMutableArray *mutableArrr = @[].mutableCopy;
  36. /// 第零组
  37. RQCommonGroupViewModel *group0 = [RQCommonGroupViewModel groupViewModel];
  38. [group0 setCustomStyleWithRQCommonGroupModel:^(RQCommonGroupModel *groupModel) {
  39. groupModel.footerHeight = 10.f;
  40. groupModel.footerBgColor = RQ_LIST_BACKGROUNDCOLOR;
  41. }];
  42. RQHomeSubPageItemViewModel *homeSubPageItemViewModel = [[RQHomeSubPageItemViewModel alloc] initWithRQHomePageCarType:self.homePageCarType homePageSubjectType:self.homePageSubjectType];
  43. homeSubPageItemViewModel.itemSize = CGSizeMake(RQ_SCREEN_WIDTH, RQ_FIT_HORIZONTAL(379.f));
  44. homeSubPageItemViewModel.operation = ^{
  45. };
  46. RAC(self, dataSource) = [RACSignal
  47. combineLatest:@[RACObserve(RQ_COMMON_MANAGER, treeListArr),RACObserve(RQ_COMMON_MANAGER, dspListArr)]
  48. reduce:^(NSArray *treeListModelArr, NSArray *dspListModelArr) {
  49. @strongify(self)
  50. /// 第一组
  51. RQHomeSubPageVideoHeaderGroupViewModel *group1 = [RQHomeSubPageVideoHeaderGroupViewModel groupViewModel];
  52. [group1 setCustomStyleWithRQCommonGroupModel:^(RQCommonGroupModel *groupModel) {
  53. groupModel.header = (self.homePageSubjectType == RQHomePageSubjectType_SubjectThree || self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo)? @"基础操作视频" : ((self.homePageSubjectType == RQHomePageSubjectType_SubjectFour)? @"科目四视频教程" : @"科目一视频教程");
  54. groupModel.headerHeight = 58.f;
  55. groupModel.footerHeight = 10.f;
  56. groupModel.footerBgColor = RQ_LIST_BACKGROUNDCOLOR;
  57. }];
  58. /// 第二组
  59. RQHomeSubPageVideoHeaderGroupViewModel *group2 = [RQHomeSubPageVideoHeaderGroupViewModel groupViewModel];
  60. @weakify(dspListModelArr)
  61. [group2 setCustomStyleWithRQCommonGroupModel:^(RQCommonGroupModel *groupModel) {
  62. @strongify(dspListModelArr)
  63. groupModel.header = @"短视频";
  64. groupModel.headerHeight = 58.f;
  65. groupModel.footerHeight = 10.f;
  66. groupModel.footerBgColor = RQ_LIST_BACKGROUNDCOLOR;
  67. if (dspListModelArr.count >= 6) {
  68. groupModel.footerHeight = 58.f;
  69. groupModel.footer = @"查看更多 >";
  70. groupModel.footerBgColor = UIColor.whiteColor;
  71. }
  72. }];
  73. if (dspListModelArr.count >= 6) {
  74. dspListModelArr = [dspListModelArr subarrayWithRange:NSMakeRange(0, 6)];
  75. }
  76. NSArray *viewModels = [dspListModelArr.rac_sequence map:^(VideosItem *videosItem) {
  77. RQHomeSubPageVideoItemViewModel *homeSubPageVideoItemViewModel = [[RQHomeSubPageVideoItemViewModel alloc] initWithVideosItem:videosItem];
  78. homeSubPageVideoItemViewModel.operation = ^{
  79. @strongify(self)
  80. RQDspVideoDetailViewModel *viewModel = [[RQDspVideoDetailViewModel alloc] initWithServices:self.services params:@{
  81. RQViewCommonValueKey: [NSIndexPath indexPathForRow:[dspListModelArr indexOfObject:videosItem] inSection:0],
  82. }];
  83. [self.services pushViewModel:viewModel animated:YES];
  84. };
  85. return homeSubPageVideoItemViewModel;
  86. }].array;
  87. group2.itemViewModels = (self.homePageSubjectType == RQHomePageSubjectType_SubjectThree || self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo)? viewModels
  88. : @[];
  89. if (RQArrayIsEmpty(treeListModelArr)) {
  90. group0.itemViewModels = (self.homePageSubjectType == RQHomePageSubjectType_SubjectThree || self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo)? @[] : @[homeSubPageItemViewModel];
  91. if (RQArrayIsEmpty(dspListModelArr)) {
  92. return (self.homePageSubjectType == RQHomePageSubjectType_SubjectThree || self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo)? @[group0, self.group12123] : @[group0, self.groupFreeAndNew, self.group12123];
  93. } else {
  94. return (self.homePageSubjectType == RQHomePageSubjectType_SubjectThree || self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo)? @[group2, self.group12123] : @[group0, self.groupFreeAndNew, self.group12123];
  95. }
  96. } else {
  97. __block NSInteger scrollItemSection;
  98. NSArray *arr = [[treeListModelArr.rac_sequence filter:^BOOL(RQTreeListModel *treeListModel) {
  99. return [treeListModel.typeName isEqualToString:self.subjectStr];
  100. }].array.rac_sequence map:^id _Nullable(RQTreeListModel *treeListModel) {
  101. self.treeListModel = treeListModel;
  102. group1.treeListModel = treeListModel;
  103. group1.homePageSubjectType = self.homePageSubjectType;
  104. return [treeListModel.children.rac_sequence map:^id _Nullable(ChildrenItem *childrenItem) {
  105. NSInteger section = [treeListModel.children indexOfObject:childrenItem];
  106. if (childrenItem.videos.count > 0) {
  107. return [self dataSourceWithItems:childrenItem.videos treeListModel:treeListModel section:section];
  108. } else {
  109. if ([childrenItem.typeName isEqualToString:@"基础操作"]) {
  110. return [childrenItem.children.rac_sequence map:^id _Nullable(ChildrenItem *childrenItemA) {
  111. group1.mySection = section;
  112. return [self dataSourceWithItems:childrenItemA.videos treeListModel:treeListModel section:section];
  113. }].array;
  114. } else {
  115. scrollItemSection = section;
  116. NSArray *arrr = [childrenItem.children.rac_sequence map:^id _Nullable(ChildrenItem *childrenItemA) {
  117. if (childrenItemA.videos.count > 0) {
  118. return childrenItemA;
  119. } else {
  120. return nil;
  121. }
  122. }].array;
  123. [mutableArrr addObjectsFromArray:arrr];
  124. return nil;
  125. }
  126. }
  127. }].array;
  128. }].array;
  129. [self dataDealWithDataArr:arr completion:^(NSArray *arr) {
  130. group1.itemViewModels = arr;
  131. }];
  132. RQHomeSubPageVideoScrollItemViewModel *homeSubPageVideoScrollItemViewModel = [[RQHomeSubPageVideoScrollItemViewModel alloc] initWithChildrenItemArr:mutableArrr.copy treeListModel:self.treeListModel homePageSubjectType:self.homePageSubjectType section:scrollItemSection];
  133. group0.itemViewModels = @[(self.homePageSubjectType == RQHomePageSubjectType_SubjectThree || self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo)? homeSubPageVideoScrollItemViewModel : homeSubPageItemViewModel];
  134. return group1.itemViewModels.count > 0? (RQArrayIsEmpty(group2.itemViewModels)? @[group0, self.groupFreeAndNew, group1, self.group12123] : @[group0, group1, group2, self.group12123]) : (RQArrayIsEmpty(group2.itemViewModels)? @[group0, self.groupFreeAndNew, self.group12123] : @[group0, group2, self.group12123]);
  135. }
  136. }];
  137. }
  138. - (void)dataDealWithDataArr:(NSArray *)dataArr completion:(void (^)(NSArray *arr))completion {
  139. if (dataArr.count > 0) {
  140. for (id value in dataArr) {
  141. if ([value isKindOfClass:[NSArray class]]) {
  142. [self dataDealWithDataArr:value completion:completion];
  143. break;
  144. } else {
  145. completion(dataArr);
  146. break;
  147. }
  148. }
  149. } else {
  150. completion(dataArr);
  151. }
  152. }
  153. - (NSArray *)dataSourceWithItems:(NSArray *)items treeListModel:(RQTreeListModel *)treeListModel section:(NSInteger)section {
  154. @weakify(self)
  155. NSArray *viewModels = [items.rac_sequence map:^(VideosItem *videosItem) {
  156. RQHomeSubPageVideoItemViewModel *homeSubPageVideoItemViewModel = [[RQHomeSubPageVideoItemViewModel alloc] initWithVideosItem:videosItem];
  157. homeSubPageVideoItemViewModel.operation = ^{
  158. @strongify(self)
  159. RQVideoDetailViewModel *videoDetailViewModel = [[RQVideoDetailViewModel alloc] initWithServices:RQ_APPDELEGATE.services params:@{
  160. RQViewModelUtilKey : treeListModel,
  161. RQVideoItemIndexKey : @(0),
  162. RQVideoItemIndexPathKey : [NSIndexPath indexPathForRow:[items indexOfObject:videosItem] inSection:section],
  163. RQHomePageSubjectTypeKey : @(self.homePageSubjectType),
  164. }];
  165. if ([RQ_Video_Module isCanWatchWithVideosItem:videosItem]) {
  166. [RQ_APPDELEGATE.services pushViewModel:videoDetailViewModel animated:YES];
  167. }
  168. };
  169. return homeSubPageVideoItemViewModel;
  170. }].array;
  171. return viewModels ?: @[];
  172. }
  173. - (NSString *)subjectStr {
  174. return (self.homePageSubjectType == RQHomePageSubjectType_SubjectFour)? @"科目四" : ((self.homePageSubjectType == RQHomePageSubjectType_SubjectThree)? @"科目三" : (self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo)? @"科目二" : @"科目一");
  175. }
  176. - (RQCommonGroupViewModel *)group12123 {
  177. if (!_group12123) {
  178. _group12123 = [RQCommonGroupViewModel groupViewModel];
  179. RQHomePageJiaoGuan12123ItemViewModel *homePageJiaoGuan12123ItemViewModel = [[RQHomePageJiaoGuan12123ItemViewModel alloc] init];
  180. _group12123.itemViewModels = @[homePageJiaoGuan12123ItemViewModel];
  181. }
  182. return _group12123;
  183. }
  184. //RQFreeTryItemViewModel
  185. - (RQCommonGroupViewModel *)groupFreeAndNew {
  186. if (!_groupFreeAndNew) {
  187. _groupFreeAndNew = [RQCommonGroupViewModel groupViewModel];
  188. RQFreeTryItemViewModel *freeTryItemViewModel = [[RQFreeTryItemViewModel alloc] initWithTitle:@"免费试用" icon:@"免费试用背景"];
  189. RQFreeTryItemViewModel *newTryItemViewModel = [[RQFreeTryItemViewModel alloc] initWithTitle:@"新规秘卷" icon:@"新规秘卷背景"];
  190. _groupFreeAndNew.itemViewModels = @[freeTryItemViewModel,newTryItemViewModel];
  191. [_groupFreeAndNew setCustomStyleWithRQCommonGroupModel:^(RQCommonGroupModel *groupModel) {
  192. groupModel.footerHeight = 10.f;
  193. groupModel.footerBgColor = RQ_LIST_BACKGROUNDCOLOR;
  194. }];
  195. }
  196. return _groupFreeAndNew;
  197. }
  198. @end