Commit b65580f149f593cdbf77b42bd40cef45b627bd94

Authored by liushiyu
2 parents 340fbb99 29260fdd
Showing 34 changed files with 1114 additions and 181 deletions
metaCode.xcodeproj/project.pbxproj
... ... @@ -110,6 +110,11 @@
110 110 19AD65AA2BA041210045A444 /* CNLiveGoodsDetailsTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19AD65A92BA041210045A444 /* CNLiveGoodsDetailsTableViewCell.swift */; };
111 111 19AD65AC2BA16CF20045A444 /* CNLiveShopCommentRequestShareModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19AD65AB2BA16CF20045A444 /* CNLiveShopCommentRequestShareModel.swift */; };
112 112 19AD65AE2BA177C20045A444 /* CNLiveShopGoodsDetailsTableHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19AD65AD2BA177C20045A444 /* CNLiveShopGoodsDetailsTableHeaderView.swift */; };
  113 + 19B153CB2BC3E1870018906C /* CNLiveShopPayController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19B153CA2BC3E1870018906C /* CNLiveShopPayController.swift */; };
  114 + 19B153CD2BC3EB690018906C /* CNLiveShoph5ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19B153CC2BC3EB690018906C /* CNLiveShoph5ViewModel.swift */; };
  115 + 19B153CF2BC540FF0018906C /* CNLivePayOrderInfoModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19B153CE2BC540FF0018906C /* CNLivePayOrderInfoModel.swift */; };
  116 + 19B153D22BC623980018906C /* CNLiveShopPayNeedPaymentCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19B153D12BC623980018906C /* CNLiveShopPayNeedPaymentCell.swift */; };
  117 + 19B153D42BC623BE0018906C /* CNLiveShopPayWeChatAlipayCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19B153D32BC623BE0018906C /* CNLiveShopPayWeChatAlipayCell.swift */; };
113 118 19BB1FDF2AEA3A450094D962 /* CNSlideBaseNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19BB1FDE2AEA3A450094D962 /* CNSlideBaseNavigationController.swift */; };
114 119 19BB1FE12AEB5C220094D962 /* CNLiveShopConsoleController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19BB1FE02AEB5C220094D962 /* CNLiveShopConsoleController.swift */; };
115 120 19BB1FE32AEB8B7C0094D962 /* CNLiveShopConsoleViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19BB1FE22AEB8B7C0094D962 /* CNLiveShopConsoleViewModel.swift */; };
... ... @@ -129,6 +134,7 @@
129 134 19CC4D542ADD163D00308E2A /* CNUpSlideCardPresentationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19CC4D532ADD163D00308E2A /* CNUpSlideCardPresentationController.swift */; };
130 135 19CC4D562ADD19C200308E2A /* String+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19CC4D552ADD19C200308E2A /* String+Extension.swift */; };
131 136 19D2CE632AE8B65D00691757 /* CNLiveDownSlideTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19D2CE622AE8B65D00691757 /* CNLiveDownSlideTool.swift */; };
  137 + 19E302672BC8FEBC00F6B8BD /* CNLliveShopDetailCloseCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19E302662BC8FEBC00F6B8BD /* CNLliveShopDetailCloseCell.swift */; };
