DemanHallViewController.m 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370
  1. //
  2. // DemanHallViewController.m
  3. // HappyWork
  4. //
  5. // Created by 张晓光 on 2019/9/19.
  6. // Copyright © 2019 张晓光. All rights reserved.
  7. //
  8. #import "DemanHallViewController.h"
  9. #import "DemanHallMenuFilterView.h"
  10. #import "DemanHallNaviBarView.h"
  11. #import "AgreementPolicyView.h"
  12. #import "RegisterAgreementViewController.h"
  13. #import "PersonalCenterViewController.h"//个人中心
  14. #import "DemanHallDetailViewController.h"//详情
  15. #import "DemanHallViewModel.h"
  16. @interface DemanHallViewController ()
  17. <
  18. UITableViewDelegate,
  19. DemanHallMenuFilterViewDelegate,
  20. PageListTableViewDelegate
  21. >
  22. @property (nonatomic, strong) PageListTableView *tableView;
  23. @property (nonatomic, strong) DemanHallMenuFilterView *menuFilterView;
  24. @property (nonatomic, strong) DemanHallNaviBarView *naviBarView;
  25. @property (nonatomic, strong) DemanHallViewModel *viewModel;
  26. @end
  27. @implementation DemanHallViewController
  28. #pragma mark - life cycle
  29. - (void)dealloc {
  30. [[NSNotificationCenter defaultCenter] removeObserver:self name:loginRefreshNotification object:nil];
  31. [[NSNotificationCenter defaultCenter] removeObserver:self name:refreshDemandHallNotification object:nil];
  32. }
  33. - (void)viewWillAppear:(BOOL)animated {
  34. [super viewWillAppear:animated];
  35. [self.navigationController setNavigationBarHidden:YES animated:animated];
  36. }
  37. - (void)viewDidLoad {
  38. [super viewDidLoad];
  39. NAVI_BACK_TITLE;
  40. [self makeConstraints];
  41. [self dealWithNetworkRequestResult];
  42. //添加登录刷新通知
  43. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loginRefresh:) name:loginRefreshNotification object:nil];
  44. //添加取消报名刷新通知
  45. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshHallSignup:) name:refreshDemandHallNotification object:nil];
  46. [self showAgreementAndPolicyView];
  47. }
  48. - (void)test{
  49. NSLog(@"分支测试");
  50. }
  51. #pragma mark - event response 通知
  52. /* 登录刷新 */
  53. - (void)loginRefresh:(NSNotification *)notification {
  54. self.tableView.currentPage = 1;
  55. [self.tableView.parametersDict setValue:@(self.tableView.currentPage) forKey:@"pageNo"];
  56. [self dealWithNetworkRequestListResult];
  57. }
  58. /* 报名和取消报名 */
  59. - (void)refreshHallSignup:(NSNotification *)notification {
  60. NSDictionary *dict = notification.userInfo;
  61. NSString *requirementId = [NSString stringWithFormat:@"%@",dict[@"requirementId"]];
  62. for (int i = 0; i < self.viewModel.listArray.count; i ++ )
  63. {
  64. NSString *ID = [NSString stringWithFormat:@"%@",self.viewModel.listArray[i][@"id"]];
  65. if ([requirementId isEqualToString:ID])
  66. {
  67. NSMutableDictionary *indexDict=[self.viewModel.listArray[i] mutableCopy];
  68. if ([dict[@"cancel"] boolValue])
  69. {//取消报名
  70. [indexDict setValue:@(NO) forKey:@"isEnrollment"];
  71. }
  72. else
  73. {//报名
  74. [indexDict setValue:@(YES) forKey:@"isEnrollment"];
  75. }
  76. [self.viewModel.listArray setObject:indexDict atIndexedSubscript:i];
  77. NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:1];
  78. [self.tableView.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationNone];
  79. return;
  80. }
  81. }
  82. }
  83. #pragma mark – init
  84. - (void)makeConstraints {
  85. self.view.backgroundColor = COLOR_F5F5F5;
  86. [self.view addSubview:self.naviBarView];
  87. [self.view addSubview:self.tableView];
  88. [self.naviBarView mas_makeConstraints:^(MASConstraintMaker *make) {
  89. make.left.right.top.equalTo(self.view).offset(0);
  90. make.height.mas_equalTo(STATUS_BAR_H + 44);
  91. }];
  92. [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
  93. make.left.right.equalTo(self.view).offset(0);
  94. make.top.equalTo(self.naviBarView.mas_bottom).offset(0);
  95. make.bottom.equalTo(self.view.mas_bottom).offset(0);
  96. }];
  97. }
  98. #pragma mark - private metnod
  99. /* 显示协议政策 */
  100. - (void)showAgreementAndPolicyView {
  101. BOOL flag = [[NSUserDefaults standardUserDefaults] boolForKey:@"agreementPolicy"];
  102. if (!flag)
  103. {
  104. AgreementPolicyView *apView = [[AgreementPolicyView alloc] init];
  105. [self.view addSubview:apView];
  106. apView.readAgreementBlock = ^(NSInteger flag) {
  107. RegisterAgreementViewController *registerAgreement = [[RegisterAgreementViewController alloc]init];
  108. registerAgreement.type = flag;
  109. [self.navigationController pushViewController:registerAgreement animated:YES];
  110. };
  111. }
  112. }
  113. /* 处理请求结果 */
  114. - (void)dealWithNetworkRequestResult {
  115. __weak typeof(self) weakSelf = self;
  116. //更新
  117. [self.viewModel appUpdateRequirement];
  118. //banner
  119. [self.viewModel bannerRequirement:^{
  120. [weakSelf.tableView.tableView reloadData];
  121. }];
  122. //列表
  123. [self dealWithNetworkRequestListResult];
  124. }
  125. /* 需求列表 */
  126. - (void)dealWithNetworkRequestListResult {
  127. __weak typeof(self) weakSelf = self;
  128. [self.viewModel getRequirementList:self.tableView.parametersDict successful:^(NSDictionary * _Nonnull data) {
  129. weakSelf.tableView.lastPage = [data[@"data"][@"isLast"] boolValue];
  130. [weakSelf.tableView successfulRefreshOperation];
  131. if (weakSelf.viewModel.listArray.count == 0)
  132. {//空页面是否显示(没有加载更多了)
  133. weakSelf.tableView.refreshFooter.hiddenText = YES;
  134. }
  135. else
  136. {
  137. weakSelf.tableView.refreshFooter.hiddenText = NO;
  138. }
  139. [weakSelf.tableView.tableView reloadData];
  140. } failure:^(NSString * _Nonnull failureMessage) {
  141. [weakSelf.tableView failRefreshOperation];
  142. [HWProgressHUD fb_showFailureWithStatus:failureMessage];
  143. }];
  144. }
  145. #pragma mark - PageListTableViewDelegate
  146. - (void)refreshData {
  147. [self dealWithNetworkRequestResult];
  148. }
  149. #pragma mark - UITableViewDelegate
  150. - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
  151. if (section == 1)
  152. {
  153. return self.menuFilterView;
  154. }
  155. else
  156. {
  157. return nil;
  158. }
  159. }
  160. - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
  161. if (section == 1)
  162. {
  163. return 59;
  164. }
  165. else
  166. {
  167. return CGFLOAT_MIN;
  168. }
  169. }
  170. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  171. if (indexPath.section == 1)
  172. {
  173. if (self.viewModel.listArray.count > 0 )
  174. {
  175. DemanHallDetailViewController *detail = [[DemanHallDetailViewController alloc]init];
  176. detail.hwRequirementId = self.viewModel.listArray[indexPath.row][@"id"];
  177. detail.type = HWDemanDetailTypeHall;
  178. [self.navigationController pushViewController:detail animated:YES];
  179. }
  180. }
  181. }
  182. #pragma mark - DemanHallMenuFilterViewDelegate
  183. - (void)menuFilter:(DemanHallMenuFilterView *)menuFilter selectProvince:(NSString *)provinceCode city:(NSString *)cityCode area:(NSString *)areaCode {
  184. if (provinceCode.length > 0)
  185. {
  186. [self.tableView.parametersDict setValue:provinceCode forKey:@"province_code"];
  187. }
  188. else
  189. {
  190. [self.tableView.parametersDict removeObjectForKey:@"province_code"];
  191. }
  192. if (cityCode.length > 0)
  193. {
  194. [self.tableView.parametersDict setValue:cityCode forKey:@"city_code"];
  195. }
  196. else
  197. {
  198. [self.tableView.parametersDict removeObjectForKey:@"city_code"];
  199. }
  200. if (areaCode.length > 0)
  201. {
  202. [self.tableView.parametersDict setValue:areaCode forKey:@"country_code"];
  203. }
  204. else
  205. {
  206. [self.tableView.parametersDict removeObjectForKey:@"country_code"];
  207. }
  208. self.tableView.currentPage = 1;
  209. [self.tableView.parametersDict setValue:@(self.tableView.currentPage ) forKey:@"pageNo"];
  210. [self dealWithNetworkRequestListResult];
  211. }
  212. - (void)menuFilter:(DemanHallMenuFilterView *)menuFilter selectIndustry:(NSString *)industryName industryIndex:(NSString *)industryIndex {
  213. if ([industryIndex isEqualToString:@"-1"])
  214. {
  215. [self.tableView.parametersDict removeObjectForKey:@"trade_type"];
  216. }
  217. else
  218. {
  219. [self.tableView.parametersDict setValue:industryIndex forKey:@"trade_type"];
  220. }
  221. self.tableView.currentPage = 1;
  222. [self.tableView.parametersDict setValue:@(self.tableView.currentPage ) forKey:@"pageNo"];
  223. [self dealWithNetworkRequestListResult];
  224. }
  225. - (void)menuFilter:(DemanHallMenuFilterView *)menuFilter selectPrice:(NSString *)priceName priceIndex:(NSString *)priceIndex {
  226. [self.tableView.parametersDict setValue:priceIndex forKey:@"priceType"];
  227. self.tableView.currentPage = 1;
  228. [self.tableView.parametersDict setValue:@(self.tableView.currentPage) forKey:@"pageNo"];
  229. [self dealWithNetworkRequestListResult];
  230. }
  231. #pragma mark - event response
  232. /* 个人中心 */
  233. - (void)headerButtonClick:(UIButton *)btn {
  234. if (ISLOGIN)
  235. {
  236. PersonalCenterViewController *vc = [[PersonalCenterViewController alloc]init];
  237. [self.navigationController pushViewController:vc animated:YES];
  238. }
  239. else
  240. {
  241. AppDelegate * appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
  242. [appDelegate pushLoginViewController];
  243. }
  244. }
  245. #pragma mark - lazy
  246. - (PageListTableView *)tableView {
  247. if (_tableView == nil)
  248. {
  249. _tableView = [[PageListTableView alloc] init];
  250. _tableView.delagete = self;
  251. _tableView.tableView.delegate = self;
  252. _tableView.tableView.dataSource = self.viewModel;
  253. }
  254. return _tableView;
  255. }
  256. - (DemanHallNaviBarView *)naviBarView {
  257. if (_naviBarView == nil)
  258. {
  259. _naviBarView = [[DemanHallNaviBarView alloc]init];
  260. _naviBarView.titleLabel.text = @"需求大厅";
  261. [_naviBarView.rigthBtn setImage:[UIImage imageNamed:@"people_icon"] forState:UIControlStateNormal];
  262. [_naviBarView.rigthBtn addTarget:self action:@selector(headerButtonClick:) forControlEvents:UIControlEventTouchUpInside];
  263. }
  264. return _naviBarView;
  265. }
  266. - (DemanHallMenuFilterView *)menuFilterView {
  267. if (_menuFilterView == nil)
  268. {
  269. _menuFilterView = [[DemanHallMenuFilterView alloc]init];
  270. _menuFilterView.delegate = self;
  271. }
  272. return _menuFilterView;
  273. }
  274. - (DemanHallViewModel *)viewModel {
  275. if (_viewModel == nil)
  276. {
  277. _viewModel = [[DemanHallViewModel alloc]init];
  278. }
  279. return _viewModel;
  280. }
  281. /*
  282. #pragma mark - Navigation
  283. // In a storyboard-based application, you will often want to do a little preparation before navigation
  284. - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
  285. // Get the new view controller using [segue destinationViewController].
  286. // Pass the selected object to the new view controller.
  287. }
  288. */
  289. @end