Explorar o código

商品规格页面、加购完成
注册账号修改

wangmeng hai 1 ano
pai
achega
099efeb7cc
Modificáronse 41 ficheiros con 1162 adicións e 371 borrados
  1. 48 16
      Asteria.xcodeproj/project.pbxproj
  2. 23 0
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_close_black.imageset/Contents.json
  3. BIN=BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_close_black.imageset/组 8609.png
  4. BIN=BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_close_black.imageset/组 8609@2x.png
  5. BIN=BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_close_black.imageset/组 8609@3x.png
  6. 23 0
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_close_white.imageset/Contents.json
  7. BIN=BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_close_white.imageset/组 9646.png
  8. BIN=BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_close_white.imageset/组 9646@2x.png
  9. BIN=BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_close_white.imageset/组 9646@3x.png
  10. 23 0
      Asteria/Fuction/Goods/GoodsSize/Cell/GoodsSizeCountCell.h
  11. 162 0
      Asteria/Fuction/Goods/GoodsSize/Cell/GoodsSizeCountCell.m
  12. 22 0
      Asteria/Fuction/Goods/GoodsSize/Cell/GoodsSizePayMentCell.h
  13. 51 0
      Asteria/Fuction/Goods/GoodsSize/Cell/GoodsSizePayMentCell.m
  14. 21 0
      Asteria/Fuction/Goods/GoodsSize/Cell/GoosSizeSelectCell.h
  15. 139 0
      Asteria/Fuction/Goods/GoodsSize/Cell/GoosSizeSelectCell.m
  16. 25 0
      Asteria/Fuction/Goods/GoodsSize/GoodsSizeSelectTableV.h
  17. 48 0
      Asteria/Fuction/Goods/GoodsSize/GoodsSizeSelectTableV.m
  18. 7 1
      Asteria/Fuction/Goods/M/GoodsInformationM.h
  19. 0 16
      Asteria/Fuction/Goods/Size/As_GoodsSizeC.h
  20. 0 23
      Asteria/Fuction/Goods/Size/As_GoodsSizeC.m
  21. 2 1
      Asteria/Fuction/Goods/Target/Target_Goods.h
  22. 9 2
      Asteria/Fuction/Goods/Target/Target_Goods.m
  23. 1 1
      Asteria/Fuction/Goods/V/Banner/WKM_goodsBanner.m
  24. 1 1
      Asteria/Fuction/Goods/V/GoodsDetailsPayV.m
  25. 15 2
      Asteria/Fuction/Goods/VC/AS_GoodsDetailsC.m
  26. 0 0
      Asteria/Fuction/Goods/VC/AS_GoodsReviewsListC.h
  27. 3 3
      Asteria/Fuction/Goods/Revies/AS_GoodsReviewsListC.m
  28. 17 0
      Asteria/Fuction/Goods/VC/AS_GoodsSizeC.h
  29. 263 0
      Asteria/Fuction/Goods/VC/AS_GoodsSizeC.m
  30. 6 0
      Asteria/Fuction/Goods/VM/ASGoodsDetailsVM.h
  31. 60 0
      Asteria/Fuction/Goods/VM/ASGoodsDetailsVM.m
  32. 16 10
      Asteria/Fuction/Login/V/LoginSignUpV.m
  33. 23 17
      Asteria/Fuction/Login/VC/AS_SignUpC.m
  34. 2 2
      Asteria/NetTools/ASNetApis.h
  35. 7 4
      Asteria/NetTools/ASNetTools.m
  36. 2 1
      Asteria/Product/CTMediatoaTargets/CTMediator+ASTargerts.h
  37. 6 1
      Asteria/Product/CTMediatoaTargets/CTMediator+ASTargerts.m
  38. 1 1
      Podfile.lock
  39. 1 1
      Pods/Manifest.lock
  40. 134 267
      Pods/Pods.xcodeproj/project.pbxproj
  41. 1 1
      Pods/Target Support Files/Pods-Asteria/Pods-Asteria-frameworks.sh

+ 48 - 16
Asteria.xcodeproj/project.pbxproj

@@ -191,6 +191,7 @@
 		9A35203A2B479BAA00D097CB /* YJLAttributesLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A3520392B479BAA00D097CB /* YJLAttributesLabel.m */; };
 		9A35203E2B47FF2300D097CB /* GoodsReviewsListTableV.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A35203D2B47FF2300D097CB /* GoodsReviewsListTableV.m */; };
 		9A3520412B48000F00D097CB /* GoodsReviewsListM.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A3520402B48000F00D097CB /* GoodsReviewsListM.m */; };
+		9A3ADC0A2B60BAE200B04BA6 /* GoodsSizePayMentCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A3ADC092B60BAE200B04BA6 /* GoodsSizePayMentCell.m */; };
 		9A3F5CAB2B3BBEAB00DDB6A7 /* GoodsDetailsPayV.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A3F5CAA2B3BBEAB00DDB6A7 /* GoodsDetailsPayV.m */; };
 		9A3F5CAF2B3BC11000DDB6A7 /* AlertMyCartDeleteV.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A3F5CAE2B3BC11000DDB6A7 /* AlertMyCartDeleteV.m */; };
 		9A3F5CB22B3BF63A00DDB6A7 /* Goods.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9A3F5CB12B3BF63A00DDB6A7 /* Goods.xcassets */; };
@@ -199,10 +200,13 @@
 		9A3F5CBB2B3C192000DDB6A7 /* GoodsDetailsBottomV.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A3F5CBA2B3C192000DDB6A7 /* GoodsDetailsBottomV.m */; };
 		9A5C64582A12064300CBB185 /* AS_LoginC.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A5C64572A12064300CBB185 /* AS_LoginC.m */; };
 		9A5C645B2A1206E500CBB185 /* common.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9A5C645A2A1206E500CBB185 /* common.xcassets */; };
+		9A5F528A2B5F56FD007D3791 /* AS_GoodsSizeC.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A5F52892B5F56FD007D3791 /* AS_GoodsSizeC.m */; };
+		9A5F528D2B5F59D1007D3791 /* GoodsSizeSelectTableV.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A5F528B2B5F59D0007D3791 /* GoodsSizeSelectTableV.m */; };
+		9A5F52952B5F59EA007D3791 /* GoosSizeSelectCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A5F528F2B5F59EA007D3791 /* GoosSizeSelectCell.m */; };
+		9A5F52962B5F59EA007D3791 /* GoodsSizeCountCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A5F52932B5F59EA007D3791 /* GoodsSizeCountCell.m */; };
 		9A65DE512A132FB700BB1269 /* LoginThirdAuthV.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A65DE502A132FB700BB1269 /* LoginThirdAuthV.m */; };
 		9A788C442A08A663003E0025 /* Target_Goods.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A788C432A08A663003E0025 /* Target_Goods.m */; };
 		9A7DA6A12A0CE33500136974 /* Asteria.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9A7DA6A02A0CE33500136974 /* Asteria.xcassets */; };
-		9A8DD8C52A0B8F1700573324 /* As_GoodsSizeC.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A8DD8C42A0B8F1700573324 /* As_GoodsSizeC.m */; };
 		9A98E5072B5A15A500E8C5C1 /* QDSingleImagePickerPreviewViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A98E5052B5A15A400E8C5C1 /* QDSingleImagePickerPreviewViewController.m */; };
 		9A98E50A2B5A1EB700E8C5C1 /* Photos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E5092B5A1EB700E8C5C1 /* Photos.framework */; };
 		9A98E50C2B5A1EC500E8C5C1 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E50B2B5A1EC500E8C5C1 /* Security.framework */; };
@@ -663,6 +667,8 @@
 		9A35203D2B47FF2300D097CB /* GoodsReviewsListTableV.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GoodsReviewsListTableV.m; sourceTree = "<group>"; };
 		9A35203F2B48000F00D097CB /* GoodsReviewsListM.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GoodsReviewsListM.h; sourceTree = "<group>"; };
 		9A3520402B48000F00D097CB /* GoodsReviewsListM.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GoodsReviewsListM.m; sourceTree = "<group>"; };
+		9A3ADC082B60BAE200B04BA6 /* GoodsSizePayMentCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GoodsSizePayMentCell.h; sourceTree = "<group>"; };
+		9A3ADC092B60BAE200B04BA6 /* GoodsSizePayMentCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GoodsSizePayMentCell.m; sourceTree = "<group>"; };
 		9A3F5CA92B3BBEAB00DDB6A7 /* GoodsDetailsPayV.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GoodsDetailsPayV.h; sourceTree = "<group>"; };
 		9A3F5CAA2B3BBEAB00DDB6A7 /* GoodsDetailsPayV.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GoodsDetailsPayV.m; sourceTree = "<group>"; };
 		9A3F5CAD2B3BC11000DDB6A7 /* AlertMyCartDeleteV.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AlertMyCartDeleteV.h; sourceTree = "<group>"; };
@@ -676,13 +682,19 @@
 		9A5C64562A12064300CBB185 /* AS_LoginC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AS_LoginC.h; sourceTree = "<group>"; };
 		9A5C64572A12064300CBB185 /* AS_LoginC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AS_LoginC.m; sourceTree = "<group>"; };
 		9A5C645A2A1206E500CBB185 /* common.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = common.xcassets; sourceTree = "<group>"; };
+		9A5F52882B5F56FD007D3791 /* AS_GoodsSizeC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AS_GoodsSizeC.h; sourceTree = "<group>"; };
+		9A5F52892B5F56FD007D3791 /* AS_GoodsSizeC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AS_GoodsSizeC.m; sourceTree = "<group>"; };
+		9A5F528B2B5F59D0007D3791 /* GoodsSizeSelectTableV.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GoodsSizeSelectTableV.m; sourceTree = "<group>"; };
+		9A5F528C2B5F59D1007D3791 /* GoodsSizeSelectTableV.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GoodsSizeSelectTableV.h; sourceTree = "<group>"; };
+		9A5F528F2B5F59EA007D3791 /* GoosSizeSelectCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GoosSizeSelectCell.m; sourceTree = "<group>"; };
+		9A5F52912B5F59EA007D3791 /* GoodsSizeCountCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GoodsSizeCountCell.h; sourceTree = "<group>"; };
+		9A5F52922B5F59EA007D3791 /* GoosSizeSelectCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GoosSizeSelectCell.h; sourceTree = "<group>"; };
+		9A5F52932B5F59EA007D3791 /* GoodsSizeCountCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GoodsSizeCountCell.m; sourceTree = "<group>"; };
 		9A65DE4F2A132FB700BB1269 /* LoginThirdAuthV.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LoginThirdAuthV.h; sourceTree = "<group>"; };
 		9A65DE502A132FB700BB1269 /* LoginThirdAuthV.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LoginThirdAuthV.m; sourceTree = "<group>"; };
 		9A788C422A08A663003E0025 /* Target_Goods.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Target_Goods.h; sourceTree = "<group>"; };
 		9A788C432A08A663003E0025 /* Target_Goods.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Target_Goods.m; sourceTree = "<group>"; };
 		9A7DA6A02A0CE33500136974 /* Asteria.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Asteria.xcassets; sourceTree = "<group>"; };
-		9A8DD8C32A0B8F1700573324 /* As_GoodsSizeC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = As_GoodsSizeC.h; sourceTree = "<group>"; };
-		9A8DD8C42A0B8F1700573324 /* As_GoodsSizeC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = As_GoodsSizeC.m; sourceTree = "<group>"; };
 		9A98E5052B5A15A400E8C5C1 /* QDSingleImagePickerPreviewViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QDSingleImagePickerPreviewViewController.m; sourceTree = "<group>"; };
 		9A98E5062B5A15A400E8C5C1 /* QDSingleImagePickerPreviewViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = QDSingleImagePickerPreviewViewController.h; sourceTree = "<group>"; };
 		9A98E5092B5A1EB700E8C5C1 /* Photos.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Photos.framework; path = System/Library/Frameworks/Photos.framework; sourceTree = SDKROOT; };
@@ -1710,8 +1722,6 @@
 				9A98E5042B5A159500E8C5C1 /* Base */,
 				9ADA8A1C2B4E481E00BACDEA /* GoodsReviewsWriteC.h */,
 				9ADA8A1D2B4E481E00BACDEA /* GoodsReviewsWriteC.m */,
