From 1bfe617cab927dd7b14355bc5563ed0f4cf3d996 Mon Sep 17 00:00:00 2001 From: NSArray Date: Thu, 12 Mar 2026 18:08:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=8B=E8=A1=A8=E8=A7=A3=E7=BB=91=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../XinjiangProject.xcodeproj/project.pbxproj | 4 +- .../XinjiangProject/Define/StatusMacros.h | 18 +- .../Manager/NetworkHelpManager/XJPNetAPI.h | 5 + .../Manager/NetworkHelpManager/XJPNetAPI.m | 10 + .../Manager/UserManager/HQUserInfo.m | 8 +- .../Controllview/XJHomePageV2ViewController.m | 180 +++++------ .../Project/HomeV2/View/BindWatchPopView.h | 29 ++ .../Project/HomeV2/View/BindWatchPopView.m | 289 ++++++++++++++++++ .../HomeV2/View/XJHomePageV2HeardView.h | 1 + .../HomeV2/View/XJHomePageV2HeardView.m | 5 + .../Project/HomeV2/View/XJHomeWatchDataView.h | 2 + .../Project/HomeV2/View/XJHomeWatchDataView.m | 110 ++++++- .../ic_watch_empty.imageset/Contents.json | 23 ++ .../EquipmentNoData.png | Bin 0 -> 4003 bytes .../EquipmentNoData@2x.png | Bin 0 -> 11515 bytes .../EquipmentNoData@3x.png | Bin 0 -> 21871 bytes 16 files changed, 558 insertions(+), 126 deletions(-) create mode 100644 XinjiangProject/XinjiangProject/Project/HomeV2/View/BindWatchPopView.h create mode 100644 XinjiangProject/XinjiangProject/Project/HomeV2/View/BindWatchPopView.m create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/HOMEV2/ic_watch_empty.imageset/Contents.json create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/HOMEV2/ic_watch_empty.imageset/EquipmentNoData.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/HOMEV2/ic_watch_empty.imageset/EquipmentNoData@2x.png create mode 100644 XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/HOMEV2/ic_watch_empty.imageset/EquipmentNoData@3x.png diff --git a/XinjiangProject/XinjiangProject.xcodeproj/project.pbxproj b/XinjiangProject/XinjiangProject.xcodeproj/project.pbxproj index 8e4fecf..26fa44c 100644 --- a/XinjiangProject/XinjiangProject.xcodeproj/project.pbxproj +++ b/XinjiangProject/XinjiangProject.xcodeproj/project.pbxproj @@ -375,7 +375,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = A7CC5LW224; ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_PREFIX_HEADER = "$(SRCROOT)/XinjiangProject/Supporting Files/PrefixHeader.pch"; @@ -419,7 +419,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = A7CC5LW224; ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_PREFIX_HEADER = "$(SRCROOT)/XinjiangProject/Supporting Files/PrefixHeader.pch"; diff --git a/XinjiangProject/XinjiangProject/Define/StatusMacros.h b/XinjiangProject/XinjiangProject/Define/StatusMacros.h index 84e01cc..af9b4bd 100755 --- a/XinjiangProject/XinjiangProject/Define/StatusMacros.h +++ b/XinjiangProject/XinjiangProject/Define/StatusMacros.h @@ -68,10 +68,10 @@ //#define SCHEME @"https" // //正式地址 -#define Http @"https://api-jkglpt.iosp.ydpt.tech"// -#define H5DevHost @"api-jkglpt.iosp.ydpt.tech"// -#define IntervenH5 @"https://console-jkglpt.iosp.ydpt.tech" -#define SCHEME @"https" // +//#define Http @"https://api-jkglpt.iosp.ydpt.tech"// +//#define H5DevHost @"api-jkglpt.iosp.ydpt.tech"// +//#define IntervenH5 @"https://console-jkglpt.iosp.ydpt.tech" +//#define SCHEME @"https" // //卫鑫本地 //#define Http @"https://api-jkglpt.iosp.ydpt.tech"// @@ -84,11 +84,11 @@ // 最新地址 //#define Http @"http://192.168.1.47"//王昊 -//#define Http @"https://xj-api.mcrm.vip:8888"// -////#define Http @"http://192.168.1.47"//王昊 -//#define H5DevHost @"xj-api.mcrm.vip:8888"// -//#define IntervenH5 @"https://xj-admin.mcrm.vip:8888" -//#define SCHEME @"https" // +#define Http @"https://xj-api.mcrm.vip:8888"// +//#define Http @"http://192.168.1.22"//王昊 +#define H5DevHost @"xj-api.mcrm.vip:8888"// +#define IntervenH5 @"https://xj-admin.mcrm.vip:8888" +#define SCHEME @"https" // //新疆项目后期的调试环境由阿里云迁移至公司内部主机服务器,功能联调和测试可用以下的环境地址 //https://api-xj.tri.icdat.cn diff --git a/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/XJPNetAPI.h b/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/XJPNetAPI.h index f0a2d4e..5d9d082 100755 --- a/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/XJPNetAPI.h +++ b/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/XJPNetAPI.h @@ -181,4 +181,9 @@ - (void)getWebNeedEncryptionKey:(NSMutableDictionary *)parmDic; +//绑定手表 +- (void)getBindWatchDevice:(NSMutableDictionary *)parmDic; +//解绑手表 +- (void)getUnBindWatchDevice:(NSMutableDictionary *)parmDic; + @end diff --git a/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/XJPNetAPI.m b/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/XJPNetAPI.m index ee98b90..6d093ad 100755 --- a/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/XJPNetAPI.m +++ b/XinjiangProject/XinjiangProject/Manager/NetworkHelpManager/XJPNetAPI.m @@ -912,4 +912,14 @@ [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-watch/api/watchData/userWatchDataAll",Http] params:parmDic]; } + +- (void)getBindWatchDevice:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-watch/watch/watchDevice/app/bindDevice",Http] params:parmDic]; +} +//解绑手表 +- (void)getUnBindWatchDevice:(NSMutableDictionary *)parmDic { + + [httpRequest httpGetRequest:[NSString stringWithFormat:@"%@/health-watch/watch/watchDevice/app/unbundleDevice",Http] params:parmDic]; +} @end diff --git a/XinjiangProject/XinjiangProject/Manager/UserManager/HQUserInfo.m b/XinjiangProject/XinjiangProject/Manager/UserManager/HQUserInfo.m index 574353f..e645a9f 100755 --- a/XinjiangProject/XinjiangProject/Manager/UserManager/HQUserInfo.m +++ b/XinjiangProject/XinjiangProject/Manager/UserManager/HQUserInfo.m @@ -21,9 +21,10 @@ [aCoder encodeObject:self.depart_id forKey:@"depart_id"]; [aCoder encodeObject:self.parentId forKey:@"parentId"]; [aCoder encodeObject:self.departName forKey:@"departName"]; + [aCoder encodeObject:self.workNo forKey:@"workNo"]; [aCoder encodeObject:self.token forKey:@"token"]; [aCoder encodeObject:self.sex_dictText forKey:@"sex_dictText"]; - + } @@ -43,6 +44,8 @@ self.parentId = [aDecoder decodeObjectForKey:@"parentId"]; self.departName = [aDecoder decodeObjectForKey:@"departName"]; self.token = [aDecoder decodeObjectForKey:@"token"]; + self.workNo = [aDecoder decodeObjectForKey:@"workNo"]; + self.sex_dictText = [aDecoder decodeObjectForKey:@"sex_dictText"]; } @@ -74,7 +77,8 @@ self.idCard = safeValue(userInfo[@"idCard"]); self.personType = safeValue(userInfo[@"personType"]); self.sex_dictText = safeValue(userInfo[@"sex_dictText"]); - + self.workNo = safeValue(userInfo[@"workNo"]); + NSDictionary *secondDepart = safeValue(userInfo[@"secondDepart"]); if ([secondDepart isKindOfClass:[NSDictionary class]]) { self.secondDepart = secondDepart; diff --git a/XinjiangProject/XinjiangProject/Project/HomeV2/Controllview/XJHomePageV2ViewController.m b/XinjiangProject/XinjiangProject/Project/HomeV2/Controllview/XJHomePageV2ViewController.m index 9d60a22..d9f001b 100644 --- a/XinjiangProject/XinjiangProject/Project/HomeV2/Controllview/XJHomePageV2ViewController.m +++ b/XinjiangProject/XinjiangProject/Project/HomeV2/Controllview/XJHomePageV2ViewController.m @@ -36,6 +36,7 @@ #import "HomeBannerModel.h" #import "SDCycleScrollView.h" #import "BRPickerView.h" +#import "BindWatchPopView.h" static CGFloat const kEmptyTableMinHeight = 250; // 或屏幕高度的一半 @@ -79,6 +80,8 @@ static CGFloat const kEmptyTableMinHeight = 250; // 或屏幕高度的一半 //加密后的字符串 @property (nonatomic, copy) NSString * secretString; +//绑定弹窗 +@property (nonatomic, strong) BindWatchPopView * bindPopView; @end @@ -102,6 +105,14 @@ static CGFloat const kEmptyTableMinHeight = 250; // 或屏幕高度的一半 return _coverView; } +-(BindWatchPopView *)bindPopView { + + if (!_bindPopView) { + _bindPopView = [[BindWatchPopView alloc] initWithFrame:CGRectZero]; + } + return _bindPopView; +} + - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. @@ -375,7 +386,25 @@ static CGFloat const kEmptyTableMinHeight = 250; // 或屏幕高度的一半 [searchApi getWebNeedEncryptionKey:parmDic]; } - +#pragma mark:绑定手表 +- (void)getBindWatchDataWithSerialNum:(NSString *)numNo { + [self showMBProgressHUDWithString:@"绑定中,请稍候..." autoHidden:false]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:numNo forKey:@"watchNo"]; + XJPNetAPI * searchApi = [[XJPNetAPI alloc] init:self tag:@"BINDWATCH" NeedToken:@""]; + + [searchApi getBindWatchDevice:parmDic]; +} +#pragma mark:解除绑定手表 +- (void)getUnBindWatchDataWithSerialNum:(NSString *)numNo { + + [self showMBProgressHUDWithString:@"解绑中,请稍候..." autoHidden:false]; + NSMutableDictionary * parmDic = [[NSMutableDictionary alloc] init]; + [parmDic setObject:numNo forKey:@"watchNo"]; + XJPNetAPI * searchApi = [[XJPNetAPI alloc] init:self tag:@"UNBINDWATCH" NeedToken:@""]; + + [searchApi getUnBindWatchDevice:parmDic]; +} - (void)Failed:(NSString*)message tag:(NSString*)tag { @@ -398,12 +427,10 @@ static CGFloat const kEmptyTableMinHeight = 250; // 或屏幕高度的一半 }); } if ([tag isEqualToString:@"WEARWATCH"]) { + self.topView.watchArray = @[]; } - if ([tag isEqualToString:@"WEARWATCH"]) { - self.topView.watchArray = @[]; - } - + [self showMBProgressHUDOnlyWithString:message]; [self hiddenAllMBProgressHUD]; @@ -446,68 +473,7 @@ static CGFloat const kEmptyTableMinHeight = 250; // 或屏幕高度的一半 } } - - if ([tag isEqualToString:@"IMAPI"]) { - [self hiddenAllMBProgressHUD]; - - NSDictionary * pamrDic = response; - IMUserInfoModel * model = [IMUserInfoModel modelWithDictionary:pamrDic]; - IMUserInfoModel * iminfoModel = [[IMUserInfoModel alloc] init]; - iminfoModel.IMInfo = pamrDic; - [HQCommonUtils keyedArchiverWithData:iminfoModel key:IMLoginUserInfo]; - // 1. 从即时通信 IM 控制台获取应用 SDKAppID。 - // 2. 初始化 config 对象 - V2TIMSDKConfig *config = [[V2TIMSDKConfig alloc] init]; - // 3. 指定 log 输出级别。 - config.logLevel = V2TIM_LOG_INFO; - // 4. 添加 V2TIMSDKListener 的事件监听器,self 是 id 的实现类,如果您不需要监听 IM SDK 的事件,这个步骤可以忽略。 - [[V2TIMManager sharedInstance] addIMSDKListener:self]; - // 5. 初始化 IM SDK,调用这个接口后,可以立即调用登录接口。 - [[V2TIMManager sharedInstance] initSDK:[model.sdkAppId intValue] config:config]; - config.logLevel = V2TIM_LOG_INFO; - - [TUILogin login:[model.sdkAppId intValue] userID:model.userId userSig:model.userSig succ:^{ - - - } fail:^(int code, NSString *msg) { - - [EasyTextView showErrorText:msg]; - - }]; - - } - if ([tag isEqualToString:@"SMALLHELP"]) { - - [self hiddenAllMBProgressHUD]; - - SmallHelpIMDataModel * model = [SmallHelpIMDataModel modelWithDictionary:response]; - ChatViewController * chatVC = [[ChatViewController alloc] init]; - chatVC.isGroupID = YES; - chatVC.chatID = model.groupId; - chatVC.smallHelp_id = model.small_id; - chatVC.isVideo = false; - chatVC.eableSendReport = YES; - chatVC.eableMapTools = false; - chatVC.navTitle = @"全科医生"; - chatVC.eablehaveHelathData = YES; - chatVC.tfNew = model.tfNew; - [self.navigationController pushViewController:chatVC animated:YES]; - - } - - if ([tag isEqualToString:@"loginIMAPI"]) { - [self hiddenAllMBProgressHUD]; - NSDictionary * pamrDic = response; - - IMUserInfoModel * model = [IMUserInfoModel modelWithDictionary:pamrDic]; - - IMUserInfoModel * iminfoModel = [[IMUserInfoModel alloc] init]; - iminfoModel.IMInfo = pamrDic; - [HQCommonUtils keyedArchiverWithData:iminfoModel key:IMLoginUserInfo]; - [ESCTUIManager loginInitTUISDKAppidWith:[model.sdkAppId intValue] UserID:model.userId userSig:model.userSig]; - [self smallQuestionAction]; - - } + if ([tag isEqualToString:@"loginIMList"]) { [self hiddenAllMBProgressHUD]; NSDictionary * pamrDic = response; @@ -541,8 +507,6 @@ static CGFloat const kEmptyTableMinHeight = 250; // 或屏幕高度的一半 [self.navigationController pushViewController:chatVC animated:YES]; } - - if ([tag isEqualToString:@"UPVERSION"]) { NSDictionary * dic = response; @@ -633,7 +597,7 @@ static CGFloat const kEmptyTableMinHeight = 250; // 或屏幕高度的一半 [self getWatchDetailData]; }else { - + self.topView.model = nil; self.topView.watchArray = @[]; //没手表直接显示没佩戴 } @@ -680,7 +644,20 @@ static CGFloat const kEmptyTableMinHeight = 250; // 或屏幕高度的一半 self.secretString = responseDic[@"encryptData"]; } + } + if ([tag isEqualToString:@"BINDWATCH"]) { + [self hiddenAllMBProgressHUD]; + [EasyTextView showSuccessText:@"绑定成功"]; + [self getUserWatchData]; + } + if ([tag isEqualToString:@"UNBINDWATCH"]) { + [self hiddenAllMBProgressHUD]; + [EasyTextView showSuccessText:@"解绑成功"]; + + + DLog(@"%@",response); + [self getUserWatchData]; } } @@ -725,14 +702,6 @@ static CGFloat const kEmptyTableMinHeight = 250; // 或屏幕高度的一半 } - -#pragma mark:小助手的回调 -- (void)loginImAccount { - - XJPNetAPI * proctocolApi = [[XJPNetAPI alloc] init:self tag:@"loginIMAPI" NeedToken:nil]; - [proctocolApi GetIMLoginAccount:nil]; - -} #pragma mark:列表点击回调 - (void)loginImAccountList { @@ -761,26 +730,7 @@ static CGFloat const kEmptyTableMinHeight = 250; // 或屏幕高度的一半 [self.navigationController pushViewController:foundVC animated:true]; } -// -//- (void)smallQuestionAction { -// -// if ([ESCTUIManager TUIUserStatus] == false) { -// -// -// [self loginImAccount]; -// return; -// } -// -// NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; -// -// [self showMBProgressHUDWithString:@"咨询中,请稍候..." autoHidden:NO]; -// XJPNetAPI * searchApi = [[XJPNetAPI alloc] init:self tag:@"SMALLHELP" NeedToken:@""]; -// -// [searchApi postSmallHelpGroup:dic]; -// -// -// -//} + - (void)myQuestionAction { @@ -923,6 +873,35 @@ static CGFloat const kEmptyTableMinHeight = 250; // 或屏幕高度的一半 [topView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.top.mas_offset(0); }]; + + self.topView.bindDeviceBlock = ^(NSString * _Nonnull watchNo) { + + BindWatchPopView *pop = [[BindWatchPopView alloc] init]; + + if (ValidStr(watchNo)) { + pop.type = BindWatchTypeBind; + }else + { + pop.serialNumber = watchNo; + pop.type = BindWatchTypeUnbind; + + } + + pop.actionBlock = ^(BindWatchType type, NSString *serialNumber) { + if (type == BindWatchTypeBind) { //绑定 + [weakSelf getBindWatchDataWithSerialNum:serialNumber]; + + }else //解绑 + { + [weakSelf getUnBindWatchDataWithSerialNum:serialNumber]; + + } + }; + + [pop show]; + + }; + self.homeTable = [[XJHomePageV2QuestionTableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain]; if (@available(iOS 15.0, *)) { @@ -1005,8 +984,9 @@ static CGFloat const kEmptyTableMinHeight = 250; // 或屏幕高度的一半 return; } [weakself myQuestionAction]; - }; + + //初始化一个emptyView LYEmptyView *emptyView = [LYEmptyView emptyViewWithImage:[UIImage imageNamed:@"noQuetionList"] titleStr:@"暂无咨询记录" detailStr:@""]; @@ -1189,7 +1169,7 @@ static CGFloat const kEmptyTableMinHeight = 250; // 或屏幕高度的一半 NSString * urlString; #if DEBUG - urlString = @"https://gstest.superwx.cn/healthbank/index.html?"; + urlString = @"https://gstest.superwx.cn/healthbank/index.html"; #else diff --git a/XinjiangProject/XinjiangProject/Project/HomeV2/View/BindWatchPopView.h b/XinjiangProject/XinjiangProject/Project/HomeV2/View/BindWatchPopView.h new file mode 100644 index 0000000..37926bd --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/HomeV2/View/BindWatchPopView.h @@ -0,0 +1,29 @@ +// +// BindWatchPopView.h +// XinjiangProject +// +// Created by Apple on 2026/3/12. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +typedef NS_ENUM(NSInteger, BindWatchType) { + BindWatchTypeBind = 0, // 绑定 + BindWatchTypeUnbind // 解绑 +}; + +@interface BindWatchPopView : UIView + +- (void)show; + +@property (nonatomic, assign) BindWatchType type; + +@property (nonatomic, copy) NSString *serialNumber; + +@property (nonatomic, copy) void(^actionBlock)(BindWatchType type, + NSString *serialNumber); +@end + +NS_ASSUME_NONNULL_END diff --git a/XinjiangProject/XinjiangProject/Project/HomeV2/View/BindWatchPopView.m b/XinjiangProject/XinjiangProject/Project/HomeV2/View/BindWatchPopView.m new file mode 100644 index 0000000..b3442ab --- /dev/null +++ b/XinjiangProject/XinjiangProject/Project/HomeV2/View/BindWatchPopView.m @@ -0,0 +1,289 @@ +// +// BindWatchPopView.m +// XinjiangProject +// +// Created by Apple on 2026/3/12. +// + +#import "BindWatchPopView.h" + +@interface BindWatchPopView () + +@property (nonatomic,strong) UIView *bottomView; + +@property (nonatomic,strong) UITextField *workNoField; +@property (nonatomic,strong) UITextField *nameField; +@property (nonatomic,strong) UITextField *numberField; +@property (nonatomic,strong) UIButton *actionBtn; +@end + +@implementation BindWatchPopView + +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + + self.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.4]; + + [self createUI]; + [self addGesture]; + [self addKeyboardNotification]; + } + + return self; +} + +#pragma mark - UI + +- (void)createUI { + + self.bottomView = [[UIView alloc] init]; + self.bottomView.backgroundColor = UIColor.whiteColor; + self.bottomView.layer.cornerRadius = 16; + self.bottomView.layer.maskedCorners = kCALayerMinXMinYCorner | kCALayerMaxXMinYCorner; + self.bottomView.layer.masksToBounds = YES; + [self addSubview:self.bottomView]; + + [self.bottomView mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.bottom.offset(0); + make.height.offset(342); + }]; + + + /// 拖动条 + UIView *indicator = [[UIView alloc] init]; + indicator.backgroundColor = UIColorHex(#D8D8D8); + indicator.layer.cornerRadius = 3; + [self.bottomView addSubview:indicator]; + + [indicator mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerX.offset(0); + make.top.offset(8); + make.width.offset(40); + make.height.offset(6); + }]; + + + UILabel *titleLab = [[UILabel alloc] init]; + titleLab.text = @"健康监测"; + titleLab.font = [UIFont boldSystemFontOfSize:16]; + titleLab.textAlignment = NSTextAlignmentCenter; + [self.bottomView addSubview:titleLab]; + + [titleLab mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.offset(0); + make.top.offset(28); + }]; + + HQUserInfo * user = [HQCommonUtils keyedUnarchiverWithKey:LoginUserInfo]; + + self.workNoField = [self createTextField]; + [self.bottomView addSubview:self.workNoField]; + + [self.workNoField mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.offset(82); + make.right.offset(-15); + make.height.offset(52); + make.top.equalTo(titleLab.mas_bottom).offset(20); + }]; + + + UILabel *workLab = [self createLabel:@"工 号:"]; + if (!ValidStr(user.workNo)) { + self.workNoField.text = [NSString stringWithFormat:@"%@",user.workNo]; + } + [self.bottomView addSubview:workLab]; + + [workLab mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.offset(0); + make.right.equalTo(self.workNoField.mas_left); + make.centerY.equalTo(self.workNoField); + }]; + + + self.nameField = [self createTextField]; + [self.bottomView addSubview:self.nameField]; + + [self.nameField mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.height.equalTo(self.workNoField); + make.top.equalTo(self.workNoField.mas_bottom).offset(16); + }]; + if (!ValidStr(user.realname)) { + self.nameField.text = [NSString stringWithFormat:@"%@",user.realname]; + } + + UILabel *nameLab = [self createLabel:@"姓 名:"]; + [self.bottomView addSubview:nameLab]; + + [nameLab mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.offset(0); + make.right.equalTo(self.nameField.mas_left); + make.centerY.equalTo(self.nameField); + }]; + + + self.numberField = [self createTextField]; + self.numberField.backgroundColor = KWhiteColor; + [self.bottomView addSubview:self.numberField]; + + [self.numberField mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.right.height.equalTo(self.workNoField); + make.top.equalTo(self.nameField.mas_bottom).offset(16); + }]; + + + UILabel *xulieLab = [self createLabel:@"序列号:"]; + [self.bottomView addSubview:xulieLab]; + + [xulieLab mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.offset(0); + make.right.equalTo(self.numberField.mas_left); + make.centerY.equalTo(self.numberField); + }]; + + + UIButton *bindBtn = [[UIButton alloc] init]; + [bindBtn setTitle:@"解绑" forState:UIControlStateNormal]; + bindBtn.backgroundColor = UIColorHex(#21BEBD); + bindBtn.layer.cornerRadius = 22; + bindBtn.titleLabel.font = [UIFont boldSystemFontOfSize:16]; + [bindBtn addTarget:self action:@selector(bindwatchClick:) forControlEvents:UIControlEventTouchUpInside]; + self.actionBtn = bindBtn; + [self.bottomView addSubview:bindBtn]; + + [bindBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.centerX.offset(0); + make.width.offset(215); + make.height.offset(44); + make.top.equalTo(self.numberField.mas_bottom).offset(30); + }]; + +} + +- (void)updateUI { + + if (self.type == BindWatchTypeUnbind) { + + [self.actionBtn setTitle:@"解绑" forState:UIControlStateNormal]; + self.numberField.text = self.serialNumber; + self.numberField.enabled = NO; + + } else { + + [self.actionBtn setTitle:@"绑定" forState:UIControlStateNormal]; + self.numberField.text = @""; + self.numberField.enabled = YES; + + } +} + +- (void)bindwatchClick:(UIButton *)btn { + + NSString *number = self.numberField.text; + + if (self.actionBlock) { + self.actionBlock(self.type, number); + } + + [self close]; +} +#pragma mark - 创建控件 + +- (UILabel *)createLabel:(NSString *)text { + + UILabel *lab = [[UILabel alloc] init]; + lab.text = text; + lab.font = [UIFont systemFontOfSize:16]; + lab.textAlignment = NSTextAlignmentCenter; + + return lab; +} + +- (UITextField *)createTextField { + + UITextField *field = [[UITextField alloc] init]; + field.backgroundColor = UIColorHex(#F5F7FB); + field.layer.cornerRadius = 8; + field.layer.borderWidth = 1; + field.layer.borderColor = UIColorHex(#E6E6EA).CGColor; + + UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 12, 52)]; + field.leftView = leftView; + field.leftViewMode = UITextFieldViewModeAlways; + + return field; +} + +#pragma mark - 点击背景关闭 + +- (void)addGesture { + +// UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(close)]; +// tap.cancelsTouchesInView = NO; +// [self addGestureRecognizer:tap]; +} + +- (void)close { + + [self endEditing:YES]; + + [UIView animateWithDuration:0.25 animations:^{ + self.bottomView.transform = CGAffineTransformMakeTranslation(0, 342); + self.alpha = 0; + } completion:^(BOOL finished) { + [self removeFromSuperview]; + }]; +} + +#pragma mark - 键盘 + +- (void)addKeyboardNotification { + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardShow:) name:UIKeyboardWillShowNotification object:nil]; + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardHide:) name:UIKeyboardWillHideNotification object:nil]; +} + +- (void)keyboardShow:(NSNotification *)noti { + + CGRect rect = [noti.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; + + CGFloat keyboardH = rect.size.height; + + [UIView animateWithDuration:0.25 animations:^{ + self.bottomView.transform = CGAffineTransformMakeTranslation(0, -keyboardH); + }]; +} + +- (void)keyboardHide:(NSNotification *)noti { + + [UIView animateWithDuration:0.25 animations:^{ + self.bottomView.transform = CGAffineTransformIdentity; + }]; +} + +#pragma mark - show + +- (void)show { + + [self updateUI]; + + UIWindow *window = UIApplication.sharedApplication.keyWindow; + + self.frame = window.bounds; + + [window addSubview:self]; + + self.bottomView.transform = CGAffineTransformMakeTranslation(0, 342); + + [UIView animateWithDuration:0.25 animations:^{ + self.bottomView.transform = CGAffineTransformIdentity; + }]; +} + +- (void)dealloc { + + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +@end diff --git a/XinjiangProject/XinjiangProject/Project/HomeV2/View/XJHomePageV2HeardView.h b/XinjiangProject/XinjiangProject/Project/HomeV2/View/XJHomePageV2HeardView.h index e2f97e2..3574faf 100644 --- a/XinjiangProject/XinjiangProject/Project/HomeV2/View/XJHomePageV2HeardView.h +++ b/XinjiangProject/XinjiangProject/Project/HomeV2/View/XJHomePageV2HeardView.h @@ -36,6 +36,7 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, strong) NSArray * watchArray; +@property (nonatomic, copy, nullable) void (^bindDeviceBlock)(NSString * watchNo); @end diff --git a/XinjiangProject/XinjiangProject/Project/HomeV2/View/XJHomePageV2HeardView.m b/XinjiangProject/XinjiangProject/Project/HomeV2/View/XJHomePageV2HeardView.m index eac2bdf..49df2ab 100644 --- a/XinjiangProject/XinjiangProject/Project/HomeV2/View/XJHomePageV2HeardView.m +++ b/XinjiangProject/XinjiangProject/Project/HomeV2/View/XJHomePageV2HeardView.m @@ -326,6 +326,11 @@ } }; + //绑定手表 + self.watchDataView.bindDeviceBlock = ^(NSString * _Nonnull number) { + + weakSelf.bindDeviceBlock(number); + }; [self addSubview:self.watchDataView]; [self.watchDataView mas_makeConstraints:^(MASConstraintMaker *make) { diff --git a/XinjiangProject/XinjiangProject/Project/HomeV2/View/XJHomeWatchDataView.h b/XinjiangProject/XinjiangProject/Project/HomeV2/View/XJHomeWatchDataView.h index 61f7fc5..25fb59e 100644 --- a/XinjiangProject/XinjiangProject/Project/HomeV2/View/XJHomeWatchDataView.h +++ b/XinjiangProject/XinjiangProject/Project/HomeV2/View/XJHomeWatchDataView.h @@ -27,6 +27,8 @@ typedef void(^watchDataDetailBlick)(); @property (nonatomic, copy, nullable) watchDataDetailBlick watchMoreBlock; +/// "去绑定" 按钮点击回调 +@property (nonatomic, copy, nullable) void (^bindDeviceBlock)(NSString * number); /// 数据源,赋值后自动刷新 CollectionView,空数组时显示占位图 @property (nonatomic, copy) NSArray *dataList; diff --git a/XinjiangProject/XinjiangProject/Project/HomeV2/View/XJHomeWatchDataView.m b/XinjiangProject/XinjiangProject/Project/HomeV2/View/XJHomeWatchDataView.m index 5fe724e..43c6f45 100644 --- a/XinjiangProject/XinjiangProject/Project/HomeV2/View/XJHomeWatchDataView.m +++ b/XinjiangProject/XinjiangProject/Project/HomeV2/View/XJHomeWatchDataView.m @@ -20,7 +20,7 @@ static CGFloat const kButtonGap = 10.0; // 按钮间距 // ── Private ─────────────────────────────────────────────── @interface XJHomeWatchDataView () -@property (nonatomic, strong) UILabel *watchNumberLabel; // +@property (nonatomic, strong) YYLabel *watchNumberLabel; // @property (nonatomic, strong) UIScrollView *tabScrollView; @@ -28,6 +28,7 @@ static CGFloat const kButtonGap = 10.0; // 按钮间距 @property (nonatomic, strong) NSMutableArray *tabButtons; @property (nonatomic, strong) UICollectionView *collectionView; @property (nonatomic, strong) UILabel *emptyLabel; // 无数据占位 +@property (nonatomic, strong) UIView *emptyView; // 空状态占位整体容器 @property (nonatomic, strong) UIView *devView; // 紧急开发中占位 @property (nonatomic, assign) NSInteger selectedIndex; // 当前选中的 Tab 下标 @property (nonatomic, assign) NSInteger carouselPage; // collectionView 当前轮播页码(与 Tab 无关) @@ -128,9 +129,9 @@ weekLabel; // make.width.height.mas_offset(20); // }]; // - self.watchNumberLabel = [[UILabel alloc] init]; + self.watchNumberLabel = [[YYLabel alloc] init]; - self.watchNumberLabel.text = @"监测工具编码:--"; + self.watchNumberLabel.text = @""; self.watchNumberLabel.textAlignment = NSTextAlignmentLeft; @@ -145,6 +146,14 @@ weekLabel; make.top.mas_offset(0); make.height.mas_offset(40); }]; + MJWeakSelf + [self.watchNumberLabel setTextTapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) { + + if (weakSelf.bindDeviceBlock) { + weakSelf.bindDeviceBlock(weakSelf.watchModel.watchNo); + } + }]; + //日期切换 // self.timeView = [[UIView alloc] init]; // self.timeView.backgroundColor = KWhiteColor; @@ -269,8 +278,9 @@ weekLabel; make.center.equalTo(_devView); }]; - // ── 占位 Label(直接加在 self,不受 collectionView 隐藏影响)──── + // ── 未登录占位 Label ───────────────────────────────────────── _emptyLabel = [[UILabel alloc] init]; + _emptyLabel.text = @" 暂未登录 "; _emptyLabel.textAlignment = NSTextAlignmentCenter; _emptyLabel.textColor = [UIColor colorWithRed:0.6 green:0.6 blue:0.6 alpha:1.0]; _emptyLabel.font = [UIFont systemFontOfSize:15.0]; @@ -281,21 +291,90 @@ weekLabel; make.center.equalTo(self.collectionView); }]; + // ── 无设备占位 View(已登录但未绑定设备时显示)──────────────── + _emptyView = [[UIView alloc] init]; + _emptyView.backgroundColor = KWhiteColor; + _emptyView.hidden = YES; + [self addSubview:_emptyView]; + + [_emptyView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(_tabScrollView.mas_bottom); + make.left.right.bottom.equalTo(self); + }]; + + // 空状态图标,宽高 59,居中,距 Tab 切换 View 底部 16 + UIImageView *emptyImageView = [[UIImageView alloc] init]; + emptyImageView.image = [UIImage imageNamed:@"ic_watch_empty"]; + emptyImageView.contentMode = UIViewContentModeScaleAspectFit; + [_emptyView addSubview:emptyImageView]; + + [emptyImageView mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.mas_offset(16); + make.centerX.equalTo(_emptyView); + make.width.height.mas_offset(59); + }]; + + // 提示文字:~ 暂无数据 ~,字号 11 regular,颜色 #B6B6B6 + UILabel *emptyHintLabel = [[UILabel alloc] init]; + emptyHintLabel.text = @"~ 暂无数据 ~"; + emptyHintLabel.textAlignment = NSTextAlignmentCenter; + emptyHintLabel.textColor = UIColorHex(#B6B6B6); + emptyHintLabel.font = [UIFont systemFontOfSize:11]; + [_emptyView addSubview:emptyHintLabel]; + + [emptyHintLabel mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(emptyImageView.mas_bottom).offset(8); + make.centerX.equalTo(_emptyView); + }]; + + // 去绑定按钮:宽 80 高 24,medium 13,颜色 #21BEBD,圆角 12,白底边框 1 + UIButton *bindBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + [bindBtn setTitle:@"去绑定" forState:UIControlStateNormal]; + [bindBtn setTitleColor:UIColorHex(#21BEBD) forState:UIControlStateNormal]; + bindBtn.titleLabel.font = MEDIUMFONT(13); + bindBtn.backgroundColor = KWhiteColor; + bindBtn.layer.cornerRadius = 12; + bindBtn.layer.borderWidth = 1; + bindBtn.layer.borderColor = UIColorHex(#21BEBD).CGColor; + bindBtn.layer.masksToBounds = YES; + [bindBtn addTarget:self action:@selector(bindButtonClick) forControlEvents:UIControlEventTouchUpInside]; + [_emptyView addSubview:bindBtn]; + + [bindBtn mas_makeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(emptyHintLabel.mas_bottom).offset(8); + make.centerX.equalTo(_emptyView); + make.width.mas_offset(80); + make.height.mas_offset(24); + }]; + if ([HQCommonUtils isLogin]) { // 已登录,等待数据回调 } else { - _emptyLabel.text = @" 暂未登录 "; - _emptyLabel.hidden = NO; - _tabScrollView.hidden = false; - _collectionView.hidden = false; + // 未登录:显示"暂未登录"文字,emptyView 保持隐藏 + _emptyLabel.hidden = NO; + _tabScrollView.hidden = NO; + _collectionView.hidden = NO; + } +} + +- (void)bindButtonClick { + if (self.bindDeviceBlock) { + self.bindDeviceBlock(@""); } } - (void)moreClick { - if (self.watchMoreBlock) { + if (self.watchModel.hasWatch == true) { + if (self.watchMoreBlock) { self.watchMoreBlock(); } + }else { + + if (self.bindDeviceBlock) { + self.bindDeviceBlock(@""); + } + } } - (void)setWatchModel:(XJHomeWatchModel *)watchModel { @@ -308,6 +387,7 @@ weekLabel; }else { + self.watchNumberLabel.text = @""; self.dataList = @[]; } @@ -448,20 +528,24 @@ weekLabel; - (void)setDataList:(NSArray *)dataList { _dataList = [dataList copy]; + // 未登录:显示 emptyLabel,隐藏 emptyView 及内容区 if (![HQCommonUtils isLogin]) { - _emptyLabel.text = @" 暂未登录 "; - _emptyLabel.hidden = NO; + _emptyLabel.text = @" 暂未登录 "; + _emptyLabel.hidden = NO; + _emptyView.hidden = YES; _collectionView.hidden = YES; _tabScrollView.hidden = YES; return; } + // 已登录:隐藏 emptyLabel,显示内容区 + _emptyLabel.hidden = YES; _collectionView.hidden = NO; _tabScrollView.hidden = NO; + // 无设备数据:显示 emptyView(图标 + 提示 + 去绑定按钮) BOOL isEmpty = (_dataList.count == 0); - _emptyLabel.text = @"您目前未配备智能穿戴设备"; - _emptyLabel.hidden = !isEmpty; + _emptyView.hidden = !isEmpty; [_collectionView reloadData]; diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/HOMEV2/ic_watch_empty.imageset/Contents.json b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/HOMEV2/ic_watch_empty.imageset/Contents.json new file mode 100644 index 0000000..d639d8a --- /dev/null +++ b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/HOMEV2/ic_watch_empty.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "EquipmentNoData.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "EquipmentNoData@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "EquipmentNoData@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/HOMEV2/ic_watch_empty.imageset/EquipmentNoData.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/HOMEV2/ic_watch_empty.imageset/EquipmentNoData.png new file mode 100644 index 0000000000000000000000000000000000000000..3ffdeb2fec8e4bdf177eca396ba3b195df11de9d GIT binary patch literal 4003 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 JPDHLkV1iZKfA;_Y literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/HOMEV2/ic_watch_empty.imageset/EquipmentNoData@2x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/HOMEV2/ic_watch_empty.imageset/EquipmentNoData@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..04a4e5fb4689e9cf5192da5d61aa0ccf4f661c7d GIT binary patch literal 11515 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 literal 0 HcmV?d00001 diff --git a/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/HOMEV2/ic_watch_empty.imageset/EquipmentNoData@3x.png b/XinjiangProject/XinjiangProject/Supporting Files/Assets.xcassets/HOMEV2/ic_watch_empty.imageset/EquipmentNoData@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..d0df55f77fdaf05748457295d8fdb391630f7451 GIT binary patch literal 21871 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