132 138 19E9D1602B3A98C200D0FB30 /* CNLiveShopAssociatedGoodsTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19E9D15F2B3A98C200D0FB30 /* CNLiveShopAssociatedGoodsTableViewCell.swift */; };
133 139 19E9D1622B3BBB2E00D0FB30 /* CNLiveFileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19E9D1612B3BBB2E00D0FB30 /* CNLiveFileManager.swift */; };
134 140 19F1C2332AB5728B0083D06C /* CNIDCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19F1C2322AB5728B0083D06C /* CNIDCardView.swift */; };
... ... @@ -379,6 +385,11 @@
379 385 19AD65A92BA041210045A444 /* CNLiveGoodsDetailsTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveGoodsDetailsTableViewCell.swift; sourceTree = "<group>"; };
380 386 19AD65AB2BA16CF20045A444 /* CNLiveShopCommentRequestShareModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopCommentRequestShareModel.swift; sourceTree = "<group>"; };
381 387 19AD65AD2BA177C20045A444 /* CNLiveShopGoodsDetailsTableHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopGoodsDetailsTableHeaderView.swift; sourceTree = "<group>"; };
  388 + 19B153CA2BC3E1870018906C /* CNLiveShopPayController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopPayController.swift; sourceTree = "<group>"; };
  389 + 19B153CC2BC3EB690018906C /* CNLiveShoph5ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShoph5ViewModel.swift; sourceTree = "<group>"; };
  390 + 19B153CE2BC540FF0018906C /* CNLivePayOrderInfoModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLivePayOrderInfoModel.swift; sourceTree = "<group>"; };
  391 + 19B153D12BC623980018906C /* CNLiveShopPayNeedPaymentCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopPayNeedPaymentCell.swift; sourceTree = "<group>"; };
  392 + 19B153D32BC623BE0018906C /* CNLiveShopPayWeChatAlipayCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopPayWeChatAlipayCell.swift; sourceTree = "<group>"; };
382 393 19BB1FDE2AEA3A450094D962 /* CNSlideBaseNavigationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNSlideBaseNavigationController.swift; sourceTree = "<group>"; };
383 394 19BB1FE02AEB5C220094D962 /* CNLiveShopConsoleController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopConsoleController.swift; sourceTree = "<group>"; };
384 395 19BB1FE22AEB8B7C0094D962 /* CNLiveShopConsoleViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopConsoleViewModel.swift; sourceTree = "<group>"; };
... ... @@ -398,6 +409,7 @@
398 409 19CC4D532ADD163D00308E2A /* CNUpSlideCardPresentationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNUpSlideCardPresentationController.swift; sourceTree = "<group>"; };
399 410 19CC4D552ADD19C200308E2A /* String+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Extension.swift"; sourceTree = "<group>"; };
400 411 19D2CE622AE8B65D00691757 /* CNLiveDownSlideTool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveDownSlideTool.swift; sourceTree = "<group>"; };
  412 + 19E302662BC8FEBC00F6B8BD /* CNLliveShopDetailCloseCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLliveShopDetailCloseCell.swift; sourceTree = "<group>"; };
401 413 19E9D15F2B3A98C200D0FB30 /* CNLiveShopAssociatedGoodsTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveShopAssociatedGoodsTableViewCell.swift; sourceTree = "<group>"; };
402 414 19E9D1612B3BBB2E00D0FB30 /* CNLiveFileManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNLiveFileManager.swift; sourceTree = "<group>"; };
403 415 19F1C2322AB5728B0083D06C /* CNIDCardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CNIDCardView.swift; sourceTree = "<group>"; };
... ... @@ -711,20 +723,20 @@
711 723 path = Controller;
712 724 sourceTree = "<group>";
713 725 };
714   - 1938BD182B454DB100390A34 /* ShopUpConsole */ = {
  726 + 1938BD182B454DB100390A34 /* ShopDownConsole */ = {
715 727 isa = PBXGroup;
716 728 children = (
717 729 19BB1FE02AEB5C220094D962 /* CNLiveShopConsoleController.swift */,
718 730 );
719   - path = ShopUpConsole;
  731 + path = ShopDownConsole;
720 732 sourceTree = "<group>";
721 733 };
722   - 1938BD192B454E1500390A34 /* ShopDownDetail */ = {
  734 + 1938BD192B454E1500390A34 /* ShopUpDetail */ = {
723 735 isa = PBXGroup;
724 736 children = (
725 737 19BB1FEB2AF0AB8E0094D962 /* CNLiveDownShopDetailController.swift */,
726 738 );
727   - path = ShopDownDetail;
  739 + path = ShopUpDetail;
728 740 sourceTree = "<group>";
729 741 };
730 742 1938BD1A2B4554A800390A34 /* AuthMainController */ = {
... ... @@ -851,6 +863,7 @@
851 863 191733402B284D4A007BCC04 /* ShopCoupon */,
852 864 19565ED02AF8D904007D6727 /* GoodsManager */,
853 865 1938BD4D2B512F4600390A34 /* ShopDetail */,
  866 + 19B153D02BC623780018906C /* Shoph5Pay */,
854 867 );
855 868 path = Shop;
856 869 sourceTree = "<group>";
... ... @@ -866,6 +879,7 @@
866 879 1938BD4D2B512F4600390A34 /* ShopDetail */ = {
867 880 isa = PBXGroup;
868 881 children = (
  882 + 19E302662BC8FEBC00F6B8BD /* CNLliveShopDetailCloseCell.swift */,
869 883 19BB1FF12AF21A950094D962 /* CNLliveShopDetailBannerCell.swift */,
870 884 19565EBF2AF4DE0E007D6727 /* CNLiveShopDetailBtnsCell.swift */,
871 885 19565EC12AF616CA007D6727 /* CNLiveShopDetailOrderAssetCell.swift */,
... ... @@ -961,6 +975,23 @@
961 975 path = CNLiveDownslideOperationManager;
962 976 sourceTree = "<group>";
963 977 };
  978 + 19B153C92BC3E1550018906C /* ShopPayController */ = {
  979 + isa = PBXGroup;
  980 + children = (
  981 + 19B153CA2BC3E1870018906C /* CNLiveShopPayController.swift */,
  982 + );
  983 + path = ShopPayController;
  984 + sourceTree = "<group>";
  985 + };
  986 + 19B153D02BC623780018906C /* Shoph5Pay */ = {
  987 + isa = PBXGroup;
  988 + children = (
  989 + 19B153D12BC623980018906C /* CNLiveShopPayNeedPaymentCell.swift */,
  990 + 19B153D32BC623BE0018906C /* CNLiveShopPayWeChatAlipayCell.swift */,
  991 + );
  992 + path = Shoph5Pay;
  993 + sourceTree = "<group>";
  994 + };
964 995 19BB1FE42AEB93850094D962 /* Model */ = {
965 996 isa = PBXGroup;
966 997 children = (
... ... @@ -972,6 +1003,7 @@
972 1003 19BB1FE52AEB93B80094D962 /* CNLiveShopUserInfoModel.swift */,
973 1004 19BB1FE72AECAD060094D962 /* CNLiveShopConsoleModel.swift */,
974 1005 19BB1FEF2AF0E5B30094D962 /* CNLiveShopDetailModel.swift */,
  1006 + 19B153CE2BC540FF0018906C /* CNLivePayOrderInfoModel.swift */,
975 1007 );
976 1008 path = Model;
977 1009 sourceTree = "<group>";
... ... @@ -1406,6 +1438,7 @@
1406 1438 1926C28E2AE0D76C00C71DC3 /* CNLiveDownSlideViewModel.swift */,
1407 1439 19BB1FE22AEB8B7C0094D962 /* CNLiveShopConsoleViewModel.swift */,
1408 1440 19BB1FED2AF0E1EC0094D962 /* CNLiveShopDetailViewModel.swift */,
  1441 + 19B153CC2BC3EB690018906C /* CNLiveShoph5ViewModel.swift */,
1409 1442 );
1410 1443 name = ViewModel;
1411 1444 path = HomePage/ViewModel;
... ... @@ -1439,11 +1472,12 @@
1439 1472 1938BD1A2B4554A800390A34 /* AuthMainController */,
1440 1473 1938BD1C2B4555A000390A34 /* WebController */,
1441 1474 1938BD1B2B45557700390A34 /* DownSlideController */,
1442   - 1938BD192B454E1500390A34 /* ShopDownDetail */,
1443   - 1938BD182B454DB100390A34 /* ShopUpConsole */,
  1475 + 1938BD192B454E1500390A34 /* ShopUpDetail */,
  1476 + 1938BD182B454DB100390A34 /* ShopDownConsole */,
1444 1477 1917333D2B284C6B007BCC04 /* ShopCoupon */,
1445 1478 191732FC2B0B3EB4007BCC04 /* GoodsDetail */,
1446 1479 19565EC32AF8ACC2007D6727 /* GoodsManager */,
  1480 + 19B153C92BC3E1550018906C /* ShopPayController */,
1447 1481 );
1448 1482 name = Controller;
1449 1483 path = HomePage/Controller;
... ... @@ -1755,6 +1789,7 @@
1755 1789 19BB202B2AF382150094D962 /* CNLiveAdaptTool.swift in Sources */,
1756 1790 79E672032AFDFA9C00F2F768 /* CNLiveMineSignOutViewController.swift in Sources */,
1757 1791 19565ECD2AF8D256007D6727 /* CNLiveShopGoodsListClassifyView.swift in Sources */,
  1792 + 19E302672BC8FEBC00F6B8BD /* CNLliveShopDetailCloseCell.swift in Sources */,
1758 1793 1938BD322B4B8F0400390A34 /* CNLiveHomePageModel.swift in Sources */,
1759 1794 191732EF2B075C3A007BCC04 /* CNLiveCreateShopClassifyViewController.swift in Sources */,
1760 1795 1938BD302B4B8A3500390A34 /* CNLiveHomePageViewModel.swift in Sources */,
... ... @@ -1788,10 +1823,12 @@
1788 1823 79BB1C162B05C62900C5720C /* CNLiveShopBodyCouponView.swift in Sources */,
1789 1824 798916E92B04532D00D08302 /* CNLiveSavePointDB.swift in Sources */,
1790 1825 1938BD242B468AC900390A34 /* CNLivePlayletHomePageHeaderCell.swift in Sources */,
  1826 + 19B153D42BC623BE0018906C /* CNLiveShopPayWeChatAlipayCell.swift in Sources */,
1791 1827 19FA20172AE22D3C001F7186 /* CNLiveDownSlideRecommendCell.swift in Sources */,
1792 1828 19123FC12ABC11170075C883 /* CNWebViewController.swift in Sources */,
1793 1829 1926C28F2AE0D76C00C71DC3 /* CNLiveDownSlideViewModel.swift in Sources */,
1794 1830 790D019D2A2DCBD000C5978D /* UIView+CNLiveExtensions.swift in Sources */,
  1831 + 19B153CF2BC540FF0018906C /* CNLivePayOrderInfoModel.swift in Sources */,
1795 1832 7C7C62F62A4D72E9007A912E /* CNLiveIdentityDB.swift in Sources */,
1796 1833 191732E52B05FFE8007BCC04 /* CNLiveModalPresentationViewController.swift in Sources */,
1797 1834 799172342AF08D3200DC01A8 /* CNLiveShopViewModel.swift in Sources */,
... ... @@ -1811,6 +1848,7 @@
1811 1848 19565EC72AF8AD38007D6727 /* CNLiveShopNewProductController.swift in Sources */,
1812 1849 798A44F72A3077ED00815935 /* CNLiveHotButton.swift in Sources */,
1813 1850 7CD6753D2A2740B0008354C1 /* CNMainView.swift in Sources */,
  1851 + 19B153CB2BC3E1870018906C /* CNLiveShopPayController.swift in Sources */,
1814 1852 191733662B39237D007BCC04 /* CNLiveShopGoodsManageListTableViewCell.swift in Sources */,
1815 1853 793CAF522A58FCA200882EF4 /* CNLiveMineExchangeViewController.swift in Sources */,
1816 1854 1917334E2B2C1A08007BCC04 /* CNLiveSelectCouponTapView.swift in Sources */,
... ... @@ -1861,7 +1899,9 @@
1861 1899 1938BD222B467C1700390A34 /* CNLivePlayletHomePageCell.swift in Sources */,
1862 1900 1938BD3F2B4BE7C500390A34 /* CNLiveAlbumMsgModel.swift in Sources */,
1863 1901 798A44FF2A30A0A800815935 /* CNLiveInputFeedBackViewController.swift in Sources */,
  1902 + 19B153D22BC623980018906C /* CNLiveShopPayNeedPaymentCell.swift in Sources */,
1864 1903 79282A442A2F1C1E00B5F8CF /* CNLiveLoginAuthView.swift in Sources */,
  1904 + 19B153CD2BC3EB690018906C /* CNLiveShoph5ViewModel.swift in Sources */,
1865 1905 79BB96A62AF21E2800AEA4AC /* CNLiveShopOrderDetailViewController.swift in Sources */,
1866 1906 194455A12B6B3310006C5A2A /* CNWebView.swift in Sources */,
1867 1907 1938BD2C2B4801A700390A34 /* CNHomePageAnimationTransition.swift in Sources */,
... ... @@ -2132,7 +2172,7 @@
2132 2172 CODE_SIGN_ENTITLEMENTS = metaCode/metaCode.entitlements;
2133 2173 CODE_SIGN_IDENTITY = "Apple Development";
2134 2174 CODE_SIGN_STYLE = Automatic;
2135   - CURRENT_PROJECT_VERSION = 1.0.9.24.03.29.15;
  2175 + CURRENT_PROJECT_VERSION = 1.1.0.24.04.15.12;
2136 2176 DEBUG_INFORMATION_FORMAT = dwarf;
2137 2177 DEVELOPMENT_TEAM = 94X49GG3ZW;
2138 2178 ENABLE_BITCODE = NO;
... ... @@ -2205,7 +2245,7 @@
2205 2245 "$(inherited)",
2206 2246 "@executable_path/Frameworks",
2207 2247 );
2208   - MARKETING_VERSION = 1.0.9;
  2248 + MARKETING_VERSION = 1.1.0;
2209 2249 OTHER_LDFLAGS = (
2210 2250 "$(inherited)",
2211 2251 "-all_load",
... ... @@ -2388,7 +2428,7 @@
2388 2428 CODE_SIGN_ENTITLEMENTS = metaCode/metaCode.entitlements;
2389 2429 CODE_SIGN_IDENTITY = "Apple Development";
2390 2430 CODE_SIGN_STYLE = Automatic;
2391   - CURRENT_PROJECT_VERSION = 1.0.9.24.03.29.15;
  2431 + CURRENT_PROJECT_VERSION = 1.1.0.24.04.15.12;
2392 2432 DEVELOPMENT_TEAM = 94X49GG3ZW;
2393 2433 ENABLE_BITCODE = NO;
2394 2434 ENABLE_MODULE_VERIFIER = NO;
... ... @@ -2460,7 +2500,7 @@
2460 2500 "$(inherited)",
2461 2501 "@executable_path/Frameworks",
2462 2502 );
2463   - MARKETING_VERSION = 1.0.9;
  2503 + MARKETING_VERSION = 1.1.0;
2464 2504 OTHER_LDFLAGS = (
2465 2505 "$(inherited)",
2466 2506 "-all_load",
... ...
metaCode/Classes/Config/CNLiveConfigManager.swift
... ... @@ -95,4 +95,9 @@ extension Notification.Name {
95 95 //认证页垂直方向是哪个页面的通知 1上面页 2中间页 3下面页
96 96 public static let kAuthVNumPageChangedNotification = Notification.Name("kAuthVNumPageChangedNotification")
97 97 }
  98 + struct ShopOrderManage{
  99 + //电商h5订单支付成功通知
  100 + public static let kDSSuccessPayOrderNotification = Notification.Name("kDSSuccessPayOrderNotification")
  101 + }
  102 +
98 103 }
... ...
metaCode/Classes/Main/HomePage/Controller/AuthMainController/CNMetaCodeHomePageController.swift
... ... @@ -245,6 +245,7 @@ class CNMetaCodeHomePageController:CNLiveBaseViewController, NewPagedFlowViewDel
245 245 super.viewWillAppear(animated)
246 246 self.view.height = KSreenHeight
247 247 self.topNavView.isHidden = true
  248 + self.hiddenLeftRightView()
248 249 // print("22222222currentPageIndex:\(self.pageFlowView.currentPageIndex)")
249 250 switch vNumPage {
250 251 case .VNumPageMain://中间主页
... ... @@ -263,10 +264,16 @@ class CNMetaCodeHomePageController:CNLiveBaseViewController, NewPagedFlowViewDel
263 264 override func viewDidLayoutSubviews() {
264 265 super.viewDidLayoutSubviews()
265 266 //解决self.view变成KSreenHeight-KTabBarHeight的问题
266   - if self.view.height == KSreenHeight-KTabBarHeight{
  267 + switch vNumPage {
  268 + case .VNumPageMain://中间主页
  269 + break
  270 + case .VNumPageUp://上滑页
  271 + self.view.height = KSreenHeight
  272 + case .VNumPageDown://下滑页
267 273 self.view.height = KSreenHeight
268 274 }
269 275 }
  276 +
270 277 deinit {
271 278 /// 移除通知
272 279 NotificationCenter.default.removeObserver(self)
... ... @@ -505,6 +512,7 @@ class CNMetaCodeHomePageController:CNLiveBaseViewController, NewPagedFlowViewDel
505 512  
506 513 let identityModel = dataArray[toIndex] as! StandListModel
507 514 if let toBannerView = self.pageFlowView.cells[toIndex] as? CNCustomIndexView{
  515 + self.pageFlowView.scrollView.bringSubviewToFront(toBannerView)
508 516 UIView.animate(withDuration: 0.2) {
509 517 toBannerView.downSlideView.frame = CGRectMake(-LeftGap, 0, KSreenWidth, KSreenHeight)
510 518 toBannerView.downSlideView.upSlideVC.view.height = KSreenHeight-DownSlideBottomViewHeight
... ... @@ -515,32 +523,22 @@ class CNMetaCodeHomePageController:CNLiveBaseViewController, NewPagedFlowViewDel
515 523 }
516 524  
517 525 }
518   - if let toBannerViewLeftView = self.pageFlowView.cells[toIndex-1] as? CNCustomIndexView{
519   - UIView.animate(withDuration: 0.2) {
520   - toBannerViewLeftView.downSlideView.frame = CGRectMake(-LeftGap, 0, 0, 0)
521   - toBannerViewLeftView.upSlideView.frame = CGRectMake(-LeftGap, KSreenHeight*2,0, 0)
  526 + if toIndex-1 >= 0{
  527 + if let toBannerViewLeftView = self.pageFlowView.cells[toIndex-1] as? CNCustomIndexView{
  528 + UIView.animate(withDuration: 0.2) {
  529 + toBannerViewLeftView.downSlideView.frame = CGRectMake(-LeftGap, 0, 0, 0)
  530 + toBannerViewLeftView.upSlideView.frame = CGRectMake(-LeftGap, KSreenHeight*2,0, 0)
  531 + }
522 532 }
523 533 }
524   - if let toBannerViewRightView = self.pageFlowView.cells[toIndex+1] as? CNCustomIndexView{
525   - UIView.animate(withDuration: 0.2) {
526   - toBannerViewRightView.downSlideView.frame = CGRectMake(-LeftGap, 0, 0, 0)
527   - toBannerViewRightView.upSlideView.frame = CGRectMake(-LeftGap, KSreenHeight*2,0, 0)
  534 + if toIndex+1 < self.pageFlowView.cells.count{
  535 + if let toBannerViewRightView = self.pageFlowView.cells[toIndex+1] as? CNCustomIndexView{
  536 + UIView.animate(withDuration: 0.2) {
  537 + toBannerViewRightView.downSlideView.frame = CGRectMake(-LeftGap, 0, 0, 0)
  538 + toBannerViewRightView.upSlideView.frame = CGRectMake(-LeftGap, KSreenHeight*2,0, 0)
  539 + }
528 540 }
529 541 }
530   -
531   -// for (idx,obj) in self.pageFlowView.cells.enumerated(){
532   -// let bannerView = obj as? CNCustomIndexView
533   -// if idx == toIndex{
534   -// bannerView?.downSlideView.frame = CGRectMake(-LeftGap, 0, KSreenWidth, KSreenHeight)
535   -// bannerView?.downSlideView.upSlideVC.view.height = KSreenHeight-DownSlideBottomViewHeight
536   -// bannerView?.downSlideView.shopConsoleVC.view.height = KSreenHeight-DownSlideBottomViewHeight
537   -//
538   -// bannerView?.upSlideView.frame = CGRectMake(-LeftGap, KSreenHeight*2,KSreenWidth, KSreenHeight)
539   -// }else{
540   -// bannerView?.downSlideView.frame = CGRectMake(-LeftGap, 0, 0, 0)
541   -// bannerView?.upSlideView.frame = CGRectMake(-LeftGap, KSreenHeight*2,0, 0)
542   -// }
543   -// }
544 542 }
545 543  
546 544  
... ... @@ -611,6 +609,9 @@ class CNMetaCodeHomePageController:CNLiveBaseViewController, NewPagedFlowViewDel
611 609 vNumPage = .VNumPageUp
612 610 }
613 611  
  612 + //左右上角遮盖的视图 宽高设为0
  613 + self.hiddenLeftRightView()
  614 +
614 615 if scrollView.contentOffset.y == KSreenHeight {
615 616 self.view.height = self.tabBarY
616 617  
... ... @@ -626,6 +627,42 @@ class CNMetaCodeHomePageController:CNLiveBaseViewController, NewPagedFlowViewDel
626 627 // }
627 628 }
628 629 }
  630 + // MARK: - 左右上角遮盖的视图 宽高设为0
  631 + func hiddenLeftRightView(){
  632 + let toIndex:Int = self.pageFlowView.currentPageIndex
  633 + if dataArray.count > toIndex{
  634 + if let identityModel = dataArray[toIndex] as? StandListModel{
  635 + if let toBannerView = self.pageFlowView.cells[toIndex] as? CNCustomIndexView{
  636 + self.pageFlowView.scrollView.bringSubviewToFront(toBannerView)
  637 + UIView.animate(withDuration: 0.2) {
  638 + toBannerView.downSlideView.frame = CGRectMake(-LeftGap, 0, KSreenWidth, KSreenHeight)
  639 + toBannerView.downSlideView.upSlideVC.view.height = KSreenHeight-DownSlideBottomViewHeight
  640 + if identityModel.id == 9{
  641 + toBannerView.downSlideView.shopConsoleVC.view.height = KSreenHeight-DownSlideBottomViewHeight
  642 + }
  643 + toBannerView.upSlideView.frame = CGRectMake(-LeftGap, KSreenHeight*2,KSreenWidth, KSreenHeight)
  644 + }
  645 +
  646 + }
  647 + }
  648 + }
  649 + if toIndex-1 >= 0{
  650 + if let toBannerViewLeftView = self.pageFlowView.cells[toIndex-1] as? CNCustomIndexView{
  651 + UIView.animate(withDuration: 0.2) {
  652 + toBannerViewLeftView.downSlideView.frame = CGRectMake(-LeftGap, 0, 0, 0)
  653 + toBannerViewLeftView.upSlideView.frame = CGRectMake(-LeftGap, KSreenHeight*2,0, 0)
  654 + }
  655 + }
  656 + }
  657 + if toIndex+1 < self.pageFlowView.cells.count{
  658 + if let toBannerViewRightView = self.pageFlowView.cells[toIndex+1] as? CNCustomIndexView{
  659 + UIView.animate(withDuration: 0.2) {
  660 + toBannerViewRightView.downSlideView.frame = CGRectMake(-LeftGap, 0, 0, 0)
  661 + toBannerViewRightView.upSlideView.frame = CGRectMake(-LeftGap, KSreenHeight*2,0, 0)
  662 + }
  663 + }
  664 + }
  665 + }
629 666  
630 667 //MARK: - 网络请求获取身份列表
631 668 func getUserIdentityApi()
... ...
metaCode/Classes/Main/HomePage/Controller/DownSlideController/CNUpSlideDetailViewController.swift
... ... @@ -230,54 +230,41 @@ class CNUpSlideDetailViewController: CNLiveBaseViewController,UITableViewDataSou
230 230 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
231 231  
232 232 if indexPath.section == 0{
233   - if self.cellType == .playlet{
234   - //短剧大图
235   - guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveAlbumImageCellIdentifier) as? CNLiveAlbumImageCell
  233 + if self.cellType == .courseToMyCurriculum{
  234 + //我的课程
  235 + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveCourseTitleCellIdentifier) as? CNLiveDuanjuTitleCell
236 236 else {
237   - let cell = CNLiveAlbumImageCell()
  237 + let cell = CNLiveDuanjuTitleCell()
238 238 return cell
239 239 }
240   - cell.iconImgView.image = self.cell.bgImageView.image
241   - cell.titleLabel.text = self.cell.slideModel?.contents[0].title ?? ""
  240 + cell.cellType = .courseToMyCurriculum
  241 + cell.blockName = "我的课程"
242 242 return cell
243   - }else if self.cellType == .course || self.cellType == .playletToCourse || self.cellType == .courseToMyCurriculum{
244   - if self.cellType == .courseToMyCurriculum{
245   - //我的课程
  243 + }else{
  244 + if self.slideModel?.type == SlideModelTypeAllCourse12{
  245 + //全部课程
246 246 guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveCourseTitleCellIdentifier) as? CNLiveDuanjuTitleCell
247 247 else {
248 248 let cell = CNLiveDuanjuTitleCell()
249 249 return cell
250 250 }
251   - cell.cellType = .courseToMyCurriculum
252   - cell.blockName = "我的课程"
  251 + cell.cellType = .course
  252 + cell.blockName = self.slideModel?.blockName
253 253 return cell
254   - }else{
255   - if self.slideModel?.type == SlideModelTypeAllCourse12{
256   - //全部课程
257   - guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveCourseTitleCellIdentifier) as? CNLiveDuanjuTitleCell
258   - else {
259   - let cell = CNLiveDuanjuTitleCell()
260   - return cell
261   - }
262   - cell.cellType = .course
263   - cell.blockName = self.slideModel?.blockName
264   - return cell
265   -
266   - }else if self.slideModel?.type == SlideModelTypeOneCourse75{
267   - //大图课程
268   - guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveAlbumImageCellIdentifier) as? CNLiveAlbumImageCell
269   - else {
270   - let cell = CNLiveAlbumImageCell()
271   - return cell
272   - }
273   - cell.iconImgView.image = self.cell.bgImageView.image
274   - cell.titleLabel.text = self.cell.slideModel?.contents[0].title ?? ""
  254 +
  255 + }else if self.slideModel?.type == SlideModelTypeOneCourse75{
  256 + //大图课程
  257 + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveAlbumImageCellIdentifier) as? CNLiveAlbumImageCell
  258 + else {
  259 + let cell = CNLiveAlbumImageCell()
275 260 return cell
276   -
277 261 }
  262 + cell.iconImgView.image = self.cell.bgImageView.image
  263 + cell.titleLabel.text = self.cell.slideModel?.contents[0].title ?? ""
  264 + return cell
  265 +
278 266 }
279 267 }
280   -
281 268 }else{
282 269 //列表cell
283 270 let albumModel = self.dataArray[indexPath.row] as! CNLiveAlbumModel
... ... @@ -297,17 +284,12 @@ class CNUpSlideDetailViewController: CNLiveBaseViewController,UITableViewDataSou
297 284 }
298 285 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
299 286 if indexPath.section == 0{
300   - if self.cellType == .playlet{
301   - //短剧大图
  287 + if self.slideModel?.type == SlideModelTypeAllCourse12{
  288 + //全部课程
  289 + return allCourseCellHeight+get_system_statusBar_height()
  290 + }else if self.slideModel?.type == SlideModelTypeOneCourse75{
  291 + //大图课程
302 292 return KSreenWidth
303   - }else if self.cellType == .course || self.cellType == .playletToCourse{
304   - if self.slideModel?.type == SlideModelTypeAllCourse12{
305   - //全部课程
306   - return allCourseCellHeight+get_system_statusBar_height()
307   - }else if self.slideModel?.type == SlideModelTypeOneCourse75{
308   - //大图课程
309   - return KSreenWidth
310   - }
311 293 }
312 294 }else{
313 295 return 75
... ... @@ -319,16 +301,11 @@ class CNUpSlideDetailViewController: CNLiveBaseViewController,UITableViewDataSou
319 301 let albumModel = self.dataArray[indexPath.row] as! CNLiveAlbumModel
320 302 if indexPath.section == 0{
321 303 //大图统一不能点击跳转
322   - if self.cellType == .playlet{
323   - //短剧大图,跳转播放页
324   -// navigationViewController().visibleViewController?.navigationController?.pushViewController(CNLiveShortVideoViewController(aid: albumModel.contentId), animated: pushAnimated)
325   - }else if self.cellType == .course || self.cellType == .playletToCourse{
326   - if self.slideModel?.type == SlideModelTypeAllCourse12{
327   - //全部课程,跳转h5
  304 + if self.slideModel?.type == SlideModelTypeAllCourse12{
  305 + //全部课程,跳转h5
328 306  
329   - }else if self.slideModel?.type == SlideModelTypeOneCourse75{
330   - //大图课程,跳转h5
331   - }
  307 + }else if self.slideModel?.type == SlideModelTypeOneCourse75{
  308 + //大图课程,跳转h5
332 309 }
333 310 }else{
334 311 CNLiveDownSlideTool.pushWebVCWithContentsMdl(model: albumModel.model, contentId: albumModel.contentId, pid: albumModel.pid, shareUrl: albumModel.shareUrl, thirdUrl: albumModel.thirdUrl, title: albumModel.title, s_to: albumModel.s_to, trailerId: albumModel.trailerId, controller: self)
... ...
metaCode/Classes/Main/HomePage/Controller/DownSlideController/CNUpSlideViewController.swift
... ... @@ -380,7 +380,9 @@ class CNUpSlideViewController: CNLiveBaseViewController,UITableViewDelegate,UITa
380 380 if status == .success{
381 381 self.myCurriculumDataArray.removeAllObjects()
382 382 let albumBaseModel = result as! CNLiveAlbumBaseModel
383   - self.myCurriculumDataArray.addObjects(from: [albumBaseModel])
  383 + if albumBaseModel.list.count > 0{
  384 + self.myCurriculumDataArray.addObjects(from: [albumBaseModel])
  385 + }
384 386 self.myCurriculumIndex = -1
385 387 if self.myCurriculumDataArray.count>0{
386 388 //有我的课程
... ... @@ -395,7 +397,9 @@ class CNUpSlideViewController: CNLiveBaseViewController,UITableViewDelegate,UITa
395 397 //没有我的课程
396 398 self.myCurriculumIndex = -1
397 399 }
398   - self.dataArray.insert(albumBaseModel, at: self.myCurriculumIndex)
  400 + if self.myCurriculumIndex > -1{
  401 + self.dataArray.insert(albumBaseModel, at: self.myCurriculumIndex)
  402 + }
399 403 self.tableView.reloadData()
400 404 }else if (status == .failed){
401 405 // self.NetApiStatus = .apiError
... ...
metaCode/Classes/Main/HomePage/Controller/ShopUpConsole/CNLiveShopConsoleController.swift renamed to metaCode/Classes/Main/HomePage/Controller/ShopDownConsole/CNLiveShopConsoleController.swift
metaCode/Classes/Main/HomePage/Controller/ShopPayController/CNLiveShopPayController.swift 0 → 100644
  1 +//
  2 +// CNLiveShopPayController.swift
  3 +// metaCode
  4 +//
  5 +// Created by zx on 2024/4/8.
  6 +// 支付页面
  7 +
  8 +import Foundation
  9 +import CNLivePayCostModule
  10 +
  11 +///支付类型
  12 +enum CNLivePayType {
  13 + //支付宝
  14 + case alipay
  15 + //微信
  16 + case weChat
  17 +}
  18 +//支付状态
  19 +enum CNLivePayResult {
  20 + //成功
  21 + case success
  22 + //失败
  23 + case failure
  24 + //取消支付
  25 + case cancel
  26 +}
  27 +
  28 +//支付完成回调
  29 +typealias FinishPayCallBack = (_ orderInfoModel:CNLivePayOrderInfoModel,_ payType:CNLivePayType,_ payResult:CNLivePayResult)->Void
  30 +
  31 +class CNLiveShopPayController:CNLiveBaseViewController,UITableViewDelegate,UITableViewDataSource{
  32 +
  33 + var finishPayCallBack:FinishPayCallBack?
  34 + var orderNumber:String
  35 + var orderInfoModel:CNLivePayOrderInfoModel?
  36 + var currentSeleWechat = true
  37 + var wechatIsInstall = true //微信是否安装
  38 + var alipayIsInstall = true //支付宝是否安装
  39 + var payType:CNLivePayType?
  40 +
  41 + let kCNLiveShopPayNeedPaymentCellIdentifier = "kCNLiveShopPayNeedPaymentCellIdentifier"
  42 + let kCNLiveShopPayWeChatAlipayCellIdentifier = "kCNLiveShopPayWeChatAlipayCellIdentifier"
  43 +
  44 + // MARK: - 懒加载
  45 + lazy var tableView : UITableView = {
  46 + let tableView = UITableView(frame: CGRect(x: 0, y: KNavigationHeight, width: KSreenWidth, height: KSreenHeight-KNavigationHeight-KTabBarHeight), style: .plain)
  47 + tableView.dataSource = self
  48 + tableView.delegate = self
  49 + tableView.separatorStyle = .singleLine
  50 + tableView.tableFooterView = UIView.init()
  51 + tableView.register(CNLiveShopPayNeedPaymentCell.self, forCellReuseIdentifier: kCNLiveShopPayNeedPaymentCellIdentifier)
  52 + tableView.register(CNLiveShopPayWeChatAlipayCell.self, forCellReuseIdentifier: kCNLiveShopPayWeChatAlipayCellIdentifier)
  53 + return tableView
  54 + }()
  55 +
  56 + lazy var payBtn: UIButton = {
  57 + let payBtn = UIButton(type: .custom)
  58 + payBtn.frame = CGRect(x: 0, y: self.tableView.bottom, width: KSreenWidth, height: KTabBarHeight)
  59 + payBtn.backgroundColor = UIColor(red:0.29, green:0.64, blue:0.25, alpha:1.00)
  60 + payBtn.setTitleColor(.white, for: .normal)
  61 + payBtn.setTitle("支付", for: .normal)
  62 + payBtn.addTarget(self, action: #selector(payBtnAction), for: .touchUpInside)
  63 + return payBtn
  64 + }()
  65 +
  66 +
  67 + init(orderNumber:String) {
  68 + self.orderNumber = orderNumber
  69 + super.init(nibName: nil, bundle: nil)
  70 + }
  71 +
  72 + required init?(coder: NSCoder) {
  73 + fatalError("init(coder:) has not been implemented")
  74 + }
  75 +
  76 + deinit {
  77 + NotificationCenter.default.removeObserver(self, name: UIApplication.didBecomeActiveNotification, object: nil)
  78 + }
  79 +
  80 + override func viewDidLoad() {
  81 + super.viewDidLoad()
  82 + navigationBarHidden = false
  83 + titleName = "收银台"
  84 + self.view.backgroundColor = .white
  85 + NotificationCenter.default.addObserver(self, selector: #selector(didBecomeActiveNotification(_:)), name: UIApplication.didBecomeActiveNotification, object: nil)
  86 + self.getOrderInfoMessage()
  87 + self.initUI()
  88 +
  89 + if WXApi.isWXAppInstalled(){
  90 + self.wechatIsInstall = true
  91 + }else{
  92 + self.wechatIsInstall = false
  93 + }
  94 +
  95 + let urlScheme = "alipay://"
  96 + if UIApplication.shared.canOpenURL(URL(string: urlScheme)!) {
  97 + self.alipayIsInstall = true
  98 + } else {
  99 + self.alipayIsInstall = false
  100 + }
  101 +
  102 + }
  103 + // MARK: - 获取订单信息 并且进行检测
  104 + func getOrderInfoMessage(){
  105 + if self.orderNumber.count == 0{
  106 + return
  107 + }
  108 + showLoading(message: "")
  109 + CNLiveShoph5ViewModel.postOrderPayWithParams(orderId: self.orderNumber) { result, status in
  110 + hiddenLoading()
  111 + if status == .success{
  112 + let orderInfoModel = result as! CNLivePayOrderInfoModel
  113 + self.orderInfoModel = orderInfoModel
  114 + self.tableView.reloadData()
  115 + }else{
  116 + }
  117 + }
  118 +
  119 + }
  120 +
  121 + func initUI(){
  122 + self.view.addSubview(self.tableView)
  123 + self.view.addSubview(self.payBtn)
  124 + }
  125 +
  126 + @objc func payBtnAction(){
  127 +
  128 + if self.currentSeleWechat == true && self.wechatIsInstall == false{
  129 + showMessage(message: "请安装微信")
  130 + return
  131 + }
  132 + if self.currentSeleWechat == false && self.alipayIsInstall == false{
  133 + showMessage(message: "请安装支付宝")
  134 + return
  135 + }
  136 + showLoading(message: "")
  137 + let orderId = self.orderInfoModel?.orderId
  138 + var userId = self.orderInfoModel?.user_id
  139 + if userId?.count == 0{
  140 + userId = UserInfoManager.shared.userInfo.uid
  141 + }
  142 + let descStr = self.orderInfoModel?.body
  143 + let price = self.orderInfoModel?.totalMoney
  144 + let body = self.orderInfoModel?.body
  145 + let coupon_fee = self.orderInfoModel?.couponMoney
  146 + let notifyUrl = self.orderInfoModel?.notify_url
  147 +
  148 + let paramDict = NSMutableDictionary()
  149 + paramDict.setValue(orderId, forKey: "orderId")
  150 + paramDict.setValue(userId, forKey: "user_id")
  151 + paramDict.setValue(descStr, forKey: "descStr")
  152 + paramDict.setValue(price, forKey: "price")
  153 + paramDict.setValue("1", forKey: "orderType")
  154 + paramDict.setValue("1", forKey: "type")
  155 + paramDict.setValue(body, forKey: "body")
  156 + paramDict.setValue(coupon_fee, forKey: "coupon_fee")
  157 + paramDict.setValue(notifyUrl, forKey: "notifyUrl")
  158 + paramDict.setValue("", forKey: "password")
  159 +
  160 + var payCostType:CNLivePayCostPayType?
  161 + if self.currentSeleWechat == true{
  162 + self.payType = .weChat
  163 + payCostType = CNLivePayCostPayTypeWeChatPay
  164 + }else{
  165 + self.payType = .alipay
  166 + payCostType = CNLivePayCostPayTypeAliPay
  167 + }
  168 +
  169 + CNLivePayCostModule.showShopPayViw(withParamDict: paramDict as! [String : Any], payType: payCostType!) { resultCode in
  170 + hiddenLoading()
  171 + if resultCode == 0{
  172 + self.checkPayIsSuccessful(lastCount: 5)
  173 + }else if resultCode == 3{
  174 + showMessage(message: "取消支付")
  175 + }else {
  176 + showMessage(message: "支付失败")
  177 + }
  178 + }
  179 +
  180 + }
  181 +
  182 + @objc func didBecomeActiveNotification(_ notification: Notification) {
  183 + // 处理应用变得活跃的逻辑
  184 + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
  185 + // 这里写你想要在 0.5 秒后执行的代码
  186 + self.checkPayIsSuccessful(lastCount: 0)
  187 + }
  188 +
  189 + }
  190 +
  191 + // MARK: - 检测是否支付成功
  192 + /// 检测是否支付成功
  193 + /// @param lastCount 剩余检测次数
  194 + func checkPayIsSuccessful(lastCount:NSInteger){
  195 + showLoading(message: "")
  196 + CNLiveShoph5ViewModel.postIsOrderPayWithOrderId(orderId: self.orderNumber) { result, status in
  197 + hiddenLoading()
  198 + if status == .success{
  199 + self.finishPayCallBack?(self.orderInfoModel!, self.payType!, .success)
  200 +// NotificationCenter.default.post(name: Notification.Name.ShopOrderManage.kDSSuccessPayOrderNotification, object: nil)
  201 + self.navigationController?.popViewController(animated: true)
  202 + }else{
  203 + if lastCount > 0{
  204 + DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
  205 + // 这里写你想要在 0.5 秒后执行的代码
  206 + self.checkPayIsSuccessful(lastCount: lastCount-1)
  207 + }
  208 + }
  209 + }
  210 + }
  211 +
  212 + }
  213 +
  214 + // MARK: - UITableViewDelegate
  215 + func numberOfSections(in tableView: UITableView) -> Int {
  216 + 2
  217 + }
  218 + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  219 + if section == 0{
  220 + return 1
  221 + }else{
  222 + return 2
  223 + }
  224 + }
  225 +
  226 + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  227 + if indexPath.section == 0{
  228 + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveShopPayNeedPaymentCellIdentifier) as? CNLiveShopPayNeedPaymentCell
  229 + else {
  230 + let cell = CNLiveShopPayNeedPaymentCell()
  231 + return cell
  232 + }
  233 + let monStr = String(format: "需要付款: ¥%.2f", (Double(self.orderInfoModel?.totalMoney ?? "0.00") ?? 0.00) / 100)
  234 + let attribute = NSMutableAttributedString.init(string:monStr)
  235 + let attIndex = 6
  236 + attribute.addAttributes([NSAttributedString.Key.foregroundColor: HexColor("#222222")!], range: NSRange.init(location: 0, length: attIndex))
  237 + attribute.addAttributes([NSAttributedString.Key.foregroundColor: UIColor(red:0.29, green:0.64, blue:0.25, alpha:1.00)], range: NSRange.init(location: attIndex, length: monStr.count-attIndex))
  238 + cell.titleLabel.attributedText = attribute
  239 + return cell
  240 + }else{
  241 + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveShopPayWeChatAlipayCellIdentifier) as? CNLiveShopPayWeChatAlipayCell
  242 + else {
  243 + let cell = CNLiveShopPayWeChatAlipayCell()
  244 + return cell
  245 + }
  246 + if indexPath.row == 0{
  247 + //微信支付
  248 +
  249 + cell.iconImgView.image = UIImage(named: "dd_weixin")
  250 + if self.currentSeleWechat == true{
  251 + cell.selectImgView.isHidden = false
  252 + }else{
  253 + cell.selectImgView.isHidden = true
  254 + }
  255 + if self.wechatIsInstall{
  256 + cell.titleLabel.text = "微信支付"
  257 + }else{
  258 + cell.titleLabel.text = "微信未安装,无法使用微信支付"
  259 + }
  260 + }else{
  261 + //支付宝支付
  262 + cell.iconImgView.image = UIImage(named: "dd_zhifubao")
  263 + if self.currentSeleWechat == true{
  264 + cell.selectImgView.isHidden = true
  265 + }else{
  266 + cell.selectImgView.isHidden = false
  267 + }
  268 + if self.alipayIsInstall{
  269 + cell.titleLabel.text = "支付宝支付"
  270 + }else{
  271 + cell.titleLabel.text = "支付宝未安装,无法使用支付宝支付"
  272 + }
  273 + }
  274 + return cell
  275 + }
  276 + }
  277 + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  278 + if indexPath.section == 1{
  279 + if indexPath.row == 0{
  280 + if self.wechatIsInstall == false{
  281 + showMessage(message: "请安装微信")
  282 + return
  283 + }
  284 + if self.currentSeleWechat == true{
  285 + return
  286 + }
  287 + self.currentSeleWechat = true
  288 + }else{
  289 + if self.alipayIsInstall == false{
  290 + showMessage(message: "请安装支付宝")
  291 + return
  292 + }
  293 + if self.currentSeleWechat == false{
  294 + return
  295 + }
  296 + self.currentSeleWechat = false
  297 + }
  298 + self.tableView.reloadData()
  299 + }
  300 + }
  301 + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  302 + return 60
  303 + }
  304 +
  305 +}
... ...
metaCode/Classes/Main/HomePage/Controller/ShopDownDetail/CNLiveDownShopDetailController.swift renamed to metaCode/Classes/Main/HomePage/Controller/ShopUpDetail/CNLiveDownShopDetailController.swift
... ... @@ -13,6 +13,7 @@ class CNLiveDownShopDetailController:CNLiveBaseViewController, UICollectionViewD
13 13 let kCNLiveShopDetailDefaultCellID = "kCNLiveShopDetailDefaultCellID"
14 14 let kCNLiveShopDetailHeaderViewID = "kCNLiveShopDetailHeaderViewID"
15 15  
  16 + let kCNLiveShopDetailCloseCellID = "kCNLiveShopDetailCloseCellID"
16 17 let kCNLiveShopDetailBannerCellID = "kCNLiveShopDetailBannerCellID"
17 18 let kCNLiveShopDetailBtnsCellID = "kCNLiveShopDetailBtnsCellID"
18 19 let kCNLiveShopDetailOrderAssetCellID = "kCNLiveShopDetailOrderAssetCellID"
... ... @@ -22,56 +23,21 @@ class CNLiveDownShopDetailController:CNLiveBaseViewController, UICollectionViewD
22 23 let shopDetailModel = CNLiveShopDetailModel()
23 24 return shopDetailModel
24 25 }()
25   - override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
26   - let upSlideView = self.view.superview as! CNUpSlideView
27   - let scrollView = upSlideView.superview as! UIScrollView
28   - scrollView.setContentOffset(CGPoint(x: 0, y: scrollView.height), animated: true)
29   -
30   - let result:Dictionary = ["AuthVNumPage":2]
31   - NotificationCenter.default.post(name: Notification.Name.AuthVNumPageManage.kAuthVNumPageChangedNotification, object: nil, userInfo: result)
32   -
33   - currentViewController()?.tabBarController?.tabBar.isHidden = false
34   -
35   - let metaVC = currentViewController() as! CNMetaCodeHomePageController
36   - let index = metaVC.pageFlowView.currentPageIndex
37   - let customIndexView = metaVC.pageFlowView.viewWithTag(100+index) as! CNCustomIndexView
38   - customIndexView.superScrollView?.isScrollEnabled = true
39   - }
40   -// lazy var closeBtn: UIButton = {
41   -// let closeBtn = UIButton(type: .custom)
42   -// closeBtn.frame = CGRect(x: KSreenWidth-50, y: KStatusBarHeight, width: 50, height: KNavigationHeight-KStatusBarHeight)
43   -// closeBtn.setImage(UIImage(named: "mine_header_icon_close"), for: .normal)
44   -// closeBtn.addTarget(self, action: #selector(closeBtnAction), for: .touchUpInside)
45   -// closeBtn.isUserInteractionEnabled = false
46   -// return closeBtn
47   -// }()
48   -
49   -// lazy var navView: UIView = {
50   -// let closeBtn = UIView(frame: CGRect(x: 0, y: KStatusBarHeight, width: KSreenWidth-50, height: KNavigationHeight-KStatusBarHeight))
51   -// closeBtn.backgroundColor = .yellow
52   -// return closeBtn
53   -// }()
54   - lazy var closeBtn: UIImageView = {
55   - let closeBtn = UIImageView(frame: CGRect(x: KSreenWidth-35, y: KStatusBarHeight+(KNavigationHeight-KStatusBarHeight-20)*0.5, width: 20, height: 20))
56   - closeBtn.image = UIImage(named: "mine_header_icon_close")
57   -// closeBtn.isUserInteractionEnabled = true
58   -// let tap = UITapGestureRecognizer.init(target: self, action: #selector(closeBtnAction))
59   -// closeBtn.addGestureRecognizer(tap)
60   - return closeBtn
61   - }()
62   -
63 26 lazy var collectionView: UICollectionView = {
64 27 let layout = UICollectionViewFlowLayout.init()
65 28 let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
66 29 collectionView.delegate = self
67 30 collectionView.dataSource = self
68 31 collectionView.backgroundColor = .white
69   -// collectionView.register(CNLiveShopConsoleHeaderView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: kCNLiveShopConsoleCollectionReusableHeaderViewID)
  32 +
  33 + collectionView.register(CNLliveShopDetailCloseCell.self, forCellWithReuseIdentifier: kCNLiveShopDetailCloseCellID)
  34 +
70 35 collectionView.register(CNLliveShopDetailBannerCell.self, forCellWithReuseIdentifier: kCNLiveShopDetailBannerCellID)
71 36 collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: kCNLiveShopDetailDefaultCellID)
72 37 collectionView.register(CNLiveShopDetailBtnsCell.self, forCellWithReuseIdentifier: kCNLiveShopDetailBtnsCellID)
73 38 collectionView.register(CNLiveShopDetailOrderAssetCell.self, forCellWithReuseIdentifier: kCNLiveShopDetailOrderAssetCellID)
74 39  
  40 +