-				9A31EDFE2B469A73009F11EE /* AS_GoodsReviewsListC.h */,
-				9A31EDFF2B469A73009F11EE /* AS_GoodsReviewsListC.m */,
 				9A32A2262B4BEB5F005A5831 /* V */,
 				9A35203B2B47FEDE00D097CB /* cell */,
 			);
@@ -1762,9 +1772,9 @@
 		9A337E4F2A04FA0A00D058A5 /* Goods */ = {
 			isa = PBXGroup;
 			children = (
+				9A5F52982B5F5A07007D3791 /* GoodsSize */,
 				9A32A2252B4BEB2D005A5831 /* Revies */,
 				9A3F5CB02B3BF61B00DDB6A7 /* Assets */,
-				9A8DD8C22A0B8EDD00573324 /* Size */,
 				9A3735702A0B4606008BB3CE /* VM */,
 				9AD364C82A05E77200452C7A /* M */,
 				9AD364C72A05E76D00452C7A /* V */,
@@ -1842,6 +1852,29 @@
 			path = Login;
 			sourceTree = "<group>";
 		};
+		9A5F528E2B5F59EA007D3791 /* Cell */ = {
+			isa = PBXGroup;
+			children = (
+				9A5F52912B5F59EA007D3791 /* GoodsSizeCountCell.h */,
+				9A5F52932B5F59EA007D3791 /* GoodsSizeCountCell.m */,
+				9A5F52922B5F59EA007D3791 /* GoosSizeSelectCell.h */,
+				9A5F528F2B5F59EA007D3791 /* GoosSizeSelectCell.m */,
+				9A3ADC082B60BAE200B04BA6 /* GoodsSizePayMentCell.h */,
+				9A3ADC092B60BAE200B04BA6 /* GoodsSizePayMentCell.m */,
+			);
+			path = Cell;
+			sourceTree = "<group>";
+		};
+		9A5F52982B5F5A07007D3791 /* GoodsSize */ = {
+			isa = PBXGroup;
+			children = (
+				9A5F528C2B5F59D1007D3791 /* GoodsSizeSelectTableV.h */,
+				9A5F528B2B5F59D0007D3791 /* GoodsSizeSelectTableV.m */,
+				9A5F528E2B5F59EA007D3791 /* Cell */,
+			);
+			path = GoodsSize;
+			sourceTree = "<group>";
+		};
 		9A65DE4E2A132BDF00BB1269 /* V */ = {
 			isa = PBXGroup;
 			children = (
@@ -1853,15 +1886,6 @@
 			path = V;
 			sourceTree = "<group>";
 		};
-		9A8DD8C22A0B8EDD00573324 /* Size */ = {
-			isa = PBXGroup;
-			children = (
-				9A8DD8C32A0B8F1700573324 /* As_GoodsSizeC.h */,
-				9A8DD8C42A0B8F1700573324 /* As_GoodsSizeC.m */,
-			);
-			path = Size;
-			sourceTree = "<group>";
-		};
 		9A8DD8CC2A0B9E0C00573324 /* Assets */ = {
 			isa = PBXGroup;
 			children = (
@@ -2065,8 +2089,12 @@
 		9AD364C32A05E71000452C7A /* VC */ = {
 			isa = PBXGroup;
 			children = (
+				9A31EDFE2B469A73009F11EE /* AS_GoodsReviewsListC.h */,
+				9A31EDFF2B469A73009F11EE /* AS_GoodsReviewsListC.m */,
 				9AD364C42A05E73E00452C7A /* AS_GoodsDetailsC.h */,
 				9AD364C52A05E73E00452C7A /* AS_GoodsDetailsC.m */,
+				9A5F52882B5F56FD007D3791 /* AS_GoodsSizeC.h */,
+				9A5F52892B5F56FD007D3791 /* AS_GoodsSizeC.m */,
 			);
 			path = VC;
 			sourceTree = "<group>";
@@ -2489,6 +2517,7 @@
 				816020132A2EE5A200E4A8F1 /* ASCategaryCollectCell.m in Sources */,
 				81C796422A551FE9003083B8 /* KWTextField.m in Sources */,
 				9AD346012A08D60F005CA070 /* ZFFloatView.m in Sources */,
+				9A3ADC0A2B60BAE200B04BA6 /* GoodsSizePayMentCell.m in Sources */,
 				9AD345F92A08D60F005CA070 /* ZFPlayerController.m in Sources */,
 				9AD345AC2A08D59A005CA070 /* WKM_goodsBanner.m in Sources */,
 				81EC476F2A33F82C00516573 /* ASHomeImgCell.m in Sources */,
@@ -2496,7 +2525,6 @@
 				81DFA5592A4681E900DA708B /* ASPointEranCell.m in Sources */,
 				81354BE72A28786C0082C93A /* ASProductBaseModel.m in Sources */,
 				9ADA8A212B4E96C900BACDEA /* GoodWritUpImgV.m in Sources */,
-				9A8DD8C52A0B8F1700573324 /* As_GoodsSizeC.m in Sources */,
 				9A3F5CB82B3BF90100DDB6A7 /* GoodsDetailsIntroduceV.m in Sources */,
 				8134C1BD2A1372D5006EB0EC /* ASUserCenterTableHeadView.m in Sources */,
 				9AD346002A08D60F005CA070 /* ZFPresentTransition.m in Sources */,
@@ -2506,6 +2534,7 @@
 				9AD345A72A08D571005CA070 /* TYPageControl.m in Sources */,
 				81354C0A2A289C350082C93A /* KWScrollOffsetView.m in Sources */,
 				81354C032A289A070082C93A /* HomeFilterModel.m in Sources */,
+				9A5F528A2B5F56FD007D3791 /* AS_GoodsSizeC.m in Sources */,
 				8131A2932B3950DA00A191BE /* ASExtraPointsModel.m in Sources */,
 				81717CAB2A3C359E00648139 /* ASProductlistFilterPriceCollectCell.m in Sources */,
 				81AA11D02B23EA15008EB5C7 /* ASVipCouponsViewModel.m in Sources */,
@@ -2561,8 +2590,10 @@
 				9A65DE512A132FB700BB1269 /* LoginThirdAuthV.m in Sources */,
 				9A788C442A08A663003E0025 /* Target_Goods.m in Sources */,
 				8131A2902B38FF3B00A191BE /* APInputAlertView.m in Sources */,
+				9A5F52962B5F59EA007D3791 /* GoodsSizeCountCell.m in Sources */,
 				81EC47692A33073100516573 /* ASHomeNewInProductItemView.m in Sources */,
 				81717D212A3C4AE000648139 /* KWSearchSubTypeTableView.m in Sources */,
+				9A5F52952B5F59EA007D3791 /* GoosSizeSelectCell.m in Sources */,
 				9AD3461D2A08D6F0005CA070 /* GoodsInformationM.m in Sources */,
 				9A1247972A1B0A2800126226 /* AS_ForgotC.m in Sources */,
 				812021182B1467410026B8B5 /* ASUserModel.m in Sources */,
@@ -2595,6 +2626,7 @@
 				9AD346052A08D60F005CA070 /* ZFLandscapeViewController.m in Sources */,
 				9ADA8A1E2B4E481E00BACDEA /* GoodsReviewsWriteC.m in Sources */,
 				9A32A2212B4BEA5C005A5831 /* GoodsReviewsCell.m in Sources */,
+				9A5F528D2B5F59D1007D3791 /* GoodsSizeSelectTableV.m in Sources */,
 				81717D222A3C4AE000648139 /* KWSearchMainTypeCell.m in Sources */,
 				81DFA5672A46D60900DA708B /* ASPointDetailViewController.m in Sources */,
 				81601FF62A2DC78300E4A8F1 /* WMZBannerFlowLayout.m in Sources */,

+ 23 - 0
Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_close_black.imageset/Contents.json

@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "组 8609.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "组 8609@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "组 8609@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN=BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_close_black.imageset/组 8609.png


BIN=BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_close_black.imageset/组 8609@2x.png


BIN=BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_close_black.imageset/组 8609@3x.png


+ 23 - 0
Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_close_white.imageset/Contents.json

@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "组 9646.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "组 9646@2x.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "组 9646@3x.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN=BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_close_white.imageset/组 9646.png


BIN=BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_close_white.imageset/组 9646@2x.png


BIN=BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_close_white.imageset/组 9646@3x.png


+ 23 - 0
Asteria/Fuction/Goods/GoodsSize/Cell/GoodsSizeCountCell.h

@@ -0,0 +1,23 @@
+//
+//  GoodsSizeCountCell.h
+//  westkissMob
+//
+//  Created by 王猛 on 2022/9/23.
+//
+
+#import "TT_BaseCell.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface GoodsSizeCountCellData : NSObject
+@property (nonatomic, assign) NSInteger quantityNum;
+@property (nonatomic, assign) NSInteger maxNum;
+
+@end
+
+@interface GoodsSizeCountCell : TT_BaseCell
+@property (nonatomic, strong) GoodsSizeCountCellData *model;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 162 - 0
Asteria/Fuction/Goods/GoodsSize/Cell/GoodsSizeCountCell.m

@@ -0,0 +1,162 @@
+//
+//  GoodsSizeCountCell.m
+//  westkissMob
+//
+//  Created by 王猛 on 2022/9/23.
+//
+
+#import "GoodsSizeCountCell.h"
+
+@implementation GoodsSizeCountCellData
+@end
+
+@interface GoodsSizeCountCell ()
+
+@property(nonatomic, strong) UILabel *quantityLab;
+@property(nonatomic, strong) UIButton *cutBtn;
+@property(nonatomic, strong) UILabel *numLab;
+@property(nonatomic, strong) UIButton *addBtn;
+@end
+
+@implementation GoodsSizeCountCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+}
+
+- (void)configData:(id)Data{
+    GoodsSizeCountCellData *model =(GoodsSizeCountCellData *)Data;
+    self.model = model;
+    self.numLab.text = [NSString stringWithFormat:@"%ld",(long)self.model.quantityNum];
+}
+- (void)setupSubviewS{
+    [self.contentView addSubview:self.quantityLab];
+    [self.contentView addSubview:self.numLab];
+    [self.contentView addSubview:self.cutBtn];
+    [self.contentView addSubview:self.addBtn];
+    [self.quantityLab mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.top.mas_equalTo(20);
+        make.right.mas_equalTo(-20);
+        make.height.mas_equalTo(18);
+    }];
+    [self.cutBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.quantityLab.mas_bottom).offset(20);
+        make.left.mas_equalTo(20);
+        make.height.mas_equalTo(32);
+        make.width.mas_equalTo(32);
+    }];
+    [self.numLab mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.quantityLab.mas_bottom).offset(20);
+        make.height.mas_equalTo(32);
+        make.width.mas_equalTo(46);
+        make.left.equalTo(self.cutBtn.mas_right);
+    }];
+
+    [self.addBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.quantityLab.mas_bottom).offset(20);
+        make.left.equalTo(self.numLab.mas_right);
+        make.height.mas_equalTo(32);
+        make.width.mas_equalTo(32);
+        make.bottom.mas_equalTo(-10);
+    }];
+
+}
+#pragma mark - *************** handle ****************
+-(void)handle_addNumEvent:(UIButton *)btn{
+    self.model.quantityNum ++;
+    [self tool_btnChangeNum:self.model.quantityNum];
+    self.numLab.text = [NSString stringWithFormat:@"%ld",self.model.quantityNum];
+    if(self.currencyparameterClose){
+        self.currencyparameterClose(1, self.model);
+    }
+}
+-(void)handle_cutNumEvent:(UIButton *)btn{
+    self.model.quantityNum--;
+    [self tool_btnChangeNum:self.model.quantityNum];
+    self.numLab.text = [NSString stringWithFormat:@"%ld", self.model.quantityNum];
+    if(self.currencyparameterClose){
+        self.currencyparameterClose(0, self.model);
+    }
+}
+
+
+-(void)tool_btnChangeNum:(NSInteger )num{
+    if(num >= self.model.maxNum){
+        [self.addBtn setTitleColor:[UIColor colorWithHexString:@"#E6E6E6"] forState:UIControlStateNormal];
+        self.addBtn.userInteractionEnabled = NO;
+    }else{
+        [self.addBtn setTitleColor:[UIColor colorWithHexString:@"#0B0B0B"] forState:UIControlStateNormal];
+        self.addBtn.userInteractionEnabled = YES;
+    }
+    if(num >= 2){
+        [self.cutBtn setTitleColor:[UIColor colorWithHexString:@"#0B0B0B"] forState:UIControlStateNormal];
+        self.cutBtn.userInteractionEnabled = YES;
+    }else{
+        [self.cutBtn setTitleColor:[UIColor colorWithHexString:@"#E6E6E6"] forState:UIControlStateNormal];
+        self.cutBtn.userInteractionEnabled = NO;
+    }
+}
+
+
+-(UILabel *)quantityLab{
+    if(!_quantityLab){
+        _quantityLab = [UILabel new];
+        _quantityLab.font = [UIFont fontWithName:Rob_Bold size:14];
+        _quantityLab.textAlignment = NSTextAlignmentLeft;
+        _quantityLab.text = @"Quantity";
+    }
+    return _quantityLab;
+}
+
+
+-(UIButton *)cutBtn{
+    if(!_cutBtn){
+        _cutBtn = [UIButton buttonWithType:UIButtonTypeCustom];
+        [_cutBtn setTitle:@"-" forState:UIControlStateNormal];
+        [_cutBtn setTitleColor:[UIColor colorWithHexString:@"#E6E6E6"] forState:UIControlStateNormal];
+        _cutBtn.titleLabel.font = [UIFont fontWithName:Rob_Bold size:18];
+        _cutBtn.layer.borderWidth = 0.5;
+        [_cutBtn addTarget:self action:@selector(handle_cutNumEvent:) forControlEvents:UIControlEventTouchUpInside];
+        _cutBtn.layer.borderColor = [UIColor colorWithHexString:@"#E6E6E6"].CGColor;
+        _cutBtn.userInteractionEnabled = NO;
+
+    }
+    return _cutBtn;
+}
+-(UILabel *)numLab{
+    if(!_numLab){
+        _numLab = [[UILabel alloc]init];
+        _numLab.text = @"1";
+        _numLab.font = [UIFont fontWithName:Rob_Bold size:12];
+        _numLab.textAlignment = NSTextAlignmentCenter;
+        _numLab.layer.borderWidth = 0.5;
+        _numLab.layer.borderColor = [UIColor colorWithHexString:@"#E6E6E6"].CGColor;
+    }
+    return _numLab;
+}
+
+-(UIButton *)addBtn{
+    if(!_addBtn){
+        _addBtn = [UIButton buttonWithType:UIButtonTypeCustom];
+        [_addBtn setTitle:@"+" forState:UIControlStateNormal];
+        [_addBtn setTitleColor:[UIColor colorWithHexString:@"#0B0B0B"] forState:UIControlStateNormal];
+        _addBtn.titleLabel.font = [UIFont fontWithName:Rob_Bold size:18];
+        _addBtn.layer.borderWidth = 0.5;
+        _addBtn.layer.borderColor = [UIColor colorWithHexString:@"#E6E6E6"].CGColor;
+        [_addBtn addTarget:self action:@selector(handle_addNumEvent:) forControlEvents:UIControlEventTouchUpInside];
+        
+    }
+    return _addBtn;
+}
+
+
+
+
+
+
+@end

