Files
yinmeng-ios/xplan-ios/Main/Room/View/Setting/View/XPRoomRoleViewController.m
2023-12-12 11:53:14 +08:00

213 lines
7.1 KiB
Objective-C

//
// XPRoomRoleViewController.m
// xplan-ios
//
// Created by 冯硕 on 2021/12/29.
// 管理员 黑名单
#import "XPRoomRoleViewController.h"
///Third
#import <Masonry/Masonry.h>
#import <NIMSDK/NIMSDK.h>
#import "XPMacro.h"
#import "XPRoomRoleTableViewCell.h"
#import "XPRoomRoleEmptyTableViewCell.h"
#import "GuildSuperAdminInfoModel.h"
#import "NSArray+Safe.h"
#import "AccountInfoStorage.h"
#import "Api+UserCard.h"
@interface XPRoomRoleViewController ()<UITableViewDelegate, UITableViewDataSource, XPRoomRoleTableViewCellDelegate>
///总的数据
@property (nonatomic,strong) NSMutableArray *originArray;
///需要显示的数据
@property (nonatomic,strong) NSMutableArray *datasource;
///列表
@property (nonatomic,strong) UITableView *tableView;
///最后一个
@property (nonatomic,strong) NIMChatroomMember *lastMember;
@end
@implementation XPRoomRoleViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self initSubViews];
[self initSubViewConstraints];
}
#pragma mark - Private Method
- (void)initSubViews {
[self.view addSubview:self.tableView];
}
- (void)initSubViewConstraints {
[self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.view);
}];
}
- (void)loadChatRoomRegularMemberList {
NIMChatroomMemberRequest *request = [[NIMChatroomMemberRequest alloc] init];
request.roomId = self.roomId;
request.type = NIMChatroomFetchMemberTypeRegular;
request.lastMember = self.lastMember;
request.limit = 200;
[[NIMSDK sharedSDK].chatroomManager fetchChatroomMembers:request completion:^(NSError * _Nullable error, NSArray<NIMChatroomMember *> * _Nullable members) {
if (error == nil) {
self.lastMember = members.lastObject;
[members enumerateObjectsUsingBlock:^(NIMChatroomMember * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if (self.type == RoomRoleListType_Black) {
if (obj.isInBlackList) {
[self.datasource addObject:obj];
}
} else if(self.type == RoomRoleListType_Manager) {
if (obj.type == NIMChatroomMemberTypeManager && ![self isRoomSuperAdmin:obj.userId]) {
[self.datasource addObject:obj];
}
}
}];
[self.tableView reloadData];
if (members.count > 0) {
[self loadChatRoomRegularMemberList];
}
}
}];
}
- (BOOL)isRoomSuperAdmin:(NSString *)uid {
BOOL isSuperAdmin = NO;
for (int i = 0; i< self.superAdmminList.count; i++) {
GuildSuperAdminInfoModel * superAdminInfo = [self.superAdmminList safeObjectAtIndex1:i];
if ([superAdminInfo.uid isEqualToString:uid]) {
isSuperAdmin = YES;
break;
}
}
return isSuperAdmin;
}
#pragma mark - UITableViewDelegate And UITableViewDataSource
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.datasource.count > 0 ? self.datasource.count : 1;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (self.datasource.count > 0) {
XPRoomRoleTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPRoomRoleTableViewCell class])];
if (cell == nil) {
cell = [[XPRoomRoleTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([XPRoomRoleTableViewCell class])];
}
cell.delegate = self;
cell.member = [self.datasource safeObjectAtIndex1:indexPath.row];
if (indexPath.row == (self.datasource.count -1)) {
cell.lineView.hidden = YES;
} else {
cell.lineView.hidden = NO;
}
return cell;
}
XPRoomRoleEmptyTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([XPRoomRoleEmptyTableViewCell class])];
if (cell == nil) {
cell = [[XPRoomRoleEmptyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([XPRoomRoleEmptyTableViewCell class])];
}
if (self.type == RoomRoleListType_Black) {
cell.titleLabel.text = @"暂没有设置黑名单";
} else {
cell.titleLabel.text = @"暂没有设置管理员";
}
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if (self.datasource.count > 0) {
return 55;
}
return KScreenHeight - kNavigationHeight;
}
#pragma mark - XPRoomRoleTableViewCellDelegate
- (void)xPRoomRoleTableViewCell:(NSString *)view didClickMember:(NIMChatroomMember *)member {
if (self.type == RoomRoleListType_Black) {
NIMChatroomMemberUpdateRequest *request = [[NIMChatroomMemberUpdateRequest alloc]init];
request.roomId = self.roomId;
request.userId = member.userId;
request.enable = NO;
[[NIMSDK sharedSDK].chatroomManager updateMemberBlack:request completion:^(NSError * _Nullable error) {
if (error == nil) {
[self.datasource removeObject:member];
[self.tableView reloadData];
}
}];
} else if(self.type == RoomRoleListType_Manager) {
NSString *uid = [AccountInfoStorage instance].getUid;
if ([self isRoomSuperAdmin:uid]) {
[Api superAdminHandleUser:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
if (code == 200) {
[self.datasource removeObject:member];
[self.tableView reloadData];
}else{
[self showErrorToast:msg];
}
} roomUid:self.roomUid targetUid:member.userId opt:@"1" isSet:@(NO)];
}else{
NIMChatroomMemberUpdateRequest *request = [[NIMChatroomMemberUpdateRequest alloc]init];
request.roomId = self.roomId;
request.userId = member.userId;
request.enable = NO;
[[NIMSDK sharedSDK].chatroomManager markMemberManager:request completion:^(NSError * _Nullable error) {
if (error == nil) {
[self.datasource removeObject:member];
[self.tableView reloadData];
}else{
[self showErrorToast:error.localizedDescription];
}
}];
}
}
}
#pragma mark - Getters And Setters
- (void)setType:(RoomRoleListType)type {
_type = type;
if (_type == RoomRoleListType_Black) {
self.title = @"黑名单";
} else {
self.title = @"管理员";
}
[self loadChatRoomRegularMemberList];
}
- (UITableView *)tableView {
if (!_tableView) {
_tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
_tableView.delegate = self;
_tableView.dataSource = self;
_tableView.tableFooterView = [UIView new];
_tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
_tableView.backgroundColor = [UIColor clearColor];
_tableView.rowHeight = 60;
if (@available(iOS 11.0, *)) {
_tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}
[_tableView registerClass:[XPRoomRoleTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPRoomRoleTableViewCell class])];
[_tableView registerClass:[XPRoomRoleEmptyTableViewCell class] forCellReuseIdentifier:NSStringFromClass([XPRoomRoleEmptyTableViewCell class])];
}
return _tableView;
}
- (NSMutableArray *)datasource {
if (!_datasource) {
_datasource = [NSMutableArray array];
}
return _datasource;
}
@end