// // SceneViewController.m // Lighting // // Created by 曹云霄 on 16/6/1. // Copyright © 2016年 上海勾芒科技有限公司. All rights reserved. // #import "SceneViewController.h" #import "ScreeningTableViewCell.h" #import "ScreeningCollectionViewCell.h" #import "SceneSectionHeaderView.h" #import "SceneListModel.h" #import "DataDictModel.h" #import "TOGoodsEntityModel.h" #import "ProductScreeningCollectionViewCell.h" #import "GoodsCategoryModel.h" @interface SceneViewController () /** * 场景数据源 */ @property (nonatomic,strong) NSMutableArray *sceneDatasArray; /** * 产品数据源 */ @property (nonatomic,strong) NSMutableArray *productDatasArray; /** * 当前页数 */ @property (nonatomic,assign) int indexPage; /** * 总页数 */ @property (nonatomic,assign) int totalPages; /** * 场景参数模型 */ @property (nonatomic,strong) SceneCondition *conditionModel; /** * 产品参数模型 */ @property (nonatomic,strong) GoodsCondition *goodsModel; /** * 场景筛选条件数据源 */ @property (nonatomic,strong) NSMutableArray *sceneScreeningDatasArray; /** * 产品筛选条件数据源 */ @property (nonatomic,strong) NSMutableArray *productScreeningDatasArray; /** * 右侧筛选条件选中下标 */ @property (nonatomic,assign) NSInteger rightSelectedIndex; /** * 区分场景和产品 */ @property (nonatomic,assign) BOOL isScene; /** * 类型区cell格式 */ @property (nonatomic,assign) NSInteger sectionCellNumber; /** * 当前选中的区头 */ @property (nonatomic,assign) NSInteger selectedSectionNumber; /** * 管理section开关(0,表示关闭,1,表示开启) */ @property (nonatomic,strong) NSMutableArray *openArray; /** * 选中code */ @property (nonatomic,copy) NSString *selectedCode; @end @implementation SceneViewController - (NSMutableArray *)sceneDatasArray { if (!_sceneDatasArray) { _sceneDatasArray = [NSMutableArray array]; } return _sceneDatasArray; } - (NSMutableArray *)productDatasArray { if (!_productDatasArray) { _productDatasArray = [NSMutableArray array]; } return _productDatasArray; } - (SceneCondition *)conditionModel { if (!_conditionModel) { _conditionModel = [[SceneCondition alloc]init]; } return _conditionModel; } - (GoodsCondition *)goodsModel { if (!_goodsModel) { _goodsModel = [[GoodsCondition alloc]init]; } return _goodsModel; } - (NSMutableArray *)sceneScreeningDatasArray { if (!_sceneScreeningDatasArray) { _sceneScreeningDatasArray = [NSMutableArray array]; } return _sceneScreeningDatasArray; } - (NSMutableArray *)productScreeningDatasArray { if (!_productScreeningDatasArray) { _productScreeningDatasArray = [NSMutableArray array]; } return _productScreeningDatasArray; } - (NSMutableArray *)openArray { if (!_openArray) { _openArray = [NSMutableArray array]; } return _openArray; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.isScene = [[NSUserDefaults standardUserDefaults] boolForKey:@"SCENE"]; [self UiConfigAction]; [self ReturnDismiss]; if (self.isScene) { //场景 [self getDatasAction]; }else { //产品 [self GetdatasAction]; } } #pragma mark -UI - (void)UiConfigAction { self.styleButton.layer.masksToBounds = YES; self.styleButton.layer.cornerRadius = kSelectedCornerRadius; self.typeButton.layer.masksToBounds = YES; self.typeButton.layer.cornerRadius = kSelectedCornerRadius; self.spaceButton.layer.masksToBounds = YES; self.spaceButton.layer.cornerRadius = kSelectedCornerRadius; self.materialButton.layer.masksToBounds = YES; self.materialButton.layer.cornerRadius = kSelectedCornerRadius; self.priceButton.layer.masksToBounds = YES; self.priceButton.layer.cornerRadius = kSelectedCornerRadius; self.styleButton.selected = YES; self.styleButton.backgroundColor = kMainBlueColor; self.rightSelectedIndex = 0; self.searchProductField.delegate = self; //筛选Tableview self.screeningTableView.delegate = self; self.screeningTableView.dataSource = self; self.screeningTableView.tableFooterView = [UIView new]; [self.screeningTableView registerClass:[ScreeningTableViewCell class] forCellReuseIdentifier:@"ScreeningCellNew"]; //section [self.screeningTableView registerClass:[SceneSectionHeaderView class] forHeaderFooterViewReuseIdentifier:@"headerView"]; self.myTableViewBackView.layer.shadowColor = [UIColor blackColor].CGColor; self.myTableViewBackView.layer.shadowOffset = CGSizeMake(0, 0); self.myTableViewBackView.layer.shadowRadius = 4; self.myTableViewBackView.layer.shadowOpacity = 0.5; self.myTableViewBackView.layer.masksToBounds = NO; //数据列表UICollectionView if (self.isScene) { self.collectionViewLayout.itemSize = CGSizeMake((self.sceneOrProductClollectionView.mj_w-40)/3, (self.sceneOrProductClollectionView.mj_w-40)/4); self.collectionViewLayout.minimumLineSpacing = 10; self.collectionViewLayout.minimumInteritemSpacing = 10; self.collectionViewLayout.sectionInset = UIEdgeInsetsMake(10, 10, 10, 10); }else { self.collectionViewLayout.itemSize = CGSizeMake((self.sceneOrProductClollectionView.mj_w-40)/3, self.sceneOrProductClollectionView.mj_w/3); self.collectionViewLayout.minimumLineSpacing = 10; self.collectionViewLayout.minimumInteritemSpacing = 10; self.collectionViewLayout.sectionInset = UIEdgeInsetsMake(10, 10, 10, 10); } self.sceneOrProductClollectionView.dataSource = self; self.sceneOrProductClollectionView.delegate = self; } #pragma mark -场景数据 - (void)getDatasAction { WS(weakSelf); //场景筛选条件 [[NetworkRequestClassManager Manager] NetworkRequestWithURL:SERVERREQUESTURL(SCENESCREENING) WithRequestType:ONE WithParameter:nil WithReturnValueBlock:^(id returnValue) { if ([returnValue[@"code"] isEqualToNumber:@0]) { SceneFilter *filterModel = [[SceneFilter alloc]initWithDictionary:returnValue[@"data"] error:nil]; //风格 NSMutableArray *styleArray = [NSMutableArray array]; //空间 NSMutableArray *spaceArray = [NSMutableArray array]; [weakSelf.sceneScreeningDatasArray addObject:styleArray]; [weakSelf.sceneScreeningDatasArray addObject:spaceArray]; for (DataDict *model in filterModel.styles) { DataDictModel *newModel = [[DataDictModel alloc]init]; newModel.typeName = model.typeName; newModel.typecode = model.typecode; newModel.isSelectedSate = NO; [[weakSelf.sceneScreeningDatasArray firstObject] addObject:newModel]; } for (DataDict *model in filterModel.space) { DataDictModel *newModel = [[DataDictModel alloc]init]; newModel.typeName = model.typeName; newModel.typecode = model.typecode; newModel.isSelectedSate = NO; [[weakSelf.sceneScreeningDatasArray lastObject] addObject:newModel]; } [weakSelf.screeningTableView reloadData]; } else { [XBLoadingView showHUDViewWithText:returnValue[@"message"]]; } } WithFailureBlock:^(id error) { }]; //下拉刷新 MjRefreshHeaderCustom *headerRefresh = [MjRefreshHeaderCustom headerWithRefreshingBlock:^{ //默认数据 weakSelf.indexPage = 1; DataPage *page = [[DataPage alloc]init]; page.page = weakSelf.indexPage; page.rows = KROWS; weakSelf.conditionModel.page = page; [weakSelf.sceneOrProductClollectionView.mj_footer resetNoMoreData]; [weakSelf getSceneLibrarydatas:weakSelf.conditionModel isRemove:YES]; }]; headerRefresh.stateLabel.hidden = YES; headerRefresh.lastUpdatedTimeLabel.hidden = YES; self.sceneOrProductClollectionView.mj_header = headerRefresh; [self.sceneOrProductClollectionView.mj_header beginRefreshing]; //上拉加载 self.sceneOrProductClollectionView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{ if ( ++ weakSelf.indexPage > weakSelf.totalPages) { [weakSelf.sceneOrProductClollectionView.mj_footer endRefreshingWithNoMoreData]; }else { //默认数据 DataPage *Newpage = [[DataPage alloc]init]; Newpage.rows = KROWS; Newpage.page = weakSelf.indexPage; weakSelf.conditionModel.page = Newpage; [weakSelf getSceneLibrarydatas:weakSelf.conditionModel isRemove:NO]; } }]; self.sceneOrProductClollectionView.mj_footer.automaticallyHidden = YES; } #pragma mark -获取场景列表数据 - (void)getSceneLibrarydatas:(SceneCondition *)condition isRemove:(BOOL)remove { WS(weakSelf); [[NetworkRequestClassManager Manager] NetworkRequestWithURL:SERVERREQUESTURL(SCENELIST) WithRequestType:ZERO WithParameter:condition WithReturnValueBlock:^(id returnValue) { weakSelf.sceneOrProductClollectionView.emptyDataSetSource = weakSelf; [weakSelf endRefreshingForTableView:weakSelf.sceneOrProductClollectionView]; if ([returnValue[@"code"] isEqualToNumber:@0]) { if (remove) { [weakSelf.sceneDatasArray removeAllObjects]; } SceneResponse *response = [[SceneResponse alloc]initWithDictionary:returnValue[@"data"] error:nil]; weakSelf.totalPages = [returnValue[@"data"][@"totalpages"] intValue]; for (TOSceneEntity *model in response.list) { SceneListModel *newModel = [[SceneListModel alloc]init]; newModel.fid = model.fid; newModel.sceneCode = model.sceneCode; newModel.name = model.name; newModel.pricure = model.pricure; newModel.category = model.category; newModel.style = model.style; newModel.space = model.space; newModel.isSelectedSate = NO; [self.sceneDatasArray addObject:newModel]; } for (SceneListModel *model in SHARED_APPDELEGATE.sceneArray) { for (SceneListModel *sceneModel in self.sceneDatasArray) { if ([model.fid isEqualToString:sceneModel.fid]) { sceneModel.isSelectedSate = YES; } } } [weakSelf.sceneOrProductClollectionView reloadData]; } else { [XBLoadingView showHUDViewWithText:returnValue[@"message"]]; } } WithFailureBlock:^(id error) { [weakSelf endRefreshingForTableView:weakSelf.sceneOrProductClollectionView]; }]; } #pragma mark -产品数据 - (void)GetdatasAction { [self getScreeningdatasisRemoveArray:YES]; //下拉刷新 __weak typeof(self) weakSelf = self; MjRefreshHeaderCustom *headerRefresh = [MjRefreshHeaderCustom headerWithRefreshingBlock:^{ //分页数据 DataPage *Newpage = [[DataPage alloc]init]; Newpage.page = 1; Newpage.rows = KROWS; weakSelf.goodsModel.page = Newpage; weakSelf.indexPage = 1; [weakSelf.sceneOrProductClollectionView.mj_footer resetNoMoreData]; [weakSelf getGoodsListDatasisRemove:YES Withobject:self.goodsModel]; }]; headerRefresh.stateLabel.hidden = YES; headerRefresh.lastUpdatedTimeLabel.hidden = YES; self.sceneOrProductClollectionView.mj_header = headerRefresh; [self.sceneOrProductClollectionView.mj_header beginRefreshing]; //上拉加载 self.sceneOrProductClollectionView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{ if (++ weakSelf.indexPage > weakSelf.totalPages) { [weakSelf.sceneOrProductClollectionView.mj_footer endRefreshingWithNoMoreData]; }else { //分页数据 DataPage *Newpage = [[DataPage alloc]init]; Newpage.rows = KROWS; Newpage.page = weakSelf.indexPage; weakSelf.goodsModel.page = Newpage; [weakSelf getGoodsListDatasisRemove:NO Withobject:weakSelf.goodsModel]; } }]; self.sceneOrProductClollectionView.mj_footer.automaticallyHidden = YES; } #pragma mark -获取产品筛选数据 - (void)getScreeningdatasisRemoveArray:(BOOL)remove { __weak typeof(self) weakSelf = self; [[NetworkRequestClassManager Manager] NetworkWithDictionaryRequestWithURL:SERVERREQUESTURL(PRODUCTSCREENING) WithRequestType:ONE WithParameter:nil WithReturnValueBlock:^(id returnValue) { if ([returnValue[@"code"] isEqualToNumber:@0]) { if (remove) { [weakSelf.productScreeningDatasArray removeAllObjects]; } GoodsFilter *goodsScreening = [[GoodsFilter alloc]initWithDictionary:returnValue[@"data"] error:nil]; for (int i=0; i<5; i++) { NSMutableArray *array = [NSMutableArray array]; [weakSelf.productScreeningDatasArray addObject:array]; } for (DataDict *model in goodsScreening.styles) { DataDictModel *newModel = [[DataDictModel alloc]init]; newModel.typeName = model.typeName; newModel.typecode = model.typecode; newModel.isSelectedSate = NO; [[weakSelf.productScreeningDatasArray objectAtIndex_opple:0] addObject:newModel]; } for (DataDict *model in goodsScreening.space) { DataDictModel *newModel = [[DataDictModel alloc]init]; newModel.typeName = model.typeName; newModel.typecode = model.typecode; newModel.isSelectedSate = NO; [[weakSelf.productScreeningDatasArray objectAtIndex_opple:1] addObject:newModel]; } for (GoodsCategory *model in goodsScreening.categories) { GoodsCategoryModel *newModel = [[GoodsCategoryModel alloc]init]; newModel.fid = model.fid; newModel.name = model.name; newModel.children = model.children; newModel.isSelectedState = NO; [weakSelf.openArray addObject:@"0"];//section关闭状态; [[weakSelf.productScreeningDatasArray objectAtIndex_opple:2] addObject:newModel]; } for (DataDict *model in goodsScreening.material) { DataDictModel *newModel = [[DataDictModel alloc]init]; newModel.typeName = model.typeName; newModel.typecode = model.typecode; newModel.isSelectedSate = NO; [[weakSelf.productScreeningDatasArray objectAtIndex_opple:3] addObject:newModel]; } for (DataDict *model in goodsScreening.price) { DataDictModel *newModel = [[DataDictModel alloc]init]; newModel.typeName = model.typeName; newModel.typecode = model.typecode; newModel.isSelectedSate = NO; [[weakSelf.productScreeningDatasArray objectAtIndex_opple:4] addObject:newModel]; } [weakSelf.screeningTableView reloadData]; } else { [XBLoadingView showHUDViewWithText:returnValue[@"message"]]; } } WithFailureBlock:^(NSError *error) { [XBLoadingView showHUDViewWithText:error.localizedDescription]; }]; } #pragma mark -获取商品列表数据 - (void)getGoodsListDatasisRemove:(BOOL)remove Withobject:(GoodsCondition *)conditon { WS(weakSelf); [self getGoodsListdatas:conditon returnResponse:^(GoodsResponse *response) { weakSelf.sceneOrProductClollectionView.emptyDataSetSource = weakSelf; if (remove) { [weakSelf.productDatasArray removeAllObjects]; } for (TOGoodsEntity *model in response.goodsEntity) { TOGoodsEntityModel *newModel = [[TOGoodsEntityModel alloc]init]; newModel.resellerInv = model.resellerInv; newModel.resellerTagPrice = model.resellerTagPrice; newModel.resellerState = model.resellerState; newModel.categoryName = model.categoryName; newModel.brandName = model.brandName; newModel.fid = model.fid; newModel.createDate = model.createDate; newModel.onlineTime = model.onlineTime; newModel.company = model.company; newModel.code = model.code; newModel.name = model.name; newModel.number = model.number; newModel.categoryId = model.categoryId; newModel.brandId = model.brandId; newModel.keyword = model.keyword; newModel.guidePrice = model.guidePrice; newModel.tagPrice = model.tagPrice; newModel.costPrice = model.costPrice; newModel.state = model.state; newModel.inv = model.inv; newModel.detailedIntro = model.detailedIntro; newModel.weight = model.weight; newModel.unit = model.unit; newModel.productProfile = model.productProfile; newModel.power = model.power; newModel.colorTemperature = model.colorTemperature; newModel.spec = model.spec; newModel.function = model.function; newModel.material = model.material; newModel.lightSource = model.lightSource; newModel.goodsStyle = model.goodsStyle; newModel.series = model.series; newModel.area = model.area; newModel.size = model.size; newModel.space = model.space; newModel.installMethod = model.installMethod; newModel.lightNumber = model.lightNumber; newModel.pictures = model.pictures; newModel.barcode = model.barcode; newModel.isSelectedState = NO; newModel.goodsNumber = ONE; [weakSelf.productDatasArray addObject:newModel]; } for (TOGoodsEntityModel *model in SHARED_APPDELEGATE.productArray) { for (TOGoodsEntityModel *productModel in weakSelf.productDatasArray) { if ([model.fid isEqualToString:productModel.fid]) { productModel.isSelectedState = YES; } } } [weakSelf.sceneOrProductClollectionView reloadData]; }]; } #pragma mark -获取商品列表数据 - (void)getGoodsListdatas:(GoodsCondition *)conditon returnResponse:(void(^)(GoodsResponse *))finish { WS(weakSelf); [[NetworkRequestClassManager Manager] NetworkRequestWithURL:SERVERREQUESTURL(PRODUCTLIST) WithRequestType:ZERO WithParameter:conditon WithReturnValueBlock:^(id returnValue) { [weakSelf endRefreshingForTableView:weakSelf.sceneOrProductClollectionView]; if ([returnValue[@"code"] isEqualToNumber:@0]) { GoodsResponse *sponse = [[GoodsResponse alloc]initWithDictionary:returnValue[@"data"] error:nil]; weakSelf.totalPages = [returnValue[@"data"][@"totalpages"] intValue]; //返回结果 finish(sponse); }else { [XBLoadingView showHUDViewWithText:returnValue[@"message"]]; } }WithFailureBlock:^(NSError *error) { [weakSelf endRefreshingForTableView:weakSelf.sceneOrProductClollectionView]; [XBLoadingView showHUDViewWithText:error.localizedDescription]; }]; } #pragma mark - UITableViewDataSource代理 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if (self.rightSelectedIndex == 2) { BOOL boolValue = [[self.openArray objectAtIndex_opple:section] boolValue]; GoodsCategoryModel *model = [[self.productScreeningDatasArray objectAtIndex_opple:self.rightSelectedIndex] objectAtIndex_opple:section]; return boolValue?model.children.count:0; } return 0; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { ScreeningTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ScreeningCellNew" forIndexPath:indexPath]; GoodsCategoryModel *model= [self.productScreeningDatasArray objectAtIndex_opple:self.rightSelectedIndex][indexPath.section]; cell.screeningLabe.text = [[model.children objectAtIndex_opple:indexPath.row] name]; return cell; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 55; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [self CancelTableviewSectionState]; ScreeningTableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; cell.screeningLabe.backgroundColor = kTCColor(221, 221, 221); cell.screeningLabe.textColor = kMainBlueColor; GoodsCategoryModel *model = [[self.productScreeningDatasArray objectAtIndex_opple:self.rightSelectedIndex] objectAtIndex_opple:indexPath.section]; self.goodsModel.categoryEquals = [[model.children objectAtIndex_opple:indexPath.row] fid]; [self.sceneOrProductClollectionView.mj_header beginRefreshing]; } - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { SceneSectionHeaderView *sectionView = [tableView dequeueReusableHeaderFooterViewWithIdentifier:@"headerView"]; if (self.isScene) { [sectionView.sectionButton setTitle:[[self.sceneScreeningDatasArray objectAtIndex_opple:self.rightSelectedIndex][section] typeName] forState:UIControlStateNormal]; }else { if (self.rightSelectedIndex == 2) { [sectionView.sectionButton setTitle:[[self.productScreeningDatasArray objectAtIndex_opple:self.rightSelectedIndex][section] name] forState:UIControlStateNormal]; }else { [sectionView.sectionButton setTitle:[[self.productScreeningDatasArray objectAtIndex_opple:self.rightSelectedIndex][section] typeName] forState:UIControlStateNormal]; } } sectionView.sectionButton.tag = section+100; [sectionView.sectionButton addTarget:self action:@selector(SectionButtonClickAction:) forControlEvents:UIControlEventTouchUpInside]; return sectionView; } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { NSArray *array = [self.isScene?self.sceneScreeningDatasArray:self.productScreeningDatasArray objectAtIndex_opple:self.rightSelectedIndex]; return array.count; } - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 55; } #pragma mark -区头选中 - (void)SectionButtonClickAction:(UIButton *)button { [self CancelTableviewSectionState]; if (self.rightSelectedIndex !=2 ) { button.selected = YES; button.backgroundColor = kTCColor(221, 221, 221); } [self emptyModel]; switch (self.rightSelectedIndex) { case 0://风格 { if (self.isScene) { self.conditionModel.styleEquals = [[[self.sceneScreeningDatasArray objectAtIndex_opple:self.rightSelectedIndex] objectAtIndex_opple:button.tag-100] typecode]; self.conditionModel.spaceEquals = nil; }else { self.goodsModel.styleEquals = [[[self.productScreeningDatasArray objectAtIndex_opple:self.rightSelectedIndex] objectAtIndex_opple:button.tag-100] typecode]; } } break; case 1://空间 { if (self.isScene) { self.conditionModel.spaceEquals = [[[self.sceneScreeningDatasArray objectAtIndex_opple:self.rightSelectedIndex] objectAtIndex_opple:button.tag-100] typecode]; self.conditionModel.styleEquals = nil; }else { self.goodsModel.spaceEquals = [[[self.productScreeningDatasArray objectAtIndex_opple:self.rightSelectedIndex] objectAtIndex_opple:button.tag-100] typecode]; } } break; case 2://类型 { } break; case 3://材质 { self.goodsModel.materialEqueals = [[[self.productScreeningDatasArray objectAtIndex_opple:self.rightSelectedIndex] objectAtIndex_opple:button.tag-100] typecode]; } break; case 4://价格 { //价格字符串切割 NSArray *spacrArray = [[[[self.productScreeningDatasArray objectAtIndex_opple:self.rightSelectedIndex] objectAtIndex_opple:button.tag-100] typeName] componentsSeparatedByString:@"到"]; self.goodsModel.startprice = (NSDecimalNumber *)[NSDecimalNumber numberWithInteger:[[spacrArray objectAtIndex_opple:0] integerValue]]; self.goodsModel.endprice = (NSDecimalNumber *)[NSDecimalNumber numberWithInteger:[[spacrArray objectAtIndex_opple:1] integerValue]]; } break; default: break; } if (self.rightSelectedIndex == 2) { BOOL boolValue = [[self.openArray objectAtIndex_opple:button.tag-100] boolValue]; NSMutableIndexSet *index = [[NSMutableIndexSet alloc]init]; for (int i=0; i