+ 22 - 0
Asteria/Fuction/Goods/GoodsSize/Cell/GoodsSizePayMentCell.h

@@ -0,0 +1,22 @@
+//
+//  GoodsSizePayMentCell.h
+//  Asteria
+//
+//  Created by 王猛 on 2024/1/24.
+//
+
+#import <WMBase/WMBase.h>
+
+NS_ASSUME_NONNULL_BEGIN
+@interface GoodsSizePayMentCellData :NSObject
+///支付方式
+@property (nonatomic, strong) NSMutableArray *paytypeAry;
+@property (nonatomic, assign) CGFloat final_prices_f;
+@property (nonatomic, copy) NSString *currency_symbol;
+@end
+
+@interface GoodsSizePayMentCell : TT_BaseCell
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 51 - 0
Asteria/Fuction/Goods/GoodsSize/Cell/GoodsSizePayMentCell.m

@@ -0,0 +1,51 @@
+//
+//  GoodsSizePayMentCell.m
+//  Asteria
+//
+//  Created by 王猛 on 2024/1/24.
+//
+
+#import "GoodsSizePayMentCell.h"
+#import "GoodsDetailsPayV.h"
+@implementation GoodsSizePayMentCellData
+
+@end
+@interface GoodsSizePayMentCell ()
+@property(nonatomic, strong) GoodsDetailsPayV *payV;
+@end
+@implementation GoodsSizePayMentCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+- (void)setupSubviewS{
+    [self.contentView addSubview:self.payV];
+    [self.payV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.top.mas_equalTo(10);
+        make.width.mas_equalTo(KScreenWidth-20);
+        make.height.mas_equalTo(78);
+        make.bottom.mas_equalTo(-10);
+    }];
+}
+- (void)configData:(id)Data{
+    GoodsSizePayMentCellData *model = (GoodsSizePayMentCellData *)Data;
+    self.payV.titleLab.text = [NSString stringWithFormat:@"Pay in 4 interest-free payments of %@%.2f with",model.currency_symbol,model.final_prices_f/4];
+}
+-(GoodsDetailsPayV *)payV{
+    if(!_payV){
+        _payV = [[GoodsDetailsPayV alloc]initWithFrame:CGRectMake(10, 0, KScreenWidth-20, 78)];
+        _payV.backgroundColor = [UIColor colorWithHexString:@"#F8F8F8"];
+        _payV.layer.cornerRadius = 4;
+        _payV.clipsToBounds = YES;
+    }
+    return _payV;
+}
+@end

