Files
peko-ios/YuMi/Modules/YMMine/View/CPListViewController.m
2024-09-23 20:35:29 +08:00

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