NYLIVipCoachViewModel.m 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. //
  2. // NYLIVipCoachViewModel.m
  3. // jiaPei
  4. //
  5. // Created by Ning.ge on 2025/1/23.
  6. // Copyright © 2025 JCZ. All rights reserved.
  7. //
  8. #import "NYLIVipCoachViewModel.h"
  9. @interface NYLIVipCoachViewModel ()
  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 NYLIVipCoachViewModel
  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. RQ_VIP_Module.videoVipModel = videoVipModel;
  29. }];
  30. [RQ_VIP_Module isVipWithSubject:0 complete:^(BOOL isVip) {
  31. }];
  32. [RQ_VIP_Module isActiveWithCcomplete:^(RQActivationModel * _Nullable activationModel, BOOL isSuccess) {}];
  33. ///配置数据
  34. [self rq_configureData];
  35. }
  36. #pragma mark - PrivateMethod
  37. - (void)rq_configureData {
  38. @weakify(self)
  39. if(self.homePageSubjectType == RQHomePageSubjectType_SubjectFour_LI){
  40. if(RQ_VIP_Module.chooseTypeModel == nil && self.typeModels.count>0){
  41. RQ_VIP_Module.chooseTypeModel = self.typeModels[1];
  42. }
  43. }
  44. /// 数据源
  45. RAC(self,dataSource) = [RACSignal
  46. combineLatest:@[RACObserve(self, typeModels),RACObserve(RQ_VIP_Module, videoVipModel),RACObserve(RQ_VIP_Module, chooseTypeModel)]
  47. reduce:^(NSArray *typeModels, RQVideoVipModel *videoVipModel, RQTypeModel *chooseTypeModel) {
  48. @strongify(self)
  49. /// 第零组 头部视图
  50. NYLIVipHeaderImageViewGroupModel *group0 = [[NYLIVipHeaderImageViewGroupModel alloc] initWithRQVideoVipModel:videoVipModel chooseTypeModel:chooseTypeModel];
  51. group0.itemViewModels = [self singlePriceItemWithTypeModels:typeModels chooseTypeModel:chooseTypeModel];
  52. /// 第一组 价格 套餐
  53. RQCommonGroupViewModel *group1 = [RQCommonGroupViewModel groupViewModel];
  54. group1.footerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : 10;
  55. group1.itemViewModels = ([chooseTypeModel.dictLabel isEqualToString:@"理论实操计时"])? @[] : @[[[NYLIVipAuthorityNewItemViewModel alloc] initWithChooseTypeModel:chooseTypeModel]];
  56. /// 第四组 科一怎么学
  57. RQCommonGroupViewModel *group4 = [RQCommonGroupViewModel groupViewModel];
  58. NYLIVipContentNewItemViewModel *vipContentNew1ItemViewModel = [[NYLIVipContentNewItemViewModel alloc] initWithRQTypeModel:chooseTypeModel type:0];
  59. vipContentNew1ItemViewModel.isSubjectFour = NO;
  60. group4.itemViewModels = @[vipContentNew1ItemViewModel];
  61. group4.headerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group4.itemViewModels.count > 0? 10 : 0);
  62. group4.footerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group4.itemViewModels.count > 0? 10 : 0);
  63. /// 第五组 科二怎么学
  64. RQCommonGroupViewModel *group5 = [RQCommonGroupViewModel groupViewModel];
  65. NYLIVipContentNewItemViewModel *vipContentNew1ItemViewModel01 = [[NYLIVipContentNewItemViewModel alloc] initWithRQTypeModel:chooseTypeModel type:1];
  66. vipContentNew1ItemViewModel01.isSubjectFour = NO;
  67. group5.itemViewModels = @[vipContentNew1ItemViewModel01] ;
  68. group5.headerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group5.itemViewModels.count > 0? 10 : 0);
  69. group5.footerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group5.itemViewModels.count > 0? 10 : 0);
  70. /// 第六组 科三怎么学
  71. RQCommonGroupViewModel *group6 = [RQCommonGroupViewModel groupViewModel];
  72. NYLIVipContentNewItemViewModel *vipContentNew1ItemViewModel02 = [[NYLIVipContentNewItemViewModel alloc] initWithRQTypeModel:chooseTypeModel type:2];
  73. vipContentNew1ItemViewModel02.isSubjectFour = NO;
  74. group6.itemViewModels = @[vipContentNew1ItemViewModel02] ;
  75. group6.headerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group6.itemViewModels.count > 0? 10 : 0);
  76. group6.footerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group6.itemViewModels.count > 0? 10 : 0);
  77. RQCommonGroupViewModel *group7 = [RQCommonGroupViewModel groupViewModel];
  78. NYLIVipContentNewItemViewModel *vipContentNew1ItemViewModel03 = [[NYLIVipContentNewItemViewModel alloc] initWithRQTypeModel:chooseTypeModel type:3];
  79. vipContentNew1ItemViewModel03.isSubjectFour = NO;
  80. group7.itemViewModels = @[vipContentNew1ItemViewModel03] ;
  81. group7.headerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group7.itemViewModels.count > 0? 10 : 0);
  82. group7.footerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group7.itemViewModels.count > 0? 10 : 0);
  83. return @[group0, group1, group4, group5, group6, group7];
  84. }];
  85. }
  86. // 请求数据
  87. - (RACSignal *)requestRemoteDataSignalWithPage:(NSUInteger)page {
  88. [MBProgressHUD rq_showProgressHUD:@"获取会员套餐..."];
  89. NSArray * (^typeModelsBlock)(NSArray *) = ^(NSArray *products) {
  90. [MBProgressHUD rq_hideHUD];
  91. if (page == 1) {
  92. /// 下拉刷新
  93. } else {
  94. /// 上拉加载
  95. products = @[(self.typeModels ?: @[]).rac_sequence, products.rac_sequence].rac_sequence.flatten.array;
  96. }
  97. return products;
  98. };
  99. 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) {
  100. [MBProgressHUD rq_hideHUD];
  101. [MBProgressHUD rq_showErrorTips:error];
  102. }];
  103. }
  104. /// 辅助方法
  105. - (NSArray *)singlePriceItemWithTypeModels:(NSArray *)typeModels chooseTypeModel:(RQTypeModel *)chooseTypeModel{
  106. if (RQObjectIsNil(typeModels) || typeModels.count == 0) return nil;
  107. NSArray *canUseTypeModels = [typeModels.rac_sequence filter:^BOOL(RQTypeModel *typeModel) {
  108. return YES;
  109. }].array;
  110. NSArray *itemViewModels = [canUseTypeModels.rac_sequence map:^id _Nullable(RQTypeModel *typeModel) {
  111. if ([typeModel.dictLabel isEqualToString:@"理论实操计时"]) {
  112. RQVipTrainPriceItemViewModel *vipTrainPriceItemViewModel = [[RQVipTrainPriceItemViewModel alloc] initWithRQTypeModel:typeModel chooseTypeModel:chooseTypeModel typeModels:canUseTypeModels];
  113. return vipTrainPriceItemViewModel;
  114. } else {
  115. NYLIVipSinglePriceItemViewModel *vipSinglePriceItemViewModel = [[NYLIVipSinglePriceItemViewModel alloc] initWithRQTypeModel:typeModel chooseTypeModel:chooseTypeModel typeModels:canUseTypeModels subjectType:self.homePageSubjectType];
  116. return vipSinglePriceItemViewModel;
  117. }
  118. }].array;
  119. return itemViewModels ?: @[] ;
  120. }
  121. - (NSArray *)allPriceItemWithTypeModels:(NSArray *)typeModels chooseTypeModel:(RQTypeModel *)chooseTypeModel {
  122. if (RQObjectIsNil(typeModels) || typeModels.count == 0) return nil;
  123. NSArray *itemViewModels = [[typeModels.rac_sequence filter:^BOOL(RQTypeModel *typeModel) {
  124. return [typeModel.remark isEqualToString:@"1"] && ![typeModel.status isEqualToString:@"1"];
  125. }].array.rac_sequence map:^id _Nullable(RQTypeModel *typeModel) {
  126. RQVipAllPriceItemViewModel *vipAllPriceItemViewModel = [[RQVipAllPriceItemViewModel alloc] initWithRQTypeModel:typeModel chooseTypeModel:chooseTypeModel];
  127. return vipAllPriceItemViewModel;
  128. }].array;
  129. return itemViewModels ?: @[] ;
  130. }
  131. @end