+ 21 - 0
Asteria/Fuction/Goods/GoodsSize/Cell/GoosSizeSelectCell.h

@@ -0,0 +1,21 @@
+//
+//  GoosSizeSelectCell.h
+//  westkissMob
+//
+//  Created by 王猛 on 2022/9/22.
+//
+
+#import "TT_BaseCell.h"
+#import "GoodsInformationM.h"
+#define  CellTypeBouns @"West Kiss Bonus"
+NS_ASSUME_NONNULL_BEGIN
+
+
+@interface GoosSizeSelectCell : TT_BaseCell
+@property(nonatomic, strong) OptionsModel *optionModel;
+@property (nonatomic, assign) NSInteger selectTag;
+-(void)change_Option_nameLabAlignmentLeft;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 139 - 0
Asteria/Fuction/Goods/GoodsSize/Cell/GoosSizeSelectCell.m

@@ -0,0 +1,139 @@
+//
+//  GoosSizeSelectCell.m
+//  westkissMob
+//
+//  Created by 王猛 on 2022/9/22.
+//
+
+#import "GoosSizeSelectCell.h"
+
+#import "RadioButton.h"
+
+@interface GoosSizeSelectCell()
+@property (nonatomic, strong) UILabel *option_nameLab;
+@property(nonatomic, strong) QMUIFloatLayoutView *floatLayoutView;
+@property (nonatomic, strong) NSMutableArray *radBtnAry;
+
+@end
+@implementation GoosSizeSelectCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+- (void)setupSubviewS{
+    self.selectTag = 0;
+    [self.contentView addSubview:self.option_nameLab];
+    [self.contentView addSubview:self.floatLayoutView];
+
+    [self.option_nameLab mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.height.mas_equalTo(18);
+        make.top.mas_equalTo(20);
+        make.left.mas_equalTo(20);
+        make.right.mas_equalTo(-20);
+    }];
+    [self.floatLayoutView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.mas_equalTo(self.option_nameLab.mas_bottom).offset(10);
+        make.left.mas_equalTo(10);
+        make.right.mas_equalTo(-10);
+        make.bottom.mas_equalTo(-10);
+    }];
+}
+
+-(void)change_Option_nameLabAlignmentLeft{
+    self.option_nameLab.textAlignment = NSTextAlignmentLeft;
+}
+- (void)configData:(id)Data{
+    OptionsModel *optionM = (OptionsModel *)Data;
+    self.optionModel = optionM;
+    self.option_nameLab.text = [NSString stringWithFormat:@"%@",optionM.product_sku];
+    while (self.floatLayoutView.subviews.count) {
+        [self.floatLayoutView.subviews.lastObject removeFromSuperview];
+    }
+
+    [self.radBtnAry removeAllObjects];
+    for (int i =0; i<optionM.values.count; i++) {
+        OptionsValuesM *valueModel = optionM.values[i];
+        RadioButton *btn = [[RadioButton alloc]init];
+        btn.model  = valueModel;
+        btn.layer.cornerRadius  =2;
+        btn.clipsToBounds = YES;
+        btn.layer.borderColor = [UIColor colorWithHexString:@"#E6E6E6"].CGColor;
+        btn.layer.borderWidth = 0.5;
+        btn.titleLabel.font = [UIFont fontWithName:Rob_Regular size:14];
+        btn.tag = i;
+        [btn addTarget:self action:@selector(xxx_onRadioButtonValueChanged:) forControlEvents:UIControlEventValueChanged];
+        [btn setTitle:[NSString stringWithFormat:@"  %@  ",valueModel.title] forState:UIControlStateNormal];
+        [btn setTitleColor:[UIColor colorWithHexString:@"#0B0B0B"] forState:UIControlStateNormal];
+        [btn setTitleColor:[UIColor colorWithHexString:@"#000000"] forState:UIControlStateSelected];
+        
+        [self.floatLayoutView addSubview:btn];
+        [self.radBtnAry addObject:btn];
+    }
+    [self.radBtnAry[0] setGroupButtons:self.radBtnAry];
+    [self.radBtnAry[optionM.optionSelectTag] setSelected:YES];
+    [self tool_changeSelcetBtn:self.radBtnAry[optionM.optionSelectTag]];
+    self.floatLayoutView.frame = CGRectMake(10, CGRectGetMaxY(self.option_nameLab.frame)+10, KScreenWidth-20, INFINITY);
+    [self.floatLayoutView mas_updateConstraints:^(MASConstraintMaker *make) {
+        make.height.mas_equalTo(self.floatLayoutView.mj_h);
+    }];
+}
+-(void)xxx_onRadioButtonValueChanged:(RadioButton *)btn{
+    if(btn.selected){
+        [self tool_changeSelcetBtn:btn];
+        OptionsValuesM *valueM =btn.model;
+        self.optionModel.optionSelectTag = btn.tag;
+        if (self.currencyparameterClose) {
+            self.currencyparameterClose(btn.tag, valueM);
+        }
+    }else{ //select == NO
+        [self tool_changenomralbtn:btn];
+    }
+}
+-(void)tool_changenomralbtn:(UIButton *)btn{
+    btn.backgroundColor = [UIColor colorWithHexString:@"#FFFFFF"];
+    btn.layer.borderColor = [UIColor colorWithHexString:@"#E6E6E6"].CGColor;
+    btn.layer.borderWidth = 1;
+    btn.titleLabel.font = [UIFont fontWithName:Rob_Regular size:14];
+
+}
+-(void)tool_changeSelcetBtn:(UIButton *)btn{
+    btn.backgroundColor = ThemeColor;
+    btn.layer.borderWidth = 0.0;
+    btn.titleLabel.font = [UIFont fontWithName:Rob_Bold size:14];
+}
+-(UILabel *)option_nameLab{
+    if(!_option_nameLab){
+        _option_nameLab = [[UILabel alloc]init];
+        _option_nameLab.frame =CGRectMake(20, 20, KScreenWidth-40, 18);
+        _option_nameLab.font = [UIFont fontWithName:Rob_Bold size:14];
+        _option_nameLab.textAlignment = NSTextAlignmentLeft;
+    }
+    return _option_nameLab;
+}
+-(NSMutableArray *)radBtnAry{
+    if (!_radBtnAry) {
+        _radBtnAry = [[NSMutableArray alloc]init];
+    }
+    return _radBtnAry;
+}
+-(QMUIFloatLayoutView *)floatLayoutView{
+    if(!_floatLayoutView){
+        _floatLayoutView = [[QMUIFloatLayoutView alloc]init];
+        _floatLayoutView.itemMargins = UIEdgeInsetsMake(5, 5, 5, 5);
+        _floatLayoutView.padding = UIEdgeInsetsMake(5, 5, 5, 5);
+        CGFloat minWithd = (KScreenWidth-20-50)/4;
+        _floatLayoutView.minimumItemSize = CGSizeMake(minWithd, 32);// 以每行最少4个按钮作为最小宽度
+    }
+    return _floatLayoutView;
+}
+- (void)upadteFlotSubviews{
+
+}
+@end

+ 25 - 0
Asteria/Fuction/Goods/GoodsSize/GoodsSizeSelectTableV.h

@@ -0,0 +1,25 @@
+//
+//  GoodsSizeSelectTableV.h
+//  westkissMob
+//
+//  Created by 王猛 on 2022/9/22.
+//
+
+#import "TT_BaseTableV.h"
+#import "GoodsInformationM.h"
+#import "GoosSizeSelectCell.h"
+#import "GoodsSizeCountCell.h"
+#import "GoodsSizePayMentCell.h"
+
+typedef NS_ENUM(NSUInteger,TypeTableV){
+    TypeTableV_Goosdetails  ,
+    TypeTableV_RedeemGoods
+    
+} ;
+NS_ASSUME_NONNULL_BEGIN
+
+@interface GoodsSizeSelectTableV : TT_BaseTableV
+@property(nonatomic, assign) TypeTableV typeTableV;
+@end
+
+NS_ASSUME_NONNULL_END

+ 48 - 0
Asteria/Fuction/Goods/GoodsSize/GoodsSizeSelectTableV.m

@@ -0,0 +1,48 @@
+//
+//  GoodsSizeSelectTableV.m
+//  westkissMob
+//
+//  Created by 王猛 on 2022/9/22.
+//
+
+#import "GoodsSizeSelectTableV.h"
+@implementation GoodsSizeSelectTableV
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
+     NSObject *objectM =  self.infodata[indexPath.row];
+    if([objectM isKindOfClass:[OptionsModel class]]){
+        GoosSizeSelectCell *cell = [GoosSizeSelectCell cellWithTableView:tableView CellClass:[GoosSizeSelectCell class]];
+
+        [cell configData:(OptionsModel *)objectM];
+        @weakify(self)
+        cell.currencyparameterClose = ^(NSInteger type, id Data) {
+            @strongify(self)
+            [self generaltriggermethodType:indexPath.row data:(OptionsModel *)Data];
+        };
+        return cell;
+    }else if([objectM isKindOfClass:[GoodsSizeCountCellData class]]){
+        GoodsSizeCountCell *cell = [GoodsSizeCountCell cellWithTableView:tableView CellClass:[GoodsSizeCountCell class]];
+        [cell configData:(GoodsSizeCountCellData *)objectM];
+        cell.currencyparameterClose = ^(NSInteger type, id Data) { //0- ,1+
+            [self generaltriggermethodType:type data:(NSString *)Data];
+        };
+        return cell;
+    }else if([objectM isKindOfClass:[GoodsSizePayMentCellData class]]){
+        GoodsSizePayMentCell *cell = [GoodsSizePayMentCell cellWithTableView:tableView CellClass:[GoodsSizePayMentCell class]];
+        [cell configData:(GoodsSizePayMentCellData *)objectM];
+        cell.currencyparameterClose = ^(NSInteger type, id Data) {
+            [self generaltriggermethodType:type data:(NSString *)Data];
+        };
+        return cell;
+    }
+    return nil;
+}
+- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
+    return UITableViewAutomaticDimension;
+}
+
+- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
+{
+    return 20+18+10+32+10;
+}
+
+@end

