KWMNewHomeVC.m 17.7 KB
Newer Older
houweibin committed
1 2 3 4 5 6 7 8 9 10
//
//  KWMNewHomeVC.m
//  iCemarose
//
//  Created by HouWeiBin on 2017/7/10.
//  Copyright © 2017年 kollway. All rights reserved.
//

#import "KWMNewHomeVC.h"
#import "KWMShopCartVC.h"
houweibin committed
11
#import "KWMSearchFeedbackVC.h"
houweibin committed
12 13
#import "KWMNewHomeCell.h"
#import "KWMSearchBar.h"
houweibin committed
14
#import "KWMHomeData.h"
houweibin committed
15
#import "KWMShoppingCart.h"
lee committed
16 17
#import <RegexKitLite/RegexKitLite.h>
#import <RXCollections/RXCollection.h>
lee committed
18
#import "KWMHomeVC.h"
lee committed
19 20
#import "KWMWishListVC.h"
#import <MJRefresh.h>
u  
lee committed
21
#import "KWMStringUtil.h"
houweibin committed
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53

typedef enum{
    
    HeaderAd=0,
    
    HeaderMenu=1,
    
    HeaderRecommend=2,
    
    HeaderClothingSets=3,

    HeaderHotSales=4,
    
}Header;


@interface KWMNewHomeVC ()

@property(nonatomic,weak) IBOutlet UICollectionView *cvHome;

@property(nonatomic,strong) KWMAdHeader *adHeader;

@property(nonatomic,strong) KWMMenuHeader *menuHeader;

@property(nonatomic,strong) KWMRecommendHeader *recommendHeader;

@property(nonatomic,strong) KWMClothingSetsHeader *clothingSetsHeader;

@property(nonatomic,strong) KWMHotSalesHeader *hotSalesHeader;

@property(nonatomic,strong) KWMSearchBar *titleView;

houweibin committed
54 55
@property(nonatomic) KWMHomeData *homeData;

lee committed
56 57
@property(nonatomic) NSInteger page;

lee committed
58 59 60
@property(nonatomic) NSMutableArray<BUYProduct *>* productArray;

@property(nonatomic) NSMutableDictionary *dataMapping;
houweibin committed
61

r  
lee committed
62
//@property(nonatomic) NSString *clotingSetsHandle;
houweibin committed
63

houweibin committed
64 65
@end

houweibin committed
66 67 68 69
@implementation KWMNewHomeVC{
    CGFloat heightAdHeader;
    CGFloat heightClothingSets;
}
houweibin committed
70 71 72 73

- (void)viewDidLoad {
    [super viewDidLoad];
    [self initView];
lee committed
74
    self.page = 1;
lee committed
75 76 77
//    [self requestProduct:@""];
    [self loadHomeData];
    
houweibin committed
78 79 80 81 82 83 84 85 86 87
}

- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:YES];
    if (self.titleView) {
        NSInteger count = [[KWMShoppingCart sharedInstance] count].integerValue;
        self.titleView.count = count;
        [self.titleView resumeView];
    }
lee committed
88
    [self.cvHome reloadData];
houweibin committed
89 90 91 92 93 94
}

-(void)viewDidDisappear:(BOOL)animated{
    [super viewDidDisappear:animated];
}

houweibin committed
95

houweibin committed
96
- (void)initView{
lee committed
97
//    self.title = @"首页";
houweibin committed
98 99 100
    heightAdHeader = UI_SCREEN_WIDTH * 275 / 375;
    heightClothingSets = UI_SCREEN_WIDTH * 190 / 375 + 127; //127为图片外的布局高度
    self.adHeader = [[KWMAdHeader alloc]initWithFrame:CGRectMake(0, 0, UI_SCREEN_WIDTH, heightAdHeader)];
houweibin committed
101 102
    self.menuHeader = [[KWMMenuHeader alloc]initWithFrame:CGRectMake(0, 0, UI_SCREEN_WIDTH, 100)];
    self.recommendHeader = [[KWMRecommendHeader alloc]initWithFrame:CGRectMake(0, 0, UI_SCREEN_WIDTH, 230)];
houweibin committed
103
    self.clothingSetsHeader = [[KWMClothingSetsHeader alloc]initWithFrame:CGRectMake(0, 0, UI_SCREEN_WIDTH, heightClothingSets)];
houweibin committed
104
    self.hotSalesHeader = [[KWMHotSalesHeader alloc]initWithFrame:CGRectMake(0, 0, UI_SCREEN_WIDTH, 250)];
houweibin committed
105 106 107 108 109 110 111
    
    self.adHeader.delegate = self;
    self.menuHeader.delegate = self;
    self.recommendHeader.delegate = self;
    self.clothingSetsHeader.delegate = self;
    self.hotSalesHeader.delegate = self;
    
houweibin committed
112 113 114 115 116
    [self initTitleView];
    [self initCollectionView];
}

