ソースを参照

1.修改iOS Apex Mobile Result区分不同查询列表显示。

Pen Li 7 年 前
コミット
ed10f5c8dc
25 ファイル変更1015 行追加104 行削除
  1. 54 16
      Apex Mobile/Apex Mobile.xcodeproj/project.pbxproj
  2. 4 5
      Apex Mobile/Apex Mobile/RANetwork.m
  3. 7 2
      Apex Mobile/Apex Mobile/Result/ApexResultViewController.m
  4. 27 0
      Apex Mobile/Apex Mobile/Result/Cell/ApexResultBLInfoCell.h
  5. 214 0
      Apex Mobile/Apex Mobile/Result/Cell/ApexResultBLInfoCell.m
  6. 123 0
      Apex Mobile/Apex Mobile/Result/Cell/ApexResultBLInfoCell.xib
  7. 28 0
      Apex Mobile/Apex Mobile/Result/Cell/ApexResultBookingCell.h
  8. 187 0
      Apex Mobile/Apex Mobile/Result/Cell/ApexResultBookingCell.m
  9. 131 0
      Apex Mobile/Apex Mobile/Result/Cell/ApexResultBookingCell.xib
  10. 1 1
      Apex Mobile/Apex Mobile/Result/Cell/ApexResultContainerCell.h
  11. 3 3
      Apex Mobile/Apex Mobile/Result/Cell/ApexResultContainerCell.m
  12. 1 1
      Apex Mobile/Apex Mobile/Result/Cell/ApexResultContainerCell.xib
  13. 17 0
      Apex Mobile/Apex Mobile/Result/Model/ApexResultAddition.h
  14. 22 0
      Apex Mobile/Apex Mobile/Result/Model/ApexResultAddition.m
  15. 22 0
      Apex Mobile/Apex Mobile/Result/Model/ApexResultBLInfoModel.h
  16. 17 0
      Apex Mobile/Apex Mobile/Result/Model/ApexResultBLInfoModel.m
  17. 6 1
      Apex Mobile/Apex Mobile/Result/Model/ApexResultBaseModel.h
  18. 19 0
      Apex Mobile/Apex Mobile/Result/Model/ApexResultBaseModel.m
  19. 22 0
      Apex Mobile/Apex Mobile/Result/Model/ApexResultBookingModel.h
  20. 22 0
      Apex Mobile/Apex Mobile/Result/Model/ApexResultBookingModel.m
  21. 1 10
      Apex Mobile/Apex Mobile/Result/Model/ApexResultContainerModel.h
  22. 18 0
      Apex Mobile/Apex Mobile/Result/Model/ApexResultContainerModel.m
  23. 0 48
      Apex Mobile/Apex Mobile/Result/Model/ApexResultShipModel.m
  24. 31 12
      Apex Mobile/Apex Mobile/Result/Presenter/ApexResultPresenter.m
  25. 38 5
      Apex Mobile/Apex Mobile/Result/TableDataSource/ApexResultViewController+TableDataSource.m

+ 54 - 16
Apex Mobile/Apex Mobile.xcodeproj/project.pbxproj

@@ -20,11 +20,10 @@
 		4225E42621E08576009D2364 /* ApexResult.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4225E42521E08576009D2364 /* ApexResult.storyboard */; };
 		4225E42D21E08895009D2364 /* ApexResultViewController+TableDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4225E42C21E08895009D2364 /* ApexResultViewController+TableDelegate.m */; };
 		4225E43021E088AA009D2364 /* ApexResultViewController+TableDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 4225E42F21E088AA009D2364 /* ApexResultViewController+TableDataSource.m */; };
-		4225E43321E08A54009D2364 /* ApexResultShipCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4225E43221E08A54009D2364 /* ApexResultShipCell.m */; };
-		4225E43521E08A6A009D2364 /* ApexResultShipCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4225E43421E08A6A009D2364 /* ApexResultShipCell.xib */; };
+		4225E43321E08A54009D2364 /* ApexResultContainerCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4225E43221E08A54009D2364 /* ApexResultContainerCell.m */; };
 		4225E43921E08A8C009D2364 /* ApexResultDocumentCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 4225E43721E08A8C009D2364 /* ApexResultDocumentCell.m */; };
 		4225E43A21E08A8C009D2364 /* ApexResultDocumentCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4225E43821E08A8C009D2364 /* ApexResultDocumentCell.xib */; };
-		4225E43D21E08ACE009D2364 /* ApexResultShipModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4225E43C21E08ACE009D2364 /* ApexResultShipModel.m */; };
+		4225E43D21E08ACE009D2364 /* ApexResultContainerModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4225E43C21E08ACE009D2364 /* ApexResultContainerModel.m */; };
 		4225E44021E08AEF009D2364 /* ApexResultDocumentModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4225E43F21E08AEF009D2364 /* ApexResultDocumentModel.m */; };
 		4225E44321E08B47009D2364 /* ApexResultBaseModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 4225E44221E08B47009D2364 /* ApexResultBaseModel.m */; };
 		4225E44821E099CB009D2364 /* ApexResultPresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4225E44721E099CB009D2364 /* ApexResultPresenter.m */; };
@@ -69,6 +68,14 @@
 		42C6754E21E2F1D4001E3FF4 /* ApexResultAdditionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 42C6754D21E2F1D4001E3FF4 /* ApexResultAdditionView.m */; };
 		42C6755221E32654001E3FF4 /* ApexResultViewController+QuickLook.m in Sources */ = {isa = PBXBuildFile; fileRef = 42C6755121E32654001E3FF4 /* ApexResultViewController+QuickLook.m */; };
 		42DE626220A41907005FB582 /* AMTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 42DE626120A41907005FB582 /* AMTextField.m */; };
+		42FB6EB921F2B9FE00F694AB /* ApexResultContainerCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 42FB6EB821F2B9FE00F694AB /* ApexResultContainerCell.xib */; };
+		42FB6EBD21F2BAB800F694AB /* ApexResultBLInfoCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 42FB6EBB21F2BAB800F694AB /* ApexResultBLInfoCell.m */; };
+		42FB6EBE21F2BAB800F694AB /* ApexResultBLInfoCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 42FB6EBC21F2BAB800F694AB /* ApexResultBLInfoCell.xib */; };
+		42FB6EC221F2BB6400F694AB /* ApexResultBookingCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 42FB6EC021F2BB6400F694AB /* ApexResultBookingCell.m */; };
+		42FB6EC321F2BB6400F694AB /* ApexResultBookingCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 42FB6EC121F2BB6400F694AB /* ApexResultBookingCell.xib */; };
+		42FB6EC621F2BC5300F694AB /* ApexResultBookingModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 42FB6EC521F2BC5300F694AB /* ApexResultBookingModel.m */; };
+		42FB6EC921F2BC8600F694AB /* ApexResultAddition.m in Sources */ = {isa = PBXBuildFile; fileRef = 42FB6EC821F2BC8600F694AB /* ApexResultAddition.m */; };
+		42FB6ECC21F2C0E300F694AB /* ApexResultBLInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 42FB6ECB21F2C0E300F694AB /* ApexResultBLInfoModel.m */; };
 		7101BEC82031389A00CC6E3A /* DetailCellKVNew.m in Sources */ = {isa = PBXBuildFile; fileRef = 7101BEC72031389A00CC6E3A /* DetailCellKVNew.m */; };
 		711BA6C1191E0525002EDE6F /* MessageViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 711BA6C0191E0525002EDE6F /* MessageViewController.m */; };
 		711BA6C4191E0553002EDE6F /* MessageItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 711BA6C3191E0553002EDE6F /* MessageItem.m */; };
