younger_times
2023-05-04 5a30f2d587f7873518f309c8e1c68e644684cd90
新增
17个文件已修改
26个文件已添加
1646 ■■■■■ 已修改文件
BrokerDriver.xcodeproj/project.pbxproj 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Assets.xcassets/Btn/btn_add.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Assets.xcassets/Btn/btn_add.imageset/btn_add@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Assets.xcassets/Btn/btn_add.imageset/btn_add@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Assets.xcassets/Btn/btn_camera.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Assets.xcassets/Btn/btn_camera.imageset/btn_camera@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Assets.xcassets/Btn/btn_camera.imageset/btn_camera@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Assets.xcassets/Btn/btn_close.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Assets.xcassets/Btn/btn_close.imageset/btn_close@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Assets.xcassets/Btn/btn_close.imageset/btn_close@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Assets.xcassets/Btn/btn_pic.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Assets.xcassets/Btn/btn_pic.imageset/btn_pic@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Assets.xcassets/Btn/btn_pic.imageset/btn_pic@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Assets.xcassets/Icon/icon_arrow_down.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Assets.xcassets/Icon/icon_arrow_down.imageset/icon_arrow@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Assets.xcassets/Icon/icon_arrow_down.imageset/icon_arrow@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Assets.xcassets/Icon/icon_left.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Assets.xcassets/Icon/icon_left.imageset/icon_right@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Assets.xcassets/Icon/icon_left.imageset/icon_right@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Enums.swift 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Home/TCell/AttachTCell.swift 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Home/TCell/AttachTCell.xib 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Home/TCell/NoteContentTCell.swift 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Home/TCell/NoteContentTCell.xib 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Home/VC/HomeDetailAttachVC.swift 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Home/VC/HomeDetailAttachVC.xib 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Home/VC/HomeDetailContentVC.xib 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Home/VC/HomeDetailNoteVC.swift 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Home/VC/HomeDetailNoteVC.xib 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Home/VC/HomePageVC.swift 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Models/OrderModel.swift 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Network/NetworkRequest.swift 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Network/Services.swift 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Profile/VC/PersonalDataVC.xib 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Tools/AddTextView.swift 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Tools/AddTextView.xib 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Tools/AttachTypeView.swift 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Tools/AttachTypeView.xib 279 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Tools/CommonAlertView.swift 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Tools/CommonAlertView.xib 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Tools/PhotoPickerView.swift 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver/Tools/PhotoPickerView.xib 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Podfile 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BrokerDriver.xcodeproj/project.pbxproj
@@ -30,6 +30,12 @@
        130F4EED29F7B6C100937687 /* CargoInfoTCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 130F4EEB29F7B6C100937687 /* CargoInfoTCell.xib */; };
        130F4EF029F7B81A00937687 /* CargoTableHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130F4EEF29F7B81A00937687 /* CargoTableHeaderView.swift */; };
        130F4EF229F7B86000937687 /* CargoTableHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 130F4EF129F7B86000937687 /* CargoTableHeaderView.xib */; };
        135FD1E32A0393B00048BE7A /* AddTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 135FD1E22A0393B00048BE7A /* AddTextView.swift */; };
        135FD1E52A0393B60048BE7A /* AddTextView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 135FD1E42A0393B60048BE7A /* AddTextView.xib */; };
        135FD1E72A03A1E20048BE7A /* CommonAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 135FD1E62A03A1E20048BE7A /* CommonAlertView.swift */; };
        135FD1E92A03A1E80048BE7A /* CommonAlertView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 135FD1E82A03A1E80048BE7A /* CommonAlertView.xib */; };
        13795C0B2A035EF30026320D /* AttachTypeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13795C0A2A035EF30026320D /* AttachTypeView.swift */; };
        13795C0D2A035F0E0026320D /* AttachTypeView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13795C0C2A035F0E0026320D /* AttachTypeView.xib */; };
        138DA4B829F62F9500A71FE7 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 138DA4B729F62F9500A71FE7 /* AppDelegate.swift */; };
        138DA4BA29F62F9500A71FE7 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 138DA4B929F62F9500A71FE7 /* SceneDelegate.swift */; };
        138DA4BF29F62F9500A71FE7 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 138DA4BD29F62F9500A71FE7 /* Main.storyboard */; };
@@ -58,6 +64,8 @@
        139F0F8229F689F9007D9EA4 /* HomeItemTCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 139F0F8029F689F9007D9EA4 /* HomeItemTCell.swift */; };
        139F0F8329F689F9007D9EA4 /* HomeItemTCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 139F0F8129F689F9007D9EA4 /* HomeItemTCell.xib */; };
        139F0F8529F68B90007D9EA4 /* BaseTCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 139F0F8429F68B90007D9EA4 /* BaseTCell.swift */; };
        13A0133D29FBB41000537A4F /* PhotoPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13A0133C29FBB41000537A4F /* PhotoPickerView.swift */; };
        13A0133F29FBB41700537A4F /* PhotoPickerView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13A0133E29FBB41700537A4F /* PhotoPickerView.xib */; };
        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 */; };
