浏览代码

1.pc扫码登录

huangxiaodong 10 月之前
父节点
当前提交
a0d9741670

+ 24 - 0
创维盒子/双子星云手机.xcodeproj/project.pbxproj

@@ -800,6 +800,14 @@
 		6BB573102C7C18DC00713351 /* frpFileExistModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BB5730E2C7C18DB00713351 /* frpFileExistModel.m */; };
 		6BB573112C7C18DC00713351 /* frpFileExistModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BB5730D2C7C18DB00713351 /* frpFileExistModel.h */; };
 		6BB573122C7C18DC00713351 /* frpFileExistModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BB5730E2C7C18DB00713351 /* frpFileExistModel.m */; };
+		6BB5731B2C7D6E1D00713351 /* scanToPCLoginViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BB573192C7D6E1D00713351 /* scanToPCLoginViewController.h */; };
+		6BB5731C2C7D6E1D00713351 /* scanToPCLoginViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BB5731A2C7D6E1D00713351 /* scanToPCLoginViewController.m */; };
+		6BB5731D2C7D6E1D00713351 /* scanToPCLoginViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BB573192C7D6E1D00713351 /* scanToPCLoginViewController.h */; };
+		6BB5731E2C7D6E1D00713351 /* scanToPCLoginViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BB5731A2C7D6E1D00713351 /* scanToPCLoginViewController.m */; };
+		6BB573212C7D7D8900713351 /* PCLoginViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BB5731F2C7D7D8900713351 /* PCLoginViewController.h */; };
+		6BB573222C7D7D8900713351 /* PCLoginViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BB573202C7D7D8900713351 /* PCLoginViewController.m */; };
+		6BB573232C7D7D8900713351 /* PCLoginViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BB5731F2C7D7D8900713351 /* PCLoginViewController.h */; };
+		6BB573242C7D7D8900713351 /* PCLoginViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BB573202C7D7D8900713351 /* PCLoginViewController.m */; };
 		6BB852282C4F7FE600570BF6 /* playingAudioGif.gif in Resources */ = {isa = PBXBuildFile; fileRef = 6BB852272C4F7FE500570BF6 /* playingAudioGif.gif */; };
 		6BB852292C4F7FE600570BF6 /* playingAudioGif.gif in Resources */ = {isa = PBXBuildFile; fileRef = 6BB852272C4F7FE500570BF6 /* playingAudioGif.gif */; };
 		6BBB35D92AE7645200E4A59B /* RunInBackground.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 6BBB35D62AE7645200E4A59B /* RunInBackground.mp3 */; };
@@ -1949,6 +1957,10 @@
 		6BB481CE2C52481E00C21921 /* backupsOptionTipView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = backupsOptionTipView.m; sourceTree = "<group>"; };
 		6BB5730D2C7C18DB00713351 /* frpFileExistModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = frpFileExistModel.h; sourceTree = "<group>"; };
 		6BB5730E2C7C18DB00713351 /* frpFileExistModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = frpFileExistModel.m; sourceTree = "<group>"; };
+		6BB573192C7D6E1D00713351 /* scanToPCLoginViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = scanToPCLoginViewController.h; sourceTree = "<group>"; };
+		6BB5731A2C7D6E1D00713351 /* scanToPCLoginViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = scanToPCLoginViewController.m; sourceTree = "<group>"; };
+		6BB5731F2C7D7D8900713351 /* PCLoginViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PCLoginViewController.h; sourceTree = "<group>"; };
+		6BB573202C7D7D8900713351 /* PCLoginViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PCLoginViewController.m; sourceTree = "<group>"; };
 		6BB852272C4F7FE500570BF6 /* playingAudioGif.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = playingAudioGif.gif; sourceTree = "<group>"; };
 		6BBB35D62AE7645200E4A59B /* RunInBackground.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = RunInBackground.mp3; sourceTree = "<group>"; };
 		6BBB35DB2AE76AD800E4A59B /* AudioSessionObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AudioSessionObject.h; sourceTree = "<group>"; };
@@ -3149,6 +3161,10 @@
 				6B679DF62C25595700D0DC03 /* mineViewController.m */,
 				6BD7806E2C2BF7F10014912F /* customerServiceViewController.h */,
 				6BD7806F2C2BF7F10014912F /* customerServiceViewController.m */,
+				6BB573192C7D6E1D00713351 /* scanToPCLoginViewController.h */,
+				6BB5731A2C7D6E1D00713351 /* scanToPCLoginViewController.m */,
+				6BB5731F2C7D7D8900713351 /* PCLoginViewController.h */,
+				6BB573202C7D7D8900713351 /* PCLoginViewController.m */,
 			);
 			path = mine;
 			sourceTree = "<group>";
@@ -3931,6 +3947,7 @@
 				6B1FBD222B43DAD200926382 /* backupsSetViewController.h in Headers */,
 				6B8FF6B92B04E19600800981 /* uploadFileRecordheadView.h in Headers */,
 				6B4C0F762C0314BA0070EF2E /* DFPlayer.h in Headers */,
