younger_times
2023-04-26 945655d9f53293d7da9d2d11363b3230f6e53bbe
API 接入
11个文件已添加
17个文件已修改
1302 ■■■■ 已修改文件
BrokerDriver.xcodeproj/project.pbxproj 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Assets.xcassets/Icon/empty.imageset/Contents.json 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Assets.xcassets/Icon/empty.imageset/empty.png 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Assets.xcassets/Icon/userdefault.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Assets.xcassets/Icon/userdefault.imageset/userdefault@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Assets.xcassets/Icon/userdefault.imageset/userdefault@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Base/BaseViewController.swift 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Def.swift 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Home/VC/HomePageVC.swift 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Login/VC/LoginVC.swift 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Models/OrderModel.swift 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Models/UserModel.swift 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Network/NetworkRequest.swift 336 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Network/Services.swift 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Profile/TCell/WalletTCell.swift 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Profile/TCell/WalletTCell.xib 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Profile/VC/CompanyVC.swift 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Profile/VC/CompanyVC.xib 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Profile/VC/PersonalCenterVC.swift 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Profile/VC/PersonalCenterVC.xib 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Profile/VC/PersonalDataVC.swift 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Profile/VC/PersonalDataVC.xib 338 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Profile/VC/PersonalWalletVC.swift 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Profile/VC/PersonalWalletVC.xib 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/SceneDelegate.swift 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/ViewModels/OrderViewModel.swift 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/ViewModels/UserViewModel.swift 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Podfile 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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|