@@ -98,6 +106,12 @@
        130F4EEB29F7B6C100937687 /* CargoInfoTCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CargoInfoTCell.xib; sourceTree = "<group>"; };
        130F4EEF29F7B81A00937687 /* CargoTableHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CargoTableHeaderView.swift; sourceTree = "<group>"; };
        130F4EF129F7B86000937687 /* CargoTableHeaderView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CargoTableHeaderView.xib; sourceTree = "<group>"; };
        135FD1E22A0393B00048BE7A /* AddTextView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddTextView.swift; sourceTree = "<group>"; };
        135FD1E42A0393B60048BE7A /* AddTextView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AddTextView.xib; sourceTree = "<group>"; };
        135FD1E62A03A1E20048BE7A /* CommonAlertView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommonAlertView.swift; sourceTree = "<group>"; };
        135FD1E82A03A1E80048BE7A /* CommonAlertView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CommonAlertView.xib; sourceTree = "<group>"; };
        13795C0A2A035EF30026320D /* AttachTypeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttachTypeView.swift; sourceTree = "<group>"; };
        13795C0C2A035F0E0026320D /* AttachTypeView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AttachTypeView.xib; sourceTree = "<group>"; };
        138DA4B429F62F9500A71FE7 /* BrokerDriver.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BrokerDriver.app; sourceTree = BUILT_PRODUCTS_DIR; };
        138DA4B729F62F9500A71FE7 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
        138DA4B929F62F9500A71FE7 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
@@ -128,6 +142,8 @@
        139F0F8029F689F9007D9EA4 /* HomeItemTCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeItemTCell.swift; sourceTree = "<group>"; };
        139F0F8129F689F9007D9EA4 /* HomeItemTCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = HomeItemTCell.xib; sourceTree = "<group>"; };
        139F0F8429F68B90007D9EA4 /* BaseTCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseTCell.swift; sourceTree = "<group>"; };
        13A0133C29FBB41000537A4F /* PhotoPickerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoPickerView.swift; sourceTree = "<group>"; };
        13A0133E29FBB41700537A4F /* PhotoPickerView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = PhotoPickerView.xib; 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>"; };
@@ -209,6 +225,7 @@
        138DA4B629F62F9500A71FE7 /* BrokerDriver */ = {
            isa = PBXGroup;
            children = (
                13A0133B29FBB3E400537A4F /* Tools */,
                13F536B929F8CBF400A7937A /* Models */,
                13F536BC29F8CEC100A7937A /* ViewModels */,
                13F536B429F7D6CF00A7937A /* Network */,
@@ -341,6 +358,21 @@
            path = TCell;
            sourceTree = "<group>";
        };
        13A0133B29FBB3E400537A4F /* Tools */ = {
            isa = PBXGroup;
            children = (
                13A0133C29FBB41000537A4F /* PhotoPickerView.swift */,
                13A0133E29FBB41700537A4F /* PhotoPickerView.xib */,
                13795C0A2A035EF30026320D /* AttachTypeView.swift */,
                13795C0C2A035F0E0026320D /* AttachTypeView.xib */,
                135FD1E22A0393B00048BE7A /* AddTextView.swift */,
                135FD1E42A0393B60048BE7A /* AddTextView.xib */,
                135FD1E62A03A1E20048BE7A /* CommonAlertView.swift */,
                135FD1E82A03A1E80048BE7A /* CommonAlertView.xib */,
            );
            path = Tools;
            sourceTree = "<group>";
        };
        13F536B429F7D6CF00A7937A /* Network */ = {
            isa = PBXGroup;
            children = (
@@ -450,13 +482,16 @@
                13045E7D29F7C4D9004E10BE /* AttachTCell.xib in Resources */,
                1309AE0029F7848C00F5FA26 /* WalletTCell.xib in Resources */,
                13941CE429F763C900AB569F /* PersonalCenterVC.xib in Resources */,
                13795C0D2A035F0E0026320D /* AttachTypeView.xib in Resources */,
                138DA4C429F62F9700A71FE7 /* LaunchScreen.storyboard in Resources */,
                138DA4C129F62F9700A71FE7 /* Assets.xcassets in Resources */,
                130F4EF229F7B86000937687 /* CargoTableHeaderView.xib in Resources */,
                1309ADF829F77F7700F5FA26 /* Impact.ttf in Resources */,
                135FD1E52A0393B60048BE7A /* AddTextView.xib in Resources */,
                138DA4DA29F6305600A71FE7 /* LoginVC.xib in Resources */,
                13F536B329F7D0DF00A7937A /* NoteContentTCell.xib in Resources */,
                139F0F7429F65497007D9EA4 /* ForgotPwdVC.xib in Resources */,
                13A0133F29FBB41700537A4F /* PhotoPickerView.xib in Resources */,
                13941CE929F76BF400AB569F /* CompanyVC.xib in Resources */,
                138DA4BF29F62F9500A71FE7 /* Main.storyboard in Resources */,
                1309AE1629F791BA00F5FA26 /* HomeDetailNoteVC.xib in Resources */,
@@ -464,6 +499,7 @@
                1309AE0429F788D900F5FA26 /* PersonalDataVC.xib in Resources */,
                13941CEF29F77A7F00AB569F /* PersonalWalletVC.xib in Resources */,
                13F536CC29FA7AB000A7937A /* DatePickerView.xib in Resources */,
                135FD1E92A03A1E80048BE7A /* CommonAlertView.xib in Resources */,
                1309AE0E29F7914600F5FA26 /* HomeDetailContentVC.xib in Resources */,
                130F4EED29F7B6C100937687 /* CargoInfoTCell.xib in Resources */,
                13045E7929F7C312004E10BE /* AttachHeadView.xib in Resources */,
@@ -524,8 +560,10 @@
                13F536C729FA527A00A7937A /* HomeDetailContentTCell.swift in Sources */,
                13941CE829F76BF400AB569F /* CompanyVC.swift in Sources */,
                1309AE0829F78D1400F5FA26 /* HomeDetailMenuVC.swift in Sources */,
                13795C0B2A035EF30026320D /* AttachTypeView.swift in Sources */,
                139F0F7E29F6713A007D9EA4 /* HomePageVC.swift in Sources */,
                13045E7729F7C2FD004E10BE /* AttachHeadView.swift in Sources */,
                135FD1E72A03A1E20048BE7A /* CommonAlertView.swift in Sources */,
                138DA4D829F6305600A71FE7 /* Colors+Exception.swift in Sources */,
                13941CDF29F6901D00AB569F /* BaseTableView.swift in Sources */,
                1309AE0A29F78D9200F5FA26 /* HomeDetailMapVC.swift in Sources */,
@@ -540,6 +578,7 @@
                13F536CA29FA7AA900A7937A /* DatePickerView.swift in Sources */,
                13F536B229F7D0DF00A7937A /* NoteContentTCell.swift in Sources */,
                139F0F8529F68B90007D9EA4 /* BaseTCell.swift in Sources */,
                13A0133D29FBB41000537A4F /* PhotoPickerView.swift in Sources */,
                13941CEE29F77A7F00AB569F /* PersonalWalletVC.swift in Sources */,
                13F536BB29F8CC0500A7937A /* UserModel.swift in Sources */,
                13F536B729F7D6CF00A7937A /* Services.swift in Sources */,
@@ -551,6 +590,7 @@
                1309AE0629F78C6700F5FA26 /* HomeDetailVC.swift in Sources */,
                13045E7C29F7C4D9004E10BE /* AttachTCell.swift in Sources */,
                139F0F8229F689F9007D9EA4 /* HomeItemTCell.swift in Sources */,
                135FD1E32A0393B00048BE7A /* AddTextView.swift in Sources */,
                1309AE1529F791BA00F5FA26 /* HomeDetailNoteVC.swift in Sources */,
                13F536BE29F8CECE00A7937A /* UserViewModel.swift in Sources */,
                13941CEB29F7728300AB569F /* TapButton.swift in Sources */,
@@ -711,6 +751,8 @@
                EXCLUDED_ARCHS = "i386 armv7 armv7s";
                GENERATE_INFOPLIST_FILE = YES;
                INFOPLIST_FILE = BrokerDriver/Info.plist;
                INFOPLIST_KEY_NSCameraUsageDescription = "Upload receipts and vouchers using the camera";
                INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "Upload receipts and vouchers using the photo album";
                INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
                INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
                INFOPLIST_KEY_UIMainStoryboardFile = Main;
@@ -741,6 +783,8 @@
                EXCLUDED_ARCHS = "i386 armv7 armv7s";
                GENERATE_INFOPLIST_FILE = YES;
                INFOPLIST_FILE = BrokerDriver/Info.plist;
                INFOPLIST_KEY_NSCameraUsageDescription = "Upload receipts and vouchers using the camera";
                INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "Upload receipts and vouchers using the photo album";
                INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
                INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
                INFOPLIST_KEY_UIMainStoryboardFile = Main;
BrokerDriver/Assets.xcassets/Btn/btn_add.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "btn_add@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "btn_add@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
BrokerDriver/Assets.xcassets/Btn/btn_add.imageset/btn_add@2x.png
BrokerDriver/Assets.xcassets/Btn/btn_add.imageset/btn_add@3x.png
BrokerDriver/Assets.xcassets/Btn/btn_camera.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "btn_camera@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "btn_camera@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
BrokerDriver/Assets.xcassets/Btn/btn_camera.imageset/btn_camera@2x.png
BrokerDriver/Assets.xcassets/Btn/btn_camera.imageset/btn_camera@3x.png
BrokerDriver/Assets.xcassets/Btn/btn_close.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "btn_close@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "btn_close@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
BrokerDriver/Assets.xcassets/Btn/btn_close.imageset/btn_close@2x.png
BrokerDriver/Assets.xcassets/Btn/btn_close.imageset/btn_close@3x.png
BrokerDriver/Assets.xcassets/Btn/btn_pic.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "btn_pic@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "btn_pic@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
BrokerDriver/Assets.xcassets/Btn/btn_pic.imageset/btn_pic@2x.png
BrokerDriver/Assets.xcassets/Btn/btn_pic.imageset/btn_pic@3x.png
BrokerDriver/Assets.xcassets/Icon/icon_arrow_down.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_arrow@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_arrow@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
BrokerDriver/Assets.xcassets/Icon/icon_arrow_down.imageset/icon_arrow@2x.png
BrokerDriver/Assets.xcassets/Icon/icon_arrow_down.imageset/icon_arrow@3x.png
BrokerDriver/Assets.xcassets/Icon/icon_left.imageset/Contents.json
New file
@@ -0,0 +1,22 @@
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "icon_right@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "icon_right@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}
BrokerDriver/Assets.xcassets/Icon/icon_left.imageset/icon_right@2x.png
BrokerDriver/Assets.xcassets/Icon/icon_left.imageset/icon_right@3x.png
BrokerDriver/Enums.swift
@@ -118,3 +118,26 @@
    }
}
enum RecordEnum:Int,HandyJSONEnum {
    case none = -1
    case GetOutTicket = 1
    case GetInTicket = 2
    case Pod = 3
    case Other = 4
    var str:String{
        switch self {
            case .GetInTicket:return "GET IN TICKET"
            case .GetOutTicket:return "GET OUT TICKET"
            case .Pod:return "POD"
            case .Other:return "OTHER"
            case .none:return "--"
        }
    }
}
enum TextType:Int,HandyJSONEnum{
case note = 1
case troble = 2
}
BrokerDriver/Home/TCell/AttachTCell.swift
@@ -6,18 +6,50 @@
//
import UIKit
import Lantern
import RxSwift
class AttachTCell: UITableViewCell {
    var recordModel:AttachmentRecordModel?{
        didSet{
            l1.text = recordModel?.name ?? ""
            l2.text = recordModel?.type
        }
    }
    @IBOutlet weak var l1: UILabel!
    @IBOutlet weak var l2: UILabel!
    private var disposeBag:DisposeBag!
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
        selectionStyle = .none
        disposeBag = DisposeBag()
    }
    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
    @IBAction func delAction(_ sender: UIButton) {
        CommonAlertView.show(title: "Prompt!", content: "Are you sure delete the image?", bt1: "Cancel", bt2: "Delete") { [weak self] in
            guard let weakSelf = self else { return }
            Services.delAttachment(id: weakSelf.recordModel!.id).subscribe(onNext: { data in
                NotificationCenter.default.post(name: RefresgDetailAttach_Noti, object: nil)
            }) { error in
        // Configure the view for the selected state
            }.disposed(by: weakSelf.disposeBag)
        }
    }
    @IBAction func visitionAction(_ sender: UIButton) {
        let lantern = Lantern()
        lantern.numberOfItems = {
            return 1
        }
        lantern.pageIndicator = LanternDefaultPageIndicator()
        lantern.pageIndex = 0
        lantern.reloadCellAtIndex = { context in
            let lanternCell = context.cell as? LanternImageCell
            lanternCell?.imageView.sd_setImage(with: URL(string: self.recordModel!.file))
        }
        lantern.show()
    }
}
BrokerDriver/Home/TCell/AttachTCell.xib
@@ -65,6 +65,9 @@
                                                </constraints>
                                                <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                                <state key="normal" image="btn_delete"/>
                                                <connections>
                                                    <action selector="delAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="Adl-0A-dad"/>
                                                </connections>
                                            </button>
                                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="lHz-G6-kuf">
                                                <rect key="frame" x="41" y="0.0" width="25" height="62"/>
@@ -73,6 +76,9 @@
                                                </constraints>
                                                <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                                <state key="normal" image="btn_eye"/>
                                                <connections>
                                                    <action selector="visitionAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="5G6-gz-yJ7"/>
                                                </connections>
                                            </button>
                                        </subviews>
                                    </stackView>
@@ -106,6 +112,10 @@
                </constraints>
            </tableViewCellContentView>
            <viewLayoutGuide key="safeArea" id="njF-e1-oar"/>
            <connections>
                <outlet property="l1" destination="5xS-TS-paO" id="1Ny-rb-3t7"/>
                <outlet property="l2" destination="hf6-uL-cQP" id="jx4-z8-dSj"/>
            </connections>
            <point key="canvasLocation" x="260.30534351145036" y="27.112676056338028"/>
        </tableViewCell>
    </objects>
BrokerDriver/Home/TCell/NoteContentTCell.swift
@@ -6,11 +6,32 @@
//
import UIKit
import RxSwift
class NoteContentTCell: UITableViewCell {
    @IBOutlet weak var label_content: UILabel!
    var indexPath:IndexPath!
    private var disposeBag:DisposeBag!
    var contentModel:NoteOrTroubleContentModel?{
        didSet{
            label_content.text = contentModel?.describe ?? ""
        }
    }
    override func awakeFromNib() {
        super.awakeFromNib()
        disposeBag = DisposeBag()
    }
    @IBAction func delAction(_ sender: UIButton) {
        CommonAlertView.show(title: "Prompt!", content: "Confirm the deletion?", bt1: "Cancel", bt2: "Confirm") { [weak self] in
            guard let weakSelf = self else { return }
            Services.delOrderNote(id: weakSelf.contentModel!.id).subscribe(onNext: { data in
                NotificationCenter.default.post(name: DetailNote_Noti, object: weakSelf.indexPath)
            }) { error in
            }.disposed(by: weakSelf.disposeBag)
        }
    }
}
BrokerDriver/Home/TCell/NoteContentTCell.xib
@@ -4,7 +4,6 @@
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21678"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
@@ -17,28 +16,43 @@
                <rect key="frame" x="0.0" y="0.0" width="426" height="100"/>
                <autoresizingMask key="autoresizingMask"/>
                <subviews>
                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eCI-cp-wyk">
                        <rect key="frame" x="15" y="15" width="396" height="17"/>
                    <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="eCI-cp-wyk">
                        <rect key="frame" x="15" y="20" width="396" height="17"/>
                        <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="14"/>
                        <nil key="textColor"/>
                        <nil key="highlightedColor"/>
                    </label>
                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ots-WA-eXC">
                        <rect key="frame" x="389" y="62" width="16" height="30"/>
                        <rect key="frame" x="389" y="67" width="16" height="25"/>
                        <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                        <state key="normal" image="btn_delete"/>
                        <connections>
                            <action selector="delAction:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="gCk-Bi-qLK"/>
                        </connections>
                    </button>
                    <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="fYa-2D-Q3T">
                        <rect key="frame" x="0.0" y="0.0" width="421" height="5"/>
                        <color key="backgroundColor" red="0.97647058823529409" green="0.98039215686274506" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstAttribute="height" constant="5" id="Mhr-C2-t1y"/>
                        </constraints>
                    </view>
                </subviews>
                <constraints>
                    <constraint firstItem="ots-WA-eXC" firstAttribute="top" secondItem="eCI-cp-wyk" secondAttribute="bottom" constant="30" id="0k0-bK-oZO"/>
                    <constraint firstAttribute="trailing" secondItem="ots-WA-eXC" secondAttribute="trailing" constant="21" id="8sZ-hu-bPd"/>
                    <constraint firstItem="eCI-cp-wyk" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="15" id="D0q-mx-QNC"/>
                    <constraint firstItem="fYa-2D-Q3T" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="Bsa-m5-wmO"/>
                    <constraint firstItem="fYa-2D-Q3T" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" id="H2w-yk-vDH"/>
                    <constraint firstItem="eCI-cp-wyk" firstAttribute="top" secondItem="fYa-2D-Q3T" secondAttribute="bottom" constant="15" id="HZG-v5-OeM"/>
                    <constraint firstItem="eCI-cp-wyk" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="15" id="Lxa-zc-NW5"/>
                    <constraint firstAttribute="trailing" secondItem="eCI-cp-wyk" secondAttribute="trailing" constant="15" id="dwE-j7-ZpQ"/>
                    <constraint firstAttribute="trailing" secondItem="fYa-2D-Q3T" secondAttribute="trailing" constant="5" id="gQj-QM-OX3"/>
                    <constraint firstAttribute="bottom" secondItem="ots-WA-eXC" secondAttribute="bottom" constant="8" id="pYI-ZK-QPj"/>
                </constraints>
            </tableViewCellContentView>
            <viewLayoutGuide key="safeArea" id="njF-e1-oar"/>
            <connections>
                <outlet property="label_content" destination="eCI-cp-wyk" id="kkW-kh-YBQ"/>
            </connections>
            <point key="canvasLocation" x="164.8854961832061" y="40.140845070422536"/>
        </tableViewCell>
    </objects>
