// // ProductLibraryViewController.m // Lighting // // Created by 曹云霄 on 16/5/4. // Copyright © 2016年 上海勾芒科技有限公司. All rights reserved. // #import "ProductLibraryViewController.h" #import "ProductCollectionViewCell.h" #import "ProductDetailsViewController.h" #import "ScreeningView.h" #import "screeningFirstView.h" #import "screeningSecondView.h" @interface ProductLibraryViewController () /** * 筛选背景框View */ @property (nonatomic,strong) ScreeningView *screenView; /** * 分类View */ @property (nonatomic,strong) screeningFirstView *screenFirstView; /** * 筛选View */ @property (nonatomic,strong) screeningSecondView *screenSecondView; /** * 筛选数据源 */ @property (nonatomic,strong) NSMutableArray *screeningDatas; /** * 当前筛选按钮选中状态 */ @property (nonatomic,assign) NSInteger selectedIndex; /** * 商品数据源对象 */ @property (nonatomic,strong) NSMutableArray *datasArray; /** * 复选返回时临时保存数据 */ @property (nonatomic,strong) GoodsResponse *temporaryArray; /** * 当前页数 */ @property (nonatomic,assign) int indexPage; /** * 搜索结果个数 */ @property (nonatomic,assign) int resultCount; /** * 总页数 */ @property (nonatomic,assign) int totalPages; @end @implementation ProductLibraryViewController /** * 初始化筛选数据源 */ - (NSMutableArray *)screeningDatas { if (_screeningDatas == nil) { _screeningDatas = [NSMutableArray array]; } return _screeningDatas; } /** * 初始化商品数据源数组 */ - (NSMutableArray *)datasArray { if (_datasArray == nil) { _datasArray = [NSMutableArray array]; } return _datasArray; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.view.backgroundColor = [UIColor blueColor]; [self uiConfigAction]; //扫描二维码结果 if (self.barcode) { [self barCodeSearchRequest]; }else { [self GetdatasAction]; } } #pragma mark -获取商品列表数据 - (void)getGoodsListDatasisRemove:(BOOL)remove Withobject:(GoodsCondition *)conditon { __weak typeof(self)weakSelf = self; [self getGoodsListdatas:conditon returnResponse:^(GoodsResponse *response) { if (response.goodsEntity.count == 0) { [self ErrorMBProgressView:@"暂无数据"]; }else { if (remove) { [self.datasArray removeAllObjects]; } for (TOGoodsEntity *model in response.goodsEntity) { [weakSelf.datasArray addObject:model]; } [weakSelf.productCollectionView reloadData]; } }]; } #pragma mark -获取产品筛选数据 - (void)getScreeningdatasisRemoveArray:(BOOL)remove { [[NetworkRequestClassManager Manager] NetworkWithDictionaryRequestWithURL:[NSString stringWithFormat:@"%@%@",ServerAddress,@"/goods/getGoodsFilter"] WithRequestType:1 WithParameter:nil WithReturnValueBlock:^(id returnValue) { if ([returnValue[@"code"] isEqualToNumber:@0]) { if (remove) { [self.screeningDatas removeAllObjects]; } GoodsFilter *goodsStyle = [[GoodsFilter alloc]initWithDictionary:returnValue[@"data"] error:nil]; [self.screeningDatas addObject:goodsStyle.styles]; [self.screeningDatas addObject:goodsStyle.categories]; [self.screeningDatas addObject:goodsStyle.space]; [self.screeningDatas addObject:goodsStyle.material]; [self.screeningDatas addObject:goodsStyle.price]; } else { [self ErrorMBProgressView:returnValue[@"message"]]; } } WithErrorCodeBlock:^(id errorCodeValue) { } WithFailureBlock:^(id error) { NSLog(@"%@",error); }]; } #pragma mark -获取商品列表数据 - (void)getGoodsListdatas:(GoodsCondition *)conditon returnResponse:(void(^)(GoodsResponse *))finish { [self CreateMBProgressHUDLoding]; [[NetworkRequestClassManager Manager] NetworkRequestWithURL:[NSString stringWithFormat:@"%@%@",ServerAddress,@"/goods/query"] WithRequestType:0 WithParameter:conditon WithReturnValueBlock:^(id returnValue) { [self endRefreshingForTableView:self.productCollectionView]; [self RemoveMBProgressHUDLoding]; if ([returnValue[@"code"] isEqualToNumber:@0]) { GoodsResponse *sponse = [[GoodsResponse alloc]initWithDictionary:returnValue[@"data"] error:nil]; self.totalPages = (int)returnValue[@"data"][@"totalPages"]; //返回结果 finish(sponse); } else { [self ErrorMBProgressView:@"暂无数据"]; } } WithErrorCodeBlock:^(id errorCodeValue) { } WithFailureBlock:^(id error) { [self endRefreshingForTableView:self.productCollectionView]; [self RemoveMBProgressHUDLoding]; }]; } #pragma mark -布局 - (void)uiConfigAction { self.indexPage = 1; self.productCollectionLayout.itemSize = CGSizeMake((ScreenWidth-100)/3, (ScreenWidth-100)/3); self.productCollectionLayout.sectionInset = UIEdgeInsetsMake(20, 30, 20, 30); self.productCollectionLayout.minimumLineSpacing = 20; self.productCollectionLayout.minimumInteritemSpacing = 20; self.productCollectionView.dataSource = self; self.productCollectionView.delegate = self; self.productCollectionView.alwaysBounceVertical = YES; [self CreatescreeningButton]; } #pragma mark -获取数据 - (void)GetdatasAction { //下拉刷新 MjRefreshHeaderCustom *headerRefresh = [MjRefreshHeaderCustom headerWithRefreshingBlock:^{ //默认数据 GoodsCondition *conditon = [[GoodsCondition alloc]init]; //分页数据 DataPage *Newpage = [[DataPage alloc]init]; Newpage.page = 1; Newpage.rows = KROWS; conditon.page = Newpage; self.indexPage = 1; //搜索 if (_selectedCode) { conditon.categoryEquals = _selectedCode; conditon.nameLike = _selectedCode; } [self.productCollectionView.mj_footer resetNoMoreData]; [self getScreeningdatasisRemoveArray:YES]; [self getGoodsListDatasisRemove:YES Withobject:conditon]; }]; headerRefresh.stateLabel.hidden = YES; headerRefresh.lastUpdatedTimeLabel.hidden = YES; self.productCollectionView.mj_header = headerRefresh; [self.productCollectionView.mj_header beginRefreshing]; //上拉加载 self.productCollectionView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{ //默认数据 GoodsCondition *conditon = [[GoodsCondition alloc]init]; //分页数据 DataPage *Newpage = [[DataPage alloc]init]; if (self.indexPage ++ > self.totalPages) { [self.productCollectionView.mj_footer endRefreshingWithNoMoreData]; }else { Newpage.page = self.indexPage ++; Newpage.rows = KROWS; conditon.page = Newpage; //搜索 if (_selectedCode) { conditon.categoryEquals = _selectedCode; conditon.nameLike = _selectedCode; } [self getGoodsListDatasisRemove:NO Withobject:conditon]; } }]; } #pragma mark 填条形码搜索 - (void)barCodeSearchRequest { [[NetworkRequestClassManager Manager] NetworkWithDictionaryRequestWithURL:[NSString stringWithFormat:@"%@%@%@",ServerAddress,@"/goods/getGoodsByCode/",_barcode] WithRequestType:1 WithParameter:nil WithReturnValueBlock:^(id returnValue) { if ([returnValue[@"code"] isEqualToNumber:@0]) { TOGoodsEntity *goods = [[TOGoodsEntity alloc]initWithDictionary:returnValue[@"data"] error:nil]; NSLog(@"%@",goods); }else { [self promptCustomerWithString:@"查询失败"]; } } WithErrorCodeBlock:^(id errorCodeValue) { } WithFailureBlock:^(id error) { [self promptCustomerWithString:@"查询失败"]; }]; } #pragma mark -筛选按钮 - (void)CreatescreeningButton { UIButton *screeningbutton = [UIButton buttonWithType:UIButtonTypeSystem]; screeningbutton.frame = CGRectMake(ScreenWidth-100, ScreenHeight*6/10, 50, 50); //阴影层 CALayer *layer = [CALayer layer]; layer.frame = CGRectMake(ScreenWidth-97.5, ScreenHeight*6/10+2.5, 45, 45);//保证layer的size比筛选按钮高宽都短5像素 layer.backgroundColor = [UIColor blackColor].CGColor; layer.shadowOffset = CGSizeMake(0, 8); layer.shadowOpacity = 0.7; layer.cornerRadius = 25; [self.view.layer addSublayer:layer]; //筛选按钮 screeningbutton.layer.masksToBounds = YES; screeningbutton.layer.cornerRadius = 25; [screeningbutton setTitle:@"筛选" forState:UIControlStateNormal]; screeningbutton.titleLabel.font = [UIFont systemFontOfSize:15]; [screeningbutton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; [screeningbutton setTitleColor:kMainBlueColor forState:UIControlStateSelected]; [screeningbutton addTarget:self action:@selector(ScreeningButtonClick) forControlEvents:UIControlEventTouchUpInside]; screeningbutton.backgroundColor = kMainBlueColor; [self.view addSubview:screeningbutton]; } - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { ProductCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"productcell" forIndexPath:indexPath]; TOGoodsEntity *model = [self.datasArray objectAtIndex_opple:indexPath.item]; NSArray *imageArray = [model.pictures componentsSeparatedByString:@","]; [cell.productImageView sd_setImageWithURL:[NSURL URLWithString:[imageArray firstObject]] placeholderImage:REPLACEIMAGE]; cell.productPrice.text = [NSString stringWithFormat:@"¥%@",model.tagPrice]; cell.cellindex = indexPath.item; cell.productParameter.text = model.name; cell.specifications.text = [NSString stringWithFormat:@"%@(%@)",model.code,model.size]; //加入购物车 __weak typeof(self) weakSelf = self; __weak typeof(ProductCollectionViewCell *) weakCell = cell; [cell setReturnCellCgpoint:^void(CGPoint centerPoint,NSInteger cellindex) { //判断是否有当前客户 if (![Shoppersmanager manager].currentCustomer) { [self ErrorMBProgressView:@"必须设置当前客户"]; return; } TOGoodsEntity *model = [self.datasArray objectAtIndex_opple:cellindex]; [self addGoodsShoppingbags:model complate:^{ NSLog(@"加入购物车完成"); }]; [weakSelf StartAddShoppingCarAnimationWithimage:weakCell.productImageView.image withStartpoint:centerPoint]; }]; return cell; } #pragma mark -开发加入购物车动画 - (void)StartAddShoppingCarAnimationWithimage:(UIImage *)image withStartpoint:(CGPoint)point { //起点 CGPoint startPoint = point; //终点 CGPoint endPoint = SHARED_APPDELEGATE.shoppingCarPoint; //控点 CGPoint controlPoint = CGPointMake(endPoint.x, startPoint.x); UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 60, 42)]; imageView.layer.position = point; // imageView.layer.masksToBounds = YES; // imageView.layer.cornerRadius = 50; imageView.tag = 100; imageView.image = image; [self.view.layer addSublayer:imageView.layer]; //创建关键帧 CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; animation.delegate = self; //动画时间 animation.duration = 1; //当动画完成,停留到结束位置 animation.removedOnCompletion = NO; animation.fillMode = kCAFillModeForwards; //当方法名字遇到create,new,copy,retain,都需要管理内存 CGMutablePathRef path = CGPathCreateMutable(); //设置起点 CGPathMoveToPoint(path, NULL, startPoint.x, startPoint.y); CGPathAddQuadCurveToPoint(path, NULL, controlPoint.x, controlPoint.y, endPoint.x,endPoint.y); //设置动画路径 animation.path = path; //执行动画 [imageView.layer addAnimation:animation forKey:nil]; //释放路径 CGPathRelease(path); } #pragma mark -完成加入购物车动画完成后回调 - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag { NSLog(@"动画完成了"); [[NSNotificationCenter defaultCenter]postNotificationName:@"ADDGOODSNUMBER" object:@(1)]; } - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { return self.datasArray.count; } - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"StoryboardwithCYX" bundle:nil]; ProductDetailsViewController *productDetails = [storyboard instantiateViewControllerWithIdentifier:@"productdetails"]; productDetails.goodsID = [[self.datasArray objectAtIndex_opple:indexPath.item] fid]; [self.navigationController pushViewController:productDetails animated:YES]; } #pragma mark -筛选 - (void)ScreeningButtonClick { self.screenView = [[[NSBundle mainBundle] loadNibNamed:@"ScreeningView" owner:self options:nil]firstObject]; self.screenView.frame = CGRectMake(0, 0, ScreenWidth, ScreenHeight); self.screenView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5]; self.screenView.delegate = self; //点击手势 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(DismissScreenView)]; tap.delegate = self; tap.cancelsTouchesInView = NO; [self.screenView addGestureRecognizer:tap]; self.screenView.frame = CGRectMake(0, 0, ScreenWidth, ScreenHeight); [self.view.window addSubview:self.screenView]; self.screenView.alpha = 0; //监听Segmented菜单 [self.screenView.sortingSegmented addTarget:self action:@selector(sortingSegmentedClick:) forControlEvents:UIControlEventValueChanged]; [self CreateClassificationView]; [UIView animateWithDuration:0.2 animations:^{ self.screenView.alpha = 1; }]; } #pragma mark -分类、筛选view切换 - (void)sortingSegmentedClick:(UISegmentedControl *)sender { switch (sender.selectedSegmentIndex) { case 0://分类 { NSLog(@"分类"); [self.screenSecondView removeFromSuperview]; [self CreateClassificationView]; } break; case 1://筛选 { NSLog(@"筛选"); [self.screenFirstView removeFromSuperview]; [self CreateScreenSubView]; } break; default: break; } } #pragma mark -创建分类View - (void)CreateClassificationView { //分类View self.screenFirstView = [[[NSBundle mainBundle] loadNibNamed:@"screeningFirstView" owner:self options:nil] firstObject]; self.screenFirstView.frame = CGRectMake(0, 50, 470, 310); self.screenFirstView.delegate = self; [self screeningButtonClick:self.selectedIndex]; [self.screenView.backgroundView addSubview:self.screenFirstView]; } #pragma mark -创建筛选选项View - (void)CreateScreenSubView { self.screenSecondView = [[[NSBundle mainBundle] loadNibNamed:@"screeningSecondView" owner:self options:nil] firstObject]; self.screenSecondView.frame = CGRectMake(0, 50, 470, 310); self.screenSecondView.delegate = self; [self screeningButtonClick:self.selectedIndex]; self.screenSecondView.totalNumber = self.datasArray.count; [self.screenView.backgroundView addSubview:self.screenSecondView]; } #pragma mark -ScreeningButtonClickdelegate代理 - (void)screeningButtonClick:(NSInteger)buttontag { self.selectedIndex = buttontag; //分类 if (self.screenView.sortingSegmented.selectedSegmentIndex == 0) { self.screenFirstView.selectedIndex = buttontag; self.screenFirstView.datasArray = [self.screeningDatas objectAtIndex_opple:buttontag]; } //筛选 else if (self.screenView.sortingSegmented.selectedSegmentIndex == 1) { self.screenSecondView.selectedIndex = buttontag; self.screenSecondView.datasArray = [self.screeningDatas objectAtIndex_opple:buttontag]; } } #pragma mark -选中条件 - (void)selectedItem:(NSString *)typecode { [self DismissScreenView]; GoodsCondition *condition = [[GoodsCondition alloc]init]; DataPage *page = [[DataPage alloc]init]; page.page = 0; condition.page = page; condition.categoryEquals = typecode; //分类模块筛选 __weak typeof(self)Weakself = self; [self getGoodsListdatas:condition returnResponse:^(GoodsResponse *response) { Weakself.datasArray = [NSMutableArray arrayWithArray:response.goodsEntity]; [Weakself.productCollectionView reloadData]; if (response.goodsEntity.count == 0) { [self ErrorMBProgressView:@"暂无数据"]; } }]; } #pragma mark -筛选子模块的 - (void)tableSelectedindex:(NSInteger)index { [self screeningButtonClick:index]; self.screenView.indexselected = index; } #pragma mark -筛选复选模块选中的uicollection cell - (void)collectionSelectedindexWithStyleCode:(NSString *)styleCode withCategories:(NSString *)categoriesCode withSpace:(NSString *)spaceCode withMaterial:(NSString *)materialCode withPrice:(NSString *)priceTitle { GoodsCondition *condition = [[GoodsCondition alloc]init]; DataPage *page = [[DataPage alloc]init]; page.page = 0; condition.page = page; if (styleCode.length != 0) { condition.styleEquals = styleCode; } if (categoriesCode.length != 0) { condition.categoryEquals = categoriesCode; } if (spaceCode.length!= 0) { condition.spaceEquals = spaceCode; } if (materialCode.length!= 0) { condition.materialEqueals = materialCode; } if (![priceTitle isEqualToString:@"全部"]) { //价格字符串切割 NSArray *spacrArray = [priceTitle componentsSeparatedByString:@"到"]; condition.startprice = [NSNumber numberWithInteger:[[spacrArray objectAtIndex_opple:0] integerValue]]; condition.endprice = [NSNumber numberWithInteger:[[spacrArray objectAtIndex_opple:1] integerValue]]; } __weak typeof (self) Weakself = self; [self getGoodsListdatas:condition returnResponse:^(GoodsResponse *response) { Weakself.screenSecondView.totalNumber = response.total; //临时保存 self.temporaryArray = response; }]; } #pragma mark -显示筛选后的结果 - (void)ShowScreeningResponse { if (self.temporaryArray.goodsEntity.count == 0) { [self ErrorMBProgressView:@"暂无数据"]; return; } self.datasArray = [NSMutableArray arrayWithArray:self.temporaryArray.goodsEntity]; [self.productCollectionView reloadData]; [self DismissScreenView]; } #pragma mark -移除筛选框 - (void)DismissScreenView { [UIView animateWithDuration:0.2 animations:^{ self.screenView.alpha = 0; }completion:^(BOOL finished) { [self.screenView removeFromSuperview]; }]; } #pragma mark -UIGestureRecognizerDelegate代理方法 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { //取消子视图的的时间穿透,否则子视图的点击无效,会被传递到父视图响应 if (CGRectContainsPoint(self.screenView.backgroundView.frame, [touch locationInView:self.screenView])) { return NO; } return YES; } //#pragma mark -释放 //- (void)dealloc //{ // [[NSNotificationCenter defaultCenter]removeObserver:self]; //} #pragma mark -添加至购物车 - (void)addGoodsShoppingbags:(TOGoodsEntity *)model complate:(void(^)())response { SaveShoppingCartRequest *shopCar = [[SaveShoppingCartRequest alloc]init]; shopCar.consumerId = [[Customermanager manager] customerID]; shopCar.goodsId = model.fid; shopCar.count = 1; [[NetworkRequestClassManager Manager] NetworkRequestWithURL:[NSString stringWithFormat:@"%@%@",ServerAddress,@"/shopcart/save"] WithRequestType:0 WithParameter:shopCar WithReturnValueBlock:^(id returnValue) { if ([returnValue[@"code"] isEqualToNumber:@0]) { response(); }else { [self ErrorMBProgressView:returnValue[@"message"]]; } } WithErrorCodeBlock:^(id errorCodeValue) { } WithFailureBlock:^(id error) { [self ErrorMBProgressView:@"加入购物车失败"]; }]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } /* #pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller. } */ @end