+				6BB5731B2C7D6E1D00713351 /* scanToPCLoginViewController.h in Headers */,
 				6B2C1E3A2C070ADE00FDCF82 /* ZFPlayerStatusBar.h in Headers */,
 				18FCE5482AD15E750020F623 /* PlayerViewController+AppDelegate.h in Headers */,
 				6B72724B2B0AF59200C03F87 /* uploadFileRecordTableViewHeadView.h in Headers */,
@@ -3977,6 +3994,7 @@
 				6B2C1EA82C070ADE00FDCF82 /* ZFReachabilityManager.h in Headers */,
 				6B2C1E422C070ADE00FDCF82 /* ZFSliderView.h in Headers */,
 				6B07E0A72C3CD4AF004A3238 /* lastFileTableViewCell.h in Headers */,
+				6BB573212C7D7D8900713351 /* PCLoginViewController.h in Headers */,
 				6BFF268C2AF8E1C600FCB4F7 /* forgetPwdViewController.h in Headers */,
 				6BF52C992AD5546500A617DB /* Reachability.h in Headers */,
 				6B5D40152B47F27A000965CF /* couldPhoneCommonModel.h in Headers */,
@@ -4202,6 +4220,7 @@
 				6BD506DC2B9576A4006E7CB0 /* backupsSetViewController.h in Headers */,
 				6BD506DD2B9576A4006E7CB0 /* uploadFileRecordheadView.h in Headers */,
 				6B4C0F772C0314BA0070EF2E /* DFPlayer.h in Headers */,
+				6BB5731D2C7D6E1D00713351 /* scanToPCLoginViewController.h in Headers */,
 				6B2C1E3B2C070ADE00FDCF82 /* ZFPlayerStatusBar.h in Headers */,
 				6BD506DE2B9576A4006E7CB0 /* PlayerViewController+AppDelegate.h in Headers */,
 				6BD506DF2B9576A4006E7CB0 /* uploadFileRecordTableViewHeadView.h in Headers */,
@@ -4248,6 +4267,7 @@
 				6B2C1EA92C070ADE00FDCF82 /* ZFReachabilityManager.h in Headers */,
 				6B2C1E432C070ADE00FDCF82 /* ZFSliderView.h in Headers */,
 				6B07E0A82C3CD4AF004A3238 /* lastFileTableViewCell.h in Headers */,
+				6BB573232C7D7D8900713351 /* PCLoginViewController.h in Headers */,
 				6BD506ED2B9576A4006E7CB0 /* forgetPwdViewController.h in Headers */,
 				6BD506EE2B9576A4006E7CB0 /* Reachability.h in Headers */,
 				6BD506F02B9576A4006E7CB0 /* couldPhoneCommonModel.h in Headers */,
@@ -4771,6 +4791,7 @@
 				6B7EA79B2BF5B4A6002D5CC2 /* NASFilePicModel.m in Sources */,
 				6BD5072E2B9576A4006E7CB0 /* HWToolListCell.m in Sources */,
 				6BD5072F2B9576A4006E7CB0 /* cloudPhoneExtraFileListModel.m in Sources */,
+				6BB5731E2C7D6E1D00713351 /* scanToPCLoginViewController.m in Sources */,
 				6B2C1E7F2C070ADE00FDCF82 /* ZFOrientationObserver.m in Sources */,
 				6B42A2202C41040B000555BB /* UIInterface+HXRotation.m in Sources */,
 				6BD507302B9576A4006E7CB0 /* UIActivityIndicatorView+AFNetworking.m in Sources */,
@@ -4970,6 +4991,7 @@
 				6B07AC272BF85859005C2B0E /* ShareRecordModel.m in Sources */,
 				6B2C1E2B2C070ADE00FDCF82 /* ZFLandScapeControlView.m in Sources */,
 				6BD507A62B9576A4006E7CB0 /* HWBookmarkModel.m in Sources */,
+				6BB573242C7D7D8900713351 /* PCLoginViewController.m in Sources */,
 				6BF558C12C4515B500701854 /* audioPlayListManager.m in Sources */,
 				6BD507A72B9576A4006E7CB0 /* NSCache+BGCache.m in Sources */,
 				6BD507A82B9576A4006E7CB0 /* uploadFileRecordBgScorllView.m in Sources */,
@@ -5124,6 +5146,7 @@
 				6B7EA7992BF5B4A6002D5CC2 /* NASFilePicModel.m in Sources */,
 				A084D68E27E859D300054880 /* HWToolListCell.m in Sources */,
 				6B45C4FE2B57BC87007E6911 /* cloudPhoneExtraFileListModel.m in Sources */,
+				6BB5731C2C7D6E1D00713351 /* scanToPCLoginViewController.m in Sources */,
 				6B2C1E7E2C070ADE00FDCF82 /* ZFOrientationObserver.m in Sources */,
 				6B42A21F2C41040B000555BB /* UIInterface+HXRotation.m in Sources */,
 				183AE6512A8A2CF000B11CB0 /* UIActivityIndicatorView+AFNetworking.m in Sources */,