-(void)initTitleView{
houweibin committed
117
    self.titleView = [[KWMSearchBar alloc] init];
houweibin committed
118
    self.titleView.delegate = self;
houweibin committed
119
    self.titleView.btnSearch.hidden = NO;
houweibin committed
120
    [self.view addSubview:self.titleView];
houweibin committed
121
    [self initCustomTitleBarConstarints:self.titleView];
houweibin committed
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
}

- (void)initCollectionView{
    
    CHTCollectionViewWaterfallLayout *layout = [[CHTCollectionViewWaterfallLayout alloc] init];
    layout.sectionInset = UIEdgeInsetsMake(10, 10, 10, 10);
    layout.minimumColumnSpacing = 10;
    layout.minimumInteritemSpacing = 10;
    layout.columnCount = 2;
    self.cvHome.collectionViewLayout = layout;
    
    [self.cvHome registerNib:[UINib nibWithNibName:NSStringFromClass([KWMNewHomeCell class]) bundle:nil] forCellWithReuseIdentifier:NSStringFromClass([KWMNewHomeCell class])];
    
    [self.cvHome registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:CHTCollectionElementKindSectionHeader withReuseIdentifier:[KWMAdHeader kwmTag]];
    [self.cvHome registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:CHTCollectionElementKindSectionHeader withReuseIdentifier:[KWMHotSalesHeader kwmTag]];
    [self.cvHome registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:CHTCollectionElementKindSectionHeader withReuseIdentifier:[KWMRecommendHeader kwmTag]];
    [self.cvHome registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:CHTCollectionElementKindSectionHeader withReuseIdentifier:[KWMClothingSetsHeader kwmTag]];
    [self.cvHome registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:CHTCollectionElementKindSectionHeader withReuseIdentifier:[KWMMenuHeader kwmTag]];
lee committed
140
    
141 142 143
    MJRefreshAutoNormalFooter *refreshFooter = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMore)];
    [refreshFooter setTitle:NO_MORE_DATA forState:MJRefreshStateNoMoreData];
    self.cvHome.mj_footer = refreshFooter;
lee committed
144 145 146 147
}

- (void) loadMore {
    [self requestProductWithHandle:@"products-list-app-homepage" tags:nil valueKeyPath:@"productArray"];
houweibin committed
148 149
}

houweibin committed
150 151
#pragma mark - KWMAdDelegate
-(void)kwm_gotoWebView:(NSString *)url{
u  
lee committed
152 153 154
    if (![KWMStringUtil isBlank:url]) {
        [self openURLWithString:url];
    }
houweibin committed
155 156 157 158
}

#pragma mark - KWMMenuDelegate
-(void)kwm_onClickHotMenu{
159 160 161 162 163
//    if([TestModel isEqualToString:@"YES"]){
//        [self openURLWithString:[NSString stringWithFormat:@"https://cemarose.myshopify.com/products/%@",@"17618-01"]];
//    }else{
    [self openURLWithString:@"https://cemarose.myshopify.com/collections/new?title=最新单品"];
//    }
houweibin committed
164 165 166
}

-(void)kwm_onClickNewMenu{
lee committed
167 168
    KWMHomeVC* selectedGoodsVC = (KWMHomeVC *)[KWMBaseVC findControllerBy:[KWMHomeVC kwmTag] fromStoryboard:@"Main"];
    [self.navigationController pushViewController:selectedGoodsVC animated:YES];
houweibin committed
169 170 171
}

-(void)kwm_onClickWishMenu{
lee committed
172
    NSLog(@"wishmenu");
houweibin committed
173 174 175
    if(![self checkLogin]){
        return;
    }
lee committed
176 177
    KWMWishListVC* vc= (KWMWishListVC *)[KWMBaseVC findControllerBy:[KWMWishListVC kwmTag] fromStoryboard:@"NewProduct"];
    [self.navigationController pushViewController:vc animated:YES];
houweibin committed
178 179 180
}

