123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- //
- // RQVipViewModel.m
- // jiaPei
- //
- // Created by 张嵘 on 2022/3/1.
- // Copyright © 2022 JCZ. All rights reserved.
- //
- #import "RQVipViewModel.h"
- @interface RQVipViewModel ()
- @property (nonatomic, readwrite, copy) NSArray *typeModels;
- @property (nonatomic, readwrite, assign) RQVIPPageType vipPageType;
- @property (nonatomic, readwrite, assign) RQHomePageSubjectType homePageSubjectType;
- @end
- @implementation RQVipViewModel
- #pragma mark - Public Method
- - (instancetype)initWithServices:(id<RQViewModelServices>)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) {
- // videoVipModel.subject1 = @"1";
- // videoVipModel.subject2 = @"";
- // videoVipModel.subject3 = @"";
- // videoVipModel.subject4 = @"1";
- 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)
- /// 第零组 头部视图
- RQVipHeaderImageViewNewGroupViewModel *group0 = [[RQVipHeaderImageViewNewGroupViewModel alloc] initWithRQVideoVipModel:videoVipModel chooseTypeModel:chooseTypeModel];
- group0.itemViewModels = [self singlePriceItemWithTypeModels:typeModels chooseTypeModel:chooseTypeModel];
-
- RQVipAlertHeaderGroupViewModel *group = [[RQVipAlertHeaderGroupViewModel alloc] init];
- group.headerHeight = 57;
- group.itemViewModels = [self singlePriceItemWithTypeModels:typeModels chooseTypeModel:chooseTypeModel];
- /// 第一组 价格套餐
- RQCommonGroupViewModel *group1 = [RQCommonGroupViewModel groupViewModel];
- group1.footerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : 10;
- group1.itemViewModels = ([chooseTypeModel.dictLabel isEqualToString:@"理论实操计时"])? @[] : @[[[RQVipAuthorityNewItemViewModel alloc] initWithChooseTypeModel:chooseTypeModel]];
- /// 第四组 科一怎么学
- RQCommonGroupViewModel *group4 = [RQCommonGroupViewModel groupViewModel];
- RQVipContentNewItemViewModel *vipContentNew1ItemViewModel = [[RQVipContentNewItemViewModel alloc] initWithRQTypeModel:chooseTypeModel];
- vipContentNew1ItemViewModel.isSubjectFour = NO;
- group4.itemViewModels = (self.vipPageType == RQVIPPageType_Alert)? @[] : (([chooseTypeModel.dictLabel containsString:@"全"] ||[chooseTypeModel.dictLabel containsString:@"一"])? @[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];
- RQVipContentNew23ItemViewModel *vipContentNew2ItemViewModel = [[RQVipContentNew23ItemViewModel alloc] initWithRQTypeModel:chooseTypeModel];
- vipContentNew2ItemViewModel.isSubjectThree = NO;
- group5.itemViewModels = (self.vipPageType == RQVIPPageType_Alert)? @[] : (([chooseTypeModel.dictLabel containsString:@"全"] ||[chooseTypeModel.dictLabel containsString:@"二"])? @[vipContentNew2ItemViewModel] : @[]);
- 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];
- RQVipContentNew23ItemViewModel *vipContentNew3ItemViewModel = [[RQVipContentNew23ItemViewModel alloc] initWithRQTypeModel:chooseTypeModel];
- vipContentNew3ItemViewModel.isSubjectThree = YES;
- group6.itemViewModels = (self.vipPageType == RQVIPPageType_Alert)? @[] : (([chooseTypeModel.dictLabel containsString:@"全"] || [chooseTypeModel.dictLabel containsString:@"三"])? @[vipContentNew3ItemViewModel] : @[]);
- 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];
- RQVipContentNewItemViewModel *vipContentNew4ItemViewModel = [[RQVipContentNewItemViewModel alloc] initWithRQTypeModel:chooseTypeModel];
- vipContentNew4ItemViewModel.isSubjectFour = YES;
- group7.itemViewModels = (self.vipPageType == RQVIPPageType_Alert)? @[] : (([chooseTypeModel.dictLabel containsString:@"全"] || [chooseTypeModel.dictLabel containsString:@"四"])? @[vipContentNew4ItemViewModel] : @[]);
- 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);
-
- if ([chooseTypeModel.dictLabel containsString:@"一"] && [chooseTypeModel.dictLabel containsString:@"+"] && [chooseTypeModel.dictLabel containsString:@"四"]) {
- group7.itemViewModels = @[];
- group7.headerHeight = 0.f;
- group7.footerHeight = 0.f;
- }
-
-
- /// 第六组 常见问题
- RQCommonGroupViewModel *group8 = [RQCommonGroupViewModel groupViewModel];
- RQVipProblemNewItemViewModel *vipProblemNewItemViewModel = [[RQVipProblemNewItemViewModel alloc] init];
- group8.itemViewModels = (self.vipPageType == RQVIPPageType_Alert)? @[] : @[vipProblemNewItemViewModel];
- group8.headerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group8.itemViewModels.count > 0? 10 : 0);
- group8.footerHeight = (self.vipPageType == RQVIPPageType_Alert)? 0 : (group8.itemViewModels.count > 0? 10 : 0);
-
- return @[(self.vipPageType == RQVIPPageType_Alert)? group : group0, group1, group4, group5, group6, group7, group8];
- }];
- }
- // 请求数据
- - (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) {
- if([RQ_USER_MANAGER.currentUser.city isEqualToString:@"2108"]){
- return ![typeModel.status isEqualToString:@"1"] && (typeModel.homePageSubjectType == self.homePageSubjectType || typeModel.homePageSubjectType == RQHomePageSubjectType_SubjectAll) && (![typeModel.dictLabel containsString:@"计时"]);
- }
- if (!RQObjectIsNil(RQ_VIP_Module.activationModel) && RQ_VIP_Module.activationModel.isShare) {
- if (RQ_VIP_Module.activationModel.isActive == 1) {
- return ![typeModel.status isEqualToString:@"1"] && ((typeModel.homePageSubjectType == self.homePageSubjectType || typeModel.homePageSubjectType == RQHomePageSubjectType_SubjectAll) && (![typeModel.dictLabel containsString:@"含计时"]));
- } else {
- return ![typeModel.status isEqualToString:@"1"] && (typeModel.homePageSubjectType == self.homePageSubjectType || typeModel.homePageSubjectType == RQHomePageSubjectType_SubjectAll) && ([typeModel.dictLabel containsString:@"计时"]);
- }
- } else {
- return ![typeModel.status isEqualToString:@"1"] && (typeModel.homePageSubjectType == self.homePageSubjectType || typeModel.homePageSubjectType == RQHomePageSubjectType_SubjectAll) && (![typeModel.dictLabel containsString:@"计时"]);
- }
- }].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 {
- RQVipSinglePriceItemViewModel *vipSinglePriceItemViewModel = [[RQVipSinglePriceItemViewModel 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
|