RDSRoomVC.m 10 KB

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