Commit d24da1b5 authored by pete谢兆麟's avatar pete谢兆麟

登录注册验证码逻辑 接口

parent f436230f
......@@ -114,6 +114,7 @@
04E86E5F2B84D07000A35F4B /* YHWorkExampleMessageTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04E86E5E2B84D07000A35F4B /* YHWorkExampleMessageTableViewCell.swift */; };
04E86E612B85CAEA00A35F4B /* YHWorkExampleModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04E86E602B85CAEA00A35F4B /* YHWorkExampleModel.swift */; };
04E86E632B85EE9A00A35F4B /* YHWorkIntroductionViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04E86E622B85EE9A00A35F4B /* YHWorkIntroductionViewModel.swift */; };
04E86E662B86EB6F00A35F4B /* YHLoginManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04E86E652B86EB6F00A35F4B /* YHLoginManager.swift */; };
6203A87EDC96313BBE789D9C /* Pods_galaxy.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 987C69D43AE8D85DC1930DCF /* Pods_galaxy.framework */; };
A50AB89B2B81E96E00C227DE /* YHOtherInfoFillModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A50AB89A2B81E96E00C227DE /* YHOtherInfoFillModel.swift */; };
A50AB89D2B81F1FB00C227DE /* YHOtherInfoFillViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A50AB89C2B81F1FB00C227DE /* YHOtherInfoFillViewModel.swift */; };
......@@ -389,6 +390,7 @@
04E86E5E2B84D07000A35F4B /* YHWorkExampleMessageTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHWorkExampleMessageTableViewCell.swift; sourceTree = "<group>"; };
04E86E602B85CAEA00A35F4B /* YHWorkExampleModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHWorkExampleModel.swift; sourceTree = "<group>"; };
04E86E622B85EE9A00A35F4B /* YHWorkIntroductionViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHWorkIntroductionViewModel.swift; sourceTree = "<group>"; };
04E86E652B86EB6F00A35F4B /* YHLoginManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHLoginManager.swift; sourceTree = "<group>"; };
58C2405158A4A6632D0E7460 /* Pods-galaxy.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-galaxy.debug.xcconfig"; path = "Target Support Files/Pods-galaxy/Pods-galaxy.debug.xcconfig"; sourceTree = "<group>"; };
987C69D43AE8D85DC1930DCF /* Pods_galaxy.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_galaxy.framework; sourceTree = BUILT_PRODUCTS_DIR; };
A50AB89A2B81E96E00C227DE /* YHOtherInfoFillModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHOtherInfoFillModel.swift; sourceTree = "<group>"; };
......@@ -893,6 +895,14 @@
path = M;
sourceTree = "<group>";
};
04E86E642B86EB4E00A35F4B /* Server */ = {
isa = PBXGroup;
children = (
04E86E652B86EB6F00A35F4B /* YHLoginManager.swift */,
);
path = Server;
sourceTree = "<group>";
};
4758815B24BAF3CAA24EC6A8 /* Pods */ = {
isa = PBXGroup;
children = (
......@@ -1159,6 +1169,7 @@
A5ACE8D82B4564F7002C94D2 /* Login(登录) */ = {
isa = PBXGroup;
children = (
04E86E642B86EB4E00A35F4B /* Server */,
0468D4382B579E9B00CFB916 /* VM */,
0468D4372B57756300CFB916 /* M */,
A5ACE8DA2B4564F7002C94D2 /* C */,
......@@ -1722,6 +1733,7 @@
A5ACE9292B4564F7002C94D2 /* YHSmsCodeInputView.swift in Sources */,
A5ACE9452B4564F7002C94D2 /* YHHUDContainerView.swift in Sources */,
A5ACE93A2B4564F7002C94D2 /* NSAttributedString+Extension.swift in Sources */,
04E86E662B86EB6F00A35F4B /* YHLoginManager.swift in Sources */,
042F888B2B8477C6008B60BD /* YHEducationInfo.swift in Sources */,
04AF58C42B4FC51C0066011A /* YHLocalizable.swift in Sources */,
042FBBBF2B639F0300F9DE23 /* YHSpouseBasicInfoVC.swift in Sources */,
......
......@@ -14,6 +14,7 @@ class YHWorkExperienceListViewController: YHBaseViewController {
var tableView: UITableView!
var dataSource: [YHWorkItemListModel]?
var viewModel: YHWorkItemListViewModel?
var isMore: Bool = false
override func viewDidLoad() {
super.viewDidLoad()
......@@ -25,8 +26,11 @@ class YHWorkExperienceListViewController: YHBaseViewController {
}
func getData() {
dataSource = viewModel?.getBaseDataSource()
updateDataSource()
viewModel?.requestWorkList("133969", callBackBlock: {[weak self] success, error in
guard let self = self else { return }
self.dataSource = success
self.tableView.reloadData()
})
}
func updateDataSource() {
......@@ -99,6 +103,27 @@ extension YHWorkExperienceListViewController: UITableViewDelegate, UITableViewDa
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withClass: YHWorkExperienceListTableViewCell.self)
cell.dataSource = dataSource
if isMore {
cell.more()
} else {
cell.cannal()
}
cell.clickBlock = {[weak self] model in
guard let self = self else { return }
let vc = YHWorkExperienceViewController()
self.navigationController?.pushViewController(vc, animated: true)
}
cell.deleteBlock = {[weak self] model in
guard let self = self else { return }
self.viewModel?.requestDeleteWorkExperience("\(model.id ?? 0)", callBackBlock: {[weak self] success, error in
guard let self = self else { return }
self.getData()
})
}
cell.isMoreBlock = {[weak self] isMore in
guard let self = self else { return }
self.isMore = isMore
}
return cell
}
......
......@@ -7,17 +7,23 @@
//
import UIKit
import SmartCodable
struct YHWorkItemListModel {
var title: String?
var subTitle: String?
var message: String?
var isShowDelete: Bool?
struct YHWorkModel: SmartCodable {
var count: Int?
var list: [YHWorkItemListModel]?
}
struct YHWorkItemListModel: SmartCodable {
var id: Int?
var order_id: Int?
var company_name: String?
var position: String?
var entry_time: String?
var departure_time: Bool?
var vacant_num: Int?
init(title: String? = nil, subTitle: String? = nil, message: String? = nil, isShowDelete: Bool? = nil) {
self.title = title
self.subTitle = subTitle
self.message = message
self.isShowDelete = isShowDelete
}
}
......@@ -9,9 +9,11 @@
import UIKit
class YHWorkExperienceListTableViewCell: UITableViewCell {
typealias ExperienceListBlock = (_ model: YHItemModel) -> ()
var experienceListBlock: ExperienceListBlock?
typealias ExperienceListBlock = (_ model: YHWorkItemListModel) -> ()
typealias IsMoreBlock = (_ isMore: Bool) -> ()
var clickBlock: ExperienceListBlock?
var deleteBlock: ExperienceListBlock?
var isMoreBlock: IsMoreBlock?
var centerView: UIView!
var titleLabel: UILabel!
var subTitleLabel: UILabel!
......@@ -162,13 +164,7 @@ class YHWorkExperienceListTableViewCell: UITableViewCell {
make.right.equalTo(-18)
}
let itemView = YHWorkItemView()
itemView.dataSource = YHWorkItemListModel(title: "工作经历1", subTitle: "", message: "有16项未填写", isShowDelete: false)
itemView.block = {[weak self] model in
guard let self = self else { return }
if let block = self.experienceListBlock {
block(model)
}
}
itemView.dataSource = YHWorkItemListModel()
mainItemView.addSubview(itemView)
itemView.snp.makeConstraints { make in
make.left.equalTo(18)
......@@ -190,13 +186,21 @@ class YHWorkExperienceListTableViewCell: UITableViewCell {
make.right.equalTo(-18)
}
let itemView = YHWorkItemView()
itemView.dataSource = dataSource[i]
itemView.block = {[weak self] model in
itemView.clickBlock = {[weak self] model in
guard let self = self else { return }
if let block = self.experienceListBlock {
if let block = self.clickBlock {
block(model)
}
}
itemView.deleteBlock = {[weak self] model in
guard let self = self else { return }
if let block = self.deleteBlock {
block(model)
}
}
itemView.tag = 4000 + i
itemView.dataSource = dataSource[i]
mainItemView.addSubview(itemView)
itemView.snp.makeConstraints { make in
make.left.equalTo(18)
......@@ -208,10 +212,26 @@ class YHWorkExperienceListTableViewCell: UITableViewCell {
}
@objc func cannal() {
moreButton.isHidden = false
cannalButton.isHidden = true
for i in 0..<(dataSource?.count ?? 0) {
let view = mainItemView.viewWithTag(4000 + i) as! YHWorkItemView
view.isShowDelete(i, isShow: false)
}
if let block = isMoreBlock {
block(false)
}
}
@objc func more() {
moreButton.isHidden = true
cannalButton.isHidden = false
for i in 0..<(dataSource?.count ?? 0) {
let view = mainItemView.viewWithTag(4000 + i) as! YHWorkItemView
view.isShowDelete(i, isShow: true)
}
if let block = isMoreBlock {
block(true)
}
}
}
......@@ -67,7 +67,7 @@ class YHWorkFileItemView: UIView {
func updateAllViews() {
guard let dataSource = dataSource else { return }
titleLabel.text = dataSource.title
// titleLabel.text = dataSource.title
}
......
......@@ -102,18 +102,17 @@ class YHWorkIntroductionItemView: UIView {
make.width.equalTo(28)
make.centerY.equalTo(titleLabel.snp.centerY)
}
}
func updateAllViews() {
guard let dataSource = dataSource else { return }
titleLabel.text = dataSource.title
subTitleLabel.text = dataSource.subTitle
if dataSource.isShowDelete ?? false {
deleteButton.isHidden = false
} else {
deleteButton.isHidden = true
}
// titleLabel.text = dataSource.title
// subTitleLabel.text = dataSource.subTitle
// if dataSource.isShowDelete ?? false {
// deleteButton.isHidden = false
// } else {
// deleteButton.isHidden = true
// }
}
......
......@@ -10,8 +10,9 @@ import UIKit
class YHWorkItemView: UIView {
typealias ItemBlock = (_ model: YHItemModel) -> ()
var block: ItemBlock?
typealias ItemBlock = (_ model: YHWorkItemListModel) -> ()
var clickBlock: ItemBlock?
var deleteBlock: ItemBlock?
var titleLabel: UILabel!
var subTitleLabel: UILabel!
var explainLabel: UILabel!
......@@ -87,7 +88,7 @@ class YHWorkItemView: UIView {
addSubview(nextStepImageView)
nextStepImageView.snp.makeConstraints { make in
make.right.equalToSuperview()
make.centerY.equalToSuperview()
make.centerY.equalTo(titleLabel.snp.centerY)
make.height.width.equalTo(20)
}
......@@ -107,16 +108,17 @@ class YHWorkItemView: UIView {
button.titleLabel?.font = kFont(size: 14)
button.contentHorizontalAlignment = .center
button.setTitle("删除", for: .normal)
button.contentHorizontalAlignment = .right
button.setTitleColor( UIColor(hex:0xf81d22), for: .normal)
button.addTarget(self, action: #selector(centerClick), for: .touchUpInside)
button.addTarget(self, action: #selector(deleteClick), for: .touchUpInside)
button.isHidden = true
return button
}()
addSubview(deleteButton)
deleteButton.snp.makeConstraints { make in
make.right.equalTo(-24)
make.right.equalToSuperview()
make.height.equalTo(20)
make.width.equalTo(28)
make.width.equalTo(35)
make.centerY.equalTo(titleLabel.snp.centerY)
}
......@@ -124,20 +126,39 @@ class YHWorkItemView: UIView {
func updateAllViews() {
guard let dataSource = dataSource else { return }
titleLabel.text = dataSource.title
subTitleLabel.text = dataSource.subTitle
explainLabel.text = dataSource.message
if dataSource.isShowDelete ?? false {
deleteButton.isHidden = false
explainLabel.isHidden = true
titleLabel.text = dataSource.company_name
subTitleLabel.text = dataSource.position
if dataSource.vacant_num != 0 {
explainLabel.text = "有" + "\(dataSource.vacant_num ?? 0)" + "项未填写"
} else {
deleteButton.isHidden = true
explainLabel.isHidden = false
explainLabel.text = (dataSource.entry_time ?? "") + "-" + (dataSource.entry_time ?? "")
}
}
@objc func centerClick() {
if let block = clickBlock {
block(self.dataSource ?? YHWorkItemListModel())
}
}
@objc func deleteClick() {
if let block = deleteBlock {
block(self.dataSource ?? YHWorkItemListModel())
}
}
func isShowDelete(_ index: Int, isShow: Bool) {
if isShow {
explainLabel.isHidden = true
nextStepImageView.isHidden = true
if index != 0 {
deleteButton.isHidden = false
}
} else {
explainLabel.isHidden = false
nextStepImageView.isHidden = false
deleteButton.isHidden = true
}
}
}
......@@ -10,15 +10,50 @@ import UIKit
class YHWorkItemListViewModel: YHBaseViewModel {
var mainModel: YHMainInformationModel = YHMainInformationModel()
var mainModel: [YHWorkItemListModel]?
override init() {
super.init()
}
func getBaseDataSource() -> [YHWorkItemListModel] {
let item = YHWorkItemListModel(title: "华为有限公司", subTitle: "后端开发工程师", message: "2019.07-至今", isShowDelete: false)
return [item]
func requestWorkList(_ orderId: String, callBackBlock:@escaping (_ success: [YHWorkItemListModel]?, _ error:YHErrorModel?)->()) {
let strUrl = YHBaseUrlManager.shared.curURL() + "frontend/workInfo/list?order_id=\(orderId)"
let _ = YHNetRequest.getRequest(url: strUrl) { [weak self] json, code in
//1. json字符串 转 对象
guard let self = self else { return }
guard let model = NetBaseModel.deserialize(dict: json) else {
let error : YHErrorModel = YHErrorModel(errorCode:YHErrorCode.dictParseError.rawValue,errorMsg: YHErrorCode.dictParseError.description())
callBackBlock([],error)
return
}
let dic = model.data?.peel
guard let result = YHWorkModel.deserialize(dict: dic as? [AnyHashable : Any]) else {
callBackBlock([],nil)
return
}
self.mainModel = result.list
callBackBlock(self.mainModel, nil)
} failBlock: { err in
callBackBlock([],err)
}
}
func requestDeleteWorkExperience(_ orderId: String, callBackBlock:@escaping (_ success: Bool?, _ error:YHErrorModel?)->()) {
let params: [String : Any] = ["id": orderId]
let strUrl = YHBaseUrlManager.shared.curURL() + "frontend/workInfo/del"
let _ = YHNetRequest.postRequest(url: strUrl, params: params) { [weak self] json, code in
//1. json字符串 转 对象
guard let self = self else { return }
guard let model = NetBaseModel.deserialize(dict: json) else {
let error : YHErrorModel = YHErrorModel(errorCode:YHErrorCode.dictParseError.rawValue,errorMsg: YHErrorCode.dictParseError.description())
callBackBlock(false,error)
return
}
callBackBlock(true, nil)
} failBlock: { err in
callBackBlock(false, err)
}
}
}
......@@ -19,15 +19,18 @@ class YHCodeSueecssViewController: YHBaseViewController {
var getCodeLabel: UILabel!
var getCodeButton: UIButton!
var smscodeView: YHSmsCodeInputView!
var phoneNumber: String?
var viewModel: YHLoginViewModel?
override func viewDidLoad() {
super.viewDidLoad()
viewModel = YHLoginViewModel()
gk_navBackgroundColor = .clear
gk_navShadowColor = .clear
gk_navigationBar.isHidden = true
setView()
// Do any additional setup after loading the view.
startClicked()
startTime()
}
func setView() {
......@@ -74,7 +77,7 @@ class YHCodeSueecssViewController: YHBaseViewController {
loginSubTitleLabel = {
let label = UILabel()
label.text = "已发送至 +86 188****2882"
label.text = "已发送至 \(phoneNumber ?? "")"
label.font = kFont(size: 13)
label.textColor = UIColor(hex:0xc0c0c0)
return label
......@@ -90,7 +93,14 @@ class YHCodeSueecssViewController: YHBaseViewController {
smscodeView = {
let view = YHSmsCodeInputView(config: YHSmsCodeViewConfig())
view.complete = { [weak self] code in
self?.dismiss(animated: true)
guard let self = self else { return }
self.viewModel?.login(self.phoneNumber ?? "", code: code, callBackBlock: {[weak self] success in
guard let self = self else { return }
YHLoginManager.shared.userModel = success
if success?.token?.count != 0 {
self.dismiss(animated: true)
}
})
}
return view
}()
......@@ -146,7 +156,7 @@ class YHCodeSueecssViewController: YHBaseViewController {
}
@objc func startClicked() {
func startTime() {
getCodeLabel.isHidden = false
getCodeButton.isHidden = true
let sourceTimer = DispatchSource.makeTimerSource()
......@@ -171,6 +181,14 @@ class YHCodeSueecssViewController: YHBaseViewController {
sourceTimer.resume()
}
@objc func startClicked() {
viewModel?.getLoginCode(phoneNumber ?? "", callBackBlock: {[weak self] success in
guard let self = self else { return }
self.startTime()
})
}
@objc func close() {
self.navigationController?.popViewController()
}
......
......@@ -18,11 +18,12 @@ class YHPhoneLoginViewController: YHBaseViewController {
var phoneMessageView: YHPhoneMessageView!
var getCodeButton: UIButton!
var privacyView: YHLoginPrivacyView!
var viewModel: YHLoginViewModel?
override func viewDidLoad() {
super.viewDidLoad()
viewModel = YHLoginViewModel()
setView()
gk_navBackgroundColor = .clear
gk_navShadowColor = .clear
gk_navigationBar.isHidden = true
......@@ -113,6 +114,16 @@ class YHPhoneLoginViewController: YHBaseViewController {
view.layer.cornerRadius = 6
view.layer.borderWidth = 1
view.layer.borderColor = UIColor(hex:0xebeef4).cgColor
view.phoneBlock = {[weak self] count in
guard let self = self else { return }
if count == 0 {
self.getCodeButton.backgroundColor = UIColor(hex:0x2274ee).withAlphaComponent(0.4)
self.getCodeButton.isEnabled = false
} else {
self.getCodeButton.backgroundColor = UIColor(hex:0x2274ee)
self.getCodeButton.isEnabled = true
}
}
return view
}()
view.addSubview(phoneMessageView)
......@@ -125,13 +136,14 @@ class YHPhoneLoginViewController: YHBaseViewController {
getCodeButton = {
let button = UIButton(type: .custom)
button.backgroundColor = UIColor(hex:0x2274ee).withAlphaComponent(0.8)
button.backgroundColor = UIColor(hex:0x2274ee).withAlphaComponent(0.4)
button.titleLabel?.font = kBoldFont(size: 16)
button.contentHorizontalAlignment = .center
button.setTitle("获取验证码", for: .normal)
button.setTitleColor( UIColor(hex:0x979797), for: .normal)
button.setTitleColor( UIColor(hex:0xffffff), for: .normal)
button.layer.cornerRadius = 6
button.addTarget(self, action: #selector(getCode), for: .touchUpInside)
button.isEnabled = false
return button
}()
view.addSubview(getCodeButton)
......@@ -157,10 +169,18 @@ class YHPhoneLoginViewController: YHBaseViewController {
}
@objc func getCode() {
let phoneNumer = phoneMessageView.phoneTextField.text ?? ""
guard phoneNumer.isMobile() == true else {
YHHUD.flash(message: "请输入正确的手机号")
return
}
if privacyView.isAgree {
let vc = YHCodeSueecssViewController()
self.navigationController?.pushViewController(vc)
viewModel?.getLoginCode(phoneNumer, callBackBlock: {[weak self] success in
guard let self = self else { return }
let vc = YHCodeSueecssViewController()
vc.phoneNumber = self.phoneMessageView.phoneTextField.text
self.navigationController?.pushViewController(vc)
})
} else {
let view = YHPrivacyAlertView(frame: view.bounds)
view.urlBlock = { [weak self] url in
......
......@@ -10,22 +10,15 @@ import UIKit
import SmartCodable
struct YHUserModel: SmartCodable {
var userid: Int?
var yhId: String?
var nickname: String?
var mobile: String?
var headpic: String?
var sex: Int?
var token: String?
init(userid: Int? = nil, nickname: String? = nil, mobile: String? = nil, headpic: String? = nil, sex: Int? = nil, token: String? = nil) {
self.userid = userid
self.nickname = nickname
self.mobile = mobile
self.headpic = headpic
self.sex = sex
self.token = token
}
var brand: String?
var os: String?
var ip: String?
var imei: String?
var channel: String?
init() {
}
var token: String? // 暂无token
}
//
// YHLoginManager.swift
// galaxy
//
// Created by EDY on 2024/2/22.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHLoginManager: NSObject {
static let shared = YHLoginManager()
var userModel: YHUserModel?
private override init() {}
func isLogin() -> Bool {
if userModel?.token?.count != 0 {
return true
}
return false
}
}
......@@ -9,8 +9,10 @@
import UIKit
class YHPhoneMessageView: UIView {
typealias PhoneBlock = (_ count: Int) -> ()
typealias Block = () -> ()
var block: Block?
var phoneBlock: PhoneBlock?
var messageButton: UIButton!
var pointImageView: UIImageView!
var phoneTextField: UITextField!
......@@ -59,6 +61,7 @@ class YHPhoneMessageView: UIView {
text.textAlignment = .left
text.keyboardType = .phonePad
text.clearButtonMode = .always
text.addTarget(self, action: #selector(textFeildChange), for: .allEvents)
return text
}()
addSubview(phoneTextField)
......@@ -74,4 +77,10 @@ class YHPhoneMessageView: UIView {
block()
}
}
@objc func textFeildChange() {
if let block = phoneBlock {
block(phoneTextField.text?.count ?? 0)
}
}
}
......@@ -19,9 +19,11 @@ class YHLoginViewModel: YHBaseViewModel {
//接口
extension YHLoginViewModel {
//发送验证码
func getLoginCode(callBackBlock: @escaping (_ success: Bool)->()) {
let strUrl = YHBaseUrlManager.shared.curURL() + "/user/login-code"
let _ = YHNetRequest.postRequest(url: strUrl) {[weak self] json, code in
func getLoginCode(_ phone: String, callBackBlock: @escaping (_ success: Bool)->()) {
let params: [String : Any] = ["type": "Phone",
"value": phone]
let strUrl = "http://192.168.35.135:18087/" + "user/verify-code"
let _ = YHNetRequest.postRequest(url: strUrl, params: params) {[weak self] json, code in
guard let self = self else { return }
//1. json字符串 转 对象
if code == 200 {
......@@ -32,26 +34,30 @@ extension YHLoginViewModel {
}
}
func login(callBackBlock: @escaping (_ success: Bool)->()) {
let strUrl = YHBaseUrlManager.shared.curURL() + "/user/userlogin"
let _ = YHNetRequest.postRequest(url: strUrl) {[weak self] json, code in
func login(_ phone: String, code: String,callBackBlock: @escaping (_ success: YHUserModel?)->()) {
let params: [String : Any] = ["mobile": phone,
"sms_code": code,
"channel": "app",
"client": "super_app"]
let strUrl = "http://192.168.25.12:18083/" + "auth/login"
let _ = YHNetRequest.postRequest(url: strUrl, params: params) {[weak self] json, code in
//1. json字符串 转 对象
guard let self = self else { return }
guard let model = NetBaseModel.deserialize(dict: json) else {
let error : YHErrorModel = YHErrorModel(errorCode:YHErrorCode.dictParseError.rawValue,errorMsg: YHErrorCode.dictParseError.description())
callBackBlock(false)
callBackBlock(nil)
return
}
// printLog("model 是 ==> \(model)")
let dic = model.data?.peel
guard let resultModel = YHUserModel.deserialize(dict: dic as? [AnyHashable : Any]) else {
callBackBlock(nil)
return
}
self.userModel = resultModel
callBackBlock(true)
callBackBlock(resultModel)
} failBlock: { err in
callBackBlock(false)
callBackBlock(nil)
}
}
}
......@@ -128,38 +128,6 @@ extension String {
}
}
// MARK: - 计算文字的宽高
extension String {
/// 计算文字的宽高
///
/// - Parameters:
/// - font: 字体大小
/// - lineSpacing: 行高
/// - constraintRect: 大小范围
/// - Returns: 宽高
public func bs_sizeWithConstrained(_ font: UIFont,
lineSpacing: CGFloat? = nil,
constraintRect: CGSize = CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude)) -> CGSize {
var attributes: [NSAttributedString.Key : Any] = [NSAttributedString.Key.font: font]
if let lineSpacing = lineSpacing {
//格式调整
let style = NSMutableParagraphStyle()
/**调行间距*/
style.lineSpacing = lineSpacing
style.alignment = .left
attributes[.paragraphStyle] = style
}
let boundingBox = self.boundingRect(
with: constraintRect,
options: NSStringDrawingOptions.usesLineFragmentOrigin,
attributes: attributes,
context: nil)
return boundingBox.size
}
}
// MARK: - 正则获取http
extension String {
......
......@@ -95,7 +95,7 @@ class YHNetRequest: NSObject {
requestHeader.add(name:"sign",value:sign)
requestHeader.add(name: "token", value: "eyJpdiI6Ik5aeEVDclZTK0FISEFBZUgxN2VkdGc9PSIsInZhbHVlIjoiRFRJOHlObzVrZlp4T2tVYW1MSE1ZK0Z3dXlyK3p4QlczNmxsTXdkdW5GQVY4Q2VqZlNNUDdrdVpsb0JcLytpYmJheUp2MWZTUE5pOWgrVWRLdEtIUkx4R1wvS3F6SmRSQ0dWeFVXanFINGkyRWNMTXB4TVlcLzhjXC9NSzVoMFwvZ1ZOaVIwb0VqWlo1VERPSHY2RWJhME1RdWtkXC8yanBQdm9lMWM4WXJVK1BnMDd6SncwVVlWMDNnbSswSnM3eVwveFRRck03M3pOaDFSc3g0UmlYMTJQdmZpSkhUWHVMa21RV2xRbXBkalVTTUFicmFaN2NVNXl1ZTJOeEJoKzhrMnZtdzdvM1U5Qmh4WXNiSEFERUpiZHNWNkxoM2ZkVVRUdFlMMU1MQnIyaWNxNSt4S1NocDVEbnNqeHphUCtVVk1qTlVnMk1ydVNPamJ0c2tDQ1wvWFk1SkxtSWtDMU9oT3ZqaFpuNU5aVUVicHpYVU56VnlqK01Cb20welJMbkQrcTFWOHFUbzlPK0RGdDRcLzJ1T094MjNjYTVZZmJcL2txRE93cEFUYzlKWWdVWE9cLzFnYnVwTFZ4VUtqMFQ5QlgzZitDQjhyNURpU3p0bktqblBicUxPekNBcWRWM0g0WklSOEc0T0RPVkNBMGZQdEtWV3ZqN3IrcHZDYm9UNjREdnA3U1RZY1Z1dFE3K1RRM2F2eGY0QXc2dGlha0RBUDVpVHdFWE53dzl2eVczVk9VNTJSa1Fzb1J4ZGd0c0RCdktPQ1FWOUQ5Y0krckQ3bFc4NkNJMHliSXlnNGtYU1ZCUHRZWTdCKzA5d1wvdldzWTlpeUdYaEg4eGhITHpRSUthMWpSVlZvZVhwZ3BvamxCTHFSUXJmQ1hQNThYbUNNanZnVGs0b3RDTUFmYkdsYTEzeEtnTXJpZVU0QnJHWDJoUk9sUklzaFFhUkJiNWk0Z2E0cUUwejU4RmF2RnE4Z2U0eEo3VmZ2SmFMTlVacFBvSFlZUmM2N3liVTdhTk5NWU9YS0xtalk3QUN3NWV2UTlPeE5hMmk0aHU4MSt0YjNJQytFczRMa2l6XC9jV0Jxc01QYU0yYXdTXC92RXBxTFNVOVd6SlwvRm9KM21jUHlcL2diRlMyU3REeEl0K1RxSjRuck8xaXlOaWY4NXVzMVBibXpVSEZJWkVZQnFUd2k5TUVJcDUwUEFjTmljTzYyaWFYaFkzZUtkR294d29LUzBUTFF1Y0xxbWtMNFF4ZlZkN2k4YktEUnRGekU3OEdaN2J3TUR4T2FpVHRKaGlqRWNcL2c5dlwvOUVEVmdLNUhBSk1wSGV5UXVoOFJydlczc09HU1EyeXI4SFZZQmJJQWx1cGFIaXhmK1VJNmdoNmwrOElMZXFxSHZtazQreW84RFBlOXFnVDI2bm1tZWl0K01OcU1DSGJEQXdnWW9Hc0ptWFVJbXVXdEpyT2FKUHprTzJ1MkxFSEViZGV4cFpuOWRXK3dUdVR4bmJHZ1VRRGJycFRBME5lWUtaT0JCYjViSWVvcVJ3RXllb2tQZ1VkUWFqVWo0UHQzMUQwWVMwZ05rTTU0Nk1QQUdxTm9rZFNISVYrTG5DWlArNkt5RkZxajdZN1luakRKQVdUaVpnOUhCUExYMEVKRXRRT3QyZTI4cU9TdlBrbWxVZkFLSWZFbXNha3lCZUhFRVpyTmxQOERjbVwvMytCc0JpNnZcL1Nvek9yR2pUWGF2XC9VMzN4OEY5T3VsdUNGRFNWbHZZMnBzNHhMeEdIR21majBOOUJNbEhlK1J4S3dFTnlJamdTeFQyTWlTTlhCUWxnSDF6VmNhWHIzVGpoREY5clB2XC9uZHZjSm1iTHZ1bjFIUUFRait6dUJlUk1WQ1FhdXFoN002YlQ5MVwvQVMzYzJJQ0RFR1czdEtqMFBTQT09IiwibWFjIjoiOGVlZjBmNTVmMzEwNjhkZjVmYTlkYzAwYzllMjJmNjUyZmRmN2U1ODFiZTIzNzRjMDVjMTNiOTNhOWRhMmVkYSJ9")
requestHeader.add(name: "token", value: "eyJpdiI6Iko1OGFleVJ5SVBEaDh6U0J4R0dqa1E9PSIsInZhbHVlIjoic3ZQWVBiNEVvTmpxaEFcL2pKc3NkKzlhaXZ0Qk1nallPcUdnbkVISUJZT0tNTHAyTmtzY3lUMVh3VURnUnpSTWRsZXNHVVNhR2RPeU05NnprdTlhUXMyWENyTWVFU3B4SGlxenBcL1ZnWEk2Vnl3bjRuT1NhcDVCV2k2bXl4Y3F4RXRsaXBTdWVKUUQwTjFadUx2UURvK2RZS3VsWEJpb2xETUc4RzZWdnh0ZzJVVGhzVGdoYjdOT2ZDMFpld2plU2pCVDl3elgxVEpjYmJQQnZlYnRoMTJheUlicVVURWx4XC81elVCS21nSzF4SkhhN2VNTE12ZUVMNThpWElPY3d0MVNlQkRUSW9Rd3V0ZTYwSytPaDhYSElHdDJvWSs4cWpkRkRMU3pKaUdvNW1DTmJiK3Zvdmk4REk2VWpzTCs3cERSUXFkc3hOREJaNVdGU1lEOXN2b1JQSWNZYWVCQjZBaHJCUEV0UmhLMWFrWFN3ZGx4ZGR3Q3FHVm83QjgxMEFHWDQ3aVdnMVVNYnpjS2JuTkpHdnFYK0FoNksyWkFSZGJNcXFTenhXdWpubTZsQXhmZ0g0ekc5REVkQW1xbEVTYktiTmRaMTN6blF4NkFZQzNxMlp0bDlDcGpsdGFpWFNtRmVVa1FYSEtjZUJKbUhWZ2VZanh6VEpWRHpWK0RPZlJKN0UxOHJHcmpFZ1d3XC94WlplOWZHSlNBVnRJKzNFTzNtMk9uXC8xb1hzS3pjalJmYktCa1hqdFJjSVwvMWNWUnlqYU14R01Lbko5TjZHNGlxZnUyOEpnamw5ZEFQK3M1MVZJYjI5RWhON3Q5YlVyMWZYbUNtMmpjTDFVemtjUVVRQmwzSEp6TFZZRytja3A5Q2hSS2xycDF2RXZUbUdzTWVHNHNjVG81UUZqeUV2ck9QdHczS3hHYkpPR09vQ0ZkK0kwVEZoaVFUajF4XC9vSFBJUllNbFlqWUFYYzRRMGJabGxBV2RmTUtOSmNRcVZpM0lNVVpNWWdhNEJLWXlkVG82c3pcLzFsSkNyQmhkNFZ6WTcwbEloSkFndCtEUDNwVkF1MG9GUGQ1allBT3Q4Q0hsSFkrK2lveWxaVHE4UFNDR0JvTERoc1BYdnp0UFVSYWlxQjFCbVdkdGl5YWFnZVRpK1YzUzVBa1I4cU91V0pkSnBcL0o0K1pqbzJQZVRuR0wzXC9cLzVna0JiWVhlRXFwRXljN3N0NURhdkZFV001TU9QdFBXQjM0bXplSnl3T1RjMFBqbCtkSytIZ0tyME5vdEpSMnd0Z3pvRHpSWUkydEFCb2plYlpPQW9WaVRMcmxyYkxPZnd6RllkR2VoQTBEZVZjNjRTcWVlS1AxT0wybXVuQWJZQzhOVW44K3RJT000endabjEyR3d5OHhhbzNyT0hpdEd2VWRiallmc1ZuQkhaWmF2ODhVclpNb2lGUDB6Z3dqMVdVczh3RGQ4WnZ1a1o2Qzh5XC8yS1pmRjJ2TkhWXC9QTkFuY0NGR0FIc1BJcThadk1ZTFFxeXJKZ05XT2t4SzFQa1RnaTg2WXBhMnNzM0k4bk90aEQ1aFwvXC9lY1dpVFFzYUVoNGVhdWhsNEQwczJGTWtncTA0aDQ5SDlDTGtOREVYNVJQNU9HaURnZ01wR2JWaWkyWVVlK2FcL3JNZVB4d2dcLzR6MjNPYTJrcW83T2cyVVFONWVnMTRXczB3azVteHVzMGVYUEhVVEt4SmpROCtLZGwrRW5HbVpxV3F4cHZOZ2x6M1ZoNFFHRmxnZGs4alEwaU9cL09WSDZpSkRsYitzdzNWT1IrZk5VN0R1QkZDUGw4WGhVZnhjQ1lmNmJhU0VCYVp2VUNiUVlcL1VvbTY0bzAzdEFzbVJLQUhUWW1UT2RcL1Bqbmh5XC9keDRGRThzNlY2aFFVbEpqMnc9PSIsIm1hYyI6IjFjMDE1NmZiNDc4ZWE2ZWUwZDI0N2I3MTc3N2QxMmZjNzE4OTExNGYwNDIwMzgzNTA1YWQyOGMyNzIwYjllMDUifQ==")
headers = requestHeader
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment