RQVipViewModel.m 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. //
  2. // RQVipViewModel.m
  3. // jiaPei
  4. //
  5. // Created by 张嵘 on 2022/3/1.
  6. // Copyright © 2022 JCZ. All rights reserved.
  7. //
  8. #import "RQVipViewModel.h"
  9. @interface RQVipViewModel ()
  10. @property (nonatomic, readwrite, copy) NSArray *typeModels;
  11. @property (nonatomic, readwrite, assign) RQVIPPageType vipPageType;
  12. @property (nonatomic, readwrite, assign) RQHomePageSubjectType homePageSubjectType;
  13. @end
  14. @implementation RQVipViewModel
  15. #pragma mark - Public Method
  16. - (instancetype)initWithServices:(id<RQViewModelServices>)services params:(NSDictionary *)params {
  17. if (self = [super initWithServices:services params:params]) {
  18. self.vipPageType = [params[RQViewModelIDKey] integerValue];
  19. self.typeModels = params[RQViewModelUtilKey];
  20. self.homePageSubjectType = [params[RQViewCommonValueKey] integerValue];
  21. }
  22. return self;
  23. }
  24. - (void)initialize {
  25. [super initialize];
  26. self.title = @"会员中心";
  27. [[RQ_HTTP_Service getVideoVipWithUserId:RQ_USER_MANAGER.currentUser._id] subscribeNext:^(RQVideoVipModel *videoVipModel) {
  28. // videoVipModel.subject1 = @"1";
  29. // videoVipModel.subject2 = @"";
  30. // videoVipModel.subject3 = @"";
  31. // videoVipModel.subject4 = @"1";
  32. RQ_VIP_Module.videoVipModel = videoVipModel;
  33. }];
  34. [RQ_VIP_Module isVipWithSubject:0 complete:^(BOOL isVip) {
  35. }];
  36. [RQ_VIP_Module isActiveWithCcomplete:^(RQActivationModel * _Nullable activationModel, BOOL isSuccess) {}];
  37. ///配置数据
  38. [self rq_configureData];
  39. }
  40. #pragma mark - PrivateMethod
  41. - (void)rq_configureData {
  42. @weakify(self)
  43. /// 数据源
  44. RAC(self,dataSource) = [RACSignal
  45. combineLatest:@[RACObserve(self, typeModels),RACObserve(RQ_VIP_Module, videoVipModel),RACObserve(RQ_VIP_Module, chooseTypeModel)]
  46. reduce:^(NSArray *typeModels, RQVideoVipModel *videoVipModel, RQTypeModel *chooseTypeModel) {
  47. @strongify(self)
  48. /// 第零组 头部视图
  49. RQVipHeaderImageViewNewGroupViewModel *group0 = [[RQVipHeaderImageViewNewGroupViewModel alloc] initWithRQVideoVipModel:videoVipModel chooseTypeModel:chooseTypeModel];
  50. group0.itemViewModels = [self singlePriceItemWithTypeModels:typeModels chooseTypeModel:chooseTypeModel];
  51. RQVipAlertHeaderGroupViewModel *group = [[RQVipAlertHeaderGroupViewModel alloc] init];
  52. group.headerHeight = 57;
  53. group.itemViewModels = [self singlePriceItemWithTypeModels:typeModels chooseTypeModel:chooseTypeModel];
  54. /// 第一组 价格套餐
  55. RQCommonGroupViewModel *group1 = [RQCommonGroupViewModel groupViewModel];
  56. group1.footerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : 10;
  57. group1.itemViewModels = ([chooseTypeModel.dictLabel isEqualToString:@"理论实操计时"])? @[] : @[[[RQVipAuthorityNewItemViewModel alloc] initWithChooseTypeModel:chooseTypeModel]];
  58. /// 第四组 科一怎么学
  59. RQCommonGroupViewModel *group4 = [RQCommonGroupViewModel groupViewModel];
  60. RQVipContentNewItemViewModel *vipContentNew1ItemViewModel = [[RQVipContentNewItemViewModel alloc] initWithRQTypeModel:chooseTypeModel];
  61. vipContentNew1ItemViewModel.isSubjectFour = NO;
  62. group4.itemViewModels = (self.vipPageType == RQVIPPageType_Alert)? @[] : (([chooseTypeModel.dictLabel containsString:@"全"] ||[chooseTypeModel.dictLabel containsString:@"一"])? @[vipContentNew1ItemViewModel] : @[]);
  63. group4.headerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group4.itemViewModels.count > 0? 10 : 0);
  64. group4.footerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group4.itemViewModels.count > 0? 10 : 0);
  65. /// 第五组 科二怎么学
  66. RQCommonGroupViewModel *group5 = [RQCommonGroupViewModel groupViewModel];
  67. RQVipContentNew23ItemViewModel *vipContentNew2ItemViewModel = [[RQVipContentNew23ItemViewModel alloc] initWithRQTypeModel:chooseTypeModel];
  68. vipContentNew2ItemViewModel.isSubjectThree = NO;
  69. group5.itemViewModels = (self.vipPageType == RQVIPPageType_Alert)? @[] : (([chooseTypeModel.dictLabel containsString:@"全"] ||[chooseTypeModel.dictLabel containsString:@"二"])? @[vipContentNew2ItemViewModel] : @[]);
  70. group5.headerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group5.itemViewModels.count > 0? 10 : 0);
  71. group5.footerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group5.itemViewModels.count > 0? 10 : 0);
  72. /// 第六组 科三怎么学
  73. RQCommonGroupViewModel *group6 = [RQCommonGroupViewModel groupViewModel];
  74. RQVipContentNew23ItemViewModel *vipContentNew3ItemViewModel = [[RQVipContentNew23ItemViewModel alloc] initWithRQTypeModel:chooseTypeModel];
  75. vipContentNew3ItemViewModel.isSubjectThree = YES;
  76. group6.itemViewModels = (self.vipPageType == RQVIPPageType_Alert)? @[] : (([chooseTypeModel.dictLabel containsString:@"全"] || [chooseTypeModel.dictLabel containsString:@"三"])? @[vipContentNew3ItemViewModel] : @[]);
  77. group6.headerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group6.itemViewModels.count > 0? 10 : 0);
  78. group6.footerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group6.itemViewModels.count > 0? 10 : 0);
  79. /// 第七组 科四怎么学
  80. RQCommonGroupViewModel *group7 = [RQCommonGroupViewModel groupViewModel];
  81. RQVipContentNewItemViewModel *vipContentNew4ItemViewModel = [[RQVipContentNewItemViewModel alloc] initWithRQTypeModel:chooseTypeModel];
  82. vipContentNew4ItemViewModel.isSubjectFour = YES;
  83. group7.itemViewModels = (self.vipPageType == RQVIPPageType_Alert)? @[] : (([chooseTypeModel.dictLabel containsString:@"全"] || [chooseTypeModel.dictLabel containsString:@"四"])? @[vipContentNew4ItemViewModel] : @[]);
  84. group7.headerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group7.itemViewModels.count > 0? 10 : 0);
  85. group7.footerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group7.itemViewModels.count > 0? 10 : 0);
  86. if ([chooseTypeModel.dictLabel containsString:@"一"] && [chooseTypeModel.dictLabel containsString:@"+"] && [chooseTypeModel.dictLabel containsString:@"四"]) {
  87. group7.itemViewModels = @[];
  88. group7.headerHeight = 0.f;
  89. group7.footerHeight = 0.f;
  90. }
  91. /// 第六组 常见问题
  92. RQCommonGroupViewModel *group8 = [RQCommonGroupViewModel groupViewModel];
  93. RQVipProblemNewItemViewModel *vipProblemNewItemViewModel = [[RQVipProblemNewItemViewModel alloc] init];
  94. group8.itemViewModels = (self.vipPageType == RQVIPPageType_Alert)? @[] : @[vipProblemNewItemViewModel];
  95. group8.headerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group8.itemViewModels.count > 0? 10 : 0);
  96. group8.footerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group8.itemViewModels.count > 0? 10 : 0);
  97. return @[(self.vipPageType == RQVIPPageType_Alert)? group : group0, group1, group4, group5, group6, group7, group8];
  98. }];
  99. }
  100. // 请求数据
  101. - (RACSignal *)requestRemoteDataSignalWithPage:(NSUInteger)page {
  102. [MBProgressHUD rq_showProgressHUD:@"获取会员套餐..."];
  103. NSArray * (^typeModelsBlock)(NSArray *) = ^(NSArray *products) {
  104. [MBProgressHUD rq_hideHUD];
  105. if (page == 1) {
  106. /// 下拉刷新
  107. } else {
  108. /// 上拉加载
  109. products = @[(self.typeModels ?: @[]).rac_sequence, products.rac_sequence].rac_sequence.flatten.array;
  110. }
  111. return products;
  112. };
  113. return [[[self.services.client getTypeWithDictType:(!RQObjectIsNil(RQ_VIP_Module.activationModel) && RQ_VIP_Module.activationModel.isShare && !(RQ_VIP_Module.activationModel.isActive == 1))? RQ_USER_MANAGER.currentUser.city : @"vip_package"] map:typeModelsBlock] doError:^(NSError * _Nonnull error) {
  114. [MBProgressHUD rq_hideHUD];
  115. [MBProgressHUD rq_showErrorTips:error];
  116. }];
  117. }
  118. /// 辅助方法
  119. - (NSArray *)singlePriceItemWithTypeModels:(NSArray *)typeModels chooseTypeModel:(RQTypeModel *)chooseTypeModel{
  120. if (RQObjectIsNil(typeModels) || typeModels.count == 0) return nil;
  121. NSArray *canUseTypeModels = [typeModels.rac_sequence filter:^BOOL(RQTypeModel *typeModel) {
  122. if (!RQObjectIsNil(RQ_VIP_Module.activationModel) && RQ_VIP_Module.activationModel.isShare) {
  123. if (RQ_VIP_Module.activationModel.isActive == 1) {
  124. return ![typeModel.status isEqualToString:@"1"] && ((typeModel.homePageSubjectType == self.homePageSubjectType || typeModel.homePageSubjectType == RQHomePageSubjectType_SubjectAll) && (![typeModel.dictLabel containsString:@"含计时"]));
  125. } else {
  126. return ![typeModel.status isEqualToString:@"1"] && (typeModel.homePageSubjectType == self.homePageSubjectType || typeModel.homePageSubjectType == RQHomePageSubjectType_SubjectAll) && ([typeModel.dictLabel containsString:@"计时"]);
  127. }
  128. } else {
  129. return ![typeModel.status isEqualToString:@"1"] && (typeModel.homePageSubjectType == self.homePageSubjectType || typeModel.homePageSubjectType == RQHomePageSubjectType_SubjectAll) && (![typeModel.dictLabel containsString:@"计时"]);
  130. }
  131. }].array;
  132. NSArray *itemViewModels = [canUseTypeModels.rac_sequence map:^id _Nullable(RQTypeModel *typeModel) {
  133. if ([typeModel.dictLabel isEqualToString:@"理论实操计时"]) {
  134. RQVipTrainPriceItemViewModel *vipTrainPriceItemViewModel = [[RQVipTrainPriceItemViewModel alloc] initWithRQTypeModel:typeModel chooseTypeModel:chooseTypeModel typeModels:canUseTypeModels];
  135. return vipTrainPriceItemViewModel;
  136. } else {
  137. RQVipSinglePriceItemViewModel *vipSinglePriceItemViewModel = [[RQVipSinglePriceItemViewModel alloc] initWithRQTypeModel:typeModel chooseTypeModel:chooseTypeModel typeModels:canUseTypeModels];
  138. return vipSinglePriceItemViewModel;
  139. }
  140. }].array;
  141. return itemViewModels ?: @[] ;
  142. }
  143. - (NSArray *)allPriceItemWithTypeModels:(NSArray *)typeModels chooseTypeModel:(RQTypeModel *)chooseTypeModel {
  144. if (RQObjectIsNil(typeModels) || typeModels.count == 0) return nil;
  145. NSArray *itemViewModels = [[typeModels.rac_sequence filter:^BOOL(RQTypeModel *typeModel) {
  146. return [typeModel.remark isEqualToString:@"1"] && ![typeModel.status isEqualToString:@"1"];
  147. }].array.rac_sequence map:^id _Nullable(RQTypeModel *typeModel) {
  148. RQVipAllPriceItemViewModel *vipAllPriceItemViewModel = [[RQVipAllPriceItemViewModel alloc] initWithRQTypeModel:typeModel chooseTypeModel:chooseTypeModel];
  149. return vipAllPriceItemViewModel;
  150. }].array;
  151. return itemViewModels ?: @[] ;
  152. }
  153. @end