-(void)kwm_onClickDeliveryMenu{
lee committed
181
    NSLog(@"deliverymenu");
u  
lee committed
182
    [self openURLWithString:@"https://www.cemarose.com/pages/service-description/?title=服务说明"];
houweibin committed
183 184
}

houweibin committed
185 186
#pragma mark - KWMRecommendDelegate
-(void)kwm_gotoRecommendPage{
187
    [self openURLWithString:@"https://cemarose.myshopify.com/collections/hot-sell-app?title=主推单品"];
houweibin committed
188 189
}

u  
lee committed
190
-(void)kwm_onClickHotSalesAd:(KWMAdvertisement *)ad {
lee committed
191 192 193
    if (![KWMStringUtil isBlank:ad.url]) {
        [self openURLWithString:ad.url];
    }
u  
lee committed
194 195 196 197 198 199 200 201
}

-(void)kwm_onClickFocusImage {
    if (![KWMStringUtil isBlank:self.homeData.clothing_sets.action]) {
        [self openURLWithString:self.homeData.clothing_sets.action];
    }
}

houweibin committed
202
-(void)kwm_gotoClothingSetsPage{
r  
lee committed
203
//    [self openURLWithString:[NSString stringWithFormat:@"https://cemarose.myshopify.com/collections/%@",self.clotingSetsHandle]];
lee committed
204 205 206
    if (![KWMStringUtil isBlank:self.homeData.clothing_sets.url]) {
        [self openURLWithString:self.homeData.clothing_sets.url];
    }
houweibin committed
207 208 209
}

#pragma mark - KWMRecommendDelegate KWMClothingSetsDelegate KWMHotSalesDelegate
houweibin committed
210
-(void)kwm_onClickProduct:(BUYProduct *)product{
lee committed
211 212
//    NSLog(@"product");
    [self openURLWithString:[NSString stringWithFormat:@"https://cemarose.myshopify.com/products/%@",product.handle]];
213
//    [self openURLWithString:[NSString stringWithFormat:@"https://cemarose.myshopify.com/products/19247-01"]];
houweibin committed
214 215
}

houweibin committed
216 217 218 219 220 221 222
#pragma mark - UICollectionViewDataSource
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
    return 5;
}

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    if(section == HeaderHotSales){
houweibin committed
223
        return self.productArray ? self.productArray.count:0;
houweibin committed
224 225 226 227 228 229
    }
    return 0;
}

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    KWMNewHomeCell *homeCell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([KWMNewHomeCell class]) forIndexPath:indexPath];
houweibin committed
230 231
    BUYProduct *product = [self.productArray objectAtIndex:indexPath.row];
    homeCell.product = product;
houweibin committed
232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279
    return homeCell;
}

-(UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{
    UICollectionReusableView *headerView;
    if (kind == CHTCollectionElementKindSectionHeader) {
        switch (indexPath.section) {
            case HeaderAd:
                headerView = [collectionView dequeueReusableSupplementaryViewOfKind:CHTCollectionElementKindSectionHeader withReuseIdentifier:[KWMAdHeader kwmTag] forIndexPath:indexPath];
                if(headerView.subviews.count == 0){
                    [headerView addSubview:self.adHeader];
                }
                break;
            case HeaderMenu:
                headerView = [collectionView dequeueReusableSupplementaryViewOfKind:CHTCollectionElementKindSectionHeader withReuseIdentifier:[KWMMenuHeader kwmTag] forIndexPath:indexPath];
                if(headerView.subviews.count == 0){
                    [headerView addSubview:self.menuHeader];
                }
                break;
            case HeaderRecommend:
                headerView = [collectionView dequeueReusableSupplementaryViewOfKind:CHTCollectionElementKindSectionHeader withReuseIdentifier:[KWMRecommendHeader kwmTag] forIndexPath:indexPath];
                if(headerView.subviews.count == 0){
                    [headerView addSubview:self.recommendHeader];
                }
                break;
            case HeaderClothingSets:
                headerView = [collectionView dequeueReusableSupplementaryViewOfKind:CHTCollectionElementKindSectionHeader withReuseIdentifier:[KWMClothingSetsHeader kwmTag] forIndexPath:indexPath];
                if(headerView.subviews.count == 0){
                    [headerView addSubview:self.clothingSetsHeader];
                }
                break;
            case HeaderHotSales:
                headerView = [collectionView dequeueReusableSupplementaryViewOfKind:CHTCollectionElementKindSectionHeader withReuseIdentifier:[KWMHotSalesHeader kwmTag] forIndexPath:indexPath];
                if(headerView.subviews.count == 0){
                    [headerView addSubview:self.hotSalesHeader];
                }
                break;
            default:
                break;
        }
    }
    return headerView;
}

-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout heightForHeaderInSection:(NSInteger)section{
    NSInteger height = 0;
    switch (section) {
        case HeaderAd:
houweibin committed
280
            height = heightAdHeader;
houweibin committed
281 282 283 284 285 286 287 288
            break;
        case HeaderMenu:
            height = 100;
            break;
        case HeaderRecommend:
            height = 230;
            break;
        case HeaderClothingSets:
houweibin committed
289
            height = heightClothingSets;
houweibin committed
290 291
            break;
        case HeaderHotSales:
houweibin committed
292
            height = self.hotSalesHeader.actrualHeight;
houweibin committed
293 294 295 296 297 298 299 300 301
            break;
        default:
            break;
    }
    return height;
}

#pragma mark - CHTCollectionViewDelegateWaterfallLayout
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
lee committed
302
    [self kwm_onClickProduct:self.productArray[indexPath.item]];
houweibin committed
303 304 305
}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
houweibin committed
306 307 308 309
    BUYProduct *product = [self.productArray objectAtIndex:indexPath.row];
    NSInteger width = (UI_SCREEN_WIDTH-30)/2;
    NSInteger height = [KWMNewHomeCell acturlHeight:product width:width];
    CGSize size = CGSizeMake(width, height);