+ 7 - 1
Asteria/Fuction/Goods/M/GoodsInformationM.h

@@ -21,6 +21,8 @@ NS_ASSUME_NONNULL_BEGIN
 @property (nonatomic, copy) NSString *sold;
 @property (nonatomic, copy) NSString *review_nums;
 
+@property (nonatomic, copy) NSString *xxx_showImg;
+
 @property (nonatomic, strong) NSArray <MediaGalleryEntriesModel *>*media_gallery_entries;
 ///     "attribute_code": "attribute_code",
 //"value": "0"
@@ -28,7 +30,7 @@ NS_ASSUME_NONNULL_BEGIN
 @property (nonatomic, strong)         NSArray <OptionsModel *>*options;
 
 //add
-@property (nonatomic, strong) NSString *gooodsImgUrl;
+@property (nonatomic, strong) NSString *add_gooodsImgUrl;
 @property (nonatomic, strong) NSAttributedString *priceAtr;
 
 
@@ -42,15 +44,19 @@ NS_ASSUME_NONNULL_BEGIN
 @end
 
 @interface OptionsModel : NSObject
+@property (nonatomic, copy) NSString *option_id;
 @property (nonatomic, copy) NSString *product_sku;
 @property (nonatomic, copy) NSString *title;
 
 @property (nonatomic, strong) NSArray <OptionsValuesM *>*values;
+@property (nonatomic, assign) NSInteger optionSelectTag;
+
 
 @end
 
 @interface OptionsValuesM : NSObject
 @property (nonatomic, copy) NSString *title;
+@property (nonatomic, copy) NSString *option_type_id;
 @property (nonatomic, assign) double price;
 
 @end

+ 0 - 16
Asteria/Fuction/Goods/Size/As_GoodsSizeC.h

@@ -1,16 +0,0 @@
-//
-//  As_GoodsSizeC.h
-//  Asteria
-//
-//  Created by 王猛 on 2023/5/10.
-//
-
-#import <WMBase/WMBase.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface As_GoodsSizeC : UCMBaseC
-
-@end
-
-NS_ASSUME_NONNULL_END

+ 0 - 23
Asteria/Fuction/Goods/Size/As_GoodsSizeC.m

@@ -1,23 +0,0 @@
-//
-//  As_GoodsSizeC.m
-//  Asteria
-//
-//  Created by 王猛 on 2023/5/10.
-//
-
-#import "As_GoodsSizeC.h"
-
-@interface As_GoodsSizeC ()
-
-@end
-
-@implementation As_GoodsSizeC
-
-- (void)viewDidLoad {
-    [super viewDidLoad];
-    // Do any additional setup after loading the view.
-}
-
-
-
-@end

+ 2 - 1
Asteria/Fuction/Goods/Target/Target_Goods.h

@@ -10,7 +10,8 @@
 NS_ASSUME_NONNULL_BEGIN
 
 @interface Target_Goods : NSObject
-- (UIViewController *)Action_GoodsDetailsC:(NSDictionary *)params;
+- (UIViewController *)Action_AS_GoodsDetailsC:(NSDictionary *)params;
+- (UIViewController *)Action_AS_GoodsSizeC:(NSDictionary *)params;
 @end
 
 NS_ASSUME_NONNULL_END

+ 9 - 2
Asteria/Fuction/Goods/Target/Target_Goods.m

@@ -7,11 +7,18 @@
 
 #import "Target_Goods.h"
 #import "AS_GoodsDetailsC.h"
+#import "AS_GoodsSizeC.h"
 
 @implementation Target_Goods