@@ -5323,6 +5346,7 @@
 				6B07AC262BF85859005C2B0E /* ShareRecordModel.m in Sources */,
 				6B2C1E2A2C070ADE00FDCF82 /* ZFLandScapeControlView.m in Sources */,
 				A00221E727EB25B000E45F78 /* HWBookmarkModel.m in Sources */,
+				6BB573222C7D7D8900713351 /* PCLoginViewController.m in Sources */,
 				6BF558BF2C4515B500701854 /* audioPlayListManager.m in Sources */,
 				A08A94FC27E9A4E400C544BB /* NSCache+BGCache.m in Sources */,
 				6B72725C2B0E22D000C03F87 /* uploadFileRecordBgScorllView.m in Sources */,

+ 22 - 0
创维盒子/双子星云手机/Assets.xcassets/mine/pc_login_img.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "pc_login_img@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "pc_login_img@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

二进制
创维盒子/双子星云手机/Assets.xcassets/mine/pc_login_img.imageset/pc_login_img@2x.png


二进制
创维盒子/双子星云手机/Assets.xcassets/mine/pc_login_img.imageset/pc_login_img@3x.png


+ 22 - 0
创维盒子/双子星云手机/Assets.xcassets/mine/pc_scan_icon.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "pc_scan_icon@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "pc_scan_icon@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

二进制
创维盒子/双子星云手机/Assets.xcassets/mine/pc_scan_icon.imageset/pc_scan_icon@2x.png


二进制
创维盒子/双子星云手机/Assets.xcassets/mine/pc_scan_icon.imageset/pc_scan_icon@3x.png


+ 16 - 0
创维盒子/双子星云手机/mine/PCLoginViewController.h

@@ -0,0 +1,16 @@
+//
+//  PCLoginViewController.h
+//  双子星云手机
+//
+//  Created by xd h on 2024/8/27.
+//
+
+#import "BaseViewController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PCLoginViewController : BaseViewController
+@property(nonatomic,copy) NSString* loginIdString;
+@end
+
+NS_ASSUME_NONNULL_END

+ 165 - 0
创维盒子/双子星云手机/mine/PCLoginViewController.m