houweibin committed
310 311 312 313 314 315 316 317 318 319
    return size;
}

#pragma mark - KWMSearchBarDelegate
- (void)kwm_onClickShopCar{
    //购物车
    KWMShopCartVC *contactVC = (KWMShopCartVC *)[KWMBaseVC findControllerBy:[KWMShopCartVC kwmTag] fromStoryboard:@"ShopCart"];
    [self.navigationController pushViewController:contactVC animated:YES];
}

houweibin committed
320 321 322 323 324
-(void)kwm_startSearch{
    KWMSearchFeedbackVC *vc = (KWMSearchFeedbackVC *)[KWMBaseVC findControllerBy:[KWMSearchFeedbackVC kwmTag] fromStoryboard:@"New"];
    [self.navigationController pushViewController:vc animated:YES];
}

houweibin committed
325
#pragma makr - api
lee committed
326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348
//- (void)requestProduct:(NSString *)tag{
//    NSMutableArray *tags = nil;
//    if(tag){
//        tags = [NSMutableArray array];
//        [tags addObject:tag];
//    }
//    
//    __weak KWMNewHomeVC *weakSelf = self;
//    [self showLoading];
//    [self.client getProductsPage:1 inCollection:@(Collection_All_ID) withTags:tags sortOrder:BUYCollectionSortBestSelling completion:^(NSArray *products,NSUInteger page, BOOL reachedEnd, NSError *error){
//        [weakSelf hideLoading];
//        if(error){
//            [weakSelf showError:error];
//        }
//        else if(products && products.count>0){
//            weakSelf.productArray = products;
//            [weakSelf.cvHome reloadData];
////            [weakSelf initTestData];
//        }
//    }];    
//}

- (void) requestProductWithHandle:(NSString *) handle tags:(NSArray *) tags valueKeyPath:(NSString *) valueKeyPath {
houweibin committed
349
    [self showLoading];
lee committed
350 351
    BOOL isHome = [handle isEqualToString:@"products-list-app-homepage"];
    NSInteger cpage = isHome ? self.page : 1;
lee committed
352 353
    [self.client getCollectionByHandle:handle completion:^(BUYCollection * _Nullable collection, NSError * _Nullable error) {
        if (!error) {
lee committed
354
            [self.client getProductsPage:cpage inCollection:collection.identifier withTags:tags sortOrder:BUYCollectionSortCollectionDefault completion:^(NSArray<BUYProduct *> * _Nullable products, NSUInteger page, BOOL reachedEnd, NSError * _Nullable error) {
lee committed
355
                [self hideLoading];
lee committed
356
                
lee committed
357 358 359 360 361 362
                if (!error) {
                    [self setValue:products forKeyPath:valueKeyPath];
                    [self.cvHome reloadData];
                }else{
                    [self showError:error];
                }
lee committed
363 364 365 366
                if (isHome) {
                    self.page = self.page + 1;
                    products.count ? [self.cvHome.mj_footer endRefreshing] : [self.cvHome.mj_footer endRefreshingWithNoMoreData];
                }
lee committed
367 368 369 370
            }];
        }else{
            [self hideLoading];
            [self showError:error];
houweibin committed
371
        }
lee committed
372
    }];
houweibin committed
373 374
}

