// // VipSettingViewController.m // YuMi // // Created by P on 2024/10/22. // #import "VipSettingViewController.h" #import "Api.h" #import "UserInfoModel.h" #import "XPNobleCenterProtocol.h" #import "XPNobleCenterPresenter.h" @interface VipSettingCell : UITableViewCell @property (nonatomic, copy) NSString *title; @property (nonatomic, assign) NSInteger minLevel; @property (nonatomic, assign) NSInteger maxLevel; @property (nonatomic, strong) UIStackView *stack; @property (nonatomic, strong) UIImageView *vip_5; @property (nonatomic, strong) UIImageView *vip_6; @property (nonatomic, strong) UIImageView *vip_7; @property (nonatomic, strong) UIImageView *vip_8; @property (nonatomic, strong) UIImageView *vip_9; @property (nonatomic, strong) UILabel *titleLabel; @property (nonatomic, strong) UISwitch *vipSwitch; @property (nonatomic, assign) NSInteger index; @property (nonatomic, assign) BOOL switchStatus; @property (nonatomic, copy) void(^switchUpdate)(BOOL switchState, NSInteger index); @end @implementation VipSettingCell - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { self.selectionStyle = UITableViewCellSelectionStyleNone; self.backgroundColor = [UIColor clearColor]; UIView *container = [[UIView alloc] init]; container.backgroundColor = UIColorFromRGB(0xF2F3F7); container.layer.cornerRadius = 8; container.layer.masksToBounds = YES; [self.contentView addSubview:container]; [container mas_makeConstraints:^(MASConstraintMaker *make) { make.width.mas_equalTo(self.contentView.mas_width).offset(-16); make.height.mas_equalTo(64); make.top.mas_equalTo(self.contentView).offset(20); }]; [self.stack addArrangedSubview:self.vip_5]; [self.stack addArrangedSubview:self.vip_6]; [self.stack addArrangedSubview:self.vip_7]; [self.stack addArrangedSubview:self.vip_8]; [self.stack addArrangedSubview:self.vip_9]; [container addSubview:self.stack]; [self.stack mas_makeConstraints:^(MASConstraintMaker *make) { make.top.leading.mas_equalTo(10); make.height.mas_equalTo(20); }]; [self.vip_5 mas_makeConstraints:^(MASConstraintMaker *make) { make.size.mas_equalTo(CGSizeMake(42, 20)); }]; [self.vip_6 mas_makeConstraints:^(MASConstraintMaker *make) { make.size.mas_equalTo(CGSizeMake(42, 20)); }]; [self.vip_7 mas_makeConstraints:^(MASConstraintMaker *make) { make.size.mas_equalTo(CGSizeMake(42, 20)); }]; [self.vip_8 mas_makeConstraints:^(MASConstraintMaker *make) { make.size.mas_equalTo(CGSizeMake(42, 20)); }]; [self.vip_9 mas_makeConstraints:^(MASConstraintMaker *make) { make.size.mas_equalTo(CGSizeMake(42, 20)); }]; [container addSubview:self.vipSwitch]; [self.vipSwitch mas_makeConstraints:^(MASConstraintMaker *make) { make.centerY.mas_equalTo(container); make.trailing.mas_equalTo(container).offset(-20); make.size.mas_equalTo(CGSizeMake(34, 20)); }]; [container addSubview:self.titleLabel]; [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.leading.mas_equalTo(10); make.top.mas_equalTo(self.stack.mas_bottom).offset(10); }]; } return self; } - (void)setMaxLevel:(NSInteger)maxLevel { _maxLevel = maxLevel; self.titleLabel.text = self.title; self.vip_5.hidden = self.minLevel>5; self.vip_6.hidden = self.minLevel>6; self.vip_7.hidden = self.minLevel>7; self.vip_8.hidden = self.minLevel>8; self.vipSwitch.on = self.switchStatus; } - (void)onSwitchChange:(UISwitch *)sender { if (self.switchUpdate) { self.switchUpdate(sender.isOn, self.index); } } - (UIStackView *)stack { if (!_stack) { _stack = [[UIStackView alloc] init]; _stack.spacing = 5; _stack.alignment = UIStackViewAlignmentLeading; } return _stack; } - (UIImageView *)vip_5 { if (!_vip_5) { _vip_5 = [[UIImageView alloc] initWithImage:kImage(@"vip_setting_level_5")]; _vip_5.contentMode = UIViewContentModeScaleAspectFill; } return _vip_5; } - (UIImageView *)vip_6 { if (!_vip_6) { _vip_6 = [[UIImageView alloc] initWithImage:kImage(@"vip_setting_level_6")]; _vip_6.contentMode = UIViewContentModeScaleAspectFill; } return _vip_6; } - (UIImageView *)vip_7 { if (!_vip_7) { _vip_7 = [[UIImageView alloc] initWithImage:kImage(@"vip_setting_level_7")]; _vip_7.contentMode = UIViewContentModeScaleAspectFill; } return _vip_7; } - (UIImageView *)vip_8 { if (!_vip_8) { _vip_8 = [[UIImageView alloc] initWithImage:kImage(@"vip_setting_level_8")]; _vip_8.contentMode = UIViewContentModeScaleAspectFill; } return _vip_8; } - (UIImageView *)vip_9 { if (!_vip_9) { _vip_9 = [[UIImageView alloc] initWithImage:kImage(@"vip_setting_level_9")]; _vip_9.contentMode = UIViewContentModeScaleAspectFill; } return _vip_9; } - (UILabel *)titleLabel { if (!_titleLabel) { _titleLabel = [UILabel labelInitWithText:@"" font:kFontMedium(14) textColor:UIColorFromRGB(0x313131)]; } return _titleLabel; } - (UISwitch *)vipSwitch { if (!_vipSwitch) { _vipSwitch = [[UISwitch alloc] init]; _vipSwitch.onTintColor = UIColorFromRGB(0xff8c03); [_vipSwitch addTarget:self action:@selector(onSwitchChange:) forControlEvents:UIControlEventValueChanged]; _vipSwitch.transform = CGAffineTransformMakeScale(0.8, 0.8); } return _vipSwitch; } @end @interface VipSettingViewController () @property (nonatomic, strong) UserInfoModel *userInfo; @property (nonatomic, strong) UITableView *tableView; @end @implementation VipSettingViewController - (void)viewDidLoad { [super viewDidLoad]; self.title = YMLocalizedString(@"VipSettin_1.0.17_0"); self.view.backgroundColor = [UIColor whiteColor]; [self.view addSubview:self.tableView]; [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { make.leading.mas_equalTo(self.view).offset(16); make.top.trailing.bottom.mas_equalTo(self.view); }]; [self showLoading]; @kWeakify(self); [Api getUserInfo:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { @kStrongify(self); if (code == 200) { [self hideHUD]; self.userInfo = [UserInfoModel modelWithDictionary:data.data]; [self.tableView reloadData]; } else { [self showErrorToast:msg]; [self dismissViewControllerAnimated:YES completion:nil]; } } uid:[[AccountInfoStorage instance] getUid]]; } - (XPNobleCenterPresenter *)createPresenter { return [[XPNobleCenterPresenter alloc] init];; } - (void)handleSwitchUpdate:(BOOL)switchStatus atIndex:(NSInteger)index { self.tableView.userInteractionEnabled = false; switch (index) { case 0: /// 防关注 [self.presenter changePreventFollow:switchStatus]; break; case 1: /// 防跟随 [self.presenter changePreventTrace:switchStatus]; break; case 2: /// 請勿打擾 [self.presenter changePrivateChatLimit:switchStatus]; break; case 3: /// 隐身 [self.presenter changeEnterHide:switchStatus]; break; case 4: /// 防被踢 [self.presenter changePreventKick:switchStatus]; break; default: break; } } #pragma mark - ///开关隐身进房成功 - (void)changeEnterHideSuccess:(BOOL)switchStatus { [self.userInfo.userVipInfoVO setEnterHide:switchStatus]; [self switchUpdateEnd]; } ///开关隐身进房失败 - (void)changeEnterHideFail { [self switchUpdateEnd]; } ///防关注开关修改成功 - (void)changePreventFollowSuccess:(BOOL)switchStatus { [self.userInfo.userVipInfoVO setPreventFollow:switchStatus]; [self switchUpdateEnd]; } ///防关注开关修改失败 - (void)changePreventFollowFail { [self switchUpdateEnd]; } ///防跟随开关修改成功 - (void)changePreventTraceSuccess:(BOOL)switchStatus { [self.userInfo.userVipInfoVO setPreventTrace:switchStatus]; [self switchUpdateEnd]; } ///防跟随开关修改失败 - (void)changePreventTraceFail { [self switchUpdateEnd]; } ///VIP 防被踢开关修改成功 - (void)changePreventKickSuccess:(BOOL)switchStatus { [self.userInfo.userVipInfoVO setPreventKick:switchStatus]; [self switchUpdateEnd]; } ///VIP 防被踢开关修改失败 - (void)changePreventKickFail { [self switchUpdateEnd]; } - (void)changePrivateChatLimitSuccess:(BOOL)switchStatus { [self.userInfo.userVipInfoVO setPrivateChatLimit:switchStatus]; [self switchUpdateEnd]; } - (void)changePrivateChatLimitFail { [self switchUpdateEnd]; } - (void)switchUpdateEnd { [self.tableView reloadData]; self.tableView.userInteractionEnabled = YES; } #pragma mark - - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 20; } - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { return [UILabel labelInitWithText:YMLocalizedString(@"VipSettin_1.0.17_1") font:kFontSemibold(16) textColor:UIColorFromRGB(0x313131)]; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 84; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 5; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { VipSettingCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([VipSettingCell class])]; switch (indexPath.row) { case 0: // 跟随进房 cell.title = YMLocalizedString(@"VipSettin_1.0.17_2"); cell.switchStatus = self.userInfo.userVipInfoVO.preventFollow; cell.minLevel = 5; break; case 1: // 关注 cell.title = YMLocalizedString(@"VipSettin_1.0.17_3"); cell.switchStatus = self.userInfo.userVipInfoVO.preventTrace; cell.minLevel = 6; break; case 2: // 勿打擾 cell.title = YMLocalizedString(@"1.0.18_25"); cell.switchStatus = self.userInfo.userVipInfoVO.privateChatLimit; cell.minLevel = 7; break; case 3: // 隐身进房 cell.title = YMLocalizedString(@"VipSettin_1.0.17_4"); cell.switchStatus = self.userInfo.userVipInfoVO.enterHide; cell.minLevel = 7; break; case 4: // 防被踢 cell.title = YMLocalizedString(@"VipSettin_1.0.17_5"); cell.switchStatus = self.userInfo.userVipInfoVO.preventKick; cell.minLevel = 8; break; default: break; } cell.maxLevel = 9; cell.index = indexPath.row; @kWeakify(self); [cell setSwitchUpdate:^(BOOL switchState, NSInteger index) { @kStrongify(self); [self handleSwitchUpdate:switchState atIndex:index]; }]; return cell; } #pragma mark - - (UITableView *)tableView { if (!_tableView) { _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain]; _tableView.scrollEnabled = NO; _tableView.backgroundColor = [UIColor clearColor]; if (isMSZH()) { } _tableView.delegate = self; _tableView.dataSource = self; _tableView.separatorStyle = UITableViewCellSeparatorStyleNone; [_tableView registerClass:[VipSettingCell class] forCellReuseIdentifier:NSStringFromClass([VipSettingCell class])]; } return _tableView; } @end