| | |
| | | |
| | | let path = courseDetailModel!.courseType == .offline ? "/courseDetail/offLine":"/courseDetail/onLine" |
| | | let string = String(format: "%@%@?courseId=%ld", ShareUrl,path,m.id) |
| | | ShareView.show(URL(string: string)!,title: "传递心灵温暖,一起感受疗愈力量",desc: m.description) |
| | | ShareView.show(URL(string: string)!,title: "传递心灵温暖,一起感受疗愈力量",desc: m.courseTitle) |
| | | } |
| | | |
| | | override var preferredStatusBarStyle: UIStatusBarStyle{ |
| | |
| | | |
| | | let path = courseDetailModel!.courseType == .offline ? "/courseDetail/offLine":"/courseDetail/onLine" |
| | | let string = String(format: "%@%@?courseId=%ld", ShareUrl,path,m.id) |
| | | ShareView.show(URL(string: string)!,title: "传递心灵温暖,一起感受疗愈力量",desc: m.description) |
| | | ShareView.show(URL(string: string)!,title: "传递心灵温暖,一起感受疗愈力量",desc: m.courseTitle) |
| | | } |
| | | |
| | | @objc func handleAction(_ btn:QMUIButton){ |
| | |
| | | alert(msg: "请阅读并同意《用户注册协议》和《用户隐私协议》");return |
| | | } |
| | | |
| | | Services.loginBy(phone: viewModel.loginPhone.value, content: viewModel.loginContent.value, type: viewModel.loginType.value).subscribe(onNext: { data in |
| | | Services.loginBy(phone: viewModel.loginPhone.value, content: viewModel.loginContent.value, type: viewModel.loginType.value, device: UserViewModel.DeviceUUID).subscribe(onNext: { data in |
| | | if let model = data.data{ |
| | | self.dismiss(animated: true) |
| | | |
| | |
| | | func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) { |
| | | if let credential = authorization.credential as? ASAuthorizationAppleIDCredential{ |
| | | |
| | | Services.loginByApple(appleId: credential.user).subscribe(onNext: {data in |
| | | Services.loginByApple(appleId: credential.user,device: UserViewModel.DeviceUUID).subscribe(onNext: {data in |
| | | if var m = data.data{ |
| | | if m.bindStatus == 2{ |
| | | sceneDelegate?.loginSuccess() |
| | |
| | | |
| | | class UpdatePhoneVC: BaseVC { |
| | | private var credential:ASAuthorizationAppleIDCredential? |
| | | private var wechatInfoModel:WechatUserInfoModel? |
| | | private var firstAccessToken:String? //后端问题,要把上次的token带过来 |
| | | @IBOutlet weak var tf_phone: QMUITextField! |
| | | @IBOutlet weak var tf_code: QMUITextField! |
| | |
| | | @IBOutlet weak var btn_isRead: UIButton! |
| | | |
| | | |
| | | init(credential:ASAuthorizationAppleIDCredential? = nil,firstAccessToken:String?) { |
| | | init(credential:ASAuthorizationAppleIDCredential? = nil,wechatInfoModel:WechatUserInfoModel? = nil,firstAccessToken:String?) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.credential = credential |
| | | self.wechatInfoModel = wechatInfoModel |
| | | self.firstAccessToken = firstAccessToken |
| | | } |
| | | |
| | |
| | | guard tf_code.text!.count == 6 else { |
| | | alertError(msg: "请输入6位验证码");return |
| | | } |
| | | guard let credentialUser = credential?.user else { |
| | | alertError(msg: "Apple登录授权异常");return |
| | | |
| | | var threePlantformLoginType:ThreePlantformLoginType! |
| | | var formatName:String! |
| | | var unionId:String! |
| | | |
| | | if credential != nil{ |
| | | threePlantformLoginType = .apple |
| | | guard let credentialUser = credential?.user else { |
| | | alertError(msg: "Apple登录授权异常");return |
| | | } |
| | | |
| | | formatName = String(format: "%@%@%@", credential?.fullName?.familyName ?? "",credential?.fullName?.middleName ?? "", credential?.fullName?.middleName ?? "") |
| | | |
| | | unionId = credential!.user |
| | | } |
| | | |
| | | let formatName = String(format: "%@%@%@", credential?.fullName?.familyName ?? "",credential?.fullName?.middleName ?? "", credential?.fullName?.middleName ?? "") |
| | | if wechatInfoModel != nil{ |
| | | threePlantformLoginType = .wechat |
| | | guard !(wechatInfoModel?.openid.isEmpty ?? true) else { |
| | | alertError(msg: "Apple登录授权异常");return |
| | | } |
| | | formatName = wechatInfoModel?.nickname ?? "" |
| | | unionId = wechatInfoModel!.openid |
| | | } |
| | | |
| | | Services.confirmByApple(cellPhone: tf_phone.text!, captcha: tf_code.text!, loginType: .apple, wxOrAppleId: credentialUser,name: formatName, mail: credential!.email).subscribe(onNext: {data in |
| | | |
| | | Services.confirmByApple(cellPhone: tf_phone.text!, captcha: tf_code.text!, loginType: threePlantformLoginType, wxOrAppleId: unionId,name: formatName, mail: credential!.email).subscribe(onNext: {data in |
| | | if var model = data.data{ |
| | | model.loginByAppleToken = String(data: self.credential!.identityToken!, encoding: .utf8) |
| | | model.accessToken = self.firstAccessToken ?? "" |
| | | model.accessToken = model.accessToken |
| | | model.appleId = self.credential!.user |
| | | sceneDelegate?.loginSuccess() |
| | | NotificationCenter.default.post(name: LoginDismiss_Noti, object: nil, userInfo: nil) |
| | | UserViewModel.saveLoginInfo(model) |
| | | |
| | | Services.getUserInfo().subscribe(onNext: {data in |
| | | if let model = data.data{ |
| | | UserViewModel.saveAvatarInfo(model) |
| | | sceneDelegate?.loginSuccess() |
| | | NotificationCenter.default.post(name: LoginDismiss_Noti, object: nil, userInfo: nil) |
| | | } |
| | | }).disposed(by: self.disposeBag) |
| | | } |
| | |
| | | import CoreLocation |
| | | |
| | | #if DEBUG |
| | | let All_Url = "https://xq.xqzhihui.com/api" |
| | | //let All_Url = "http://192.168.110.64:9000" |
| | | //let All_Url = "https://xq.xqzhihui.com/api" |
| | | let All_Url = "http://192.168.110.64:9000" |
| | | //let All_Url = "https://mock.apipost.net/mock/31b303c60464000" |
| | | #else |
| | | let All_Url = "https://xq.xqzhihui.com/api" |
| | |
| | | extension Services{ |
| | | |
| | | /// 密码登录 |
| | | class func loginBy(phone:String,content:String,type:LoginType)->Observable<BaseResponse<LoginUserInfoModel>>{ |
| | | class func loginBy(phone:String,content:String,type:LoginType,device:String)->Observable<BaseResponse<LoginUserInfoModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | |
| | | switch type { |
| | |
| | | params.interface(url: "/auth/app/login") |
| | | .append(key: "cellPhone", value: phone) |
| | | .append(key: "password", value: content.jq_md5String()) |
| | | .append(key: "device",value:device) |
| | | .append(key: "apipost_id", value: "246d780670e267") |
| | | case .code: |
| | | params.interface(url: "/auth/app/captchaLogin") |
| | | .append(key: "cellPhone", value: phone) |
| | | .append(key: "captcha",value:content) |
| | | .append(key: "device",value:device) |
| | | .append(key: "apipost_id", value: "246d780670e265") |
| | | } |
| | | return NetworkRequest.request(params: params, method: .post,encoding: JSONEncoding(), progress: true) |
| | | } |
| | | |
| | | |
| | | class func loginByApple(appleId:String)->Observable<BaseResponse<LoginUserInfoModel>>{ |
| | | class func loginByApple(appleId:String,device:String)->Observable<BaseResponse<LoginUserInfoModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | params.interface(url: "/auth/app/appleLogin") |
| | | .append(key: "appleId", value: appleId) |
| | | .append(key: "device", value: device) |
| | | .append(key: "apipost_id", value: "246d780670e264") |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | class func loginByWechat(headImgUrl:String,nickname:String,sex:Int,wxOpenId:String)->Observable<BaseResponse<LoginUserInfoModel>>{ |
| | | class func loginByWechat(headImgUrl:String,nickname:String,sex:Int,wxOpenId:String,device:String)->Observable<BaseResponse<LoginUserInfoModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | params.interface(url: "/auth/app/wxLogin") |
| | | .append(key: "headImgUrl", value: headImgUrl) |
| | | .append(key: "nickname", value: nickname) |
| | | .append(key: "sex", value: sex) |
| | | .append(key: "wxOpenId", value: wxOpenId) |
| | | .append(key: "device", value: device) |
| | | .append(key: "apipost_id", value: "246d7806b0e26c") |
| | | return NetworkRequest.request(params: params, method: .post,encoding: JSONEncoding(), progress: true) |
| | | } |
| | |
| | | } |
| | | |
| | | class UserViewModel{ |
| | | private static let userLoginInfo = UserDefaultsStore<LoginUserInfoModel>(uniqueIdentifier: "userLoginInfo")! |
| | | private static let userAvatarInfo = UserDefaultsStore<UserInfoModel>(uniqueIdentifier: "userAvatarInfo")! |
| | | private static let userLoginInfo = UserDefaultsStore<LoginUserInfoModel>(uniqueIdentifier: "userLoginInfo")! |
| | | private static let userAvatarInfo = UserDefaultsStore<UserInfoModel>(uniqueIdentifier: "userAvatarInfo")! |
| | | |
| | | //用户UUID |
| | | static var DeviceUUID:String{ |
| | | if let uuid = UserDefaults.standard.value(forKey: "device_UUID") as? String{ |
| | | return uuid |
| | | }else{ |
| | | let uuid = UUID().uuidString |
| | | UserDefaults.standard.set(uuid, forKey: "device_UUID") |
| | | UserDefaults.standard.synchronize() |
| | | return uuid |
| | | } |
| | | } |
| | | |
| | | static func getToken()->String?{ |
| | | return UserDefaults.standard.object(forKey: "_userToken") as? String |
| | |
| | | WeChatTools.getUserInfo(access_token: m.access_token, openId: m.openid) { userInfoModel in |
| | | if let u = userInfoModel{ |
| | | if UserViewModel.getAvatarInfo().wxOpenId.isEmpty{ |
| | | Services.loginByWechat(headImgUrl: u.headimgurl, nickname: u.nickname, sex: u.sex, wxOpenId: u.openid).subscribe(onNext: {data in |
| | | Services.loginByWechat(headImgUrl: u.headimgurl, nickname: u.nickname, sex: u.sex, wxOpenId: u.openid, device: UserViewModel.DeviceUUID).subscribe(onNext: {data in |
| | | if let model = data.data{ |
| | | sceneDelegate?.loginSuccess() |
| | | JQ_currentViewController().dismiss(animated:true) |
| | | UserViewModel.saveLoginInfo(model) |
| | | |
| | | Services.getUserInfo().subscribe(onNext: {data in |
| | | if let model = data.data{ |
| | | UserViewModel.saveAvatarInfo(model) |
| | | } |
| | | }).disposed(by: JQ_disposeBag) |
| | | if model.bindStatus == 2{ |
| | | sceneDelegate?.loginSuccess() |
| | | JQ_currentViewController().dismiss(animated:true) |
| | | UserViewModel.saveLoginInfo(model) |
| | | |
| | | Services.getUserInfo().subscribe(onNext: {data in |
| | | if let model = data.data{ |
| | | UserViewModel.saveAvatarInfo(model) |
| | | } |
| | | }).disposed(by: JQ_disposeBag) |
| | | }else{ |
| | | let vc = UpdatePhoneVC(wechatInfoModel: u,firstAccessToken: model.accessToken) |
| | | JQ_currentViewController().jq_push(vc: vc) |
| | | } |
| | | } |
| | | }).disposed(by: JQ_disposeBag) |
| | | }else{ |