u  
lee committed
375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392
//- (void) requestProductWithId:(NSNumber *) identifier tags:(NSArray *) tags valueKeyPath:(NSString *) valueKeyPath home:(BOOL) isHome page:(NSInteger) cpage{
//    [self showLoading];
//    [self.client getProductsPage:cpage inCollection:identifier withTags:tags sortOrder:BUYCollectionSortCollectionDefault completion:^(NSArray<BUYProduct *> * _Nullable products, NSUInteger page, BOOL reachedEnd, NSError * _Nullable error) {
//        [self hideLoading];
//        
//        if (!error) {
//            [self setValue:products forKeyPath:valueKeyPath];
//            [self.cvHome reloadData];
//        }else{
//            [self showError:error];
//        }
//        if (isHome) {
//            self.page = self.page + 1;
//            products.count ? [self.cvHome.mj_footer endRefreshing] : [self.cvHome.mj_footer endRefreshingWithNoMoreData];
//        }
//    }];
//}

lee committed
393 394 395 396 397 398 399 400 401
- (void) loadHomeData {
    [self requestProductWithHandle:@"hot-sell-app" tags:nil valueKeyPath:@"recommendHeader.productArray"];
    [self.api getHomeDataWithSuccess:^(NSURLSessionDataTask *task, KWMHomeDataResult *result) {
        self.homeData = result.data;
        [self.cvHome reloadData];
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        [self showError:error];
    }];
}
houweibin committed
402

lee committed
403 404
- (void)setHomeData:(KWMHomeData *)homeData {
    _homeData = homeData;
u  
lee committed
405 406 407
//#if DEBUG
//    [self.homeData.ad_banner[0] setUrl:@"https://www.cemarose.com/pages/sale_test_111"];
//#endif
u  
lee committed
408
//    [self.homeData.ad_banner[0] setUrl:@"https://www.cemarose.cn/collections/skirts/girls"];
lee committed
409
    self.adHeader.adArray = self.homeData.ad_banner;
u  
lee committed
410
    self.hotSalesHeader.bannerArray = self.homeData.hot_sales_ads;
411
//    self.homeData.hot_sales.single_show_count = @(1);
lee committed
412
    self.clothingSetsHeader.headerImage = self.homeData.clothing_sets.image;
u  
lee committed
413 414 415
//    self.homeData.clothing_sets.url =@"https://www.cemarose.cn/collections/skirts/girls+spring-summer-2016?title=ml";
    NSURL *url = [[NSURL alloc] initWithString:self.homeData.clothing_sets.url];
    NSArray *clothingParam = [url.path arrayOfCaptureComponentsMatchedByRegex:@"collections\\/([^/]*+)\\/?(.*)$"];
lee committed
416 417 418 419 420
    if (clothingParam.count) {
        clothingParam = clothingParam.firstObject;
        NSString *handle = clothingParam.count > 1 ? clothingParam[1] : nil;
        NSArray *tags = clothingParam.count > 2 ? [clothingParam[2] componentsSeparatedByString:@"+"] : nil;
        if (handle) {
r  
lee committed
421
//            self.clotingSetsHandle = handle;
lee committed
422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443
            [self requestProductWithHandle:handle tags:tags valueKeyPath:@"clothingSetsHeader.productArray"];
        }
    }
    [self requestProductWithHandle:@"products-list-app-homepage" tags:nil valueKeyPath:@"productArray"];
}

- (void)setProductArray:(NSArray<BUYProduct *> *)productArray {
    if (!_productArray) {
        NSInteger ssize = self.homeData.hot_sales.single_show_count.integerValue;
        NSInteger count = productArray.count;
        self.hotSalesHeader.singleShowArray = count <= ssize ? productArray : [productArray subarrayWithRange:NSMakeRange(0, ssize)];
        _productArray = [[NSMutableArray alloc] init];
//        [_productArray addObjectsFromArray:[productArray subarrayWithRange:NSMakeRange(self.homeData.hot_sales.single_show_count.integerValue, 99)]];
        if (count > ssize) {
        [_productArray addObjectsFromArray:[productArray subarrayWithRange:NSMakeRange(ssize, count - ssize)]];
        }
    }else{
        [_productArray addObjectsFromArray:productArray];
    }
//    _productArray = productArray;
    
}
houweibin committed
444 445

@end