75 41 return collectionView
76 42 }()
77 43  
... ... @@ -80,12 +46,8 @@ class CNLiveDownShopDetailController:CNLiveBaseViewController, UICollectionViewD
80 46 self.getShopDetailApi()
81 47 self.view.addSubview(collectionView)
82 48 collectionView.snp.makeConstraints { make in
83   - make.top.equalToSuperview().offset(KNavigationHeight)
84   - make.left.bottom.right.equalToSuperview()
  49 + make.top.left.bottom.right.equalToSuperview()
85 50 }
86   - self.view.addSubview(self.closeBtn)
87   -// self.view.addSubview(navView)
88   -
89 51 }
90 52  
91 53 // MARK: BtnAction
... ... @@ -102,15 +64,13 @@ class CNLiveDownShopDetailController:CNLiveBaseViewController, UICollectionViewD
102 64 let index = metaVC.pageFlowView.currentPageIndex
103 65 let customIndexView = metaVC.pageFlowView.viewWithTag(100+index) as! CNCustomIndexView
104 66 customIndexView.superScrollView?.isScrollEnabled = true
105   -// customIndexView.baseScrollView.setContentOffset(CGPoint(x: 0, y: customIndexView.baseScrollView.height), animated: true)
106   -// currentViewController()?.tabBarController?.tabBar.isHidden = false
107 67 }
108   -
  68 +
