// // NewMineViewController.m // YuMi // // Created by AI on 2025-10-09. // Copyright © 2025 YuMi. All rights reserved. // #import "EPMineViewController.h" #import "NewMineHeaderView.h" #import #import "Api+Mine.h" #import "AccountInfoStorage.h" #import "UserInfoModel.h" #import "WalletInfoModel.h" #import #import "XPSkillCardPlayerManager.h" @interface NewMineViewController () // MARK: - UI Components /// 主列表 @property (nonatomic, strong) UITableView *tableView; /// 顶部个人信息卡片 @property (nonatomic, strong) NewMineHeaderView *headerView; /// 设置按钮 @property (nonatomic, strong) UIButton *settingsButton; // MARK: - Data /// 菜单项数据源 @property (nonatomic, strong) NSArray *menuItems; /// 用户信息模型 @property (nonatomic, strong) UserInfoModel *userInfo; /// 钱包信息模型 @property (nonatomic, strong) WalletInfoModel *walletInfo; @end @implementation EPMineViewController // MARK: - Lifecycle - (void)viewDidLoad { [super viewDidLoad]; self.title = @"我的"; self.view.backgroundColor = [UIColor colorWithRed:0.96 green:0.96 blue:0.96 alpha:1.0]; // 浅灰背景 [self setupNavigationBar]; [self setupUI]; [self loadData]; NSLog(@"[NewMineViewController] 页面加载完成"); } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; // 刷新用户信息 [self refreshUserInfo]; } // MARK: - Setup - (void)setupNavigationBar { // 设置按钮(右上角) self.settingsButton = [UIButton buttonWithType:UIButtonTypeSystem]; [self.settingsButton setTitle:@"⚙️" forState:UIControlStateNormal]; self.settingsButton.titleLabel.font = [UIFont systemFontOfSize:24]; [self.settingsButton addTarget:self action:@selector(onSettingsButtonTapped) forControlEvents:UIControlEventTouchUpInside]; UIBarButtonItem *settingsBarButton = [[UIBarButtonItem alloc] initWithCustomView:self.settingsButton]; self.navigationItem.rightBarButtonItem = settingsBarButton; } - (void)setupUI { // TableView [self.view addSubview:self.tableView]; [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(self.view); }]; // 设置头部视图 self.tableView.tableHeaderView = self.headerView; NSLog(@"[NewMineViewController] UI 设置完成"); } // MARK: - Data Loading - (void)loadData { // 菜单项配置(完全不同的顺序和图标) self.menuItems = @[ @{@"title": @"💎 我的钱包", @"type": @"wallet"}, @{@"title": @"📊 数据统计", @"type": @"stats"}, @{@"title": @"⭐️ 我的收藏", @"type": @"favorites"}, @{@"title": @"📝 编辑资料", @"type": @"profile"}, @{@"title": @"🔔 消息通知", @"type": @"notifications"}, @{@"title": @"🎨 主题设置", @"type": @"theme"}, @{@"title": @"🌐 语言切换", @"type": @"language"}, @{@"title": @"ℹ️ 关于我们", @"type": @"about"}, ]; [self.tableView reloadData]; } - (void)refreshUserInfo { NSString *uid = [[AccountInfoStorage instance] getUid]; if (!uid.length) { NSLog(@"[NewMineViewController] 未登录,无法获取用户信息"); return; } // 调用真实 API 获取用户信息 [Api getUserInfo:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { if (code == 200 && data.data) { self.userInfo = [UserInfoModel mj_objectWithKeyValues:data.data]; // 更新头部视图 NSDictionary *userInfoDict = @{ @"nickname": self.userInfo.nick ?: @"未设置昵称", @"avatar": self.userInfo.avatar ?: @"", // @"level": @(self.userInfo.charmLevel), // @"exp": @(self.userInfo.charmLevelExp), // @"nextLevelExp": @(self.userInfo.nextCharmLevelExp), @"followers": @(self.userInfo.fansNum), @"following": @(self.userInfo.followNum), }; [self.headerView configureWithUserInfo:userInfoDict]; NSLog(@"[NewMineViewController] 用户信息加载成功: %@", self.userInfo.nick); } else { NSLog(@"[NewMineViewController] 用户信息加载失败: %@", msg); } } uid:uid]; // 同时获取钱包信息 [self refreshWalletInfo]; } - (void)refreshWalletInfo { NSString *uid = [[AccountInfoStorage instance] getUid]; NSString *ticket = [[AccountInfoStorage instance] getTicket]; if (!uid.length || !ticket.length) return; // TODO: 使用 api-presnter, 参照其他 VC // [Api getUserWalletInfo:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { // if (code == 200 && data.data) { // self.walletInfo = [WalletInfoModel mj_objectWithKeyValues:data.data]; // NSLog(@"[NewMineViewController] 钱包信息加载成功: 钻石=%ld 金币=%ld", // (long)self.walletInfo.diamond, (long)self.walletInfo.money); // } // } fail:^(NSInteger code, NSString * _Nullable msg) { // NSLog(@"[NewMineViewController] 钱包信息加载失败: %@", msg); // } uid:uid ticket:ticket]; } // MARK: - Actions - (void)onSettingsButtonTapped { NSLog(@"[NewMineViewController] 设置按钮点击"); // TODO: 跳转到设置页面 [self showAlertWithMessage:@"设置功能开发中"]; } - (void)onMenuItemTapped:(NSDictionary *)item { NSString *type = item[@"type"]; NSString *title = item[@"title"]; NSLog(@"[NewMineViewController] 菜单项点击: %@", type); if ([type isEqualToString:@"wallet"]) { // TODO: 跳转到钱包页面 [self showAlertWithMessage:@"钱包功能开发中"]; } else if ([type isEqualToString:@"stats"]) { // TODO: 跳转到数据统计页面 [self showAlertWithMessage:@"数据统计功能开发中"]; } else if ([type isEqualToString:@"favorites"]) { // TODO: 跳转到收藏页面 [self showAlertWithMessage:@"收藏功能开发中"]; } else if ([type isEqualToString:@"profile"]) { // TODO: 跳转到编辑资料页面 [self showAlertWithMessage:@"编辑资料功能开发中"]; } else { [self showAlertWithMessage:[NSString stringWithFormat:@"%@ 功能开发中", title]]; } } - (void)showAlertWithMessage:(NSString *)message { UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:message preferredStyle:UIAlertControllerStyleAlert]; [alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil]]; [self presentViewController:alert animated:YES completion:nil]; } // MARK: - UITableViewDataSource - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.menuItems.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *identifier = @"MenuCell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; cell.backgroundColor = [UIColor whiteColor]; cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; cell.textLabel.font = [UIFont systemFontOfSize:15]; cell.textLabel.textColor = [UIColor colorWithWhite:0.2 alpha:1.0]; } if (indexPath.row < self.menuItems.count) { NSDictionary *item = self.menuItems[indexPath.row]; cell.textLabel.text = item[@"title"]; } return cell; } // MARK: - UITableViewDelegate - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deselectRowAtIndexPath:indexPath animated:YES]; if (indexPath.row < self.menuItems.count) { NSDictionary *item = self.menuItems[indexPath.row]; [self onMenuItemTapped:item]; } } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 56; // 卡片式高度 } - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 15; // 上间距 } - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { UIView *header = [[UIView alloc] init]; header.backgroundColor = [UIColor clearColor]; return header; } // MARK: - Lazy Loading - (UITableView *)tableView { if (!_tableView) { _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; _tableView.delegate = self; _tableView.dataSource = self; _tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine; _tableView.separatorInset = UIEdgeInsetsMake(0, 15, 0, 15); _tableView.backgroundColor = self.view.backgroundColor; _tableView.showsVerticalScrollIndicator = NO; _tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; } return _tableView; } - (NewMineHeaderView *)headerView { if (!_headerView) { _headerView = [[NewMineHeaderView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 280)]; } return _headerView; } @end