diff --git a/Shared/KBAPI.h b/Shared/KBAPI.h index 29ebc86..27615db 100644 --- a/Shared/KBAPI.h +++ b/Shared/KBAPI.h @@ -33,6 +33,7 @@ #define KB_API_USER_DETAIL @"/user/detail" // 用户详情 #define API_USER_INVITE_CODE @"/user/inviteCode" // 查询邀请码 +#define API_USER_CUSTOMER_MAIL @"/user/customerMail" // 获取客服邮箱 #define API_CHARACTER_LIST @"/character/list" // 排行榜角色列表(综合) #define API_NOT_LOGIN_CHARACTER_LIST @"/character/listWithNotLogin" //未登录用户人设列表 diff --git a/Shared/Localization/en.lproj/Localizable.strings b/Shared/Localization/en.lproj/Localizable.strings index ca9123f..7a0f9f1 100644 --- a/Shared/Localization/en.lproj/Localizable.strings +++ b/Shared/Localization/en.lproj/Localizable.strings @@ -82,6 +82,7 @@ "Network error" = "Network error"; "Saved" = "Saved"; "Copy Success" = "Copy Success"; +"Email Copy Success" = "Email Copy Success"; // Network "Network unavailable" = "Network unavailable"; diff --git a/Shared/Localization/zh-Hans.lproj/Localizable.strings b/Shared/Localization/zh-Hans.lproj/Localizable.strings index 85f7638..1f46e91 100644 --- a/Shared/Localization/zh-Hans.lproj/Localizable.strings +++ b/Shared/Localization/zh-Hans.lproj/Localizable.strings @@ -83,6 +83,7 @@ "Network error" = "网络错误"; "Saved" = "已保存"; "Copy Success" = "复制成功"; +"Email Copy Success" = "Email Copy Success"; // 网络相关(英文 key) "Network unavailable" = "网络不可用"; diff --git a/keyBoard/Class/Me/VC/MyVC.m b/keyBoard/Class/Me/VC/MyVC.m index 988317e..ec5830d 100644 --- a/keyBoard/Class/Me/VC/MyVC.m +++ b/keyBoard/Class/Me/VC/MyVC.m @@ -24,6 +24,7 @@ @property (nonatomic, strong) NSArray *> *data; // 分组数据 @property (nonatomic, strong) UIImageView *bgImageView; // 全屏背景图 @property (nonatomic, strong) KBMyVM *viewModel; // 我的页面 VM +@property (nonatomic, copy) NSString *customerMail; // 客服邮箱 @end @implementation MyVC @@ -43,7 +44,7 @@ // 数据源(title + SF Symbols 名称 + 色值),分两组 my_record_icon self.data = @[ @[@{ @"title": KBLocalized(@"Consumption Record"), @"icon": @"my_record_icon", @"color": @(0x60A3FF),@"id":@"8" }], - @[@{ @"title": KBLocalized(@"Notice"), @"icon": @"my_notice_icon", @"color": @(0x60A3FF),@"id":@"1" }], +// @[@{ @"title": KBLocalized(@"Notice"), @"icon": @"my_notice_icon", @"color": @(0x60A3FF),@"id":@"1" }], @[@{ @"title": KBLocalized(@"invite"), @"icon": @"my_share_icon", @"color": @(0xF5A623),@"id":@"2" }], @[@{ @"title": KBLocalized(@"Feedback"), @"icon": @"my_feedback_icon", @"color": @(0xB06AFD),@"id":@"3" }, @{ @"title": KBLocalized(@"E-mail"), @"icon": @"my_email_icon", @"color": @(0xFF8A65),@"id":@"4" }, @@ -63,6 +64,11 @@ self.header = [[KBMyHeaderView alloc] initWithFrame:CGRectMake(0, 0, KB_SCREEN_WIDTH, 357)]; self.header.backgroundColor = UIColor.clearColor; // 透明,显示背景图 self.tableView.tableHeaderView = self.header; + + if (!self.viewModel) { + self.viewModel = [[KBMyVM alloc] init]; + } + [self loadCustomerMailOnce]; } - (void)viewWillAppear:(BOOL)animated { @@ -81,6 +87,30 @@ // 系统导航栏的显隐由 BaseViewController 统一处理(始终隐藏),此处无需再设置。 +/// 1:viewDidLoad 触发一次,预加载客服邮箱 +- (void)loadCustomerMailOnce { + __weak typeof(self) weakSelf = self; + [self.viewModel fetchCustomerMailWithCompletion:^(NSString * _Nullable customerMail, NSError * _Nullable error) { + if (error) { return; } + dispatch_async(dispatch_get_main_queue(), ^{ + __strong typeof(weakSelf) self = weakSelf; + if (!self) { return; } + self.customerMail = customerMail; + }); + }]; +} + +/// 2:点击 E-mail 复制邮箱并提示 +- (void)handleEmailCopy { + NSString *mail = [self.customerMail stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; + if (mail.length == 0) { + [KBHUD showInfo:KBLocalized(@"Failed")]; + return; + } + UIPasteboard.generalPasteboard.string = mail; + [KBHUD showInfo:KBLocalized(@"Email Copy Success")]; +} + #pragma mark - UITableView - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return self.data.count; } @@ -185,7 +215,7 @@ [self.navigationController pushViewController:[KBFeedBackVC new] animated:true]; }else if ([itemID isEqualToString:@"4"]){ - + [self handleEmailCopy]; }else if ([itemID isEqualToString:@"5"]){ }else if ([itemID isEqualToString:@"6"]){ diff --git a/keyBoard/Class/Me/VM/KBMyVM.h b/keyBoard/Class/Me/VM/KBMyVM.h index f616723..4f06002 100644 --- a/keyBoard/Class/Me/VM/KBMyVM.h +++ b/keyBoard/Class/Me/VM/KBMyVM.h @@ -30,6 +30,7 @@ typedef void(^KBDeleteThemesCompletion)(BOOL success, NSError *_Nullable error); typedef void(^KBSubmitFeedbackCompletion)(BOOL success, NSError *_Nullable error); typedef void(^KBMyPurchaseRecordCompletion)(NSArray *_Nullable records, NSError *_Nullable error); typedef void(^KBMyInviteCodeCompletion)(KBInviteCodeModel *_Nullable inviteCode, NSError *_Nullable error); +typedef void(^KBMyCustomerMailCompletion)(NSString *_Nullable customerMail, NSError *_Nullable error); @interface KBMyVM : NSObject @@ -37,6 +38,8 @@ typedef void(^KBMyInviteCodeCompletion)(KBInviteCodeModel *_Nullable inviteCode, - (void)fetchUserDetailWithCompletion:(KBMyUserDetailCompletion)completion; /// 查询邀请码(/user/inviteCode) - (void)fetchInviteCodeWithCompletion:(KBMyInviteCodeCompletion)completion; +/// 获取客服邮箱(/user/customerMail) +- (void)fetchCustomerMailWithCompletion:(KBMyCustomerMailCompletion)completion; /// 用户人设列表(/character/listByUser) - (void)fetchCharacterListByUserWithCompletion:(KBCharacterListCompletion)completion; diff --git a/keyBoard/Class/Me/VM/KBMyVM.m b/keyBoard/Class/Me/VM/KBMyVM.m index 5a92ac6..68d56a6 100644 --- a/keyBoard/Class/Me/VM/KBMyVM.m +++ b/keyBoard/Class/Me/VM/KBMyVM.m @@ -83,6 +83,35 @@ NSString * const KBUserCharacterDeletedNotification = @"KBUserCharacterDeletedNo }]; } +- (void)fetchCustomerMailWithCompletion:(KBMyCustomerMailCompletion)completion { + [[KBNetworkManager shared] GET:API_USER_CUSTOMER_MAIL + parameters:nil + headers:nil + autoShowBusinessError:NO + completion:^(NSDictionary *jsonOrData, NSURLResponse * _Nullable response, NSError * _Nullable error) { + if (error) { + if (completion) completion(nil, error); + return; + } + + // 返回结构:{ "message":"ok", "data":"123@mail.com", "code":0 } + id dataObj = jsonOrData[@"data"]; + NSString *customerMail = [dataObj isKindOfClass:[NSString class]] + ? [(NSString *)dataObj stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] + : @""; + + if (customerMail.length == 0) { + NSError *e = [NSError errorWithDomain:KBNetworkErrorDomain + code:KBNetworkErrorInvalidResponse + userInfo:@{NSLocalizedDescriptionKey: KBLocalized(@"Invalid response")}]; + if (completion) completion(nil, e); + return; + } + + if (completion) completion(customerMail, nil); + }]; +} + - (void)fetchCharacterListByUserWithCompletion:(KBCharacterListCompletion)completion{ [[KBNetworkManager shared] GET:KB_API_CHARACTER_LISTBYUSER parameters:nil