// // KWMProductDetailVC.m // iCemarose // // Created by HouWeiBin on 2017/1/11. // Copyright © 2017年 kollway. All rights reserved. // #import "KWMProductDetailVC.h" #import "KWMProductDetailView.h" #import "KWMBottomView.h" #import "KWMUserModel.h" #import "PhotoBroswerVC.h" #import "KWMStringUtil.h" #import "KWMShopCartData.h" #import "KWMInformationVC.h" #import "KWMBrandCaramelVC.h" #import "KWMSelectSizeVC.h" #import "KWMShopCartVC.h" #import "KWMBeforePayVC.h" #import "KWMLoginVC.h" #import "MZFormSheetPresentationViewController.h" #import "KWMShareVC.h" #import "KWMImageUtil.h" #import "KWMShoppingCart.h" #import <RegexKitLite/RegexKitLite.h> #import <TOWebViewController/TOWebViewController.h> #import <AFNetworking/AFNetworking.h> #import <TOWebViewController/NJKWebViewProgress.h> #import <PPNetworkHelper/PPNetworkHelper.h> @interface KWMProductDetailVC ()<KWMBottomViewDelegate,KWMProductDetailViewDelegate,KWMSelectSizeVCDelegate,UIScrollViewDelegate> @property (weak, nonatomic) IBOutlet UIScrollView *svContent; @property (nonatomic) KWMProductDetailView *productDetailView; @property (nonatomic) KWMBottomView *recommendView; @property (nonatomic) BUYCollection *collectionSameType; @property (nonatomic) BUYCollection *collectionSameBrand; @property (nonatomic) NSString *typeTag; @property (weak, nonatomic) IBOutlet UIButton *btnShopCart; @property (weak, nonatomic) IBOutlet UIButton *btnShare; - (IBAction)onClickBackBtn:(id)sender; - (IBAction)onClickShopCartBtn:(id)sender; - (IBAction)onClickShare:(id)sender; @end @implementation KWMProductDetailVC - (void)viewDidLoad { [super viewDidLoad]; [self initScrollView]; [self initRecommendProduct]; // [self initShopCartCount]; //刷新product,如果是缓存的product,因为没有字典,所以会发生错误,需要重新请求一个有字典的product if(self.handle || (self.product && self.product.identifier && !self.product.JSONDictionary)){ [self getProductBy:nil product:self.product]; } NSArray *types = @[@"baby",@"girls",@"boys",@"shoes",@"newborn"]; for (NSString *tag in self.product.tags) { if ([types containsObject:tag.lowercaseString]) { self.typeTag = tag.lowercaseString; break; } } if (!self.typeTag) { self.productDetailView.sizeGuide.hidden = YES; } } - (BOOL)prefersStatusBarHidden { return YES; } - (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:YES animated:YES]; [self initShopCartCount]; } - (void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; [self.navigationController setNavigationBarHidden:NO animated:YES]; } - (void)initScrollView{ CGFloat w = UI_SCREEN_WIDTH; CGFloat h = UI_SCREEN_HEITHT-60; for (int i = 0;i < 2;i++){ if(i == 0){ self.productDetailView = [[KWMProductDetailView alloc] init]; self.productDetailView.frame = CGRectMake(i*w, 0, w, h); self.productDetailView.delegate = self; [self.svContent addSubview:self.productDetailView]; [self.productDetailView setData:self.product]; }else{ self.recommendView = [[KWMBottomView alloc] init]; self.recommendView.frame = CGRectMake(i*w, 0, w, h); self.recommendView.delegate = self; [self.svContent addSubview:self.recommendView]; } } self.svContent.delegate = self; self.svContent.contentSize = CGSizeMake(w*2,0); self.svContent.pagingEnabled = YES; if(self.product && self.product.imagesArray && self.product.imagesArray.count>0){ NSInteger imageCount = self.product.imagesArray.count; [self.recommendView setCount:imageCount]; } } - (void)kwm_onClickSizeGuide { NSString *brand = [self.product.vendor stringByReplacingOccurrencesOfRegex:@"\\s*\\W\\s*" withString:@"-"].lowercaseString; NSString *baseUrl = @"http://www.cemarose.cn/pages/"; NSString *url= [NSString stringWithFormat:@"%@%@-size-guide-%@",baseUrl,brand,self.typeTag]; NSLog(@"size guide url: %@",url); // TOWebViewController *wv = [[TOWebViewController alloc] initWithURLString:url]; TOWebViewController *wv = [[TOWebViewController alloc] init]; __unused id _ = wv.view; wv.showPageTitles = NO; wv.title = @"Size Guide"; wv.navigationButtonsHidden = YES; // AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; //// manager.responseSerializer = [AFXMLParserResponseSerializer serializer]; // manager.responseSerializer = [AFHTTPResponseSerializer serializer]; // manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", nil]; // [manager GET:url parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) { //// NJKWebViewProgress *wvp = [vc valueForKeyPath:@"progressManager"]; //// [wvp.progressDelegate webViewProgress:wvp updateProgress:downloadProgress.fractionCompleted]; // } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { // NSString *body = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; // body = [body stringByReplacingOccurrencesOfRegex:@"<meta[\\w\\W]*?/?>" withString:@""]; // body = [body stringByReplacingOccurrencesOfRegex:@"<script[\\w\\W]*?</script>" withString:@""]; // body = [body stringByReplacingOccurrencesOfRegex:@"<header[\\w\\W]*?</header>" withString:@""]; // body = [body stringByReplacingOccurrencesOfRegex:@"<footer[\\w\\W]*?</footer>" withString:@""]; // body = [body stringByReplacingOccurrencesOfRegex:@"<head>" withString:@"<head><meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" /><style type='text/css'>" // @".page-title h1.label{font-size:17px;}" // @".rte.text-content td{padding-left:10px;}" // @"</style>"]; // [wv.webView loadHTMLString:body baseURL:[NSURL URLWithString:baseUrl]]; // } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { // }]; void(^success)(id) = ^(id body){ if (!body) { return; } body = [[NSString alloc] initWithData:body encoding:NSUTF8StringEncoding]; body = [body stringByReplacingOccurrencesOfRegex:@"<meta[\\w\\W]*?/?>" withString:@""]; body = [body stringByReplacingOccurrencesOfRegex:@"<script[\\w\\W]*?</script>" withString:@""]; body = [body stringByReplacingOccurrencesOfRegex:@"<header[\\w\\W]*?</header>" withString:@""]; body = [body stringByReplacingOccurrencesOfRegex:@"<footer[\\w\\W]*?</footer>" withString:@""]; body = [body stringByReplacingOccurrencesOfRegex:@"<head>" withString:@"<head><meta name=\"viewport\" content=\"width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no\" /><style type='text/css'>" @".page-title h1.label{font-size:17px;}" @".rte.text-content td{padding-left:10px;}" @"</style>"]; [wv.webView loadHTMLString:body baseURL:[NSURL URLWithString:baseUrl]]; }; __weak typeof(self) this = self; [PPNetworkHelper setAFHTTPSessionManagerProperty:^(AFHTTPSessionManager *sessionManager) { sessionManager.responseSerializer = [AFHTTPResponseSerializer serializer]; sessionManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", nil]; }]; [PPNetworkHelper GET:url parameters:nil responseCache:success success:success failure:^(NSError *error) { [this showError:error]; }]; [self.navigationController pushViewController:wv animated:YES]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(200 * NSEC_PER_MSEC)), dispatch_get_main_queue(), ^{ NJKWebViewProgress *wvp = [wv valueForKeyPath:@"progressManager"]; [wvp.progressDelegate webViewProgress:wvp updateProgress:0.1]; }); } -(void)onClickBackBtn:(id)sender{ [self.navigationController popViewControllerAnimated:YES]; } -(void)onClickShopCartBtn:(id)sender{ KWMShopCartVC *shopCartVC = (KWMShopCartVC *)[KWMBaseVC findControllerBy:[KWMShopCartVC kwmTag] fromStoryboard:@"ShopCart"]; [self.navigationController pushViewController:shopCartVC animated:YES]; } -(void)onClickShare:(id)sender{ if(!self.product){ return; } KWMShareVC *shareVC = (KWMShareVC *)[KWMBaseVC findControllerBy:[KWMShareVC kwmTag] fromStoryboard:@"New"]; CGSize size = [UIScreen mainScreen].bounds.size; [self showPresentation:shareVC size:size tapOutsideClose:YES style:MZFormSheetPresentationTransitionStyleFade]; shareVC.shareUrl = [NSString stringWithFormat:@"https://www.cemarose.com/products/%@",self.product.handle]; shareVC.imageUrl = [KWMImageUtil getProductImageUrl:self.product ImageSize:SmallImage]; shareVC.productName = self.product.title; } - (void)initShopCartCount{ NSNumber *count = [[KWMShoppingCart sharedInstance] count]; [self.btnShopCart setTitle:count.stringValue forState:UIControlStateNormal]; } - (void)setProductId:(NSNumber *)productId{ _productId = productId; [self getProductBy:self.productId product:nil]; } //KWMProductDetailViewDelegate -(void)kwm_onClickImage:(NSMutableArray *)imageArr currentIndex:(NSInteger)currentIndex{ //避免循环引用 __weak KWMProductDetailVC *weakSelf=self; NSArray<NSString *> *imags = imageArr; [PhotoBroswerVC show:self type:PhotoBroswerVCTypePush index:currentIndex isShowSaveBtn:YES photoModelBlock:^NSArray *{ NSArray *localImages = imags; NSMutableArray *modelsM = [NSMutableArray arrayWithCapacity:localImages.count]; for (NSUInteger i = 0; i< localImages.count; i++) { PhotoModel *pbModel=[[PhotoModel alloc] init]; pbModel.mid = i + 1; //源frame UIImageView *imageV = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, weakSelf.view.frame.size.width, weakSelf.view.frame.size.height)]; pbModel.sourceImageView = imageV; pbModel.image_HD_U = [[KWMAPIManager sharedManager] toAbsoluteUrl:localImages[i]]; [modelsM addObject:pbModel]; } return modelsM; }]; } -(void)kwm_onClickInformation{ KWMInformationVC *informationVC = (KWMInformationVC *)[KWMBaseVC findControllerBy:[KWMInformationVC kwmTag] fromStoryboard:@"Main"]; informationVC.inforStr = NSLocalizedString(@"getAndReturnGoods",@"getAndReturnGoods"); informationVC.inforTitleStr = NSLocalizedString(@"getAndReturnGoodsTitle",@"getAndReturnGoodsTitle"); informationVC.titleStr = @"发货与退货"; [self.navigationController pushViewController:informationVC animated:YES]; } -(void)kwm_onClickSizeBtn{ KWMSelectSizeVC *editVC = (KWMSelectSizeVC *)[KWMBaseVC findControllerBy:[KWMSelectSizeVC kwmTag] fromStoryboard:@"ShopCart"]; editVC.delegate = self; editVC.product = self.product; // NSDictionary *shopCartDict = self.product.JSONDictionary; editVC.view.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0]; editVC.modalPresentationStyle = UIModalPresentationOverCurrentContext; editVC.providesPresentationContextTransitionStyle = YES; editVC.definesPresentationContext = YES; [self presentViewController:editVC animated:YES completion:nil]; } -(void)kwm_goToBrandVC{ if(self.product && self.product.vendor){ KWMBrandCaramelVC *brandCaramelVC = (KWMBrandCaramelVC *)[KWMBrandCaramelVC findControllerBy:[KWMBrandCaramelVC kwmTag] fromStoryboard:@"Brand"]; NSString *brand = self.product.vendor; brandCaramelVC.brand = brand; brandCaramelVC.handle = [KWMStringUtil deleteOtherCharExceptLetterWithLine:brand]; brandCaramelVC.isSale = NO; [self.navigationController pushViewController:brandCaramelVC animated:YES]; } } //KWMBottomViewDelegate -(void)kwm_loadNewPage:(BOOL)isSameBrand{ if(isSameBrand && self.collectionSameBrand!=nil){ [self requestProducts:self.collectionSameBrand.identifier isSameBrand:isSameBrand]; }else if(self.collectionSameType!=nil){ [self requestProducts:self.collectionSameType.identifier isSameBrand:isSameBrand]; } } -(void)kwm_clickCollectionCell:(BUYProduct *)product{ if(product == nil){ return; } self.product = product; [self.productDetailView setData:product]; [self.svContent setContentOffset:CGPointMake(0, 0) animated:YES]; if(self.product && self.product.imagesArray && self.product.imagesArray.count>0){ NSInteger imageCount = self.product.imagesArray.count; [self.recommendView setCount:imageCount]; } [self initRecommendProduct]; } #pragma mark - KWMSelectSizeVCDelegate - (void)kwm_addShopWithVariantId:(NSNumber *)identifier quantity:(NSInteger)quantity variant:(BUYProductVariant *) variant buyNow:(BOOL)buyNow callback:(void (^)(BOOL))callback { __weak KWMProductDetailVC *this = self; if (!buyNow) { [[KWMShoppingCart sharedInstance] increaseProductWithVariantId:identifier quantity:quantity callback:^(NSError *error, KWMCartResult *cart) { if (cart.items.firstObject && !cart.items.firstObject.product_id) { KWMShopCartModel *model = cart.items.firstObject; BUYImageLink *il = this.product.images.firstObject; // model.imageStr = [KWMImageUtil getProductImageUrl:this.product.identifier ImageSize:NormalImage]; model.imageStr = [KWMImageUtil getProductImageUrlByOriginalUrl:il.sourceURL.absoluteString ImageSize:NormalImage]; model.name = this.product.title; model.brand = this.product.vendor; model.size = variant.title; // model.price = variant.price.floatValue; model.price = variant.price; model.product_id = this.product.identifier; } if (!error) { [this showToast:@"添加成功"]; [this.btnShopCart setTitle:cart.item_count.stringValue forState:UIControlStateNormal]; callback(YES); }else{ [this showError:error]; callback(NO); } }]; return; } callback(YES); KWMUserModel *useModel = [KWMUserModel shareUser]; if (!useModel.status) { //登录 KWMLoginVC *loginVc = (KWMLoginVC *)[KWMBaseVC findControllerBy:[KWMLoginVC kwmTag] fromStoryboard:@"Login"]; UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:loginVc]; [self presentViewController:nav animated:YES completion:nil]; return; } [self showLoading]; [self.api tmpCartWithVariantId:identifier quantity:quantity success:^(NSURLSessionDataTask *task, NSString *cartCookie) { [this hideLoading]; KWMBeforePayVC *beforePayVC = (KWMBeforePayVC *)[KWMBaseVC findControllerBy:[KWMBeforePayVC kwmTag] fromStoryboard:@"ShopCart"]; beforePayVC.cartCookie = cartCookie; [this.navigationController pushViewController:beforePayVC animated:YES]; } failure:^(NSURLSessionDataTask *task, NSError *error) { [this showError:error]; }]; } ////KWMSelectSizeVCDelegate //-(void)kwm_addShopCartItem:(KWMShopCartModel *)shopCartModel{ // [self initShopCartCount]; //} // //-(void)kwm_fastBuy:(BUYCart *)fastBuyCart{ // if(fastBuyCart == nil){ // return; // } // KWMUserModel *useModel = [KWMUserModel shareUser]; // if (useModel.status) { // KWMBeforePayVC *beforePayVC = (KWMBeforePayVC *)[KWMBaseVC findControllerBy:[KWMBeforePayVC kwmTag] fromStoryboard:@"ShopCart"]; // beforePayVC.fastPayCart = fastBuyCart; // [self.navigationController pushViewController:beforePayVC animated:YES];} // //用户未登录 // else{ // KWMLoginVC *loginVc = (KWMLoginVC *)[KWMBaseVC findControllerBy:[KWMLoginVC kwmTag] fromStoryboard:@"Login"]; // UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:loginVc]; // [self presentViewController:nav animated:YES completion:nil]; // } //} #pragma mark - KWMSelectSizeVCDelegate End -(void)initRecommendProduct{ if(self.product == nil){ return; } [self.recommendView clear]; [self.recommendView setBrandString:self.product.vendor]; NSString *handle = [KWMStringUtil deleteOtherCharExceptLetterWithLine:self.product.vendor]; //该商品的品牌不为nil if(self.product.vendor){ [self requestCollection:handle isSameBrand:YES]; } //该商品的类型不为nil if(self.product.productType){ [self requestCollection:self.product.productType isSameBrand:NO]; } } //获取相同类型商品collection/相同品牌商品collection -(void)requestCollection:(NSString *)handle isSameBrand:(BOOL)isSameBrand{ __weak KWMProductDetailVC *weakSelf = self; [self.client getCollectionByHandle:handle completion:^(BUYCollection *collection, NSError *error) { if(!error && collection!=nil){ if(isSameBrand){ [weakSelf hideLoading]; weakSelf.collectionSameBrand = collection; }else{ weakSelf.collectionSameType = collection; } [self requestProducts:collection.identifier isSameBrand:isSameBrand]; }else if(error != nil){ [self showError:error]; } }]; } //获取某个商品集合,并将其设置到猜你喜欢view中 -(void)requestProducts:(NSNumber *)collectionId isSameBrand:(BOOL)isSameBrand{ __weak KWMProductDetailVC *weakSelf = self; NSInteger targetPage; if(isSameBrand){ if(self.recommendView.isLoadingSameBrand){ return; } targetPage = self.recommendView.pageSameBrand + 1; self.recommendView.isLoadingSameBrand = YES; }else{ if(self.recommendView.isLoadingSameType){ return; } targetPage = self.recommendView.pageSameType + 1; self.recommendView.isLoadingSameType = YES; } [self.client getProductsPage:targetPage inCollection:collectionId withTags:nil sortOrder:BUYCollectionSortCollectionDefault completion:^(NSArray<BUYProduct *> *products, NSUInteger page, BOOL reachedEnd, NSError *error) { if(isSameBrand){ self.recommendView.isLoadingSameBrand = NO; }else{ self.recommendView.isLoadingSameType = NO; } if(!error && products!=nil){ if(isSameBrand){ weakSelf.recommendView.pageSameBrand += 1; }else{ weakSelf.recommendView.pageSameType += 1; } [weakSelf.recommendView setData:products isSameBrand:isSameBrand]; }else if(error != nil){ [self showError:error]; } }]; } //查找商品API - (void)getProductBy:(NSNumber *)productId product:(BUYProduct *)product{ if(productId == nil && product == nil && !self.handle){ return; } [self showLoading]; void(^completion)(BUYProduct *, NSError *) = ^(BUYProduct * _Nullable product, NSError * _Nullable error) { [self hideLoading]; if (product != nil && error == nil) { self.product = product; [self.productDetailView setData:product]; if(productId){ [self kwm_clickCollectionCell:product]; } }else{ self.product = nil; [self showError:error]; } }; if (self.handle) { [self.client getProductByHandle:self.handle completion:completion]; }else{ [self.client getProductById:productId?productId:product.identifier completion:completion]; } } @end