-- (UIViewController *)Action_GoodsDetailsC:(NSDictionary *)params{
+- (UIViewController *)Action_AS_GoodsDetailsC:(NSDictionary *)params{
     AS_GoodsDetailsC *vc = [[AS_GoodsDetailsC alloc]init];
-    vc.entity_id = params[@"AS_GoodsDetailsC"];
+    vc.entity_id = params[@"entity_id"];
+    return vc;
+}
+- (UIViewController *)Action_AS_GoodsSizeC:(NSDictionary *)params{
+    AS_GoodsSizeC *vc = [[AS_GoodsSizeC alloc]init];
+    vc.entity_id = params[@"entity_id"];
+    vc.model = params[@"model"];
     return vc;
 }
 @end

+ 1 - 1
Asteria/Fuction/Goods/V/Banner/WKM_goodsBanner.m

@@ -46,7 +46,7 @@ UICollectionViewDelegate>
     for (int i = 0; i< imgArry.count; i++) {
         GoodsBannerModel *model =  [GoodsBannerModel xxx_loadWithModel:imgArry[i]];
         if(i==0){
-            infoModel.gooodsImgUrl =   model.small;
+            infoModel.add_gooodsImgUrl =   model.small;
         }
         [modelAry addObject:model];
     }

+ 1 - 1
Asteria/Fuction/Goods/V/GoodsDetailsPayV.m

@@ -27,7 +27,7 @@
 
 -(void)pay_payBtnType:(UIButton *)btn{
     NSArray *alertvImgAry = @[@"goods_alertv_paypal",@"goods_alertv_afterpay"];
-    NSArray *closeImgAry = @[@"base_close_white",@"base_close_black"];
+    NSArray *closeImgAry = @[@"goods_close_white",@"goods_close_black"];
     AlertMyCartDeleteV *payAlertV = [[AlertMyCartDeleteV alloc]initWithPaytypeAlertV:[UIImage imageNamed:alertvImgAry[btn.tag-GoodsInfoPayTypeTag]] closeBtnImg:[UIImage imageNamed:closeImgAry[btn.tag-GoodsInfoPayTypeTag]]];
     [payAlertV alertv_show];
     

+ 15 - 2
Asteria/Fuction/Goods/VC/AS_GoodsDetailsC.m

@@ -24,7 +24,7 @@
 - (void)viewDidLoad {
     [super viewDidLoad];
     [self reqNet_GoodsDetails_productGetProduct];
-    [self sub_veiwTapBlock];
+    [self ucm_subVeiwsTapBlock];
     
 }
 - (void)initSubviews{
@@ -33,7 +33,13 @@
     [self.view addSubview:self.bottomV];
     
 }
-
+- (void)ucm_subVeiwsTapBlock{
+    @weakify(self)
+    self.bottomV.ViewtapClose = ^(NSInteger num, id  _Nonnull data) {
+        @strongify(self)
+        [self action_GoodsSizeC];
+    };
+}
 
 - (void)viewDidLayoutSubviews{
     IPhoneXHeigh
@@ -85,6 +91,13 @@
     allPic.goodsM = self.model;
     [self.navigationController pushViewController:allPic animated:YES];
 }
+-(void)action_GoodsSizeC{
+    UIViewController *viewController = [[CTMediator sharedInstance] Goods_GoodsSizeC:@{@"model":self.model}];
+    viewController.modalPresentationStyle = UIModalPresentationFullScreen;
+    [self presentViewController:viewController animated:YES completion:nil];
+}
+
+
 
 #pragma mark - **************** lazy ****************
 

Asteria/Fuction/Goods/Revies/AS_GoodsReviewsListC.h → Asteria/Fuction/Goods/VC/AS_GoodsReviewsListC.h


+ 3 - 3
Asteria/Fuction/Goods/Revies/AS_GoodsReviewsListC.m

@@ -42,7 +42,7 @@
     self.sortreType = [self.sortreTypeAry firstObject];
     [MBProgressHUD showHUDAddedTo:self.view animated:YES];
     [self reqNet_Goods_productGetProductsReview:self.sortreType];
-    [self sub_veiwTapBlock];
+    [self ucm_subVeiwsTapBlock];
 }
 
 - (void)initSubviews {
@@ -79,7 +79,7 @@
     self.TableV.is_refreshfoot = YES;
     
 }
-- (void)sub_veiwTapBlock{
+- (void)ucm_subVeiwsTapBlock{
     @weakify(self)
     self.tableHeadV.ViewtapClose = ^(NSInteger num, id  _Nonnull data) {
         @strongify(self)
@@ -94,7 +94,7 @@
 }
 
 - (void)ucm_changedefault{
-    [self.topImgV sd_setImageWithURL:[NSURL URLWithString:self.goodsM.gooodsImgUrl] placeholderImage:UIImageDefaultImg_SD];
+    [self.topImgV sd_setImageWithURL:[NSURL URLWithString:self.goodsM.add_gooodsImgUrl] placeholderImage:UIImageDefaultImg_SD];
     self.goodsTitleLab.text = self.goodsM.name;
     self.priceLab.attributedText = self.goodsM.priceAtr;
     self.soldLab.text =  [NSString stringWithFormat:@"SOLD: %@",self.goodsM.sold];

+ 17 - 0
Asteria/Fuction/Goods/VC/AS_GoodsSizeC.h

@@ -0,0 +1,17 @@
+//
+//  AS_GoodsSizeC.h
+//  Asteria
+//
+//  Created by 王猛 on 2024/1/23.
+//
+
+#import <WMBase/WMBase.h>
+#import "GoodsInformationM.h"
+NS_ASSUME_NONNULL_BEGIN
+
+@interface AS_GoodsSizeC : UCMBaseC
+@property (nonatomic, strong) NSString *entity_id;
+@property (nonatomic, strong) GoodsInformationM *model;
+@end
+
+NS_ASSUME_NONNULL_END

+ 263 - 0
Asteria/Fuction/Goods/VC/AS_GoodsSizeC.m

@@ -0,0 +1,263 @@
+//
+//  AS_GoodsSizeC.m
+//  Asteria
+//
+//  Created by 王猛 on 2024/1/23.
+//
+
+#import "AS_GoodsSizeC.h"
+#import "GoodsSizeSelectTableV.h"
+#import "GoodsDetailsBottomV.h"
+#import "ASGoodsDetailsVM.h"
+
+@interface AS_GoodsSizeC ()<RY_baseVMprotocol>
+@property (nonatomic, strong) UIImageView *sel_headImg;
+@property (nonatomic, strong) QMUILabel *sel_titleLab;
+@property (nonatomic, strong) QMUILabel *priceLab;
+@property (nonatomic, strong) QMUILabel *saveLab;
+@property (nonatomic, strong) GoodsSizeSelectTableV *TableV;
+@property (nonatomic, strong) GoodsDetailsBottomV *bottomV;
+//商品的数量
+@property (nonatomic, assign) NSInteger xxx_quantityNum;
+//所有的规格数据
+@property (nonatomic, strong) NSMutableArray <OptionsModel *>*xxx_optionAry;
+
+@property (nonatomic, strong) ASGoodsDetailsVM *VM;
+@property (nonatomic, assign) BOOL xxx_isCart;
+
+
+
+@end
+
+@implementation AS_GoodsSizeC
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    // Do any additional setup after loading the view.
+    [self ucm_subVeiwsTapBlock];
+    [self ucm_configNavbar];
+    self.xxx_quantityNum = 1;
+    if(self.model){
+        [self configFreshData:self.model];
+    }
+}
+- (void)ucm_configNavbar{
+    self.navigationController.navigationBar.hidden = YES;
+    UIButton *closeBtn = [UIButton buttonWithType:UIButtonTypeCustom];
+    [closeBtn setImage:[UIImage imageNamed:@"goods_close_black"] forState:UIControlStateNormal];
+    [closeBtn addTarget:self action:@selector(handle_closeVC) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:closeBtn];
+    NSInteger top = IPHONEX ? 44 : 20;
+    closeBtn.frame = CGRectMake(KScreenWidth -44-20, top, 44, 44);
+}
+- (void)ucm_subVeiwsTapBlock{
+    @weakify(self)
+    
+    self.TableV.tapClose = ^(NSInteger num, id data) {
+        //选择规格xxx_optionAry 和 修改商品数量xxx_quantityNum
+        @strongify(self)
+        if([data isKindOfClass:[GoodsSizeCountCellData class]]){
+            GoodsSizeCountCellData *model = (GoodsSizeCountCellData *)data;
+            self.xxx_quantityNum = model.quantityNum;
+        }
+        [self refresh_optionChangePrice];
+    };
+    
+    self.bottomV.ViewtapClose = ^(NSInteger num, id  _Nonnull data) {
+        @strongify(self)
+        [self hanale_isShopOrCart:num];
+    };
+}
+
+
+- (void)initSubviews {
+    [super initSubviews];
+    [self.view addSubview:self.sel_headImg];
+    [self.view addSubview:self.sel_titleLab];
+    [self.view addSubview:self.priceLab];
+    [self.view addSubview:self.saveLab];
+    [self.view addSubview:self.bottomV];
+
+    IPhoneXHeigh
+    self.sel_headImg.frame = CGRectMake(10, securitytop_Y +10, 93, 93);
+    self.sel_titleLab.frame = CGRectMake(CGRectGetMaxX(self.sel_headImg.frame)+10, securitytop_Y +10,KScreenWidth - 93-10-20,40);
+    [self.sel_headImg mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.mas_equalTo(10);
+        make.top.mas_equalTo(securitytop_Y +10);
+        make.width.height.mas_equalTo(93);
+    }];
+    [self.sel_titleLab mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.mas_equalTo(securitytop_Y +10);
+        make.left.equalTo(self.sel_headImg.mas_right).offset(10);
+        make.right.mas_equalTo(-10);
+        make.height.mas_equalTo(40);
+    }];
+    
+    [self.priceLab mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(self.sel_headImg.mas_right).offset(10);
+        make.bottom.equalTo(self.sel_headImg);
+        make.height.mas_equalTo(24);
+    }];
+    [self.saveLab mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(self.priceLab.mas_right).offset(10);
+        make.height.mas_equalTo(20);
+        make.centerY.equalTo(self.priceLab);
+    }];
+    
+    CGFloat tableVorgY = CGRectGetMaxY(self.sel_headImg.frame)+20;
+    [self setupTableV:[GoodsSizeSelectTableV class] Frame:CGRectMake(0, tableVorgY, KScreenWidth, KScreenHeight-tableVorgY-self.bottomV.mj_h)];
+    
+}
+-(void)configFreshData:(GoodsInformationM *)model{
+    [self.sel_headImg sd_setImageWithURL:[NSURL URLWithString:model.add_gooodsImgUrl] placeholderImage:UIImageDefaultImg_SD];
+    self.sel_titleLab.text = model.name;
+    self.priceLab.attributedText = [ASGoodsDetailsVM tool_changePriceAtr:model];
+    if(model.final_prices == model.price){
+        self.saveLab.hidden = YES;
+    }else{
+        self.saveLab.hidden = NO;
+        double savePrice = [model.price doubleValue]-[model.final_prices doubleValue];
+        self.saveLab.text = [NSString stringWithFormat:@"Save %@%.2f",model.currency_symbol,savePrice];
+    }
+    for (OptionsModel *optM in model.options) {
+        optM.optionSelectTag = 0;
+    }
+    [self.TableV.infodata removeAllObjects];
+    self.xxx_optionAry = [NSMutableArray arrayWithArray:model.options];
+    [self.TableV.infodata addObjectsFromArray:self.xxx_optionAry];
+    
+    GoodsSizeCountCellData *countM = [[GoodsSizeCountCellData alloc]init];
+    countM.maxNum = 10;
+    countM.quantityNum = self.xxx_quantityNum;
+    [self.TableV.infodata addObject:countM];
+
+    GoodsSizePayMentCellData *paytypeM = [[GoodsSizePayMentCellData alloc]init];
+    paytypeM.paytypeAry = [NSMutableArray arrayWithArray:@[@"paypal",@"afterpay"]];
+    paytypeM.final_prices_f = [self.model.final_prices floatValue];
+    paytypeM.currency_symbol = self.model.currency_symbol;
+    [self.TableV.infodata addObject:paytypeM];
+    
+    [self.TableV reloadData];
+}
+#pragma mark - **************** fresh 选择不同规格后的金额变化 ****************
+-(void)refresh_optionChangePrice{
+    CGFloat add_price = 0.00;
+    for (OptionsModel *optionM in self.xxx_optionAry) {
+        OptionsValuesM *valuesM = optionM.values[optionM.optionSelectTag];
+        add_price  =  add_price + valuesM.price;
+    }
+    self.priceLab.attributedText = [ASGoodsDetailsVM tool_addOptionPrice:add_price quantity:self.xxx_quantityNum infoMoel:self.model];
+    
+    CGFloat savePrice = ([self.model.price doubleValue]-[self.model.final_prices doubleValue])*self.xxx_quantityNum;
+    self.saveLab.text = [NSString stringWithFormat:@"Save %@%.2f",self.model.currency_symbol,savePrice];
+    
+    CGFloat add_final_price_f = (add_price+[self.model.final_prices floatValue])*self.xxx_quantityNum;
+    [self refresh_PayViewchangeValueCell:add_final_price_f];
+}
+-(void)refresh_PayViewchangeValueCell:(CGFloat )change_final_prices_f{
+    GoodsSizePayMentCellData *payModel = (GoodsSizePayMentCellData *)[self.TableV.infodata lastObject];
+    payModel.final_prices_f = change_final_prices_f;
+    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:self.TableV.infodata.count-1 inSection:0];
+    [self.TableV reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
+}
+
+#pragma mark - **************** handle ****************
+-(void)handle_closeVC{
+    [self dismissViewControllerAnimated:YES completion:nil];
+}
+-(void)hanale_isShopOrCart:(NSInteger)type{
+    //1 shop 2cart
+    if(type == 1){
+        self.xxx_isCart = NO;
+    }else{
+        self.xxx_isCart = YES;
+    }
+    [self reqNet_Size_rewriteCartAddProducts:type];
+}
+- (void)ucm_bindvmmodel{
+    self.VM = [[ASGoodsDetailsVM alloc]initDelegate:self];
+}
+-(void)reqNet_Size_rewriteCartAddProducts:(NSInteger)type{
+    NSMutableDictionary *optionDic = [NSMutableDictionary dictionary];
+    for (OptionsModel *optionM in self.xxx_optionAry) {
+        OptionsValuesM *valuesM = optionM.values[optionM.optionSelectTag];
+        NSString *tempStr =[NSString stringWithFormat:@"options[%@]",optionM.option_id];
+        optionDic[tempStr] =valuesM.option_type_id;
+    }
+    NSMutableDictionary *params = [NSMutableDictionary dictionaryWithDictionary:optionDic];
+    params[@"product"] =  self.model.Id;
+    params[@"qty"] =[NSString stringWithFormat:@"%ld",(long)self.xxx_quantityNum];
+    [MBProgressHUD showHUDAddedTo:self.view animated:YES];
+    [self.VM ry_formDataRequestPostApi:Size_rewriteCartAddProducts param:params];
+}
+- (void)ry_respnsData:(id)data parseAry:(NSMutableArray *)arry sucess:(BOOL)sucessOrFail mark:(NSString *)mark{
+    [MBProgressHUD hideHUDForView:self.view animated:YES];
+    if(sucessOrFail){
+        [self.view makeToast:@"Success" duration:2 position:CSToastPositionCenter title:nil image:nil style:nil completion:^(BOOL didTap) {
+            if(self.xxx_isCart){
+                [self dismissViewControllerAnimated:YES completion:^{
+                    
+                }];
+            }else{
+                [self handle_closeVC];
+            }
+        }];
+    }else{
+        [self.view makeToast:(NSString *)data duration:2 position:CSToastPositionCenter];
+    }
+}
+
+
+- (UIImageView *)sel_headImg {
+    if (!_sel_headImg) {
+        _sel_headImg = [[UIImageView alloc] initWithImage:nil];
+        _sel_headImg.contentMode = UIViewContentModeScaleAspectFill;
+        _sel_headImg.clipsToBounds = YES;
+    }
+    return _sel_headImg;
+}
+
+- (QMUILabel *)sel_titleLab {
+    if (!_sel_titleLab) {
+        _sel_titleLab = [[QMUILabel alloc] initWithFrame:CGRectZero];
+        _sel_titleLab.textAlignment = NSTextAlignmentLeft;
+        _sel_titleLab.textColor = [UIColor colorWithHexString:@"#000000"];
+        _sel_titleLab.font = [UIFont fontWithName:Rob_Regular size:12];
+        _sel_titleLab.text = @"test";
+        _sel_titleLab.numberOfLines = 2;
+    }
+    return  _sel_titleLab;
+}
+- (QMUILabel *)priceLab {
+    if (!_priceLab) {
+        _priceLab = [[QMUILabel alloc] initWithFrame:CGRectZero];
+        _priceLab.textAlignment = NSTextAlignmentLeft;
+        _priceLab.textColor = [UIColor blackColor];
+        _priceLab.font = [UIFont fontWithName:Rob_Bold size:18];
+    }
+    return  _priceLab;
+}
+- (QMUILabel *)saveLab {
+    if (!_saveLab) {
+        _saveLab = [[QMUILabel alloc] initWithFrame:CGRectZero];
+        _saveLab.contentEdgeInsets= UIEdgeInsetsMake(10, 10, 10, 10);
+        _saveLab.backgroundColor = [UIColor colorWithHexString:@"#E0FFF5"];
+        _saveLab.textAlignment = NSTextAlignmentCenter;
+        _saveLab.textColor = [UIColor colorWithHexString:@"#113632"];
+        _saveLab.font = [UIFont fontWithName:Rob_Bold size:12];
+    }
+    return  _saveLab;
+}
+- (GoodsDetailsBottomV *)bottomV {
+    if (!_bottomV) {
+        IPhoneXHeigh
+        _bottomV = [[GoodsDetailsBottomV alloc] initWithFrame:CGRectMake(0, KScreenHeight - securityBottom_H-65, KScreenWidth, securityBottom_H+65)];
+        _bottomV.backgroundColor = Col_FFF;
+        
+    }
+    return _bottomV;
+}
+
+
+
+@end