109 69 // MARK: - UICollectionViewDelegate
110 70 func numberOfSections(in collectionView: UICollectionView) -> Int {
111 71 if self.shopDetailModel.is_seller != nil{
112 72 if self.shopDetailModel.is_seller == true{
113   - return 5
  73 + return 6
114 74 }else{//非商家,不处理
115 75 return 3
116 76 }
... ... @@ -121,7 +81,7 @@ class CNLiveDownShopDetailController:CNLiveBaseViewController, UICollectionViewD
121 81 func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
122 82 if self.shopDetailModel.is_seller != nil {
123 83 if (self.shopDetailModel.is_seller == true) {
124   - if (section == 4) {
  84 + if (section == 5) {
125 85 let count = self.shopDetailModel.dynamic.count
126 86 return count == 0 ? 1 : count
127 87 }else {
... ... @@ -144,12 +104,15 @@ class CNLiveDownShopDetailController:CNLiveBaseViewController, UICollectionViewD
144 104 // }
145 105 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
146 106 switch indexPath.section {
147   - case 0://banner轮播图
  107 + case 0://close关闭
  108 + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: kCNLiveShopDetailCloseCellID, for: indexPath) as! CNLliveShopDetailCloseCell
  109 + return cell
  110 + case 1://banner轮播图
148 111 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: kCNLiveShopDetailBannerCellID, for: indexPath) as! CNLliveShopDetailBannerCell
149 112  
150 113 cell.shopDetailModel = self.shopDetailModel
151 114 return cell
152   - case 1://btn
  115 + case 2://btn
153 116 if (self.shopDetailModel.is_seller != nil && self.shopDetailModel.is_seller == true) {
154 117 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: kCNLiveShopDetailBtnsCellID, for: indexPath) as! CNLiveShopDetailBtnsCell
155 118 cell.shopDetailModel = self.shopDetailModel
... ... @@ -158,7 +121,7 @@ class CNLiveDownShopDetailController:CNLiveBaseViewController, UICollectionViewD
158 121 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: kCNLiveShopDetailDefaultCellID, for: indexPath)
159 122 return cell
160 123 }
161   - case 2://我的订单
  124 + case 3://我的订单
162 125 if (self.shopDetailModel.is_seller != nil && self.shopDetailModel.is_seller == true) {
163 126 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: kCNLiveShopDetailOrderAssetCellID, for: indexPath) as! CNLiveShopDetailOrderAssetCell
164 127 cell.displayType = .CNLiveShopDetailDisplayTypeOrder
... ... @@ -168,7 +131,7 @@ class CNLiveDownShopDetailController:CNLiveBaseViewController, UICollectionViewD
168 131 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: kCNLiveShopDetailDefaultCellID, for: indexPath)
169 132 return cell
170 133 }
171   - case 3://我的资产
  134 + case 4://我的资产
172 135 if (self.shopDetailModel.is_seller != nil && self.shopDetailModel.is_seller == true) {
173 136 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: kCNLiveShopDetailOrderAssetCellID, for: indexPath) as! CNLiveShopDetailOrderAssetCell
174 137 cell.displayType = .CNLiveShopDetailDisplayTypeAsset
... ... @@ -178,7 +141,6 @@ class CNLiveDownShopDetailController:CNLiveBaseViewController, UICollectionViewD
178 141 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: kCNLiveShopDetailDefaultCellID, for: indexPath)
179 142 return cell
180 143 }
181   -// case 4:
182 144 default:
183 145 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: kCNLiveShopDetailDefaultCellID, for: indexPath)
184 146 return cell
... ... @@ -186,19 +148,27 @@ class CNLiveDownShopDetailController:CNLiveBaseViewController, UICollectionViewD
186 148  
187 149 }
188 150  
  151 + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
  152 + if indexPath.section == 0{
  153 + self.closeBtnAction()
  154 + }
  155 + }
  156 +
