NYLIVipCoachViewModel.m 7.8 KB

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