+ 6 - 0
Asteria/Fuction/Goods/VM/ASGoodsDetailsVM.h

@@ -19,10 +19,16 @@
 ///添加评论
 #define Reviews_rewriteProductAddReview BaseRequestrUrl(@"rewrite/product/addReview")
 
+//加购相关内容
+#define Size_rewriteCartAddProducts BaseRequestrUrl(@"rewrite/cart/addProducts")
+
+
 
 NS_ASSUME_NONNULL_BEGIN
 
 @interface ASGoodsDetailsVM : RYBaseVM
++(NSMutableAttributedString *)tool_changePriceAtr:(GoodsInformationM *)model;
++(NSMutableAttributedString *)tool_addOptionPrice:(CGFloat)addPrice quantity:(NSInteger)quantity infoMoel:(GoodsInformationM *)mode;
 
 @end
 

+ 60 - 0
Asteria/Fuction/Goods/VM/ASGoodsDetailsVM.m

@@ -11,6 +11,7 @@
 - (void)ry_respnsSucessWithPath:(NSString *)mark data:(id)data{
     if([mark isEqualToString:Goods_productGetProductsById]){
         GoodsInformationM *model = [GoodsInformationM mj_objectWithKeyValues:data];
+        [ASGoodsDetailsVM tool_addGooodsImgUrlValue:model];
         NSMutableArray *ary = [NSMutableArray arrayWithArray:@[model]];
         [self ry_VMconfigDelegateData:data parseAry:ary success:YES mark:mark];
     }else if ([mark isEqualToString:Goods_productGetProductsReview]){
@@ -18,7 +19,66 @@
         [self ry_VMconfigDelegateData:data parseAry:array success:YES mark:mark];
     }else{
         [self ry_VMconfigDelegateData:data parseAry:nil success:YES mark:mark];
+    }
+}
 
++(void)tool_addGooodsImgUrlValue:(GoodsInformationM *)infoModel{
+    NSMutableArray <MediaGalleryEntriesModel *>*imgArry =[NSMutableArray arrayWithArray:infoModel.media_gallery_entries];
+    for (int i = 0; i< imgArry.count; i++) {
+        MediaGalleryEntriesModel *tempmodel = imgArry[i];
+        if(i==0){
+            infoModel.add_gooodsImgUrl =   tempmodel.file;
+        }
+    }
+}
++(NSMutableAttributedString *)tool_changePriceAtr:(GoodsInformationM *)model{
+    NSMutableAttributedString *priceAtr = [[NSMutableAttributedString alloc]initWithString:[NSString stringWithFormat:@"%@%@",model.currency_symbol,model.final_prices]];
+    [priceAtr addAttribute: NSForegroundColorAttributeName value:[UIColor colorWithHexString:@"#0B0B0B"] range:NSMakeRange(0, priceAtr.length)];
+    [priceAtr addAttribute:NSFontAttributeName value:[UIFont fontWithName:Rob_Bold size:20] range:NSMakeRange(0, priceAtr.length)];
+    if([model.final_prices floatValue] == [model.price floatValue]){
+        return  priceAtr;
+    }else{
+        [priceAtr appendAttributedString:[[NSAttributedString alloc]initWithString:@"  "]];
+        NSMutableAttributedString *priceAtrSub1 = [[NSMutableAttributedString alloc]initWithString:[NSString stringWithFormat:@"%@",model.price]];
+        [priceAtrSub1 addAttribute:NSForegroundColorAttributeName
+                        value:[UIColor colorWithHexString:@"#8c8c8c"]
+                        range:NSMakeRange(0, priceAtrSub1.length)];
+        [priceAtrSub1 addAttribute:NSFontAttributeName
+                        value:[UIFont fontWithName:Rob_Regular size:14]
+                        range:NSMakeRange(0, priceAtrSub1.length)];
+        [priceAtrSub1 addAttribute:NSStrikethroughStyleAttributeName
+                        value:[NSNumber numberWithInteger:NSUnderlineStyleSingle]
+                        range:NSMakeRange(0, priceAtrSub1.length)];
+        [priceAtr appendAttributedString:priceAtrSub1];
+        return  priceAtr;
+    }
+}
+
++(NSMutableAttributedString *)tool_addOptionPrice:(CGFloat)addPrice quantity:(NSInteger)quantity infoMoel:(GoodsInformationM *)model{
+    CGFloat add_final_price_f = (addPrice+[model.final_prices floatValue])*quantity;
+    NSString *add_final_price = [NSString stringWithFormat:@"%.2f",add_final_price_f];
+    
+    NSMutableAttributedString *priceAtr = [[NSMutableAttributedString alloc]initWithString:[NSString stringWithFormat:@"%@%@",model.currency_symbol,add_final_price]];
+    [priceAtr addAttribute: NSForegroundColorAttributeName value:[UIColor colorWithHexString:@"#0B0B0B"] range:NSMakeRange(0, priceAtr.length)];
+    [priceAtr addAttribute:NSFontAttributeName value:[UIFont fontWithName:Rob_Bold size:20] range:NSMakeRange(0, priceAtr.length)];
+    if([model.final_prices floatValue] == [model.price floatValue]){
+        return  priceAtr;
+    }else{
+        CGFloat add_price_f = (addPrice+[model.price floatValue])*quantity;
+        NSString *add_price = [NSString stringWithFormat:@"%.2f",add_price_f];
+        [priceAtr appendAttributedString:[[NSAttributedString alloc]initWithString:@"  "]];
+        NSMutableAttributedString *priceAtrSub1 = [[NSMutableAttributedString alloc]initWithString:[NSString stringWithFormat:@"%@",add_price]];
+        [priceAtrSub1 addAttribute:NSForegroundColorAttributeName
+                        value:[UIColor colorWithHexString:@"#8c8c8c"]
+                        range:NSMakeRange(0, priceAtrSub1.length)];
+        [priceAtrSub1 addAttribute:NSFontAttributeName
+                        value:[UIFont fontWithName:Rob_Regular size:14]
+                        range:NSMakeRange(0, priceAtrSub1.length)];
+        [priceAtrSub1 addAttribute:NSStrikethroughStyleAttributeName
+                        value:[NSNumber numberWithInteger:NSUnderlineStyleSingle]
+                        range:NSMakeRange(0, priceAtrSub1.length)];
+        [priceAtr appendAttributedString:priceAtrSub1];
+        return  priceAtr;
     }
 }
 @end

+ 16 - 10
Asteria/Fuction/Login/V/LoginSignUpV.m

@@ -29,6 +29,7 @@
 @property (nonatomic, strong) UIButton *xxx_selectBtn;
 
 @property (nonatomic, strong) NSDate *birthdaySelectDate;
+@property (nonatomic, strong) NSString *xxx_netDateStr;
 
 
 @end
@@ -69,10 +70,11 @@
         NSString *currentDateStr = [formartter stringFromDate:selectDate];
         self.xxx_dateLab.text = currentDateStr;
         self.xxx_dateLab.textColor = [UIColor qmui_colorWithHexString:@"#000000"];
-        NSLog(@"selectValue=%@", selectValue);
-        NSLog(@"selectDate=%@", selectDate);
-        NSLog(@"---------------------------------");
         
+        NSDateFormatter *netFormartter= [[NSDateFormatter alloc]init];
+        [formartter setDateFormat:@"yyyy/MM/dd"];
+        NSString *netDateStr = [formartter stringFromDate:selectDate];
+        self.xxx_netDateStr = netDateStr;
     };
     [datePickerView show];
 }