@@ -0,0 +1,165 @@
+//
+//  PCLoginViewController.m
+//  双子星云手机
+//
+//  Created by xd h on 2024/8/27.
+//
+
+#import "PCLoginViewController.h"
+
+@interface PCLoginViewController ()
+
+@end
+
+@implementation PCLoginViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    
+    [self.view setBackgroundColor:HWF5F7FAColor];
+    
+    [self.titleLabel setText:NSLocalizedString(@"pc_login_title",nil)];
+    
+    [self.toolBar setHidden:YES];
+    [self.navigationBar setHidden:YES];
+    [self.navBarBGView setHidden:NO];
+    
+    [self drawAnyView];
+}
+
+- (void)drawAnyView{
+    //顶底底部图片
+    UIImageView *topImageV = [UIImageView new];
+    topImageV.image = [UIImage imageNamed:@"pc_login_img"];
+    [self.view addSubview:topImageV];
+    
+    [topImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.mas_equalTo(150);
+        make.centerX.mas_equalTo(0);
+        make.width.mas_equalTo(160);
+        make.height.mas_equalTo(160);
+    }];
+    
+    //提示文件
+    UILabel*tiplabel = [[UILabel alloc] init];
+    tiplabel.font = [UIFont boldSystemFontOfSize:14.0];
+    tiplabel.textColor = [UIColor hwColor:@"#0A132B"];
+    tiplabel.textAlignment = NSTextAlignmentCenter;
+    tiplabel.numberOfLines = 2;
+    [self.view addSubview:tiplabel];
+    [tiplabel setText:NSLocalizedString(@"pc_login_tip",nil)];
+    
+    [tiplabel mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.mas_equalTo(20);
+        make.right.mas_equalTo(-20);
+        make.top.mas_equalTo(topImageV.mas_bottom).offset(5);
+        make.height.mas_equalTo(40);
+    }];
+    
+    
+    UIButton *loginOkBut = [[UIButton alloc] init];
+    
+    CAGradientLayer *gradientLayer = [CAGradientLayer layer];
+    gradientLayer.frame = CGRectMake(0, 0, (SCREEN_W - 55*2), 48);
+    gradientLayer.colors = @[(__bridge NSString *)[UIColor hwColor:@"#0CDEFD" alpha:1.0].CGColor, (__bridge NSString *)[UIColor hwColor:@"#058DFB" alpha:1.0].CGColor];
+    gradientLayer.locations = @[@(0), @(1.0f)];
+    gradientLayer.startPoint = CGPointMake(0, 0.5);
+    gradientLayer.endPoint = CGPointMake(0.97, 0.5);
+    [loginOkBut.layer addSublayer:gradientLayer];
+    
+    [loginOkBut setTitle:NSLocalizedString(@"pc_login_sure_tip",nil) forState:UIControlStateNormal];
+    loginOkBut.titleLabel.font = [UIFont systemFontOfSize:14.0];
+    loginOkBut.layer.cornerRadius = 8;
+    loginOkBut.layer.masksToBounds = YES;
+    loginOkBut.tag = 1;
+    [loginOkBut addTarget:self action:@selector(didClickButtonFun:) forControlEvents:UIControlEventTouchUpInside];
+    [self.view  addSubview:loginOkBut];
+    
+    
+    [loginOkBut mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.height.mas_equalTo(48);
+        make.left.mas_equalTo(55);
+        make.right.mas_equalTo(-55);
+        make.top.mas_equalTo(tiplabel.mas_bottom).offset(70);
+    }];
+    
+    UIButton *cancelLoginButton = [[UIButton alloc] init];
+    [cancelLoginButton setTitle:NSLocalizedString(@"pc_login_cancel_tip",nil) forState:UIControlStateNormal];
+    [cancelLoginButton setTitleColor:[UIColor hwColor:@"#999999"] forState:UIControlStateNormal];
+    cancelLoginButton.titleLabel.font = [UIFont systemFontOfSize:14.0];
+    cancelLoginButton.tag = 2;
+    [cancelLoginButton addTarget:self action:@selector(didClickButtonFun:) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:cancelLoginButton];
+    
+    [cancelLoginButton mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.height.mas_equalTo(40);
+        make.left.mas_equalTo(55);
+        make.right.mas_equalTo(-55);
+        make.top.mas_equalTo(loginOkBut.mas_bottom).offset(10);
+    }];
+    
+
+    
+}
+
+#pragma mark  扫码登录
+- (void)didClickButtonFun:(UIButton*)but
+{
+    NSInteger tag = but.tag;
+    NSInteger status = 2;
+    if(tag == 2){
+        status = 3;
+    }
+    
+    [self scanToPCloginFunWith:status];
+}
+
+#pragma mark PC 扫码登录
+-(void)scanToPCloginFunWith:(NSInteger)status
+{
+    NSString *changSN =  [connectDeviceManager shareInstance].DeviceThirdIdMod.data.changeSn;
+    NSMutableDictionary *paraDict = [NSMutableDictionary new];
+    [paraDict setValue:[NSNumber numberWithInteger:status] forKey:@"status"];
+    if(_loginIdString){
+        [paraDict setValue:_loginIdString forKey:@"boxLoginId"];
+    }
+    if(changSN){
+        [paraDict setValue:changSN forKey:@"sn"];
+    }
+    
+    
+    KWeakSelf
+    [[netWorkManager shareInstance] CommonPostCallBackCode:updatePCLoginStateFun Parameters:paraDict success:^(id  _Nonnull responseObject){
+        SuperModel *curModel = [[SuperModel alloc] initWithDictionary:responseObject error:nil];
+        
+        if(curModel && curModel.status == 0){
+            if(status == 2){
+                [[iToast makeText:NSLocalizedString(@"pc_login_ok_tip",nil)] show];
+            }
+        }
+        else
+        {
+            if(curModel.msg){
+                [[iToast makeText:curModel.msg] show];
+            }
+            else{
+                if(status == 2){
+                    [[iToast makeText:NSLocalizedString(@"pc_login_fail_tip",nil)] show];
+                }
+            }
+            
+        }
+        
+        [weakSelf.navigationController popToRootViewControllerAnimated:YES];
+        
+    } failure:^(NSError * _Nonnull error) {
+        if(status == 2){
+            [[iToast makeText:NSLocalizedString(@"pc_login_fail_tip",nil)] show];
+        }
+        [weakSelf.navigationController popToRootViewControllerAnimated:YES];
+    }];
+}
+
+//"pc_login_ing_tip" = "正在登录中…";
+@end

+ 91 - 1
创维盒子/双子星云手机/mine/mineViewController.m

@@ -19,6 +19,8 @@
 #import "audioPlayingView.h"
 #import "DFPlayer.h"
 #import "audioPlayerViewController.h"
+#import "scanToPCLoginViewController.h"
+#import "PCLoginViewController.h"
 
 @interface mineViewController ()
 @property(nonatomic,strong)UIButton *netButton;
@@ -54,13 +56,28 @@
         make.height.mas_equalTo(280.0*AUTOSCALE);
     }];
     
