BrokerDriver.xcodeproj/project.pbxproj
@@ -60,6 +60,12 @@ 139F0F8529F68B90007D9EA4 /* BaseTCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 139F0F8429F68B90007D9EA4 /* BaseTCell.swift */; }; 13F536B229F7D0DF00A7937A /* NoteContentTCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13F536B029F7D0DF00A7937A /* NoteContentTCell.swift */; }; 13F536B329F7D0DF00A7937A /* NoteContentTCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13F536B129F7D0DF00A7937A /* NoteContentTCell.xib */; }; 13F536B729F7D6CF00A7937A /* Services.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13F536B529F7D6CF00A7937A /* Services.swift */; }; 13F536B829F7D6CF00A7937A /* NetworkRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13F536B629F7D6CF00A7937A /* NetworkRequest.swift */; }; 13F536BB29F8CC0500A7937A /* UserModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13F536BA29F8CC0500A7937A /* UserModel.swift */; }; 13F536BE29F8CECE00A7937A /* UserViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13F536BD29F8CECE00A7937A /* UserViewModel.swift */; }; 13F536C029F927E900A7937A /* OrderViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13F536BF29F927E900A7937A /* OrderViewModel.swift */; }; 13F536C229F927FC00A7937A /* OrderModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13F536C129F927FC00A7937A /* OrderModel.swift */; }; 656E15B4DAA88146F5E490CA /* Pods_BrokerDriver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E99D0F4A48F512570D96537 /* Pods_BrokerDriver.framework */; }; /* End PBXBuildFile section */ @@ -119,6 +125,12 @@ 139F0F8429F68B90007D9EA4 /* BaseTCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseTCell.swift; sourceTree = "<group>"; }; 13F536B029F7D0DF00A7937A /* NoteContentTCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoteContentTCell.swift; sourceTree = "<group>"; }; 13F536B129F7D0DF00A7937A /* NoteContentTCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NoteContentTCell.xib; sourceTree = "<group>"; }; 13F536B529F7D6CF00A7937A /* Services.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Services.swift; sourceTree = "<group>"; }; 13F536B629F7D6CF00A7937A /* NetworkRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetworkRequest.swift; sourceTree = "<group>"; }; 13F536BA29F8CC0500A7937A /* UserModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserModel.swift; sourceTree = "<group>"; }; 13F536BD29F8CECE00A7937A /* UserViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserViewModel.swift; sourceTree = "<group>"; }; 13F536BF29F927E900A7937A /* OrderViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderViewModel.swift; sourceTree = "<group>"; }; 13F536C129F927FC00A7937A /* OrderModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderModel.swift; sourceTree = "<group>"; }; 33DCC1D819EF0A04257FB4A8 /* Pods-BrokerDriver.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BrokerDriver.release.xcconfig"; path = "Target Support Files/Pods-BrokerDriver/Pods-BrokerDriver.release.xcconfig"; sourceTree = "<group>"; }; 36C7396011423ADA377B2856 /* Pods-BrokerDriver.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BrokerDriver.debug.xcconfig"; path = "Target Support Files/Pods-BrokerDriver/Pods-BrokerDriver.debug.xcconfig"; sourceTree = "<group>"; }; 8E99D0F4A48F512570D96537 /* Pods_BrokerDriver.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_BrokerDriver.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -185,6 +197,9 @@ 138DA4B629F62F9500A71FE7 /* BrokerDriver */ = { isa = PBXGroup; children = ( 13F536B929F8CBF400A7937A /* Models */, 13F536BC29F8CEC100A7937A /* ViewModels */, 13F536B429F7D6CF00A7937A /* Network */, 1309ADF629F77F5C00F5FA26 /* Resouses */, 13941CE029F7638600AB569F /* Profile */, 138DA4B729F62F9500A71FE7 /* AppDelegate.swift */, @@ -309,6 +324,33 @@ 13F536B129F7D0DF00A7937A /* NoteContentTCell.xib */, ); path = TCell; sourceTree = "<group>"; }; 13F536B429F7D6CF00A7937A /* Network */ = { isa = PBXGroup; children = ( 13F536B529F7D6CF00A7937A /* Services.swift */, 13F536B629F7D6CF00A7937A /* NetworkRequest.swift */, ); path = Network; sourceTree = "<group>"; }; 13F536B929F8CBF400A7937A /* Models */ = { isa = PBXGroup; children = ( 13F536BA29F8CC0500A7937A /* UserModel.swift */, 13F536C129F927FC00A7937A /* OrderModel.swift */, ); path = Models; sourceTree = "<group>"; }; 13F536BC29F8CEC100A7937A /* ViewModels */ = { isa = PBXGroup; children = ( 13F536BD29F8CECE00A7937A /* UserViewModel.swift */, 13F536BF29F927E900A7937A /* OrderViewModel.swift */, ); path = ViewModels; sourceTree = "<group>"; }; 489CFEB74E41CC03BD0818E7 /* Pods */ = { @@ -469,14 +511,19 @@ 138DA4D829F6305600A71FE7 /* Colors+Exception.swift in Sources */, 13941CDF29F6901D00AB569F /* BaseTableView.swift in Sources */, 1309AE0A29F78D9200F5FA26 /* HomeDetailMapVC.swift in Sources */, 13F536C029F927E900A7937A /* OrderViewModel.swift in Sources */, 139F0F7829F6589F007D9EA4 /* HomeVC.swift in Sources */, 130F4EEC29F7B6C100937687 /* CargoInfoTCell.swift in Sources */, 1309AE1129F7919900F5FA26 /* HomeDetailAttachVC.swift in Sources */, 139F0F7A29F66EB7007D9EA4 /* HomeHeaderVC.swift in Sources */, 138DA4D929F6305600A71FE7 /* LoginVC.swift in Sources */, 13F536B829F7D6CF00A7937A /* NetworkRequest.swift in Sources */, 13F536C229F927FC00A7937A /* OrderModel.swift in Sources */, 13F536B229F7D0DF00A7937A /* NoteContentTCell.swift in Sources */, 139F0F8529F68B90007D9EA4 /* BaseTCell.swift in Sources */, 13941CEE29F77A7F00AB569F /* PersonalWalletVC.swift in Sources */, 13F536BB29F8CC0500A7937A /* UserModel.swift in Sources */, 13F536B729F7D6CF00A7937A /* Services.swift in Sources */, 138DA4D629F6305600A71FE7 /* BaseViewController.swift in Sources */, 1309AE0329F788D900F5FA26 /* PersonalDataVC.swift in Sources */, 1309ADFB29F7840500F5FA26 /* Currency+Exception.swift in Sources */, @@ -485,6 +532,7 @@ 13045E7C29F7C4D9004E10BE /* AttachTCell.swift in Sources */, 139F0F8229F689F9007D9EA4 /* HomeItemTCell.swift in Sources */, 1309AE1529F791BA00F5FA26 /* HomeDetailNoteVC.swift in Sources */, 13F536BE29F8CECE00A7937A /* UserViewModel.swift in Sources */, 13941CEB29F7728300AB569F /* TapButton.swift in Sources */, 130F4EF029F7B81A00937687 /* CargoTableHeaderView.swift in Sources */, 138DA4BA29F62F9500A71FE7 /* SceneDelegate.swift in Sources */, BrokerDriver/Assets.xcassets/Icon/empty.imageset/Contents.json
New file @@ -0,0 +1,21 @@ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "filename" : "empty.png", "idiom" : "universal", "scale" : "2x" }, { "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } BrokerDriver/Assets.xcassets/Icon/empty.imageset/empty.png
BrokerDriver/Assets.xcassets/Icon/userdefault.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "filename" : "userdefault@2x.png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "userdefault@3x.png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } BrokerDriver/Assets.xcassets/Icon/userdefault.imageset/userdefault@2x.png
BrokerDriver/Assets.xcassets/Icon/userdefault.imageset/userdefault@3x.png
BrokerDriver/Base/BaseViewController.swift
@@ -76,12 +76,6 @@ } func addChildViewController(_ child: UIViewController, toContainerView containerView: UIView) { addChild(child) containerView.addSubview(child.view) child.didMove(toParent: self) } deinit { LogInfo(String(format: "%@ 已释放", NSStringFromClass(self.classForCoder).components(separatedBy: ".").last!)) } BrokerDriver/Def.swift
@@ -7,8 +7,12 @@ import Foundation import UIKit import MBProgressHUD @_exported import JQTools @_exported import QMUIKit @_exported import HandyJSON @_exported import RxSwift // MARK: -- Shorthand let app = UIApplication.shared.delegate as! AppDelegate @@ -58,3 +62,37 @@ let Def_NavFontColor:UIColor = .color(light: .color("#333333"), dark: .color("#333333")) let Def_backgroundColor:UIColor = .color(light: .white, dark: .white) let Def_ThemeColor:UIColor = .color(light: .color("#FED703"), dark: .color("#FED703")) //提示框 func alert(msg: String) { let hud = MBProgressHUD.showAdded(to: screnDelegate!.window!, animated: true) hud.mode = .text hud.label.text = msg // hud.backgroundColor = UIColor.RGBA(r: 228, g: 228, b: 228, a: 1) hud.label.textColor = UIColor(hexString: "#343434") hud.label.numberOfLines = 0 hud.label.font = UIFont.boldSystemFont(ofSize: 14) hud.hide(animated: true, afterDelay: 1.7) } //extension UICollectionView{ // public func jq_setEmptyView( _ noticeStr:String? = nil,image:UIImage? = UIImage(named: "icon_empty"),foregroundColor:UIColor = UIColor.gray,clouse:((EmptyDataSetView)->Void)? = nil) { // self.emptyDataSetView { (emptyDataSetView) in // emptyDataSetView.titleLabelString(NSAttributedString.init(string: (noticeStr != nil) ? noticeStr! : Localized("暂无数据"), attributes: [.font:UIFont.systemFont(ofSize: 16,weight: .medium), .foregroundColor:foregroundColor as Any])) // .image(image) // .dataSetBackgroundColor(UIColor.white) // .verticalOffset(-50) // .verticalSpace(0) // .shouldDisplay(true) // .shouldFadeIn(true) // .isTouchAllowed(true) // .isScrollAllowed(true) // .didTapContentView { // // } // clouse?(emptyDataSetView) // } // } //} BrokerDriver/Home/VC/HomePageVC.swift
@@ -11,12 +11,15 @@ class HomePageVC: BaseViewController,Refreshable { enum PageStyle { case progress,complete enum PageStyle:Int{ case progress = 1 case complete = 2 } private var style:PageStyle! public let refreshStatus = BehaviorSubject(value: RefreshStatus.others) private var page = 1 private var datas = [OrderModel]() lazy private var tableView:BaseTableView = { let tableView = BaseTableView(frame: .zero, style: .plain) @@ -41,12 +44,36 @@ super.viewDidLoad() self.refreshStatusBind(to: tableView, header: { [weak self] () in self?.refreshStatus.onNext(.endHeaderRefresh) self?.getData() }, footer: { [weak self] () in self?.getData(false) }).disposed(by: disposeBag) tableView.jq_setEmptyView("Not data", image: UIImage(named: "empty"), foregroundColor: .gray, clouse: nil) refreshStatus.onNext(.beingHeaderRefresh) } // refreshStatus.onNext(.beingHeaderRefresh) private func getData(_ isHeader:Bool = true){ Services.getList(type: style, pageNumber: page).subscribe(onNext: { data in if let models = data.data{ if isHeader{ self.datas.removeAll() self.page = 1 self.refreshStatus.onNext(.endHeaderRefresh) self.refreshStatus.onNext(.resetNoMoreData) }else{ if models.count == 0{ self.refreshStatus.onNext(.noMoreData) }else{ self.refreshStatus.onNext(.endFooterRefresh) } } self.datas.append(contentsOf: models) self.tableView.reloadData() } }) { error in }.disposed(by: disposeBag) } override func setUI() { @@ -75,6 +102,6 @@ } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 10 return datas.count } } BrokerDriver/Login/VC/LoginVC.swift
@@ -16,6 +16,13 @@ override func viewDidLoad() { super.viewDidLoad() #if DEBUG tf_email.text = "eeee" tf_pwd.text = "111111" #endif } @IBAction func forgotAction(_ sender: UIButton) { @@ -25,16 +32,38 @@ @IBAction func loginAction(_ sender: UIButton) { let snapView = screnDelegate?.window?.snapshotView(afterScreenUpdates: true) let nav = BaseNavigationController(rootViewController: HomeVC()) screnDelegate?.window?.rootViewController = nav screnDelegate?.window?.rootViewController?.view.addSubview(snapView!) UIView.animate(withDuration: 1.5) { snapView?.alpha = 0 snapView?.transform3D = CATransform3DMakeScale(1.5, 1.5, 1.5) } completion: { _ in snapView?.removeFromSuperview() #if !DEBUG guard !tf_email.isEmpty else { alert(msg: "Please input email");return } guard tf_email.text!.jq_isEmail else { alert(msg: "Please enter the correct email");return } guard !tf_pwd.text!.isEmpty else { alert(msg: "Please enter password");return } #endif Services.companyLogin(username: tf_email.text!, password: tf_pwd.text!).subscribe(onNext: { data in if let model = data.data{ UserViewModel.saveUserInfo(model) let snapView = screnDelegate?.window?.snapshotView(afterScreenUpdates: true) let nav = BaseNavigationController(rootViewController: HomeVC()) screnDelegate?.window?.rootViewController = nav screnDelegate?.window?.rootViewController?.view.addSubview(snapView!) UIView.animate(withDuration: 1.5) { snapView?.alpha = 0 snapView?.transform3D = CATransform3DMakeScale(1.5, 1.5, 1.5) } completion: { _ in snapView?.removeFromSuperview() UserViewModel.publishLoginSuccess() } } }) { error in }.disposed(by: disposeBag) } } BrokerDriver/Models/OrderModel.swift
New file @@ -0,0 +1,8 @@ // // OrderModel.swift // BrokerDriver // // Created by 无故事王国 on 2023/4/26. // import Foundation BrokerDriver/Models/UserModel.swift
New file @@ -0,0 +1,99 @@ // // UserInfoModel.swift // BrokerDriver // // Created by 无故事王国 on 2023/4/26. // import Foundation import HandyJSON struct UserInfoModel:HandyJSON { var account: String = "" var headImg:String = "" var address: String = "" var applicationDate: String = "" var bonusEligibilityDate: String = "" var carriersId: String = "" var cdlNumber: String = "" var companyId: String = "" var contactNumber: String = "" var createTime: String = "" var dateOfBrith: String = "" var dotCardExpirationDate: String = "" var driverName: String = "" var driverNumber: String = "" var driverType: String = "" var drivingSchool: String = "" var groupNumber: String = "" var hazmatExpriationDate: String = "" var hireDate: String = "" var id: Int = 0 var idNumber: String = "" var insuranceCo: String = "" var insuranceExpirationDate: String = "" var isCarriers: Int = 0 //2是承运商 var lastAlcoholTestDate: String = "" var lastDrugTestDate: String = "" var lastRoadTestDate: String = "" var licenseEndorsements: String = "" var licenseEndorsementsOne: String = "" var licenseExpirationDate: String = "" var licenseType: String = "" var password: String = "" var rehirable: String = "" var remove: Int = 0 var sinceYear: String = "" var status: String = "" var statusRemark: String = "" var terminationDate: String = "" var token: String = "" var twicCardExpirationDate: String = "" var typeOfExperience: String = "" func save(){ UserDefaults.standard.set(self.toJSONString() ?? "", forKey: "user_info") UserDefaults.standard.synchronize() } } struct UserCompanyModel:HandyJSON { var address:String = "" var companyName:String = "" var contactEmail:String = "" var contactPhone:String = "" var scacCode:String = "" var setUpTheTime: String = "" } struct UserWalletModel:HandyJSON{ var allTotal: Double = 0 var billNumber: String = "" var list = [UserWalletDataModel]() var paid: Double = 0 var unpaid: Double = 0 } struct UserWalletDataModel:HandyJSON{ var dueDate: String = "" var invoicesTime: String = "" var money: Double = 0 var payStatus: Int = 0 // 1是0否 var shipmentId: String = "" } struct UserProfileModel:HandyJSON { var address: String = "" var contactNumber: String = "" var dateOfBrith: String = "" var driverEmployeeNumber: String = "" var driverName: String = "" var driverType: String = "" var id: Int = 0 var notes: String = "" var status: String = "" } BrokerDriver/Network/NetworkRequest.swift
New file @@ -0,0 +1,336 @@ // // NetworkRequest.swift // HandyJSON // // Created by Sweet on 2018/12/25. // Copyright © 2018 Sweet. All rights reserved. // import Foundation import SwifterSwift import Alamofire import MBProgressHUD // 假设这是服务端返回的统一定义的response格式 struct BaseResponse<T :HandyJSON>: HandyJSON { var sysTime: Int = 0 var code: Int = -1 // 服务端返回码 var data: T? = nil // 具体的data的格式和业务相关,故用泛型定义 var msg: String = "" } struct BaseData<T: HandyJSON>: HandyJSON { var records = [T]() } struct SimpleModel: HandyJSON { } struct HtmlModel: HandyJSON { var content = "" var content1 = "" var id = 0 var type = 0 } extension String: HandyJSON{ } extension Array: HandyJSON{ } extension Bool: HandyJSON{ } class ParamsAppender: NSObject { var url: URL var params:Dictionary = [String: Any]() private init(url: String){ self.url = URL(string: url)! } func interface(url: String) -> ParamsAppender { self.url.appendPathComponent(url) return self } func append(key: String,value: String) -> ParamsAppender { if value.isEmpty{return self} params += ["\(key)":"\(value)"] return self } func append(key: String,value: String?) -> ParamsAppender { // if value?.isEmpty ?? true || value == "" { return self } params += ["\(key)":"\(value ?? "")"] return self } func append(key: String, value: Int?) -> ParamsAppender { // if value == nil || value == 0 { return self } params += ["\(key)":"\(value ?? 0)"] return self } func append(key: String, value: Int64) -> ParamsAppender { params += ["\(key)":"\(value)"] return self } func append(key: String, value: Double) -> ParamsAppender { params += ["\(key)":"\(value)"] return self } func append(key: String,data: Data?) -> ParamsAppender { if data != nil{ params += ["\(key)": data!] } return self } func append(key: String,url: URL) -> ParamsAppender { params += ["\(key)":"\(url)"] return self } func append(dic: [String : Any]) -> ParamsAppender { params += dic return self } /// 参数加密 func done() -> Parameters { return self.params } class func build(url: String) -> ParamsAppender { return ParamsAppender(url: url) } } class NetworkRequest { static let sharedSessionManager: Alamofire.Session = { let configuration = URLSessionConfiguration.default configuration.timeoutIntervalForRequest = 15 return Alamofire.Session(configuration: configuration) }() enum NetRequestError: Error { case Other case URLNotFound case DownloadFailed } class func request<T: HandyJSON>(params: ParamsAppender, method: HTTPMethod, encoding: ParameterEncoding? = nil, progress: Bool = true) -> Observable<BaseResponse<T>>{ return Observable<BaseResponse<T>>.create{ ob in var hud: MBProgressHUD? if progress { hud = MBProgressHUD.showAdded(to: app.window!, animated: true) hud?.bezelView.style = .solidColor hud?.contentColor = .white hud?.bezelView.backgroundColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 0.8) hud?.bezelView.color = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 0.8) hud?.removeFromSuperViewOnHide = true } var headers = HTTPHeaders() if let token = UserViewModel.getUserInfo()?.token { headers.add(name: "Authorization", value: "Bearer" + " " + token) LogInfo("USER_token:\(token)") } if encoding is JSONEncoding { headers.add(name: "Content-Type", value: "application/json;charset=UTF-8") } var newEncoding: ParameterEncoding if encoding != nil { newEncoding = encoding! } else { newEncoding = method == .post ? URLEncoding.httpBody : URLEncoding.queryString } sharedSessionManager.request(params.url.absoluteString, method: method, parameters:params.done(), encoding: newEncoding, headers:headers).validate().responseData{response in LogInfo("请求地址:\(params.url)") LogInfo("请求参数:\(params.params)") hud?.hide(animated: true) if response.error != nil { LogError("\(response.error!)") // alert(msg: "请求失败") ob.onError(response.error!) }else if let data = response.data,let jsonString = String(data: data, encoding: String.Encoding.utf8){ LogInfo("返回数据:\(jsonString)") if let next = BaseResponse<T>.deserialize(from: jsonString){ if next.code == 200{ ob.onNext(next) }else { alert(msg: next.msg) ob.onError(NetRequestError.Other) } }else{ // alert(msg: "请求失败") ob.onError(NetRequestError.Other) } }else{ // alert(msg: "请求失败") ob.onError(NetRequestError.Other) } ob.onCompleted() } return Disposables.create{} } } class func requestData(params: ParamsAppender, method: HTTPMethod, encoding: ParameterEncoding? = nil, progress: Bool = true) -> Observable<Data>{ return Observable<Data>.create{ ob in var hud: MBProgressHUD? if progress { hud = MBProgressHUD.showAdded(to: app.window!, animated: true) hud?.bezelView.style = .solidColor hud?.contentColor = .white hud?.bezelView.backgroundColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 0.8) hud?.bezelView.color = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 0.8) hud?.removeFromSuperViewOnHide = true } var headers = HTTPHeaders() if let token = UserViewModel.getUserInfo()?.token { headers.add(name: "Authorization", value: "Bearer" + " " + token) LogInfo("USER_token:\(token)") } if encoding is JSONEncoding { headers.add(name: "Content-Type", value: "application/json;charset=UTF-8") } var newEncoding: ParameterEncoding if encoding != nil { newEncoding = encoding! } else { newEncoding = method == .post ? URLEncoding.httpBody : URLEncoding.queryString } sharedSessionManager.request(params.url.absoluteString, method: method, parameters: params.done(), encoding: newEncoding, headers: headers).validate().responseData{response in LogInfo("请求地址:\(params.url)") LogInfo("请求参数:\(params.params)") hud?.hide(animated: true) if response.error != nil { LogError("\(response.error!)") ob.onError(response.error!) }else if let data = response.data{ LogInfo("返回数据:\(data)") ob.onNext(data) } ob.onCompleted() } return Disposables.create{} } } /// 带code请求的 /// - Parameters: /// - params: <#params description#> /// - method: <#method description#> /// - progress: <#progress description#> /// - Returns: <#description#> class func requestCode<T: HandyJSON>(params: ParamsAppender,method: HTTPMethod,progress: Bool = true) -> Observable<BaseResponse<T>>{ return Observable<BaseResponse<T>>.create{ ob in var hud: MBProgressHUD? if progress{ hud = MBProgressHUD.showAdded(to: screnDelegate!.window!, animated: true) hud?.bezelView.style = .solidColor hud?.contentColor = .white hud?.bezelView.backgroundColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 0.8) hud?.bezelView.color = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 0.8) hud?.removeFromSuperViewOnHide = true } sharedSessionManager.request(params.url.absoluteString, method: method, parameters: params.done(),encoding: URLEncoding.default).validate().responseData{response in LogInfo("请求地址:\(params.url)") LogInfo("请求参数:\(params.params)") if response.error != nil { hud?.hide(animated: true) // alert(msg: "请求失败") LogInfo("\(response.error!)") ob.onError(response.error!) }else if let data = response.data,let jsonString = String(data: data, encoding: String.Encoding.utf8){ hud?.hide(animated: true) LogInfo("返回数据:\(jsonString)") if let next = BaseResponse<T>.deserialize(from: jsonString){ ob.onNext(next) }else{ hud?.hide(animated: true) // alert(msg: "请求失败") LogInfo("error") } }else{ hud?.hide(animated: true) // alert(msg: "请求失败") LogInfo("Netrequest-Tag:No data") } ob.onCompleted() } return Disposables.create{} } } /// 上传 /// - Parameter params: <#params description#> class func upload<T: HandyJSON>(params: ParamsAppender) -> Observable<BaseResponse<T>> { return Observable<BaseResponse<T>>.create{ob in let hud = MBProgressHUD.showAdded(to: app.window!, animated: true) hud.bezelView.style = .solidColor hud.contentColor = .white hud.bezelView.backgroundColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 0.8) hud.bezelView.color = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 0.8) hud.removeFromSuperViewOnHide = true AF.upload(multipartFormData: { data in let p = params LogInfo("Netrequest-Upload-Starting.") for key in p.params{ if let d = key.value as? Data { LogInfo("Netrequest-Upload-Appending-Data: Length = \(d.count) bytes") data.append(d, withName: key.key, fileName: "\(Date().timeIntervalSince1970).png", mimeType: "image/png") } else if let url = key.value as? URL { LogInfo("Netrequest-Upload-Appending-Data: Url = \(url)") data.append(url, withName: key.key) } } }, to: params.url, method: .post, headers: nil) .uploadProgress(queue: .main, closure: { progress in print("Upload Progress上传进度: \(progress.fractionCompleted)") // progressClosure(progress.fractionCompleted) }).responseJSON(completionHandler: { data in print("upload finished: \(data)") }).response { (response) in hud.hide(animated: true) switch response.result { case .success(let dataObj): // alert(msg: "上传成功") let jsonString = String(data: dataObj ?? Data(), encoding: String.Encoding.utf8) if let next = BaseResponse<T>.deserialize(from: jsonString){ ob.onNext(next) } case .failure(let err): alert(msg: "上传失败") print("upload err: \(err)") } } return Disposables.create{ } } } } extension Dictionary { mutating func append(dict: Dictionary) { dict.forEach { (key, value) in self.updateValue(value, forKey: key) } } } BrokerDriver/Network/Services.swift
New file @@ -0,0 +1,71 @@ // // Services.swift // YixiuShop // // Created by Sweet on 2019/9/30. // Copyright © 2019 jackLove. All rights reserved. // import UIKit //import RxRelay //import RxCocoa //import RxDataSources import RxSwift //外网测试环境 let All_Url = "http://192.168.110.22:8040" //内网测试环境 //let All_Url = "" class Services: NSObject { static let pageSize: Int = 20 class func companyLogin(username:String,password:String)->Observable<BaseResponse<UserInfoModel>>{ let params = ParamsAppender.build(url: All_Url) .interface(url: "/gunsApi/companyLogin") .append(key: "username", value: username) .append(key: "password", value: password) return NetworkRequest.requestCode(params: params, method: .post, progress: true) } class func getCompanyInfo()->Observable<BaseResponse<UserCompanyModel>>{ let params = ParamsAppender.build(url: All_Url) .interface(url: "/api/me/getMeCompanyInfo") .append(key: "id", value: UserViewModel.getUserInfo()!.id) return NetworkRequest.request(params: params, method: .get, progress: false) } class func getMeWallet()->Observable<BaseResponse<UserWalletModel>>{ let params = ParamsAppender.build(url: All_Url) .interface(url: "/api/me/getMeWallet") .append(key: "id", value: UserViewModel.getUserInfo()!.id) return NetworkRequest.request(params: params, method: .get, progress: false) } class func getMeInfo()->Observable<BaseResponse<UserProfileModel>>{ let params = ParamsAppender.build(url: All_Url) .interface(url: "/api/me/getMeInfo") .append(key: "id", value: UserViewModel.getUserInfo()!.id) return NetworkRequest.request(params: params, method: .get, progress: false) } /// - Parameters: /// - type: 1: in progress 2:completed class func getList(type:HomePageVC.PageStyle,pageNumber:Int,containerNo:String? = nil,date:String? = nil)->Observable<BaseResponse<[OrderModel]>>{ let params = ParamsAppender.build(url: All_Url) .interface(url: "/api/index/index") .append(key: "containerNo", value: containerNo) .append(key: "date", value: date) .append(key: "pageNumber", value: pageNumber) .append(key: "pageSize", value: 20) .append(key: "type", value:type.rawValue) .append(key: "id", value: UserViewModel.getUserInfo()!.id) return NetworkRequest.request(params: params, method: .get, progress: false) } } BrokerDriver/Profile/TCell/WalletTCell.swift
@@ -10,6 +10,29 @@ class WalletTCell: UITableViewCell { @IBOutlet weak var view_container: UIView! @IBOutlet weak var label_shipmentsID: UILabel! @IBOutlet weak var label_price: UILabel! @IBOutlet weak var btn_state: UIButton! @IBOutlet weak var label_invoicesTime: UILabel! @IBOutlet weak var label_dueDate: UILabel! var model:UserWalletDataModel!{ didSet{ label_dueDate.text = String(format: "Due date:%@", model.dueDate) label_invoicesTime.text = String(format: "Invoices time:%@", model.invoicesTime) label_shipmentsID.text = String(format: "Shipments ID:%@", model.shipmentId) label_price.text = model.money.currency() if model.payStatus == 0{ btn_state.setTitle("Unpaid", for: .normal) btn_state.backgroundColor = UIColor(hexStr: "#C70B0B") }else{ btn_state.setTitle("Paid", for: .normal) btn_state.backgroundColor = UIColor(hexStr: "#A4A4A4") } } } override func awakeFromNib() { super.awakeFromNib() selectionStyle = .none BrokerDriver/Profile/TCell/WalletTCell.xib
@@ -112,6 +112,11 @@ </tableViewCellContentView> <viewLayoutGuide key="safeArea" id="njF-e1-oar"/> <connections> <outlet property="btn_state" destination="BOE-P3-HcU" id="Zcu-CS-1Ug"/> <outlet property="label_dueDate" destination="fcC-CD-liB" id="Lbm-tg-QEJ"/> <outlet property="label_invoicesTime" destination="oAm-kA-bZi" id="fDo-Iv-jsb"/> <outlet property="label_price" destination="WoI-PJ-0sK" id="Zbh-cX-gl5"/> <outlet property="label_shipmentsID" destination="yFl-NK-kEv" id="06U-ze-8ZE"/> <outlet property="view_container" destination="tvd-re-KSz" id="QWb-b2-jdR"/> </connections> <point key="canvasLocation" x="131.29770992366412" y="49.295774647887328"/> BrokerDriver/Profile/VC/CompanyVC.swift
@@ -9,9 +9,30 @@ class CompanyVC: BaseViewController { @IBOutlet weak var label_companyName: UILabel! @IBOutlet weak var label_code: UILabel! @IBOutlet weak var label_address: UILabel! @IBOutlet weak var label_contactPhone: UILabel! @IBOutlet weak var label_contactEmail: UILabel! @IBOutlet weak var label_setupTime: UILabel! override func viewDidLoad() { super.viewDidLoad() title = "Company Infomation" view.backgroundColor = UIColor(hexStr: "#F9FAFF") Services.getCompanyInfo().subscribe(onNext: {[weak self] data in if let model = data.data{ self?.label_companyName.text = model.companyName self?.label_code.text = model.scacCode self?.label_address.text = model.address self?.label_contactPhone.text = model.contactPhone self?.label_contactEmail.text = model.contactEmail self?.label_setupTime.text = model.setUpTheTime } }) { error in }.disposed(by: disposeBag) } } BrokerDriver/Profile/VC/CompanyVC.xib
@@ -11,6 +11,12 @@ <objects> <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="CompanyVC" customModule="BrokerDriver" customModuleProvider="target"> <connections> <outlet property="label_address" destination="rcc-2G-rhV" id="972-Qs-pDO"/> <outlet property="label_code" destination="27o-FI-26t" id="K8E-Ek-VW0"/> <outlet property="label_companyName" destination="DhS-px-eqI" id="Sqj-vd-Xyl"/> <outlet property="label_contactEmail" destination="d2Y-Go-fPi" id="1Vn-PJ-Ytj"/> <outlet property="label_contactPhone" destination="Gls-pb-IPA" id="Yqc-KZ-y7e"/> <outlet property="label_setupTime" destination="e4s-Pq-mjz" id="wY2-W3-Imx"/> <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> </connections> </placeholder> @@ -59,7 +65,7 @@ <color key="textColor" red="0.1803921568627451" green="0.1803921568627451" blue="0.1803921568627451" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="UTL lnc" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="DhS-px-eqI"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="DhS-px-eqI"> <rect key="frame" x="171.66666666666663" y="0.0" width="171.33333333333337" height="14.333333333333334"/> <fontDescription key="fontDescription" type="boldSystem" pointSize="12"/> <color key="textColor" red="0.18039215689999999" green="0.18039215689999999" blue="0.18039215689999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> @@ -76,7 +82,7 @@ <color key="textColor" red="0.18039215689999999" green="0.18039215689999999" blue="0.18039215689999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="3900252" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="27o-FI-26t"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="27o-FI-26t"> <rect key="frame" x="171.66666666666663" y="0.0" width="171.33333333333337" height="14.333333333333334"/> <fontDescription key="fontDescription" type="boldSystem" pointSize="12"/> <color key="textColor" red="0.18039215689999999" green="0.18039215689999999" blue="0.18039215689999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> @@ -93,7 +99,7 @@ <color key="textColor" red="0.18039215689999999" green="0.18039215689999999" blue="0.18039215689999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Ontario,CA 91761" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="rcc-2G-rhV"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="rcc-2G-rhV"> <rect key="frame" x="171.66666666666663" y="0.0" width="171.33333333333337" height="14.333333333333334"/> <fontDescription key="fontDescription" type="boldSystem" pointSize="12"/> <color key="textColor" red="0.18039215689999999" green="0.18039215689999999" blue="0.18039215689999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> @@ -110,7 +116,7 @@ <color key="textColor" red="0.18039215689999999" green="0.18039215689999999" blue="0.18039215689999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="+1(626)592-8659" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Gls-pb-IPA"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Gls-pb-IPA"> <rect key="frame" x="171.66666666666663" y="0.0" width="171.33333333333337" height="14.333333333333334"/> <fontDescription key="fontDescription" type="boldSystem" pointSize="12"/> <color key="textColor" red="0.18039215689999999" green="0.18039215689999999" blue="0.18039215689999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> @@ -127,7 +133,7 @@ <color key="textColor" red="0.18039215689999999" green="0.18039215689999999" blue="0.18039215689999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="info@utlinternationa.com" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="d2Y-Go-fPi"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="d2Y-Go-fPi"> <rect key="frame" x="171.66666666666663" y="0.0" width="171.33333333333337" height="14.333333333333334"/> <fontDescription key="fontDescription" type="boldSystem" pointSize="12"/> <color key="textColor" red="0.18039215689999999" green="0.18039215689999999" blue="0.18039215689999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> @@ -144,7 +150,7 @@ <color key="textColor" red="0.18039215689999999" green="0.18039215689999999" blue="0.18039215689999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="12/5/2022" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="e4s-Pq-mjz"> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="e4s-Pq-mjz"> <rect key="frame" x="171.66666666666663" y="0.0" width="171.33333333333337" height="14.333333333333334"/> <fontDescription key="fontDescription" type="boldSystem" pointSize="12"/> <color key="textColor" red="0.18039215689999999" green="0.18039215689999999" blue="0.18039215689999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> BrokerDriver/Profile/VC/PersonalCenterVC.swift
@@ -9,9 +9,21 @@ class PersonalCenterVC: BaseViewController { @IBOutlet weak var userProileImg: UIImageView! @IBOutlet weak var label_name: UILabel! @IBOutlet weak var label_email: UILabel! @IBOutlet weak var view_wallet: TapButton! override func viewDidLoad() { super.viewDidLoad() title = "Personal Center" if let userModel = UserViewModel.getUserInfo(){ label_name.text = userModel.driverName label_email.text = userModel.account userProileImg.jq_sdimage(url: userModel.headImg, placeholderImage: UIImage(named: "userdefault")) view_wallet.isHidden = userModel.isCarriers != 2 } } @IBAction func profileAction(_ sender: TapButton) { @@ -28,4 +40,14 @@ let vc = CompanyVC() push(vc: vc) } @IBAction func logOutAction(_ sender: UIButton) { showAlert(title: "Would you like to log out?", message: nil, buttonTitles: ["YES","NO"], highlightedButtonIndex: 0) { index in if index == 0{ let nav = BaseNavigationController(rootViewController: LoginVC()) UserViewModel.clearUserInfo() screnDelegate?.window?.rootViewController = nav } } } } BrokerDriver/Profile/VC/PersonalCenterVC.xib
@@ -11,7 +11,11 @@ <objects> <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="PersonalCenterVC" customModule="BrokerDriver" customModuleProvider="target"> <connections> <outlet property="label_email" destination="tUH-9Q-ush" id="bZA-CV-sF5"/> <outlet property="label_name" destination="r6A-Md-BJ9" id="JOd-kb-JqH"/> <outlet property="userProileImg" destination="4d3-jR-hXM" id="WcA-oK-aTc"/> <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> <outlet property="view_wallet" destination="kgh-Wr-bnp" id="GyS-9e-G1O"/> </connections> </placeholder> <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> @@ -167,6 +171,9 @@ <state key="normal" title="Log out"> <color key="titleColor" red="0.92941176470588238" green="0.062745098039215685" blue="0.062745098039215685" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> </state> <connections> <action selector="logOutAction:" destination="-1" eventType="touchUpInside" id="fzt-FV-Kim"/> </connections> </button> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> BrokerDriver/Profile/VC/PersonalDataVC.swift
@@ -9,9 +9,32 @@ class PersonalDataVC: BaseViewController { @IBOutlet weak var label_drivername: UILabel! @IBOutlet weak var label_driverType: UILabel! @IBOutlet weak var label_contactNumber: UILabel! @IBOutlet weak var label_status: UILabel! @IBOutlet weak var label_number: UILabel! @IBOutlet weak var label_dateOfBirth: UILabel! @IBOutlet weak var label_address: UILabel! @IBOutlet weak var label_note: UILabel! override func viewDidLoad() { super.viewDidLoad() title = "Personal data" Services.getMeInfo().subscribe(onNext: {[weak self] data in if let model = data.data{ self?.label_drivername.text = model.driverName self?.label_driverType.text = model.driverType self?.label_contactNumber.text = model.contactNumber self?.label_status.text = model.status self?.label_number.text = model.contactNumber self?.label_dateOfBirth.text = model.dateOfBrith self?.label_address.text = model.address self?.label_note.text = model.notes } }).disposed(by: disposeBag) } BrokerDriver/Profile/VC/PersonalDataVC.xib
@@ -11,6 +11,14 @@ <objects> <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="PersonalDataVC" customModule="BrokerDriver" customModuleProvider="target"> <connections> <outlet property="label_address" destination="2Nh-Ad-bVV" id="hgg-i0-4SP"/> <outlet property="label_contactNumber" destination="yMs-ZR-EuU" id="OJy-aw-A2b"/> <outlet property="label_dateOfBirth" destination="x2T-Hc-JgV" id="vxG-ad-JDf"/> <outlet property="label_driverType" destination="gbv-Zx-Mxl" id="rbQ-Me-hVQ"/> <outlet property="label_drivername" destination="0xZ-TW-Qu9" id="YGl-Gx-VlC"/> <outlet property="label_note" destination="qfw-fT-Xkf" id="RRz-eE-2Lp"/> <outlet property="label_number" destination="vZT-6w-qSb" id="SXJ-A5-wF8"/> <outlet property="label_status" destination="H0O-Xz-ZaL" id="Aoj-Og-Io2"/> <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> </connections> </placeholder> @@ -20,222 +28,342 @@ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="ptt-Vu-e1w"> <rect key="frame" x="0.0" y="59" width="393" height="400"/> <rect key="frame" x="0.0" y="59" width="393" height="584"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xDk-8V-LPQ"> <rect key="frame" x="0.0" y="0.0" width="393" height="50"/> <rect key="frame" x="0.0" y="0.0" width="393" height="73"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="RUB-1Y-Cfz"> <rect key="frame" x="15" y="49" width="363" height="0.6666666666666643"/> <rect key="frame" x="15" y="72" width="363" height="0.6666666666666714"/> <color key="backgroundColor" red="0.84705882352941175" green="0.84705882352941175" blue="0.84705882352941175" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="R8a-PW-Z2f"/> </constraints> </view> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Driver Name" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ijA-k8-Dln"> <rect key="frame" x="15" y="16.666666666666671" width="80.333333333333329" height="17"/> <fontDescription key="fontDescription" type="system" pointSize="14"/> <rect key="frame" x="15" y="16" width="85.666666666666671" height="17"/> <constraints> <constraint firstAttribute="height" constant="17" id="xaw-y2-0i9"/> </constraints> <fontDescription key="fontDescription" type="boldSystem" pointSize="14"/> <nil key="textColor"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0xZ-TW-Qu9"> <rect key="frame" x="15" y="44" width="363" height="20"/> <constraints> <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="20" id="AjI-tT-u1I"/> </constraints> <fontDescription key="fontDescription" type="system" pointSize="14"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.81000000000000005" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="ijA-k8-Dln" firstAttribute="centerY" secondItem="xDk-8V-LPQ" secondAttribute="centerY" id="0k4-J5-rpt"/> <constraint firstAttribute="trailing" secondItem="RUB-1Y-Cfz" secondAttribute="trailing" constant="15" id="7pv-LD-bl6"/> <constraint firstAttribute="height" constant="50" id="800-ts-vWJ"/> <constraint firstItem="0xZ-TW-Qu9" firstAttribute="top" secondItem="ijA-k8-Dln" secondAttribute="bottom" constant="11" id="8bs-oa-DeD"/> <constraint firstItem="ijA-k8-Dln" firstAttribute="top" secondItem="xDk-8V-LPQ" secondAttribute="top" constant="16" id="EHI-qj-tHD"/> <constraint firstItem="0xZ-TW-Qu9" firstAttribute="leading" secondItem="xDk-8V-LPQ" secondAttribute="leading" constant="15" id="LCl-d4-POr"/> <constraint firstAttribute="bottom" secondItem="RUB-1Y-Cfz" secondAttribute="bottom" constant="0.5" id="Uuz-3x-YVu"/> <constraint firstItem="RUB-1Y-Cfz" firstAttribute="leading" secondItem="xDk-8V-LPQ" secondAttribute="leading" constant="15" id="Wna-6x-uGY"/> <constraint firstItem="RUB-1Y-Cfz" firstAttribute="top" secondItem="0xZ-TW-Qu9" secondAttribute="bottom" constant="8" id="chB-aw-OjX"/> <constraint firstAttribute="trailing" secondItem="0xZ-TW-Qu9" secondAttribute="trailing" constant="15" id="g4M-wt-QxS"/> <constraint firstItem="ijA-k8-Dln" firstAttribute="leading" secondItem="xDk-8V-LPQ" secondAttribute="leading" constant="15" id="rkd-O8-ten"/> </constraints> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="wcF-Nl-5Sb"> <rect key="frame" x="0.0" y="50" width="393" height="50"/> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="m7M-i2-gEF"> <rect key="frame" x="0.0" y="73" width="393" height="73"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="gEQ-lL-abB"> <rect key="frame" x="15" y="49" width="363" height="0.6666666666666643"/> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ZJf-d8-tNq"> <rect key="frame" x="15" y="72" width="363" height="0.6666666666666714"/> <color key="backgroundColor" red="0.84705882349999995" green="0.84705882349999995" blue="0.84705882349999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="saT-SX-fqb"/> <constraint firstAttribute="height" constant="0.5" id="GVE-Ql-bpG"/> </constraints> </view> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Driver Type" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qR3-Gu-oZk"> <rect key="frame" x="15" y="16.666666666666671" width="74.333333333333329" height="17"/> <fontDescription key="fontDescription" type="system" pointSize="14"/> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Driver Type" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Sbw-xZ-Q7K"> <rect key="frame" x="15" y="16" width="79.666666666666671" height="17"/> <constraints> <constraint firstAttribute="height" constant="17" id="Jpf-rS-hGk"/> </constraints> <fontDescription key="fontDescription" type="boldSystem" pointSize="14"/> <nil key="textColor"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="gbv-Zx-Mxl"> <rect key="frame" x="15" y="44" width="363" height="20"/> <constraints> <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="20" id="uRm-bw-5hr"/> </constraints> <fontDescription key="fontDescription" type="system" pointSize="14"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.81000000000000005" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="gEQ-lL-abB" firstAttribute="leading" secondItem="wcF-Nl-5Sb" secondAttribute="leading" constant="15" id="60d-n5-kkw"/> <constraint firstItem="qR3-Gu-oZk" firstAttribute="leading" secondItem="wcF-Nl-5Sb" secondAttribute="leading" constant="15" id="8hW-xK-AYm"/> <constraint firstAttribute="trailing" secondItem="gEQ-lL-abB" secondAttribute="trailing" constant="15" id="9ki-wJ-gPG"/> <constraint firstAttribute="height" constant="50" id="Ax4-Zn-qpB"/> <constraint firstAttribute="bottom" secondItem="gEQ-lL-abB" secondAttribute="bottom" constant="0.5" id="UFo-AY-Sgi"/> <constraint firstItem="qR3-Gu-oZk" firstAttribute="centerY" secondItem="wcF-Nl-5Sb" secondAttribute="centerY" id="wGL-kO-qVN"/> <constraint firstAttribute="trailing" secondItem="ZJf-d8-tNq" secondAttribute="trailing" constant="15" id="6ml-FB-xu8"/> <constraint firstItem="Sbw-xZ-Q7K" firstAttribute="top" secondItem="m7M-i2-gEF" secondAttribute="top" constant="16" id="7Ge-y3-0mg"/> <constraint firstItem="gbv-Zx-Mxl" firstAttribute="top" secondItem="Sbw-xZ-Q7K" secondAttribute="bottom" constant="11" id="Hir-ZF-enN"/> <constraint firstItem="ZJf-d8-tNq" firstAttribute="leading" secondItem="m7M-i2-gEF" secondAttribute="leading" constant="15" id="T13-b6-Cfm"/> <constraint firstAttribute="trailing" secondItem="gbv-Zx-Mxl" secondAttribute="trailing" constant="15" id="TSn-ll-PSa"/> <constraint firstAttribute="bottom" secondItem="ZJf-d8-tNq" secondAttribute="bottom" constant="0.5" id="gO5-oQ-yyc"/> <constraint firstItem="gbv-Zx-Mxl" firstAttribute="leading" secondItem="m7M-i2-gEF" secondAttribute="leading" constant="15" id="oGk-fK-3ZT"/> <constraint firstItem="Sbw-xZ-Q7K" firstAttribute="leading" secondItem="m7M-i2-gEF" secondAttribute="leading" constant="15" id="tgm-62-U4D"/> <constraint firstItem="ZJf-d8-tNq" firstAttribute="top" secondItem="gbv-Zx-Mxl" secondAttribute="bottom" constant="8" id="y4X-MA-niL"/> </constraints> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Cer-dH-nqO"> <rect key="frame" x="0.0" y="100" width="393" height="50"/> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="QHj-qB-d7O"> <rect key="frame" x="0.0" y="146" width="393" height="73"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="sR1-r0-W6s"> <rect key="frame" x="15" y="49" width="363" height="0.6666666666666643"/> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6tC-lo-h9a"> <rect key="frame" x="15" y="72" width="363" height="0.6666666666666714"/> <color key="backgroundColor" red="0.84705882349999995" green="0.84705882349999995" blue="0.84705882349999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="wNS-cw-1Ku"/> <constraint firstAttribute="height" constant="0.5" id="G3F-Om-JXV"/> </constraints> </view> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Contact Number" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xUZ-63-3oV"> <rect key="frame" x="15" y="16.666666666666657" width="107" height="17"/> <fontDescription key="fontDescription" type="system" pointSize="14"/> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Contact Number" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="GoM-v5-93d"> <rect key="frame" x="15.000000000000007" y="16" width="113.66666666666669" height="17"/> <constraints> <constraint firstAttribute="height" constant="17" id="n5d-2r-kGe"/> </constraints> <fontDescription key="fontDescription" type="boldSystem" pointSize="14"/> <nil key="textColor"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yMs-ZR-EuU"> <rect key="frame" x="15" y="44" width="363" height="20"/> <constraints> <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="20" id="6Xr-A9-4MT"/> </constraints> <fontDescription key="fontDescription" type="system" pointSize="14"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.81000000000000005" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="sR1-r0-W6s" firstAttribute="leading" secondItem="Cer-dH-nqO" secondAttribute="leading" constant="15" id="0Jp-ZQ-mTd"/> <constraint firstItem="xUZ-63-3oV" firstAttribute="leading" secondItem="Cer-dH-nqO" secondAttribute="leading" constant="15" id="3YP-hf-GFK"/> <constraint firstAttribute="height" constant="50" id="CtH-be-aTC"/> <constraint firstAttribute="trailing" secondItem="sR1-r0-W6s" secondAttribute="trailing" constant="15" id="Nls-M4-uEq"/> <constraint firstItem="xUZ-63-3oV" firstAttribute="centerY" secondItem="Cer-dH-nqO" secondAttribute="centerY" id="Y1M-yG-TVH"/> <constraint firstAttribute="bottom" secondItem="sR1-r0-W6s" secondAttribute="bottom" constant="0.5" id="hVg-ED-fgT"/> <constraint firstItem="yMs-ZR-EuU" firstAttribute="leading" secondItem="QHj-qB-d7O" secondAttribute="leading" constant="15" id="0vZ-g3-5Jd"/> <constraint firstItem="6tC-lo-h9a" firstAttribute="leading" secondItem="QHj-qB-d7O" secondAttribute="leading" constant="15" id="4Z3-T5-06A"/> <constraint firstAttribute="bottom" secondItem="6tC-lo-h9a" secondAttribute="bottom" constant="0.5" id="9BL-c1-6Jt"/> <constraint firstItem="yMs-ZR-EuU" firstAttribute="top" secondItem="GoM-v5-93d" secondAttribute="bottom" constant="11" id="Ppr-Jr-RU1"/> <constraint firstItem="6tC-lo-h9a" firstAttribute="top" secondItem="yMs-ZR-EuU" secondAttribute="bottom" constant="8" id="RAJ-v4-S2h"/> <constraint firstItem="GoM-v5-93d" firstAttribute="top" secondItem="QHj-qB-d7O" secondAttribute="top" constant="16" id="XRN-rG-dW6"/> <constraint firstAttribute="trailing" secondItem="yMs-ZR-EuU" secondAttribute="trailing" constant="15" id="XTq-hw-po0"/> <constraint firstAttribute="trailing" secondItem="6tC-lo-h9a" secondAttribute="trailing" constant="15" id="f2g-T4-0Ah"/> <constraint firstItem="GoM-v5-93d" firstAttribute="leading" secondItem="QHj-qB-d7O" secondAttribute="leading" constant="15" id="gWe-NJ-pV1"/> </constraints> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mLS-cf-mpv"> <rect key="frame" x="0.0" y="150" width="393" height="50"/> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3nM-OC-kfM"> <rect key="frame" x="0.0" y="219" width="393" height="73"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mQw-dn-Pqk"> <rect key="frame" x="15" y="49" width="363" height="0.6666666666666643"/> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="qMb-Hd-Qk8"> <rect key="frame" x="15" y="72" width="363" height="0.6666666666666714"/> <color key="backgroundColor" red="0.84705882349999995" green="0.84705882349999995" blue="0.84705882349999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="TZp-sg-YjH"/> <constraint firstAttribute="height" constant="0.5" id="kFg-ic-s69"/> </constraints> </view> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Status" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="TDW-Rf-JRc"> <rect key="frame" x="14.999999999999996" y="16.666666666666657" width="41.666666666666657" height="17"/> <fontDescription key="fontDescription" type="system" pointSize="14"/> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Status" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ACI-RW-DN3"> <rect key="frame" x="15.000000000000004" y="16" width="45.333333333333343" height="17"/> <constraints> <constraint firstAttribute="height" constant="17" id="RYH-ca-BeS"/> </constraints> <fontDescription key="fontDescription" type="boldSystem" pointSize="14"/> <nil key="textColor"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="H0O-Xz-ZaL"> <rect key="frame" x="15" y="44" width="363" height="20"/> <constraints> <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="20" id="3zg-tb-2un"/> </constraints> <fontDescription key="fontDescription" type="system" pointSize="14"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.81000000000000005" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstAttribute="height" constant="50" id="0rY-YY-FQv"/> <constraint firstAttribute="trailing" secondItem="mQw-dn-Pqk" secondAttribute="trailing" constant="15" id="5a5-V0-eaF"/> <constraint firstItem="TDW-Rf-JRc" firstAttribute="centerY" secondItem="mLS-cf-mpv" secondAttribute="centerY" id="B95-fX-2in"/> <constraint firstItem="TDW-Rf-JRc" firstAttribute="leading" secondItem="mLS-cf-mpv" secondAttribute="leading" constant="15" id="IVa-KN-u7b"/> <constraint firstItem="mQw-dn-Pqk" firstAttribute="leading" secondItem="mLS-cf-mpv" secondAttribute="leading" constant="15" id="Sdj-DT-Bux"/> <constraint firstAttribute="bottom" secondItem="mQw-dn-Pqk" secondAttribute="bottom" constant="0.5" id="bUT-Hd-JZz"/> <constraint firstAttribute="bottom" secondItem="qMb-Hd-Qk8" secondAttribute="bottom" constant="0.5" id="60T-We-8qF"/> <constraint firstItem="qMb-Hd-Qk8" firstAttribute="leading" secondItem="3nM-OC-kfM" secondAttribute="leading" constant="15" id="AiM-nf-8jy"/> <constraint firstItem="H0O-Xz-ZaL" firstAttribute="top" secondItem="ACI-RW-DN3" secondAttribute="bottom" constant="11" id="GmZ-ul-kbi"/> <constraint firstItem="ACI-RW-DN3" firstAttribute="leading" secondItem="3nM-OC-kfM" secondAttribute="leading" constant="15" id="RDf-yf-JWe"/> <constraint firstItem="H0O-Xz-ZaL" firstAttribute="leading" secondItem="3nM-OC-kfM" secondAttribute="leading" constant="15" id="UBZ-CM-qll"/> <constraint firstItem="ACI-RW-DN3" firstAttribute="top" secondItem="3nM-OC-kfM" secondAttribute="top" constant="16" id="WC0-9g-fQM"/> <constraint firstAttribute="trailing" secondItem="qMb-Hd-Qk8" secondAttribute="trailing" constant="15" id="XWJ-lg-eqV"/> <constraint firstAttribute="trailing" secondItem="H0O-Xz-ZaL" secondAttribute="trailing" constant="15" id="gmV-Pi-RQV"/> <constraint firstItem="qMb-Hd-Qk8" firstAttribute="top" secondItem="H0O-Xz-ZaL" secondAttribute="bottom" constant="8" id="mBD-yh-aeX"/> </constraints> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8L0-Qp-KaE"> <rect key="frame" x="0.0" y="200" width="393" height="50"/> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="kod-WM-D7m"> <rect key="frame" x="0.0" y="292" width="393" height="73"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="XUb-1Y-JfG"> <rect key="frame" x="15" y="49" width="363" height="0.6666666666666643"/> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="AXD-vO-d4v"> <rect key="frame" x="15" y="72" width="363" height="0.6666666666666714"/> <color key="backgroundColor" red="0.84705882349999995" green="0.84705882349999995" blue="0.84705882349999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="7KA-HU-h4N"/> <constraint firstAttribute="height" constant="0.5" id="7Gp-MO-AkW"/> </constraints> </view> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Driver/Employee Number" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="e7r-7m-tyH"> <rect key="frame" x="15" y="16.666666666666686" width="160.66666666666666" height="17"/> <fontDescription key="fontDescription" type="system" pointSize="14"/> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Driver/Employee Number" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="zkn-UJ-msx"> <rect key="frame" x="15" y="16" width="172.33333333333334" height="17"/> <constraints> <constraint firstAttribute="height" constant="17" id="EvF-R0-QwB"/> </constraints> <fontDescription key="fontDescription" type="boldSystem" pointSize="14"/> <nil key="textColor"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vZT-6w-qSb"> <rect key="frame" x="15" y="44" width="363" height="20"/> <constraints> <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="20" id="f0R-V8-6F3"/> </constraints> <fontDescription key="fontDescription" type="system" pointSize="14"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.81000000000000005" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="e7r-7m-tyH" firstAttribute="leading" secondItem="8L0-Qp-KaE" secondAttribute="leading" constant="15" id="8Bi-q9-l2y"/> <constraint firstAttribute="bottom" secondItem="XUb-1Y-JfG" secondAttribute="bottom" constant="0.5" id="LHc-jV-OCp"/> <constraint firstItem="XUb-1Y-JfG" firstAttribute="leading" secondItem="8L0-Qp-KaE" secondAttribute="leading" constant="15" id="Oho-Cl-E1X"/> <constraint firstItem="e7r-7m-tyH" firstAttribute="centerY" secondItem="8L0-Qp-KaE" secondAttribute="centerY" id="fEy-q9-Cl3"/> <constraint firstAttribute="trailing" secondItem="XUb-1Y-JfG" secondAttribute="trailing" constant="15" id="tAo-6x-Vhy"/> <constraint firstAttribute="height" constant="50" id="v8k-pT-OaQ"/> <constraint firstItem="vZT-6w-qSb" firstAttribute="leading" secondItem="kod-WM-D7m" secondAttribute="leading" constant="15" id="HCp-9m-dsU"/> <constraint firstItem="vZT-6w-qSb" firstAttribute="top" secondItem="zkn-UJ-msx" secondAttribute="bottom" constant="11" id="Jco-Ga-jdx"/> <constraint firstAttribute="trailing" secondItem="AXD-vO-d4v" secondAttribute="trailing" constant="15" id="LHg-h0-HR9"/> <constraint firstItem="zkn-UJ-msx" firstAttribute="top" secondItem="kod-WM-D7m" secondAttribute="top" constant="16" id="Mkq-sL-pfO"/> <constraint firstItem="AXD-vO-d4v" firstAttribute="leading" secondItem="kod-WM-D7m" secondAttribute="leading" constant="15" id="P7b-yU-lxB"/> <constraint firstItem="AXD-vO-d4v" firstAttribute="top" secondItem="vZT-6w-qSb" secondAttribute="bottom" constant="8" id="SfZ-f8-9e0"/> <constraint firstAttribute="trailing" secondItem="vZT-6w-qSb" secondAttribute="trailing" constant="15" id="kxb-os-Cwv"/> <constraint firstAttribute="bottom" secondItem="AXD-vO-d4v" secondAttribute="bottom" constant="0.5" id="qvc-hA-hIQ"/> <constraint firstItem="zkn-UJ-msx" firstAttribute="leading" secondItem="kod-WM-D7m" secondAttribute="leading" constant="15" id="zxf-WI-tnr"/> </constraints> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="AMP-yD-a3f"> <rect key="frame" x="0.0" y="250" width="393" height="50"/> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="M9d-ax-pBh"> <rect key="frame" x="0.0" y="365" width="393" height="73"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="g3o-tK-9KE"> <rect key="frame" x="15" y="49" width="363" height="0.6666666666666643"/> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="hQb-kd-0mJ"> <rect key="frame" x="15" y="72" width="363" height="0.6666666666666714"/> <color key="backgroundColor" red="0.84705882349999995" green="0.84705882349999995" blue="0.84705882349999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="hzg-uw-Z8X"/> <constraint firstAttribute="height" constant="0.5" id="oDK-UG-9LZ"/> </constraints> </view> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Date of Birth" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="zsK-9o-M2E"> <rect key="frame" x="15" y="16.666666666666686" width="81.666666666666671" height="17"/> <fontDescription key="fontDescription" type="system" pointSize="14"/> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Date of Birth" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tvO-l4-eOf"> <rect key="frame" x="15" y="16" width="87.333333333333329" height="17"/> <constraints> <constraint firstAttribute="height" constant="17" id="R8l-tr-uvZ"/> </constraints> <fontDescription key="fontDescription" type="boldSystem" pointSize="14"/> <nil key="textColor"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="x2T-Hc-JgV"> <rect key="frame" x="15" y="44" width="363" height="20"/> <constraints> <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="20" id="2mr-SB-9HM"/> </constraints> <fontDescription key="fontDescription" type="system" pointSize="14"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.81000000000000005" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstAttribute="height" constant="50" id="0Tu-U3-whj"/> <constraint firstItem="g3o-tK-9KE" firstAttribute="leading" secondItem="AMP-yD-a3f" secondAttribute="leading" constant="15" id="74Z-d5-VnS"/> <constraint firstAttribute="trailing" secondItem="g3o-tK-9KE" secondAttribute="trailing" constant="15" id="D2R-LM-QF3"/> <constraint firstAttribute="bottom" secondItem="g3o-tK-9KE" secondAttribute="bottom" constant="0.5" id="Leb-V7-6l1"/> <constraint firstItem="zsK-9o-M2E" firstAttribute="centerY" secondItem="AMP-yD-a3f" secondAttribute="centerY" id="lIq-bM-840"/> <constraint firstItem="zsK-9o-M2E" firstAttribute="leading" secondItem="AMP-yD-a3f" secondAttribute="leading" constant="15" id="wkA-vQ-Oqq"/> <constraint firstAttribute="bottom" secondItem="hQb-kd-0mJ" secondAttribute="bottom" constant="0.5" id="0Hl-dU-cda"/> <constraint firstItem="x2T-Hc-JgV" firstAttribute="leading" secondItem="M9d-ax-pBh" secondAttribute="leading" constant="15" id="1wz-YD-wAY"/> <constraint firstItem="tvO-l4-eOf" firstAttribute="leading" secondItem="M9d-ax-pBh" secondAttribute="leading" constant="15" id="K4k-oy-Qz1"/> <constraint firstItem="hQb-kd-0mJ" firstAttribute="leading" secondItem="M9d-ax-pBh" secondAttribute="leading" constant="15" id="LNl-tV-psl"/> <constraint firstItem="x2T-Hc-JgV" firstAttribute="top" secondItem="tvO-l4-eOf" secondAttribute="bottom" constant="11" id="Rm6-TI-I4J"/> <constraint firstItem="tvO-l4-eOf" firstAttribute="top" secondItem="M9d-ax-pBh" secondAttribute="top" constant="16" id="WiE-Ke-wv7"/> <constraint firstItem="hQb-kd-0mJ" firstAttribute="top" secondItem="x2T-Hc-JgV" secondAttribute="bottom" constant="8" id="icg-yo-iMz"/> <constraint firstAttribute="trailing" secondItem="x2T-Hc-JgV" secondAttribute="trailing" constant="15" id="ih8-Iq-vcB"/> <constraint firstAttribute="trailing" secondItem="hQb-kd-0mJ" secondAttribute="trailing" constant="15" id="xmY-WZ-eUt"/> </constraints> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="z6i-Tt-u9i"> <rect key="frame" x="0.0" y="300" width="393" height="50"/> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Pgi-jj-gEa"> <rect key="frame" x="0.0" y="438" width="393" height="73"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Y9m-vF-DLT"> <rect key="frame" x="15" y="49" width="363" height="0.6666666666666643"/> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="uu4-e7-sKd"> <rect key="frame" x="15" y="72" width="363" height="0.6666666666666714"/> <color key="backgroundColor" red="0.84705882349999995" green="0.84705882349999995" blue="0.84705882349999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="vgx-oh-7Xw"/> <constraint firstAttribute="height" constant="0.5" id="md8-Qy-8aU"/> </constraints> </view> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Address" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="x1o-1P-uMc"> <rect key="frame" x="15" y="16.666666666666686" width="53" height="17"/> <fontDescription key="fontDescription" type="system" pointSize="14"/> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Address" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="iyx-kz-0XN"> <rect key="frame" x="15.000000000000004" y="16" width="57.333333333333343" height="17"/> <constraints> <constraint firstAttribute="height" constant="17" id="eyi-7h-xI1"/> </constraints> <fontDescription key="fontDescription" type="boldSystem" pointSize="14"/> <nil key="textColor"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2Nh-Ad-bVV"> <rect key="frame" x="15" y="44" width="363" height="20"/> <constraints> <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="20" id="39N-q5-8qz"/> </constraints> <fontDescription key="fontDescription" type="system" pointSize="14"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.81000000000000005" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="x1o-1P-uMc" firstAttribute="leading" secondItem="z6i-Tt-u9i" secondAttribute="leading" constant="15" id="5oG-CJ-1ZK"/> <constraint firstAttribute="trailing" secondItem="Y9m-vF-DLT" secondAttribute="trailing" constant="15" id="ZFz-cY-lgq"/> <constraint firstAttribute="height" constant="50" id="fou-68-DX7"/> <constraint firstAttribute="bottom" secondItem="Y9m-vF-DLT" secondAttribute="bottom" constant="0.5" id="gU8-KU-0Qp"/> <constraint firstItem="Y9m-vF-DLT" firstAttribute="leading" secondItem="z6i-Tt-u9i" secondAttribute="leading" constant="15" id="qwv-nl-D9M"/> <constraint firstItem="x1o-1P-uMc" firstAttribute="centerY" secondItem="z6i-Tt-u9i" secondAttribute="centerY" id="u82-rR-YCI"/> <constraint firstAttribute="bottom" secondItem="uu4-e7-sKd" secondAttribute="bottom" constant="0.5" id="6Ft-Hy-ktW"/> <constraint firstAttribute="trailing" secondItem="2Nh-Ad-bVV" secondAttribute="trailing" constant="15" id="AYh-H8-AFb"/> <constraint firstItem="iyx-kz-0XN" firstAttribute="leading" secondItem="Pgi-jj-gEa" secondAttribute="leading" constant="15" id="DIO-NX-h31"/> <constraint firstItem="2Nh-Ad-bVV" firstAttribute="leading" secondItem="Pgi-jj-gEa" secondAttribute="leading" constant="15" id="Ocn-ux-IGL"/> <constraint firstItem="uu4-e7-sKd" firstAttribute="top" secondItem="2Nh-Ad-bVV" secondAttribute="bottom" constant="8" id="SJM-Wl-Jxw"/> <constraint firstItem="iyx-kz-0XN" firstAttribute="top" secondItem="Pgi-jj-gEa" secondAttribute="top" constant="16" id="qsn-ka-sOG"/> <constraint firstAttribute="trailing" secondItem="uu4-e7-sKd" secondAttribute="trailing" constant="15" id="wYu-FT-X7R"/> <constraint firstItem="uu4-e7-sKd" firstAttribute="leading" secondItem="Pgi-jj-gEa" secondAttribute="leading" constant="15" id="wtI-sf-b7M"/> <constraint firstItem="2Nh-Ad-bVV" firstAttribute="top" secondItem="iyx-kz-0XN" secondAttribute="bottom" constant="11" id="xUX-lz-mQC"/> </constraints> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Qo4-7G-Yhg"> <rect key="frame" x="0.0" y="350" width="393" height="50"/> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Maq-wu-jvb"> <rect key="frame" x="0.0" y="511" width="393" height="73"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="NfD-wO-VW7"> <rect key="frame" x="15" y="49" width="363" height="0.6666666666666643"/> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="TLC-xL-eV9"> <rect key="frame" x="15" y="72" width="363" height="0.6666666666666714"/> <color key="backgroundColor" red="0.84705882349999995" green="0.84705882349999995" blue="0.84705882349999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="z9c-K8-hhp"/> <constraint firstAttribute="height" constant="0.5" id="Dez-xf-3zS"/> </constraints> </view> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Notes" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="wzq-ed-DcU"> <rect key="frame" x="15.000000000000004" y="16.666666666666686" width="38.333333333333343" height="17"/> <fontDescription key="fontDescription" type="system" pointSize="14"/> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Notes" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="YBk-w3-sVs"> <rect key="frame" x="15" y="16" width="41" height="17"/> <constraints> <constraint firstAttribute="height" constant="17" id="6Eo-DS-kHd"/> </constraints> <fontDescription key="fontDescription" type="boldSystem" pointSize="14"/> <nil key="textColor"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qfw-fT-Xkf"> <rect key="frame" x="15" y="44" width="363" height="20"/> <constraints> <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="20" id="SN5-n7-FOp"/> </constraints> <fontDescription key="fontDescription" type="system" pointSize="14"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.81000000000000005" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="NfD-wO-VW7" firstAttribute="leading" secondItem="Qo4-7G-Yhg" secondAttribute="leading" constant="15" id="6Jc-ek-Am5"/> <constraint firstAttribute="trailing" secondItem="NfD-wO-VW7" secondAttribute="trailing" constant="15" id="6oV-fA-jiC"/> <constraint firstItem="wzq-ed-DcU" firstAttribute="leading" secondItem="Qo4-7G-Yhg" secondAttribute="leading" constant="15" id="D5r-dm-2g3"/> <constraint firstItem="wzq-ed-DcU" firstAttribute="centerY" secondItem="Qo4-7G-Yhg" secondAttribute="centerY" id="Dhw-Pw-x4l"/> <constraint firstAttribute="bottom" secondItem="NfD-wO-VW7" secondAttribute="bottom" constant="0.5" id="V65-XK-uxi"/> <constraint firstAttribute="height" constant="50" id="lyk-19-F28"/> <constraint firstItem="TLC-xL-eV9" firstAttribute="top" secondItem="qfw-fT-Xkf" secondAttribute="bottom" constant="8" id="HUa-Cg-bYK"/> <constraint firstItem="qfw-fT-Xkf" firstAttribute="leading" secondItem="Maq-wu-jvb" secondAttribute="leading" constant="15" id="QKl-x4-Bgt"/> <constraint firstItem="qfw-fT-Xkf" firstAttribute="top" secondItem="YBk-w3-sVs" secondAttribute="bottom" constant="11" id="UQf-YH-4ny"/> <constraint firstItem="YBk-w3-sVs" firstAttribute="top" secondItem="Maq-wu-jvb" secondAttribute="top" constant="16" id="XN4-2s-gn8"/> <constraint firstAttribute="trailing" secondItem="TLC-xL-eV9" secondAttribute="trailing" constant="15" id="Yki-IZ-snk"/> <constraint firstItem="TLC-xL-eV9" firstAttribute="leading" secondItem="Maq-wu-jvb" secondAttribute="leading" constant="15" id="amp-Dl-hKG"/> <constraint firstItem="YBk-w3-sVs" firstAttribute="leading" secondItem="Maq-wu-jvb" secondAttribute="leading" constant="15" id="dJt-ln-z19"/> <constraint firstAttribute="bottom" secondItem="TLC-xL-eV9" secondAttribute="bottom" constant="0.5" id="fBv-iP-Vzc"/> <constraint firstAttribute="trailing" secondItem="qfw-fT-Xkf" secondAttribute="trailing" constant="15" id="nmF-9S-0hG"/> </constraints> </view> </subviews> BrokerDriver/Profile/VC/PersonalWalletVC.swift
@@ -10,11 +10,30 @@ class PersonalWalletVC: BaseViewController { @IBOutlet weak var label_account: UILabel! @IBOutlet weak var tableView: UITableView! @IBOutlet weak var label_unpaid: UILabel! @IBOutlet weak var label_paid: UILabel! @IBOutlet weak var tableView: BaseTableView! @IBOutlet weak var label_billNumber: UILabel! private var model:UserWalletModel? override func viewDidLoad() { super.viewDidLoad() title = "Wallet" Services.getMeWallet().subscribe(onNext: { [weak self] data in if let model = data.data{ self?.model = model self?.label_account.text = model.allTotal.currency() self?.label_unpaid.text = String(format: "Total unpaid:%.2lf", model.unpaid) self?.label_paid.text = String(format: "Total paid:%.2lf", model.unpaid) self?.label_billNumber.text = String(format: "The bill number:%@ days", model.billNumber) self?.tableView.reloadData() } }) { error in }.disposed(by: disposeBag) } override func setUI() { @@ -24,9 +43,9 @@ tableView.dataSource = self tableView.separatorStyle = .none tableView.register(UINib(nibName: "WalletTCell", bundle: nil), forCellReuseIdentifier: "_WalletTCell") tableView.jq_setEmptyView("Not data", image: UIImage(named: "empty"), foregroundColor: .gray, clouse: nil) label_account.font = UIFont(name: "Impact", size: 36) label_account.text = 1.currency() } } @@ -37,10 +56,11 @@ extension PersonalWalletVC:UITableViewDataSource{ func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "_WalletTCell") as! WalletTCell cell.model = model!.list[indexPath.row] return cell } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 5 return model?.list.count ?? 0 } } BrokerDriver/Profile/VC/PersonalWalletVC.xib
@@ -13,6 +13,9 @@ <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="PersonalWalletVC" customModule="BrokerDriver" customModuleProvider="target"> <connections> <outlet property="label_account" destination="iCG-Rf-aPw" id="Tp3-HJ-5dc"/> <outlet property="label_billNumber" destination="zIQ-Gr-hFg" id="Sl9-HS-uwc"/> <outlet property="label_paid" destination="TFK-w0-C7W" id="G7g-qx-84O"/> <outlet property="label_unpaid" destination="vqb-fC-SoE" id="n8z-Dj-Aqs"/> <outlet property="tableView" destination="GLv-NR-yay" id="sJZ-fK-K3g"/> <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> </connections> @@ -90,7 +93,7 @@ <color key="textColor" red="0.19215686274509802" green="0.19215686274509802" blue="0.19215686274509802" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="GLv-NR-yay"> <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="GLv-NR-yay" customClass="BaseTableView" customModule="BrokerDriver" customModuleProvider="target"> <rect key="frame" x="0.0" y="299.33333333333331" width="393" height="518.66666666666674"/> <color key="backgroundColor" systemColor="systemBackgroundColor"/> </tableView> BrokerDriver/SceneDelegate.swift
@@ -17,8 +17,15 @@ window = UIWindow(windowScene: windowScene) window?.frame = windowScene.coordinateSpace.bounds let nav = BaseNavigationController(rootViewController: LoginVC()) window?.rootViewController = nav if UserViewModel.getUserInfo() != nil{ let nav = BaseNavigationController(rootViewController: HomeVC()) LogInfo("USER_INFO:\(UserViewModel.getUserInfo()!.toJSONString()!)") window?.rootViewController = nav }else{ let nav = BaseNavigationController(rootViewController: LoginVC()) window?.rootViewController = nav } window?.overrideUserInterfaceStyle = .light window?.makeKeyAndVisible() } BrokerDriver/ViewModels/OrderViewModel.swift
New file @@ -0,0 +1,22 @@ // // OrderViewModel.swift // BrokerDriver // // Created by 无故事王国 on 2023/4/26. // import Foundation struct OrderModel:HandyJSON{ var ccontainerNumber: String = "" var end: String = "" var orderId: String = "" var phone: String = "" var pickUpTime: String = "" var portName: String = "" var start: String = "" var status: Int = 0 var type: Int = 0 } BrokerDriver/ViewModels/UserViewModel.swift
New file @@ -0,0 +1,38 @@ // // UserViewModel.swift // BrokerDriver // // Created by 无故事王国 on 2023/4/26. // import Foundation import HandyJSON final class UserViewModel{ static let UserLoginSuccess_Noti = Notification.Name.init("UserLoginSuccess") static func getUserInfo()->UserInfoModel?{ if let modelStr = UserDefaults.standard.object(forKey: "_UserInfoModel") as? String,let model = UserInfoModel.deserialize(from: modelStr){ return model } return nil } static func saveUserInfo(_ user:UserInfoModel){ if let string = user.toJSONString(){ UserDefaults.standard.set(string, forKey: "_UserInfoModel") UserDefaults.standard.synchronize() } } static func clearUserInfo(){ UserDefaults.standard.set(nil, forKey: "_UserInfoModel") UserDefaults.standard.synchronize() } static func publishLoginSuccess(){ NotificationCenter.default.post(name: UserViewModel.UserLoginSuccess_Noti, object: nil) } } Podfile
@@ -9,6 +9,10 @@ pod 'JQTools',:path=> '/Users/yvkd/MyProject/JQTools' pod 'FFPage' pod 'SPPageMenu' pod 'HandyJSON' pod 'Alamofire' pod 'MBProgressHUD' pod 'SwifterSwift' post_install do |installer| installer.pods_project.targets.each do |target|