// // NYLIVipCoachViewModel.m // jiaPei // // Created by Ning.ge on 2025/1/23. // Copyright © 2025 JCZ. All rights reserved. // #import "NYLIVipCoachViewModel.h" @interface NYLIVipCoachViewModel () @property (nonatomic, readwrite, copy) NSArray *typeModels; @property (nonatomic, readwrite, assign) RQVIPPageType vipPageType; @property (nonatomic, readwrite, assign) RQHomePageSubjectType homePageSubjectType; @end @implementation NYLIVipCoachViewModel #pragma mark - Public Method - (instancetype)initWithServices:(id)services params:(NSDictionary *)params { if (self = [super initWithServices:services params:params]) { self.vipPageType = [params[RQViewModelIDKey] integerValue]; self.typeModels = params[RQViewModelUtilKey]; self.homePageSubjectType = [params[RQViewCommonValueKey] integerValue]; } return self; } - (void)initialize { [super initialize]; self.title = @"会员中心"; [[RQ_HTTP_Service getVideoVipWithUserId:RQ_USER_MANAGER.currentUser._id] subscribeNext:^(RQVideoVipModel *videoVipModel) { RQ_VIP_Module.videoVipModel = videoVipModel; }]; [RQ_VIP_Module isVipWithSubject:0 complete:^(BOOL isVip) { }]; [RQ_VIP_Module isActiveWithCcomplete:^(RQActivationModel * _Nullable activationModel, BOOL isSuccess) {}]; ///配置数据 [self rq_configureData]; } #pragma mark - PrivateMethod - (void)rq_configureData { @weakify(self) /// 数据源 RAC(self,dataSource) = [RACSignal combineLatest:@[RACObserve(self, typeModels),RACObserve(RQ_VIP_Module, videoVipModel),RACObserve(RQ_VIP_Module, chooseTypeModel)] reduce:^(NSArray *typeModels, RQVideoVipModel *videoVipModel, RQTypeModel *chooseTypeModel) { @strongify(self) /// 第零组 头部视图 NYLIVipHeaderImageViewGroupModel *group0 = [[NYLIVipHeaderImageViewGroupModel alloc] initWithRQVideoVipModel:videoVipModel chooseTypeModel:chooseTypeModel]; group0.itemViewModels = [self singlePriceItemWithTypeModels:typeModels chooseTypeModel:chooseTypeModel]; /// 第一组 价格 套餐 RQCommonGroupViewModel *group1 = [RQCommonGroupViewModel groupViewModel]; group1.footerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : 10; group1.itemViewModels = ([chooseTypeModel.dictLabel isEqualToString:@"理论实操计时"])? @[] : @[[[NYLIVipAuthorityNewItemViewModel alloc] initWithChooseTypeModel:chooseTypeModel]]; /// 第四组 科一怎么学 RQCommonGroupViewModel *group4 = [RQCommonGroupViewModel groupViewModel]; NYLIVipContentNewItemViewModel *vipContentNew1ItemViewModel = [[NYLIVipContentNewItemViewModel alloc] initWithRQTypeModel:chooseTypeModel type:0]; vipContentNew1ItemViewModel.isSubjectFour = NO; group4.itemViewModels = @[vipContentNew1ItemViewModel]; group4.headerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group4.itemViewModels.count > 0? 10 : 0); group4.footerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group4.itemViewModels.count > 0? 10 : 0); /// 第五组 科二怎么学 RQCommonGroupViewModel *group5 = [RQCommonGroupViewModel groupViewModel]; NYLIVipContentNewItemViewModel *vipContentNew1ItemViewModel01 = [[NYLIVipContentNewItemViewModel alloc] initWithRQTypeModel:chooseTypeModel type:1]; vipContentNew1ItemViewModel01.isSubjectFour = NO; group5.itemViewModels = @[vipContentNew1ItemViewModel01] ; group5.headerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group5.itemViewModels.count > 0? 10 : 0); group5.footerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group5.itemViewModels.count > 0? 10 : 0); /// 第六组 科三怎么学 RQCommonGroupViewModel *group6 = [RQCommonGroupViewModel groupViewModel]; NYLIVipContentNewItemViewModel *vipContentNew1ItemViewModel02 = [[NYLIVipContentNewItemViewModel alloc] initWithRQTypeModel:chooseTypeModel type:2]; vipContentNew1ItemViewModel02.isSubjectFour = NO; group6.itemViewModels = @[vipContentNew1ItemViewModel02] ; group6.headerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group6.itemViewModels.count > 0? 10 : 0); group6.footerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group6.itemViewModels.count > 0? 10 : 0); RQCommonGroupViewModel *group7 = [RQCommonGroupViewModel groupViewModel]; NYLIVipContentNewItemViewModel *vipContentNew1ItemViewModel03 = [[NYLIVipContentNewItemViewModel alloc] initWithRQTypeModel:chooseTypeModel type:3]; vipContentNew1ItemViewModel03.isSubjectFour = NO; group7.itemViewModels = @[vipContentNew1ItemViewModel03] ; group7.headerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group7.itemViewModels.count > 0? 10 : 0); group7.footerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group7.itemViewModels.count > 0? 10 : 0); return @[group0, group1, group4, group5, group6, group7]; }]; } // 请求数据 - (RACSignal *)requestRemoteDataSignalWithPage:(NSUInteger)page { [MBProgressHUD rq_showProgressHUD:@"获取会员套餐..."]; NSArray * (^typeModelsBlock)(NSArray *) = ^(NSArray *products) { [MBProgressHUD rq_hideHUD]; if (page == 1) { /// 下拉刷新 } else { /// 上拉加载 products = @[(self.typeModels ?: @[]).rac_sequence, products.rac_sequence].rac_sequence.flatten.array; } return products; }; 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) { [MBProgressHUD rq_hideHUD]; [MBProgressHUD rq_showErrorTips:error]; }]; } /// 辅助方法 - (NSArray *)singlePriceItemWithTypeModels:(NSArray *)typeModels chooseTypeModel:(RQTypeModel *)chooseTypeModel{ if (RQObjectIsNil(typeModels) || typeModels.count == 0) return nil; NSArray *canUseTypeModels = [typeModels.rac_sequence filter:^BOOL(RQTypeModel *typeModel) { return YES; }].array; NSArray *itemViewModels = [canUseTypeModels.rac_sequence map:^id _Nullable(RQTypeModel *typeModel) { if ([typeModel.dictLabel isEqualToString:@"理论实操计时"]) { RQVipTrainPriceItemViewModel *vipTrainPriceItemViewModel = [[RQVipTrainPriceItemViewModel alloc] initWithRQTypeModel:typeModel chooseTypeModel:chooseTypeModel typeModels:canUseTypeModels]; return vipTrainPriceItemViewModel; } else { NYLIVipSinglePriceItemViewModel *vipSinglePriceItemViewModel = [[NYLIVipSinglePriceItemViewModel alloc] initWithRQTypeModel:typeModel chooseTypeModel:chooseTypeModel typeModels:canUseTypeModels]; return vipSinglePriceItemViewModel; } }].array; return itemViewModels ?: @[] ; } - (NSArray *)allPriceItemWithTypeModels:(NSArray *)typeModels chooseTypeModel:(RQTypeModel *)chooseTypeModel { if (RQObjectIsNil(typeModels) || typeModels.count == 0) return nil; NSArray *itemViewModels = [[typeModels.rac_sequence filter:^BOOL(RQTypeModel *typeModel) { return [typeModel.remark isEqualToString:@"1"] && ![typeModel.status isEqualToString:@"1"]; }].array.rac_sequence map:^id _Nullable(RQTypeModel *typeModel) { RQVipAllPriceItemViewModel *vipAllPriceItemViewModel = [[RQVipAllPriceItemViewModel alloc] initWithRQTypeModel:typeModel chooseTypeModel:chooseTypeModel]; return vipAllPriceItemViewModel; }].array; return itemViewModels ?: @[] ; } @end