@@ -234,14 +241,13 @@
 		4225E42C21E08895009D2364 /* ApexResultViewController+TableDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "ApexResultViewController+TableDelegate.m"; sourceTree = "<group>"; };
 		4225E42E21E088AA009D2364 /* ApexResultViewController+TableDataSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ApexResultViewController+TableDataSource.h"; sourceTree = "<group>"; };
 		4225E42F21E088AA009D2364 /* ApexResultViewController+TableDataSource.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "ApexResultViewController+TableDataSource.m"; sourceTree = "<group>"; };
-		4225E43121E08A54009D2364 /* ApexResultShipCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ApexResultShipCell.h; sourceTree = "<group>"; };
-		4225E43221E08A54009D2364 /* ApexResultShipCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ApexResultShipCell.m; sourceTree = "<group>"; };
-		4225E43421E08A6A009D2364 /* ApexResultShipCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ApexResultShipCell.xib; sourceTree = "<group>"; };
+		4225E43121E08A54009D2364 /* ApexResultContainerCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ApexResultContainerCell.h; sourceTree = "<group>"; };
+		4225E43221E08A54009D2364 /* ApexResultContainerCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ApexResultContainerCell.m; sourceTree = "<group>"; };
 		4225E43621E08A8C009D2364 /* ApexResultDocumentCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ApexResultDocumentCell.h; sourceTree = "<group>"; };
 		4225E43721E08A8C009D2364 /* ApexResultDocumentCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ApexResultDocumentCell.m; sourceTree = "<group>"; };
 		4225E43821E08A8C009D2364 /* ApexResultDocumentCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ApexResultDocumentCell.xib; sourceTree = "<group>"; };
-		4225E43B21E08ACE009D2364 /* ApexResultShipModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ApexResultShipModel.h; sourceTree = "<group>"; };
-		4225E43C21E08ACE009D2364 /* ApexResultShipModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ApexResultShipModel.m; sourceTree = "<group>"; };
+		4225E43B21E08ACE009D2364 /* ApexResultContainerModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ApexResultContainerModel.h; sourceTree = "<group>"; };
+		4225E43C21E08ACE009D2364 /* ApexResultContainerModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ApexResultContainerModel.m; sourceTree = "<group>"; };
 		4225E43E21E08AEF009D2364 /* ApexResultDocumentModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ApexResultDocumentModel.h; sourceTree = "<group>"; };
 		4225E43F21E08AEF009D2364 /* ApexResultDocumentModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ApexResultDocumentModel.m; sourceTree = "<group>"; };
 		4225E44121E08B47009D2364 /* ApexResultBaseModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ApexResultBaseModel.h; sourceTree = "<group>"; };
@@ -318,6 +324,19 @@
 		42C6755121E32654001E3FF4 /* ApexResultViewController+QuickLook.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "ApexResultViewController+QuickLook.m"; sourceTree = "<group>"; };
 		42DE626020A41907005FB582 /* AMTextField.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AMTextField.h; sourceTree = "<group>"; };
 		42DE626120A41907005FB582 /* AMTextField.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AMTextField.m; sourceTree = "<group>"; };
+		42FB6EB821F2B9FE00F694AB /* ApexResultContainerCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ApexResultContainerCell.xib; sourceTree = "<group>"; };
+		42FB6EBA21F2BAB800F694AB /* ApexResultBLInfoCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ApexResultBLInfoCell.h; sourceTree = "<group>"; };
+		42FB6EBB21F2BAB800F694AB /* ApexResultBLInfoCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ApexResultBLInfoCell.m; sourceTree = "<group>"; };
+		42FB6EBC21F2BAB800F694AB /* ApexResultBLInfoCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ApexResultBLInfoCell.xib; sourceTree = "<group>"; };
+		42FB6EBF21F2BB6400F694AB /* ApexResultBookingCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ApexResultBookingCell.h; sourceTree = "<group>"; };
+		42FB6EC021F2BB6400F694AB /* ApexResultBookingCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ApexResultBookingCell.m; sourceTree = "<group>"; };
+		42FB6EC121F2BB6400F694AB /* ApexResultBookingCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ApexResultBookingCell.xib; sourceTree = "<group>"; };
+		42FB6EC421F2BC5300F694AB /* ApexResultBookingModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ApexResultBookingModel.h; sourceTree = "<group>"; };
+		42FB6EC521F2BC5300F694AB /* ApexResultBookingModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ApexResultBookingModel.m; sourceTree = "<group>"; };
+		42FB6EC721F2BC8600F694AB /* ApexResultAddition.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ApexResultAddition.h; sourceTree = "<group>"; };
+		42FB6EC821F2BC8600F694AB /* ApexResultAddition.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ApexResultAddition.m; sourceTree = "<group>"; };
+		42FB6ECA21F2C0E300F694AB /* ApexResultBLInfoModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ApexResultBLInfoModel.h; sourceTree = "<group>"; };
+		42FB6ECB21F2C0E300F694AB /* ApexResultBLInfoModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ApexResultBLInfoModel.m; sourceTree = "<group>"; };
 		7101BEC62031389A00CC6E3A /* DetailCellKVNew.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DetailCellKVNew.h; sourceTree = "<group>"; };
 		7101BEC72031389A00CC6E3A /* DetailCellKVNew.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DetailCellKVNew.m; sourceTree = "<group>"; };
 		711BA6BF191E0525002EDE6F /* MessageViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MessageViewController.h; sourceTree = "<group>"; };
@@ -633,12 +652,18 @@
 		4225E42721E085CE009D2364 /* Cell */ = {
 			isa = PBXGroup;
 			children = (
-				4225E43121E08A54009D2364 /* ApexResultShipCell.h */,
-				4225E43221E08A54009D2364 /* ApexResultShipCell.m */,
-				4225E43421E08A6A009D2364 /* ApexResultShipCell.xib */,
+				4225E43121E08A54009D2364 /* ApexResultContainerCell.h */,
+				4225E43221E08A54009D2364 /* ApexResultContainerCell.m */,
+				42FB6EB821F2B9FE00F694AB /* ApexResultContainerCell.xib */,
 				4225E43621E08A8C009D2364 /* ApexResultDocumentCell.h */,
 				4225E43721E08A8C009D2364 /* ApexResultDocumentCell.m */,
 				4225E43821E08A8C009D2364 /* ApexResultDocumentCell.xib */,
+				42FB6EBA21F2BAB800F694AB /* ApexResultBLInfoCell.h */,
+				42FB6EBB21F2BAB800F694AB /* ApexResultBLInfoCell.m */,
+				42FB6EBC21F2BAB800F694AB /* ApexResultBLInfoCell.xib */,
+				42FB6EBF21F2BB6400F694AB /* ApexResultBookingCell.h */,
+				42FB6EC021F2BB6400F694AB /* ApexResultBookingCell.m */,
+				42FB6EC121F2BB6400F694AB /* ApexResultBookingCell.xib */,
 				42C6754C21E2F1D4001E3FF4 /* ApexResultAdditionView.h */,
 				42C6754D21E2F1D4001E3FF4 /* ApexResultAdditionView.m */,
 			);
@@ -650,10 +675,16 @@
 			children = (
 				4225E44121E08B47009D2364 /* ApexResultBaseModel.h */,
 				4225E44221E08B47009D2364 /* ApexResultBaseModel.m */,
-				4225E43B21E08ACE009D2364 /* ApexResultShipModel.h */,
-				4225E43C21E08ACE009D2364 /* ApexResultShipModel.m */,
+				42FB6EC721F2BC8600F694AB /* ApexResultAddition.h */,
+				42FB6EC821F2BC8600F694AB /* ApexResultAddition.m */,
+				4225E43B21E08ACE009D2364 /* ApexResultContainerModel.h */,
+				4225E43C21E08ACE009D2364 /* ApexResultContainerModel.m */,
 				4225E43E21E08AEF009D2364 /* ApexResultDocumentModel.h */,
 				4225E43F21E08AEF009D2364 /* ApexResultDocumentModel.m */,
+				42FB6EC421F2BC5300F694AB /* ApexResultBookingModel.h */,
+				42FB6EC521F2BC5300F694AB /* ApexResultBookingModel.m */,
+				42FB6ECA21F2C0E300F694AB /* ApexResultBLInfoModel.h */,
+				42FB6ECB21F2C0E300F694AB /* ApexResultBLInfoModel.m */,
 			);
 			path = Model;
 			sourceTree = "<group>";
@@ -1459,11 +1490,13 @@
 				715709BC20215E0000EFE5C5 /* LICENSE in Resources */,
 				4225E43A21E08A8C009D2364 /* ApexResultDocumentCell.xib in Resources */,
 				4253900F2079B7C700ECF982 /* KPIPieChartCell.xib in Resources */,
+				42FB6EBE21F2BAB800F694AB /* ApexResultBLInfoCell.xib in Resources */,
 				71E0D1D92022AB7E009A08EB /* Result.storyboard in Resources */,
 				715643DE201C1AE600B04267 /* my.json in Resources */,
 				71807B982021965B00E1F1DD /* fake_tracking.json in Resources */,
 				715643D7201AD99300B04267 /* StaticModeTableViewCell.xib in Resources */,
 				71DA74A818BDDFB5003B46A6 /* about.htm in Resources */,
+				42FB6EB921F2B9FE00F694AB /* ApexResultContainerCell.xib in Resources */,
 				714C39BF19234065004F045B /* Localizable.strings in Resources */,
 				427CF5D02023F5560041472A /* NewImages.xcassets in Resources */,
 				4225E42621E08576009D2364 /* ApexResult.storyboard in Resources */,
@@ -1476,8 +1509,8 @@
 				71807B9E2021ACE500E1F1DD /* fake_search.json in Resources */,
 				715643B720198A1400B04267 /* Main.storyboard in Resources */,
 				7162546D201C412E009E3A41 /* ShippingStatusCell.xib in Resources */,
-				4225E43521E08A6A009D2364 /* ApexResultShipCell.xib in Resources */,
 				420DEF2C20A1899600720524 /* AMCommContentCell.xib in Resources */,
+				42FB6EC321F2BB6400F694AB /* ApexResultBookingCell.xib in Resources */,
 				42BB74092084732D00B9B6E4 /* KPICell.xib in Resources */,
 				42BB740720846B4500B9B6E4 /* KPITableCell.xib in Resources */,
 				719EF8EB18BB839F00EFFF5F /* InfoPlist.strings in Resources */,
@@ -1515,6 +1548,7 @@
 				715709BB20215E0000EFE5C5 /* NSData+Base64.m in Sources */,
 				71375C8F18D96EDE00EBA026 /* TabBarController.m in Sources */,
 				42BB7402208431DA00B9B6E4 /* KPILegendCell.m in Sources */,
+				42FB6EC921F2BC8600F694AB /* ApexResultAddition.m in Sources */,
 				42253C98209C3C0F00879B09 /* AMShipMap.m in Sources */,
 				71951E6F18C6A9A5005024BD /* TouchLabel.m in Sources */,
 				71DA6047190A00F600683003 /* FavoritesData.m in Sources */,
@@ -1549,7 +1583,7 @@
 				715709BA20215E0000EFE5C5 /* NSString+Base64.m in Sources */,
 				71AE427318C47AF900B8EC3D /* SearchViewController.m in Sources */,
 				715643BE2019AA9B00B04267 /* LoginViewController.m in Sources */,
-				4225E43321E08A54009D2364 /* ApexResultShipCell.m in Sources */,
+				4225E43321E08A54009D2364 /* ApexResultContainerCell.m in Sources */,
 				71308AF7191E7B0E0024B2B0 /* MessageDetailItem.m in Sources */,
 				71A565D918C20F5900CDAC07 /* SearchTableAdapter.m in Sources */,
 				719EF8FA18BB839F00EFFF5F /* ApexMobileFirstViewController.m in Sources */,
@@ -1590,6 +1624,7 @@
 				71B7999B2021B22D00F8685E /* AMResultViewController.m in Sources */,
 				425CF097201EB2B500750E32 /* JLRefreshHeader.m in Sources */,
 				42BCACCD209AE342009DDA43 /* AMMapAnnotaion.m in Sources */,
+				42FB6EC221F2BB6400F694AB /* ApexResultBookingCell.m in Sources */,
 				711DC6B218C30A4800FB1749 /* TableCellEdit.m in Sources */,
 				716027D1204D334A003CA085 /* DetailShareItemProvider.m in Sources */,
 				4225E43021E088AA009D2364 /* ApexResultViewController+TableDataSource.m in Sources */,
@@ -1597,6 +1632,7 @@
 				71A01D8218C9BA67003307A9 /* DetailContent.m in Sources */,
 				71A003FC18D680560057CDFD /* RetrievePasswordViewController.m in Sources */,
 				71FCDE0720492B5E00B0746B /* MyQLPreviewController.m in Sources */,
+				42FB6EC621F2BC5300F694AB /* ApexResultBookingModel.m in Sources */,
 				71F67CF919065EA8004E8462 /* SimpleMenu.m in Sources */,
 				719A51BA18C5AB7B0080C075 /* SimpleGridComponent.m in Sources */,
 				42C6754E21E2F1D4001E3FF4 /* ApexResultAdditionView.m in Sources */,
@@ -1607,7 +1643,9 @@
 				71B7998D2021AE7400F8685E /* MDHTMLLabel.m in Sources */,
 				71E0D1D72022AB7E009A08EB /* FullyShowViewController.m in Sources */,
 				719EF8ED18BB839F00EFFF5F /* main.m in Sources */,
+				42FB6ECC21F2C0E300F694AB /* ApexResultBLInfoModel.m in Sources */,
 				717D76EB18C7F8120070302D /* Reachability.m in Sources */,
+				42FB6EBD21F2BAB800F694AB /* ApexResultBLInfoCell.m in Sources */,
 				715709A720215B5100EFE5C5 /* ioapi.c in Sources */,
 				4253900E2079B7C700ECF982 /* KPIPieChartCell.m in Sources */,
 				42BB740620846B4500B9B6E4 /* KPITableCell.m in Sources */,
@@ -1631,7 +1669,7 @@
 				425390232079B99B00ECF982 /* XYPieChartView.m in Sources */,
 				71570999202157BD00EFE5C5 /* RANetworkTaskDelegate.m in Sources */,
 				71A565DF18C212EA00CDAC07 /* Constant.m in Sources */,
-				4225E43D21E08ACE009D2364 /* ApexResultShipModel.m in Sources */,
+				4225E43D21E08ACE009D2364 /* ApexResultContainerModel.m in Sources */,
 				718BE8B0190F9D970046EA6A /* MyAutocompleteView.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;

+ 4 - 5
Apex Mobile/Apex Mobile/RANetwork.m

@@ -1397,13 +1397,12 @@
     // Booking : module_name = Ocean Booking
     NSDictionary *item_booking = @{
                                    @"type": @0,
-                                   @"icon": @"status_ae",
                                    @"title":@"FU YAMA TRADing", // Consignee
                                    @"date":@"03/28/2019 - 04/24/2019", // M.V ETD - M.V ETA
                                    @"port":@"CNYTN - USLAX", // pol pod
                                    @"desc":@"B61180700423", // Booking#
                                    @"detail":@"HUNG TA GARDEN ENTERPRISE CO., LTD", // Shipper
-                                   @"transport_stage": @3,
+                                   @"consignee": @"Martin Jane",
                                    @"addition":@[
                                            @{
                                                @"name":@"Carrier Booking#",
@@ -1425,7 +1424,7 @@
 
     // B/L Info : module_name = Ocean B/L info.
     NSDictionary *item_BL = @{
-                               @"type": @0,
+                               @"type": @1,
                                @"icon": @"status_ae",
                                @"title":@"FU YAMA TRADing", // Consignee
                                @"date":@"03/28/2019 - 04/24/2019", // ETD - ETA Port
@@ -1440,7 +1439,7 @@
 
     // Container : module_name = Container detail
     NSDictionary *item_container = @{
-                                      @"type": @0,
+                                      @"type": @2,
                                       @"icon": @"status_ae",
                                       @"title": @"CN - YC STONE INC",
                                       @"hbol": @"A1901280696",
@@ -1456,7 +1455,7 @@
 
     // Document : module_name = Download Document
     NSDictionary *item_doc = @{
-                                @"type": @1,
+                                @"type": @3,
                                 @"fileName":@"A1811390637FR1-UTA.pdf",
                                 @"fileType":@"HBL",
                                 @"fileDesc":@"BOL:A1811390637, PO#:0001791,0001722,0001885",

+ 7 - 2
Apex Mobile/Apex Mobile/Result/ApexResultViewController.m

@@ -9,7 +9,7 @@
 #import "ApexResultViewController+QuickLook.h"
 #import "ApexResultProtocol.h"
 #import "ApexResultPresenter.h"
-#import "ApexResultShipCell.h"
+#import "ApexResultContainerCell.h"
 #import "ApexResultDocumentCell.h"
 #import "JLRefreshHeader.h"
 #import "JLRefreshFooter.h"
@@ -18,6 +18,9 @@
 #import "MyQLPreviewController.h"
 #import "CustomizeFieldViewController.h"
 
+#import "ApexResultBookingCell.h"
+#import "ApexResultBLInfoCell.h"
+
 
 @interface ApexResultViewController ()<ApexResultProtocol, JLRefreshDelegate>
 
@@ -76,7 +79,9 @@
     self.tableView.tableFooterView = [UIView new];
     self.tableView.tableHeaderView = [UIView new];
     
-    [self.tableView registerNib:[UINib nibWithNibName:@"ApexResultShipCell" bundle:nil] forCellReuseIdentifier:ApexResultShipCell.identifier];
+    [self.tableView registerNib:[UINib nibWithNibName:@"ApexResultBookingCell" bundle:nil] forCellReuseIdentifier:ApexResultBookingCell.identifier];
+    [self.tableView registerNib:[UINib nibWithNibName:@"ApexResultBLInfoCell" bundle:nil] forCellReuseIdentifier:ApexResultBLInfoCell.identifier];
+    [self.tableView registerNib:[UINib nibWithNibName:@"ApexResultContainerCell" bundle:nil] forCellReuseIdentifier:ApexResultContainerCell.identifier];
     [self.tableView registerNib:[UINib nibWithNibName:@"ApexResultDocumentCell" bundle:nil] forCellReuseIdentifier:ApexResultDocumentCell.identifier];
     
     JLRefreshHeader *header = [[JLRefreshHeader alloc] init];

+ 27 - 0
Apex Mobile/Apex Mobile/Result/Cell/ApexResultBLInfoCell.h

@@ -0,0 +1,27 @@
+//
+//  ApexResultBLInfoCell.h
+//  Apex Mobile
+//
+//  Created by Jack on 2019/1/19.
+//  Copyright © 2019 United Software Applications, Inc. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface ApexResultBLInfoCell : UITableViewCell
+
+@property (nonatomic,class,readonly,copy) NSString *identifier;
+
+- (instancetype)setTitle:(NSString *)title;
+- (instancetype)setPort:(NSString *)port;
+- (instancetype)setTime:(NSString *)time;
+- (instancetype)setDescription:(NSString *)desc;
+- (instancetype)setDetail:(NSString *)detail;
+- (instancetype)setIcon:(NSString *)icon;
+- (instancetype)setTransportStage:(NSInteger)stage;
+- (instancetype)setIconSelect:(BOOL)select;
+
+- (instancetype)addAdditionName:(NSString *)name value:(NSString *)value;
+
+@end
+

+ 214 - 0
Apex Mobile/Apex Mobile/Result/Cell/ApexResultBLInfoCell.m

@@ -0,0 +1,214 @@
+//
+//  ApexResultBLInfoCell.m
+//  Apex Mobile
+//
+//  Created by Jack on 2019/1/19.
+//  Copyright © 2019 United Software Applications, Inc. All rights reserved.
+//
+
+#import "ApexResultBLInfoCell.h"
+#import "const.h"
+#import "ApexResultAdditionView.h"
+#import "UIView+RAConstraint.h"
+
+@interface ApexResultBLInfoCell ()
+
+@property (strong, nonatomic) IBOutlet UIView *bgView;
+@property (strong, nonatomic) IBOutlet UILabel *titleLabel;
+@property (strong, nonatomic) IBOutlet UILabel *portLabel;
+@property (strong, nonatomic) IBOutlet UILabel *timeLabel;
+@property (strong, nonatomic) IBOutlet UIImageView *iconView;
+@property (strong, nonatomic) IBOutlet UILabel *descLabel;
+@property (strong, nonatomic) IBOutlet UILabel *detailLabel;
+@property (strong, nonatomic) IBOutlet UIView *transportStageView;
+
+@property (nonatomic,strong) UIView *selectView;
+@property (nonatomic,assign) NSInteger additionCount;
+@property (nonatomic,strong) NSMutableArray<ApexResultAdditionView *> *additionArray;
+
+@end
+
+@implementation ApexResultBLInfoCell
+
+#pragma mark - Override
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+    
+    self.iconView.tintColor=UIColorFromRGB(0x1e7ffb);
+    
+    self.bgView.layer.cornerRadius = 5;
+    self.bgView.layer.borderColor = [UIColor darkGrayColor].CGColor;
+    self.bgView.layer.borderWidth = 0.3;
+    
+    self.titleLabel.textColor = [UIColor colorWithRed:53 / 255.0 green:53 / 255.0 blue:55 / 255.0 alpha:1.0];
+    self.portLabel.textColor = [UIColor colorWithRed:168 / 255.0 green:9 / 255.0 blue:26 / 255.0 alpha:1.0];
+    self.timeLabel.textColor = [UIColor colorWithRed:168 / 255.0 green:9 / 255.0 blue:26 / 255.0 alpha:1.0];
+    self.descLabel.textColor = [UIColor colorWithRed:53 / 255.0 green:53 / 255.0 blue:55 / 255.0 alpha:1.0];
+    
+    self.selectView = [UIView new];
+    self.selectView.layer.cornerRadius = 5;
+    self.selectView.layer.borderColor = [UIColor darkGrayColor].CGColor;
+    self.selectView.layer.borderWidth = 0.3;
+    self.selectView.backgroundColor = [UIColor colorWithWhite:0.7 alpha:0.8];
+    self.selectedBackgroundView = self.selectView;
+    
+    self.additionArray = [NSMutableArray array];
+}
+
+- (void)layoutSubviews {
+    [super layoutSubviews];
+    
+    self.selectView.frame = self.bgView.frame;
+}
+
+- (void)prepareForReuse {
+    [super prepareForReuse];
+    
+    [[[[[[[self setTitle:nil] setPort:nil] setTime:nil] setDescription:nil] setDetail:nil] setIcon:nil] setIconSelect:NO];
+    [self clearAdditionView];
+}
+
+#pragma mark - Getter
+
++ (NSString *)identifier {
+    return NSStringFromClass(self);
+}
+
+#pragma mark - Setter
+
+- (instancetype)setTitle:(NSString *)title{
+    self.titleLabel.text = title;
+    return self;
+}
+
+- (instancetype)setPort:(NSString *)port{
+    self.portLabel.text = port;
+    return self;
+}
+
+- (instancetype)setTime:(NSString *)time {
+    self.timeLabel.text = time;
+    return self;
+}
+
+- (instancetype)setDescription:(NSString *)desc {
+    self.descLabel.text = desc;
+    return self;
+}
+
+- (instancetype)setDetail:(NSString *)detail {
+    self.detailLabel.text = detail;
+    return self;
+}
+
+- (instancetype)setIcon:(NSString *)icon {
+    
+    if (icon) {
+        self.iconView.image = [[UIImage imageNamed:icon] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
+    } else {
+        self.iconView.image = nil;
+    }
+    
+    return self;
+}
+
+- (instancetype)setTransportStage:(NSInteger)stage {
+    
+    UIColor *stageColor;
+    switch (stage) {
+        case 0: {
+            stageColor = [UIColor colorWithRed:0.2 green:0.14 blue:0.12 alpha:1.0];
+        }
+            break;
+        case 1: {
+            stageColor = [UIColor colorWithRed:0.13 green:0.8 blue:0.8 alpha:1.0];
+        }
+            break;
+        case 2: {
+            stageColor = [UIColor colorWithRed:0.25 green:0.13 blue:0.64 alpha:1.0];
+        }
+            break;
+        case 3: {
+            stageColor = [UIColor colorWithRed:8 / 255.0 green:115 / 255.0 blue:3 / 255.0 alpha:1.0];
+        }
+            break;
+        default: {
+            stageColor = [UIColor colorWithRed:0.2 green:0.14 blue:0.12 alpha:1.0];
+        }
+            break;
+    }
+    
+    self.transportStageView.backgroundColor = stageColor;
+    
+    return self;
+}
+
+- (instancetype)setIconSelect:(BOOL)select {
+    if (select) {
+        
+        CGFloat w = CGRectGetWidth(self.iconView.bounds);
+        CGFloat h = CGRectGetHeight(self.iconView.bounds);
+        CGFloat r = MIN(w, h) * 0.5;
+        UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.iconView.bounds cornerRadius:r];
+        CAShapeLayer *mask = [CAShapeLayer layer];
+        mask.lineWidth = 1.0f;
+        mask.strokeColor = [UIColor redColor].CGColor;
+        mask.fillColor = [UIColor clearColor].CGColor;
+        mask.path = path.CGPath;
+        mask.name = @"am_mask";
+        [self.iconView.layer addSublayer:mask];
+        
+    } else {
+        NSMutableArray *mArr = [self.iconView.layer.sublayers mutableCopy];
+        for (CALayer *layer in mArr) {
+            if ([layer isKindOfClass:[CAShapeLayer class]] && [layer.name isEqualToString:@"am_mask"]) {
+                [layer removeFromSuperlayer];
+            }
+        }
+    }
+    return self;
+}
+
+- (instancetype)addAdditionName:(NSString *)name value:(NSString *)value {
+    
+    ApexResultAdditionView *additionView;
+    if (self.additionCount >= self.additionArray.count) {
+        
+        additionView = [ApexResultAdditionView additionView];
+        
+        [self.additionArray addObject:additionView];
+        
+    } else {
+        
+        additionView = [self.additionArray objectAtIndex:self.additionCount];
+    }
+    additionView.titleLabel.text = name;
+    additionView.valueLabel.text = value;
+    
+    [self.bgView addSubview:additionView];
+    __weak typeof(self) weakSelf = self;
+    [additionView ra_applyConstraints:^(RAConstraintMaker *maker) {
+        
+        maker.left.ra_equalTo(weakSelf.bgView.left).ra_offset(10);
+        maker.top.ra_equalTo(weakSelf.bgView.top).ra_offset(110.0f + 25.0f * weakSelf.additionCount);
+        maker.right.ra_equalTo(weakSelf.bgView.right).ra_offset(-10);
+        maker.height.ra_offset(25.0f);
+    }];
+    
+    self.additionCount++;
+    
+    return self;
+}
+
+#pragma mark - Private
+
+- (void)clearAdditionView {
+    for (ApexResultAdditionView *additionView in self.additionArray) {
+        [additionView removeFromSuperview];
+    }
+    self.additionCount = 0;
+}
+
+@end

+ 123 - 0
Apex Mobile/Apex Mobile/Result/Cell/ApexResultBLInfoCell.xib

@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina4_7" orientation="portrait">
+        <adaptation id="fullscreen"/>
+    </device>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/>
+        <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"/>
+        <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" reuseIdentifier="ApexResultBLInfoCell" rowHeight="125" id="MNR-Qg-AK1" customClass="ApexResultBLInfoCell">
+            <rect key="frame" x="0.0" y="0.0" width="509" height="125"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="MNR-Qg-AK1" id="JfL-oL-hBS">
+                <rect key="frame" x="0.0" y="0.0" width="509" height="124.5"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <view clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Lia-Ea-xFv">
+                        <rect key="frame" x="5" y="15" width="499" height="109.5"/>
+                        <subviews>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jEs-6u-6W7">
+                                <rect key="frame" x="494" y="0.0" width="5" height="109.5"/>
+                                <color key="backgroundColor" red="0.0" green="0.56031829119999998" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="5" id="wkT-6u-ime"/>
+                                </constraints>
+                            </view>
+                        </subviews>
+                        <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                        <constraints>
+                            <constraint firstAttribute="trailing" secondItem="jEs-6u-6W7" secondAttribute="trailing" id="dLf-AS-Ddl"/>
+                            <constraint firstAttribute="bottom" secondItem="jEs-6u-6W7" secondAttribute="bottom" id="lnK-ke-Gvj"/>
+                            <constraint firstItem="jEs-6u-6W7" firstAttribute="top" secondItem="Lia-Ea-xFv" secondAttribute="top" id="ydn-Ea-Bc5"/>
+                        </constraints>
+                    </view>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="315 Status" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dHt-7F-b9L">
+                        <rect key="frame" x="15" y="25" width="474" height="21"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="21" id="ykg-wR-4Hd"/>
+                        </constraints>
+                        <fontDescription key="fontDescription" type="system" pointSize="15"/>
+                        <nil key="textColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="jQD-uJ-gde">
+                        <rect key="frame" x="15" y="68.5" width="48" height="48"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="48" id="4Hg-DR-SA1"/>
+                            <constraint firstAttribute="width" constant="48" id="sLb-u5-tRM"/>
+                        </constraints>
+                    </imageView>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="latest update information shows here include location, status, time, etc" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="tpk-XV-njT">
+                        <rect key="frame" x="71" y="91.5" width="418" height="29"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="29" id="k3H-gB-nvw"/>
+                        </constraints>
+                        <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                        <color key="textColor" red="0.36078431370000003" green="0.38823529410000002" blue="0.4039215686" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="A1801380001 (5 containers)" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fLS-IL-wmG">
+                        <rect key="frame" x="71" y="68.5" width="418" height="18"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="18" id="sSf-FK-F0w"/>
+                        </constraints>
+                        <fontDescription key="fontDescription" type="system" pointSize="15"/>
+                        <nil key="textColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="12/09/2017 - 01/20/2018" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="gxA-uE-he0">
+                        <rect key="frame" x="15" y="49" width="140" height="14.5"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                        <nil key="textColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="CNTAO - USLAX" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="j3Z-oj-Njl">
+                        <rect key="frame" x="395.5" y="49" width="93.5" height="14.5"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                        <nil key="textColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="tpk-XV-njT" firstAttribute="leading" secondItem="jQD-uJ-gde" secondAttribute="trailing" constant="8" id="0Nz-dP-VpS"/>
+                    <constraint firstItem="Lia-Ea-xFv" firstAttribute="trailing" secondItem="fLS-IL-wmG" secondAttribute="trailing" constant="15" id="1M4-ZW-wP1"/>
+                    <constraint firstItem="Lia-Ea-xFv" firstAttribute="top" secondItem="JfL-oL-hBS" secondAttribute="top" constant="15" id="2ca-cF-jpu"/>
+                    <constraint firstItem="Lia-Ea-xFv" firstAttribute="trailing" secondItem="dHt-7F-b9L" secondAttribute="trailing" constant="15" id="3zl-57-hJO"/>
+                    <constraint firstItem="dHt-7F-b9L" firstAttribute="leading" secondItem="JfL-oL-hBS" secondAttribute="leading" constant="15" id="5Xd-Lp-36Q"/>
+                    <constraint firstItem="jQD-uJ-gde" firstAttribute="leading" secondItem="JfL-oL-hBS" secondAttribute="leading" constant="15" id="5vB-GE-oIb"/>
+                    <constraint firstItem="gxA-uE-he0" firstAttribute="leading" secondItem="dHt-7F-b9L" secondAttribute="leading" id="AIF-Ou-U1k"/>
+                    <constraint firstItem="fLS-IL-wmG" firstAttribute="top" secondItem="jQD-uJ-gde" secondAttribute="top" id="ELz-gr-L01"/>
+                    <constraint firstItem="dHt-7F-b9L" firstAttribute="top" secondItem="JfL-oL-hBS" secondAttribute="top" constant="25" id="Jsn-rz-sHN"/>
+                    <constraint firstItem="Lia-Ea-xFv" firstAttribute="leading" secondItem="JfL-oL-hBS" secondAttribute="leading" constant="5" id="K5T-hN-WNR"/>
+                    <constraint firstItem="fLS-IL-wmG" firstAttribute="leading" secondItem="jQD-uJ-gde" secondAttribute="trailing" constant="8" id="Ke2-4l-h1Z"/>
+                    <constraint firstItem="Lia-Ea-xFv" firstAttribute="trailing" secondItem="tpk-XV-njT" secondAttribute="trailing" constant="15" id="XDG-1Y-DBH"/>
+                    <constraint firstItem="Lia-Ea-xFv" firstAttribute="trailing" secondItem="j3Z-oj-Njl" secondAttribute="trailing" constant="15" id="YAx-OY-wIc"/>
+                    <constraint firstItem="tpk-XV-njT" firstAttribute="top" secondItem="fLS-IL-wmG" secondAttribute="bottom" constant="5" id="aBs-sN-E2B"/>
+                    <constraint firstItem="j3Z-oj-Njl" firstAttribute="top" secondItem="gxA-uE-he0" secondAttribute="top" id="bDT-m4-pCC"/>
+                    <constraint firstItem="j3Z-oj-Njl" firstAttribute="height" secondItem="gxA-uE-he0" secondAttribute="height" id="cbe-q1-TsA"/>
+                    <constraint firstItem="j3Z-oj-Njl" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="gxA-uE-he0" secondAttribute="trailing" priority="999" constant="5" id="eXm-rB-10q"/>
+                    <constraint firstItem="gxA-uE-he0" firstAttribute="top" secondItem="dHt-7F-b9L" secondAttribute="bottom" constant="3" id="mRk-cP-h8n"/>
+                    <constraint firstAttribute="trailing" secondItem="Lia-Ea-xFv" secondAttribute="trailing" constant="5" id="niP-Tt-VIh"/>
+                    <constraint firstAttribute="bottom" secondItem="Lia-Ea-xFv" secondAttribute="bottom" id="pNj-Tk-ogd"/>
+                    <constraint firstItem="jQD-uJ-gde" firstAttribute="top" secondItem="gxA-uE-he0" secondAttribute="bottom" constant="5" id="vSf-yP-Xs2"/>
+                </constraints>
+            </tableViewCellContentView>
+            <connections>
+                <outlet property="bgView" destination="Lia-Ea-xFv" id="XvV-le-RxQ"/>
+                <outlet property="descLabel" destination="fLS-IL-wmG" id="gUG-9d-51g"/>
+                <outlet property="detailLabel" destination="tpk-XV-njT" id="uQV-OY-III"/>
+                <outlet property="iconView" destination="jQD-uJ-gde" id="sJq-o8-FGj"/>
+                <outlet property="portLabel" destination="j3Z-oj-Njl" id="N8C-JJ-VGH"/>
+                <outlet property="timeLabel" destination="gxA-uE-he0" id="gtY-e2-bZL"/>
+                <outlet property="titleLabel" destination="dHt-7F-b9L" id="W3O-2b-Lv8"/>
+                <outlet property="transportStageView" destination="jEs-6u-6W7" id="W2y-Oc-frs"/>
+            </connections>
+            <point key="canvasLocation" x="271.19999999999999" y="-485.75712143928041"/>
+        </tableViewCell>
+    </objects>
+</document>

+ 28 - 0
Apex Mobile/Apex Mobile/Result/Cell/ApexResultBookingCell.h

@@ -0,0 +1,28 @@
+//
+//  ApexResultBookingCell.h
+//  Apex Mobile
+//
+//  Created by Jack on 2019/1/19.
+//  Copyright © 2019 United Software Applications, Inc. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+
+@interface ApexResultBookingCell : UITableViewCell
+
+@property (nonatomic,class,readonly,copy) NSString *identifier;
+
+- (instancetype)setTitle:(NSString *)title;
+- (instancetype)setPort:(NSString *)port;
+- (instancetype)setTime:(NSString *)time;
+- (instancetype)setDescription:(NSString *)desc;
+- (instancetype)setDetail:(NSString *)detail;
+- (instancetype)setIcon:(NSString *)icon;
+- (instancetype)setIconSelect:(BOOL)select;
+- (instancetype)setConsignee:(NSString *)consignee;
+
+- (instancetype)addAdditionName:(NSString *)name value:(NSString *)value;
+
+@end
+

+ 187 - 0
Apex Mobile/Apex Mobile/Result/Cell/ApexResultBookingCell.m

@@ -0,0 +1,187 @@
+//
+//  ApexResultBookingCell.m
+//  Apex Mobile
+//
+//  Created by Jack on 2019/1/19.
+//  Copyright © 2019 United Software Applications, Inc. All rights reserved.
+//
+
+#import "ApexResultBookingCell.h"
+#import "const.h"
+#import "ApexResultAdditionView.h"
+#import "UIView+RAConstraint.h"
+
+@interface ApexResultBookingCell ()
+
+@property (strong, nonatomic) IBOutlet UIView *bgView;
+@property (strong, nonatomic) IBOutlet UILabel *titleLabel;
+@property (strong, nonatomic) IBOutlet UILabel *portLabel;
+@property (strong, nonatomic) IBOutlet UILabel *timeLabel;
+@property (strong, nonatomic) IBOutlet UIImageView *iconView;
+@property (strong, nonatomic) IBOutlet UILabel *descLabel;
+@property (strong, nonatomic) IBOutlet UILabel *detailLabel;
+@property (strong, nonatomic) IBOutlet UILabel *consigneeLabel;
+
+@property (nonatomic,strong) UIView *selectView;
+@property (nonatomic,assign) NSInteger additionCount;
+@property (nonatomic,strong) NSMutableArray<ApexResultAdditionView *> *additionArray;
+
+@end
+
+@implementation ApexResultBookingCell
+
+#pragma mark - Override
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+    
+    self.iconView.tintColor=UIColorFromRGB(0x1e7ffb);
+    
+    self.bgView.layer.cornerRadius = 5;
+    self.bgView.layer.borderColor = [UIColor darkGrayColor].CGColor;
+    self.bgView.layer.borderWidth = 0.3;
+    
+    self.titleLabel.textColor = [UIColor colorWithRed:53 / 255.0 green:53 / 255.0 blue:55 / 255.0 alpha:1.0];
+    self.portLabel.textColor = [UIColor colorWithRed:168 / 255.0 green:9 / 255.0 blue:26 / 255.0 alpha:1.0];
+    self.timeLabel.textColor = [UIColor colorWithRed:168 / 255.0 green:9 / 255.0 blue:26 / 255.0 alpha:1.0];
+    self.descLabel.textColor = [UIColor colorWithRed:53 / 255.0 green:53 / 255.0 blue:55 / 255.0 alpha:1.0];
+    
+    self.selectView = [UIView new];
+    self.selectView.layer.cornerRadius = 5;
+    self.selectView.layer.borderColor = [UIColor darkGrayColor].CGColor;
+    self.selectView.layer.borderWidth = 0.3;
+    self.selectView.backgroundColor = [UIColor colorWithWhite:0.7 alpha:0.8];
+    self.selectedBackgroundView = self.selectView;
+    
+    self.additionArray = [NSMutableArray array];
+}
+
+- (void)layoutSubviews {
+    [super layoutSubviews];
+    
+    self.selectView.frame = self.bgView.frame;
+}
+
+- (void)prepareForReuse {
+    [super prepareForReuse];
+    
+    [[[[[[[[self setTitle:nil] setPort:nil] setTime:nil] setDescription:nil] setDetail:nil] setIcon:nil] setIconSelect:NO] setConsignee:nil];
+    [self clearAdditionView];
+}
+
+#pragma mark - Getter
+
++ (NSString *)identifier {
+    return NSStringFromClass(self);
+}
+
+#pragma mark - Setter
+
+- (instancetype)setTitle:(NSString *)title{
+    self.titleLabel.text = title;
+    return self;
+}
+
+- (instancetype)setPort:(NSString *)port{
+    self.portLabel.text = port;
+    return self;
+}
+
+- (instancetype)setTime:(NSString *)time {
+    self.timeLabel.text = time;
+    return self;
+}
+
+- (instancetype)setDescription:(NSString *)desc {
+    self.descLabel.text = desc;
+    return self;
+}
+
+- (instancetype)setDetail:(NSString *)detail {
+    self.detailLabel.text = detail;
+    return self;
+}
+
+- (instancetype)setIcon:(NSString *)icon {
+    
+    if (icon) {
+        self.iconView.image = [[UIImage imageNamed:icon] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
+    } else {
+        self.iconView.image = nil;
+    }
+    
+    return self;
+}
+
+- (instancetype)setIconSelect:(BOOL)select {
+    if (select) {
+        
+        CGFloat w = CGRectGetWidth(self.iconView.bounds);
+        CGFloat h = CGRectGetHeight(self.iconView.bounds);
+        CGFloat r = MIN(w, h) * 0.5;
+        UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.iconView.bounds cornerRadius:r];
+        CAShapeLayer *mask = [CAShapeLayer layer];
+        mask.lineWidth = 1.0f;
+        mask.strokeColor = [UIColor redColor].CGColor;
+        mask.fillColor = [UIColor clearColor].CGColor;
+        mask.path = path.CGPath;
+        mask.name = @"am_mask";
+        [self.iconView.layer addSublayer:mask];
+        
+    } else {
+        NSMutableArray *mArr = [self.iconView.layer.sublayers mutableCopy];
+        for (CALayer *layer in mArr) {
+            if ([layer isKindOfClass:[CAShapeLayer class]] && [layer.name isEqualToString:@"am_mask"]) {
+                [layer removeFromSuperlayer];
+            }
+        }
+    }
+    return self;
+}
+
+- (instancetype)setConsignee:(NSString *)consignee {
+    self.consigneeLabel.text = consignee;
+    return self;
+}
+
+- (instancetype)addAdditionName:(NSString *)name value:(NSString *)value {
+    
+    ApexResultAdditionView *additionView;
+    if (self.additionCount >= self.additionArray.count) {
+        
+        additionView = [ApexResultAdditionView additionView];
+        
+        [self.additionArray addObject:additionView];
+        
+    } else {
+        
+        additionView = [self.additionArray objectAtIndex:self.additionCount];
+    }
+    additionView.titleLabel.text = name;
+    additionView.valueLabel.text = value;
+    
+    [self.bgView addSubview:additionView];
+    __weak typeof(self) weakSelf = self;
+    [additionView ra_applyConstraints:^(RAConstraintMaker *maker) {
+        
+        maker.left.ra_equalTo(weakSelf.bgView.left).ra_offset(10);
+        maker.top.ra_equalTo(weakSelf.bgView.top).ra_offset(110.0f + 25.0f * weakSelf.additionCount);
+        maker.right.ra_equalTo(weakSelf.bgView.right).ra_offset(-10);
+        maker.height.ra_offset(25.0f);
+    }];
+    
+    self.additionCount++;
+    
+    return self;
+}
+
+#pragma mark - Private
+
+- (void)clearAdditionView {
+    for (ApexResultAdditionView *additionView in self.additionArray) {
+        [additionView removeFromSuperview];
+    }
+    self.additionCount = 0;
+}
+@end

+ 131 - 0
Apex Mobile/Apex Mobile/Result/Cell/ApexResultBookingCell.xib

@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina4_7" orientation="portrait">
+        <adaptation id="fullscreen"/>
+    </device>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/>
+        <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"/>
+        <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" reuseIdentifier="ApexResultBookingCell" rowHeight="125" id="1fA-Xd-gg7" customClass="ApexResultBookingCell">
+            <rect key="frame" x="0.0" y="0.0" width="509" height="125"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="1fA-Xd-gg7" id="key-Ah-fHQ">
+                <rect key="frame" x="0.0" y="0.0" width="509" height="124.5"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <view clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="vkp-Od-Lhx">
+                        <rect key="frame" x="5" y="15" width="499" height="109.5"/>
+                        <subviews>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="bgF-Uu-iqu">
+                                <rect key="frame" x="499" y="0.0" width="0.0" height="109.5"/>
+                                <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" id="L7w-Qu-vim"/>
+                                </constraints>
+                            </view>
+                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Consignee" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qpY-D6-jHt">
+                                <rect key="frame" x="420" y="14" width="69" height="17"/>
+                                <fontDescription key="fontDescription" type="system" pointSize="14"/>
+                                <nil key="textColor"/>
+                                <nil key="highlightedColor"/>
+                            </label>
+                        </subviews>
+                        <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                        <constraints>
+                            <constraint firstItem="bgF-Uu-iqu" firstAttribute="top" secondItem="vkp-Od-Lhx" secondAttribute="top" id="2Sv-nx-dwK"/>
+                            <constraint firstAttribute="trailing" secondItem="bgF-Uu-iqu" secondAttribute="trailing" id="LYX-gc-4td"/>
+                            <constraint firstAttribute="bottom" secondItem="bgF-Uu-iqu" secondAttribute="bottom" id="SVs-Co-bh2"/>
+                        </constraints>
+                    </view>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="751" text="315 Status" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ECq-SB-7lL">
+                        <rect key="frame" x="15" y="25" width="73" height="21"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="21" id="eSN-bk-D0c"/>
+                        </constraints>
+                        <fontDescription key="fontDescription" type="system" pointSize="15"/>
+                        <nil key="textColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="vX0-83-b5K">
+                        <rect key="frame" x="15" y="68.5" width="48" height="48"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="48" id="Bno-JA-2qs"/>
+                            <constraint firstAttribute="width" constant="48" id="pWR-e4-wcQ"/>
+                        </constraints>
+                    </imageView>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="latest update information shows here include location, status, time, etc" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fTm-PH-ojL">
+                        <rect key="frame" x="71" y="91.5" width="423" height="29"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="29" id="bLD-Ag-1cF"/>
+                        </constraints>
+                        <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                        <color key="textColor" red="0.36078431370000003" green="0.38823529410000002" blue="0.4039215686" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="A1801380001 (5 containers)" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="igj-Y6-t9J">
+                        <rect key="frame" x="71" y="68.5" width="423" height="18"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="18" id="3Gj-xw-HZ3"/>
+                        </constraints>
+                        <fontDescription key="fontDescription" type="system" pointSize="15"/>
+                        <nil key="textColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="12/09/2017 - 01/20/2018" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hjA-ts-mH7">
+                        <rect key="frame" x="15" y="49" width="140" height="14.5"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                        <nil key="textColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="CNTAO - USLAX" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dfL-hc-YeO">
+                        <rect key="frame" x="400.5" y="49" width="93.5" height="14.5"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                        <nil key="textColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="vX0-83-b5K" firstAttribute="top" secondItem="hjA-ts-mH7" secondAttribute="bottom" constant="5" id="4Eb-4l-jJU"/>
+                    <constraint firstItem="ECq-SB-7lL" firstAttribute="leading" secondItem="key-Ah-fHQ" secondAttribute="leading" constant="15" id="5ll-LJ-isi"/>
+                    <constraint firstItem="fTm-PH-ojL" firstAttribute="top" secondItem="igj-Y6-t9J" secondAttribute="bottom" constant="5" id="709-mR-lw4"/>
+                    <constraint firstItem="vkp-Od-Lhx" firstAttribute="top" secondItem="key-Ah-fHQ" secondAttribute="top" constant="15" id="7J1-TD-EN6"/>
+                    <constraint firstItem="vkp-Od-Lhx" firstAttribute="trailing" secondItem="fTm-PH-ojL" secondAttribute="trailing" constant="10" id="BO9-Ua-ZxZ"/>
+                    <constraint firstItem="hjA-ts-mH7" firstAttribute="top" secondItem="ECq-SB-7lL" secondAttribute="bottom" constant="3" id="DyJ-eT-1To"/>
+                    <constraint firstItem="qpY-D6-jHt" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="ECq-SB-7lL" secondAttribute="trailing" constant="5" id="JSx-wi-yGf"/>
+                    <constraint firstItem="ECq-SB-7lL" firstAttribute="top" secondItem="key-Ah-fHQ" secondAttribute="top" constant="25" id="LEi-pd-nzf"/>
+                    <constraint firstItem="hjA-ts-mH7" firstAttribute="leading" secondItem="ECq-SB-7lL" secondAttribute="leading" id="MPq-j7-8bE"/>
+                    <constraint firstItem="qpY-D6-jHt" firstAttribute="bottom" secondItem="ECq-SB-7lL" secondAttribute="bottom" id="Nge-5c-JfG"/>
+                    <constraint firstItem="igj-Y6-t9J" firstAttribute="top" secondItem="vX0-83-b5K" secondAttribute="top" id="Uge-4z-u9B"/>
+                    <constraint firstAttribute="trailing" secondItem="vkp-Od-Lhx" secondAttribute="trailing" constant="5" id="V8L-wA-Ejx"/>
+                    <constraint firstItem="vkp-Od-Lhx" firstAttribute="leading" secondItem="key-Ah-fHQ" secondAttribute="leading" constant="5" id="Wdo-wP-Ome"/>
+                    <constraint firstItem="dfL-hc-YeO" firstAttribute="top" secondItem="hjA-ts-mH7" secondAttribute="top" id="Ynz-ep-385"/>
+                    <constraint firstItem="igj-Y6-t9J" firstAttribute="leading" secondItem="vX0-83-b5K" secondAttribute="trailing" constant="8" id="aNX-Wf-poa"/>
+                    <constraint firstItem="vkp-Od-Lhx" firstAttribute="trailing" secondItem="dfL-hc-YeO" secondAttribute="trailing" constant="10" id="dTY-rP-zdK"/>
+                    <constraint firstItem="qpY-D6-jHt" firstAttribute="trailing" secondItem="dfL-hc-YeO" secondAttribute="trailing" id="fVv-76-4JT"/>
+                    <constraint firstAttribute="bottom" secondItem="vkp-Od-Lhx" secondAttribute="bottom" id="hMi-pR-Uor"/>
+                    <constraint firstItem="vX0-83-b5K" firstAttribute="leading" secondItem="key-Ah-fHQ" secondAttribute="leading" constant="15" id="nmI-5d-r9u"/>
+                    <constraint firstItem="fTm-PH-ojL" firstAttribute="leading" secondItem="vX0-83-b5K" secondAttribute="trailing" constant="8" id="oIE-fW-IAW"/>
+                    <constraint firstItem="vkp-Od-Lhx" firstAttribute="trailing" secondItem="igj-Y6-t9J" secondAttribute="trailing" constant="10" id="ric-Ak-d25"/>
+                    <constraint firstItem="dfL-hc-YeO" firstAttribute="height" secondItem="hjA-ts-mH7" secondAttribute="height" id="sdL-wW-jGL"/>
+                    <constraint firstItem="dfL-hc-YeO" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="hjA-ts-mH7" secondAttribute="trailing" priority="999" constant="5" id="xAS-mJ-fdb"/>
+                </constraints>
+            </tableViewCellContentView>
+            <connections>
+                <outlet property="bgView" destination="vkp-Od-Lhx" id="rKb-Fz-Kyw"/>
+                <outlet property="consigneeLabel" destination="qpY-D6-jHt" id="ms6-AT-pbn"/>
+                <outlet property="descLabel" destination="igj-Y6-t9J" id="PzM-da-Fap"/>
+                <outlet property="detailLabel" destination="fTm-PH-ojL" id="yQ7-xI-ujz"/>
+                <outlet property="iconView" destination="vX0-83-b5K" id="IXe-1a-SRG"/>
+                <outlet property="portLabel" destination="dfL-hc-YeO" id="H3b-E9-hGY"/>
+                <outlet property="timeLabel" destination="hjA-ts-mH7" id="T8S-Cc-YWH"/>
+                <outlet property="titleLabel" destination="ECq-SB-7lL" id="8GL-no-KAt"/>
+            </connections>
+            <point key="canvasLocation" x="271.19999999999999" y="-485.75712143928041"/>
+        </tableViewCell>
+    </objects>
+</document>

+ 1 - 1
Apex Mobile/Apex Mobile/Result/Cell/ApexResultShipCell.h → Apex Mobile/Apex Mobile/Result/Cell/ApexResultContainerCell.h

@@ -8,7 +8,7 @@
 
 #import <UIKit/UIKit.h>
 
-@interface ApexResultShipCell : UITableViewCell
+@interface ApexResultContainerCell : UITableViewCell
 
 @property (nonatomic,class,readonly,copy) NSString *identifier;
 

+ 3 - 3
Apex Mobile/Apex Mobile/Result/Cell/ApexResultShipCell.m → Apex Mobile/Apex Mobile/Result/Cell/ApexResultContainerCell.m

@@ -6,12 +6,12 @@
 //  Copyright © 2019 United Software Applications, Inc. All rights reserved.
 //
 
-#import "ApexResultShipCell.h"
+#import "ApexResultContainerCell.h"
 #import "const.h"
 #import "ApexResultAdditionView.h"
 #import "UIView+RAConstraint.h"
 
-@interface ApexResultShipCell ()
+@interface ApexResultContainerCell ()
 
 @property (strong, nonatomic) IBOutlet UIView *bgView;
 @property (strong, nonatomic) IBOutlet UILabel *titleLabel;
@@ -28,7 +28,7 @@
 
 @end
 
-@implementation ApexResultShipCell
+@implementation ApexResultContainerCell
 
 #pragma mark - Override
 

+ 1 - 1
Apex Mobile/Apex Mobile/Result/Cell/ApexResultShipCell.xib → Apex Mobile/Apex Mobile/Result/Cell/ApexResultContainerCell.xib

@@ -11,7 +11,7 @@
     <objects>
         <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
         <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
-        <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" reuseIdentifier="ApexResultShipCell" rowHeight="125" id="vcS-48-yoE" customClass="ApexResultShipCell">
+        <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" reuseIdentifier="ApexResultContainerCell" rowHeight="125" id="vcS-48-yoE" customClass="ApexResultContainerCell">
             <rect key="frame" x="0.0" y="0.0" width="509" height="125"/>
             <autoresizingMask key="autoresizingMask"/>
             <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="vcS-48-yoE" id="nD1-ge-9uU">

+ 17 - 0
Apex Mobile/Apex Mobile/Result/Model/ApexResultAddition.h

@@ -0,0 +1,17 @@
+//
+//  ApexResultAddition.h
+//  Apex Mobile
+//
+//  Created by Jack on 2019/1/19.
+//  Copyright © 2019 United Software Applications, Inc. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface ApexResultAddition : NSObject
+
+@property (nonatomic,copy) NSString *name;
+@property (nonatomic,copy) NSString *value;
+
+@end
+

+ 22 - 0
Apex Mobile/Apex Mobile/Result/Model/ApexResultAddition.m

@@ -0,0 +1,22 @@
+//
+//  ApexResultAddition.m
+//  Apex Mobile
+//
+//  Created by Jack on 2019/1/19.
+//  Copyright © 2019 United Software Applications, Inc. All rights reserved.
+//
+
+#import "ApexResultAddition.h"
+
+@implementation ApexResultAddition
+
+- (void)setValue:(id)value forUndefinedKey:(NSString *)key {
+    
+}
+
+- (void)setName:(NSString *)name {
+    name = [NSString stringWithFormat:@"%@: ", name];
+    _name = name;
+}
+
+@end

+ 22 - 0
Apex Mobile/Apex Mobile/Result/Model/ApexResultBLInfoModel.h

@@ -0,0 +1,22 @@
+//
+//  ApexResultBLInfoModel.h
+//  Apex Mobile
+//
+//  Created by Jack on 2019/1/19.
+//  Copyright © 2019 United Software Applications, Inc. All rights reserved.
+//
+
+#import "ApexResultBaseModel.h"
+
+@interface ApexResultBLInfoModel : ApexResultBaseModel
+
+@property (nonatomic,copy) NSString *title;
+@property (nonatomic,copy) NSString *icon;
+@property (nonatomic,copy) NSString *desc;
+@property (nonatomic,copy) NSString *detail;
+@property (nonatomic,copy) NSString *date;
+@property (nonatomic,copy) NSString *port;
+@property (nonatomic,strong) NSNumber *transport_stage;
+
+@end
+

+ 17 - 0
Apex Mobile/Apex Mobile/Result/Model/ApexResultBLInfoModel.m

@@ -0,0 +1,17 @@
+//
+//  ApexResultBLInfoModel.m
+//  Apex Mobile
+//
+//  Created by Jack on 2019/1/19.
+//  Copyright © 2019 United Software Applications, Inc. All rights reserved.
+//
+
+#import "ApexResultBLInfoModel.h"
+
+@implementation ApexResultBLInfoModel
+
+- (CGFloat)height {
+    return 125.0f + self.addition.count * 25.0f;
+}
+
+@end

+ 6 - 1
Apex Mobile/Apex Mobile/Result/Model/ApexResultBaseModel.h

@@ -9,14 +9,19 @@
 #import <UIKit/UIKit.h>
 
 typedef NS_ENUM(NSUInteger, ApexResultType) {
-    ApexResultTypeShip,
+    ApexResultTypeBooking,
+    ApexResultTypeBLInfo,
+    ApexResultTypeContainer,
     ApexResultTypeDocument
 };
 
+@class ApexResultAddition;
 @interface ApexResultBaseModel : NSObject
 
 @property (nonatomic,assign) ApexResultType type;
 @property (nonatomic, readonly, assign) CGFloat height;
+@property (nonatomic,strong) NSArray<ApexResultAddition *> *addition;
+
 @property (nonatomic,strong) NSArray *rowActionParameters;
 
 @end

+ 19 - 0
Apex Mobile/Apex Mobile/Result/Model/ApexResultBaseModel.m

@@ -7,6 +7,7 @@
 //
 
 #import "ApexResultBaseModel.h"
+#import "ApexResultAddition.h"
 
 @implementation ApexResultBaseModel
 
@@ -18,4 +19,22 @@
     return 0;
 }
 
+- (void)setAddition:(NSArray<ApexResultAddition *> *)addition {
+    if (addition && addition.count > 0) {
+        
+        NSMutableArray *additionArr = [NSMutableArray array];
+        for (id add_item in addition) {
+            if ([add_item isKindOfClass:[NSDictionary class]]) {
+                ApexResultAddition *subModel = [ApexResultAddition new];
+                [subModel setValuesForKeysWithDictionary:add_item];
+                [additionArr addObject:subModel];
+            }
+        }
+        _addition = additionArr.copy;
+        
+    } else {
+        _addition = nil;
+    }
+}
+
 @end

+ 22 - 0
Apex Mobile/Apex Mobile/Result/Model/ApexResultBookingModel.h

@@ -0,0 +1,22 @@
+//
+//  ApexResultBookingModel.h
+//  Apex Mobile
+//
+//  Created by Jack on 2019/1/19.
+//  Copyright © 2019 United Software Applications, Inc. All rights reserved.
+//
+
+#import "ApexResultBaseModel.h"
+
+@interface ApexResultBookingModel : ApexResultBaseModel
+
+@property (nonatomic,copy) NSString *title;
+@property (nonatomic,copy) NSString *icon;
+@property (nonatomic,copy) NSString *desc;
+@property (nonatomic,copy) NSString *detail;
+@property (nonatomic,copy) NSString *date;
+@property (nonatomic,copy) NSString *port;
+@property (nonatomic,copy) NSString *consignee;
+
+@end
+

+ 22 - 0
Apex Mobile/Apex Mobile/Result/Model/ApexResultBookingModel.m

@@ -0,0 +1,22 @@
+//
+//  ApexResultBookingModel.m
+//  Apex Mobile
+//
+//  Created by Jack on 2019/1/19.
+//  Copyright © 2019 United Software Applications, Inc. All rights reserved.
+//
+
+#import "ApexResultBookingModel.h"
+
+@implementation ApexResultBookingModel
+
+- (CGFloat)height {
+    return 125.0f + self.addition.count * 25.0f;
+}
+
+- (NSString *)icon {
+    return @"mode_booking";
+}
+
+
+@end

+ 1 - 10
Apex Mobile/Apex Mobile/Result/Model/ApexResultShipModel.h → Apex Mobile/Apex Mobile/Result/Model/ApexResultContainerModel.h

@@ -8,14 +8,7 @@
 
 #import "ApexResultBaseModel.h"
 
-@interface ApexResultAddition : NSObject
-
-@property (nonatomic,copy) NSString *name;
-@property (nonatomic,copy) NSString *value;
-
-@end
-
-@interface ApexResultShipModel : ApexResultBaseModel
+@interface ApexResultContainerModel : ApexResultBaseModel
 
 @property (nonatomic,copy) NSString *title;
 @property (nonatomic,copy) NSString *icon;
@@ -25,6 +18,4 @@
 @property (nonatomic,copy) NSString *port;
 @property (nonatomic,strong) NSNumber *transport_stage;
 
-@property (nonatomic,strong) NSArray<ApexResultAddition *> *addition;
-
 @end

+ 18 - 0
Apex Mobile/Apex Mobile/Result/Model/ApexResultContainerModel.m

@@ -0,0 +1,18 @@
+//
+//  ApexResultShipModel.m
+//  Apex Mobile
+//
+//  Created by Jack on 2019/1/5.
+//  Copyright © 2019 United Software Applications, Inc. All rights reserved.
+//
+
+#import "ApexResultContainerModel.h"
+
+@implementation ApexResultContainerModel
+
+- (CGFloat)height {
+    return 125.0f + self.addition.count * 25.0f;
+}
+
+
+@end

+ 0 - 48
Apex Mobile/Apex Mobile/Result/Model/ApexResultShipModel.m

@@ -1,48 +0,0 @@
-//
-//  ApexResultShipModel.m
-//  Apex Mobile
-//
-//  Created by Jack on 2019/1/5.
-//  Copyright © 2019 United Software Applications, Inc. All rights reserved.
-//
-
-#import "ApexResultShipModel.h"
-
-@implementation ApexResultAddition
-
-- (void)setValue:(id)value forUndefinedKey:(NSString *)key {
-    
-}
-
-- (void)setName:(NSString *)name {
-     name = [NSString stringWithFormat:@"%@: ", name];
-    _name = name;
-}
-
-@end
-
-@implementation ApexResultShipModel
-
-- (CGFloat)height {
-    return 125.0f + self.addition.count * 25.0f;
-}
-
-- (void)setAddition:(NSArray<ApexResultAddition *> *)addition {
-    if (addition && addition.count > 0) {
-        
-        NSMutableArray *additionArr = [NSMutableArray array];
-        for (id add_item in addition) {
-            if ([add_item isKindOfClass:[NSDictionary class]]) {
-                ApexResultAddition *subModel = [ApexResultAddition new];
-                [subModel setValuesForKeysWithDictionary:add_item];
-                [additionArr addObject:subModel];
-            }
-        }
-        _addition = additionArr.copy;
-        
-    } else {
-        _addition = nil;
-    }
-}
-
-@end

+ 31 - 12
Apex Mobile/Apex Mobile/Result/Presenter/ApexResultPresenter.m

@@ -8,9 +8,11 @@
 
 #import "ApexResultPresenter.h"
 #import "ApexResultProtocol.h"
-#import "ApexResultShipModel.h"
+#import "ApexResultContainerModel.h"
 #import "ApexResultDocumentModel.h"
 #import "RANetwork.h"
+#import "ApexResultBookingModel.h"
+#import "ApexResultBLInfoModel.h"
 
 typedef NS_ENUM(NSUInteger, ApexResultFetchDataType) {
     ApexResultFetchDataTypeInitial,
@@ -83,17 +85,34 @@ static const NSInteger detal = 20;
             for (NSDictionary *item in items) {
                 
                 NSInteger type = [[item objectForKey:@"type"] integerValue];
-                if (type == ApexResultTypeShip) {
-                    
-                    ApexResultShipModel *model = [ApexResultShipModel new];
-                    [model setValuesForKeysWithDictionary:item];
-                    [modelsArr addObject:model];
-                    
-                } else if (type == ApexResultTypeDocument) {
-                    
-                    ApexResultDocumentModel *model = [ApexResultDocumentModel new];
-                    [model setValuesForKeysWithDictionary:item];
-                    [modelsArr addObject:model];
+                
+                switch (type) {
+                    case ApexResultTypeBooking: {
+                        ApexResultBookingModel *model = [ApexResultBookingModel new];
+                        [model setValuesForKeysWithDictionary:item];
+                        [modelsArr addObject:model];
+                    }
+                        break;
+                    case ApexResultTypeBLInfo: {
+                        ApexResultBLInfoModel *model = [ApexResultBLInfoModel new];
+                        [model setValuesForKeysWithDictionary:item];
+                        [modelsArr addObject:model];
+                    }
+                        break;
+                    case ApexResultTypeContainer: {
+                        ApexResultContainerModel *model = [ApexResultContainerModel new];
+                        [model setValuesForKeysWithDictionary:item];
+                        [modelsArr addObject:model];
+                    }
+                        break;
+                    case ApexResultTypeDocument: {
+                        ApexResultDocumentModel *model = [ApexResultDocumentModel new];
+                        [model setValuesForKeysWithDictionary:item];
+                        [modelsArr addObject:model];
+                    }
+                        break;
+                    default:
+                        break;
                 }
                 
             } // for

+ 38 - 5
Apex Mobile/Apex Mobile/Result/TableDataSource/ApexResultViewController+TableDataSource.m

@@ -7,11 +7,17 @@
 //
 
 #import "ApexResultViewController+TableDataSource.h"
-#import "ApexResultShipCell.h"
+#import "ApexResultContainerCell.h"
 #import "ApexResultDocumentCell.h"
-#import "ApexResultShipModel.h"
+#import "ApexResultContainerModel.h"
 #import "ApexResultDocumentModel.h"
 #import "ApexResultPresenter.h"
+#import "ApexResultAddition.h"
+
+#import "ApexResultBLInfoCell.h"
+#import "ApexResultBookingCell.h"
+#import "ApexResultBLInfoModel.h"
+#import "ApexResultBookingModel.h"
 
 
 @implementation ApexResultViewController (TableDataSource)
@@ -24,15 +30,42 @@
     ApexResultBaseModel *model = [self.presenter resultModelForIndex:indexPath.row];
     
     switch (model.type) {
-        case ApexResultTypeShip: {
+        case ApexResultTypeBooking: {
+            
+            ApexResultBookingModel *shipModel = (ApexResultBookingModel *)model;
+            ApexResultBookingCell *cell = [tableView dequeueReusableCellWithIdentifier:ApexResultBookingCell.identifier forIndexPath:indexPath];
+            [[[[[[cell setTitle:shipModel.title] setDetail:shipModel.detail] setIcon:shipModel.icon] setPort:shipModel.port] setTime:shipModel.date] setDescription:shipModel.desc];
+            [cell setConsignee:shipModel.consignee];
+            
+            for (ApexResultAddition *addition in shipModel.addition) {
+                [cell addAdditionName:addition.name value:addition.value];
+            }
+            return cell;
+        }
+            break;
+        case ApexResultTypeBLInfo: {
             
-            ApexResultShipModel *shipModel = (ApexResultShipModel *)model;
-            ApexResultShipCell *cell = [tableView dequeueReusableCellWithIdentifier:ApexResultShipCell.identifier forIndexPath:indexPath];
+            ApexResultBLInfoModel *shipModel = (ApexResultBLInfoModel *)model;
+            ApexResultBLInfoCell *cell = [tableView dequeueReusableCellWithIdentifier:ApexResultBLInfoCell.identifier forIndexPath:indexPath];
             [[[[[[cell setTitle:shipModel.title] setDetail:shipModel.detail] setIcon:shipModel.icon] setPort:shipModel.port] setTime:shipModel.date] setDescription:shipModel.desc];
             for (ApexResultAddition *addition in shipModel.addition) {
                 [cell addAdditionName:addition.name value:addition.value];
             }
             return cell;
+        }
+            break;
+        case ApexResultTypeContainer: {
+            
+            ApexResultContainerModel *shipModel = (ApexResultContainerModel *)model;
+            ApexResultContainerCell *cell = [tableView dequeueReusableCellWithIdentifier:ApexResultContainerCell.identifier forIndexPath:indexPath];
+            
+            [[[[[[cell setTitle:shipModel.title] setDetail:shipModel.detail] setIcon:shipModel.icon] setPort:shipModel.port] setTime:shipModel.date] setDescription:shipModel.desc];
+            [cell setTransportStage:shipModel.transport_stage.integerValue];
+            
+            for (ApexResultAddition *addition in shipModel.addition) {
+                [cell addAdditionName:addition.name value:addition.value];
+            }
+            return cell;
             
         }
             break;