RDSRoomVC.m 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. //
  2. // RDSRoomVC.m
  3. // Temperature
  4. //
  5. // Created by RD on 2022/11/2.
  6. //
  7. #import "RDSRoomVC.h"
  8. #import "RDSRoomCell.h"
  9. #import "RDSAirControlVC.h"
  10. #import "RDSSubControlVC.h"
  11. #import "RDSAddRoomView.h"
  12. #import "RDSResetDeviceVC.h"
  13. #import <MJRefresh/MJRefresh.h>
  14. #import "GCDTimer.h"// 轮询定时器
  15. #import "RDSSelectDeviceMainVC.h"
  16. static NSString * const RDSRoomCellID = @"RDSRoomCellID";
  17. @interface RDSRoomVC ()<UICollectionViewDelegate, UICollectionViewDataSource>
  18. @property (nonatomic, strong) RDSAddRoomView *addView;
  19. @property (nonatomic, weak) UICollectionView *collectionView;
  20. @property (nonatomic, strong) UIBarButtonItem *addBtn;
  21. @property (nonatomic, strong) UIBarButtonItem *editBtn;
  22. @property (nonatomic, strong) UIBarButtonItem *finishBtn;
  23. @property (nonatomic, assign) BOOL isEdit;// 是否在编辑房间
  24. @property (nonatomic, strong) GCDTimer *gcdTimer;
  25. @end
  26. @implementation RDSRoomVC
  27. - (void)viewDidLoad {
  28. [super viewDidLoad];
  29. // Do any additional setup after loading the view.
  30. self.navigationItem.title = @"我的房间";
  31. [self p_navAddRoomItem];
  32. [self p_navEditItem];
  33. [self p_setupCollectionView];
  34. [self p_setUpTimer];
  35. }
  36. - (void)viewDidAppear:(BOOL)animated{
  37. [super viewDidAppear:animated];
  38. [_gcdTimer resumeTimer];// 开始轮询
  39. }
  40. - (void)viewDidDisappear:(BOOL)animated{
  41. [super viewDidDisappear:animated];
  42. [_gcdTimer pauseTimer];// 暂停轮询
  43. }
  44. - (void)p_navAddRoomItem{
  45. [self.navigationItem setLeftBarButtonItem:self.addBtn];
  46. }
  47. - (void)p_navEditItem{
  48. [self.navigationItem setRightBarButtonItem:self.editBtn];
  49. }
  50. - (void)p_navFinishItem{
  51. [self.navigationItem setRightBarButtonItem:self.finishBtn];
  52. }
  53. - (UIBarButtonItem *)addBtn{
  54. if(_addBtn == nil){
  55. UIBarButtonItem *item = [RDSBarButtonItem barButtonItemWithTitle:@"添加" color:kTextColor target:self action:@selector(p_onAddRoomBtn)];
  56. _addBtn = item;
  57. }
  58. return _addBtn;
  59. }
  60. - (UIBarButtonItem *)editBtn{
  61. if(_editBtn == nil){
  62. UIBarButtonItem *item = [RDSBarButtonItem barButtonItemWithTitle:@"编辑" color:kTextColor target:self action:@selector(p_onEitdBtn)];
  63. _editBtn = item;
  64. }
  65. return _editBtn;
  66. }
  67. - (UIBarButtonItem *)finishBtn{
  68. if(_finishBtn == nil){
  69. UIBarButtonItem *item = [RDSBarButtonItem barButtonItemWithTitle:@"完成" color:RDSGreenColor target:self action:@selector(p_onEitdFinishBtn)];
  70. _finishBtn = item;
  71. }
  72. return _finishBtn;
  73. }
  74. - (void)p_onEitdBtn{
  75. [_gcdTimer pauseTimer];// 暂停轮询
  76. _isEdit = YES;
  77. [self p_navFinishItem];
  78. self.tabBarController.tabBar.hidden = YES;
  79. [self.collectionView reloadData];
  80. }
  81. - (void)p_onEitdFinishBtn{
  82. [_gcdTimer resumeTimer];// 开始轮询
  83. _isEdit = NO;
  84. [self p_navEditItem];
  85. self.tabBarController.tabBar.hidden = NO;
  86. [self.collectionView reloadData];
  87. }
  88. - (void)p_onAddRoomBtn{
  89. RDSSelectDeviceMainVC *selectDeviceMainVC = [[RDSSelectDeviceMainVC alloc] init];
  90. selectDeviceMainVC.hidesBottomBarWhenPushed = YES;
  91. [self pushViewController:selectDeviceMainVC animated:YES];
  92. // RDSResetDeviceVC *vc = [[RDSResetDeviceVC alloc] init];
  93. // vc.hidesBottomBarWhenPushed = YES;
  94. // [self pushViewController:vc animated:YES];
  95. }
  96. - (void)p_setupCollectionView {
  97. UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
  98. CGFloat viewW = SCREEN_WIDTH - 16 * 2;
  99. layout.itemSize = CGSizeMake(viewW, 80);
  100. layout.minimumLineSpacing = 8;
  101. layout.sectionInset = UIEdgeInsetsMake(16, 16, 16, 16);
  102. layout.scrollDirection = UICollectionViewScrollDirectionVertical;
  103. layout.sectionHeadersPinToVisibleBounds = YES;
  104. UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
  105. collectionView.showsHorizontalScrollIndicator = NO;
  106. collectionView.showsVerticalScrollIndicator = NO;
  107. collectionView.backgroundColor = UIColor.clearColor;
  108. [collectionView registerClass:[RDSRoomCell class] forCellWithReuseIdentifier:RDSRoomCellID];
  109. collectionView.delegate = self;
  110. collectionView.dataSource = self;
  111. collectionView.pagingEnabled = NO;
  112. [self.view addSubview:collectionView];
  113. self.collectionView = collectionView;
  114. [collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
  115. make.left.equalTo(self.view);
  116. make.right.equalTo(self.view);
  117. make.bottom.equalTo(self.view.mas_bottom);
  118. if (@available(iOS 11.0, *)) {
  119. make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop);
  120. // make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom);
  121. } else {
  122. make.top.equalTo(self.view);
  123. }
  124. }];
  125. MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(p_getHomeDetail)];
  126. header.automaticallyChangeAlpha = YES;
  127. header.lastUpdatedTimeLabel.hidden = YES;
  128. self.collectionView.mj_header = header;
  129. }
  130. // 弃用
  131. //- (void)reloadData{
  132. //
  133. // RDS_WEAKSELF(weakSelf)
  134. // [RDSRoomModel rds_getRoomListFinished:^(NSError * _Nonnull error) {
  135. //
  136. // weakSelf.addView.hidden = (BOOL)TheDataManager.rooms.count;
  137. // if(TheDataManager.rooms.count == 0){
  138. // [weakSelf p_onEitdFinishBtn];
  139. // }
  140. //
  141. // [weakSelf.collectionView.mj_header endRefreshing];
  142. // [weakSelf.collectionView reloadData];
  143. // }];
  144. //}
  145. - (void)p_getHomeDetail{
  146. RDS_WEAKSELF(weakSelf)
  147. [RDSHomeModel rds_getHomeDetailWithHomeId:TheDataManager.current_home_id finished:^(RDSHomeModel *home, NSError *error) {
  148. weakSelf.addView.hidden = (BOOL)TheDataManager.rooms.count;
  149. if(TheDataManager.rooms.count == 0){
  150. [weakSelf p_onEitdFinishBtn];
  151. }
  152. [weakSelf.collectionView.mj_header endRefreshing];
  153. [weakSelf.collectionView reloadData];
  154. }];
  155. }
  156. #pragma mark - 轮询 开始-暂停要一一对应
  157. // 定时轮询 3秒一次
  158. - (void)p_setUpTimer{
  159. self.gcdTimer = [[GCDTimer alloc] init];
  160. RDS_WEAKSELF(weakSelf)
  161. [_gcdTimer scheduledTimerWithTimeInterval:3 afterTime:0 repeats:YES block:^{
  162. [weakSelf p_getHomeDetail];
  163. }];
  164. }
  165. - (void)p_restartTimer{
  166. [_gcdTimer restartTimer];
  167. }
  168. #pragma mark - UICollectionViewDelegate
  169. - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
  170. [collectionView deselectItemAtIndexPath:indexPath animated:YES];
  171. if (_isEdit) return;
  172. RDSRoomModel *roomModel = TheDataManager.rooms[indexPath.row];
  173. if(roomModel.is_master){
  174. RDSAirControlVC *vc = [[RDSAirControlVC alloc] init];
  175. vc.hidesBottomBarWhenPushed = YES;
  176. vc.roomModel = roomModel;
  177. [self pushViewController:vc animated:YES];
  178. }
  179. else{
  180. RDSSubControlVC *vc = [[RDSSubControlVC alloc] init];
  181. vc.hidesBottomBarWhenPushed = YES;
  182. vc.roomModel = roomModel;
  183. [self pushViewController:vc animated:YES];
  184. }
  185. }
  186. #pragma mark - UICollectionViewDataSource
  187. - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
  188. return 1;
  189. }
  190. - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
  191. return TheDataManager.rooms.count;
  192. }
  193. - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
  194. RDSRoomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:RDSRoomCellID forIndexPath:indexPath];
  195. RDSRoomModel *model = TheDataManager.rooms[indexPath.row];
  196. cell.model = model;
  197. cell.isEdit = _isEdit;
  198. RDS_WEAKSELF(weakSelf)
  199. cell.onPowerClick = ^(BOOL onOff) {
  200. // 开关
  201. if(model.is_master){
  202. [RDSDemoApiHelper rds_setPower:onOff control_number:model.control_number success:^(id responseObject) {
  203. if ([responseObject[@"code"] intValue] != 0) {
  204. [RDSHudShower showBottomToast:responseObject[@"message"]];
  205. }
  206. } failure:^(NSError *error) {
  207. [RDSHudShower showBottomToast:@"连接服务器失败"];
  208. }];
  209. }
  210. else{
  211. [RDSDemoApiHelper rds_setSubDevPower:onOff control_number:model.control_number success:^(id responseObject) {
  212. if ([responseObject[@"code"] intValue] != 0) {
  213. [RDSHudShower showBottomToast:responseObject[@"message"]];
  214. }
  215. } failure:^(NSError *error) {
  216. [RDSHudShower showBottomToast:@"连接服务器失败"];
  217. }];
  218. }
  219. };
  220. cell.onDelClick = ^{
  221. [weakSelf p_onDelAction:model.record_id];
  222. };
  223. return cell;
  224. }
  225. - (void)p_onDelAction:(NSString *)roomId{
  226. RDS_WEAKSELF(weakSelf)
  227. [self rds_alertMessage:@"确定删除所选房间吗?" doneAction:^{
  228. [RDSRoomModel rds_delRoomId:roomId finished:^(NSError * _Nonnull error) {
  229. [weakSelf p_getHomeDetail];
  230. }];
  231. }];
  232. }
  233. // 不允许高亮
  234. - (void)collectionView:(UICollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath{
  235. RDSRoomCell *cell = (RDSRoomCell*)[self.collectionView cellForItemAtIndexPath:indexPath];
  236. cell.highlighted = NO;
  237. }
  238. - (RDSAddRoomView *)addView{
  239. if(_addView == nil){
  240. _addView = [RDSAddRoomView rds_loadViewFromNib];
  241. _addView.hidden = YES;
  242. [self.collectionView addSubview:_addView];
  243. [_addView mas_makeConstraints:^(MASConstraintMaker *make) {
  244. make.left.equalTo(self.view);//.offset(20);
  245. make.right.equalTo(self.view);//.offset(-20);
  246. make.height.equalTo(@300);
  247. make.top.equalTo(@(SCREEN_HEIGHT*0.2));
  248. }];
  249. RDS_WEAKSELF(weakSelf)
  250. _addView.onAddClick = ^{
  251. [weakSelf p_onAddRoomBtn];
  252. };
  253. }
  254. return _addView;
  255. }
  256. - (void)dealloc{
  257. // 取消轮询
  258. [_gcdTimer stopTimer];
  259. DDLog(@"dealloc~~");
  260. }
  261. @end