+    UIButton *pcScanButton = [[UIButton alloc] init];
+    [pcScanButton setImage:[UIImage imageNamed:@"pc_scan_icon"] forState:UIControlStateNormal];
+    pcScanButton.tag = 100;
+    [pcScanButton addTarget:self action:@selector(didClickButtonFun:) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:pcScanButton];
+    
+    [pcScanButton mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.mas_equalTo(50);
+        make.right.mas_equalTo(-15);
+        make.width.mas_equalTo(40);
+        make.height.mas_equalTo(40);
+    }];
+    
+    CGFloat tipImageTop = 50 + 40;
+    
     //商标图片
     UIImageView *TipImageV = [UIImageView new];
     TipImageV.image = [UIImage imageNamed:@"mine_head_icon"];
     [self.view addSubview:TipImageV];
     
     [TipImageV mas_makeConstraints:^(MASConstraintMaker *make) {
-        make.top.mas_equalTo(68);
+        make.top.mas_equalTo(tipImageTop);
         make.left.mas_equalTo(16);
         make.width.mas_equalTo(48);
         make.height.mas_equalTo(48);
@@ -550,4 +567,77 @@
 //    audioPlayingView * audioPlayingV = [audioPlayingView sharedInstance];
 //    [audioPlayingV removeFromSuperview];
 }
+
+#pragma mark 点击PC 扫码登录
+- (void)didClickButtonFun:(UIButton*)but
+{
+//    [self getPCloginFun];
+//    return;
+    
+    NSInteger tag = but.tag;
+    
+    if(tag == 100){
+        scanToPCLoginViewController *nextVC = [scanToPCLoginViewController new];
+        [self.navigationController pushViewController:nextVC animated:YES];
+    }
+}
+
+#pragma mark PC 获取码登录
+-(void)getPCloginFun
+{
+    NSMutableDictionary *paraDict = [NSMutableDictionary new];
+   
+    KWeakSelf
+    [[netWorkManager shareInstance] CommonGetWithCallBackCode:@"/box/login/addAndGetOne" Parameters:paraDict success:^(id  _Nonnull responseObject){
+//        SuperModel *ShareMarkMod = [[SuperModel alloc] initWithDictionary:responseObject error:nil];
+//        if(ShareMarkMod){
+//            [weakSelf scanToPCloginFunWithID:responseObject[@"data"][@"boxLoginId"]];
+//        }
+        
+    } failure:^(NSError * _Nonnull error) {
+    }];
+}
+
+#pragma mark PC 扫码登录
+-(void)scanToPCloginFunWithID:(NSString*)idStr
+{
+    NSString *changSN =  [connectDeviceManager shareInstance].DeviceThirdIdMod.data.changeSn;
+    NSMutableDictionary *paraDict = [NSMutableDictionary new];
+    [paraDict setValue:@1 forKey:@"status"];
+    [paraDict setValue:idStr forKey:@"boxLoginId"];
+    [paraDict setValue:changSN forKey:@"sn"];
+    
+    KWeakSelf
+    [[netWorkManager shareInstance] CommonPostCallBackCode:updatePCLoginStateFun Parameters:paraDict success:^(id  _Nonnull responseObject){
+        SuperModel *curModel = [[SuperModel alloc] initWithDictionary:responseObject error:nil];
+        
+        if(curModel && curModel.status == 0){
+            [weakSelf gotoNextVCFunWithID:idStr];
+        }
+        else
+        {
+            if(curModel.msg){
+                [[iToast makeText:curModel.msg] show];
+            }
+            else{
+                [[iToast makeText:@"扫码信息错误"] show];
+            }
+            
+            [weakSelf.navigationController popViewControllerAnimated:YES];
+        }
+        
+    } failure:^(NSError * _Nonnull error) {
+        //[[iToast makeText:@"扫码信息错误"] show];
+        [weakSelf.navigationController popViewControllerAnimated:YES];
+    }];
+}
+
+
+#pragma mark 跳转下个界面
+- (void)gotoNextVCFunWithID:(NSString*)idStr
+{
+    PCLoginViewController *nextVC = [PCLoginViewController new];
+    nextVC.loginIdString = idStr;
+    [self.navigationController pushViewController:nextVC animated:YES];
+}
 @end

+ 16 - 0
创维盒子/双子星云手机/mine/scanToPCLoginViewController.h

@@ -0,0 +1,16 @@
+//
+//  scanToPCLoginViewController.h
+//  双子星云手机
+//
+//  Created by xd h on 2024/8/27.
+//
+
+#import "BaseViewController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface scanToPCLoginViewController : BaseViewController
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 371 - 0
创维盒子/双子星云手机/mine/scanToPCLoginViewController.m

@@ -0,0 +1,371 @@
+//
+//  scanToPCLoginViewController.m
+//  双子星云手机
+//
+//  Created by xd h on 2024/8/27.
+//
+
+#import "scanToPCLoginViewController.h"
+#import <AVFoundation/AVFoundation.h>
+#import <ImageIO/ImageIO.h>
+#import "PCLoginViewController.h"
+
+@interface scanToPCLoginViewController ()<AVCaptureMetadataOutputObjectsDelegate,AVCaptureVideoDataOutputSampleBufferDelegate,UINavigationControllerDelegate>
+
+@property(nonatomic,strong)AVCaptureVideoPreviewLayer *layer;
+
+//捕捉会话
+
+@property(nonatomic,strong)AVCaptureSession *session;
+
+//辅助区域框
+
+@property(nonatomic,strong)UIImageView * cyanEdgeImageView;
+@property(nonatomic,strong)UIImageView * qrCodeScanLine;
+@property(nonatomic,strong)NSTimer * scanLineTimer;
+
+@end
+
+@implementation scanToPCLoginViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    
+    [self.navigationBar setHidden:YES];
+    [self.toolBar setHidden:YES];
+    
+    AVAuthorizationStatus authStatus =[AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
+    //判断摄像头状态是否可用
+    if(authStatus==AVAuthorizationStatusAuthorized){
+        [self startScan];
+    }else{
+        NSLog(@"未开启相机权限,请前往设置中开启");
+        [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
+            if (granted){
+                mainBlock(^{
+                    [self startScan];
+                });
+            }
+        }];
+    }
+}
+
+-(void)viewWillDisappear:(BOOL)animated
+{
+    [super viewWillDisappear:animated];
+    if(_scanLineTimer)[_scanLineTimer  invalidate];
+}
+
+//开始扫描二维码
+
+-(void)startScan{
+    //1.创建捕捉会话,AVCaptureSession是第一个要被创建的对象,所有的操作都要基于这一个session
+    self.session = [[AVCaptureSession alloc]init];
+    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
+
+AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
+
+    [self.session addInput:input];
+
+
+
+    //3.添加输出数据(示例对象-->类对象-->元类对象-->根元类对象)
+
+    /*输入的类是AVCaptureInput,那么输出的类相应的就应该是AVCaptureOutput。
+
+ 输出不需要和设备挂钩,因为一般情况下,我们的输出要么是音频或视频文件,要么是一些其他的数据,像二维码扫描一般是字符串类型。
+
+ 所以创建AVCaptureOutput实例就不需要AVCaptureDevice对象。
+
+ AVCaptureOutput也同样是一个抽象类,同样要使用其子类,在这里我们扫描二维码,
+
+ 使用的是AVCaptureMetadataOutput,设置代码如下所示*/
+
+
+    AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init];
+    [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
+
+    //设置能扫描的区域,这里注意,CGRectMake的x,y和width,height的值是互换位置
+
+    output.rectOfInterest=CGRectMake(250/self.view.frame.size.height, 100/self.view.frame.size.width, (self.view.frame.size.width-200)/self.view.frame.size.width, (self.view.frame.size.width-200)/self.view.frame.size.width);
+
+    [self.session addOutput:output];
+//设置输入元数据的类型(类型是二维码,条形码数据,注意,这个一定要写在添加到session后面,不然要崩溃,如果只需要扫描二维码只需要AVMetadataObjectTypeQRCode,如果还需要扫描条形码,那么全部添加上)
+    [output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode,
+                                     AVMetadataObjectTypeEAN8Code,
+                                     AVMetadataObjectTypeEAN13Code,
+                                     AVMetadataObjectTypeCode39Code,
+                                     AVMetadataObjectTypeCode39Mod43Code,
+                                     AVMetadataObjectTypeCode93Code,
+                                     AVMetadataObjectTypeCode128Code,
+                                     AVMetadataObjectTypePDF417Code,
+                                     AVMetadataObjectTypeAztecCode,
+                                     AVMetadataObjectTypeUPCECode,
+                                     AVMetadataObjectTypeInterleaved2of5Code,
+                                     AVMetadataObjectTypeITF14Code,
+                                     AVMetadataObjectTypeDataMatrixCode,
+                                   ]];
+
+
+
+    //4.添加扫描图层
+
+    self.layer = [AVCaptureVideoPreviewLayer layerWithSession:self.session];
+
+    self.layer.videoGravity=AVLayerVideoGravityResizeAspectFill;
+
+    self.layer.frame = self.view.bounds;
+
+    [self.view.layer addSublayer:self.layer];
+
+
+
+    //5.创建view,通过layer层进行设置边框宽度和颜色,用来辅助展示扫描的区域
+
+    _cyanEdgeImageView=[[UIImageView alloc] initWithFrame:CGRectMake(100, 250, self.view.frame.size.width-200, self.view.frame.size.width-200)];
+
+//    _cyanEdgeImageView.layer.borderWidth=2;
+//
+//    _cyanEdgeImageView.layer.borderColor =[UIColor cyanColor].CGColor;
+
+    _cyanEdgeImageView.image = [UIImage imageNamed:@"qrCode_scan_bg"];
+    [self.view addSubview:_cyanEdgeImageView];
+
+    _qrCodeScanLine=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width-200, 1)];
+
+    _qrCodeScanLine.image = [UIImage imageNamed:@"qrCode_scan_line"];
+    [_cyanEdgeImageView addSubview:_qrCodeScanLine];
+
+    _scanLineTimer = [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(scanLineDownAndUpFun) userInfo:nil repeats:YES];
+    
+    UILabel *tipLib = [[UILabel alloc] initWithFrame:CGRectMake(20, _cyanEdgeImageView.hw_max_y + 15, SCREEN_W - 40, 20)];
+    tipLib.text = NSLocalizedString(@"pc_qrcoede_tips_please",nil);
+    tipLib.font = [UIFont systemFontOfSize:14.0];
+    tipLib.textAlignment = NSTextAlignmentCenter;
+    tipLib.textColor = [UIColor whiteColor];
+    [self.view addSubview:tipLib];
+    
+    //6.创建检测光感源
+
+    AVCaptureVideoDataOutput *guangOutPut = [[AVCaptureVideoDataOutput alloc] init];
+
+    [guangOutPut setSampleBufferDelegate:self queue:dispatch_get_main_queue()];
+
+    //设置为高质量采集率
+
+    [self.session setSessionPreset:AVCaptureSessionPresetHigh];
+
+    //把光感源添加到会话
+    [self.session addOutput:guangOutPut];
+
+    //9.开始扫描
+    [self.session startRunning];
+    
+    //添加返回键
+    CGFloat btn_w_h  = 40;
+    CGFloat btn_show = 28;
+    UIButton *backBtn = [[UIButton alloc] init];
+    [self.view addSubview:backBtn];
+    [backBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.mas_equalTo(H_STATE_BAR + (64.f - btn_w_h)/2.f);
+        make.left.mas_equalTo(10);
+        make.width.mas_equalTo(btn_w_h);
+        make.height.mas_equalTo(btn_w_h);
+    }];
+    [backBtn setImage:[UIImage imageNamed:@"icon_base_back"] forState:(UIControlStateNormal)];
+    [backBtn setImageEdgeInsets:(UIEdgeInsetsMake((btn_w_h - btn_show)/2.f, (btn_w_h - btn_show)/2.f, (btn_w_h - btn_show)/2.f, (btn_w_h - btn_show)/2.f))];
+    [backBtn addTarget:self
+                action:@selector(backBtnPressed)
+      forControlEvents:(UIControlEventTouchUpInside)];
+}
+
+#pragma mark timer 处理线上下移动
+bool isPCScanDownType = YES;
+-(void)scanLineDownAndUpFun
+{
+    [UIView animateWithDuration:0.01 animations:^{
+        
+        if(isPCScanDownType && self->_qrCodeScanLine.hw_y <= self->_cyanEdgeImageView.hw_h){
+            self->_qrCodeScanLine.hw_y += 2;
+            
+            if(self->_cyanEdgeImageView.hw_h - self->_qrCodeScanLine.hw_y <= 5){
+                isPCScanDownType = NO;
+            }
+        }
+        else if(!isPCScanDownType && self->_qrCodeScanLine.hw_y >= 0)
+        {
+            self->_qrCodeScanLine.hw_y -= 2;
+            
+            if(self->_qrCodeScanLine.hw_y <= 5){
+                isPCScanDownType = YES;
+            }
+        }
+    }];
+}
+
+//实现扫描的回调代理方法
+
+- (void)captureOutput:(AVCaptureOutput*)captureOutput didOutputMetadataObjects:(NSArray*)metadataObjects fromConnection:(AVCaptureConnection*)connection{
+
+//如果数组metadataObjects中有数据,metadataObjects是个数组类型
+
+    if(metadataObjects.count>0) {
+        
+        AVMetadataMachineReadableCodeObject*object = [metadataObjects lastObject];
+        
+        NSLog(@"%@",object.stringValue);
+        
+        /*扫描到有用信息时取消扫描*/
+        NSString *resStr = object.stringValue;//RK3908P1V62112465
+        
+        [self handleScanCodeResultFun:resStr];
+    }
+    else{
+        [[iToast makeText:NSLocalizedString(@"pc_qrcoede_tips_error",nil)] show];
+        NSLog(@"没有扫描到数据");
+    }
+}
+
+#pragma mark 处理扫码出来的数据
+- (void)handleScanCodeResultFun:(NSString*)resultStr
+{
+    NSString * resStr = resultStr;
+    
+    if([AFNetworkReachabilityManager sharedManager].networkReachabilityStatus == AFNetworkReachabilityStatusNotReachable)
+    {
+        [[iToast makeText:NSLocalizedString(@"phone_network_fail_Tips",nil)] show];
+        return;
+    }
+    
+    if ([resStr containsString:@"boxLoginId:"]){
+        
+        [_scanLineTimer  invalidate];
+
+        [self scanToPCloginFunWithID:resStr];
+        
+        //停止扫描
+        [self.session stopRunning];
+        
+        //移除扫描层layer
+        [self.layer removeFromSuperlayer];
+    }
+    else{
+        [[iToast makeText:NSLocalizedString(@"pc_qrcoede_tips_error",nil)] show];
+    }
+
+}
+
+
+//光感传感器代理
+-(void)captureOutput:(AVCaptureOutput*)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection*)connection{
+
+    //获取光线的值
+
+    CFDictionaryRef metadataDict = CMCopyDictionaryOfAttachments(NULL,sampleBuffer, kCMAttachmentMode_ShouldPropagate);
+
+    NSDictionary *metadata = [[NSMutableDictionary alloc] initWithDictionary:(__bridge NSDictionary*)metadataDict];
+
+    CFRelease(metadataDict);
+
+    NSDictionary *exifMetadata = [[metadata objectForKey:(NSString *)kCGImagePropertyExifDictionary] mutableCopy];
+
+    float brightnessValue = [[exifMetadata objectForKey:(NSString*)kCGImagePropertyExifBrightnessValue]floatValue];
+
+    NSLog(@"%f",brightnessValue);
+
+
+    // 根据brightnessValue的值来打开和关闭闪光灯,一般值小于0就需要打开,大于0就关闭
+
+//    if((brightnessValue <0)) {//显示闪光灯
+//        self.lightBtn.hidden=NO;
+//    }else if((brightnessValue >0)) {//隐藏闪光灯
+//        self.lightBtn.hidden=YES;
+//    }
+}
+
+////闪光灯按钮点击方法
+//
+//-(void)lightBtnClick:(UIButton*)sender{
+//    //判断当前设备是否有闪光灯
+//
+//    AVCaptureDevice * device=[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
+//
+//    BOOL result=[device hasTorch];
+//
+//    if(result==YES){
+//        if(self.lightBtn.isSelected==NO){
+//            self.lightBtn.selected=YES;
+//            self.lightBtn.backgroundColor=[UIColor greenColor];
+//            [device lockForConfiguration:nil];
+//            [device setTorchMode: AVCaptureTorchModeOn];//开
+//            [device unlockForConfiguration];
+//        }else if(self.lightBtn.isSelected==YES){
+//            self.lightBtn.selected=NO;
+//            self.lightBtn.backgroundColor=[UIColor grayColor];
+//            [device lockForConfiguration:nil];
+//            [device setTorchMode: AVCaptureTorchModeOff];//关
+//            [device unlockForConfiguration];
+//        }
+//    }else{
+//        NSLog(@"当前设备闪光灯不可用");
+//    }
+//}
+
+
+#pragma mark PC 扫码登录
+-(void)scanToPCloginFunWithID:(NSString*)idStr
+{
+    NSString *changSN =  [connectDeviceManager shareInstance].DeviceThirdIdMod.data.changeSn;
+    NSMutableDictionary *paraDict = [NSMutableDictionary new];
+    [paraDict setValue:@1 forKey:@"status"];
+    [paraDict setValue:idStr forKey:@"boxLoginId"];
+    [paraDict setValue:changSN forKey:@"sn"];
+    
+    KWeakSelf
+    [[netWorkManager shareInstance] CommonPostCallBackCode:updatePCLoginStateFun Parameters:paraDict success:^(id  _Nonnull responseObject){
+        SuperModel *curModel = [[SuperModel alloc] initWithDictionary:responseObject error:nil];
+        
+        if(curModel && curModel.status == 0){
+            [weakSelf gotoNextVCFunWithID:idStr];
+        }
+        else
+        {
+            if(curModel.msg){
+                [[iToast makeText:curModel.msg] show];
+            }
+            else{
+                [[iToast makeText:@"扫码信息错误"] show];
+            }
+            
+            [weakSelf.navigationController popViewControllerAnimated:YES];
+        }
+        
+    } failure:^(NSError * _Nonnull error) {
+        //[[iToast makeText:@"扫码信息错误"] show];
+        [weakSelf.navigationController popViewControllerAnimated:YES];
+    }];
+}
+
+#pragma mark 跳转下个界面
+- (void)gotoNextVCFunWithID:(NSString*)idStr
+{
+//    NSArray *vcArr = self.navigationController.viewControllers;
+//    
+//    NSMutableArray * newArr = [NSMutableArray new];
+//    
+//    for (int i=0; i< vcArr.count-1; i++) {
+//        UIViewController *vc = vcArr[i];
+//        [newArr addObject:vc];
+//    }
+//    
+//    self.navigationController.viewControllers = newArr;
+//    
+//    vcArr = self.navigationController.viewControllers;
+    
+    PCLoginViewController *nextVC = [PCLoginViewController new];
+    nextVC.loginIdString = idStr;
+    [self.navigationController pushViewController:nextVC animated:YES];
+}
+
+@end

