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 117 118
    [self initTitleView];
    [self initCollectionView];
}

-(void)initTitleView{
    self.titleView = [[KWMSearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 64)];
    self.titleView.delegate = self;
houweibin committed
119
    self.titleView.btnSearch.hidden = NO;
houweibin committed
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
    [self.view addSubview:self.titleView];
}

- (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
139
    
140 141 142
    MJRefreshAutoNormalFooter *refreshFooter = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMore)];
    [refreshFooter setTitle:NO_MORE_DATA forState:MJRefreshStateNoMoreData];
    self.cvHome.mj_footer = refreshFooter;
lee committed
143 144 145 146
}

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

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

#pragma mark - KWMMenuDelegate
-(void)kwm_onClickHotMenu{
158 159 160 161 162
//    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
163 164 165
}

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

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

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

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

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

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

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

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

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

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

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    KWMNewHomeCell *homeCell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([KWMNewHomeCell class]) forIndexPath:indexPath];
houweibin committed
229 230
    BUYProduct *product = [self.productArray objectAtIndex:indexPath.row];
    homeCell.product = product;
houweibin committed
231 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
    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
279
            height = heightAdHeader;
houweibin committed
280 281 282 283 284 285 286 287
            break;
        case HeaderMenu:
            height = 100;
            break;
        case HeaderRecommend:
            height = 230;
            break;
        case HeaderClothingSets:
houweibin committed
288
            height = heightClothingSets;
houweibin committed
289 290
            break;
        case HeaderHotSales:
houweibin committed
291
            height = self.hotSalesHeader.actrualHeight;
houweibin committed
292 293 294 295 296 297 298 299 300
            break;
        default:
            break;
    }
    return height;
}

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

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
houweibin committed
305 306 307 308
    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
309 310 311 312 313 314 315 316 317 318
    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
319 320 321 322 323
-(void)kwm_startSearch{
    KWMSearchFeedbackVC *vc = (KWMSearchFeedbackVC *)[KWMBaseVC findControllerBy:[KWMSearchFeedbackVC kwmTag] fromStoryboard:@"New"];
    [self.navigationController pushViewController:vc animated:YES];
}

houweibin committed
324
#pragma makr - api
lee committed
325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347
//- (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
348
    [self showLoading];
lee committed
349 350
    BOOL isHome = [handle isEqualToString:@"products-list-app-homepage"];
    NSInteger cpage = isHome ? self.page : 1;
lee committed
351 352
    [self.client getCollectionByHandle:handle completion:^(BUYCollection * _Nullable collection, NSError * _Nullable error) {
        if (!error) {
lee committed
353
            [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
354
                [self hideLoading];
lee committed
355
                
lee committed
356 357 358 359 360 361
                if (!error) {
                    [self setValue:products forKeyPath:valueKeyPath];
                    [self.cvHome reloadData];
                }else{
                    [self showError:error];
                }
lee committed
362 363 364 365
                if (isHome) {
                    self.page = self.page + 1;
                    products.count ? [self.cvHome.mj_footer endRefreshing] : [self.cvHome.mj_footer endRefreshingWithNoMoreData];
                }
lee committed
366 367 368 369
            }];
        }else{
            [self hideLoading];
            [self showError:error];
houweibin committed
370
        }
lee committed
371
    }];
houweibin committed
372 373
}

u  
lee committed
374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391
//- (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
392 393 394 395 396 397 398 399 400
- (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
401

lee committed
402 403
- (void)setHomeData:(KWMHomeData *)homeData {
    _homeData = homeData;
u  
lee committed
404 405 406
//#if DEBUG
//    [self.homeData.ad_banner[0] setUrl:@"https://www.cemarose.com/pages/sale_test_111"];
//#endif
u  
lee committed
407
//    [self.homeData.ad_banner[0] setUrl:@"https://www.cemarose.cn/collections/skirts/girls"];
lee committed
408
    self.adHeader.adArray = self.homeData.ad_banner;
u  
lee committed
409
    self.hotSalesHeader.bannerArray = self.homeData.hot_sales_ads;
410
//    self.homeData.hot_sales.single_show_count = @(1);
lee committed
411
    self.clothingSetsHeader.headerImage = self.homeData.clothing_sets.image;
u  
lee committed
412 413 414
//    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
415 416 417 418 419
    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
420
//            self.clotingSetsHandle = handle;
lee committed
421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442
            [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
443 444

@end