// // RQHomeSubPageSortViewModel.m // SDJK // // Created by 张嵘 on 2021/8/5. // #import "RQHomeSubPageSortViewModel.h" @interface RQHomeSubPageSortViewModel () /// homePageCarType @property (nonatomic, readwrite, assign) RQHomePageCarType homePageCarType; /// homePageSubjectType @property (nonatomic, readwrite, assign) RQHomePageSubjectType homePageSubjectType; /// homeSubPageType @property (nonatomic, readwrite, assign) RQHomeSubPageType homeSubPageType; /// groupDicArr @property (nonatomic, readwrite, copy) NSArray *groupDicArr; @end @implementation RQHomeSubPageSortViewModel #pragma mark - Public Method - (instancetype)initWithServices:(id)services params:(NSDictionary *)params{ if (self = [super initWithServices:services params:params]) { self.homePageCarType = [params[RQHomePageCarTypeKey] integerValue]; self.homePageSubjectType = [params[RQHomePageSubjectTypeKey] integerValue]; self.homeSubPageType = [params[RQHomeSubPageTypeKey] integerValue]; } return self; } - (void)initialize { [super initialize]; /// 配置标题 [self rq_configureTitle]; /// 配置数据 [self rq_configureData]; } #pragma mark - PrivateMethod - (void)rq_configureTitle { [[RACSignal combineLatest:@[RACObserve(self, homePageCarType), RACObserve(self, homePageSubjectType), RACObserve(self, homeSubPageType)] reduce:^id(NSNumber *homePageCarType, NSNumber *homePageSubjectType, NSNumber *homeSubPageType){ NSString *homePageCarTypeStr = @""; switch (homePageCarType.integerValue) { case RQHomePageCarType_Car: homePageCarTypeStr = @"轿车(C1/C2/C3)"; break; case RQHomePageCarType_Bus: homePageCarTypeStr = @"客车(A1/A3/B1)"; break; case RQHomePageCarType_Truck: homePageCarTypeStr = @"货车(A2/B2)"; break; case RQHomePageCarType_Motorcycle: homePageCarTypeStr = @"摩托车(D/E/F)"; break; default: break; } NSString *homePageSubjectTypeStr = @""; switch (homePageSubjectType.integerValue) { case RQHomePageSubjectType_SubjectOne: homePageSubjectTypeStr = @"科目一"; break; case RQHomePageSubjectType_SubjectTwo: homePageSubjectTypeStr = @"科目二"; break; case RQHomePageSubjectType_SubjectThree: homePageSubjectTypeStr = @"科目三"; break; case RQHomePageSubjectType_SubjectFour: homePageSubjectTypeStr = @"科目四"; break; default: break; } NSString *homeSubPageTypeStr = (homeSubPageType.integerValue == RQHomeSubPageType_ClassificationExercise)? @"分类练习" : @"精选考题"; return [NSString stringWithFormat:@"%@/%@/%@",homePageCarTypeStr,homePageSubjectTypeStr,homeSubPageTypeStr]; }] subscribeNext:^(NSString *titleStr) { self.title = titleStr; }]; } - (void)rq_configureData { @weakify(self); /// 第零组 RQCommonGroupViewModel *group = [RQCommonGroupViewModel groupViewModel]; group.headerHeight = CGFLOAT_MIN; group.footerHeight = CGFLOAT_MIN; RQCommonGroupViewModel *group0 = [RQCommonGroupViewModel groupViewModel]; group0.headerHeight = 30.f; group0.footerHeight = CGFLOAT_MIN; group0.header = @"温馨提示"; NSArray *columnArr = columnArr = [RQ_QUESTION_DB_MANAGER getColumnWithCarType:self.homePageCarType subject:self.homePageSubjectType pageType:self.homeSubPageType]; if (self.homeSubPageType == RQHomeSubPageType_ClassificationExercise) { group0.itemViewModels = [@[@"1、分类练习,学员可重点学习自己不懂的题目。 \n2、建议学员直接看软件必考题技巧,快速学习。"].rac_sequence.signal map:^id _Nullable(NSString *title) { RQCommonCollecttionItemViewModel *itemViewModel = [[RQCommonCollecttionItemViewModel alloc] init]; itemViewModel.title = title; itemViewModel.itemSize = CGSizeMake(RQ_SCREEN_WIDTH - 32.f, [title heightForFont:RQRegularFont_17 width:(RQ_SCREEN_WIDTH - 32.f)] + 10.f); return itemViewModel; }].toArray; NSMutableArray *groupArr = @[].mutableCopy; [columnArr.rac_sequence.signal subscribeNext:^(NSString *titleStr) { RQHomeSubPageSortItemViewModel *item = [[RQHomeSubPageSortItemViewModel alloc] init]; @weakify(item) item.title = titleStr; item.serialNumberStr = [NSString stringWithFormat:@"%ld",[columnArr indexOfObject:titleStr] + 1]; item.itemSize = CGSizeMake((RQ_SCREEN_WIDTH - 42.f) / 2.f, 70.f); item.operation = ^{ @strongify(item); if ([item.title isEqualToString:@"地方题"]) { RQHomeSubPageLocalTopicListViewModel *homeSubPageLocalTopicListViewModel = [[RQHomeSubPageLocalTopicListViewModel alloc] initWithServices:RQ_APPDELEGATE.services params:@{ RQHomePageCarTypeKey : @(self.homePageCarType), RQHomePageSubjectTypeKey : @(self.homePageSubjectType), RQHomeSubPageTypeKey : @(RQHomeSubPageType_LocalTopics)}]; [RQ_APPDELEGATE.services pushViewModel:homeSubPageLocalTopicListViewModel animated:YES]; } else { RQExerciseViewModel *exerciseViewModel = [[RQExerciseViewModel alloc] initWithServices:RQ_APPDELEGATE.services params:@{ RQHomePageCarTypeKey : @(self.homePageCarType), RQHomePageSubjectTypeKey : @(self.homePageSubjectType), RQHomeSubPageTypeKey : @(self.homeSubPageType), RQViewModelIDKey : titleStr, RQViewCommonValueKey : @(0), }]; [RQ_APPDELEGATE.services pushViewModel:exerciseViewModel animated:YES]; } }; [groupArr addObject:item]; } completed:^{ @strongify(self); group.itemViewModels = groupArr.copy; self.dataSource = @[group,group0]; }]; } else { group0.itemViewModels = [@[@"1、软件题库已同步更新至车管所最新,左边的红色必学题,每套题必须学完。 \n2、模拟考试能连续5次以上达到96分左右,即可参加考试。 \n3、如果模拟考试达不到要求,请把右边的选学题也学习一遍。"].rac_sequence.signal map:^id _Nullable(NSString *title) { RQCommonCollecttionItemViewModel *itemViewModel = [[RQCommonCollecttionItemViewModel alloc] init]; itemViewModel.title = title; itemViewModel.itemSize = CGSizeMake(RQ_SCREEN_WIDTH - 32.f, [title heightForFont:RQRegularFont_17 width:(RQ_SCREEN_WIDTH - 32.f)] + 10.f); return itemViewModel; }].toArray; NSMutableArray *groupArr = @[].mutableCopy; NSMutableArray *itemsArr = @[].mutableCopy; __block NSInteger leftIndex = 0; __block NSInteger rightIndex = 0; NSArray *groupOneArr = [columnArr.rac_sequence.signal filter:^BOOL(NSString *titleStr) { return [titleStr containsString:@"必"] || [titleStr containsString:@"摩托"] || [titleStr containsString:@"新"] || [titleStr containsString:@"地方"] || [titleStr containsString:@"专用"] || [titleStr containsString:@"考"]; }].toArray; NSArray *groupTwoArr = [columnArr.rac_sequence.signal filter:^BOOL(NSString *titleStr) { return [titleStr containsString:@"选"] || [titleStr containsString:@"货运资格证"]; }].toArray; for (int i = 0; i < groupOneArr.count; i ++) { if (i % 2 == 0) { if (groupOneArr.count > i) [groupArr addObject:groupOneArr[i]]; if (groupTwoArr.count > i) [groupArr addObject:groupTwoArr[i]]; } else if (i % 2 == 1) { if (groupOneArr.count > i) [groupArr addObject:groupOneArr[i]]; if (groupTwoArr.count > i) [groupArr addObject:groupTwoArr[i]]; } } [groupArr.rac_sequence.signal subscribeNext:^(NSString *myTitleStr) { RQHomeSubPageSortItemViewModel *item = [[RQHomeSubPageSortItemViewModel alloc] init]; @weakify(item) item.title = myTitleStr; if ([myTitleStr isEqualToString:@"地方题"]) { item.serialNumberStr = @"地"; } else if ([myTitleStr containsString:@"新"]) { item.serialNumberStr = @"新"; } else { if (self.homePageCarType == RQHomePageCarType_Motorcycle) { item.serialNumberStr = [NSString stringWithFormat:@"%@",@([groupArr indexOfObject:myTitleStr] + 1)]; } else { if (([groupArr indexOfObject:myTitleStr] + 1) %2 == 0) { rightIndex++; item.serialNumberStr = [NSString stringWithFormat:@"%@",@(rightIndex)]; } else { leftIndex++; item.serialNumberStr = [NSString stringWithFormat:@"%@",@(leftIndex)]; } } } item.itemSize = CGSizeMake((RQ_SCREEN_WIDTH - 42.f) / 2.f, 70.f); item.operation = ^{ @strongify(item); if ([item.title isEqualToString:@"地方题"]) { RQHomeSubPageLocalTopicListViewModel *homeSubPageLocalTopicListViewModel = [[RQHomeSubPageLocalTopicListViewModel alloc] initWithServices:RQ_APPDELEGATE.services params:@{ RQHomePageCarTypeKey : @(self.homePageCarType), RQHomePageSubjectTypeKey : @(self.homePageSubjectType), RQHomeSubPageTypeKey : @(RQHomeSubPageType_LocalTopics)}]; [RQ_APPDELEGATE.services pushViewModel:homeSubPageLocalTopicListViewModel animated:YES]; } else { RQExerciseViewModel *exerciseViewModel = [[RQExerciseViewModel alloc] initWithServices:RQ_APPDELEGATE.services params:@{ RQHomePageCarTypeKey : @(self.homePageCarType), RQHomePageSubjectTypeKey : @(self.homePageSubjectType), RQHomeSubPageTypeKey : @(self.homeSubPageType), RQViewModelIDKey : myTitleStr, RQViewCommonValueKey : @(0), }]; [RQ_APPDELEGATE.services pushViewModel:exerciseViewModel animated:YES]; } }; [itemsArr addObject:item]; } completed:^{ @strongify(self); group.itemViewModels = itemsArr.copy; self.dataSource = @[group,group0]; }]; } } #pragma mark - LazyLoad @end