RQHomeSubPageSortViewModel.m 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. //
  2. // RQHomeSubPageSortViewModel.m
  3. // SDJK
  4. //
  5. // Created by 张嵘 on 2021/8/5.
  6. //
  7. #import "RQHomeSubPageSortViewModel.h"
  8. @interface RQHomeSubPageSortViewModel ()
  9. /// homePageCarType
  10. @property (nonatomic, readwrite, assign) RQHomePageCarType homePageCarType;
  11. /// homePageSubjectType
  12. @property (nonatomic, readwrite, assign) RQHomePageSubjectType homePageSubjectType;
  13. /// homeSubPageType
  14. @property (nonatomic, readwrite, assign) RQHomeSubPageType homeSubPageType;
  15. /// groupDicArr
  16. @property (nonatomic, readwrite, copy) NSArray *groupDicArr;
  17. @end
  18. @implementation RQHomeSubPageSortViewModel
  19. #pragma mark - Public Method
  20. - (instancetype)initWithServices:(id<RQViewModelServices>)services params:(NSDictionary *)params{
  21. if (self = [super initWithServices:services params:params]) {
  22. self.homePageCarType = [params[RQHomePageCarTypeKey] integerValue];
  23. self.homePageSubjectType = [params[RQHomePageSubjectTypeKey] integerValue];
  24. self.homeSubPageType = [params[RQHomeSubPageTypeKey] integerValue];
  25. }
  26. return self;
  27. }
  28. - (void)initialize {
  29. [super initialize];
  30. /// 配置标题
  31. [self rq_configureTitle];
  32. /// 配置数据
  33. [self rq_configureData];
  34. }
  35. #pragma mark - PrivateMethod
  36. - (void)rq_configureTitle {
  37. [[RACSignal combineLatest:@[RACObserve(self, homePageCarType), RACObserve(self, homePageSubjectType), RACObserve(self, homeSubPageType)]
  38. reduce:^id(NSNumber *homePageCarType, NSNumber *homePageSubjectType, NSNumber *homeSubPageType){
  39. NSString *homePageCarTypeStr = @"";
  40. switch (homePageCarType.integerValue) {
  41. case RQHomePageCarType_Car:
  42. homePageCarTypeStr = @"轿车(C1/C2/C3)";
  43. break;
  44. case RQHomePageCarType_Bus:
  45. homePageCarTypeStr = @"客车(A1/A3/B1)";
  46. break;
  47. case RQHomePageCarType_Truck:
  48. homePageCarTypeStr = @"货车(A2/B2)";
  49. break;
  50. case RQHomePageCarType_Motorcycle:
  51. homePageCarTypeStr = @"摩托车(D/E/F)";
  52. break;
  53. default:
  54. break;
  55. }
  56. NSString *homePageSubjectTypeStr = @"";
  57. switch (homePageSubjectType.integerValue) {
  58. case RQHomePageSubjectType_SubjectOne:
  59. homePageSubjectTypeStr = @"科目一";
  60. break;
  61. case RQHomePageSubjectType_SubjectTwo:
  62. homePageSubjectTypeStr = @"科目二";
  63. break;
  64. case RQHomePageSubjectType_SubjectThree:
  65. homePageSubjectTypeStr = @"科目三";
  66. break;
  67. case RQHomePageSubjectType_SubjectFour:
  68. homePageSubjectTypeStr = @"科目四";
  69. break;
  70. default:
  71. break;
  72. }
  73. NSString *homeSubPageTypeStr = (homeSubPageType.integerValue == RQHomeSubPageType_ClassificationExercise)? @"分类练习" : @"精选考题";
  74. return [NSString stringWithFormat:@"%@/%@/%@",homePageCarTypeStr,homePageSubjectTypeStr,homeSubPageTypeStr];
  75. }] subscribeNext:^(NSString *titleStr) {
  76. self.title = titleStr;
  77. }];
  78. }
  79. - (void)rq_configureData {
  80. @weakify(self);
  81. /// 第零组
  82. RQCommonGroupViewModel *group = [RQCommonGroupViewModel groupViewModel];
  83. group.headerHeight = CGFLOAT_MIN;
  84. group.footerHeight = CGFLOAT_MIN;
  85. RQCommonGroupViewModel *group0 = [RQCommonGroupViewModel groupViewModel];
  86. group0.headerHeight = 30.f;
  87. group0.footerHeight = CGFLOAT_MIN;
  88. group0.header = @"温馨提示";
  89. NSArray *columnArr = columnArr = [RQ_QUESTION_DB_MANAGER getColumnWithCarType:self.homePageCarType subject:self.homePageSubjectType pageType:self.homeSubPageType];
  90. if (self.homeSubPageType == RQHomeSubPageType_ClassificationExercise) {
  91. group0.itemViewModels = [@[@"1、分类练习,学员可重点学习自己不懂的题目。 \n2、建议学员直接看软件必考题技巧,快速学习。"].rac_sequence.signal map:^id _Nullable(NSString *title) {
  92. RQCommonCollecttionItemViewModel *itemViewModel = [[RQCommonCollecttionItemViewModel alloc] init];
  93. itemViewModel.title = title;
  94. itemViewModel.itemSize = CGSizeMake(RQ_SCREEN_WIDTH - 32.f, [title heightForFont:RQRegularFont_17 width:(RQ_SCREEN_WIDTH - 32.f)] + 10.f);
  95. return itemViewModel;
  96. }].toArray;
  97. NSMutableArray *groupArr = @[].mutableCopy;
  98. [columnArr.rac_sequence.signal subscribeNext:^(NSString *titleStr) {
  99. RQHomeSubPageSortItemViewModel *item = [[RQHomeSubPageSortItemViewModel alloc] init];
  100. @weakify(item)
  101. item.title = titleStr;
  102. item.serialNumberStr = [NSString stringWithFormat:@"%ld",[columnArr indexOfObject:titleStr] + 1];
  103. item.itemSize = CGSizeMake((RQ_SCREEN_WIDTH - 42.f) / 2.f, 70.f);
  104. item.operation = ^{
  105. @strongify(item);
  106. if ([item.title isEqualToString:@"地方题"]) {
  107. RQHomeSubPageLocalTopicListViewModel *homeSubPageLocalTopicListViewModel = [[RQHomeSubPageLocalTopicListViewModel alloc] initWithServices:RQ_APPDELEGATE.services params:@{
  108. RQHomePageCarTypeKey : @(self.homePageCarType),
  109. RQHomePageSubjectTypeKey : @(self.homePageSubjectType),
  110. RQHomeSubPageTypeKey : @(RQHomeSubPageType_LocalTopics)}];
  111. [RQ_APPDELEGATE.services pushViewModel:homeSubPageLocalTopicListViewModel animated:YES];
  112. } else {
  113. RQExerciseViewModel *exerciseViewModel = [[RQExerciseViewModel alloc] initWithServices:RQ_APPDELEGATE.services params:@{
  114. RQHomePageCarTypeKey : @(self.homePageCarType),
  115. RQHomePageSubjectTypeKey : @(self.homePageSubjectType),
  116. RQHomeSubPageTypeKey : @(self.homeSubPageType),
  117. RQViewModelIDKey : titleStr,
  118. RQViewCommonValueKey : @(0),
  119. }];
  120. [RQ_APPDELEGATE.services pushViewModel:exerciseViewModel animated:YES];
  121. }
  122. };
  123. [groupArr addObject:item];
  124. } completed:^{
  125. @strongify(self);
  126. group.itemViewModels = groupArr.copy;
  127. self.dataSource = @[group,group0];
  128. }];
  129. } else {
  130. group0.itemViewModels = [@[@"1、软件题库已同步更新至车管所最新,左边的红色必学题,每套题必须学完。 \n2、模拟考试能连续5次以上达到96分左右,即可参加考试。 \n3、如果模拟考试达不到要求,请把右边的选学题也学习一遍。"].rac_sequence.signal map:^id _Nullable(NSString *title) {
  131. RQCommonCollecttionItemViewModel *itemViewModel = [[RQCommonCollecttionItemViewModel alloc] init];
  132. itemViewModel.title = title;
  133. itemViewModel.itemSize = CGSizeMake(RQ_SCREEN_WIDTH - 32.f, [title heightForFont:RQRegularFont_17 width:(RQ_SCREEN_WIDTH - 32.f)] + 10.f);
  134. return itemViewModel;
  135. }].toArray;
  136. NSMutableArray *groupArr = @[].mutableCopy;
  137. NSMutableArray *itemsArr = @[].mutableCopy;
  138. __block NSInteger leftIndex = 0;
  139. __block NSInteger rightIndex = 0;
  140. NSArray *groupOneArr = [columnArr.rac_sequence.signal filter:^BOOL(NSString *titleStr) {
  141. return [titleStr containsString:@"必"] || [titleStr containsString:@"摩托"] || [titleStr containsString:@"新"] || [titleStr containsString:@"地方"] || [titleStr containsString:@"专用"]
  142. || [titleStr containsString:@"考"];
  143. }].toArray;
  144. NSArray *groupTwoArr = [columnArr.rac_sequence.signal filter:^BOOL(NSString *titleStr) {
  145. return [titleStr containsString:@"选"] || [titleStr containsString:@"货运资格证"];
  146. }].toArray;
  147. for (int i = 0; i < groupOneArr.count; i ++) {
  148. if (i % 2 == 0) {
  149. if (groupOneArr.count > i) [groupArr addObject:groupOneArr[i]];
  150. if (groupTwoArr.count > i) [groupArr addObject:groupTwoArr[i]];
  151. } else if (i % 2 == 1) {
  152. if (groupOneArr.count > i) [groupArr addObject:groupOneArr[i]];
  153. if (groupTwoArr.count > i) [groupArr addObject:groupTwoArr[i]];
  154. }
  155. }
  156. [groupArr.rac_sequence.signal subscribeNext:^(NSString *myTitleStr) {
  157. RQHomeSubPageSortItemViewModel *item = [[RQHomeSubPageSortItemViewModel alloc] init];
  158. @weakify(item)
  159. item.title = myTitleStr;
  160. if ([myTitleStr isEqualToString:@"地方题"]) {
  161. item.serialNumberStr = @"地";
  162. } else if ([myTitleStr containsString:@"新"]) {
  163. item.serialNumberStr = @"新";
  164. } else {
  165. if (self.homePageCarType == RQHomePageCarType_Motorcycle) {
  166. item.serialNumberStr = [NSString stringWithFormat:@"%@",@([groupArr indexOfObject:myTitleStr] + 1)];
  167. } else {
  168. if (([groupArr indexOfObject:myTitleStr] + 1) %2 == 0) {
  169. rightIndex++;
  170. item.serialNumberStr = [NSString stringWithFormat:@"%@",@(rightIndex)];
  171. } else {
  172. leftIndex++;
  173. item.serialNumberStr = [NSString stringWithFormat:@"%@",@(leftIndex)];
  174. }
  175. }
  176. }
  177. item.itemSize = CGSizeMake((RQ_SCREEN_WIDTH - 42.f) / 2.f, 70.f);
  178. item.operation = ^{
  179. @strongify(item);
  180. if ([item.title isEqualToString:@"地方题"]) {
  181. RQHomeSubPageLocalTopicListViewModel *homeSubPageLocalTopicListViewModel = [[RQHomeSubPageLocalTopicListViewModel alloc] initWithServices:RQ_APPDELEGATE.services params:@{
  182. RQHomePageCarTypeKey : @(self.homePageCarType),
  183. RQHomePageSubjectTypeKey : @(self.homePageSubjectType),
  184. RQHomeSubPageTypeKey : @(RQHomeSubPageType_LocalTopics)}];
  185. [RQ_APPDELEGATE.services pushViewModel:homeSubPageLocalTopicListViewModel animated:YES];
  186. } else {
  187. RQExerciseViewModel *exerciseViewModel = [[RQExerciseViewModel alloc] initWithServices:RQ_APPDELEGATE.services params:@{
  188. RQHomePageCarTypeKey : @(self.homePageCarType),
  189. RQHomePageSubjectTypeKey : @(self.homePageSubjectType),
  190. RQHomeSubPageTypeKey : @(self.homeSubPageType),
  191. RQViewModelIDKey : myTitleStr,
  192. RQViewCommonValueKey : @(0),
  193. }];
  194. [RQ_APPDELEGATE.services pushViewModel:exerciseViewModel animated:YES];
  195. }
  196. };
  197. [itemsArr addObject:item];
  198. } completed:^{
  199. @strongify(self);
  200. group.itemViewModels = itemsArr.copy;
  201. self.dataSource = @[group,group0];
  202. }];
  203. }
  204. }
  205. #pragma mark - LazyLoad
  206. @end