@@ -92,23 +94,27 @@
     }else if(self.xxx_regPassWord.xxx_passwordTF.text.length<6){
         [self makeToast:@"Please set the correct password." duration:2 position:CSToastPositionCenter];
         return;
+    }else if(!isValid(self.xxx_netDateStr)){
+        [self makeToast:@"Please set Date Of Birth." duration:2 position:CSToastPositionCenter];
+        return;
     }
     
     NSMutableDictionary *customer = [NSMutableDictionary dictionary];
     [customer setObject:self.xxx_firstName.text forKey:@"firstname"];
     [customer setObject:self.xxx_lasetName.text forKey:@"lastname"];
     [customer setObject:self.xxx_regMmailV.xxx_emailTF.text forKey:@"email"];
+    [customer setObject:self.xxx_netDateStr forKey:@"dob"];
     NSMutableDictionary *tempDic = [NSMutableDictionary dictionary];
     [tempDic setObject:customer forKey:@"customer"];
     [tempDic setObject:self.xxx_regPassWord.xxx_passwordTF.text forKey:@"password"];
     
-//    BOOL isSubscribedSelect = self.xxx_subscribedBtn.selected;
-//    [tempDic setObject:[NSString stringWithFormat:@"%d",isSubscribedSelect] forKey:@"is_subscribed"];
-//    if ([self.xxx_dateLab.text isEqualToString:@"Date Of Birth"]) {
-//        [tempDic setObject:@"" forKey:@"birthday"];
-//    }else{
-//        [tempDic setObject:self.xxx_dateLab.text forKey:@"birthday"];
-//    }
+    BOOL isSubscribedSelect = self.xxx_subscribedBtn.selected;
+    if(isSubscribedSelect){
+        NSDictionary *extension_attributes =  @{
+            @"is_subscribed": @true
+        };;
+        [tempDic setObject:extension_attributes forKey:@"extension_attributes"];
+    }
     
     [self generaltriggermethodType:1 data:tempDic];
 }

+ 23 - 17
Asteria/Fuction/Login/VC/AS_SignUpC.m

@@ -21,7 +21,7 @@
     // Do any additional setup after loading the view.
     self.customNavBar.hidden = YES;
     self.navigationController.navigationBar.hidden = YES;
-    [self sub_veiwTapBlock];
+    [self ucm_subVeiwsTapBlock];
 }
 
 - (void)initSubviews{
@@ -39,38 +39,44 @@
     [self.xxx_signUpV sizeToFit];
     NSLog(@"------%@",self.xxx_signUpV);
 }
-- (void)sub_veiwTapBlock{
+- (void)ucm_subVeiwsTapBlock{
     @weakify(self)
     self.xxx_signUpV.ViewtapClose = ^(NSInteger num, id  _Nonnull data) {
         @strongify(self)
-        [self reqNet_singup:(NSDictionary *)data];
+        [self reqNet_singup:(NSMutableDictionary *)data];
     };
 }
-//wm_todo 注册请求修改
--(void)reqNet_singup:(NSDictionary *)dic{
-    NSString *urlStr = [NSString stringWithFormat:@"%@V1/customers",AS_Server];
+-(void)reqNet_singup:(NSMutableDictionary *)dic{
     [MBProgressHUD showHUDAddedTo:self.view animated:YES];
-    [PPNetworkHelper POST:urlStr parameters:@{} success:^(id responseObject) {
-        [MBProgressHUD hideHUDForView:self.view animated:YES];
-        NSDictionary *tmpDic = responseObject;
+    [ASNetTools.shared postWithPath:BaseRequestrUrl(@"customers") param:dic success:^(id _Nonnull json) {
         @weakify(self)
-        if([tmpDic[@"status"] intValue] ==1){
-            [self.view makeToast:@"Register Success" duration:2 position:CSToastPositionCenter title:nil image:nil style:nil completion:^(BOOL didTap) {
+        NSMutableDictionary *logDic = [NSMutableDictionary dictionary];
+        logDic[@"password"] =dic[@"password"];
+        logDic[@"username"] = dic[@"customer"][@"email"];
+        [ASNetTools xxx_loginWithParam:logDic success:^(id _Nonnull result) {
+            [MBProgressHUD hideHUDForView:self.view animated:YES];
+            [self.view makeToast:@"Success" duration:2 position:CSToastPositionCenter title:nil image:nil style:nil completion:^(BOOL didTap) {
                 @strongify(self)
                 [self handle_closeEvent:nil];
             }];
-        }else{
-            [self.view makeToast:MM_str(tmpDic[@"msg"]) duration:2 position:CSToastPositionCenter];
-        }
-    } failure:^(NSError *error) {
+        } faild:^(NSString * _Nonnull code, NSString * _Nonnull msg) {
+            [MBProgressHUD hideHUDForView:self.view animated:YES];
+            [self.view makeToast:msg duration:2 position:CSToastPositionCenter];
+        }];
+    } faild:^(NSString * _Nonnull code, NSString * _Nonnull msg) {
         [MBProgressHUD hideHUDForView:self.view animated:YES];
-       [self.view makeToast:@"Network request failed" duration:2 position:CSToastPositionCenter];
+       [self.view makeToast:msg duration:2 position:CSToastPositionCenter];
     }];
+
 }
 
 
 
 -(void)handle_closeEvent:(UIButton *)btn{
+    [self.navigationController dismissViewControllerAnimated:YES completion:nil];
+}
+
+-(void)handle_popEvent:(UIButton *)btn{
     [self.navigationController popViewControllerAnimated:YES];
 }
 
@@ -89,7 +95,7 @@
     UIView *topView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, KScreenWidth, securitytop_Y)];
     UIButton *closeBtn = [UIButton buttonWithType:UIButtonTypeCustom];
     [closeBtn setImage:[UIImage imageNamed:@"common_close"] forState:UIControlStateNormal];
-    [closeBtn addTarget:self action:@selector(handle_closeEvent:) forControlEvents:UIControlEventTouchUpInside];
+    [closeBtn addTarget:self action:@selector(handle_popEvent:) forControlEvents:UIControlEventTouchUpInside];
     closeBtn.frame = CGRectMake(20, 44, 44, 44);
     [topView addSubview:closeBtn];
     UIImageView *headImg = [[UIImageView alloc]init];

+ 2 - 2
Asteria/NetTools/ASNetApis.h

@@ -18,8 +18,8 @@
 
 // MARK: - host
 #if (DEBUG)
-#define HostPath @"www.bilisar.com"  //测试
-//#define HostPath @"pc.bilisar.com"  //正式
+//#define HostPath @"www.bilisar.com"  //测试
+#define HostPath @"pc.bilisar.com"  //正式
 #else
 #define HostPath @"pc.bilisar.com" //正式
 #endif

+ 7 - 4
Asteria/NetTools/ASNetTools.m

@@ -137,14 +137,17 @@
     NSMutableDictionary *tempDic = [[NSMutableDictionary alloc] initWithDictionary:self.defuatParam];
     [tempDic addEntriesFromDictionary:param];
     MKNetworkOperation *op = [self.engine operationWithPath:path params:tempDic httpMethod:@"POST" ssl:isSSL];
-    
+    ///form-data 的请求格式
+    NSData *data = [NSJSONSerialization dataWithJSONObject:param options:NSJSONWritingPrettyPrinted error:nil];
     
     for (NSString *key in param.allKeys) {
            // 循环拿到所有参数进行拼接
-        NSString * searchStr = [param[key] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
-        [op addData:[searchStr dataUsingEncoding:NSUTF8StringEncoding] forKey:key];
+//        NSString * searchStr = [param[key] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
+        
+        NSString * searchStr = param[key];
+        NSData *data =[searchStr dataUsingEncoding:NSUTF8StringEncoding];
+        [op addData:data forKey:key];
        }
-    
     __weak typeof(self) weakSelf = self;
     [op onCompletion:^(MKNetworkOperation *completedOperation) {
         dispatch_async(dispatch_get_main_queue(), ^{

+ 2 - 1
Asteria/Product/CTMediatoaTargets/CTMediator+ASTargerts.h

@@ -19,7 +19,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 ///商品详情页面
 -(UIViewController *)Goods_GoodsDetailsC:(NSDictionary *)params;
-
+/// required model 和 present
+-(UIViewController *)Goods_GoodsSizeC:(NSDictionary *)params;
 ///登录页面
 -(UIViewController *)Login_LoginC:(NSDictionary *)params;
 

+ 6 - 1
Asteria/Product/CTMediatoaTargets/CTMediator+ASTargerts.m

@@ -15,8 +15,13 @@
 }
 
 -(UIViewController *)Goods_GoodsDetailsC:(NSDictionary *)params{
-    return [self performTarget:@"Goods" action:@"GoodsDetailsC" params:params shouldCacheTarget:NO];
+    return [self performTarget:@"Goods" action:@"AS_GoodsDetailsC" params:params shouldCacheTarget:NO];
 }
+-(UIViewController *)Goods_GoodsSizeC:(NSDictionary *)params{
+    return [self performTarget:@"Goods" action:@"AS_GoodsSizeC" params:params shouldCacheTarget:NO];
+}
+
+
 
 -(UIViewController *)Login_LoginC:(NSDictionary *)params{
     return [self performTarget:@"Login" action:@"AS_LoginC" params:params shouldCacheTarget:NO];

+ 1 - 1
Podfile.lock

@@ -1277,4 +1277,4 @@ SPEC CHECKSUMS:
 
 PODFILE CHECKSUM: d3d8fd7b62f02ea7dd209af8d43c63bea9057689
 
-COCOAPODS: 1.13.0
+COCOAPODS: 1.12.1

+ 1 - 1
Pods/Manifest.lock

@@ -1277,4 +1277,4 @@ SPEC CHECKSUMS:
 
 PODFILE CHECKSUM: d3d8fd7b62f02ea7dd209af8d43c63bea9057689
 
-COCOAPODS: 1.13.0
+COCOAPODS: 1.12.1

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 134 - 267
Pods/Pods.xcodeproj/project.pbxproj


+ 1 - 1
Pods/Target Support Files/Pods-Asteria/Pods-Asteria-frameworks.sh

@@ -18,7 +18,7 @@ echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
 mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
 
 COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}"
-SWIFT_STDLIB_PATH="${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}"
+SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}"
 BCSYMBOLMAP_DIR="BCSymbolMaps"