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|