1
This commit is contained in:
@@ -50,6 +50,7 @@
|
|||||||
#define API_THEME_LIST_BY_STYLE @"/themes/listByStyle" // 按风格查询主题列表
|
#define API_THEME_LIST_BY_STYLE @"/themes/listByStyle" // 按风格查询主题列表
|
||||||
#define API_THEME_PURCHASED @"/themes/purchased" // 查询已购买主题
|
#define API_THEME_PURCHASED @"/themes/purchased" // 查询已购买主题
|
||||||
#define API_WALLET_BALANCE @"/wallet/balance" // 查询钱包余额
|
#define API_WALLET_BALANCE @"/wallet/balance" // 查询钱包余额
|
||||||
|
#define API_THEME_DETAIL @"/themes/detail" // 查询主题详情
|
||||||
|
|
||||||
/// pay
|
/// pay
|
||||||
#define API_VALIDATE_RECEIPT @"/api/apple/validate-receipt" // 排行榜标签列表
|
#define API_VALIDATE_RECEIPT @"/api/apple/validate-receipt" // 排行榜标签列表
|
||||||
|
|||||||
@@ -205,8 +205,10 @@ static NSString * const kMySkinCellId = @"kMySkinCellId";
|
|||||||
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
|
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
|
||||||
if (!self.isEditingMode) {
|
if (!self.isEditingMode) {
|
||||||
// 非编辑态:可在此进入详情,当前示例不处理
|
// 非编辑态:可在此进入详情,当前示例不处理
|
||||||
|
KBMyTheme *theme = self.data[indexPath.item];
|
||||||
[collectionView deselectItemAtIndexPath:indexPath animated:YES];
|
[collectionView deselectItemAtIndexPath:indexPath animated:YES];
|
||||||
KBSkinDetailVC *vc = [[KBSkinDetailVC alloc] init];
|
KBSkinDetailVC *vc = [[KBSkinDetailVC alloc] init];
|
||||||
|
vc.themeId = theme.themeId;
|
||||||
[self.navigationController pushViewController:vc animated:true];
|
[self.navigationController pushViewController:vc animated:true];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -172,7 +172,9 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)kb_handleShopTapAtIndexPath:(NSIndexPath *)indexPath {
|
- (void)kb_handleShopTapAtIndexPath:(NSIndexPath *)indexPath {
|
||||||
|
KBShopThemeModel *selTheme = (indexPath.item < self.dataSource.count) ? self.dataSource[indexPath.item] : nil;
|
||||||
KBSkinDetailVC *vc = [[KBSkinDetailVC alloc] init];
|
KBSkinDetailVC *vc = [[KBSkinDetailVC alloc] init];
|
||||||
|
vc.themeId = selTheme.themeId;
|
||||||
[self.navigationController pushViewController:vc animated:true];
|
[self.navigationController pushViewController:vc animated:true];
|
||||||
return;
|
return;
|
||||||
KBShopThemeModel *theme = (indexPath.item < self.dataSource.count) ? self.dataSource[indexPath.item] : nil;
|
KBShopThemeModel *theme = (indexPath.item < self.dataSource.count) ? self.dataSource[indexPath.item] : nil;
|
||||||
|
|||||||
@@ -279,7 +279,7 @@ static const CGFloat JXheightForHeaderInSection = 50;
|
|||||||
[KBHUD show];
|
[KBHUD show];
|
||||||
}
|
}
|
||||||
__weak typeof(self) weakSelf = self;
|
__weak typeof(self) weakSelf = self;
|
||||||
[self.shopVM fetchWalletBalanceWithCompletion:^(NSNumber * _Nullable balance, NSError * _Nullable error) {
|
[self.shopVM fetchWalletBalanceWithCompletion:^(NSString * _Nullable balance, NSError * _Nullable error) {
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
if (showHUD) {
|
if (showHUD) {
|
||||||
[KBHUD dismiss];
|
[KBHUD dismiss];
|
||||||
@@ -289,9 +289,9 @@ static const CGFloat JXheightForHeaderInSection = 50;
|
|||||||
[KBHUD showInfo:msg];
|
[KBHUD showInfo:msg];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
double amountValue = balance.doubleValue;
|
// double amountValue = balance.doubleValue;
|
||||||
NSString *amountString = [NSString stringWithFormat:@"%.2f", amountValue];
|
// NSString *amountString = [NSString stringWithFormat:@"%.2f", amountValue];
|
||||||
[weakSelf.userHeaderView updatePoints:amountString];
|
[weakSelf.userHeaderView updatePoints:balance];
|
||||||
});
|
});
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
NS_ASSUME_NONNULL_BEGIN
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
@interface KBSkinDetailVC : BaseViewController
|
@interface KBSkinDetailVC : BaseViewController
|
||||||
|
@property (nonatomic, copy, nullable) NSString *themeId;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
#import "KBSkinCardCell.h"
|
#import "KBSkinCardCell.h"
|
||||||
#import "KBSkinSectionTitleCell.h"
|
#import "KBSkinSectionTitleCell.h"
|
||||||
#import "KBSkinBottomActionView.h"
|
#import "KBSkinBottomActionView.h"
|
||||||
|
#import "KBShopVM.h"
|
||||||
|
|
||||||
static NSString * const kHeaderCellId = @"kHeaderCellId";
|
static NSString * const kHeaderCellId = @"kHeaderCellId";
|
||||||
static NSString * const kTagsContainerCellId = @"kTagsContainerCellId";
|
static NSString * const kTagsContainerCellId = @"kTagsContainerCellId";
|
||||||
@@ -30,6 +31,7 @@ typedef NS_ENUM(NSInteger, KBSkinDetailSection) {
|
|||||||
@property (nonatomic, strong) KBSkinBottomActionView *bottomBar; // 底部操作条
|
@property (nonatomic, strong) KBSkinBottomActionView *bottomBar; // 底部操作条
|
||||||
@property (nonatomic, copy) NSArray<NSString *> *tags; // 标签数据
|
@property (nonatomic, copy) NSArray<NSString *> *tags; // 标签数据
|
||||||
@property (nonatomic, copy) NSArray<NSDictionary *> *gridData; // 底部网格数据
|
@property (nonatomic, copy) NSArray<NSDictionary *> *gridData; // 底部网格数据
|
||||||
|
@property (nonatomic, strong) KBShopVM *shopVM;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation KBSkinDetailVC
|
@implementation KBSkinDetailVC
|
||||||
@@ -65,6 +67,8 @@ typedef NS_ENUM(NSInteger, KBSkinDetailSection) {
|
|||||||
make.top.equalTo(self.view).offset(KB_NAV_TOTAL_HEIGHT);
|
make.top.equalTo(self.view).offset(KB_NAV_TOTAL_HEIGHT);
|
||||||
make.bottom.equalTo(self.bottomBar.mas_top).offset(-10);
|
make.bottom.equalTo(self.bottomBar.mas_top).offset(-10);
|
||||||
}];
|
}];
|
||||||
|
|
||||||
|
[self fetchThemeDetailIfNeeded];
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - UICollectionView DataSource
|
#pragma mark - UICollectionView DataSource
|
||||||
@@ -206,4 +210,30 @@ typedef NS_ENUM(NSInteger, KBSkinDetailSection) {
|
|||||||
// 预留:下载/购买动作
|
// 预留:下载/购买动作
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)fetchThemeDetailIfNeeded {
|
||||||
|
if (self.themeId.length == 0) {
|
||||||
|
NSLog(@"[KBSkinDetailVC] themeId is empty, skip detail request");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
__weak typeof(self) weakSelf = self;
|
||||||
|
[self.shopVM fetchThemeDetailWithId:self.themeId completion:^(NSDictionary * _Nullable json, NSError * _Nullable error) {
|
||||||
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
|
if (error) {
|
||||||
|
NSLog(@"[KBSkinDetailVC] fetch detail failed: %@", error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
NSLog(@"[KBSkinDetailVC] theme detail json: %@", json);
|
||||||
|
// TODO: parse json into models once the structure is finalized.
|
||||||
|
[weakSelf.collectionView reloadData];
|
||||||
|
});
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (KBShopVM *)shopVM {
|
||||||
|
if (!_shopVM) {
|
||||||
|
_shopVM = [[KBShopVM alloc] init];
|
||||||
|
}
|
||||||
|
return _shopVM;
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -18,7 +18,9 @@ typedef void(^KBShopStylesCompletion)(NSArray<KBShopStyleModel *> *_Nullable sty
|
|||||||
NSError *_Nullable error);
|
NSError *_Nullable error);
|
||||||
typedef void(^KBShopThemesCompletion)(NSArray<KBShopThemeModel *> *_Nullable themes,
|
typedef void(^KBShopThemesCompletion)(NSArray<KBShopThemeModel *> *_Nullable themes,
|
||||||
NSError *_Nullable error);
|
NSError *_Nullable error);
|
||||||
typedef void(^KBShopBalanceCompletion)(NSNumber *_Nullable balance,
|
typedef void(^KBShopBalanceCompletion)(NSString *_Nullable balance,
|
||||||
|
NSError *_Nullable error);
|
||||||
|
typedef void(^KBShopDetailCompletion)(NSDictionary *_Nullable json,
|
||||||
NSError *_Nullable error);
|
NSError *_Nullable error);
|
||||||
|
|
||||||
@interface KBShopVM : NSObject
|
@interface KBShopVM : NSObject
|
||||||
@@ -34,6 +36,10 @@ typedef void(^KBShopBalanceCompletion)(NSNumber *_Nullable balance,
|
|||||||
/// 查询钱包余额
|
/// 查询钱包余额
|
||||||
- (void)fetchWalletBalanceWithCompletion:(KBShopBalanceCompletion)completion;
|
- (void)fetchWalletBalanceWithCompletion:(KBShopBalanceCompletion)completion;
|
||||||
|
|
||||||
|
/// 查询主题详情
|
||||||
|
- (void)fetchThemeDetailWithId:(nullable NSString *)themeId
|
||||||
|
completion:(KBShopDetailCompletion)completion;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
NS_ASSUME_NONNULL_END
|
||||||
|
|||||||
@@ -99,17 +99,37 @@
|
|||||||
if (completion) completion(nil, [self kb_invalidResponseError]);
|
if (completion) completion(nil, [self kb_invalidResponseError]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
id balanceValue = dataObj[@"balance"];
|
NSString *balanceValue = dataObj[@"balanceDisplay"];
|
||||||
NSNumber *balanceNumber = nil;
|
// NSNumber *balanceNumber = nil;
|
||||||
if ([balanceValue isKindOfClass:[NSNumber class]]) {
|
// if ([balanceValue isKindOfClass:[NSNumber class]]) {
|
||||||
balanceNumber = balanceValue;
|
// balanceNumber = balanceValue;
|
||||||
} else if ([balanceValue isKindOfClass:[NSString class]]) {
|
// } else if ([balanceValue isKindOfClass:[NSString class]]) {
|
||||||
balanceNumber = @([(NSString *)balanceValue doubleValue]);
|
// balanceNumber = @([(NSString *)balanceValue doubleValue]);
|
||||||
|
// }
|
||||||
|
// if (!balanceNumber) {
|
||||||
|
// balanceNumber = @(0);
|
||||||
|
// }
|
||||||
|
if (completion) completion(balanceValue, nil);
|
||||||
|
}];
|
||||||
}
|
}
|
||||||
if (!balanceNumber) {
|
|
||||||
balanceNumber = @(0);
|
- (void)fetchThemeDetailWithId:(nullable NSString *)themeId
|
||||||
|
completion:(KBShopDetailCompletion)completion {
|
||||||
|
if (themeId.length == 0) {
|
||||||
|
if (completion) completion(nil, [self kb_invalidParameterError]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
NSDictionary *params = @{@"themeId": themeId};
|
||||||
|
[[KBNetworkManager shared] GET:API_THEME_DETAIL
|
||||||
|
parameters:params
|
||||||
|
headers:nil
|
||||||
|
autoShowBusinessError:NO
|
||||||
|
completion:^(NSDictionary * _Nullable json,
|
||||||
|
NSURLResponse * _Nullable response,
|
||||||
|
NSError * _Nullable error) {
|
||||||
|
if (completion) {
|
||||||
|
completion(json, error);
|
||||||
}
|
}
|
||||||
if (completion) completion(balanceNumber, nil);
|
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user