+ 6 - 0
创维盒子/双子星云手机/netWork/newWorkInterface.h

@@ -133,4 +133,10 @@
  返回数据模型 */
 #define updateShareReportMarkFun  @"/box/share/info/updateReportMark"
 
+/*20 扫码登录接口  POST请求
+输入参数
+ 
+ 返回数据模型 */
+#define updatePCLoginStateFun  @"/box/login/updateStatus"
+
 #endif /* newWorkInterface_h */

+ 11 - 0
创维盒子/双子星云手机/zh-Hans.lproj/Localizable.strings

@@ -601,3 +601,14 @@
 "backups_need_read_msg4" = "页面进行更换";
 "set_file_Transfer_WWAN_title2" = "传输设置";
 "my_set_no_share2"   = "分享记录";
+
+//1.4.2 1.4.3
+"pc_qrcoede_tips_error" = "二维码错误,请扫描正确二维码";
+"pc_qrcoede_tips_please" = "扫码PC端客户端二维码";
+"pc_login_title" = "扫码登录";
+"pc_login_tip" = "正在尝试PC端扫码登录\n请确认是否为本人操作";
+"pc_login_sure_tip" = "确认登录";
+"pc_login_cancel_tip" = "取消登录";
+"pc_login_ing_tip" = "正在登录中…";
+"pc_login_ok_tip" = "登录成功";
+"pc_login_fail_tip" = "登录失败,请重试";