BrokerDriver/Home/VC/HomeDetailAttachVC.swift
@@ -6,13 +6,26 @@
//
import UIKit
import RxSwift
import RxRelay
import JQTools
class HomeDetailAttachVC: BaseViewController {
let RefresgDetailAttach_Noti = Notification.Name.init("RefresgDetailAttach_Noti")
    @IBOutlet weak var attachTableView: UITableView!
class HomeDetailAttachVC: BaseViewController,Refreshable {
    @IBOutlet weak var attachTableView: BaseTableView!
    private(set) var orderId:String!
    public let refreshStatus = BehaviorSubject(value: RefreshStatus.others)
    private var page = 1
    private var datas = [AttachmentRecordModel]()
    struct AttachmentType:HandyJSON {
        var orderId = ""
        var file = ""
        var name = ""
        var categroy:RecordEnum = .none
    }
    
    required init(orderId:String) {
        super.init(nibName: nil, bundle: nil)
@@ -22,7 +35,6 @@
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    override func viewDidLoad() {
        super.viewDidLoad()
@@ -33,10 +45,66 @@
        attachTableView.separatorStyle = .none
        attachTableView.register(UINib(nibName: "AttachHeadView", bundle: nil), forHeaderFooterViewReuseIdentifier: "_AttachHeadView")
        attachTableView.register(UINib(nibName: "AttachTCell", bundle: nil), forCellReuseIdentifier: "_AttachTCell")
        self.refreshStatusBind(to: attachTableView, header: { [weak self] () in
            self?.getData()
        }, footer: {  [weak self] () in
            self?.getData(false)
        }).disposed(by: disposeBag)
        attachTableView.jq_setEmptyView("Not data", image: UIImage(named: "empty"), foregroundColor: .gray, clouse: nil)
        DispatchQueue.main.asyncAfter(deadline: .now()+0.2) {
            self.refreshStatus.onNext(.beingHeaderRefresh)
        }
    }
    override func setRx() {
        NotificationCenter.default.rx.notification(RefresgDetailAttach_Noti, object: nil).take(until: self.rx.deallocated).subscribe(onNext: {[weak self] noti in
            self?.refreshStatus.onNext(.beingHeaderRefresh)
        }) { error in
        }.disposed(by: disposeBag)
    }
    private func getData(_ isHeader:Bool = true){
        if isHeader{
            page = 1
        }else{
            page += 1
        }
        Services.orderAttachment(id: orderId, page: page).subscribe(onNext: { data in
            if let model = data.data{
                if isHeader{
                    self.datas.removeAll()
                    self.refreshStatus.onNext(.endHeaderRefresh)
                    self.refreshStatus.onNext(.resetNoMoreData)
                }else{
                    if model.records.count == 0{
                        self.refreshStatus.onNext(.noMoreData)
                    }else{
                        self.refreshStatus.onNext(.endFooterRefresh)
                    }
                }
                self.datas.append(contentsOf: model.records)
                self.attachTableView.reloadData()
            }
        }) { error in
            alert(msg: error.localizedDescription)
            self.refreshStatus.onNext(.endFooterRefresh)
            self.refreshStatus.onNext(.endHeaderRefresh)
        }.disposed(by: disposeBag)
    }
    @IBAction func addAttachmentAction(_ sender: UIButton) {
        AttachTypeView.show(orderId: orderId) {[weak self] ()in
            self?.refreshStatus.onNext(.beingHeaderRefresh)
        }
    }
}
extension HomeDetailAttachVC:UITableViewDelegate{
@@ -44,7 +112,7 @@
extension HomeDetailAttachVC:UITableViewDataSource{
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 20
        return datas.count
    }
    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
@@ -57,7 +125,9 @@
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let data = datas[indexPath.row]
        let cell = tableView.dequeueReusableCell(withIdentifier: "_AttachTCell") as! AttachTCell
        cell.recordModel = data
        return cell
    }
BrokerDriver/Home/VC/HomeDetailAttachVC.xib
@@ -35,8 +35,11 @@
                            <real key="value" value="4"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                    <connections>
                        <action selector="addAttachmentAction:" destination="-1" eventType="touchUpInside" id="dMS-hE-Mup"/>
                    </connections>
                </button>
                <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="grouped" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="18" estimatedSectionHeaderHeight="-1" sectionFooterHeight="18" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="k2P-Py-J1y">
                <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="grouped" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="18" estimatedSectionHeaderHeight="-1" sectionFooterHeight="18" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="k2P-Py-J1y" customClass="BaseTableView" customModule="BrokerDriver" customModuleProvider="target">
                    <rect key="frame" x="12" y="60" width="369" height="747"/>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                </tableView>
@@ -58,7 +61,7 @@
                                            <nil key="textColor"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_right" translatesAutoresizingMaskIntoConstraints="NO" id="ifR-MH-3LX">
                                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_left" translatesAutoresizingMaskIntoConstraints="NO" id="ifR-MH-3LX">
                                            <rect key="frame" x="150.66666666666669" y="0.0" width="18" height="50"/>
                                        </imageView>
                                    </subviews>
@@ -100,6 +103,7 @@
        </view>
    </objects>
    <resources>
        <image name="icon_left" width="18" height="14"/>
        <image name="icon_right" width="18" height="14"/>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
BrokerDriver/Home/VC/HomeDetailContentVC.xib
@@ -203,7 +203,7 @@
                                            <nil key="textColor"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_right" translatesAutoresizingMaskIntoConstraints="NO" id="vyp-8l-RIm">
                                        <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_left" translatesAutoresizingMaskIntoConstraints="NO" id="vyp-8l-RIm">
                                            <rect key="frame" x="199.66666666666663" y="0.0" width="18" height="44"/>
                                        </imageView>
                                    </subviews>
@@ -243,6 +243,7 @@
    </objects>
    <resources>
        <image name="icon_id" width="14" height="14"/>
        <image name="icon_left" width="18" height="14"/>
        <image name="icon_right" width="18" height="14"/>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
BrokerDriver/Home/VC/HomeDetailNoteVC.swift
@@ -1,16 +1,29 @@
//
//  HomeDetailNoteVC.swift
//  BrokerDriver
//
//  Created by 无故事王国 on 2023/4/25.
//
    //
    //  HomeDetailNoteVC.swift
    //  BrokerDriver
    //
    //  Created by 无故事王国 on 2023/4/25.
    //
import UIKit
class HomeDetailNoteVC: BaseViewController {
    @IBOutlet weak var noteTableView: UITableView!
let DetailNote_Noti = Notification.Name.init("DetailNote_Noti")
class HomeDetailNoteVC: BaseViewController,Refreshable {
    @IBOutlet weak var noteTableView: BaseTableView!
    private(set) var orderId:String!
    public let refreshStatus = BehaviorSubject(value: RefreshStatus.others)
    private var page = 1
    private var datas = [NoteOrTroubleContentModel]()
    struct DetailNotModel:HandyJSON {
        var category:String?
        var describe = ""
        var orderId = ""
        var type:TextType = .note
        var driverId:Int? = UserViewModel.getUserInfo()?.id ?? 0
    }
    required init(orderId:String) {
@@ -29,6 +42,84 @@
        noteTableView.delegate = self
        noteTableView.dataSource = self
        noteTableView.register(UINib(nibName: "NoteContentTCell", bundle: nil), forCellReuseIdentifier: "_NoteContentTCell")
        noteTableView.backgroundColor = UIColor(hexStr: "#F9FAFF")
        self.refreshStatusBind(to: noteTableView, header: { [weak self] () in
            self?.getData()
        }, footer: {  [weak self] () in
            self?.getData(false)
        }).disposed(by: disposeBag)
        noteTableView.jq_setEmptyView("Not data", image: UIImage(named: "empty"), foregroundColor: .gray, clouse: nil)
        DispatchQueue.main.asyncAfter(deadline: .now()+0.2) {
            self.refreshStatus.onNext(.beingHeaderRefresh)
        }
    }
    private func getData(_ isHeader:Bool = true){
        if isHeader{
            page = 1
        }else{
            page += 1
        }
        Services.orderNote(id: orderId, page: page, type: .note).subscribe(onNext: { data in
            if let model = data.data{
                if isHeader{
                    self.datas.removeAll()
                    self.refreshStatus.onNext(.endHeaderRefresh)
                    self.refreshStatus.onNext(.resetNoMoreData)
                }else{
                    if model.records.count == 0{
                        self.refreshStatus.onNext(.noMoreData)
                    }else{
                        self.refreshStatus.onNext(.endFooterRefresh)
                    }
                }
                self.datas.append(contentsOf: model.records)
                self.noteTableView.reloadData()
            }
        }) { error in
            alert(msg: error.localizedDescription)
            self.refreshStatus.onNext(.endFooterRefresh)
            self.refreshStatus.onNext(.endHeaderRefresh)
        }.disposed(by: disposeBag)
    }
    override func setRx() {
        NotificationCenter.default.rx.notification(DetailNote_Noti).take(until: self.rx.deallocated).subscribe(onNext: {[weak self] noti in
            if let index = noti.object as? IndexPath{
                self?.datas.remove(at: index.row)
                self?.noteTableView.beginUpdates()
                self?.noteTableView.deleteRows(at: [index], with: .automatic)
                self?.noteTableView.endUpdates()
                self?.noteTableView.reloadData()
            }else{
                self?.refreshStatus.onNext(.beingHeaderRefresh)
            }
        }).disposed(by: disposeBag)
    }
    @IBAction func addNoteAction(_ sender: UIButton) {
        AddTextView.show(type: .note) { [weak self] text in
            guard let weakSelf = self else { return }
            var model = DetailNotModel()
            model.describe = text
            model.type = .note
            model.orderId = weakSelf.orderId
            Services.addOrderNote(model: model).subscribe(onNext: {[weak self] data in
                if data.code == 200{
                    self?.refreshStatus.onNext(.beingHeaderRefresh)
                    alert(msg: "Add note successed")
                }else{
                    alert(msg: data.msg)
                }
            }) { error in
                alert(msg: error.localizedDescription)
            }.disposed(by: weakSelf.disposeBag)
        }
    }
}
@@ -39,10 +130,12 @@
extension HomeDetailNoteVC:UITableViewDataSource{
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "_NoteContentTCell") as! NoteContentTCell
        cell.indexPath = indexPath
        cell.contentModel = datas[indexPath.row]
        return cell
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 10
        return datas.count
    }
}
BrokerDriver/Home/VC/HomeDetailNoteVC.xib
@@ -20,7 +20,7 @@
            <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <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="1om-HE-4LW">
                <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="1om-HE-4LW" customClass="BaseTableView" customModule="BrokerDriver" customModuleProvider="target">
                    <rect key="frame" x="0.0" y="59" width="393" height="674"/>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                </tableView>
@@ -40,6 +40,9 @@
                            <real key="value" value="22"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                    <connections>
                        <action selector="addNoteAction:" destination="-1" eventType="touchUpInside" id="Ob0-gf-BGf"/>
                    </connections>
                </button>
            </subviews>
            <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
BrokerDriver/Home/VC/HomePageVC.swift
@@ -53,7 +53,7 @@
            self?.getData(false)
        }).disposed(by: disposeBag)
        tableView.jq_setEmptyView("Not data", image: UIImage(named: "empty"), foregroundColor: .gray, clouse: nil)
        DispatchQueue.main.asyncAfter(deadline: .now()+1) {
        DispatchQueue.main.asyncAfter(deadline: .now()+0.2) {
            self.refreshStatus.onNext(.beingHeaderRefresh)
        }
BrokerDriver/Models/OrderModel.swift
@@ -6,3 +6,49 @@
//
import Foundation
import HandyJSON
struct AttachmentModel:HandyJSON{
    var current = -1
    var pages = -1
    var records = [AttachmentRecordModel]()
    var size = -1
    var total = -1
}
struct AttachmentRecordModel:HandyJSON{
    var id = 0
    var orderId = 0
    var name = ""
    var file = ""
    var createTime = ""
    var category:RecordEnum = .none
    var type = ""
}
struct UploadModel:HandyJSON{
    var deleteUrl = ""
    var type = ""
    var url = ""
}
struct NoteOrTroubleModel:HandyJSON{
    var current = -1
    var pages = -1
    var records = [NoteOrTroubleContentModel]()
    var size = -1
    var total = -1
}
struct NoteOrTroubleContentModel:HandyJSON {
    var id = 0
    var orderId = 0
    var createTime = ""
    var category:RecordEnum = .none
    var type = ""
    var describe = ""
    var driverId = 0
}
BrokerDriver/Network/NetworkRequest.swift
@@ -164,6 +164,11 @@
                        if let next = BaseResponse<T>.deserialize(from: jsonString){
                            if next.code == 200{
                                ob.onNext(next)
                            }else if next.code == 700{
                                let nav = BaseNavigationController(rootViewController: LoginVC())
                                UserViewModel.clearUserInfo()
                                screnDelegate?.window?.rootViewController = nav
                                alert(msg: "Login session invaild")
                            }else {
                                alert(msg: next.msg)
                                ob.onError(NetRequestError.Other)
@@ -278,12 +283,19 @@
    /// - 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)
            let 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
            var headers = HTTPHeaders()
            if let token = UserViewModel.getUserInfo()?.token {
                headers.add(name: "Authorization", value: "Bearer" + " " + token)
                LogInfo("USER_token:\(token)")
            }
            
            AF.upload(multipartFormData: { data in
                let p = params
@@ -298,9 +310,8 @@
                        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)
            }, to: params.url, method: .post, headers: headers) .uploadProgress(queue: .main, closure: { progress in
//                progressClosure(progress.fractionCompleted)
            }).responseJSON(completionHandler: { data in
                print("upload finished: \(data)")
                
BrokerDriver/Network/Services.swift
@@ -11,6 +11,7 @@
//import RxCocoa
//import RxDataSources
import RxSwift
import Alamofire
//外网测试环境
let All_Url = "http://192.168.110.22:8040"
@@ -74,23 +75,59 @@
        return NetworkRequest.request(params: params, method: .get, progress: true)
    }
    class func orderAttachment(id:Int,page:Int)->Observable<BaseResponse<SimpleModel>>{
    class func orderAttachment(id:String,page:Int)->Observable<BaseResponse<AttachmentModel>>{
        let params = ParamsAppender.build(url: All_Url)
            .interface(url: "/api/index/orderAttachment")
            .append(key: "pageNumber", value:page)
            .append(key: "pageSize", value: 20)
            .append(key: "id", value: id)
        return NetworkRequest.request(params: params, method: .get, progress: true)
        return NetworkRequest.request(params: params, method: .get, progress: false)
    }
    class func orderNote(id:Int,page:Int,type:Int)->Observable<BaseResponse<SimpleModel>>{
    class func addOrderAttachment(model:HomeDetailAttachVC.AttachmentType)->Observable<BaseResponse<AttachmentModel>>{
        let params = ParamsAppender.build(url: All_Url)
            .interface(url: "/api/index/addOrderAttachment")
            .append(dic: model.toJSON() ?? [:])
        return NetworkRequest.request(params: params, method: .post, encoding: JSONEncoding.default, progress: true)
    }
    class func orderNote(id:String,page:Int,type:TextType)->Observable<BaseResponse<NoteOrTroubleModel>>{
        let params = ParamsAppender.build(url: All_Url)
            .interface(url: "/api/index/orderNote")
            .append(key: "pageNumber", value:page)
            .append(key: "pageSize", value: 20)
            .append(key: "id", value: id)
            .append(key: "type", value: type)
        return NetworkRequest.request(params: params, method: .get, progress: true)
            .append(key: "type", value: type.rawValue)
        return NetworkRequest.request(params: params, method: .get, progress: false)
    }
    class func uploadFile(file:Data,progress:Bool = true)->Observable<BaseResponse<UploadModel>>{
        let params = ParamsAppender.build(url: All_Url)
            .interface(url: "/api/upload/upload")
            .append(key: "multipartFile", data: file)
        return NetworkRequest.upload(params: params)
    }
    class func delAttachment(id:Int)->Observable<BaseResponse<SimpleModel>>{
        let params = ParamsAppender.build(url: All_Url)
            .interface(url: "/api/index/delOrderAttachment")
            .append(key: "id", value: id)
        return NetworkRequest.request(params: params, method: .get, progress: false)
    }
    class func addOrderNote(model:HomeDetailNoteVC.DetailNotModel)->Observable<BaseResponse<AttachmentModel>>{
        let params = ParamsAppender.build(url: All_Url)
            .interface(url: "/api/index/addOrderNote")
            .append(dic: model.toJSON() ?? [:])
        return NetworkRequest.request(params: params, method: .post, encoding: JSONEncoding.default, progress: true)
    }
    class func delOrderNote(id:Int)->Observable<BaseResponse<SimpleModel>>{
        let params = ParamsAppender.build(url: All_Url)
            .interface(url: "/api/index/delOrderNote")
            .append(key: "id", value: id)
        return NetworkRequest.request(params: params, method: .get, progress: false)
    }
}
BrokerDriver/Profile/VC/PersonalDataVC.xib
@@ -49,7 +49,7 @@
                                    <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">
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" 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"/>
@@ -91,7 +91,7 @@
                                    <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">
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" 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"/>
@@ -133,7 +133,7 @@
                                    <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">
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" 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"/>
@@ -175,7 +175,7 @@
                                    <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">
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" 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"/>
@@ -217,7 +217,7 @@
                                    <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">
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" 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"/>
@@ -259,7 +259,7 @@
                                    <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">
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" 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"/>
@@ -301,7 +301,7 @@
                                    <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">
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" 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"/>
@@ -343,7 +343,7 @@
                                    <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">
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" 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"/>
BrokerDriver/Tools/AddTextView.swift
New file
@@ -0,0 +1,87 @@
    //
    //  AddTextView.swift
    //  BrokerDriver
    //
    //  Created by 无故事王国 on 2023/5/4.
    //
import UIKit
import QMUIKit
import RxSwift
class AddTextView: UIView,JQNibView{
    @IBOutlet weak var textView: QMUITextView!
    @IBOutlet weak var view_container: UIView!
    private var successClouse:((String)->Void)?
    private var disposeBag:DisposeBag!
    @IBOutlet weak var centerXCons: NSLayoutConstraint!
    override func awakeFromNib() {
        super.awakeFromNib()
        alpha = 0
        view_container.transform = CGAffineTransform(scaleX: 0.1, y: 0.1)
        disposeBag = DisposeBag()
        layoutIfNeeded()
        NotificationCenter.default.rx.notification(UIControl.keyboardWillShowNotification, object: nil).subscribe(onNext: {noti in
            if let obj = noti.userInfo{
                let duration = obj[UIResponder.keyboardAnimationDurationUserInfoKey] as! CGFloat
                self.layoutIfNeeded()
                UIView.animate(withDuration:duration) {
                    self.centerXCons.constant = -50
                    self.layoutIfNeeded()
                }
            }
        }).disposed(by: disposeBag)
        NotificationCenter.default.rx.notification(UIControl.keyboardWillHideNotification, object: nil).subscribe(onNext: {noti in
            if let obj = noti.userInfo{
                let duration = obj[UIResponder.keyboardAnimationDurationUserInfoKey] as! CGFloat
                self.layoutIfNeeded()
                UIView.animate(withDuration:duration) {
                    self.centerXCons.constant = 0
                    self.layoutIfNeeded()
                }
            }
        }).disposed(by: disposeBag)
    }
    static func show(type:TextType,successClouse:@escaping (String)->Void){
        let pickerView = AddTextView.jq_loadNibView()
        pickerView.successClouse = successClouse
        pickerView.frame = screnDelegate?.window?.frame ?? .zero
        if type == .note{
            pickerView.textView.placeholder = "Add note information"
        }else{
            pickerView.textView.placeholder = "Add trouble information"
        }
        screnDelegate?.window?.addSubview(pickerView)
        UIView.animate(withDuration: 0.4) {
            pickerView.alpha = 1
            pickerView.view_container.transform = CGAffineTransform(scaleX: 1.0, y: 1.0)
            pickerView.layoutIfNeeded()
        }
    }
    @IBAction func closeAction(_ sender: UIButton) {
        UIView.animate(withDuration: 0.5) {[weak self] () in
            self?.alpha = 0
            self?.view_container.transform = CGAffineTransform(scaleX: 0.1, y: 0.1)
        } completion: { _ in
            self.removeFromSuperview()
        }
    }
    @IBAction func submitAction(_ sender: UIButton) {
        guard !textView.text.isEmpty else {
            alert(msg: "Plase input content");return
        }
        UIView.animate(withDuration: 0.5) {[weak self] () in
            self?.alpha = 0
            self?.view_container.transform = CGAffineTransform(scaleX: 0.1, y: 0.1)
        } completion: { _ in
            self.successClouse?(self.textView.text)
            self.removeFromSuperview()
        }
    }
}
BrokerDriver/Tools/AddTextView.xib
New file
@@ -0,0 +1,137 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21678"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="AddTextView" customModule="BrokerDriver" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="uQI-Dl-PZs">
                    <rect key="frame" x="38" y="280" width="317" height="317"/>
                    <subviews>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="SxM-Kk-InQ">
                            <rect key="frame" x="286" y="10" width="21" height="21"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="21" id="aTQ-fM-9kp"/>
                                <constraint firstAttribute="width" constant="21" id="eDR-EN-wll"/>
                            </constraints>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" image="btn_close"/>
                            <connections>
                                <action selector="closeAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="oRF-pR-qGb"/>
                            </connections>
                        </button>
                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="RTV-im-G4D">
                            <rect key="frame" x="28" y="48" width="261" height="180"/>
                            <subviews>
                                <textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="5Ot-cS-CWG" customClass="QMUITextView">
                                    <rect key="frame" x="12" y="13" width="237" height="154"/>
                                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                                    <color key="textColor" systemColor="labelColor"/>
                                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
                                    <textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
                                    <userDefinedRuntimeAttributes>
                                        <userDefinedRuntimeAttribute type="string" keyPath="placeholder" value="Add trouble information"/>
                                        <userDefinedRuntimeAttribute type="color" keyPath="placeholderColor">
                                            <color key="value" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="0.55000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                                        </userDefinedRuntimeAttribute>
                                    </userDefinedRuntimeAttributes>
                                </textView>
                            </subviews>
                            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                            <constraints>
                                <constraint firstAttribute="trailing" secondItem="5Ot-cS-CWG" secondAttribute="trailing" constant="12" id="FvP-0R-Lxj"/>
                                <constraint firstItem="5Ot-cS-CWG" firstAttribute="top" secondItem="RTV-im-G4D" secondAttribute="top" constant="13" id="Uu1-6y-OjM"/>
                                <constraint firstItem="5Ot-cS-CWG" firstAttribute="leading" secondItem="RTV-im-G4D" secondAttribute="leading" constant="12" id="eia-Eh-7i1"/>
                                <constraint firstAttribute="bottom" secondItem="5Ot-cS-CWG" secondAttribute="bottom" constant="13" id="mMD-8g-XN9"/>
                            </constraints>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="number" keyPath="ld_borderWidthXIB">
                                    <real key="value" value="1"/>
                                </userDefinedRuntimeAttribute>
                                <userDefinedRuntimeAttribute type="color" keyPath="ld_borderColorXIB">
                                    <color key="value" red="0.92156862745098034" green="0.92156862745098034" blue="0.92156862745098034" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                </userDefinedRuntimeAttribute>
                                <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                    <real key="value" value="4"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                        </view>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="DwO-y2-p3x">
                            <rect key="frame" x="60" y="254" width="197" height="44"/>
                            <color key="backgroundColor" red="0.99215686270000003" green="0.82745098039999998" blue="0.015686274510000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="44" id="0hD-80-SHA"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" title="Submit">
                                <color key="titleColor" red="0.16862745100000001" green="0.16862745100000001" blue="0.16862745100000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            </state>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                    <real key="value" value="22"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                            <connections>
                                <action selector="submitAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="6Uu-Db-UgN"/>
                            </connections>
                        </button>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstItem="DwO-y2-p3x" firstAttribute="leading" secondItem="uQI-Dl-PZs" secondAttribute="leading" constant="60" id="0h9-Hn-NBa"/>
                        <constraint firstItem="RTV-im-G4D" firstAttribute="top" secondItem="uQI-Dl-PZs" secondAttribute="top" constant="48" id="4qf-fC-wBj"/>
                        <constraint firstAttribute="trailing" secondItem="RTV-im-G4D" secondAttribute="trailing" constant="28" id="C6D-Ff-9sW"/>
                        <constraint firstAttribute="bottom" secondItem="DwO-y2-p3x" secondAttribute="bottom" constant="19" id="GjW-vV-d6I"/>
                        <constraint firstItem="SxM-Kk-InQ" firstAttribute="top" secondItem="uQI-Dl-PZs" secondAttribute="top" constant="10" id="JVs-Ob-Be2"/>
                        <constraint firstItem="DwO-y2-p3x" firstAttribute="top" secondItem="RTV-im-G4D" secondAttribute="bottom" constant="26" id="ReJ-O2-nFx"/>
                        <constraint firstAttribute="trailing" secondItem="DwO-y2-p3x" secondAttribute="trailing" constant="60" id="Suh-Fl-aZJ"/>
                        <constraint firstItem="RTV-im-G4D" firstAttribute="leading" secondItem="uQI-Dl-PZs" secondAttribute="leading" constant="28" id="Ynq-CX-Dsm"/>
                        <constraint firstAttribute="trailing" secondItem="SxM-Kk-InQ" secondAttribute="trailing" constant="10" id="qnj-2H-LB9"/>
                        <constraint firstAttribute="width" secondItem="uQI-Dl-PZs" secondAttribute="height" multiplier="1:1" id="rIo-gV-g8n"/>
                    </constraints>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="8"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </view>
            </subviews>
            <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/>
            <color key="backgroundColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
            <constraints>
                <constraint firstItem="vUN-kp-3ea" firstAttribute="trailing" secondItem="uQI-Dl-PZs" secondAttribute="trailing" constant="38" id="FxD-0z-DoX"/>
                <constraint firstItem="uQI-Dl-PZs" firstAttribute="centerX" secondItem="vUN-kp-3ea" secondAttribute="centerX" id="L4D-N6-HZj"/>
                <constraint firstItem="uQI-Dl-PZs" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" constant="38" id="MLh-fS-rKz"/>
                <constraint firstItem="uQI-Dl-PZs" firstAttribute="centerY" secondItem="vUN-kp-3ea" secondAttribute="centerY" id="hD1-Jn-MMl"/>
            </constraints>
            <connections>
                <outlet property="centerXCons" destination="hD1-Jn-MMl" id="ftC-ZK-cbD"/>
                <outlet property="textView" destination="5Ot-cS-CWG" id="FBJ-Hn-ERA"/>
                <outlet property="view_container" destination="uQI-Dl-PZs" id="PZE-Gj-h5B"/>
            </connections>
            <point key="canvasLocation" x="138" y="21"/>
        </view>
    </objects>
    <resources>
        <image name="btn_close" width="14" height="14"/>
        <systemColor name="labelColor">
            <color red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
        </systemColor>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
BrokerDriver/Tools/AttachTypeView.swift
New file
@@ -0,0 +1,96 @@
//
//  AttachTypeView.swift
//  BrokerDriver
//
//  Created by 无故事王国 on 2023/5/4.
//
import UIKit
import RxSwift
class AttachTypeView: UIView,JQNibView{
    @IBOutlet weak var view_container: UIView!
    @IBOutlet weak var VStack: UIStackView!
    @IBOutlet weak var label_content: UILabel!
    @IBOutlet weak var imgV: UIImageView!
    private var orderId:String!
    private var disposeBag:DisposeBag!
    private var recordEnum:RecordEnum!
    private var uploadModel:UploadModel?
    private var successClouse:(()->Void)?
    override func awakeFromNib() {
        super.awakeFromNib()
        alpha = 0
        view_container.transform = CGAffineTransform(scaleX: 0.1, y: 0.1)
        VStack.isHidden = true
        layoutIfNeeded()
        disposeBag = DisposeBag()
        recordEnum = RecordEnum(rawValue: 1)
        label_content.text = recordEnum.str
    }
    static func show(orderId:String,successClouse:@escaping ()->Void){
        let pickerView = AttachTypeView.jq_loadNibView()
        pickerView.orderId = orderId
        pickerView.successClouse = successClouse
        pickerView.frame = screnDelegate?.window?.frame ?? .zero
        screnDelegate?.window?.addSubview(pickerView)
        UIView.animate(withDuration: 0.4) {
            pickerView.alpha = 1
            pickerView.view_container.transform = CGAffineTransform(scaleX: 1.0, y: 1.0)
            pickerView.layoutIfNeeded()
        }
    }
    @IBAction func tapAction(_ sender: TapButton) {
        VStack.isHidden = !VStack.isHidden
    }
    @IBAction func closeAction(_ sender: UIButton) {
        UIView.animate(withDuration: 0.5) {[weak self] () in
            self?.alpha = 0
            self?.view_container.transform = CGAffineTransform(scaleX: 0.1, y: 0.1)
        } completion: { _ in
            self.removeFromSuperview()
        }
    }
    @IBAction func submitAction(_ sender: UIButton) {
        guard uploadModel != nil else {alert(msg: "Please upload image");return}
        let model = HomeDetailAttachVC.AttachmentType(orderId: orderId, file: uploadModel!.url, name: uploadModel!.deleteUrl, categroy: recordEnum)
        Services.addOrderAttachment(model: model).subscribe(onNext: { data in
            if data.code == 200{
                alert(msg: "Upload successed")
                UIView.animate(withDuration: 0.5) {[weak self] () in
                    self?.alpha = 0
                    self?.view_container.transform = CGAffineTransform(scaleX: 0.1, y: 0.1)
                } completion: { _ in
                    self.removeFromSuperview()
                    self.successClouse?()
                }
            }
        }) { error in
            alert(msg: error.localizedDescription)
        }.disposed(by: disposeBag)
    }
    @IBAction func uploadImgAction(_ sender: TapButton) {
        PhotoPickerView.show {[weak self] data in
            guard let weakSelf = self else { return }
            Services.uploadFile(file: data).subscribe(onNext: {[weak self]  data in
                self?.uploadModel = data.data
                self?.imgV.jq_sdimage(url: data.data?.url ?? "")
                self?.imgV.isHidden = false
            }) { error in
                alert(msg: error.localizedDescription)
            }.disposed(by: weakSelf.disposeBag)
        }
    }
    @IBAction func contentTapAction(_ sender: UIButton) {
        label_content.text = sender.titleLabel?.text ?? ""
        VStack.isHidden = true
    }
}
BrokerDriver/Tools/AttachTypeView.xib
New file
@@ -0,0 +1,279 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21678"/>
        <capability name="Named colors" minToolsVersion="9.0"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="AttachTypeView" customModule="BrokerDriver" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5Ac-fj-q74">
                    <rect key="frame" x="38" y="267.66666666666669" width="317" height="317.00000000000006"/>
                    <subviews>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="mOl-90-rBi">
                            <rect key="frame" x="286" y="10" width="21" height="21"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="21" id="OAm-zX-eth"/>
                                <constraint firstAttribute="width" constant="21" id="fXS-Ox-vZX"/>
                            </constraints>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" image="btn_close"/>
                            <connections>
                                <action selector="closeAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="5xY-MP-MWq"/>
                            </connections>
                        </button>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Type" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ksx-JI-PcG">
                            <rect key="frame" x="17.000000000000004" y="56" width="34.333333333333343" height="17"/>
                            <constraints>
                                <constraint firstAttribute="width" constant="34.329999999999998" id="2J3-sh-96w"/>
                                <constraint firstAttribute="height" constant="17" id="gkq-P7-oPi"/>
                            </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="Picture" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fLq-ZD-AvY">
                            <rect key="frame" x="16.999999999999996" y="110" width="49.666666666666657" height="17"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="17" id="3zO-Ic-cG9"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="boldSystem" pointSize="14"/>
                            <nil key="textColor"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="LNl-RO-RsL" customClass="TapButton" customModule="BrokerDriver" customModuleProvider="target">
                            <rect key="frame" x="76.333333333333329" y="48.333333333333314" width="201.66666666666669" height="32"/>
                            <subviews>
                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_arrow_down" translatesAutoresizingMaskIntoConstraints="NO" id="YM3-6T-Z03">
                                    <rect key="frame" x="170.66666666666669" y="12.666666666666686" width="12" height="7"/>
                                    <constraints>
                                        <constraint firstAttribute="width" constant="12" id="jJA-pN-Q3i"/>
                                        <constraint firstAttribute="height" constant="7" id="sb7-36-eAB"/>
                                    </constraints>
                                </imageView>
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vLN-zs-Br1">
                                    <rect key="frame" x="11" y="9" width="149.66666666666666" height="14.333333333333336"/>
                                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
                                    <nil key="textColor"/>
                                    <nil key="highlightedColor"/>
                                </label>
                            </subviews>
                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                            <constraints>
                                <constraint firstAttribute="trailing" secondItem="YM3-6T-Z03" secondAttribute="trailing" constant="19" id="8df-6u-usb"/>
                                <constraint firstItem="YM3-6T-Z03" firstAttribute="centerY" secondItem="LNl-RO-RsL" secondAttribute="centerY" id="OSH-R2-beB"/>
                                <constraint firstItem="vLN-zs-Br1" firstAttribute="leading" secondItem="LNl-RO-RsL" secondAttribute="leading" constant="11" id="Vi4-P6-gyi"/>
                                <constraint firstItem="vLN-zs-Br1" firstAttribute="centerY" secondItem="LNl-RO-RsL" secondAttribute="centerY" id="d6A-3Q-MP2"/>
                                <constraint firstItem="YM3-6T-Z03" firstAttribute="leading" secondItem="vLN-zs-Br1" secondAttribute="trailing" constant="10" id="eOt-Ow-szs"/>
                                <constraint firstAttribute="height" constant="32" id="sIY-ZQ-KhX"/>
                            </constraints>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="number" keyPath="ld_borderWidthXIB">
                                    <real key="value" value="1"/>
                                </userDefinedRuntimeAttribute>
                                <userDefinedRuntimeAttribute type="color" keyPath="ld_borderColorXIB">
                                    <color key="value" red="0.92156862745098034" green="0.92156862745098034" blue="0.92156862745098034" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                </userDefinedRuntimeAttribute>
                                <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                    <real key="value" value="4"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                            <connections>
                                <action selector="tapAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="sdR-Py-WEV"/>
                            </connections>
                        </view>
                        <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4gA-Co-pfP" customClass="TapButton" customModule="BrokerDriver" customModuleProvider="target">
                            <rect key="frame" x="76.666666666666686" y="102.33333333333331" width="106" height="106"/>
                            <subviews>
                                <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="btn_add" translatesAutoresizingMaskIntoConstraints="NO" id="S94-Dy-I35">
                                    <rect key="frame" x="40.999999999999986" y="26" width="24" height="24"/>
                                </imageView>
                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Upload photo" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="KEJ-Lk-XRw">
                                    <rect key="frame" x="0.0" y="65.666666666666686" width="106" height="14.333333333333329"/>
                                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
                                    <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="0.55000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                                    <nil key="highlightedColor"/>
                                </label>
                                <imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="P3A-2g-ndw">
                                    <rect key="frame" x="0.0" y="0.0" width="106" height="106"/>
                                    <userDefinedRuntimeAttributes>
                                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                            <real key="value" value="4"/>
                                        </userDefinedRuntimeAttribute>
                                    </userDefinedRuntimeAttributes>
                                </imageView>
                            </subviews>
                            <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                            <constraints>
                                <constraint firstItem="S94-Dy-I35" firstAttribute="top" secondItem="4gA-Co-pfP" secondAttribute="top" constant="26" id="1Vw-SX-tjU"/>
                                <constraint firstAttribute="trailing" secondItem="KEJ-Lk-XRw" secondAttribute="trailing" id="6fH-or-TFb"/>
                                <constraint firstAttribute="bottom" secondItem="P3A-2g-ndw" secondAttribute="bottom" id="9Dc-ra-vdT"/>
                                <constraint firstItem="KEJ-Lk-XRw" firstAttribute="leading" secondItem="4gA-Co-pfP" secondAttribute="leading" id="9n3-WO-T0X"/>
                                <constraint firstAttribute="bottom" secondItem="KEJ-Lk-XRw" secondAttribute="bottom" constant="26" id="Ctd-uk-Juz"/>
                                <constraint firstItem="P3A-2g-ndw" firstAttribute="leading" secondItem="4gA-Co-pfP" secondAttribute="leading" id="JRW-uh-JdQ"/>
                                <constraint firstAttribute="trailing" secondItem="P3A-2g-ndw" secondAttribute="trailing" id="OBs-Pn-pyi"/>
                                <constraint firstAttribute="height" constant="106" id="ZGV-8D-HVm"/>
                                <constraint firstItem="P3A-2g-ndw" firstAttribute="top" secondItem="4gA-Co-pfP" secondAttribute="top" id="kkO-gp-h9g"/>
                                <constraint firstItem="S94-Dy-I35" firstAttribute="centerX" secondItem="4gA-Co-pfP" secondAttribute="centerX" id="pYm-cI-aI0"/>
                                <constraint firstAttribute="width" constant="106" id="uh4-UW-Jyq"/>
                            </constraints>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                    <real key="value" value="4"/>
                                </userDefinedRuntimeAttribute>
                                <userDefinedRuntimeAttribute type="number" keyPath="ld_borderWidthXIB">
                                    <real key="value" value="1"/>
                                </userDefinedRuntimeAttribute>
                                <userDefinedRuntimeAttribute type="color" keyPath="ld_borderColorXIB">
                                    <color key="value" red="0.92156862745098034" green="0.92156862745098034" blue="0.92156862745098034" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                </userDefinedRuntimeAttribute>
                                <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                            </userDefinedRuntimeAttributes>
                            <connections>
                                <action selector="uploadImgAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="YA8-cV-gtn"/>
                            </connections>
                        </view>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="nOI-d7-0hh">
                            <rect key="frame" x="60" y="253.99999999999994" width="197" height="44"/>
                            <color key="backgroundColor" name="ThemeColor"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="44" id="mcx-vf-XXD"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" title="Submit">
                                <color key="titleColor" red="0.16862745098039217" green="0.16862745098039217" blue="0.16862745098039217" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                            </state>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="number" keyPath="jq_xibCornerRadius">
                                    <real key="value" value="22"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                            <connections>
                                <action selector="submitAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="xZK-qe-Zqg"/>
                            </connections>
                        </button>
                        <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="h8e-DE-GAc">
                            <rect key="frame" x="76.333333333333329" y="80.333333333333314" width="201.66666666666669" height="108"/>
                            <subviews>
                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="RVS-TN-hI7">
                                    <rect key="frame" x="0.0" y="0.0" width="201.66666666666666" height="27"/>
                                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                    <state key="normal" title="GET OUT TICKET">
                                        <color key="titleColor" red="0.16862745100000001" green="0.16862745100000001" blue="0.16862745100000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    </state>
                                    <connections>
                                        <action selector="contentTapAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="gVi-Bc-h5N"/>
                                    </connections>
                                </button>
                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="3dr-Uy-qQi">
                                    <rect key="frame" x="0.0" y="27" width="201.66666666666666" height="27"/>
                                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                    <state key="normal" title="GET IN TICKET">
                                        <color key="titleColor" red="0.16862745100000001" green="0.16862745100000001" blue="0.16862745100000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    </state>
                                    <connections>
                                        <action selector="contentTapAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="XC4-df-aaf"/>
                                    </connections>
                                </button>
                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="27v-qH-2cS">
                                    <rect key="frame" x="0.0" y="54" width="201.66666666666666" height="27"/>
                                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                    <state key="normal" title="POD">
                                        <color key="titleColor" red="0.16862745100000001" green="0.16862745100000001" blue="0.16862745100000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    </state>
                                    <connections>
                                        <action selector="contentTapAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="25y-r0-CWJ"/>
                                    </connections>
                                </button>
                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Z2x-kg-exV">
                                    <rect key="frame" x="0.0" y="81" width="201.66666666666666" height="27"/>
                                    <fontDescription key="fontDescription" type="system" pointSize="12"/>
                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                    <state key="normal" title="OTHER">
                                        <color key="titleColor" red="0.16862745100000001" green="0.16862745100000001" blue="0.16862745100000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    </state>
                                    <connections>
                                        <action selector="contentTapAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="nFo-UA-zXk"/>
                                    </connections>
                                </button>
                            </subviews>
                            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
                            <userDefinedRuntimeAttributes>
                                <userDefinedRuntimeAttribute type="color" keyPath="ld_borderColorXIB">
                                    <color key="value" red="0.92156862750000001" green="0.92156862750000001" blue="0.92156862750000001" alpha="0.55000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                                </userDefinedRuntimeAttribute>
                                <userDefinedRuntimeAttribute type="number" keyPath="ld_borderWidthXIB">
                                    <real key="value" value="1"/>
                                </userDefinedRuntimeAttribute>
                            </userDefinedRuntimeAttributes>
                        </stackView>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstItem="fLq-ZD-AvY" firstAttribute="top" secondItem="ksx-JI-PcG" secondAttribute="bottom" constant="37" id="0vk-5N-y7b"/>
                        <constraint firstItem="nOI-d7-0hh" firstAttribute="leading" secondItem="5Ac-fj-q74" secondAttribute="leading" constant="60" id="1c8-mz-Hub"/>
                        <constraint firstAttribute="width" secondItem="5Ac-fj-q74" secondAttribute="height" multiplier="1:1" id="65Z-Oz-dzK"/>
                        <constraint firstItem="4gA-Co-pfP" firstAttribute="top" secondItem="LNl-RO-RsL" secondAttribute="bottom" constant="22" id="6wq-Z2-lc6"/>
                        <constraint firstAttribute="trailing" secondItem="mOl-90-rBi" secondAttribute="trailing" constant="10" id="9eU-bJ-9ra"/>
                        <constraint firstItem="mOl-90-rBi" firstAttribute="top" secondItem="5Ac-fj-q74" secondAttribute="top" constant="10" id="Bvx-35-hgn"/>
                        <constraint firstItem="LNl-RO-RsL" firstAttribute="leading" secondItem="ksx-JI-PcG" secondAttribute="trailing" constant="25" id="CMG-ce-8cH"/>
                        <constraint firstItem="h8e-DE-GAc" firstAttribute="top" secondItem="LNl-RO-RsL" secondAttribute="bottom" id="DKN-Vo-sMa"/>
                        <constraint firstAttribute="trailing" secondItem="LNl-RO-RsL" secondAttribute="trailing" constant="39" id="HAp-FX-0gs"/>
                        <constraint firstItem="4gA-Co-pfP" firstAttribute="leading" secondItem="fLq-ZD-AvY" secondAttribute="trailing" constant="10" id="ILK-cp-ODA"/>
                        <constraint firstItem="ksx-JI-PcG" firstAttribute="leading" secondItem="5Ac-fj-q74" secondAttribute="leading" constant="17" id="Pz8-z9-ev9"/>
                        <constraint firstAttribute="trailing" secondItem="nOI-d7-0hh" secondAttribute="trailing" constant="60" id="RzL-76-cgw"/>
                        <constraint firstItem="fLq-ZD-AvY" firstAttribute="leading" secondItem="ksx-JI-PcG" secondAttribute="leading" id="WyL-4e-Ebs"/>
                        <constraint firstItem="h8e-DE-GAc" firstAttribute="trailing" secondItem="LNl-RO-RsL" secondAttribute="trailing" id="kFh-nv-plQ"/>
                        <constraint firstItem="h8e-DE-GAc" firstAttribute="leading" secondItem="LNl-RO-RsL" secondAttribute="leading" id="nb4-Wz-j5q"/>
                        <constraint firstItem="LNl-RO-RsL" firstAttribute="centerY" secondItem="ksx-JI-PcG" secondAttribute="centerY" id="qXD-Nu-fPD"/>
                        <constraint firstAttribute="bottom" secondItem="nOI-d7-0hh" secondAttribute="bottom" constant="19" id="rWO-mv-bph"/>
                        <constraint firstItem="ksx-JI-PcG" firstAttribute="top" secondItem="5Ac-fj-q74" secondAttribute="top" constant="56" id="tzm-Gs-tfZ"/>
                    </constraints>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
                            <real key="value" value="8"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </view>
            </subviews>
            <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
            <constraints>
                <constraint firstItem="5Ac-fj-q74" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" id="3x1-1E-0Mm"/>
                <constraint firstItem="5Ac-fj-q74" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="38" id="GVh-Zm-YvD"/>
                <constraint firstItem="5Ac-fj-q74" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="bVN-F7-JRk"/>
                <constraint firstAttribute="trailing" secondItem="5Ac-fj-q74" secondAttribute="trailing" constant="38" id="v9l-wK-OYj"/>
            </constraints>
            <connections>
                <outlet property="VStack" destination="h8e-DE-GAc" id="l3e-Hj-3vf"/>
                <outlet property="imgV" destination="P3A-2g-ndw" id="XbA-CZ-A7z"/>
                <outlet property="label_content" destination="vLN-zs-Br1" id="Ym5-Ii-g2B"/>
                <outlet property="view_container" destination="5Ac-fj-q74" id="ank-hb-pN8"/>
            </connections>
            <point key="canvasLocation" x="136.64122137404578" y="20.422535211267608"/>
        </view>
    </objects>
    <resources>
        <image name="btn_add" width="24" height="24"/>
        <image name="btn_close" width="14" height="14"/>
        <image name="icon_arrow_down" width="12" height="7"/>
        <namedColor name="ThemeColor">
            <color red="0.99199998378753662" green="0.82700002193450928" blue="0.016000000759959221" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
        </namedColor>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
BrokerDriver/Tools/CommonAlertView.swift
New file
@@ -0,0 +1,65 @@
//
//  CommonAlertView.swift
//  BrokerDriver
//
//  Created by 无故事王国 on 2023/5/4.
//
import UIKit
import RxSwift
class CommonAlertView: UIView,JQNibView{
    @IBOutlet weak var view_container: UIView!
    @IBOutlet weak var label_title: UILabel!
    @IBOutlet weak var label_content: UILabel!
    @IBOutlet weak var btn1: UIButton!
    @IBOutlet weak var btn2: UIButton!
    private var clouse:(()->Void)?
    private var disposeBag:DisposeBag!
    override func awakeFromNib() {
        super.awakeFromNib()
        alpha = 0
        view_container.transform = CGAffineTransform(scaleX: 0.1, y: 0.1)
        layoutIfNeeded()
        disposeBag = DisposeBag()
    }
    static func show(title:String,content:String,bt1:String,bt2:String,clouse:@escaping()->Void){
        let pickerView = CommonAlertView.jq_loadNibView()
        pickerView.frame = screnDelegate?.window?.frame ?? .zero
        pickerView.label_title.text = title
        pickerView.label_content.text = content
        pickerView.clouse = clouse
        pickerView.btn1.setTitle(bt1, for: .normal)
        pickerView.btn2.setTitle(bt2, for: .normal)
        screnDelegate?.window?.addSubview(pickerView)
        UIView.animate(withDuration: 0.4) {
            pickerView.alpha = 1
            pickerView.view_container.transform = CGAffineTransform(scaleX: 1.0, y: 1.0)
            pickerView.layoutIfNeeded()
        }
    }
    @IBAction func cancelAction(_ sender: UIButton) {
        UIView.animate(withDuration: 0.5) {
            self.alpha = 0
            self.view_container.transform = CGAffineTransform(scaleX: 0.1, y: 0.1)
        } completion: { _ in
            self.removeFromSuperview()
        }
    }
    @IBAction func completeAction(_ sender: UIButton) {
        UIView.animate(withDuration: 0.5) {
            self.alpha = 0
            self.view_container.transform = CGAffineTransform(scaleX: 0.1, y: 0.1)
        } completion: { _ in
            self.clouse?()
            self.removeFromSuperview()
        }
    }
}
BrokerDriver/Tools/CommonAlertView.xib
New file
@@ -0,0 +1,142 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21678"/>
        <capability name="Named colors" minToolsVersion="9.0"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="CommonAlertView" customModule="BrokerDriver" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="nQ4-TJ-E8O">
                    <rect key="frame" x="38" y="319.33333333333331" width="317" height="213.33333333333331"/>
                    <subviews>
                        <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ui3-nY-QhB">
                            <rect key="frame" x="286" y="10" width="21" height="21"/>
                            <constraints>
                                <constraint firstAttribute="width" constant="21" id="2ax-qe-Zzq"/>
                                <constraint firstAttribute="height" constant="21" id="qdl-51-2xj"/>
                            </constraints>
                            <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                            <state key="normal" image="btn_close"/>
                        </button>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Title" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="RKt-Eh-MbE">
                            <rect key="frame" x="139.33333333333334" y="39" width="38.333333333333343" height="25"/>
                            <constraints>
                                <constraint firstAttribute="height" constant="25" id="ajn-Pe-X7s"/>
                            </constraints>
                            <fontDescription key="fontDescription" type="boldSystem" pointSize="18"/>
                            <nil key="textColor"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hMJ-QZ-T7l">
                            <rect key="frame" x="33" y="89" width="250" height="19.333333333333329"/>
                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
                            <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="0.55000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
                            <nil key="highlightedColor"/>
                        </label>
                        <stackView opaque="NO" contentMode="scaleToFill" spacing="17" translatesAutoresizingMaskIntoConstraints="NO" id="ZrZ-uP-15H">
                            <rect key="frame" x="24" y="148.33333333333337" width="269" height="44"/>
                            <subviews>
                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="x6C-XQ-4bx">
                                    <rect key="frame" x="0.0" y="0.0" width="126" height="44"/>
                                    <color key="backgroundColor" red="0.87058823529411766" green="0.87058823529411766" blue="0.87058823529411766" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    <constraints>
                                        <constraint firstAttribute="width" constant="126" id="65W-Xx-1Hu"/>
                                    </constraints>
                                    <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                    <state key="normal" title="btn1">
                                        <color key="titleColor" red="0.16862745098039217" green="0.16862745098039217" blue="0.16862745098039217" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    </state>
                                    <userDefinedRuntimeAttributes>
                                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                            <real key="value" value="22"/>
                                        </userDefinedRuntimeAttribute>
                                    </userDefinedRuntimeAttributes>
                                    <connections>
                                        <action selector="cancelAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="6r9-Tx-IIM"/>
                                    </connections>
                                </button>
                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ybA-rc-yPK">
                                    <rect key="frame" x="143" y="0.0" width="126" height="44"/>
                                    <color key="backgroundColor" name="ThemeColor"/>
                                    <constraints>
                                        <constraint firstAttribute="width" constant="126" id="4go-w9-rcs"/>
                                    </constraints>
                                    <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                    <state key="normal" title="btn1">
                                        <color key="titleColor" red="0.16862745100000001" green="0.16862745100000001" blue="0.16862745100000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    </state>
                                    <userDefinedRuntimeAttributes>
                                        <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/>
                                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                                            <real key="value" value="22"/>
                                        </userDefinedRuntimeAttribute>
                                    </userDefinedRuntimeAttributes>
                                    <connections>
                                        <action selector="completeAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="zvR-pi-zCH"/>
                                    </connections>
                                </button>
                            </subviews>
                            <constraints>
                                <constraint firstAttribute="height" constant="44" id="8sC-bT-is6"/>
                            </constraints>
                        </stackView>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstItem="ui3-nY-QhB" firstAttribute="top" secondItem="nQ4-TJ-E8O" secondAttribute="top" constant="10" id="6eB-bx-39b"/>
                        <constraint firstItem="RKt-Eh-MbE" firstAttribute="centerX" secondItem="nQ4-TJ-E8O" secondAttribute="centerX" id="76j-8q-Jm6"/>
                        <constraint firstAttribute="trailing" secondItem="ui3-nY-QhB" secondAttribute="trailing" constant="10" id="CyU-gA-1lv"/>
                        <constraint firstItem="ZrZ-uP-15H" firstAttribute="top" secondItem="hMJ-QZ-T7l" secondAttribute="bottom" constant="40" id="FT3-od-qfo"/>
                        <constraint firstItem="hMJ-QZ-T7l" firstAttribute="leading" secondItem="nQ4-TJ-E8O" secondAttribute="leading" constant="33" id="Ivj-vx-dlx"/>
                        <constraint firstItem="RKt-Eh-MbE" firstAttribute="top" secondItem="nQ4-TJ-E8O" secondAttribute="top" constant="39" id="LRl-DK-Fpa"/>
                        <constraint firstAttribute="trailing" secondItem="hMJ-QZ-T7l" secondAttribute="trailing" constant="34" id="SH6-jE-kji"/>
                        <constraint firstItem="hMJ-QZ-T7l" firstAttribute="top" secondItem="RKt-Eh-MbE" secondAttribute="bottom" constant="25" id="mV3-XK-aBH"/>
                        <constraint firstItem="ZrZ-uP-15H" firstAttribute="centerX" secondItem="nQ4-TJ-E8O" secondAttribute="centerX" id="nvP-Qg-oVU"/>
                        <constraint firstAttribute="bottom" secondItem="ZrZ-uP-15H" secondAttribute="bottom" constant="21" id="wuB-hC-BYA"/>
                    </constraints>
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB">
                            <real key="value" value="8"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </view>
            </subviews>
            <color key="backgroundColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="0.55000000000000004" colorSpace="custom" customColorSpace="sRGB"/>
            <constraints>
                <constraint firstItem="nQ4-TJ-E8O" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="DMF-Yx-OXb"/>
                <constraint firstItem="nQ4-TJ-E8O" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="38" id="KJu-eS-Kmp"/>
                <constraint firstItem="nQ4-TJ-E8O" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" id="cmC-mO-N4s"/>
                <constraint firstAttribute="trailing" secondItem="nQ4-TJ-E8O" secondAttribute="trailing" constant="38" id="hbG-9f-YpR"/>
            </constraints>
            <connections>
                <outlet property="btn1" destination="x6C-XQ-4bx" id="dYz-du-F6i"/>
                <outlet property="btn2" destination="ybA-rc-yPK" id="7vz-6l-v4L"/>
                <outlet property="label_content" destination="hMJ-QZ-T7l" id="YT9-Nk-EGr"/>
                <outlet property="label_title" destination="RKt-Eh-MbE" id="HyF-9L-82z"/>
                <outlet property="view_container" destination="nQ4-TJ-E8O" id="w5x-aB-nI2"/>
            </connections>
            <point key="canvasLocation" x="138" y="21"/>
        </view>
    </objects>
    <resources>
        <image name="btn_close" width="14" height="14"/>
        <namedColor name="ThemeColor">
            <color red="0.99199998378753662" green="0.82700002193450928" blue="0.016000000759959221" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
        </namedColor>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
BrokerDriver/Tools/PhotoPickerView.swift
New file
@@ -0,0 +1,105 @@
    //
    //  PhotoPickerView.swift
    //  BrokerDriver
    //
    //  Created by 无故事王国 on 2023/4/28.
    //
import UIKit
import QMUIKit
import TZImagePickerController
class PhotoPickerView: UIView,JQNibView{
    @IBOutlet weak var btn_1: QMUIButton!
    @IBOutlet weak var btn_2: QMUIButton!
    @IBOutlet weak var view_container: UIView!
    @IBOutlet weak var view_heiCons: NSLayoutConstraint!
    private var clouse:((Data)->Void)?
    override func awakeFromNib() {
        super.awakeFromNib()
        btn_1.imagePosition = .left
        btn_2.imagePosition = .left
        btn_1.spacingBetweenImageAndTitle = 7
        btn_2.spacingBetweenImageAndTitle = 7
        view_heiCons.constant = 0
        alpha = 0
        layoutIfNeeded()
    }
    static func show(_ clouse:@escaping (Data)->Void){
        let pickerView = PhotoPickerView.jq_loadNibView()
        pickerView.frame = screnDelegate?.window?.frame ?? .zero
        screnDelegate?.window?.addSubview(pickerView)
        pickerView.view_heiCons.constant = JQ_ScreenW * 0.394 + UIDevice.jq_safeEdges.bottom
        pickerView.clouse = clouse
        UIView.animate(withDuration: 0.4) {
            pickerView.alpha = 1
            pickerView.layoutIfNeeded()
        }
    }
    @IBAction func openAction(_ sender: UIButton) {
        if sender == btn_1{
            guard UIImagePickerController.isSourceTypeAvailable(.camera) else {
                alert(msg: "The Camera unavailable");return
            }
                //iOS15.0未完全授权会崩溃
            TZImageManager.default().requestAuthorization {
                let p = UIImagePickerController()
                p.delegate = self
                p.allowsEditing = false
                p.sourceType = .camera
                JQ_currentViewController().present(p, animated: true, completion: nil)
            }
        }else{
            let p = TZImagePickerController(maxImagesCount: 1, columnNumber: 4, delegate: self)
            p!.allowTakeVideo = false
            p!.allowTakePicture = false
            p!.sortAscendingByModificationDate = true
            p!.allowPickingVideo = false
            p!.allowCrop = false
            JQ_currentViewController().present(p!, animated: true, completion: nil)
        }
    }
    @IBAction func cancelAction(_ sender: UIButton) {
        closeAction()
    }
    private func closeAction(){
        view_heiCons.constant = 0
        UIView.animate(withDuration: 0.4) {
            self.alpha = 0
            self.layoutIfNeeded()
        }
    }
    override func layoutSubviews() {
        super.layoutSubviews()
        view_container.jq_addCorners(corner: [.topLeft,.topRight], radius: 12)
    }
}
extension PhotoPickerView:TZImagePickerControllerDelegate{
    public func imagePickerController(_ picker: TZImagePickerController!, didFinishPickingPhotos photos: [UIImage]!, sourceAssets assets: [Any]!, isSelectOriginalPhoto: Bool, infos: [[AnyHashable : Any]]!) {
        guard let pngData = photos.first?.pngData() else { return alert(msg: "invaild photo") }
        clouse?(pngData)
        closeAction()
    }
}
extension PhotoPickerView:UIImagePickerControllerDelegate & UINavigationControllerDelegate {
    public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        picker.dismiss(animated: true) { [weak self] in
            guard let originImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage,let pngData =  originImage.pngData() else { return alert(msg: "invaild photo") }
            self?.clouse?(pngData)
            self?.closeAction()
        }
    }
}
BrokerDriver/Tools/PhotoPickerView.xib
New file
@@ -0,0 +1,99 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21678"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="PhotoPickerView" customModule="BrokerDriver" customModuleProvider="target">
            <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jKc-rR-BwC">
                    <rect key="frame" x="0.0" y="652" width="393" height="200"/>
                    <subviews>
                        <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="uGp-fC-fEa">
                            <rect key="frame" x="0.0" y="0.0" width="393" height="135"/>
                            <subviews>
                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="u7B-1i-jKr" customClass="QMUIButton">
                                    <rect key="frame" x="0.0" y="0.0" width="393" height="45"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="45" id="AiZ-5h-7S4"/>
                                    </constraints>
                                    <fontDescription key="fontDescription" type="boldSystem" pointSize="14"/>
                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                    <state key="normal" title="Photograph" image="btn_camera">
                                        <color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    </state>
                                    <connections>
                                        <action selector="openAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="Dls-4e-fDr"/>
                                    </connections>
                                </button>
                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="F5s-WR-9Ue" customClass="QMUIButton">
                                    <rect key="frame" x="0.0" y="45" width="393" height="45"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="45" id="cv5-1I-EFp"/>
                                    </constraints>
                                    <fontDescription key="fontDescription" type="boldSystem" pointSize="14"/>
                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                    <state key="normal" title="Album" image="btn_pic">
                                        <color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    </state>
                                    <connections>
                                        <action selector="openAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="WLi-yi-GWM"/>
                                    </connections>
                                </button>
                                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="XGQ-yn-xqO" customClass="QMUIButton">
                                    <rect key="frame" x="0.0" y="90" width="393" height="45"/>
                                    <constraints>
                                        <constraint firstAttribute="height" constant="45" id="yJn-9m-4ru"/>
                                    </constraints>
                                    <fontDescription key="fontDescription" type="system" pointSize="14"/>
                                    <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
                                    <state key="normal" title="Cancel">
                                        <color key="titleColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                    </state>
                                    <connections>
                                        <action selector="cancelAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="Uvf-ai-qeh"/>
                                    </connections>
                                </button>
                            </subviews>
                        </stackView>
                    </subviews>
                    <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                    <constraints>
                        <constraint firstAttribute="height" constant="200" id="A5L-sv-upc"/>
                        <constraint firstAttribute="trailing" secondItem="uGp-fC-fEa" secondAttribute="trailing" id="Dd8-kk-Rt6"/>
                        <constraint firstItem="uGp-fC-fEa" firstAttribute="top" secondItem="jKc-rR-BwC" secondAttribute="top" id="aUF-Hh-BeO"/>
                        <constraint firstItem="uGp-fC-fEa" firstAttribute="leading" secondItem="jKc-rR-BwC" secondAttribute="leading" id="w3F-sM-unJ"/>
                    </constraints>
                </view>
            </subviews>
            <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
            <constraints>
                <constraint firstAttribute="trailing" secondItem="jKc-rR-BwC" secondAttribute="trailing" id="6PS-UH-U1f"/>
                <constraint firstItem="jKc-rR-BwC" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="fyG-P5-eEN"/>
                <constraint firstAttribute="bottom" secondItem="jKc-rR-BwC" secondAttribute="bottom" id="oe8-bz-d27"/>
            </constraints>
            <connections>
                <outlet property="btn_1" destination="u7B-1i-jKr" id="bhY-li-6G2"/>
                <outlet property="btn_2" destination="F5s-WR-9Ue" id="irv-FE-VZ6"/>
                <outlet property="view_container" destination="jKc-rR-BwC" id="MHX-eG-99p"/>
                <outlet property="view_heiCons" destination="A5L-sv-upc" id="HwW-Z9-QBf"/>
            </connections>
            <point key="canvasLocation" x="132" y="21"/>
        </view>
    </objects>
    <resources>
        <image name="btn_camera" width="16" height="14"/>
        <image name="btn_pic" width="16" height="14"/>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>
Podfile
@@ -13,6 +13,7 @@
  pod 'Alamofire'
  pod 'MBProgressHUD'
  pod 'SwifterSwift'
  pod 'Lantern'
  post_install do |installer|
    installer.pods_project.targets.each do |target|