RQHomePageOneOrFourBigItemViewModel.m 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. //
  2. // RQHomePageOneOrFourBigItemViewModel.m
  3. // jiaPei
  4. //
  5. // Created by 张嵘 on 2022/6/10.
  6. // Copyright © 2022 JCZ. All rights reserved.
  7. //
  8. #import "RQHomePageOneOrFourBigItemViewModel.h"
  9. @interface RQHomePageOneOrFourBigItemViewModel ()
  10. @property (nonatomic, readwrite, assign) RQHomePageCarType homePageCarType;
  11. @property (nonatomic, readwrite, assign) RQHomePageSubjectType homePageSubjectType;
  12. @property (nonatomic, readwrite, copy) NSAttributedString *leftStr;
  13. @property (nonatomic, readwrite, copy) NSAttributedString *rightStr;
  14. @end
  15. @implementation RQHomePageOneOrFourBigItemViewModel
  16. /// init
  17. - (instancetype)initWithRQHomePageCarType:(RQHomePageCarType)homePageCarType homePageSubjectType:(RQHomePageSubjectType)homePageSubjectType homePageOneOrFourItemModel:(RQHomePageOneOrFourItemModel *)homePageOneOrFourItemModel {
  18. if (self = [super init]) {
  19. @weakify(self)
  20. self.homePageCarType = homePageCarType;
  21. self.homePageSubjectType = homePageSubjectType;
  22. CGFloat width = (RQ_SCREEN_WIDTH - (16 * 2) - 11) / 2.f;
  23. CGFloat height = width * (68.f / 167.f);
  24. self.itemSize = CGSizeMake(width, height);
  25. self.title = homePageOneOrFourItemModel.titleStr;
  26. self.icon = homePageOneOrFourItemModel.iconImgStr;
  27. if ([self.title isEqualToString:@"顺序练习"]) {
  28. RAC(self, rightStr) = [[RACSignal combineLatest:@[RACObserve(RQ_YDTQuestion_Module, subjectOneArr), RACObserve(RQ_YDTQuestion_Module, subjectFourArr)] reduce:^id (NSArray *subjectOneArr, NSArray *subjectFourArr) {
  29. @strongify(self)
  30. NSInteger allCount = [RQ_YDTQuestion_Module getQuestionNumWithWithSubject:self.homePageSubjectType exerciseType:RQExerciseType_Sequential];
  31. return [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"/%ld",allCount]];
  32. }] takeUntil:self.rac_willDeallocSignal];
  33. RAC(self, leftStr) = [[RACSignal combineLatest:@[RACObserve(RQ_YDTQuestion_Module, carType), [RACObserve(RQ_YDTQuestion_Module, subject) filter:^BOOL(id _Nullable value) {
  34. return (RQ_YDTQuestion_Module.subject == RQHomePageSubjectType_SubjectFour || RQ_YDTQuestion_Module.subject == RQHomePageSubjectType_SubjectOne);
  35. }], RACObserve(RQ_YDT_USER_Question_Module, doNum)] reduce:^id (NSNumber *carType, NSNumber *subject, NSNumber *doNum) {
  36. return [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%ld",[RQ_YDT_USER_Question_Module getDoQuestionNum]]];
  37. }] takeUntil:self.rac_willDeallocSignal];
  38. self.operation = ^{
  39. @strongify(self)
  40. // NSMutableArray *oneArr = [[NSMutableArray alloc] init];
  41. // NSMutableArray *fourArr = [NSMutableArray array];
  42. // [oneArr addObjectsFromArray:RQ_YDTQuestion_Module.subjectOneArr];
  43. // [fourArr addObjectsFromArray:RQ_YDTQuestion_Module.subjectFourArr];
  44. NSArray *arr = [[RQ_YDTQuestion_Module getQuestionWithSubject:RQ_YDTQuestion_Module.subject exerciseType:RQExerciseType_Sequential ].rac_sequence.signal map:^id _Nullable(RQYDTQuestionModel *ydtQuestionModel) {
  45. return [RQExerciseModel exerciseModelWithRQYDTQuestionModel:ydtQuestionModel];
  46. }].toArray;
  47. // NSArray *arr = (self.homePageSubjectType == RQHomePageSubjectType_SubjectFour)? fourArr.copy : oneArr.copy;
  48. // arr = [arr.rac_sequence.signal map:^id _Nullable(RQYDTQuestionModel *ydtQuestionModel) {
  49. // return [RQExerciseModel exerciseModelWithRQYDTQuestionModel:ydtQuestionModel];
  50. // }].toArray;
  51. RQExerciseViewModel *exerciseViewModel = [[RQExerciseViewModel alloc] initWithServices:RQ_APPDELEGATE.services params:@{
  52. RQHomePageCarTypeKey : @(self.homePageCarType),
  53. RQHomePageSubjectTypeKey : @(self.homePageSubjectType),
  54. RQHomeSubPageTypeKey : @(RQHomeSubPageType_SequentialPractice),
  55. RQViewModelIDKey : self.title,
  56. RQExerciseTypeKey : @(RQExerciseType_Sequential),
  57. RQViewModelUtilKey : arr,
  58. }];
  59. [RQ_APPDELEGATE.services pushViewModel:exerciseViewModel animated:YES];
  60. };
  61. } else if (([self.title isEqualToString:@"模拟考试"])) {
  62. NSString *score = [NSString stringWithFormat:@"%@",@"0"];
  63. NSString *fen = [NSString stringWithFormat:@"分"];
  64. NSString *myScore = [NSString stringWithFormat:@"%@%@",score,fen];
  65. NSMutableAttributedString *myScoreAttrStr = [[NSMutableAttributedString alloc] initWithString:myScore];
  66. [myScoreAttrStr addAttribute:NSFontAttributeName value:RQSemiboldFont(34) range:[myScore rangeOfString:score]];
  67. [myScoreAttrStr addAttribute:NSFontAttributeName value:RQRegularFont_15 range:[myScore rangeOfString:fen]];
  68. self.leftStr = myScoreAttrStr;
  69. self.rightStr = [[NSMutableAttributedString alloc] initWithString:[self.leftStr.string isEqualToString:@"0分"]? @"最高分" : @"最高分"];
  70. RAC(self, leftStr) = [[RACSignal combineLatest:@[RACObserve(RQ_COMMON_MANAGER, examResultOneListArr), RACObserve(RQ_COMMON_MANAGER, examResultFourListArr)] reduce:^id (NSArray *examResultOneListArr, NSArray *examResultFourListArr) {
  71. @strongify(self)
  72. NSArray *arr;
  73. if (self.homePageSubjectType == RQHomePageSubjectType_SubjectOne) {
  74. arr = examResultOneListArr;
  75. }
  76. if (self.homePageSubjectType == RQHomePageSubjectType_SubjectFour) {
  77. arr = examResultFourListArr;
  78. }
  79. float max = [[[arr.rac_sequence.signal map:^id _Nullable(RQExamResultModel *examResultModel) {
  80. return examResultModel.score;
  81. }].toArray valueForKeyPath:@"@max.floatValue"] floatValue];
  82. NSString *score = [NSString qmui_stringWithCGFloat:max decimal:0];
  83. NSString *fen = [NSString stringWithFormat:@"分"];
  84. NSString *myScore = [NSString stringWithFormat:@"%@%@",score,fen];
  85. NSMutableAttributedString *myScoreAttrStr = [[NSMutableAttributedString alloc] initWithString:myScore];
  86. [myScoreAttrStr addAttribute:NSFontAttributeName value:RQSemiboldFont(34) range:[myScore rangeOfString:score]];
  87. [myScoreAttrStr addAttribute:NSFontAttributeName value:RQRegularFont_15 range:[myScore rangeOfString:fen]];
  88. self.rightStr = [[NSMutableAttributedString alloc] initWithString:[myScoreAttrStr.string isEqualToString:@"0分"]? @"最高分" : @"最高分"];
  89. return myScoreAttrStr;
  90. }] takeUntil:self.rac_willDeallocSignal];
  91. self.operation = ^{
  92. if (RQ_USER_MANAGER.isShouldLogin) {
  93. RQSimulateExamViewModel *viewModel = [[RQSimulateExamViewModel alloc] initWithServices:RQ_APPDELEGATE.services params:@{}];
  94. [RQ_APPDELEGATE.services pushViewModel:viewModel animated:YES];
  95. }
  96. };
  97. }
  98. }
  99. return self;
  100. }
  101. @end