189 157 // MARK: - UICollectionViewDelegateFlowLayout
190 158 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
191 159 if (self.shopDetailModel.is_seller != nil && self.shopDetailModel.is_seller == true) {
192 160 switch (indexPath.section) {
193   - case 0://banner
  161 + case 0://close
  162 + return CGSize(width: KSreenWidth, height: KNavigationHeight)
  163 + case 1://banner
194 164 return CGSize(width: KSreenWidth, height: CNLiveAdaptTool.adaptLength(length: 210))
195   - case 1://btn
  165 + case 2://btn
196 166 return CGSize(width: KSreenWidth, height: 10+45+5+17+15)
197   - case 2://我的订单
  167 + case 3://我的订单
198 168 return CGSize(width: KSreenWidth, height: 10+25+15+CNLiveAdaptTool.adaptLength(length: tempOrderZiChanHeight)+15)
199   - case 3://我的资产
  169 + case 4://我的资产
200 170 return CGSize(width: KSreenWidth, height: 10+25+15+CNLiveAdaptTool.adaptLength(length: tempOrderZiChanHeight)+15)
201   - case 4://
  171 + case 5://
202 172 return CGSize(width: KSreenWidth, height: 50)
203 173 default:
204 174 return CGSizeZero
... ...
metaCode/Classes/Main/HomePage/Controller/WebController/CNWebView.swift
... ... @@ -13,13 +13,16 @@ import CommonCrypto
13 13 import CNLiveBusinessTools
14 14 import SKPhotoBrowser
15 15  
  16 +//返回 Web控制器回调
  17 +typealias cnWebControllerBackNavBlock = ()->Void
  18 +
16 19 //更新Web控制器导航回调
17 20 typealias cnWebControllerUpdateNavBlock = (_ isFinish:Bool , _ titleName:String ,_ isDecidePolicy:Bool , _ urlStr:String)->Void
18 21  
19 22 //更新Web控制器 currentUrl
20 23 typealias cnWebControllerUpdateCurrentUrlBlock = (_ currentUrl:String)->Void
21 24  
22   -class CNWebView:UIView,WKNavigationDelegate{
  25 +class CNWebView:UIView,WKNavigationDelegate, WKScriptMessageHandler{
23 26  
24 27 var configuration:WKWebViewConfiguration?
25 28  
... ... @@ -28,15 +31,35 @@ class CNWebView:UIView,WKNavigationDelegate{
28 31 return cnWebView
29 32 }()
30 33  
31   - var webUrl:URL?//初始URL
  34 + var _webUrl:URL?//初始URL
  35 + var webUrl:URL?{
  36 + get{
  37 + _webUrl
  38 + }set{
  39 + _webUrl = newValue!
  40 + }
  41 + }
  42 +
32 43 var currentUrl:String = ""//当前网页的url
33 44 var bridge:WKWebViewJavascriptBridge?
  45 + var customUserAgent:String = ""
34 46  
35 47 //CNWebController
36 48 var isCNWebController:Bool = false//是否网页控制器
37   - var webControllerUpdateNavBlock:cnWebControllerUpdateNavBlock?
  49 + var webControllerBackNavBlock:cnWebControllerBackNavBlock?//back返回
  50 +
  51 + var webControllerUpdateNavBlock:cnWebControllerUpdateNavBlock?//刷新
38 52 var webControllerUpdateCurrentUrlBlock:cnWebControllerUpdateCurrentUrlBlock?
39 53  
  54 + required init?(coder: NSCoder) {
  55 + fatalError("init(coder:) has not been implemented")
  56 + }
  57 +
  58 + func loadUrl(url:String){
  59 + let urlStr = self.checkURLWithStr(urlStr: url)
  60 + self.currentUrl = urlStr
  61 + self.cnWebView.load(URLRequest.init(url:URL(string: urlStr)!))
  62 + }
40 63  
41 64 init(frame: CGRect, configuration: WKWebViewConfiguration ,url:URL?) {
42 65 super.init(frame: frame)
... ... @@ -49,26 +72,154 @@ class CNWebView:UIView,WKNavigationDelegate{
49 72 if !userAgent.contains(CNLiveMCEnvironmentManager.shared.base_web_UA) {
50 73 let newUserAgent = userAgent + CNLiveMCEnvironmentManager.shared.base_web_UA
51 74 self.cnWebView.customUserAgent = newUserAgent
  75 + self.customUserAgent = newUserAgent
52 76  
53 77 if (self.webUrl != nil){
54 78 let urlStr = self.checkURLWithStr(urlStr: self.webUrl!.absoluteString)
55 79 self.currentUrl = urlStr
56 80  
57 81 self.cnWebView.load(URLRequest.init(url:URL(string: urlStr)!))
  82 + self.configBridge()
  83 + self.configBridgeRegister()
  84 + self.webViewAddScriptMessageHandler()
58 85 }
59   - self.configBridge()
60   - self.configBridgeRegister()
61 86 }
62 87 }
63 88 }
64 89 }
65 90  
  91 + // MARK: - 电商h5的交互回调调用
  92 + //电商 js 交互原生
  93 + func webViewAddScriptMessageHandler(){
  94 + self.cnWebView.configuration.userContentController.add(self, name: "pop")
  95 + self.cnWebView.configuration.userContentController.add(self, name: "toShare")
  96 + self.cnWebView.configuration.userContentController.add(self, name: "openAppPayment")
  97 + }
  98 +
  99 + func webViewRemoveScriptMessageHandler(){
  100 + self.cnWebView.configuration.userContentController.removeScriptMessageHandler(forName: "pop")
  101 + self.cnWebView.configuration.userContentController.removeScriptMessageHandler(forName: "toShare")
  102 + self.cnWebView.configuration.userContentController.removeScriptMessageHandler(forName: "openAppPayment")
  103 + }
  104 + //电商h5的回调
  105 + func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
  106 + // 初始化 body 为 nil
  107 + var body: Any? = nil
  108 + // 检查 message.body 是否不是 NSNull 并且是 NSDictionary 的实例
  109 + if let dictionary = message.body as? [String: Any], !dictionary.isEmpty {
  110 + // 获取所有的键
  111 + let allKeys = dictionary.keys
  112 + // 检查是否包含 "body" 键
  113 + if allKeys.contains("body") {
  114 + // 取出 "body" 键对应的值
  115 + body = dictionary["body"]
  116 + }
  117 + }
  118 + if message.name == "openAppPayment" {
  119 + // 跳转支付页面
  120 + if let json = body as? [String: Any] {
  121 + // 检查 json 是否非空
  122 + guard !json.isEmpty else {
  123 + print("json 字典是空的")
  124 + return
  125 + }
  126 + // 使用可选链获取 orderNumber,如果不存在则返回空字符串
  127 + let orderNumber = json["orderNumber"] as? String ?? ""
  128 + let vc = CNLiveShopPayController(orderNumber: orderNumber)
  129 + vc.finishPayCallBack = { [weak self] orderInfoModel ,payType ,payResult in
  130 + let params = NSMutableDictionary()
  131 + let jsonStr = orderInfoModel.toJSONString() ?? ""
  132 + params.setValue(jsonStr, forKey: "orderInfo")
  133 + params.setValue(payType.hashValue, forKey: "payType")
  134 + params.setValue(payResult.hashValue, forKey: "payResult")
  135 +
  136 + let sparams = self!.stringByJson(params as? [String : Any])
  137 + let appPaymentCallbackJS = String(format: "appPaymentCallback('%@')", sparams ?? "")
  138 + self?.cnWebView.evaluateJavaScript(appPaymentCallbackJS, completionHandler: { result, error in
  139 +// print("error \(error)")
  140 + })
  141 + }
  142 + // 跳转支付页面
  143 + navigationViewController().pushViewController(vc, animated: pushAnimated)
  144 + }
  145 + }else if message.name == "pop" {
  146 + //返回上一级控制器
  147 + if self.cnWebView.canGoBack{
  148 + self.cnWebView.goBack()
  149 + }else{
  150 + self.webControllerBackNavBlock?()
  151 + }
  152 + }else if message.name == "toShare" {
  153 + //拉起分享
  154 + if let json = body as? [String: Any] {
  155 + // 检查 json 是否非空
  156 + guard !json.isEmpty else {
  157 + print("json 字典是空的")
  158 + return
  159 + }
  160 + // 使用可选链和条件绑定获取 type,如果不存在或不是数字,则使用默认值 0
  161 + let type: UInt = (json["type"] as? NSNumber)?.uintValue ?? 0
  162 + // 使用可选链获取 id 和 ext,如果不存在则返回空字符串
  163 + let targetId = json["id"] as? String ?? ""
  164 + let ext = json["ext"] as? String ?? ""
  165 + //请求分享参数
  166 + showLoading(message: "")
  167 + CNLiveShoph5ViewModel.postGetShareDataWithType(type: NSInteger(type), targetId: targetId, ext: ext) { result, status in
  168 + let shareModel = result as! CNLiveShopCommentRequestShareModel
  169 +
  170 + let shareTitle = shareModel.share_title
  171 + let shareUrl = shareModel.url
  172 + let shareDesc = shareModel.share_desc
  173 + let shareImage = shareModel.share_img
  174 + CNLiveShareManager.showShareViewWithParam(forShareTitle: shareTitle, shareUrl: shareUrl, shareDesc: shareDesc, shareImage: shareImage, screenFull: false, hiddenWjj: true, hiddenQQ: false, hiddenWB: true, hiddenLifeCircle: true, hiddenWechatCircle: false, hiddenWechat: false, hiddenSafari: true, formVC: currentViewController(), topImage: [], topTitles: [], platformType: .all) { title in
  175 +
  176 + } completerBlock: { resultType, platformType, typeString in
  177 + if resultType == .succ{
  178 +
  179 + }
  180 + }
  181 +
  182 + }
  183 +
  184 + }
  185 + }
  186 + }
  187 + // MARK: - 字典转字符串
  188 + func stringByJson(_ json: [String: Any]?) -> String? {
  189 + guard let json = json else {
  190 + return nil
  191 + }
  192 +
  193 + do {
  194 + let data = try JSONSerialization.data(withJSONObject: json, options: .prettyPrinted)
  195 + if let string = String(data: data, encoding: .utf8) {
  196 + // 去掉字符串中的空格
  197 + let stringWithoutSpaces = string.replacingOccurrences(of: " ", with: "", options: .literal, range: nil)
  198 +
  199 + // 去掉字符串中的换行符
  200 + let stringWithoutNewlines = stringWithoutSpaces.replacingOccurrences(of: "\n", with: "", options: .literal, range: nil)
  201 +
  202 + // 去掉字符串中的转义字符 "\"
  203 + // 注意:在标准的JSON字符串中,转义字符 "\" 是必要的,因此通常不会移除它们。
  204 + // 如果你确实需要移除它们,请确保这样做不会导致JSON字符串格式错误。
  205 + let stringWithoutEscapes = stringWithoutNewlines.replacingOccurrences(of: "\\", with: "", options: .literal, range: nil)
  206 +
  207 + return stringWithoutEscapes
  208 + }
  209 + } catch {
  210 + // 处理JSONSerialization的错误
  211 + return nil
  212 + }
  213 +
  214 + return nil
  215 + }
  216 + // MARK: - wjjh5的交互回调调用
66 217 func configBridge(){
67 218 WKWebViewJavascriptBridge.enableLogging()
68 219 self.bridge = WKWebViewJavascriptBridge(for: self.cnWebView)
69 220 self.bridge?.setWebViewDelegate(self)
70 221 }
71   - //h5拉起原生
  222 + //wjjh5拉起原生
72 223 func configBridgeRegister() -> Void {
73 224 //h5拉起原生分享 js call oc
74 225 self.bridge?.registerHandler("wjjylzgVideoShare", handler: { data, responseCallback in
... ... @@ -90,7 +241,7 @@ class CNWebView:UIView,WKNavigationDelegate{
90 241 let dic = data as! Dictionary<String, Any>
91 242 let index = (dic["index"] as! NSString).integerValue
92 243 let imageArray = dic["imgArr"] as! NSArray
93   - var imgArray = NSMutableArray()
  244 + let imgArray = NSMutableArray()
94 245 for dict in imageArray {
95 246 var imgUrl = ""
96 247 if let dictemp = dict as? String{
... ... @@ -124,15 +275,83 @@ class CNWebView:UIView,WKNavigationDelegate{
124 275 CNLiveShareImageManager.pushWeChatMiniProgrem(withMiniAppId: miniAppId, path: miniPath, extMsg: "", extDic: [:])
125 276 }
126 277 })
  278 +
  279 + //h5拉起原生跳转苹果内购
  280 + self.bridge?.registerHandler("wjjHtmlPullApplePay", handler: { data, responseCallback in
  281 +// print("js call oc\(data)")
  282 +// let dataDic = data as! Dictionary<String, Any>
  283 +// let body = dataDic["body"] as? String
  284 +// let notify_url = dataDic["notify_url"] as? String
  285 +// let orderId = dataDic["orderId"] as? String
  286 +// let prdId = dataDic["prdId"] as? String
  287 +// let total_fee = dataDic["total_fee"] as? Int
  288 +// print("拉起苹果内购")
  289 +
  290 + })
  291 +
  292 + //h5拉起原生支付(iOS不加,虚拟付费视频都内购)
  293 +// self.bridge?.registerHandler("wjjHtmlPullAppPay", handler: { data, responseCallback in
  294 +// print("js call oc\(data)")
  295 +// let dic = data as! Dictionary<String, Any>
  296 +//
  297 +//// [CNLivePayCostModule showDefaultPayViwWithParamDict:htmlDict PayCostType:CNLivePayCostTypeHtml FromVC:formVC ResultBlock:^(CNLivePayCostTypeResult resultType) {
  298 +//// if (resultType == CNLivePayCostTypeResultSucc) {
  299 +//// NSString * orderId = [resultParam stringValueForKey:@"orderId" default:@""];
  300 +//// [weakSelf.bridge callHandler:@"wjjHtmlPullAppPayCallback" data:@{@"orderId":orderId,@"payStatus":payResult == CNLiveContentPayResultSucc?@"0":@"1"} responseCallback:^(id responseData) {
  301 +//// NSLog(@"成功");
  302 +//// }];
  303 +// // }
  304 +//// }];
  305 +//
  306 +// })
  307 +
127 308 }
128 309  
129   - required init?(coder: NSCoder) {
130   - fatalError("init(coder:) has not been implemented")
131   - }
132   -
  310 + // MARK: - 检查url
133 311 func checkURLWithStr(urlStr:String) -> String{
134 312 if URL(string: urlStr)?.host != WjjH5 {
135   - return urlStr//不是wjjh5不作处理
  313 + if URL(string: urlStr)?.host == ManageshopH5 || URL(string: urlStr)?.host == ManagemallshopH5{
  314 + //是电商url,拼接uid
  315 + var str = urlStr
  316 + let sourceArray = str.components(separatedBy: "?")
  317 + if sourceArray.count == 1{
  318 + //是电商h5且无参数
  319 + str = String(format: "%@?uid=%@", str,UserInfoManager.shared.userInfo.uid)
  320 + return str
  321 + }
  322 + //是电商h5且有参数
  323 + let paraArr = NSMutableArray(array: ["uid="])
  324 + let valueArr = NSMutableArray(array:[UserInfoManager.shared.userInfo.uid])
  325 + var i = 0
  326 + for paraStr in paraArr{
  327 + let tempStr = paraStr as! String
  328 + let paramStr = "&".appending(tempStr)
  329 + let paramStr2 = "?".appending(tempStr)
  330 +
  331 + if str.contains(paramStr){
  332 + //包含则替换 &sid=
  333 + let lastStr = str.components(separatedBy: tempStr).last
  334 + let lastSeparatedStr = (lastStr?.components(separatedBy: "&").first)!
  335 + let oldStr = tempStr.appending(lastSeparatedStr)
  336 + let tempValueStr = tempStr.appending(valueArr[i] as! String)
  337 + str = str.replacingOccurrences(of: oldStr, with: tempValueStr)
  338 + }else if str.contains(paramStr2){
  339 + //包含则替换 &sid=
  340 + let lastStr = str.components(separatedBy: tempStr).last
  341 + let lastSeparatedStr = (lastStr?.components(separatedBy: "&").first)!
  342 + let oldStr = tempStr.appending(lastSeparatedStr)
  343 + let tempValueStr = tempStr.appending(valueArr[i] as! String)
  344 + str = str.replacingOccurrences(of: oldStr, with: tempValueStr)
  345 + }else{
  346 + //不包含则拼接
  347 + str = String(format: "%@&%@%@", str,tempStr,valueArr[i] as! String)
  348 + }
  349 + i = i + 1
  350 + }
  351 + return str
  352 + }else{
  353 + return urlStr//不是wjjh5且不是电商h5不作处理
  354 + }
136 355 }
137 356 var str = urlStr
138 357 let date = Date()
... ...
metaCode/Classes/Main/HomePage/Controller/WebController/CNWebViewController.swift
... ... @@ -16,6 +16,7 @@ import SKPhotoBrowser
16 16  
17 17 let WjjH5 = "wjjh5.cnlive.com"
18 18 let ManageshopH5 = "manageshop.cnlive.com"
  19 +let ManagemallshopH5 = "managemall.cnlive.com"
19 20  
20 21 class CNWebViewController:CNLiveBaseViewController ,WKNavigationDelegate{
21 22  
... ... @@ -46,7 +47,6 @@ class CNWebViewController:CNLiveBaseViewController ,WKNavigationDelegate{
46 47 moreNavBtn.addTarget(self, action: #selector(moreNavBtnAction), for: .touchUpInside)
47 48 return moreNavBtn
48 49 }()
49   -
50 50  
51 51 var _url:URL?
52 52 var url:URL? {
... ... @@ -62,6 +62,7 @@ class CNWebViewController:CNLiveBaseViewController ,WKNavigationDelegate{
62 62 self.webView.cnWebView.stopLoading()
63 63 self.webView.cnWebView.navigationDelegate = nil
64 64 self.webView.cnWebView.uiDelegate = nil
  65 + self.webView.webViewRemoveScriptMessageHandler()
65 66 print("WKWebView dealloc")
66 67 }
67 68  
... ... @@ -70,7 +71,6 @@ class CNWebViewController:CNLiveBaseViewController ,WKNavigationDelegate{
70 71 self.h5StopVideoPlayer()
71 72 }
72 73  
73   -
74 74 override func viewDidLoad() {
75 75 super.viewDidLoad()
76 76 navigationBarHidden = false
... ... @@ -87,6 +87,9 @@ class CNWebViewController:CNLiveBaseViewController ,WKNavigationDelegate{
87 87 }
88 88 }
89 89 }
  90 + self.webView.webControllerBackNavBlock = { [weak self] in
  91 + self?.navigationController?.popViewController(animated: true)
  92 + }
90 93 self.webView.webControllerUpdateCurrentUrlBlock = { [weak self] currentUrlStr in
91 94 self!.currentUrl = currentUrlStr
92 95 }
... ... @@ -98,9 +101,9 @@ class CNWebViewController:CNLiveBaseViewController ,WKNavigationDelegate{
98 101  
99 102 func h5StopVideoPlayer(){
100 103 // call h5停止播放视频
101   - let data = ["stop": true]
  104 + let data: [String: Any] = ["stop": true]
102 105 self.bridge?.callHandler("wjjStopVideoPlayer", data: data, responseCallback: { responseData in
103   - print("\(responseData ?? "")")
  106 + print("wjjStopVideoPlayer:\(responseData ?? "")")
104 107 })
105 108 }
106 109  
... ...
metaCode/Classes/Main/HomePage/View/Shop/GoodsManager/CNLiveShopClassifySectionHeaderView.swift
... ... @@ -26,6 +26,8 @@ class CNLiveShopClassifySectionHeaderView:UITableViewHeaderFooterView{
26 26 _classifyModel = newValue
27 27 self.classifyNameBtn.isSelected = _classifyModel!.showChild
28 28 self.classifyNameBtn.setTitle(_classifyModel!.title, for: .normal)
  29 + self.classifyNameBtn.setupButtonImageAndTitlePossitionWith(padding: 5, style: .right)
  30 +
29 31 self.sortLab.text = _classifyModel!.ord
30 32 if Int(_classifyModel!.state ?? "") == 2{
31 33 self.showSwitch.isOn = true
... ...
metaCode/Classes/Main/HomePage/View/Shop/ShopDetail/CNLliveShopDetailCloseCell.swift 0 → 100644
  1 +//
  2 +// CNLliveShopDetailCloseCell.swift
  3 +// metaCode
  4 +//
  5 +// Created by zx on 2024/4/12.
  6 +// 电商上滑页-close cell
  7 +
  8 +import Foundation
  9 +
  10 +class CNLliveShopDetailCloseCell: UICollectionViewCell {
  11 + lazy var closeBtn: UIImageView = {
  12 + let closeBtn = UIImageView(frame: CGRect(x: KSreenWidth-35, y: KStatusBarHeight+(KNavigationHeight-KStatusBarHeight-20)*0.5, width: 20, height: 20))
  13 + closeBtn.image = UIImage(named: "mine_header_icon_close")
  14 + return closeBtn
  15 + }()
  16 +
  17 + override init(frame: CGRect) {
  18 + super.init(frame: frame)
  19 + self.setUI()
  20 + }
  21 +
  22 + required init?(coder: NSCoder) {
  23 + fatalError("init(coder:) has not been implemented")
  24 + }
  25 +
  26 + func setUI(){
  27 + self.backgroundColor = .white
  28 + self.contentView.addSubview(self.closeBtn)
  29 + }
  30 +
  31 +}
... ...
metaCode/Classes/Main/HomePage/View/Shop/Shoph5Pay/CNLiveShopPayNeedPaymentCell.swift 0 → 100644
  1 +//
  2 +// CNLiveShopPayNeedPaymentCell.swift
  3 +// metaCode
  4 +//
  5 +// Created by zx on 2024/4/10.
  6 +// 电商h5支付 需要付款cell
  7 +
  8 +import Foundation
  9 +
  10 +class CNLiveShopPayNeedPaymentCell:UITableViewCell{
  11 +
  12 + lazy var titleLabel: UILabel = {
  13 + let titleLabel = UILabel.init(frame: CGRectMake(10, 0, KSreenWidth-20, 60))
  14 + titleLabel.textColor = UIColor(red:0.25, green:0.23, blue:0.28, alpha:1.00)
  15 + titleLabel.textAlignment = .left
  16 + titleLabel.font = Font_16
  17 + titleLabel.adjustsFontSizeToFitWidth=true
  18 + return titleLabel
  19 + }()
  20 +
  21 + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
  22 + super.init(style: style, reuseIdentifier: reuseIdentifier)
  23 + self.selectionStyle = .none
  24 + self.initUI()
  25 + }
  26 +
  27 + required init?(coder: NSCoder) {
  28 + fatalError("init(coder:) has not been implemented")
  29 + }
  30 +
  31 + // MARK: - initUI
  32 + func initUI(){
  33 + self.contentView.addSubview(self.titleLabel)
  34 + }
  35 +}
  36 +
... ...
metaCode/Classes/Main/HomePage/View/Shop/Shoph5Pay/CNLiveShopPayWeChatAlipayCell.swift 0 → 100644
  1 +//
  2 +// CNLiveShopPayWeChatAlipayCell.swift
  3 +// metaCode
  4 +//
  5 +// Created by zx on 2024/4/10.
  6 +// 电商h5支付 微信支付宝cell
  7 +
  8 +import Foundation
  9 +import SnapKit
  10 +
  11 +class CNLiveShopPayWeChatAlipayCell:UITableViewCell{
  12 +
  13 + lazy var selectImgView :UIImageView = {
  14 + let selectImgView = UIImageView(image: UIImage(named: "tsq_xz"))
  15 + return selectImgView
  16 + }()
  17 +
  18 + lazy var iconImgView :UIImageView = {
  19 + let iconImgView = UIImageView()
  20 + return iconImgView
  21 + }()
  22 +
  23 + lazy var titleLabel: UILabel = {
  24 + let titleLabel = UILabel.init(frame: CGRectZero)
  25 + titleLabel.textColor = UIColor(red:0.04, green:0.02, blue:0.07, alpha:1.00)
  26 + titleLabel.textAlignment = .left
  27 + titleLabel.font = BoldFont_16
  28 + titleLabel.adjustsFontSizeToFitWidth=true
  29 + return titleLabel
  30 + }()
  31 +
  32 + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
  33 + super.init(style: style, reuseIdentifier: reuseIdentifier)
  34 + self.selectionStyle = .none
  35 + self.initUI()
  36 + self.layout()
  37 + }
  38 +
  39 + required init?(coder: NSCoder) {
  40 + fatalError("init(coder:) has not been implemented")
  41 + }
  42 +
  43 + // MARK: - initUI
  44 + func initUI(){
  45 + self.contentView.addSubview(self.titleLabel)
  46 + self.contentView.addSubview(self.iconImgView)
  47 + self.contentView.addSubview(self.selectImgView)
  48 + self.selectImgView.isHidden = true
  49 + }
  50 + func layout(){
  51 + self.iconImgView.snp.makeConstraints { make in
  52 + make.left.equalToSuperview().offset(10)
  53 + make.centerY.equalToSuperview()
  54 + }
  55 + self.titleLabel.snp.makeConstraints { make in
  56 + make.left.equalTo(self.iconImgView.snp.right).offset(20)
  57 + make.centerY.equalToSuperview()
  58 + }
  59 + self.selectImgView.snp.makeConstraints { make in
  60 + make.right.equalToSuperview().offset(-30)
  61 + make.centerY.equalToSuperview()
  62 + }
  63 + }
  64 +}
... ...
metaCode/Classes/Main/HomePage/View/VerticalViews/DownSlide/CNDownSlideSingleCourseCell.swift
... ... @@ -120,7 +120,7 @@ class CNDownSlideSingleCourseCell: UITableViewCell {
120 120 bgBackView.backgroundColor = .white
121 121  
122 122 var titleTop:CGFloat = DownSlideRecommendLeftGap
123   - if model.blockSubTitle.count ?? 0 > 0{
  123 + if model.blockSubTitle.count > 0{
124 124 let subtitleLbl = UILabel(frame: CGRect(x: DownSlideRecommendLeftGap, y: DownSlideRecommendLeftGap, width: DownSlideSingleCourseW-DownSlideRecommendLeftGap*2, height: 17))
125 125 subtitleLbl.text = model.blockSubTitle
126 126 subtitleLbl.font = Font_12
... ... @@ -148,20 +148,20 @@ class CNDownSlideSingleCourseCell: UITableViewCell {
148 148  
149 149 //小icon
150 150 let imageView = UIImageView(frame: CGRectMake(DownSlideRecommendLeftGap, titleLbl.bottom+DownSlideRecommendLeftGap+CGFloat(i)*(DownSlideAllCourseRowTopYGap+DownSlideAllCourseRowImageWH+DownSlideAllCourseRowBottomYGap), CGFloat(DownSlideAllCourseRowImageWH), CGFloat(DownSlideAllCourseRowImageWH)))
151   - imageView.kf.setImage(with: URL(string:contentMdl.poster ?? ""))
  151 + imageView.kf.setImage(with: URL(string:contentMdl.poster ))
152 152 imageView.layer.cornerRadius = 12
153 153 imageView.clipsToBounds = true
154 154 imageView.contentMode = .scaleAspectFill
155 155 bgBackView.addSubview(imageView)
156 156  
157 157 let titleLbl = UILabel(frame: CGRect(x: imageView.right+DownSlideRecommendLeftGap, y: imageView.top, width: DownSlideSingleCourseW-90-imageView.right, height: 21))
158   - titleLbl.text = contentMdl.title ?? ""
  158 + titleLbl.text = contentMdl.title
159 159 titleLbl.font = Font_15
160 160 titleLbl.textColor = HexColor("#333333")
161 161 bgBackView.addSubview(titleLbl)
162 162  
163 163 let subTitleLbl = UILabel(frame: CGRect(x: titleLbl.left, y:titleLbl.bottom+3 , width: titleLbl.width, height: 17))
164   - subTitleLbl.text = contentMdl.subTitle ?? ""
  164 + subTitleLbl.text = contentMdl.subTitle
165 165 subTitleLbl.font = Font_12
166 166 subTitleLbl.textColor = HexColor("#999999")
167 167 bgBackView.addSubview(subTitleLbl)
... ... @@ -170,7 +170,12 @@ class CNDownSlideSingleCourseCell: UITableViewCell {
170 170 enterBtn.frame = CGRect(x: bgBackView.right-25-65, y: 0, width: 65, height: 30)
171 171 enterBtn.centerY = imageView.centerY
172 172 enterBtn.setBackgroundImage(UIImage(named: "homepage_down_enter"), for: .normal)
173   - enterBtn.setTitle("进入", for: .normal)
  173 + if contentMdl.model == kCNDownSlideContentsModelModelAlbum_ugc{
  174 + enterBtn.setTitle("播放", for: .normal)
  175 + }else{
  176 + enterBtn.setTitle("进入", for: .normal)
  177 + }
  178 +
174 179 enterBtn.titleLabel?.font = BoldFont_13
175 180 enterBtn.setTitleColor(HexColor("#FFFFFF"), for: .normal)
176 181 enterBtn.addTarget(self, action: #selector(enterBtnAction(_:)), for: .touchUpInside)
... ... @@ -255,6 +260,9 @@ class CNDownSlideSingleCourseCell: UITableViewCell {
255 260 contentView.addSubview(bgBackView)
256 261  
257 262 let contentsNum = model.list.count
  263 + if contentsNum == 0{
  264 + return
  265 + }
258 266 //总显示块数/循环数
259 267 var totalNum = (contentsNum >= 4) ? 4 : contentsNum
260 268 var cellH = DownSlideAllCourseTitleH + DownSlideAllCourseRowH * CGFloat(totalNum)+DownSlideRecommendLeftGap
... ...
metaCode/Classes/Main/HomePage/View/VerticalViews/DownSlide/CNDownSlideView.swift
... ... @@ -39,7 +39,7 @@ class CNDownSlideView:UIView{
39 39  
40 40 var url:URL?
41 41 if (_downPath != ""){
42   - url = URL.init(string: _downPath!)
  42 + url = URL.init(string:_downPath!)//"https://managemall.cnlive.com/html/mall/1/#/pages/main/goodsList/goodsList?scene=app"cn)//_downPath!)//
43 43 }else{
44 44 url = nil
45 45 }
... ... @@ -96,6 +96,9 @@ class CNDownSlideView:UIView{
96 96 if(type == UpDownTypeH5){
97 97 if _downPath?.count ?? 0 > 0{
98 98 self.addSubview(self.webView)
  99 + if self.webView.cnWebView.url?.absoluteString.contains(_downPath) == false && self.webView.cnWebView.url != nil{
  100 + self.webView.loadUrl(url: _downPath!)
  101 + }
99 102 }
100 103 }else if(type == UpDownTypePage){
101 104 self.addSubview(self.upSlideVC.view)
... ...
metaCode/Classes/Main/HomePage/View/VerticalViews/UpSlide/CNUpSlideView.swift
... ... @@ -29,13 +29,13 @@ class CNUpSlideView:UIView{
29 29 configuration.userContentController = WKUserContentController()
30 30  
31 31 var url:URL?
32   - if (_downPath != ""){
33   - url = URL.init(string: _downPath!)
  32 + if (self.downPath != ""){
  33 + url = URL.init(string: _downPath!)//"https://managemall.cnlive.com/html/mall/1/#/pages/main/goodsList/goodsList?scene=app")//
34 34 }else{
35 35 url = nil
36 36 }
37   - let webView = CNWebView(frame: CGRectMake(10, KNavigationHeight+KStatusBarHeight+10, self.width - 20, self.height-KNavigationHeight-KStatusBarHeight-10), configuration: configuration,url: url)
38 37  
  38 + let webView = CNWebView(frame: CGRectMake(10, KNavigationHeight+KStatusBarHeight+10, KSreenWidth - 20, KSreenHeight-KNavigationHeight-KStatusBarHeight-10), configuration: configuration,url: url)
39 39 webView.cnWebView.scrollView.showsVerticalScrollIndicator = false
40 40 webView.cnWebView.scrollView.showsHorizontalScrollIndicator = false
41 41 webView.cnWebView.backgroundColor = .clear
... ... @@ -78,9 +78,13 @@ class CNUpSlideView:UIView{
78 78 view.removeFromSuperview()
79 79 }
80 80 if(type == UpDownTypeH5){
81   - self.addSubview(self.webView)
82   - }
83   - else if(type == UpDownTypePage){
  81 + if _downPath?.count ?? 0 > 0{
  82 + self.addSubview(self.webView)
  83 + if self.webView.cnWebView.url?.absoluteString.contains(_downPath) == false && self.webView.cnWebView.url != nil{
  84 + self.webView.loadUrl(url: _downPath!)
  85 + }
  86 + }
  87 + }else if(type == UpDownTypePage){
84 88  
85 89 }else if(type == UpDownTypeShopDetail){
86 90 currentViewController()?.addChild(self.upSlideVC)//看行不行
... ...
metaCode/Classes/Main/HomePage/ViewModel/CNLiveShoph5ViewModel.swift 0 → 100644
  1 +//
  2 +// CNLiveShoph5ViewModel.swift
  3 +// metaCode
  4 +//
  5 +// Created by zx on 2024/4/8.
  6 +// 电商h5请求
  7 +
  8 +import Foundation
  9 +import CNLiveRequestBastKit
  10 +
  11 +class CNLiveShoph5ViewModel:NSObject{
  12 + /// 获取分享数据
  13 + /// @param type 分享类型 1 文创商品详情 2普通商品详情 3主题活动列表 4店铺首页 5达人详情 6动态详情 7达人列表 8礼物详情 9优选库首页 10电影作品详情 11电影作品列表 12 服务号详情 13 抽奖详情 14 电影作品活动 15电影作品个人中心 16 新店铺首页 17 大众体育活动列表 18 活动首页分享 19 抽奖活动 20抽奖活动列表 21开箱子活动 22崇学向善活动页面 23获取大众体育类型列表 24活动首页 25折扣活动列表分享 26折扣活动分享商品 27崇学向善活动页面2 28领头雁首页 29领头雁成绩查询 30领头雁证书分享 31武汉活动小家音响 32抗议扶贫活动 33领头雁新闻分享 34领头雁招募 35美食中国 36公共加载页面 37领头雁电商活动 38活动专区 39成长活动 40成长商品详情 41成长活动订单列表
  14 + /// @param targetId 目标id
  15 + /// @param ext 后台要求的附加参数
  16 + /// @param result 结果
  17 + static func postGetShareDataWithType(type:NSInteger,targetId:String,ext:String,resultBlock: @escaping downSlideResultBlock) {
  18 + let param = NSMutableDictionary()
  19 + param.setValue("\(type)", forKey: "type")
  20 + param.setValue(targetId, forKey: "id")
  21 + param.setValue(ext, forKey: "ext")
  22 +
  23 + CNLiveNetworking.setAllowRequestDefaultArgument(true)
  24 + CNLiveNetworking.setupShowDataResult(false)
  25 + CNLiveNetworking.setupDSRequest(true)
  26 + let custom_param = NSMutableDictionary()
  27 + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appId_wjj, forKey: "appId")
  28 + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appKey_wjj, forKey: "appKey")
  29 + CNLiveNetworking.setupCustomParam(custom_param as? [String : String])
  30 + CNLiveNetworking.requestNetwork(with: .POST, urlString: APPBaseWjjShopUrl+"/Api/Index3/getShareData", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in
  31 + hiddenLoading()
  32 + if (error == nil) {
  33 + let resp = result as! NSDictionary
  34 + let dataDic = resp["data"] as! NSDictionary
  35 + let shopDetailModel = newDictionaryToModel(dataDic as! [String : Any], CNLiveShopCommentRequestShareModel.self)
  36 + resultBlock(shopDetailModel,.success)
  37 + }else{
  38 + resultBlock(NSNull(),.failed)
  39 + }
  40 + }
  41 + }
  42 +
  43 + /*
  44 + 支付订单信息
  45 + 参数 orderId 订单号
  46 + */
  47 + static func postOrderPayWithParams(orderId:String,resultBlock: @escaping downSlideResultBlock) {
  48 + let param = NSMutableDictionary()
  49 + param.setValue(orderId, forKey: "orderId")
  50 +
  51 + CNLiveNetworking.setAllowRequestDefaultArgument(true)
  52 + CNLiveNetworking.setupShowDataResult(false)
  53 + CNLiveNetworking.setupDSRequest(true)
  54 + let custom_param = NSMutableDictionary()
  55 + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appId_wjj, forKey: "appId")
  56 + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appKey_wjj, forKey: "appKey")
  57 + CNLiveNetworking.setupCustomParam(custom_param as? [String : String])
  58 + CNLiveNetworking.requestNetwork(with: .POST, urlString: APPBaseWjjShopUrl+"/Api/Index3/orderPay", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in
  59 + hiddenLoading()
  60 + if (error == nil) {
  61 + let resp = result as! NSDictionary
  62 + let dataDic = resp["data"] as! NSDictionary
  63 + let orderModel = newDictionaryToModel(dataDic as! [String : Any], CNLivePayOrderInfoModel.self)
  64 + resultBlock(orderModel,.success)
  65 + }else{
  66 + resultBlock(NSNull(),.failed)
  67 + }
  68 + }
  69 + }
  70 +
  71 + /**
  72 + 请求订单是否支付成功
  73 +
  74 + @param orderId 订单号
  75 + @param result 结果 //dic: NSString * score, NSString * desc
  76 + */
  77 + static func postIsOrderPayWithOrderId(orderId:String,resultBlock: @escaping downSlideResultBlock) {
  78 +
  79 + let param = NSMutableDictionary()
  80 + param.setValue(orderId, forKey: "orderId")
  81 +
  82 + CNLiveNetworking.setAllowRequestDefaultArgument(true)
  83 + CNLiveNetworking.setupShowDataResult(false)
  84 + CNLiveNetworking.setupDSRequest(true)
  85 + let custom_param = NSMutableDictionary()
  86 + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appId_wjj, forKey: "appId")
  87 + custom_param.setValue(CNLiveMCEnvironmentManager.shared.appKey_wjj, forKey: "appKey")
  88 + CNLiveNetworking.setupCustomParam(custom_param as? [String : String])
  89 + CNLiveNetworking.requestNetwork(with: .POST, urlString: APPBaseWjjShopUrl+"/Api/Index3/isOrderPay", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in
  90 + hiddenLoading()
  91 + let resp = result as! NSDictionary
  92 + let dataDic = resp["data"] as! NSDictionary
  93 + let code = resp["code"] as? String
  94 + if (code == "200") {
  95 + resultBlock(dataDic,.success)
  96 + }else{
  97 + resultBlock(NSNull(),.failed)
  98 + }
  99 + }
  100 + }
  101 +}
... ...
metaCode/Classes/Main/Model/CNLiveDownSlideModel.swift
... ... @@ -39,14 +39,13 @@ class CNLiveDownSlideModel: BaseModel {
39 39  
40 40 }
41 41  
42   -//下滑tableview背景颜色
43 42 let kCNDownSlideContentsModelModel1: String = "1"
44 43 let kCNDownSlideContentsModelModel2: String = "2"
45 44 let kCNDownSlideContentsModelModel3: String = "3"
46 45 let kCNDownSlideContentsModelModel4: String = "4"
47 46 let kCNDownSlideContentsModelModelAlbum: String = "album"
48 47 let kCNDownSlideContentsModelModelAlbum_video: String = "album_video"
49   -let kCNDownSlideContentsModelModelAlbum_ugc: String = "album_ugc"
  48 +let kCNDownSlideContentsModelModelAlbum_ugc: String = "album_ugc"//短剧
50 49 let kCNDownSlideContentsModelModelServing: String = "serving"//微信小程序
51 50  
52 51  
... ...
metaCode/Classes/Main/Model/CNLivePayOrderInfoModel.swift 0 → 100644
  1 +//
  2 +// CNLivePayOrderInfoModel.swift
  3 +// metaCode
  4 +//
  5 +// Created by zx on 2024/4/9.
  6 +// 电商h5支付订单model
  7 +
  8 +import Foundation
  9 +
  10 +class CNLivePayOrderInfoModel:BaseModel{
  11 + ///订单id
  12 + var id: String = ""
  13 + ///订单号
  14 + var orderId: String = ""
  15 + ///订单信息
  16 + var body: String = ""
  17 + ///总价(分)
  18 + var totalMoney: String = ""
  19 + ///回调地址
  20 + var notify_url: String = ""
  21 + ///优惠金额(分)
  22 + var couponMoney: String = ""
  23 + ///用户id
  24 + var user_id: String = ""
  25 + ///收款人id
  26 + var toId: String = ""
  27 + ///收款人类型(1个人 2群组 3达人)
  28 + var toType: String = ""
  29 + ///支付人类型(1个人 2群组 3达人)
  30 + var fromType: String = ""
  31 + ///支付类型 foods_order餐厅订单 mall_order商城订单
  32 + var sourceType: String = ""
  33 + ///是否为公会限购订单(1:是 0:不是)
  34 + var is_limit: String = ""
  35 + ///integral > 0 为积分订单
  36 + var integral: String = ""
  37 +}
... ...
metaCode/Classes/Main/Util/CNLiveDownSlideTool.swift
... ... @@ -43,6 +43,7 @@ class CNLiveDownSlideTool:NSObject{
43 43 }
44 44 }else if (model == kCNDownSlideContentsModelModel3) || (model == kCNDownSlideContentsModelModel4){
45 45 let webVC = CNWebViewController()
  46 +// webVC.url = URL(string: "http://wjjh5.cnlive.com/cnBlockMore.html?channelName=yjzg&pageId=&isShowTitle=true&blockType=28&contentType=13&title=%E5%9B%AD%E9%95%BF%E8%AF%BE%E7%A8%8B&pageName=&moreUrl=https%3A%2F%2Fcmsapi.cnlive.com%2FcontentApi%2FgetBlockContents%3FblockId%3D12165")//"https://managemall.cnlive.com/html/mall/1/#/pages/main/goodsList/goodsList?scene=app")
46 47 webVC.url = URL(string: thirdUrl)
47 48 if controller != nil{
48 49 controller!.navigationController?.pushViewController(webVC, animated: pushAnimated)
... ...
metaCode/Classes/Other/AppDelegate.swift
... ... @@ -105,7 +105,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
105 105  
106 106 let shop_dic : Dictionary = ["Phone-Model":"iPhone","Uid":UserInfoManager.shared.userInfo.uid ,"CFBundleShortVersionString":ver,"Shop-Version":"0.6.2"]
107 107 CNLiveNetworking.setupDSShopParam(shop_dic)
108   - CNLiveNetworking.setRequestTimeoutInterval(20)
  108 + CNLiveNetworking.setRequestTimeoutInterval(60)
109 109 CNLiveNetworking.setupShowDataResult(false)
110 110 CNLiveNetworking.setupSignKey(APPKey)
111 111 CNLiveNetworking.setAllowRequestDefaultArgument(true)
... ...
metaCode/Classes/Vendors/NewPagedFlowView.m
... ... @@ -557,6 +557,22 @@ static NSString *subviewClassName;
557 557 newPoint.y = point.y - _scrollView.frame.origin.y + _scrollView.contentOffset.y;
558 558 if ([_scrollView pointInside:newPoint withEvent:event]) {
559 559 return [_scrollView hitTest:newPoint withEvent:event];
  560 + }else{
  561 + //24年4-12,多层的子视图超过了父视图,如果有子视图内点击,传递给子视图点击事件
  562 + PGIndexBannerSubiew *cell = [_cells objectAtIndex:self.currentPageIndex];
  563 + for (UIView *view in cell.subviews) {
  564 + if ([view isKindOfClass:[UIScrollView class]]){
  565 + UIScrollView *scrollView = (UIScrollView *)view;
  566 + for (UIView *subView in [scrollView subviews]) {
  567 + // 将父类point点转换成子类坐标系下的点
  568 + CGPoint convertedPoint = [subView convertPoint:point fromView:self];
  569 + UIView *targetView = [subView hitTest:convertedPoint withEvent:event];
  570 + if (targetView != nil) {
  571 + return targetView;
  572 + }
  573 + }
  574 + }
  575 + }
560 576 }
561 577  
562 578 return _scrollView;
... ...
metaCode/Info.plist
... ... @@ -54,6 +54,8 @@
54 54 <key>LSApplicationQueriesSchemes</key>
55 55 <array>
56 56 <string>wechat</string>
  57 + <string>alipay</string>
  58 + <string>alipays</string>
57 59 <string>weixin</string>
58 60 <string>weixinULAPI</string>
59 61 <string>mqqOpensdkSSoLogin</string>
... ... @@ -74,9 +76,6 @@
74 76 <string>mqqwpa</string>
75 77 <string>mqzone</string>
76 78 <string>mqqopensdkminiapp</string>
77   -
78   -<!-- <string>sinaweibo</string>-->
79   -<!-- <string>sinaweibohd</string>-->
80 79 </array>
81 80 <key>NSAppTransportSecurity</key>
82 81 <dict>
... ...
metaCode/Supporting Files/Assets.xcassets/Shoph5/Contents.json 0 → 100644
  1 +{
  2 + "info" : {
  3 + "author" : "xcode",
  4 + "version" : 1
  5 + }
  6 +}
... ...
metaCode/Supporting Files/Assets.xcassets/Shoph5/dd_weixin.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "dd_weixin@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "dd_weixin@3x.png",
  14 + "idiom" : "universal",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "author" : "xcode",
  20 + "version" : 1
  21 + }
  22 +}
... ...
metaCode/Supporting Files/Assets.xcassets/Shoph5/dd_weixin.imageset/dd_weixin@2x.png 0 → 100644

1.89 KB

metaCode/Supporting Files/Assets.xcassets/Shoph5/dd_weixin.imageset/dd_weixin@3x.png 0 → 100644

2.46 KB

metaCode/Supporting Files/Assets.xcassets/Shoph5/dd_zhifubao.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "dd_zhifubao@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "dd_zhifubao@3x.png",
  14 + "idiom" : "universal",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "author" : "xcode",
  20 + "version" : 1
  21 + }
  22 +}
... ...
metaCode/Supporting Files/Assets.xcassets/Shoph5/dd_zhifubao.imageset/dd_zhifubao@2x.png 0 → 100644

1.9 KB

metaCode/Supporting Files/Assets.xcassets/Shoph5/dd_zhifubao.imageset/dd_zhifubao@3x.png 0 → 100644

2.38 KB

metaCode/Supporting Files/Assets.xcassets/Shoph5/tsq_xz.imageset/Contents.json 0 → 100644
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "scale" : "1x"
  6 + },
  7 + {
  8 + "filename" : "tsq_xz@2x.png",
  9 + "idiom" : "universal",
  10 + "scale" : "2x"
  11 + },
  12 + {
  13 + "filename" : "tsq_xz@3x.png",
  14 + "idiom" : "universal",
  15 + "scale" : "3x"
  16 + }
  17 + ],
  18 + "info" : {
  19 + "author" : "xcode",
  20 + "version" : 1
  21 + }
  22 +}
... ...
metaCode/Supporting Files/Assets.xcassets/Shoph5/tsq_xz.imageset/tsq_xz@2x.png 0 → 100644

1.5 KB

metaCode/Supporting Files/Assets.xcassets/Shoph5/tsq_xz.imageset/tsq_xz@3x.png 0 → 100644

1.83 KB