267 lines
8.8 KiB
Objective-C
267 lines
8.8 KiB
Objective-C
//
|
|
// CPListViewController.m
|
|
// YuMi
|
|
//
|
|
// Created by P on 2024/9/18.
|
|
//
|
|
|
|
#import "CPListViewController.h"
|
|
|
|
#import "CPCard.h"
|
|
#import "Api+Mine.h"
|
|
#import "RelationUserVO.h"
|
|
#import "XPWebViewController.h"
|
|
#import "XPMineUserInfoCustomNavView.h"
|
|
|
|
|
|
@interface CPListCardCell : UITableViewCell
|
|
|
|
@property (nonatomic, strong) RelationUserVO *model;
|
|
@property (nonatomic, strong) CPCard *cpCard;
|
|
|
|
@end
|
|
|
|
@implementation CPListCardCell
|
|
|
|
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
|
|
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
|
|
self.backgroundColor = [UIColor clearColor];
|
|
self.contentView.backgroundColor = [UIColor clearColor];
|
|
self.selectionStyle = UITableViewCellSelectionStyleNone;
|
|
[self setupUI];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void)setupUI {
|
|
[self.contentView addSubview:self.cpCard];
|
|
[self.cpCard mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
make.edges.mas_equalTo(self.contentView);
|
|
}];
|
|
}
|
|
|
|
- (void)setModel:(RelationUserVO *)model {
|
|
_model = model;
|
|
[self.cpCard updateForCPList:model showBreakHeart:([AccountInfoStorage instance].getUid.integerValue == model.uid)];
|
|
}
|
|
|
|
- (CPCard *)cpCard {
|
|
if (!_cpCard) {
|
|
_cpCard = [[CPCard alloc] init];
|
|
_cpCard.userInteractionEnabled = YES;
|
|
_cpCard.isListItem = YES;
|
|
}
|
|
return _cpCard;
|
|
}
|
|
|
|
@end
|
|
|
|
@interface CPListViewController () <XPMineCustomNavViewDelegate, UITableViewDelegate, UITableViewDataSource>
|
|
|
|
@property (nonatomic, strong) UIView *emptyView;
|
|
|
|
@property (nonatomic, strong) XPMineUserInfoCustomNavView *navView;
|
|
@property (nonatomic, strong) UITableView *cpCardTableView;
|
|
@property (nonatomic, assign) NSInteger page;
|
|
@property (nonatomic, strong) NSMutableArray <RelationUserVO *> *dataSource;
|
|
|
|
@end
|
|
|
|
@implementation CPListViewController
|
|
|
|
- (BOOL)isHiddenNavBar {
|
|
return YES;
|
|
}
|
|
|
|
- (void)viewDidLoad {
|
|
[super viewDidLoad];
|
|
|
|
self.page = 1;
|
|
[self setupUI];
|
|
}
|
|
|
|
- (void)viewDidAppear:(BOOL)animated {
|
|
[super viewDidAppear:animated];
|
|
[self.cpCardTableView.mj_header beginRefreshing];
|
|
}
|
|
|
|
- (void)setupUI {
|
|
self.view.backgroundColor = UIColorFromRGB(0x08151A);
|
|
|
|
[self setupNavigationBar];
|
|
[self setupEmptyView];
|
|
[self setupTableView];
|
|
}
|
|
|
|
- (void)setupNavigationBar {
|
|
[self.view addSubview:self.navView];
|
|
[self.navView mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
make.leading.trailing.top.mas_equalTo(self.view);
|
|
make.height.mas_equalTo(kNavigationHeight);
|
|
}];
|
|
}
|
|
|
|
- (void)setupEmptyView {
|
|
[self.view addSubview:self.emptyView];
|
|
[self.emptyView mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
make.bottom.leading.trailing.mas_equalTo(self.view);
|
|
make.top.mas_equalTo(self.navView.mas_bottom);
|
|
}];
|
|
}
|
|
|
|
- (void)setupTableView {
|
|
[self.view addSubview:self.cpCardTableView];
|
|
[self.cpCardTableView mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
make.bottom.leading.trailing.mas_equalTo(self.view);
|
|
make.top.mas_equalTo(self.navView.mas_bottom).offset(10);
|
|
}];
|
|
|
|
MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerRefresh)];
|
|
header.stateLabel.font = [UIFont systemFontOfSize:10.0];
|
|
header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:10.0];
|
|
header.stateLabel.textColor = [DJDKMIMOMColor secondTextColor];
|
|
header.lastUpdatedTimeLabel.textColor = [DJDKMIMOMColor secondTextColor];
|
|
_cpCardTableView.mj_header = header;
|
|
|
|
MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerRefresh)];
|
|
footer.stateLabel.textColor = [DJDKMIMOMColor secondTextColor];
|
|
footer.stateLabel.font = [UIFont systemFontOfSize:10.0];
|
|
_cpCardTableView.mj_footer = footer;
|
|
}
|
|
|
|
- (void)headerRefresh {
|
|
if (self.page == 1) {
|
|
self.dataSource = @[].mutableCopy;
|
|
}
|
|
|
|
@kWeakify(self);
|
|
[Api requestCPList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
|
|
@kStrongify(self);
|
|
[self.cpCardTableView.mj_header endRefreshing];
|
|
[self.cpCardTableView.mj_footer endRefreshing];
|
|
|
|
if (code == 200) {
|
|
NSArray *array = [RelationUserVO modelsWithArray:data.data];
|
|
[self.dataSource addObjectsFromArray:array];
|
|
[self.cpCardTableView reloadData];
|
|
|
|
self.emptyView.hidden = self.dataSource.count != 0;
|
|
} else {
|
|
self.emptyView.hidden = NO;
|
|
[self showErrorToast:msg];
|
|
}
|
|
} page:@(self.page) pageSize:@(10)];
|
|
}
|
|
|
|
- (void)footerRefresh {
|
|
self.page += 1;
|
|
[self headerRefresh];
|
|
}
|
|
|
|
- (void)cancelRelation:(RelationUserVO *)model {
|
|
NSString *message = [NSString stringWithFormat:YMLocalizedString(@"UserDetail_CP_Toast_1"), @(model.cancelGoldNum), model.cpNick];
|
|
NSString *successMessage = [NSString stringWithFormat:YMLocalizedString(@"UserDetail_CP_Toast_2"), model.cpNick];
|
|
@kWeakify(self);
|
|
[TTPopup alertWithMessage:message confirmHandler:^{
|
|
@kStrongify(self);
|
|
[self showLoading];
|
|
[Api cancelCPList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
|
|
if (code == 200) {
|
|
[self showSuccessToast:msg];
|
|
[self.cpCardTableView.mj_header beginRefreshing];
|
|
} else {
|
|
[self hideHUD];
|
|
[self showErrorToast:msg];
|
|
}
|
|
}
|
|
uid:@(model.uid)
|
|
loverUid:@(model.cpUid)
|
|
goldNum:@(model.cancelGoldNum)];
|
|
} cancelHandler:^{ }];
|
|
}
|
|
|
|
#pragma mark - UITableViewDelegate & DataSource
|
|
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
|
|
return self.dataSource.count;
|
|
}
|
|
|
|
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
|
|
return kGetScaleWidth(175);
|
|
}
|
|
|
|
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
|
|
CPListCardCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([CPListCardCell class])];
|
|
RelationUserVO *model = [self.dataSource xpSafeObjectAtIndex:indexPath.row];
|
|
cell.model = model;
|
|
|
|
@kWeakify(self);
|
|
[cell.cpCard setBreakTheHeart:^(RelationUserVO *model) {
|
|
@kStrongify(self);
|
|
[self cancelRelation:model];
|
|
}];
|
|
return cell;
|
|
}
|
|
|
|
#pragma mark - XPMineCustomNavViewDelegate
|
|
- (void)xPMineCustomNavView:(XPMineUserInfoCustomNavView *)view didClickEditButton:(UIButton *)sender {
|
|
XPWebViewController * webVC =[[XPWebViewController alloc] init];
|
|
webVC.url = URLWithType(kCPRule);
|
|
[self.navigationController pushViewController:webVC animated:YES];
|
|
}
|
|
|
|
- (void)xPMineCustomNavView:(XPMineUserInfoCustomNavView *)view didClickBackButton:(UIButton *)sender {
|
|
[self.navigationController popViewControllerAnimated:YES];
|
|
}
|
|
|
|
#pragma mark -
|
|
- (XPMineUserInfoCustomNavView *)navView {
|
|
if (!_navView) {
|
|
_navView = [[XPMineUserInfoCustomNavView alloc] init];
|
|
_navView.delegate = self;
|
|
_navView.titleLabel.text = @"My CP";
|
|
_navView.titleLabel.textColor = [UIColor whiteColor];
|
|
[_navView.editButton setImage:[UIImage imageNamed:@"cp_help"] forState:UIControlStateNormal];
|
|
[_navView updateBackButtonImage:[UIImage imageNamed:@"home_search_white_back"]];
|
|
}
|
|
return _navView;
|
|
}
|
|
|
|
- (UITableView *)cpCardTableView {
|
|
if (!_cpCardTableView) {
|
|
_cpCardTableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
|
|
_cpCardTableView.delegate = self;
|
|
_cpCardTableView.dataSource = self;
|
|
_cpCardTableView.backgroundColor = [UIColor clearColor];
|
|
_cpCardTableView.estimatedRowHeight = kGetScaleWidth(175);
|
|
_cpCardTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
|
|
[_cpCardTableView registerClass:[CPListCardCell class]
|
|
forCellReuseIdentifier:NSStringFromClass([CPListCardCell class])];
|
|
}
|
|
return _cpCardTableView;
|
|
}
|
|
|
|
|
|
- (UIView *)emptyView {
|
|
if (!_emptyView) {
|
|
_emptyView = [[UIView alloc] init];
|
|
_emptyView.hidden = YES;
|
|
|
|
UIImageView *icon = [[UIImageView alloc] initWithImage:kImage(@"cp_list_placeholder")];
|
|
[_emptyView addSubview:icon];
|
|
[icon mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
make.centerX.mas_equalTo(_emptyView);
|
|
make.top.mas_equalTo(70);
|
|
make.size.mas_equalTo(CGSizeMake(110, 110));
|
|
}];
|
|
|
|
UILabel *title = [UILabel labelInitWithText:YMLocalizedString(@"XPMomentsRecommendViewController0") font:kFontRegular(14) textColor:[UIColor colorWithWhite:1 alpha:0.4]];
|
|
[_emptyView addSubview:title];
|
|
[title mas_makeConstraints:^(MASConstraintMaker *make) {
|
|
make.centerX.mas_equalTo(_emptyView);
|
|
make.top.mas_equalTo(186);
|
|
}];
|
|
}
|
|
return _emptyView;
|
|
}
|
|
@end
|