Files
featherVoice/QXLive/Mine(音域)/Controller/歌单列表/QXMineSongListViewController.m
2025-12-04 14:11:00 +08:00

208 lines
9.0 KiB
Objective-C

//
// QXMineSongListViewController.m
// QXLive
//
// Created by 启星 on 2025/11/13.
//
#import "QXMineSongListViewController.h"
#import "QXMineNetwork.h"
#import "QXMineSongListCell.h"
#import "QXMineAddSongView.h"
#import "QXMineAddSongGiftView.h"
#import "QXCustomAlertView.h"
@interface QXMineSongListViewController ()<UITableViewDataSource,UITableViewDelegate,QXMineAddSongViewDelegate,QXMineAddSongGiftViewDelegate>
@property (nonatomic,strong)UITableView *tableView;
@property (nonatomic,strong)UILabel *countLabel;
@property (nonatomic,strong)QXMineAddSongView *addSongView;
@end
@implementation QXMineSongListViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
}
-(void)setNavgationItems{
[super setNavgationItems];;
self.navigationItem.title = @"歌单列表";
UIButton*recordBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 44, 44)];
[recordBtn setTitle:QXText(@"新增") forState:(UIControlStateNormal)];
[recordBtn setTitleColor:QXConfig.themeColor forState:(UIControlStateNormal)];
recordBtn.titleLabel.font = [UIFont systemFontOfSize:16];
[recordBtn addTarget:self action:@selector(addAction) forControlEvents:(UIControlEventTouchUpInside)];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:recordBtn];
}
-(void)initSubViews{
self.page = 1;
self.countLabel = [[UILabel alloc] initWithFrame:CGRectMake(16, NavContentHeight+12, 200, 35)];
self.countLabel.textColor = RGB16(0x666666);
self.countLabel.font = [UIFont systemFontOfSize:12];
self.countLabel.text = @"共0首歌";
[self.view addSubview:self.countLabel];
UIButton*recordBtn = [[UIButton alloc] initWithFrame:CGRectMake(self.view.width-35-16, NavContentHeight+12, 35, 35)];
[recordBtn setImage:[[UIImage imageNamed:@"nobility_help_icon"] imageByTintColor:RGB16(0x666666)] forState:(UIControlStateNormal)];
recordBtn.titleLabel.font = [UIFont systemFontOfSize:16];
[recordBtn addTarget:self action:@selector(helpAction) forControlEvents:(UIControlEventTouchUpInside)];
[self.view addSubview:recordBtn];
[self.view addSubview:self.tableView];
[self getSongList];
}
-(void)getSongList{
MJWeakSelf
[QXMineNetwork getUserSongListWithRoomId:@"" user_id:QXGlobal.shareGlobal.loginModel.user_id page:self.page SuccessBlock:^(NSArray<QXUserSongListModel *> * _Nonnull list, NSString * _Nonnull count) {
weakSelf.countLabel.text = [NSString stringWithFormat:@"共有%@首歌",count];
if (weakSelf.page == 1) {
[weakSelf.dataArray removeAllObjects];
}
[weakSelf.dataArray addObjectsFromArray:list];
[weakSelf.tableView reloadData];
[weakSelf.tableView.mj_header endRefreshing];
if (list.count == 0) {
weakSelf.tableView.mj_footer.state = MJRefreshStateNoMoreData;
}else{
[weakSelf.tableView.mj_header endRefreshing];
}
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
}];
}
-(void)helpAction{
NSString *urlString = [NSString stringWithFormat:@"%@api/Page/page_show?id=%@",ServerUrl,@"34"];
QXBaseWebViewController *vc = [[QXBaseWebViewController alloc] init];
vc.urlStr = urlString;
[self.navigationController pushViewController:vc animated:YES];
}
-(void)didSeletedGift:(QXGiftModel *)giftModel giftCount:(nonnull NSString *)giftCount{
giftModel.num = giftCount;
self.addSongView.giftModel = giftModel;
}
-(void)qx_mineAddSongViewDidSeleteGift{
QXMineAddSongGiftView *giftView = [[QXMineAddSongGiftView alloc] initWithFrame:[UIScreen mainScreen].bounds];
giftView.delegate = self;
[giftView showInView:self.view];
}
-(void)qx_mineAddSongViewCommitWithSongName:(NSString *)songName giftModel:(QXGiftModel *)giftModel{
MJWeakSelf
[QXMineNetwork mineUserAddAndDeleteAndEditWithType:0 Id:@"" songName:songName giftId:giftModel.gift_id giftNum:giftModel.num successBlock:^(NSDictionary * _Nonnull dict) {
showToast(@"添加成功");
[weakSelf.addSongView hide];
weakSelf.page = 1;
[weakSelf getSongList];
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
showToast(@"添加失败");
}];
}
-(void)qx_mineAddSongViewDidRemove{
self.addSongView = nil;
}
-(void)qx_mineEditSongViewCommitWithSongModel:(QXUserSongListModel *)songModel{
MJWeakSelf
[QXMineNetwork mineUserAddAndDeleteAndEditWithType:1 Id:songModel.id songName:songModel.song_name giftId:songModel.gift_id giftNum:songModel.gift_num successBlock:^(NSDictionary * _Nonnull dict) {
showToast(@"修改成功");
[weakSelf.addSongView hide];
weakSelf.page = 1;
[weakSelf getSongList];
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
showToast(@"修改失败");
}];
}
-(void)addAction{
self.addSongView = [[QXMineAddSongView alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.addSongView.delegate = self;
[self.addSongView showInView:self.view];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return self.dataArray.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
QXMineSongListCell *cell = [QXMineSongListCell cellWithTableView:tableView];
cell.model = self.dataArray[indexPath.row];
return cell;
}
-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{
return YES;
}
-(UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath{
QXUserSongListModel *model = self.dataArray[indexPath.row];
MJWeakSelf
UIContextualAction *deletAction = [UIContextualAction contextualActionWithStyle:(UIContextualActionStyleDestructive) title:@"删除" handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) {
[weakSelf deleteSongWithModel:model];
completionHandler(YES);
}];
UIContextualAction *editAction = [UIContextualAction contextualActionWithStyle:(UIContextualActionStyleNormal) title:@"编辑" handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) {
[weakSelf editSongWithModel:model];
completionHandler(YES);
}];
editAction.backgroundColor = RGB16(0x3665F9);
UISwipeActionsConfiguration *config = [UISwipeActionsConfiguration configurationWithActions:@[deletAction,editAction]];
return config;
}
-(void)deleteSongWithModel:(QXUserSongListModel*)model{
QXCustomAlertView *alertView = [[QXCustomAlertView alloc] init];
[alertView showInView:self.view title:@"您确定要删除歌曲吗" message:[NSString stringWithFormat:@"歌曲名称:%@\n礼物信息:%@ x%@",model.song_name,model.gift_name,model.gift_num] cancleTitle:@"取消" commitTitle:@"确定"];
MJWeakSelf
alertView.commitBlock = ^{
[QXMineNetwork mineUserAddAndDeleteAndEditWithType:2 Id:model.id songName:model.song_name giftId:model.gift_id giftNum:model.gift_num successBlock:^(NSDictionary * _Nonnull dict) {
showToast(@"删除成功");
weakSelf.page = 1;
[weakSelf getSongList];
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
showToast(@"删除失败");
}];
};
}
-(void)editSongWithModel:(QXUserSongListModel*)model{
self.addSongView = [[QXMineAddSongView alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.addSongView.delegate = self;
self.addSongView.songModel = model;
[self.addSongView showInView:self.view];
}
-(UITableView *)tableView{
if (!_tableView) {
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(16, self.countLabel.bottom+5, SCREEN_WIDTH-32, SCREEN_HEIGHT-NavContentHeight) style:(UITableViewStylePlain)];
_tableView.dataSource = self;
_tableView.delegate = self;
_tableView.backgroundColor = [UIColor whiteColor];
[_tableView addRoundedCornersWithRadius:16 byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight)];
_tableView.rowHeight = 45;
// _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
if (@available(iOS 15.0, *)) {
_tableView.sectionHeaderTopPadding = 0;
} else {
// Fallback on earlier versions
}
MJWeakSelf
_tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
weakSelf.page = 1;
[weakSelf getSongList];
}];
_tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
weakSelf.page++;
[weakSelf getSongList];
}];
}
return _tableView;
}
@end