ソースを参照

Merge branch 'master' of http://gogs.hnwmzp.cn/nzk1/Asteria-APP

Abel 1 年間 前
コミット
76fcc2d2af
77 ファイル変更2175 行追加183 行削除
  1. 145 15
      Asteria.xcodeproj/project.pbxproj
  2. 5 3
      Asteria/Base/RYNetWork/RYBaseVM.h
  3. 11 5
      Asteria/Base/RYNetWork/RYBaseVM.m
  4. 23 0
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_close_black.imageset/Contents.json
  5. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_close_black.imageset/组 8609.png
  6. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_close_black.imageset/组 8609@2x.png
  7. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_close_black.imageset/组 8609@3x.png
  8. 23 0
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_close_white.imageset/Contents.json
  9. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_close_white.imageset/组 9646.png
  10. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_close_white.imageset/组 9646@2x.png
  11. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_close_white.imageset/组 9646@3x.png
  12. 23 0
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_wirte_upload.imageset/Contents.json
  13. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_wirte_upload.imageset/上传图片.png
  14. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_wirte_upload.imageset/上传图片@2x.png
  15. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_wirte_upload.imageset/上传图片@3x.png
  16. 23 0
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_normal.imageset/Contents.json
  17. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_normal.imageset/thumb-up-line.png
  18. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_normal.imageset/thumb-up-line@2x.png
  19. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_normal.imageset/thumb-up-line@3x.png
  20. 23 0
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_select.imageset/Contents.json
  21. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_select.imageset/thumb-up-fill.png
  22. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_select.imageset/thumb-up-fill@2x.png
  23. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_select.imageset/thumb-up-fill@3x.png
  24. 23 0
      Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_empty_star.imageset/Contents.json
  25. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_empty_star.imageset/star-NUMORAL.png
  26. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_empty_star.imageset/star-NUMORAL@2x.png
  27. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_empty_star.imageset/star-NUMORAL@3x.png
  28. 23 0
      Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_full_star.imageset/Contents.json
  29. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_full_star.imageset/star-fill.png
  30. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_full_star.imageset/star-fill@2x.png
  31. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_full_star.imageset/star-fill@3x.png
  32. 23 0
      Asteria/Fuction/Goods/GoodsSize/Cell/GoodsSizeCountCell.h
  33. 162 0
      Asteria/Fuction/Goods/GoodsSize/Cell/GoodsSizeCountCell.m
  34. 22 0
      Asteria/Fuction/Goods/GoodsSize/Cell/GoodsSizePayMentCell.h
  35. 51 0
      Asteria/Fuction/Goods/GoodsSize/Cell/GoodsSizePayMentCell.m
  36. 21 0
      Asteria/Fuction/Goods/GoodsSize/Cell/GoosSizeSelectCell.h
  37. 139 0
      Asteria/Fuction/Goods/GoodsSize/Cell/GoosSizeSelectCell.m
  38. 25 0
      Asteria/Fuction/Goods/GoodsSize/GoodsSizeSelectTableV.h
  39. 48 0
      Asteria/Fuction/Goods/GoodsSize/GoodsSizeSelectTableV.m
  40. 7 1
      Asteria/Fuction/Goods/M/GoodsInformationM.h
  41. 23 0
      Asteria/Fuction/Goods/Revies/Base/QDSingleImagePickerPreviewViewController.h
  42. 66 0
      Asteria/Fuction/Goods/Revies/Base/QDSingleImagePickerPreviewViewController.m
  43. 19 0
      Asteria/Fuction/Goods/Revies/GoodsReviewsWriteC.h
  44. 442 0
      Asteria/Fuction/Goods/Revies/GoodsReviewsWriteC.m
  45. 18 0
      Asteria/Fuction/Goods/Revies/V/GoodWritUpImgV.h
  46. 55 0
      Asteria/Fuction/Goods/Revies/V/GoodWritUpImgV.m
  47. 1 0
      Asteria/Fuction/Goods/Revies/V/GoodsReviewsListTableV.m
  48. 1 1
      Asteria/Fuction/Goods/Revies/V/ReviewsTableHearV.h
  49. 80 21
      Asteria/Fuction/Goods/Revies/V/ReviewsTableHearV.m
  50. 24 3
      Asteria/Fuction/Goods/Revies/cell/GoodsReviewsCell.m
  51. 0 16
      Asteria/Fuction/Goods/Size/As_GoodsSizeC.h
  52. 0 23
      Asteria/Fuction/Goods/Size/As_GoodsSizeC.m
  53. 2 1
      Asteria/Fuction/Goods/Target/Target_Goods.h
  54. 9 2
      Asteria/Fuction/Goods/Target/Target_Goods.m
  55. 1 1
      Asteria/Fuction/Goods/V/Banner/WKM_goodsBanner.m
  56. 1 3
      Asteria/Fuction/Goods/V/GoodsDetailSrcView.m
  57. 1 1
      Asteria/Fuction/Goods/V/GoodsDetailsPayV.m
  58. 17 4
      Asteria/Fuction/Goods/VC/AS_GoodsDetailsC.m
  59. 0 0
      Asteria/Fuction/Goods/VC/AS_GoodsReviewsListC.h
  60. 67 31
      Asteria/Fuction/Goods/Revies/AS_GoodsReviewsListC.m
  61. 17 0
      Asteria/Fuction/Goods/VC/AS_GoodsSizeC.h
  62. 263 0
      Asteria/Fuction/Goods/VC/AS_GoodsSizeC.m
  63. 14 0
      Asteria/Fuction/Goods/VM/ASGoodsDetailsVM.h
  64. 63 0
      Asteria/Fuction/Goods/VM/ASGoodsDetailsVM.m
  65. 16 10
      Asteria/Fuction/Login/V/LoginSignUpV.m
  66. 23 17
      Asteria/Fuction/Login/VC/AS_SignUpC.m
  67. 10 0
      Asteria/Info.plist
  68. 3 2
      Asteria/NetTools/ASNetApis.h
  69. 2 0
      Asteria/NetTools/ASNetTools.h
  70. 68 0
      Asteria/NetTools/ASNetTools.m
  71. 2 1
      Asteria/Product/CTMediatoaTargets/CTMediator+ASTargerts.h
  72. 6 1
      Asteria/Product/CTMediatoaTargets/CTMediator+ASTargerts.m
  73. 2 0
      Podfile
  74. 2 2
      Podfile.lock
  75. 2 2
      Pods/Manifest.lock
  76. 34 16
      Pods/Pods.xcodeproj/project.pbxproj
  77. 1 1
      Pods/Target Support Files/Pods-Asteria/Pods-Asteria-frameworks.sh

+ 145 - 15
Asteria.xcodeproj/project.pbxproj

@@ -192,6 +192,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 */; };
@@ -200,10 +201,32 @@
 		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 */; };
+		9A98E50E2B5A1ED300E8C5C1 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E50D2B5A1ED300E8C5C1 /* SystemConfiguration.framework */; };
+		9A98E5102B5A1EFE00E8C5C1 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E50F2B5A1EF000E8C5C1 /* libz.tbd */; };
+		9A98E5122B5A248D00E8C5C1 /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E5112B5A248D00E8C5C1 /* AssetsLibrary.framework */; };
+		9A98E5142B5A258A00E8C5C1 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E5132B5A258900E8C5C1 /* CoreFoundation.framework */; };
+		9A98E5162B5A25A100E8C5C1 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E5152B5A25A100E8C5C1 /* CoreGraphics.framework */; };
+		9A98E5182B5A25AD00E8C5C1 /* CoreImage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E5172B5A25AD00E8C5C1 /* CoreImage.framework */; };
+		9A98E51A2B5A25D600E8C5C1 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E5192B5A25D600E8C5C1 /* ImageIO.framework */; };
+		9A98E51D2B5A275400E8C5C1 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E51C2B5A275400E8C5C1 /* UIKit.framework */; };
+		9A98E51E2B5A276A00E8C5C1 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E51B2B5A25E900E8C5C1 /* libc++.tbd */; };
+		9A98E5202B5A278A00E8C5C1 /* libsqlite3.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E51F2B5A277B00E8C5C1 /* libsqlite3.tbd */; };
+		9A98E5222B5A27A900E8C5C1 /* libz.1.2.5.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E5212B5A279D00E8C5C1 /* libz.1.2.5.tbd */; };
+		9A98E5242B5A27C500E8C5C1 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E5232B5A27C500E8C5C1 /* Accelerate.framework */; };
+		9A98E5262B5A27EA00E8C5C1 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E5252B5A27EA00E8C5C1 /* MobileCoreServices.framework */; };
+		9A98E5282B5A280700E8C5C1 /* SafariServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E5272B5A280700E8C5C1 /* SafariServices.framework */; };
+		9A98E52A2B5A281600E8C5C1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E5292B5A281600E8C5C1 /* QuartzCore.framework */; };
+		9A98E52C2B5A282800E8C5C1 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A98E52B2B5A282800E8C5C1 /* CoreText.framework */; };
 		9AC2CC222B3A673B005187BD /* ASGoodsDetailsVM.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AC2CC212B3A673B005187BD /* ASGoodsDetailsVM.m */; };
 		9ACBEC212A14585300A8F97A /* CTMediator+ASTargerts.m in Sources */ = {isa = PBXBuildFile; fileRef = 9ACBEC202A14585300A8F97A /* CTMediator+ASTargerts.m */; };
 		9ACBEC252A14707400A8F97A /* AS_SignUpC.m in Sources */ = {isa = PBXBuildFile; fileRef = 9ACBEC242A14707400A8F97A /* AS_SignUpC.m */; };
@@ -258,6 +281,8 @@
 		9AD6A5442A1218E8001DE3D9 /* PassWordSecureBtnV.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AD6A5422A1218E7001DE3D9 /* PassWordSecureBtnV.m */; };
 		9AD6A5452A1218E8001DE3D9 /* EamilTFmatchV.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AD6A5432A1218E7001DE3D9 /* EamilTFmatchV.m */; };
 		9AD6A5492A1237D0001DE3D9 /* Target_Login.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AD6A5482A1237D0001DE3D9 /* Target_Login.m */; };
+		9ADA8A1E2B4E481E00BACDEA /* GoodsReviewsWriteC.m in Sources */ = {isa = PBXBuildFile; fileRef = 9ADA8A1D2B4E481E00BACDEA /* GoodsReviewsWriteC.m */; };
+		9ADA8A212B4E96C900BACDEA /* GoodWritUpImgV.m in Sources */ = {isa = PBXBuildFile; fileRef = 9ADA8A1F2B4E96C800BACDEA /* GoodWritUpImgV.m */; };
 		9AF9085C2B397320008AC2D2 /* UIViewController+RY_configNet.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AF9085B2B397320008AC2D2 /* UIViewController+RY_configNet.m */; };
 		9AF9085F2B3976F3008AC2D2 /* RYBaseVM.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AF9085E2B3976F3008AC2D2 /* RYBaseVM.m */; };
 /* End PBXBuildFile section */
@@ -645,6 +670,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>"; };
@@ -658,13 +685,39 @@
 		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; };
+		9A98E50B2B5A1EC500E8C5C1 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
+		9A98E50D2B5A1ED300E8C5C1 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
+		9A98E50F2B5A1EF000E8C5C1 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
+		9A98E5112B5A248D00E8C5C1 /* AssetsLibrary.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AssetsLibrary.framework; path = System/Library/Frameworks/AssetsLibrary.framework; sourceTree = SDKROOT; };
+		9A98E5132B5A258900E8C5C1 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; };
+		9A98E5152B5A25A100E8C5C1 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+		9A98E5172B5A25AD00E8C5C1 /* CoreImage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreImage.framework; path = System/Library/Frameworks/CoreImage.framework; sourceTree = SDKROOT; };
+		9A98E5192B5A25D600E8C5C1 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = System/Library/Frameworks/ImageIO.framework; sourceTree = SDKROOT; };
+		9A98E51B2B5A25E900E8C5C1 /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; };
+		9A98E51C2B5A275400E8C5C1 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+		9A98E51F2B5A277B00E8C5C1 /* libsqlite3.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.tbd; path = usr/lib/libsqlite3.tbd; sourceTree = SDKROOT; };
+		9A98E5212B5A279D00E8C5C1 /* libz.1.2.5.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.1.2.5.tbd; path = usr/lib/libz.1.2.5.tbd; sourceTree = SDKROOT; };
+		9A98E5232B5A27C500E8C5C1 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; };
+		9A98E5252B5A27EA00E8C5C1 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; };
+		9A98E5272B5A280700E8C5C1 /* SafariServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SafariServices.framework; path = System/Library/Frameworks/SafariServices.framework; sourceTree = SDKROOT; };
+		9A98E5292B5A281600E8C5C1 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
+		9A98E52B2B5A282800E8C5C1 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; };
 		9AC2CC202B3A673B005187BD /* ASGoodsDetailsVM.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ASGoodsDetailsVM.h; sourceTree = "<group>"; };
 		9AC2CC212B3A673B005187BD /* ASGoodsDetailsVM.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ASGoodsDetailsVM.m; sourceTree = "<group>"; };
 		9ACBEC1F2A14585300A8F97A /* CTMediator+ASTargerts.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "CTMediator+ASTargerts.h"; sourceTree = "<group>"; };
@@ -775,6 +828,10 @@
 		9AD6A5432A1218E7001DE3D9 /* EamilTFmatchV.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EamilTFmatchV.m; sourceTree = "<group>"; };
 		9AD6A5472A1237D0001DE3D9 /* Target_Login.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Target_Login.h; sourceTree = "<group>"; };
 		9AD6A5482A1237D0001DE3D9 /* Target_Login.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Target_Login.m; sourceTree = "<group>"; };
+		9ADA8A1C2B4E481E00BACDEA /* GoodsReviewsWriteC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GoodsReviewsWriteC.h; sourceTree = "<group>"; };
+		9ADA8A1D2B4E481E00BACDEA /* GoodsReviewsWriteC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GoodsReviewsWriteC.m; sourceTree = "<group>"; };
+		9ADA8A1F2B4E96C800BACDEA /* GoodWritUpImgV.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GoodWritUpImgV.m; sourceTree = "<group>"; };
+		9ADA8A202B4E96C900BACDEA /* GoodWritUpImgV.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GoodWritUpImgV.h; sourceTree = "<group>"; };
 		9AF9085A2B397320008AC2D2 /* UIViewController+RY_configNet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIViewController+RY_configNet.h"; sourceTree = "<group>"; };
 		9AF9085B2B397320008AC2D2 /* UIViewController+RY_configNet.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIViewController+RY_configNet.m"; sourceTree = "<group>"; };
 		9AF9085D2B3976F3008AC2D2 /* RYBaseVM.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RYBaseVM.h; sourceTree = "<group>"; };
@@ -788,7 +845,25 @@
 			buildActionMask = 2147483647;
 			files = (
 				9A2027F52A137B8600FF4DAF /* AuthenticationServices.framework in Frameworks */,
+				9A98E51D2B5A275400E8C5C1 /* UIKit.framework in Frameworks */,
+				9A98E5202B5A278A00E8C5C1 /* libsqlite3.tbd in Frameworks */,
+				9A98E5102B5A1EFE00E8C5C1 /* libz.tbd in Frameworks */,
+				9A98E51E2B5A276A00E8C5C1 /* libc++.tbd in Frameworks */,
+				9A98E5122B5A248D00E8C5C1 /* AssetsLibrary.framework in Frameworks */,
+				9A98E5162B5A25A100E8C5C1 /* CoreGraphics.framework in Frameworks */,
+				9A98E5222B5A27A900E8C5C1 /* libz.1.2.5.tbd in Frameworks */,
+				9A98E50E2B5A1ED300E8C5C1 /* SystemConfiguration.framework in Frameworks */,
+				9A98E5242B5A27C500E8C5C1 /* Accelerate.framework in Frameworks */,
+				9A98E5142B5A258A00E8C5C1 /* CoreFoundation.framework in Frameworks */,
 				8C24ECE114420CDEE7B9B22B /* Pods_Asteria.framework in Frameworks */,
+				9A98E52C2B5A282800E8C5C1 /* CoreText.framework in Frameworks */,
+				9A98E51A2B5A25D600E8C5C1 /* ImageIO.framework in Frameworks */,
+				9A98E5182B5A25AD00E8C5C1 /* CoreImage.framework in Frameworks */,
+				9A98E5282B5A280700E8C5C1 /* SafariServices.framework in Frameworks */,
+				9A98E52A2B5A281600E8C5C1 /* QuartzCore.framework in Frameworks */,
+				9A98E5262B5A27EA00E8C5C1 /* MobileCoreServices.framework in Frameworks */,
+				9A98E50C2B5A1EC500E8C5C1 /* Security.framework in Frameworks */,
+				9A98E50A2B5A1EB700E8C5C1 /* Photos.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -806,6 +881,24 @@
 		5A5FFF81F369698EFECBFE81 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				9A98E52B2B5A282800E8C5C1 /* CoreText.framework */,
+				9A98E5292B5A281600E8C5C1 /* QuartzCore.framework */,
+				9A98E5272B5A280700E8C5C1 /* SafariServices.framework */,
+				9A98E5252B5A27EA00E8C5C1 /* MobileCoreServices.framework */,
+				9A98E5232B5A27C500E8C5C1 /* Accelerate.framework */,
+				9A98E5212B5A279D00E8C5C1 /* libz.1.2.5.tbd */,
+				9A98E51F2B5A277B00E8C5C1 /* libsqlite3.tbd */,
+				9A98E51C2B5A275400E8C5C1 /* UIKit.framework */,
+				9A98E51B2B5A25E900E8C5C1 /* libc++.tbd */,
+				9A98E5192B5A25D600E8C5C1 /* ImageIO.framework */,
+				9A98E5172B5A25AD00E8C5C1 /* CoreImage.framework */,
+				9A98E5152B5A25A100E8C5C1 /* CoreGraphics.framework */,
+				9A98E5132B5A258900E8C5C1 /* CoreFoundation.framework */,
+				9A98E5112B5A248D00E8C5C1 /* AssetsLibrary.framework */,
+				9A98E50F2B5A1EF000E8C5C1 /* libz.tbd */,
+				9A98E50D2B5A1ED300E8C5C1 /* SystemConfiguration.framework */,
+				9A98E50B2B5A1EC500E8C5C1 /* Security.framework */,
+				9A98E5092B5A1EB700E8C5C1 /* Photos.framework */,
 				9A2027F42A137B8600FF4DAF /* AuthenticationServices.framework */,
 				54DCE8001991D89B696E7D44 /* Pods_Asteria.framework */,
 				51AF3B78609F55449DF09609 /* Pods_Asteria_NotificationServiceExtension.framework */,
@@ -1631,8 +1724,9 @@
 		9A32A2252B4BEB2D005A5831 /* Revies */ = {
 			isa = PBXGroup;
 			children = (
-				9A31EDFE2B469A73009F11EE /* AS_GoodsReviewsListC.h */,
-				9A31EDFF2B469A73009F11EE /* AS_GoodsReviewsListC.m */,
+				9A98E5042B5A159500E8C5C1 /* Base */,
+				9ADA8A1C2B4E481E00BACDEA /* GoodsReviewsWriteC.h */,
+				9ADA8A1D2B4E481E00BACDEA /* GoodsReviewsWriteC.m */,
 				9A32A2262B4BEB5F005A5831 /* V */,
 				9A35203B2B47FEDE00D097CB /* cell */,
 			);
@@ -1642,6 +1736,8 @@
 		9A32A2262B4BEB5F005A5831 /* V */ = {
 			isa = PBXGroup;
 			children = (
+				9ADA8A202B4E96C900BACDEA /* GoodWritUpImgV.h */,
+				9ADA8A1F2B4E96C800BACDEA /* GoodWritUpImgV.m */,
 				9A35203C2B47FF2300D097CB /* GoodsReviewsListTableV.h */,
 				9A35203D2B47FF2300D097CB /* GoodsReviewsListTableV.m */,
 				9AD4D3952B48E8780086D6FB /* ReviewsTableHearV.h */,
@@ -1681,9 +1777,9 @@
 		9A337E4F2A04FA0A00D058A5 /* Goods */ = {
 			isa = PBXGroup;
 			children = (
+				9A5F52982B5F5A07007D3791 /* GoodsSize */,
 				9A32A2252B4BEB2D005A5831 /* Revies */,
 				9A3F5CB02B3BF61B00DDB6A7 /* Assets */,
-				9A8DD8C22A0B8EDD00573324 /* Size */,
 				9A3735702A0B4606008BB3CE /* VM */,
 				9AD364C82A05E77200452C7A /* M */,
 				9AD364C72A05E76D00452C7A /* V */,
@@ -1761,6 +1857,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 = (
@@ -1772,22 +1891,22 @@
 			path = V;
 			sourceTree = "<group>";
 		};
-		9A8DD8C22A0B8EDD00573324 /* Size */ = {
+		9A8DD8CC2A0B9E0C00573324 /* Assets */ = {
 			isa = PBXGroup;
 			children = (
-				9A8DD8C32A0B8F1700573324 /* As_GoodsSizeC.h */,
-				9A8DD8C42A0B8F1700573324 /* As_GoodsSizeC.m */,
+				9A7DA6A02A0CE33500136974 /* Asteria.xcassets */,
+				9A5C645A2A1206E500CBB185 /* common.xcassets */,
 			);
-			path = Size;
+			path = Assets;
 			sourceTree = "<group>";
 		};
-		9A8DD8CC2A0B9E0C00573324 /* Assets */ = {
+		9A98E5042B5A159500E8C5C1 /* Base */ = {
 			isa = PBXGroup;
 			children = (
-				9A7DA6A02A0CE33500136974 /* Asteria.xcassets */,
-				9A5C645A2A1206E500CBB185 /* common.xcassets */,
+				9A98E5062B5A15A400E8C5C1 /* QDSingleImagePickerPreviewViewController.h */,
+				9A98E5052B5A15A400E8C5C1 /* QDSingleImagePickerPreviewViewController.m */,
 			);
-			path = Assets;
+			path = Base;
 			sourceTree = "<group>";
 		};
 		9ACBEC1E2A1457E800A8F97A /* CTMediatoaTargets */ = {
@@ -1975,8 +2094,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>";
@@ -2399,13 +2522,14 @@
 				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 */,
 				81717D3A2A3D322700648139 /* KWHisAndHotWordsView.m in Sources */,
 				81DFA5592A4681E900DA708B /* ASPointEranCell.m in Sources */,
 				81354BE72A28786C0082C93A /* ASProductBaseModel.m in Sources */,
-				9A8DD8C52A0B8F1700573324 /* As_GoodsSizeC.m in Sources */,
+				9ADA8A212B4E96C900BACDEA /* GoodWritUpImgV.m in Sources */,
 				9A3F5CB82B3BF90100DDB6A7 /* GoodsDetailsIntroduceV.m in Sources */,
 				8134C1BD2A1372D5006EB0EC /* ASUserCenterTableHeadView.m in Sources */,
 				9AD346002A08D60F005CA070 /* ZFPresentTransition.m in Sources */,
@@ -2415,6 +2539,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 */,
@@ -2463,6 +2588,7 @@
 				81E5EE902A498FC90075695F /* ASVipCenterViewController.m in Sources */,
 				81C7963F2A551FB0003083B8 /* ASInfomationSetController.m in Sources */,
 				8131A27C2B365F7700A191BE /* ASProductListCategoryModel.m in Sources */,
+				9A98E5072B5A15A500E8C5C1 /* QDSingleImagePickerPreviewViewController.m in Sources */,
 				9AD346062A08D60F005CA070 /* ZFReachabilityManager.m in Sources */,
 				81717CA52A3C0A5000648139 /* KWProductFilterItemCell.m in Sources */,
 				812021252B185A610026B8B5 /* ASCouponsListViewModel.m in Sources */,
@@ -2470,8 +2596,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 */,
@@ -2502,7 +2630,9 @@
 				9AD3460E2A08D60F005CA070 /* ZFNetworkSpeedMonitor.m in Sources */,
 				81AA11DC2B23FF71008EB5C7 /* ASCurrencyManager.m in Sources */,
 				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 */,

+ 5 - 3
Asteria/Base/RYNetWork/RYBaseVM.h

@@ -10,8 +10,8 @@
 NS_ASSUME_NONNULL_BEGIN
 @protocol RY_baseVMprotocol <NSObject>
 ///获取网络请求的回调
--(void)ry_respnsData:(id)data
-            parseAry:(NSMutableArray *)arry
+-(void)ry_respnsData:(nullable id)data
+            parseAry:(nullable NSMutableArray *)arry
               sucess:(BOOL)sucessOrFail
                 mark:(NSString *)mark;
 
@@ -30,9 +30,11 @@ NS_ASSUME_NONNULL_BEGIN
 
 
 -(void)ry_requestPostApi:(NSString *)mark param:(NSDictionary *)param;
--(void)ry_requestGetApi:(NSString *)mark param:(NSDictionary *)param;
+-(void)ry_formDataRequestPostApi:(NSString *)mark param:(NSDictionary *)param;
 
+-(void)ry_requestGetApi:(NSString *)mark param:(NSDictionary *)param;
 
+ 
 
 //重写的方法 解析之后再传给 VC
 -(void)ry_respnsSucessWithPath:(NSString *)mark data:(id)data;

+ 11 - 5
Asteria/Base/RYNetWork/RYBaseVM.m

@@ -20,11 +20,21 @@
     return self;
 }
 
+-(void)ry_formDataRequestPostApi:(NSString *)mark param:(NSDictionary *)param{
+    [ASNetTools.shared formData_postWithPath:mark param:param success:^(id _Nonnull json) {
+        NSLog(@"mark--%@--param-%@\n-json--%@",mark,param,json);
+        [self ry_respnsSucessWithPath:mark data:json];
+    } faild:^(NSString * _Nonnull code, NSString * _Nonnull msg) {
+        NSLog(@"mark--%@--param-%@\n-Error--%@",mark,param,msg);
+        [self ry_reponsFaildWithPath:mark code:code msg:msg];
+    }];
+}
 -(void)ry_requestPostApi:(NSString *)mark param:(NSDictionary *)param{
     [ASNetTools.shared postWithPath:mark param:param success:^(id _Nonnull json) {
         NSLog(@"mark--%@--param-%@\n-json--%@",mark,param,json);
         [self ry_respnsSucessWithPath:mark data:json];
     } faild:^(NSString * _Nonnull code, NSString * _Nonnull msg) {
+        NSLog(@"mark--%@--param-%@\n-Error--%@",mark,param,msg);
         [self ry_reponsFaildWithPath:mark code:code msg:msg];
     }];
 }
@@ -33,6 +43,7 @@
         NSLog(@"mark--%@--param-%@\n-json--%@",mark,param,json);
         [self ry_respnsSucessWithPath:mark data:json];
     } faild:^(NSString * _Nonnull code, NSString * _Nonnull msg) {
+        NSLog(@"mark--%@--param-%@\n-Error--%@",mark,param,msg);
         [self ry_reponsFaildWithPath:mark code:code msg:msg];
     }];
 }
@@ -62,9 +73,4 @@
     
  }
 
-
-
-
-
-
 @end

+ 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
Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_close_black.imageset/组 8609.png


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


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
Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_close_white.imageset/组 9646.png


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


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


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

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

BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_wirte_upload.imageset/上传图片.png


BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_wirte_upload.imageset/上传图片@2x.png


BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_wirte_upload.imageset/上传图片@3x.png


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

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

BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_normal.imageset/thumb-up-line.png


BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_normal.imageset/thumb-up-line@2x.png


BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_normal.imageset/thumb-up-line@3x.png


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

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

BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_select.imageset/thumb-up-fill.png


BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_select.imageset/thumb-up-fill@2x.png


BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_select.imageset/thumb-up-fill@3x.png


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

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

BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_empty_star.imageset/star-NUMORAL.png


BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_empty_star.imageset/star-NUMORAL@2x.png


BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_empty_star.imageset/star-NUMORAL@3x.png


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

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

BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_full_star.imageset/star-fill.png


BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_full_star.imageset/star-fill@2x.png


BIN
Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_full_star.imageset/star-fill@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

+ 23 - 0
Asteria/Fuction/Goods/Revies/Base/QDSingleImagePickerPreviewViewController.h

@@ -0,0 +1,23 @@
+//
+//  QDSingleImagePickerPreviewViewController.h
+//  qmuidemo
+//
+//  Created by QMUI Team on 15/5/17.
+//  Copyright (c) 2015年 QMUI Team. All rights reserved.
+//
+
+@class QDSingleImagePickerPreviewViewController;
+
+@protocol QDSingleImagePickerPreviewViewControllerDelegate <QMUIImagePickerPreviewViewControllerDelegate>
+
+@required
+- (void)imagePickerPreviewViewController:(QDSingleImagePickerPreviewViewController *)imagePickerPreviewViewController didSelectImageWithImagesAsset:(QMUIAsset *)imageAsset;
+
+@end
+
+@interface QDSingleImagePickerPreviewViewController : QMUIImagePickerPreviewViewController
+
+@property(nonatomic, weak) id<QDSingleImagePickerPreviewViewControllerDelegate> delegate;
+@property(nonatomic, strong) QMUIAssetsGroup *assetsGroup;
+
+@end

+ 66 - 0
Asteria/Fuction/Goods/Revies/Base/QDSingleImagePickerPreviewViewController.m

@@ -0,0 +1,66 @@
+//
+//  QDSingleImagePickerPreviewViewController.m
+//  qmuidemo
+//
+//  Created by QMUI Team on 15/5/17.
+//  Copyright (c) 2015年 QMUI Team. All rights reserved.
+//
+
+#import "QDSingleImagePickerPreviewViewController.h"
+
+@implementation QDSingleImagePickerPreviewViewController {
+    QMUIButton *_confirmButton;
+}
+
+@dynamic delegate;
+
+- (void)initSubviews {
+    [super initSubviews];
+    _confirmButton = [[QMUIButton alloc] init];
+    _confirmButton.qmui_outsideEdge = UIEdgeInsetsMake(-6, -6, -6, -6);
+    [_confirmButton setTitleColor:self.toolBarTintColor forState:UIControlStateNormal];
+    [_confirmButton setTitle:@"USE" forState:UIControlStateNormal];
+    [_confirmButton addTarget:self action:@selector(handleUserAvatarButtonClick:) forControlEvents:UIControlEventTouchUpInside];
+    [_confirmButton sizeToFit];
+    [self.topToolBarView addSubview:_confirmButton];
+}
+
+- (void)setDownloadStatus:(QMUIAssetDownloadStatus)downloadStatus {
+    [super setDownloadStatus:downloadStatus];
+    switch (downloadStatus) {
+        case QMUIAssetDownloadStatusSucceed:
+            _confirmButton.hidden = NO;
+            break;
+            
+        case QMUIAssetDownloadStatusDownloading:
+            _confirmButton.hidden = YES;
+            break;
+            
+        case QMUIAssetDownloadStatusCanceled:
+            _confirmButton.hidden = NO;
+            break;
+            
+        case QMUIAssetDownloadStatusFailed:
+            _confirmButton.hidden = YES;
+            break;
+            
+        default:
+            break;
+    }
+}
+
+- (void)viewDidLayoutSubviews {
+    [super viewDidLayoutSubviews];
+    _confirmButton.frame = CGRectSetXY(_confirmButton.frame, CGRectGetWidth(self.topToolBarView.frame) - CGRectGetWidth(_confirmButton.frame) - 10, CGRectGetMinY(self.backButton.frame) + CGFloatGetCenter(CGRectGetHeight(self.backButton.frame), CGRectGetHeight(_confirmButton.frame)));
+}
+
+- (void)handleUserAvatarButtonClick:(id)sender {
+    [self.navigationController dismissViewControllerAnimated:YES completion:^(void) {
+        if (self.delegate && [self.delegate respondsToSelector:@selector(imagePickerPreviewViewController:didSelectImageWithImagesAsset:)]) {
+            QMUIAsset *imageAsset = [self.imagesAssetArray objectAtIndex:self.imagePreviewView.currentImageIndex];
+            [self.delegate imagePickerPreviewViewController:self didSelectImageWithImagesAsset:imageAsset];
+        }
+    }];
+}
+
+@end

+ 19 - 0
Asteria/Fuction/Goods/Revies/GoodsReviewsWriteC.h

@@ -0,0 +1,19 @@
+//
+//  GoodsReviewsWriteC.h
+//  Asteria
+//
+//  Created by 王猛 on 2024/1/10.
+//
+
+#import <WMBase/WMBase.h>
+#import "GoodsInformationM.h"
+NS_ASSUME_NONNULL_BEGIN
+
+@interface GoodsReviewsWriteC : UCMBaseC
+@property (nonatomic, strong) UIView *topBgV;
+@property (nonatomic, strong) NSString *nav_title;
+@property (nonatomic, strong) GoodsInformationM *goodsM;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 442 - 0
Asteria/Fuction/Goods/Revies/GoodsReviewsWriteC.m

@@ -0,0 +1,442 @@
+//
+//  GoodsReviewsWriteC.m
+//  Asteria
+//
+//  Created by 王猛 on 2024/1/10.
+//
+
+#import "GoodsReviewsWriteC.h"
+#import "AS_GoodsDetailsC.h"
+#import "HCSStarRatingView.h"
+#import "GoodWritUpImgV.h"
+#import <QMUIKit/QMUIImagePickerPreviewViewController.h>
+#import "ASGoodsDetailsVM.h"
+#import "QDSingleImagePickerPreviewViewController.h"
+
+
+#define kWriteUpimgWdith  (KScreenWidth-40)/3
+static QMUIAlbumContentType const kAlbumContentType = QMUIAlbumContentTypeOnlyPhoto;
+
+
+@interface GoodsReviewsWriteC ()
+<QMUITextViewDelegate,
+QMUIAlbumViewControllerDelegate,
+QMUIImagePickerViewControllerDelegate,
+QDSingleImagePickerPreviewViewControllerDelegate,
+RY_baseVMprotocol>
+@property (nonatomic, strong) TT_CustonTF *buyernameTF;
+@property (nonatomic, strong) TT_CustonTF *orderlengthTF;
+@property (nonatomic, strong) NSMutableArray *starValueAry;
+@property (nonatomic, strong) UIButton *bootomBtn;
+@property (nonatomic, strong) QMUITextView *writeTextV;
+@property (nonatomic, strong) NSMutableArray *xxx_upLoadImgAry;
+@property (nonatomic, assign) NSInteger xxx_tapImgIndex;
+
+@property (nonatomic, strong) NSMutableArray *xxx_imgUrlAry;
+@property (nonatomic, strong) NSMutableArray *xxx_selectImgAry;
+@property (nonatomic, strong) ASGoodsDetailsVM *VM;
+
+@end
+
+@implementation GoodsReviewsWriteC
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    self.title = self.nav_title;
+
+}
+- (void)ucm_bindvmmodel{
+    self.VM = [[ASGoodsDetailsVM alloc]initDelegate:self];
+}
+- (void)initSubviews {
+    [super initSubviews];
+    [self.view addSubview:self.topBgV];
+    [self.view addSubview:self.buyernameTF];
+    [self.view addSubview:self.orderlengthTF];
+    IPhoneXHeigh
+    self.topBgV.frame = CGRectMake(0, securitytop_Y, KScreenWidth, 60);
+    self.buyernameTF.mj_y = CGRectGetMaxY(self.topBgV.frame)+20;
+    self.orderlengthTF.mj_y = CGRectGetMaxY(self.buyernameTF.frame)+20;
+    NSArray *titileAry = @[@"QUALITY",@"SHIPPING",@"SERVICE"];
+    self.starValueAry = [NSMutableArray arrayWithArray:@[@"0.0",@"0.0",@"0.0"]];
+    UIView *lastView = nil;
+    for (int i = 0; i<titileAry.count; i++) {
+        UILabel *tipslab = [UILabel new];
+        tipslab.text = titileAry[i];
+        tipslab.font = [UIFont fontWithName:Rob_Regular size:14];
+        tipslab.textColor = [UIColor colorWithHexString:@"#B2B2B2"];
+        [self.view addSubview:tipslab];
+        tipslab.frame = CGRectMake(10, CGRectGetMaxY(self.orderlengthTF.frame)+20+i*40, 70, 40);
+        
+        HCSStarRatingView *reviews_startV = [[HCSStarRatingView alloc]initWithFrame:CGRectMake(10+70+10, CGRectGetMaxY(self.orderlengthTF.frame)+20+i*40,160, 40)];
+        reviews_startV.value =0;
+        reviews_startV.filledStarImage = IMAGE(@"reviews_full_star");
+        reviews_startV.emptyStarImage = IMAGE(@"reviews_empty_star");
+        reviews_startV.maximumValue = 5;
+        reviews_startV.backgroundColor = [UIColor clearColor];
+        reviews_startV.tag = i;
+        [reviews_startV addTarget:self action:@selector(didChangeValue:) forControlEvents:UIControlEventValueChanged];
+        [self.view addSubview:reviews_startV];
+        if(i == titileAry.count-1){
+            lastView = reviews_startV;
+        }
+    }
+    [self.view addSubview:self.writeTextV];
+    self.writeTextV.mj_y = CGRectGetMaxY(lastView.frame)+30;
+    
+    self.xxx_upLoadImgAry = [NSMutableArray arrayWithCapacity:3];
+    for (int i = 0; i<3; i++) {
+        GoodWritUpImgV *upImgV = [[GoodWritUpImgV alloc]initWithFrame:CGRectMake(10+i*(kWriteUpimgWdith+10),CGRectGetMaxY(self.writeTextV.frame)+30, kWriteUpimgWdith, kWriteUpimgWdith)];
+        upImgV.tag = i;
+        upImgV.closeBtn.tag = i;
+        upImgV.isCanTap = YES;
+        [upImgV.closeBtn addTarget:self action:@selector(handle_closeDeleteImgBtn:) forControlEvents:UIControlEventTouchUpInside];
+        upImgV.hidden = YES;
+        upImgV.image = [UIImage imageNamed:@"goods_wirte_upload"];
+        [self.view addSubview:upImgV];
+        UITapGestureRecognizer  *tap= [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handle_TapUpImgLoad:)];
+        [upImgV addGestureRecognizer:tap];
+        if(i == 0 ){
+            upImgV.hidden = NO;
+        }
+        [self.xxx_upLoadImgAry addObject:upImgV];
+    }
+    [self.view addSubview:self.bootomBtn];
+}
+#pragma mark - **************** handle ****************
+-(void)didChangeValue:(HCSStarRatingView *)starV{
+    NSLog(@"Changed rating to %.1f", starV.value);
+    [self.starValueAry replaceObjectAtIndex:starV.tag withObject:[NSString stringWithFormat:@"%f",starV.value]];
+}
+/// upLoad Img 相关内容
+-(void)handle_closeDeleteImgBtn:(UIButton *)btn{
+    [FTT_Helper CreateTitle:@"Whether to delete the current photo" message:nil CantionTitle:@"Cancel" Sure:@"Sure" preferredStyle:UIAlertControllerStyleAlert SureAC:^{
+        [self tool_deleteImgChange:btn.tag];
+    } NoAC:nil ViewController:self];
+}
+-(void)tool_deleteImgChange:(NSInteger )index{
+    [self.xxx_imgUrlAry removeObjectAtIndex:index];
+    [self.xxx_selectImgAry removeObjectAtIndex:index];
+    for (int i = 0; i<self.xxx_upLoadImgAry.count; i++) {
+        GoodWritUpImgV * imgV =  self.xxx_upLoadImgAry[i];
+        imgV.hidden = NO;
+        if(self.xxx_selectImgAry.count > i){
+            imgV.image = self.xxx_selectImgAry[i];
+            imgV.isCanTap = NO;
+        }else if (self.xxx_selectImgAry.count == i){
+            imgV.image = [UIImage imageNamed:@"goods_wirte_upload"];
+            imgV.isCanTap = YES;
+        }else{
+            imgV.hidden = YES;
+        }
+    }
+}
+//点击添加图片
+-(void)handle_TapUpImgLoad:(UITapGestureRecognizer *)tap{
+    GoodWritUpImgV * imgV =(GoodWritUpImgV *_Nullable )tap.view;
+    if(imgV.isCanTap){//调用相片
+        self.xxx_tapImgIndex = imgV.tag;
+        [self tool_presentAlbumViewControllerWith:imgV.tag];
+    }
+}
+
+#pragma mark - **************** 选择照片上传 ****************
+-(void)tool_presentAlbumViewControllerWith:(NSInteger )index{
+    QMUIAlbumViewController *albumViewController = [[QMUIAlbumViewController alloc] init];
+    albumViewController.albumViewControllerDelegate = self;
+    albumViewController.contentType = QMUIAlbumContentTypeOnlyPhoto;
+    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:albumViewController];
+    // 获取最近发送图片时使用过的相簿,如果有则直接进入该相簿
+    [albumViewController pickLastAlbumGroupDirectlyIfCan];
+    [self presentViewController:navigationController animated:YES completion:NULL];
+}
+
+#pragma mark - **************** QMUIAlbumViewControllerDelegate ****************
+- (QMUIImagePickerViewController *)imagePickerViewControllerForAlbumViewController:(QMUIAlbumViewController *)albumViewController {
+    QMUIImagePickerViewController *imagePickerViewController = [[QMUIImagePickerViewController alloc] init];
+    imagePickerViewController.imagePickerViewControllerDelegate = self;
+    imagePickerViewController.maximumSelectImageCount = 3;
+    imagePickerViewController.view.tag = albumViewController.view.tag;
+    imagePickerViewController.allowsMultipleSelection = NO;
+    return imagePickerViewController;
+}
+#pragma mark - **************** QMUIImagePickerViewControllerDelegate ****************
+- (void)imagePickerViewController:(QMUIImagePickerViewController *)imagePickerViewController didFinishPickingImageWithImagesAssetArray:(NSMutableArray<QMUIAsset *> *)imagesAssetArray {
+    // 储存最近选择了图片的相册,方便下次直接进入该相册
+    [QMUIImagePickerHelper updateLastestAlbumWithAssetsGroup:imagePickerViewController.assetsGroup ablumContentType:kAlbumContentType userIdentify:nil];
+}
+- (QMUIImagePickerPreviewViewController *)imagePickerPreviewViewControllerForImagePickerViewController:(QMUIImagePickerViewController *)imagePickerViewController {
+    QDSingleImagePickerPreviewViewController *imagePickerPreviewViewController = [[QDSingleImagePickerPreviewViewController alloc] init];
+    imagePickerPreviewViewController.delegate = self;
+    imagePickerPreviewViewController.assetsGroup = imagePickerViewController.assetsGroup;
+    imagePickerPreviewViewController.view.tag = imagePickerViewController.view.tag;
+    return imagePickerPreviewViewController;
+}
+#pragma mark - <QDSingleImagePickerPreviewViewControllerDelegate>
+
+- (void)imagePickerPreviewViewController:(QDSingleImagePickerPreviewViewController *)imagePickerPreviewViewController didSelectImageWithImagesAsset:(QMUIAsset *)imageAsset {
+    // 储存最近选择了图片的相册,方便下次直接进入该相册
+    [QMUIImagePickerHelper updateLastestAlbumWithAssetsGroup:imagePickerPreviewViewController.assetsGroup ablumContentType:kAlbumContentType userIdentify:nil];
+    // 显示 loading
+    [MBProgressHUD showHUDAddedTo:self.view animated:YES];
+    [imageAsset requestImageData:^(NSData *imageData, NSDictionary<NSString *,id> *info, BOOL isGif, BOOL isHEIC) {
+        UIImage *targetImage = nil;
+        if (isGif) {
+            targetImage = [UIImage qmui_animatedImageWithData:imageData];
+        } else {
+            targetImage = [UIImage imageWithData:imageData];
+//            if (isHEIC) {
+//                // iOS 11 中新增 HEIF/HEVC 格式的资源,直接发送新格式的照片到不支持新格式的设备,照片可能会无法识别,可以先转换为通用的 JPEG 格式再进行使用。
+//                // 详细请浏览:https://github.com/Tencent/QMUI_iOS/issues/224
+//                targetImage = [UIImage imageWithData:UIImageJPEGRepresentation(targetImage, 1)];
+//            }
+        }
+        [self performSelector:@selector(tool_setAvatarWithAvatarImage:) withObject:targetImage afterDelay:1.8];
+    }];
+}
+///执行相关的网络请求
+-(void)tool_setAvatarWithAvatarImage:(UIImage *)avatarImage{
+    [MBProgressHUD hideHUDForView:self.view animated:YES];
+    if(self.xxx_tapImgIndex<2){
+        GoodWritUpImgV *tempImgV = self.xxx_upLoadImgAry[self.xxx_tapImgIndex+1];
+        tempImgV.hidden = NO;
+    }
+    GoodWritUpImgV *upImgV = self.xxx_upLoadImgAry[self.xxx_tapImgIndex];
+    upImgV.image = avatarImage;
+    upImgV.isCanTap = NO;
+    [self.xxx_selectImgAry addObject:avatarImage];
+    [self reqNet_upload:avatarImage];
+}
+#pragma mark - **************** reqNet ****************
+-(void)reqNet_upload:(UIImage *)img{
+    NSData *imageData = UIImageJPEGRepresentation(img, 0.6);
+    NSString *dataStr = [imageData base64EncodedStringWithOptions:0];
+    NSMutableDictionary *params = [NSMutableDictionary dictionary];
+    [params setObject:dataStr forKey:@"image_video[]"];
+    [MBProgressHUD showHUDAddedTo:self.view animated:YES];
+    NSString *reqUrl = RequestAllUrl(Reivews_rewriteProductAddImg);
+    [PPNetworkHelper uploadImagesWithURL:reqUrl parameters:@{} name:@"image_video[]" images:@[img] fileNames:nil imageScale:0.6 imageType:nil progress:^(NSProgress *progress) {
+        
+    } success:^(id responseObject) {
+        [MBProgressHUD hideHUDForView:self.view animated:YES];
+        if(RequestSuccess){
+            [self.view makeToast:@"Sucess" duration:2 position:CSToastPositionCenter];
+            NSDictionary *dataDic = responseObject[@"data"];
+            [self.xxx_imgUrlAry addObject:dataDic[@"image_video"]];
+        }else{
+            [self.view makeToast:RequestMsg duration:2 position:CSToastPositionCenter];
+        }
+        
+    } failure:^(NSError *error) {
+        [MBProgressHUD hideHUDForView:self.view animated:YES];
+        [self.view makeToast:ReqNetWorkFaild duration:2 position:CSToastPositionCenter];
+    }];
+}
+
+-(void)handle_postCommentEvent:(UIButton *)btn{
+    if(self.writeTextV.text.length == 0 || self.orderlengthTF.text.length == 0 || self.buyernameTF.text.length == 0){
+        [self.view makeToast:@"Please complete the score first" duration:2 position:CSToastPositionCenter];
+        return;
+    }
+    NSMutableString *imageStr= [[NSMutableString alloc]initWithString:@""];
+    for (int i=0; i<self.xxx_imgUrlAry.count; i++) {
+        NSString * imgUrl = self.xxx_imgUrlAry[i];
+        [imageStr appendString:imgUrl];
+    }
+    NSMutableDictionary *params = [NSMutableDictionary dictionary];
+    
+    params[@"id"] = MM_str(self.goodsM.Id) ;
+    params[@"nickname"] = MM_str(self.buyernameTF.text) ;
+    params[@"title"] = MM_str(self.orderlengthTF.text) ;
+    params[@"detail"] = MM_str(self.writeTextV.text) ;
+    params[@"verified_purchase"] = @"0" ;
+    params[@"image_video"] = imageStr;
+    for (int i = 0; i<self.starValueAry.count; i++) {
+        NSString *str = self.starValueAry[i];
+        if([str integerValue] == 0){
+            [self.view makeToast:@"Please complete the score first" duration:2 position:CSToastPositionCenter];
+            return;
+        }
+        NSString *ratingStr = [NSString stringWithFormat:@"%ld",[str integerValue] + i*5];
+        [params setObject:ratingStr forKey:[NSString stringWithFormat:@"ratings[%d]",i+1]];
+    }
+    [self.VM ry_formDataRequestPostApi:Reviews_rewriteProductAddReview param:params];
+}
+- (void)ry_respnsData:(nullable id)data
+             parseAry:(nullable NSMutableArray *)arry
+               sucess:(BOOL)sucessOrFail
+                 mark:(nonnull NSString *)mark {
+    [MBProgressHUD hideHUDForView:self.view animated:YES];
+    if([mark isEqualToString:Reivews_rewriteProductAddImg]){
+        if(sucessOrFail){
+            [self.view makeToast:@"Sucess" duration:2 position:CSToastPositionCenter];
+            [self.xxx_imgUrlAry addObject:(NSDictionary *)data[@"image_video"]];
+            
+        }else{
+            [self.view makeToast:(NSString *)data duration:2 position:CSToastPositionCenter];
+        }
+    }else if ([mark isEqualToString:Reviews_rewriteProductAddReview]){
+        if(sucessOrFail){
+            @weakify(self)
+            [self.view makeToast:@"Your review has been accepted for moderation" duration:2 position:CSToastPositionCenter title:nil image:nil style:nil completion:^(BOOL didTap) {
+                @strongify(self)
+                NSArray *tmpVcAry = self.navigationController.viewControllers;
+                for(UIViewController *vc in tmpVcAry){
+                    if([vc isKindOfClass:[AS_GoodsDetailsC class]]){
+                        [self.navigationController popToViewController:vc animated:YES];
+                        return;
+                    }
+                }
+            }];
+        }else{
+            [self.view makeToast:(NSString *)data duration:2 position:CSToastPositionCenter];
+        }
+    }
+}
+
+#pragma mark - **************** lazy ****************
+-(TT_CustonTF *)buyernameTF{
+    if(!_buyernameTF){
+        _buyernameTF = [TT_ControlTool FTT_ControlToolUITextFieldFrame:CGRectMake(10, 0, KScreenWidth-20, 45)
+                                                             PlaceHolder:@"* BUYER NAME"
+                                                             andLifImage:nil
+                                                           AndRightImage:nil LiftImageFrame:CGRectZero
+                                                         RightImageFrame:CGRectZero
+                                                                  AndTag:0
+                                                         AndKeyboardType:UIKeyboardTypeDefault
+                                                         clearButtonMode:UITextFieldViewModeAlways
+                                                        AndReturnKeyType:UIReturnKeyDone
+                                                           masksToBounds:YES
+                                                            conrenRadius:4
+                                                             BorderColor:[UIColor colorWithHexString:@"#000000"]
+                                                             BorderWidth:1];
+        _buyernameTF.font = [UIFont fontWithName:Rob_Regular size:14];
+        _buyernameTF.backgroundColor = [UIColor colorWithHexString:@"#FFFFFF"];
+    }
+    return _buyernameTF;
+}
+
+-(TT_CustonTF *)orderlengthTF{
+    if(!_orderlengthTF){
+        _orderlengthTF = [TT_ControlTool FTT_ControlToolUITextFieldFrame:CGRectMake(10, 0, KScreenWidth-20, 45)
+                                                             PlaceHolder:@"* ORDER LENGTH"
+                                                             andLifImage:nil
+                                                           AndRightImage:nil LiftImageFrame:CGRectZero
+                                                         RightImageFrame:CGRectZero
+                                                                  AndTag:0
+                                                         AndKeyboardType:UIKeyboardTypeDefault
+                                                         clearButtonMode:UITextFieldViewModeAlways
+                                                        AndReturnKeyType:UIReturnKeyDone
+                                                           masksToBounds:YES
+                                                            conrenRadius:4
+                                                             BorderColor:[UIColor colorWithHexString:@"#000000"]
+                                                             BorderWidth:1];
+        _orderlengthTF.font = [UIFont fontWithName:Rob_Regular size:14];
+        _orderlengthTF.backgroundColor = [UIColor colorWithHexString:@"#FFFFFF"];
+    }
+    return _orderlengthTF;
+}
+
+
+
+
+-(QMUITextView *)writeTextV{
+    if(!_writeTextV){
+        _writeTextV = [[QMUITextView alloc]initWithFrame:CGRectMake(10, 0, KScreenWidth-20, 110)];
+        _writeTextV.textContainerInset = UIEdgeInsetsMake(10, 7, 10, 7);
+        _writeTextV.placeholder = @" * WRITE A REVIEW";
+        _writeTextV.layer.cornerRadius = 4;
+        _writeTextV.layer.borderColor = [UIColor colorWithHexString:@"#0B0B0B"].CGColor;
+        _writeTextV.layer.borderWidth = 1;
+        _writeTextV.clipsToBounds = YES;
+        _writeTextV.font = [UIFont fontWithName:Rob_Regular size:14];
+        _writeTextV.placeholderColor = [UIColor colorWithHexString:@"#999999"];
+    }
+    return _writeTextV;
+}
+
+-(UIButton *)bootomBtn{
+    if(!_bootomBtn){
+        IPhoneXHeigh
+        _bootomBtn = [TT_ControlTool FTT_ControlToolUIButtonFrame:CGRectMake(20, KScreenHeight-45-securityBottom_H, KScreenWidth-40, 45)
+                                                           taeget:self
+                                                              sel:@selector(handle_postCommentEvent:)
+                                                              tag:0
+                                                         AntTitle:@"POST COMMENT"
+                                                        titleFont:16
+                                                       titleColor:[UIColor colorWithHexString:@"#FFFFFF"]
+                                                         andImage:nil
+                                                     AndBackColor:[UIColor colorWithHexString:@"#000000"]
+                                          adjustsFontSizesTowidth:NO
+                                                    masksToBounds:YES
+                                                     conrenRadius:4 BorderColor:nil BorderWidth:0 ContentHorizontalAligment:0];
+    }
+    return _bootomBtn;
+}
+
+
+- (NSMutableArray *)xxx_imgUrlAry {
+    if (!_xxx_imgUrlAry) {
+        _xxx_imgUrlAry = [[NSMutableArray alloc] init];
+    }
+    return _xxx_imgUrlAry;
+}
+
+
+- (NSMutableArray *)xxx_selectImgAry {
+    if (!_xxx_selectImgAry) {
+        _xxx_selectImgAry = [[NSMutableArray alloc] init];
+    }
+    return _xxx_selectImgAry;
+}
+
+
+/**
+ 上传图片
+ [formData appendPartWithFileData:uploadImageData name:@"content_pic" fileName:fileName mimeType:ECGBJKeyJPEG];
+
+
+ @param URLString URL
+ @param content 弹框的内容
+ @param parameters 参数体
+ @param uploadDatas 上传图片NSData
+ @param completeSuccess 成功回调
+ @param completeFailure 失败回调
+ 
+ [manager POST:URLString parameters:parameters constructingBodyWithBlock:^(id< AFMultipartFormData >  _Nonnull formData) {
+
+     NSDateFormatter *formatter=[[NSDateFormatter alloc]init];
+     formatter.dateFormat=@"yyyyMMddHHmmss";
+     NSString *str=[formatter stringFromDate:[NSDate date]];
+     NSString *fileName=[NSString stringWithFormat:@"%@.jpg",str];
+
+    [formData appendPartWithFileData:uploadImageData name:@"content_pic" fileName:fileName mimeType:ECGBJKeyJPEG];
+
+ } progress:^(NSProgress * _Nonnull uploadProgress) {
+    
+ } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
+
+  // 转换responseObject对象
+     NSDictionary *dict = nil;
+     if ([responseObject isKindOfClass:[NSDictionary class]]) {
+         dict = (NSDictionary *)responseObject;
+     } else {
+         dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
+     }
+
+     // 成功后弹框处理,回调出去
+     [weakSelf notDismissedWith:dict responseObject:responseObject complete:^(NSDictionary *respinseDic, id responseObject) {
+         completeSuccess(respinseDic,responseObject);
+     } failedComplete:^{
+         completeFailure();
+     }];
+ } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
+// 网络问题,弹框处理
+     [weakSelf notNetconnetNotDismissComplete:^{
+         completeFailure();
+     }];
+ }]
+ */
+
+
+@end

+ 18 - 0
Asteria/Fuction/Goods/Revies/V/GoodWritUpImgV.h

@@ -0,0 +1,18 @@
+//
+//  GoodWritUpImgV.h
+//  westkissMob
+//
+//  Created by 王猛 on 2022/10/6.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface GoodWritUpImgV : UIImageView
+@property (nonatomic, strong)UIButton  *closeBtn;
+@property (nonatomic, assign)BOOL  isCanTap;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 55 - 0
Asteria/Fuction/Goods/Revies/V/GoodWritUpImgV.m

@@ -0,0 +1,55 @@
+//
+//  GoodWritUpImgV.m
+//  westkissMob
+//
+//  Created by 王猛 on 2022/10/6.
+//
+
+#import "GoodWritUpImgV.h"
+
+
+@implementation GoodWritUpImgV
+
+/*
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect {
+    // Drawing code
+}
+*/
+
+- (instancetype)initWithFrame:(CGRect)frame{
+    self = [super initWithFrame:frame];
+    if(self){
+        self.layer.cornerRadius = 4;
+        self.userInteractionEnabled = YES;
+        [self addSubview:self.closeBtn];
+        self.closeBtn.frame = CGRectMake(frame.size.width-22,0 , 22, 22);
+    }
+    return self;
+}
+
+-(UIButton *)closeBtn{
+    if(!_closeBtn){
+        _closeBtn = [UIButton buttonWithType:UIButtonTypeCustom];
+        _closeBtn.backgroundColor = [UIColor colorWithHexString:@"#0B0B0B" Alpha:0.6];
+        [_closeBtn setTitle:@"X" forState:UIControlStateNormal];
+        _closeBtn.titleLabel.font = [UIFont systemFontOfSize:16];
+        [_closeBtn setTitleColor:[UIColor colorWithHexString:@"#FFFFFF"] forState:UIControlStateNormal];
+    }
+    return _closeBtn;
+}
+
+
+
+
+- (void)setIsCanTap:(BOOL)isCanTap{
+    _isCanTap = isCanTap;
+    if(isCanTap){
+        self.closeBtn.hidden = YES;
+    }else{
+        self.closeBtn.hidden = NO;
+    }
+}
+
+@end

+ 1 - 0
Asteria/Fuction/Goods/Revies/V/GoodsReviewsListTableV.m

@@ -16,6 +16,7 @@
     @weakify(cell)
     cell.currencyparameterClose = ^(NSInteger type, id Data) {
         @strongify(cell) //图片选择器展示
+        
     };
 
     return cell;

+ 1 - 1
Asteria/Fuction/Goods/Revies/V/ReviewsTableHearV.h

@@ -10,7 +10,7 @@
 NS_ASSUME_NONNULL_BEGIN
 
 @interface ReviewsTableHearV : TT_BaseV
-
++(CGFloat)xxx_viewHeight;
 @end
 
 NS_ASSUME_NONNULL_END

+ 80 - 21
Asteria/Fuction/Goods/Revies/V/ReviewsTableHearV.m

@@ -6,59 +6,112 @@
 //
 
 #import "ReviewsTableHearV.h"
+#import "HCSStarRatingView.h"
+#import "GoodsInformationM.h"
 @interface ReviewsTableHearV ()
+@property (nonatomic, strong) UILabel *customLab;
 @property (nonatomic, strong) QMUILabel *reviewsLab;
-@property (nonatomic, strong) UIView *rateStarV;
+@property (nonatomic, strong) HCSStarRatingView *reviews_startV;
 @property (nonatomic, strong) QMUIButton *writeBtn;
 @property (nonatomic, strong) QMUILabel *tipsLab;
 
 @end
-
 @implementation ReviewsTableHearV
++(CGFloat)xxx_viewHeight{
+    return  10+86+10+34+40;
+}
 
 - (void)tt_setupViews{
     UIView *topBgV = [[UIView alloc]init];
     topBgV.backgroundColor = [UIColor colorWithHexString:@"#F8F8F8"];
+    topBgV.layer.cornerRadius = 8;
+    topBgV.clipsToBounds = YES;
     [self addSubview:topBgV];
+    [topBgV addSubview:self.customLab];
+    [topBgV addSubview:self.reviewsLab];
+    [topBgV addSubview:self.reviews_startV];
+    
+ 
     [topBgV mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.mas_equalTo(10);
         make.right.mas_equalTo(-10);
         make.top.mas_equalTo(10);
         make.height.mas_equalTo(86);
     }];
+    [self.customLab mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.mas_equalTo(10);
+        make.top.mas_equalTo(20);
+        make.height.mas_equalTo(15);
+    }];
+    [self.reviewsLab mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.equalTo(self.customLab.mas_right);
+        make.top.mas_equalTo(20);
+        make.height.mas_equalTo(15);
+    }];
+    [self.reviews_startV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.mas_equalTo(10);
+        make.top.equalTo(self.reviewsLab.mas_bottom).offset(10);
+        make.height.mas_equalTo(20);
+        make.width.mas_equalTo(120);
+    }];
+     
+    [self addSubview:self.writeBtn];
+    [self addSubview:self.tipsLab];
+    [self.writeBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(topBgV.mas_bottom).offset(10);
+        make.left.mas_equalTo(10);
+        make.height.mas_equalTo(34);
+        make.width.mas_equalTo(105);
+    }];
+    [self.tipsLab mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.writeBtn.mas_bottom);
+        make.left.mas_equalTo(20);
+        make.right.mas_equalTo(-20);
+        //40;
+    }];
+}
 
-    [topBgV addSubview:self.reviewsLab];
-    [topBgV addSubview:self.rateStarV];
-    
-
-    
-
-
-    
+- (void)tt_confignewdata:(id)data{
+    GoodsInformationM *model = (GoodsInformationM *)data;
+    self.reviewsLab.text = [NSString stringWithFormat:@"(%@ Reviews)",model.review_nums];
 }
 #pragma mark - **************** handle ****************
 -(void)handle_writeEvent:(UIButton *)btn{
     [self generaltriggermethodType:0 data:@""];
 }
 
-
+- (UILabel *)customLab {
+    if (!_customLab) {
+        _customLab = [[UILabel alloc] initWithFrame:CGRectZero];
+        _customLab.textAlignment = NSTextAlignmentLeft;
+        _customLab.textColor = [UIColor blackColor];
+        _customLab.font = [UIFont fontWithName:Rob_Bold size:12];
+        _customLab.text = @"CUSTOMER REVIEWS";
+    }
+    return  _customLab;
+}
 - (QMUILabel *)reviewsLab {
     if (!_reviewsLab) {
         _reviewsLab = [[QMUILabel alloc] initWithFrame:CGRectZero];
         _reviewsLab.textAlignment = NSTextAlignmentLeft;
-        _reviewsLab.textColor = [UIColor colorWithHexString:@"#000000"];
-        _reviewsLab.font = [UIFont fontWithName:Rob_Bold size:12];
-        _reviewsLab.text = @"CUSTOMER REVIEWS";
+        _reviewsLab.textColor = [UIColor colorWithHexString:@"#666666"];
+        _reviewsLab.font = [UIFont fontWithName:Rob_Regular size:12];
     }
     return  _reviewsLab;
 }
 
 
-- (UIView *)rateStarV {
-    if (!_rateStarV) {
-        _rateStarV = [[UIView alloc] init];
+-(HCSStarRatingView *)reviews_startV{
+    if(!_reviews_startV){
+        _reviews_startV = [[HCSStarRatingView alloc]initWithFrame:CGRectMake(10, 20,100+20, 30)];
+        _reviews_startV.value =5;
+        _reviews_startV.userInteractionEnabled = NO;
+        _reviews_startV.filledStarImage = IMAGE(@"reviews_full_star");
+        _reviews_startV.emptyStarImage = IMAGE(@"reviews_empty_star");
+        _reviews_startV.maximumValue = 5;
+        _reviews_startV.backgroundColor = [UIColor clearColor];
     }
-    return _rateStarV;
+    return _reviews_startV;
 }
 
 - (QMUIButton *)writeBtn {
@@ -69,6 +122,9 @@
         [_writeBtn setAttributedTitle:atr forState:UIControlStateNormal];
         [_writeBtn addTarget:self action:@selector(handle_writeEvent:) forControlEvents:UIControlEventTouchUpInside];
         _writeBtn.titleLabel.font = [UIFont fontWithName:Rob_Bold size:12];
+        _writeBtn.titleLabel.textColor = [UIColor colorWithHexString:@"#000000"];
+        _writeBtn.frame = CGRectMake(10, 0, 105, 40);
+
      }
     return _writeBtn;
 }
@@ -77,11 +133,14 @@
     if (!_tipsLab) {
         _tipsLab = [[QMUILabel alloc] initWithFrame:CGRectZero];
         _tipsLab.textAlignment = NSTextAlignmentLeft;
-        _tipsLab.textColor = [UIColor blackColor];
-        _tipsLab.font = [UIFont systemFontOfSize:18];
-        _tipsLab.text = @"Only Registered Users Can Write Reviews.please,log In Or Register";
+        _tipsLab.textColor = [UIColor colorWithHexString:@"#666666"];
+        _tipsLab.font = [UIFont fontWithName:Rob_Regular size:12];
+        _tipsLab.text = @"Only Registered Users Can Write Reviews.Please,Log In Or Register";
+        _tipsLab.numberOfLines =2;
     }
     return  _tipsLab;
 }
 
+
+
 @end

+ 24 - 3
Asteria/Fuction/Goods/Revies/cell/GoodsReviewsCell.m

@@ -8,16 +8,19 @@
 #import "GoodsReviewsCell.h"
 #import "GoodsReviewsImgV.h"
 #import "ASGoodsDetailsVM.h"
+#import "HCSStarRatingView.h"
 
 @interface GoodsReviewsCell ()
 @property (nonatomic, strong) UIImageView *headImg;
 @property (nonatomic, strong) UILabel *nicknameLab;
 @property (nonatomic, strong) UILabel *creatLab;
 @property (nonatomic, strong) UIButton *zanBtn;
+@property (nonatomic, strong) HCSStarRatingView *reviews_startV;
 @property (nonatomic, strong) UILabel *sizeTitleLab;
 @property (nonatomic, strong) UILabel *detailLab;
 @property(nonatomic, strong) GoodsReviewsImgV *reviewsImgV;
 
+
 @end
 @implementation GoodsReviewsCell
 
@@ -40,6 +43,7 @@
     self.detailLab.text = model.detail;
     ///wm_todo 点赞本地记录的表
 //    self.zanBtn.selected = [model.thumbsUp integerValue];
+    self.reviews_startV.value =[model.review_value floatValue] ;
     [self.zanBtn setTitle:model.zan forState:UIControlStateNormal];
     if(!isValid(model.image_video) || model.image_video.count == 0 ){
         [self.reviewsImgV mas_updateConstraints:^(MASConstraintMaker *make) {
@@ -58,6 +62,7 @@
     [self.contentView addSubview:self.nicknameLab];
     [self.contentView addSubview:self.creatLab];
     [self.contentView addSubview:self.zanBtn];
+    [self.contentView addSubview:self.reviews_startV];
     [self.contentView addSubview:self.sizeTitleLab];
     [self.contentView addSubview:self.detailLab];
     [self.contentView addSubview:self.reviewsImgV];
@@ -103,11 +108,16 @@
         make.height.mas_equalTo(20);
         make.width.mas_equalTo(60);
     }];
+    [self.reviews_startV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.mas_equalTo(20);
+        make.height.mas_equalTo(15);
+        make.width.mas_equalTo(95);
+        make.top.equalTo(self.headImg.mas_bottom).offset(10);
+    }];
     [self.sizeTitleLab mas_makeConstraints:^(MASConstraintMaker *make) {
         make.left.mas_equalTo(20);
         make.right.mas_equalTo(-20);
-        make.top.equalTo(self.headImg.mas_bottom).offset(20);
-
+        make.top.equalTo(self.reviews_startV.mas_bottom).offset(10);
     }];
     [self.detailLab mas_makeConstraints:^(MASConstraintMaker *make) {
         make.top.equalTo(self.sizeTitleLab.mas_bottom).offset(20);
@@ -225,5 +235,16 @@
     }
     return _reviewsImgV;
 }
-
+-(HCSStarRatingView *)reviews_startV{
+    if(!_reviews_startV){
+        _reviews_startV = [[HCSStarRatingView alloc]initWithFrame:CGRectMake(10, 20,95, 15)];
+        _reviews_startV.value =5;
+        _reviews_startV.userInteractionEnabled = NO;
+        _reviews_startV.filledStarImage = IMAGE(@"reviews_full_star");
+        _reviews_startV.emptyStarImage = IMAGE(@"reviews_empty_star");
+        _reviews_startV.maximumValue = 5;
+        _reviews_startV.backgroundColor = [UIColor clearColor];
+    }
+    return _reviews_startV;
+}
 @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 - 3
Asteria/Fuction/Goods/V/GoodsDetailSrcView.m

@@ -146,7 +146,6 @@
     self.infoModel = model;
     [self.goodsBanner tt_confignewdata:self.infoModel];
     self.titleLab.text =MM_str(model.name);
-    //wm_todo  soldLab\ reviewsLab\ coupon 和 size
     self.soldLab.text = [NSString stringWithFormat:@"SOLD: %@",model.sold] ;
     NSMutableAttributedString *reviewsStr = [[NSMutableAttributedString alloc]
                                              initWithString:[NSString stringWithFormat:@"REVIEWS:%@",model.review_nums]];
@@ -257,7 +256,7 @@
     }
 }
 -(void)handle_couponEvent:(UIButton *)btn{
-    //wm_todo
+    //wm_todo  优惠券的展开和合并
     btn.selected = !btn.selected;
 }
 -(void)tap_reviewsClick{
@@ -310,7 +309,6 @@
         _reviewsLab.userInteractionEnabled = YES;
         UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap_reviewsClick)];
         [_reviewsLab addGestureRecognizer:tap];
-
         //    reviewsStr.underlineStyle = NSUnderlineStyleSingle;
     }
     return  _reviewsLab;

+ 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];
     

+ 17 - 4
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
@@ -56,8 +62,8 @@
     [MBProgressHUD showHUDAddedTo:self.view animated:YES];
     [self.VM ry_requestGetApi:Goods_productGetProductsById param:params];
 }
--(void)ry_respnsData:(id)data
-            parseAry:(NSMutableArray *)arry
+-(void)ry_respnsData:(nullable id)data
+            parseAry:(nullable NSMutableArray *)arry
               sucess:(BOOL)sucessOrFail
                 mark:(NSString *)mark{
     [MBProgressHUD hideHUDForView:self.view animated:YES];
@@ -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


+ 67 - 31
Asteria/Fuction/Goods/Revies/AS_GoodsReviewsListC.m

@@ -9,8 +9,11 @@
 #import "ASGoodsDetailsVM.h"
 #import "RadioButton.h"
 #import "GoodsReviewsListTableV.h"
+#import "GoodsReviewsWriteC.h"
+#import "ReviewsTableHearV.h"
 
-@interface AS_GoodsReviewsListC ()<RY_baseVMprotocol>
+
+@interface AS_GoodsReviewsListC ()<RY_baseVMprotocol,TT_BaseTableVDelegate>
 @property (nonatomic, strong) ASGoodsDetailsVM *VM;
 @property (nonatomic, strong) UIView *topBgV;
 @property (nonatomic, strong) UIImageView *topImgV;
@@ -19,12 +22,13 @@
 @property (nonatomic, strong) QMUILabel *soldLab;
 
 @property (nonatomic, strong) NSMutableArray *radioBtnAry;
-@property (nonatomic, strong) UIView *tableHeadV;
+@property (nonatomic, strong) ReviewsTableHearV *tableHeadV;
 
 @property (nonatomic, strong) QMUILabel *reviewsLab;
 
-
 @property (nonatomic, strong) GoodsReviewsListTableV *TableV;
+@property (nonatomic, strong) NSMutableArray *sortreTypeAry;
+@property (nonatomic, strong) NSString *sortreType;
 
 
 @end
@@ -34,22 +38,28 @@
 - (void)viewDidLoad {
     [super viewDidLoad];
     self.title = [NSString stringWithFormat:@"Reviews (%@)",self.goodsM.review_nums];
-    [self reqNet_Goods_productGetProductsReview];
+    self.TableV.Page = 1;
+    self.sortreType = [self.sortreTypeAry firstObject];
+    [MBProgressHUD showHUDAddedTo:self.view animated:YES];
+    [self reqNet_Goods_productGetProductsReview:self.sortreType];
+    [self ucm_subVeiwsTapBlock];
 }
 
 - (void)initSubviews {
     [super initSubviews];
     [self.view addSubview:self.topBgV];
-    NSArray *segAry = @[@"All",@"Newest",@"Pictures"];
-    for (int i=0; i<segAry.count; i++) {
+    self.sortreTypeAry = [NSMutableArray arrayWithArray:@[@"All",@"Newest",@"Pictures"]];
+    self.sortreType = [self.sortreTypeAry firstObject];
+    for (int i=0; i<self.sortreTypeAry.count; i++) {
         RadioButton *radBtn= [[RadioButton alloc]init];
-        radBtn.backgroundColor = [UIColor colorWithHexString:@"#FFFFFF"];
+        radBtn.backgroundColor = [UIColor colorWithHexString:@"#F8F8F8"];
         radBtn.titleLabel.font = [UIFont fontWithName:Rob_Regular size:14];
         radBtn.layer.cornerRadius = 4;
         radBtn.clipsToBounds = YES;
         radBtn.tag = i;
-        [radBtn setTitle:segAry[i] forState:UIControlStateNormal];
+        [radBtn setTitle:self.sortreTypeAry[i] forState:UIControlStateNormal];
         [radBtn setTitleColor:[UIColor colorWithHexString:@"#000000"] forState:UIControlStateNormal];
+        [radBtn setTitleColor:[UIColor colorWithHexString:@"#FFFFFF"] forState:UIControlStateSelected];
         [radBtn addTarget:self action:@selector(handle_onRadioButtonValueChanged:) forControlEvents:UIControlEventValueChanged];
         [self.view addSubview:radBtn];
         CGFloat btnWidth =  (KScreenWidth-40)/3;
@@ -58,7 +68,8 @@
     }
     RadioButton *firstBtn = self.radioBtnAry[0];
     [firstBtn setGroupButtons:self.radioBtnAry];
-    firstBtn.selected = YES;
+    [firstBtn setSelected:YES];
+    firstBtn.backgroundColor = [UIColor colorWithHexString:@"#113632"];
     
     [self setupTableV:[GoodsReviewsListTableV class] Frame:CGRectMake(0, CGRectGetMaxY(firstBtn.frame)+10, KScreenWidth, KScreenHeight- CGRectGetMaxY(firstBtn.frame)-10)];
     self.TableV.backgroundColor = [UIColor clearColor];
@@ -66,36 +77,52 @@
     self.TableV.Page = 1;
     self.TableV.is_refreshHeader = YES;
     self.TableV.is_refreshfoot = YES;
-}
-- (void)viewDidLayoutSubviews {
-    [super viewDidLayoutSubviews];
     
 }
+- (void)ucm_subVeiwsTapBlock{
+    @weakify(self)
+    self.tableHeadV.ViewtapClose = ^(NSInteger num, id  _Nonnull data) {
+        @strongify(self)
+        if(num == 0){
+            GoodsReviewsWriteC *vc = [[GoodsReviewsWriteC alloc]init];
+            vc.goodsM = self.goodsM;
+            vc.topBgV = self.topBgV;
+            vc.nav_title = [NSString stringWithFormat:@"REVIEWS (%@)",self.goodsM.review_nums];
+            [self.navigationController pushViewController:vc animated:YES];
+        }
+    };
+}
 
 - (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];
+    [self.tableHeadV tt_confignewdata:self.goodsM];
 }
 
 - (void)ucm_bindvmmodel{
     self.VM = [[ASGoodsDetailsVM alloc]initDelegate:self];
 }
-#pragma mark - **************** reqNet ****************
 
--(void)reqNet_Goods_productGetProductsReview{
+#pragma mark - **************** TT_BaseTableVDelegate ****************
+- (void)refreshDataType:(NSInteger)type{
+    [self reqNet_Goods_productGetProductsReview:self.sortreType];
+}
+
+
+#pragma mark - **************** reqNet ****************
+-(void)reqNet_Goods_productGetProductsReview:(NSString *)sortreType{
     NSMutableDictionary *params = [[NSMutableDictionary alloc]init];
     [params setObject:self.goodsM.Id forKey:@"pid"];
     [params setObject:@1 forKey:@"img"];
-    [params setObject:@"All" forKey:@"sortreview"];
-    [params setObject:@1 forKey:@"p"];
+    [params setObject:sortreType forKey:@"sortreview"];
+    [params setObject:@(self.TableV.Page) forKey:@"p"];
     [params setObject:@10 forKey:@"limit"];
-
     [self.VM ry_requestGetApi:Goods_productGetProductsReview param:params];
 }
--(void)ry_respnsData:(id)data
-            parseAry:(NSMutableArray *)arry
+-(void)ry_respnsData:(nullable id)data
+            parseAry:(nullable NSMutableArray *)arry
               sucess:(BOOL)sucessOrFail
                 mark:(NSString *)mark{
     [MBProgressHUD hideHUDForView:self.view animated:YES];
@@ -110,14 +137,21 @@
 #pragma mark - **************** handle ****************
 -(void)handle_onRadioButtonValueChanged:(RadioButton *)btn{
     if (btn.selected) {
-        
+        btn.backgroundColor = [UIColor colorWithHexString:@"#113632"];
+        self.TableV.Page = 1;
+        self.sortreType = self.sortreTypeAry[btn.tag];
+        [MBProgressHUD showHUDAddedTo:self.view animated:YES];
+        [self reqNet_Goods_productGetProductsReview:self.sortreType];
+        [self.TableV setContentOffset:CGPointMake(0, 0) animated:YES];
     }else{
-        
+        btn.backgroundColor = [UIColor colorWithHexString:@"#F8F8F8"];
     }
 }
 
 
 
+
+
 #pragma mark - **************** lazy ****************
 - (UIView *)topBgV {
     if (!_topBgV) {
@@ -179,7 +213,6 @@
 - (QMUILabel *)priceLab {
     if (!_priceLab) {
         _priceLab = [[QMUILabel alloc] initWithFrame:CGRectZero];
-     
     }
     return  _priceLab;
 }
@@ -192,12 +225,10 @@
         _soldLab.textAlignment = NSTextAlignmentRight;
         _soldLab.textColor = [UIColor colorWithHexString:@"#000000"];
         _soldLab.font = [UIFont fontWithName:Rob_Regular size:12];
-        
     }
     return  _soldLab;
 }
 
-
 - (NSMutableArray *)radioBtnAry {
     if (!_radioBtnAry) {
         _radioBtnAry = [[NSMutableArray alloc] init];
@@ -205,13 +236,10 @@
     return _radioBtnAry;
 }
 
-
-
-
-- (UIView *)tableHeadV {
+- (ReviewsTableHearV *)tableHeadV {
     if (!_tableHeadV) {
-        _tableHeadV = [[UIView alloc] initWithFrame:CGRectFlatMake(10, 0, KScreenHeight-20, 86)];
-        _tableHeadV.backgroundColor = [UIColor colorWithHexString:@"#F8F8F8"];
+        _tableHeadV = [[ReviewsTableHearV alloc] initWithFrame:CGRectFlatMake(0, 0, KScreenHeight, [ReviewsTableHearV xxx_viewHeight])];
+        _tableHeadV.backgroundColor = [UIColor colorWithHexString:@"#FFFFFF"];
     }
     return _tableHeadV;
 }
@@ -228,4 +256,12 @@
 }
 
 
+
+- (NSMutableArray *)sortreTypeAry {
+    if (!_sortreTypeAry) {
+        _sortreTypeAry = [[NSMutableArray alloc] init];
+    }
+    return _sortreTypeAry;
+}
+
 @end

+ 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

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

@@ -12,9 +12,23 @@
 #define Goods_productGetProductsById  BaseRequestrUrl(@"rewrite/product/getProductsById")
 #define Goods_productGetProductsReview  BaseRequestrUrl(@"rewrite/product/getProductReview")
 
+///评论点赞
+#define Reviews_rewriteProductAddReviewzan BaseRequestrUrl(@"rewrite/product/addReviewzan")
+///添加评论图片
+#define Reivews_rewriteProductAddImg  BaseRequestrUrl(@"rewrite/product/addImg")
+///添加评论
+#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
 

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

@@ -11,11 +11,74 @@
 - (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]){
         NSMutableArray <GoodsReviewsListM *>*array = [GoodsReviewsListM mj_objectArrayWithKeyValuesArray:data[@"items"]];
         [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];

+ 10 - 0
Asteria/Info.plist

@@ -2,6 +2,16 @@
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
 <dict>
+	<key>ITSAppUsesNonExemptEncryption</key>
+	<false/>
+	<key>PHPhotoLibraryPreventAutomaticLimitedAccessAlert</key>
+	<true/>
+    <key>NSCameraUsageDescription</key>
+    <string>"Asteria"Your consent is required to access the camera.</string>
+    <key>NSPhotoLibraryAddUsageDescription</key>
+    <string>"Asteria"Your consent is required to access the album.</string>
+    <key>NSPhotoLibraryUsageDescription</key>
+    <string>"Asteria"Your consent is required to access the album.</string>
 	<key>NSAppTransportSecurity</key>
 	<dict>
 		<key>NSAllowsArbitraryLoads</key>

+ 3 - 2
Asteria/NetTools/ASNetApis.h

@@ -9,6 +9,7 @@
 #define ASNetApis_h
 
 
+#define RequestAllUrl(baseUrl) ([NSString stringWithFormat:@"https://%@/%@",HostPath,baseUrl])
 
 #define BaseRequestrUrl(url) ([NSString stringWithFormat:@"%@%@",@"rest/V1/",url])
 #define BaseWebUrl(url) ([NSString stringWithFormat:@"%@%@",@"rest/V1/",url])
@@ -17,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

+ 2 - 0
Asteria/NetTools/ASNetTools.h

@@ -21,6 +21,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 /// post请求
 - (void)postWithPath:(NSString *)path param:(NSDictionary *)param success:(void(^)(id))success faild:(void(^)(NSString *code, NSString *msg))faild;
+///formData
+- (void)formData_postWithPath:(NSString *)path param:(NSDictionary *)param success:(void(^)(id))success faild:(void(^)(NSString *code, NSString *msg))faild;
 
 /// get请求
 - (void)getWithPath:(NSString *)path param:(NSDictionary *)param success:(void(^)(id))success faild:(void(^)(NSString *code, NSString *msg))faild;

+ 68 - 0
Asteria/NetTools/ASNetTools.m

@@ -130,6 +130,73 @@
 //    });d
 }
 
+// formData的post请求
+- (void)formData_postWithPath:(NSString *)path param:(NSDictionary *)param success:(void(^)(id))success faild:(void(^)(NSString *code, NSString *msg))faild {
+    BOOL isSSL = true;
+    [self checkToken];
+    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]];
+        
+        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(), ^{
+            NSString *json = [op responseJSON];
+            id temp = [json mj_JSONObject];
+            if ([temp isKindOfClass:[NSDictionary class]]) {
+                NSDictionary *result = (NSDictionary *)temp;
+                NSString *status = [NSString stringWithFormat:@"%@", result[@"status"]];
+                id data = result[@"data"];
+                if ([status isEqualToString:@"1"]) {
+                    success(data);
+                } else {
+                    NSString *msg = result[@"msg"];
+                    faild(status, msg);
+                }
+            }
+            
+        });
+    } onError:^(NSError *error) {
+        dispatch_async(dispatch_get_main_queue(), ^{
+            NSString *json = [op responseJSON];
+            id temp = [json mj_JSONObject];
+            if ([temp isKindOfClass:[NSDictionary class]]) {
+                NSDictionary *result = (NSDictionary *)temp;
+                NSString *status = result[@"status"];
+                NSString *msg = result[@"msg"];
+                if (error.code == 401) {
+                    [DataUtil setLoginToken:@""];
+                    [weakSelf updateEngine];
+                    faild(status, msg);
+                    return;
+                }
+                faild(status, msg);
+                return;
+            }
+            if (error.code == 401) {
+                [DataUtil setLoginToken:@""];
+                [weakSelf updateEngine];
+                faild(@"-1", @"Plase Login");
+                return;
+            }
+            faild([NSString stringWithFormat:@"%ld", error.code], error.localizedDescription);
+        });
+    }];
+    dispatch_async(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0), ^{
+        [self.engine enqueueOperation:op];
+    });
+}
+
 // get 请求
 - (void)getWithPath:(NSString *)path param:(NSDictionary *)param success:(void(^)(id))success faild:(void(^)(NSString *code, NSString *msg))faild {
     BOOL isSSL = true;
@@ -363,4 +430,5 @@
     }];
 }
 
+
 @end

+ 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];

+ 2 - 0
Podfile

@@ -52,6 +52,8 @@ target 'Asteria' do
   pod 'GoogleSignIn'
 
   pod 'GKPhotoBrowser'
+  #评价---星星
+  pod 'HCSStarRatingView', '~> 1.5'
   pod 'WMBase', :path =>"../WMBase"
   
   pod 'MKNetworkKit'

+ 2 - 2
Podfile.lock

@@ -1275,6 +1275,6 @@ SPEC CHECKSUMS:
   YTKNetwork: c16be90b06be003de9e9cd0d3b187cc8eaf35c04
   YYCache: 8105b6638f5e849296c71f331ff83891a4942952
 
-PODFILE CHECKSUM: 5d955d5ce86f96810ca16fd7acd16a89ff2750e0
+PODFILE CHECKSUM: d3d8fd7b62f02ea7dd209af8d43c63bea9057689
 
-COCOAPODS: 1.13.0
+COCOAPODS: 1.12.1

+ 2 - 2
Pods/Manifest.lock

@@ -1275,6 +1275,6 @@ SPEC CHECKSUMS:
   YTKNetwork: c16be90b06be003de9e9cd0d3b187cc8eaf35c04
   YYCache: 8105b6638f5e849296c71f331ff83891a4942952
 
-PODFILE CHECKSUM: 5d955d5ce86f96810ca16fd7acd16a89ff2750e0
+PODFILE CHECKSUM: d3d8fd7b62f02ea7dd209af8d43c63bea9057689
 
-COCOAPODS: 1.13.0
+COCOAPODS: 1.12.1

+ 34 - 16
Pods/Pods.xcodeproj/project.pbxproj

@@ -16058,6 +16058,7 @@
 		618C074DA79BC2087EA92470E43597BC /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.0.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; };
 		619AC83ACEC407CBD867E9EA4DABA568 /* UITabBarItem+PPBadgeView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITabBarItem+PPBadgeView.h"; path = "PPBadgeView/objc/UITabBarItem+PPBadgeView.h"; sourceTree = "<group>"; };
 		619C5221666C62F34537CAD239EBA74E /* status_conversion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = status_conversion.h; path = src/core/lib/transport/status_conversion.h; sourceTree = "<group>"; };
+		61BE8E5331E32BD08CFDA3D266F441BF /* FILE_LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = FILE_LICENSE; sourceTree = "<group>"; };
 		61BF428A7B108A8F87F344E0DCB1C28D /* dbformat.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = dbformat.cc; path = db/dbformat.cc; sourceTree = "<group>"; };
 		61D68EB085A01A0C0A8201BDCFED2E49 /* key_field_in_filter.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = key_field_in_filter.cc; path = Firestore/core/src/core/key_field_in_filter.cc; sourceTree = "<group>"; };
 		61E9987DF3BD962FA0FDDE80BCA84855 /* GIDScopes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GIDScopes.m; path = GoogleSignIn/Sources/GIDScopes.m; sourceTree = "<group>"; };
@@ -16874,7 +16875,6 @@
 		892A95298A098581565A04550A8C175C /* endpoint_pair_event_engine.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = endpoint_pair_event_engine.cc; path = src/core/lib/iomgr/endpoint_pair_event_engine.cc; sourceTree = "<group>"; };
 		8942FCBF524BB13B188DC9013AC3FACC /* aes.c */ = {isa = PBXFileReference; includeInIndex = 1; name = aes.c; path = src/crypto/fipsmodule/aes/aes.c; sourceTree = "<group>"; };
 		89509D5CE35E57B1E683DD27A0E099DC /* stream_lists.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = stream_lists.cc; path = src/core/ext/transport/chttp2/transport/stream_lists.cc; sourceTree = "<group>"; };
-		89654E7766810EB094FBA701096BD2F6 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = "<group>"; };
 		897640D99526A47B8829461641BD6986 /* ssl_credentials.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ssl_credentials.h; path = src/core/lib/security/credentials/ssl/ssl_credentials.h; sourceTree = "<group>"; };
 		89845DBAE94D09251FFFFFD1A29D11F5 /* HeartbeatsBundle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HeartbeatsBundle.swift; path = FirebaseCore/Internal/Sources/HeartbeatLogging/HeartbeatsBundle.swift; sourceTree = "<group>"; };
 		8999D5E92A9BFFE8B20E18EF4A7A760A /* variant.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = variant.h; path = absl/types/variant.h; sourceTree = "<group>"; };
@@ -17285,7 +17285,6 @@
 		9E858E44D35E5CE05BA82EEBD5A316A2 /* filesystem_common.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = filesystem_common.cc; path = Firestore/core/src/util/filesystem_common.cc; sourceTree = "<group>"; };
 		9E8DF1F3C340C477D46AC8E16D51730E /* MASCompositeConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASCompositeConstraint.h; path = Masonry/MASCompositeConstraint.h; sourceTree = "<group>"; };
 		9EA77B624977BF413695649D8E9718C1 /* SDWebImage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.debug.xcconfig; sourceTree = "<group>"; };
-		9EA7935AAC3297BC3AA22405F442C49E /* FILE_LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = FILE_LICENSE; sourceTree = "<group>"; };
 		9EA8894BA224D57A6941E351C3B1AA49 /* empty.upb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = empty.upb.h; path = "src/core/ext/upb-generated/google/protobuf/empty.upb.h"; sourceTree = "<group>"; };
 		9EB7AB6178A134D3F299F32C0776CF8F /* sdk_server_authz_filter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = sdk_server_authz_filter.h; path = src/core/lib/security/authorization/sdk_server_authz_filter.h; sourceTree = "<group>"; };
 		9EBA169E2BD879D4730AB775AC0390B2 /* xds_common_types.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = xds_common_types.cc; path = src/core/ext/xds/xds_common_types.cc; sourceTree = "<group>"; };
@@ -17764,7 +17763,6 @@
 		B82ED532FA5AE228542793F9BAB401FB /* channel_trace.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = channel_trace.h; path = src/core/lib/channel/channel_trace.h; sourceTree = "<group>"; };
 		B8340E698D6DD14AF3E6D7A510156D65 /* QMUIHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = QMUIHelper.h; path = QMUIKit/QMUICore/QMUIHelper.h; sourceTree = "<group>"; };
 		B83F4A84BC2F33157D8213E348777359 /* FIRVersion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FIRVersion.m; path = FirebaseCore/Sources/FIRVersion.m; sourceTree = "<group>"; };
-		B851A93C5D7CD371B293E418F9A5A543 /* WMBase.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = WMBase.podspec; sourceTree = "<group>"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
 		B862BA16231422BF62B32F4C210D150B /* MJRefreshNormalHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshNormalHeader.h; path = MJRefresh/Custom/Header/MJRefreshNormalHeader.h; sourceTree = "<group>"; };
 		B870D08BB8812B9A1006E7D143692DF8 /* internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = internal.h; path = src/crypto/hrss/internal.h; sourceTree = "<group>"; };
 		B888AC3AB6EB9BF6C25BD9E274F9008B /* server_config_selector.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = server_config_selector.h; path = src/core/ext/filters/server_config_selector/server_config_selector.h; sourceTree = "<group>"; };
@@ -18002,6 +18000,7 @@
 		C3C3935C03429AE6C0960EC1C77948E4 /* bound.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = bound.cc; path = Firestore/core/src/core/bound.cc; sourceTree = "<group>"; };
 		C3CEC1CCBF7736EFF06878B243BFD85E /* fake_resolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = fake_resolver.h; path = src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h; sourceTree = "<group>"; };
 		C3D123281FCC4DF07225A21E750D2B9F /* context.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = context.h; path = src/core/lib/channel/context.h; sourceTree = "<group>"; };
+		C3D5E721665FC571BE1FA9452C70F68E /* WMBase.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = WMBase.podspec; sourceTree = "<group>"; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
 		C3DA89F7650DE82F7F9FFA389E46354F /* lb_policy_factory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = lb_policy_factory.h; path = src/core/ext/filters/client_channel/lb_policy_factory.h; sourceTree = "<group>"; };
 		C3DAD20B731199CBD0701C80F28D5E37 /* pem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = pem.h; path = src/include/openssl/pem.h; sourceTree = "<group>"; };
 		C3F088D5239653F473ED8F4791A1863E /* pool_urbg.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = pool_urbg.cc; path = absl/random/internal/pool_urbg.cc; sourceTree = "<group>"; };
@@ -18064,6 +18063,7 @@
 		C5FB572D08C3C4C52B291BE6E5070F7F /* serialization_traits.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = serialization_traits.h; path = include/grpcpp/impl/codegen/serialization_traits.h; sourceTree = "<group>"; };
 		C5FE2C5165B68D85A2C432DDBD748F3B /* statusor.cc */ = {isa = PBXFileReference; includeInIndex = 1; name = statusor.cc; path = Firestore/core/src/util/statusor.cc; sourceTree = "<group>"; };
 		C60F2E0361785BA866CCD252DC99A5E4 /* sensitive.upbdefs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = sensitive.upbdefs.h; path = "src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h"; sourceTree = "<group>"; };
+		C612C4BC0DBEFB02A535E089F27A3205 /* readme.md */ = {isa = PBXFileReference; includeInIndex = 1; path = readme.md; sourceTree = "<group>"; };
 		C62859F78860B93F8D84305961B78A8F /* grpc_tls_certificate_verifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = grpc_tls_certificate_verifier.h; path = src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h; sourceTree = "<group>"; };
 		C62F1AEBFB34F75D56DA951CEBA9A38D /* timestamp.upb.c */ = {isa = PBXFileReference; includeInIndex = 1; name = timestamp.upb.c; path = "src/core/ext/upb-generated/google/protobuf/timestamp.upb.c"; sourceTree = "<group>"; };
 		C6355977DA62CC11719A30AA1C1943E8 /* bsd-ifaddrs.c */ = {isa = PBXFileReference; includeInIndex = 1; name = "bsd-ifaddrs.c"; path = "src/unix/bsd-ifaddrs.c"; sourceTree = "<group>"; };
@@ -20587,6 +20587,16 @@
 			name = have_sse;
 			sourceTree = "<group>";
 		};
+		23FA894548260966D8166BE13C22F7DE /* Pod */ = {
+			isa = PBXGroup;
+			children = (
+				61BE8E5331E32BD08CFDA3D266F441BF /* FILE_LICENSE */,
+				C612C4BC0DBEFB02A535E089F27A3205 /* readme.md */,
+				C3D5E721665FC571BE1FA9452C70F68E /* WMBase.podspec */,
+			);
+			name = Pod;
+			sourceTree = "<group>";
+		};
 		24A22DC95DA6705338A36E3665E17E40 /* OneSignalExtension */ = {
 			isa = PBXGroup;
 			children = (
@@ -20864,7 +20874,7 @@
 				F8FD74739CA87557927BBF83B42EC2FF /* WMBase.xcassets */,
 				614B1A4D27BA09B0F30553B567E30EAE /* WMBase_Tool.h */,
 				A6B06A317950F4B7C708F8D95DBCE5A5 /* WMBase_Tool.m */,
-				CEAE41F4550FE9A263172CDA5903B45E /* Pod */,
+				23FA894548260966D8166BE13C22F7DE /* Pod */,
 				20283B9C4AE6065A053FB9F3082009E0 /* Support Files */,
 				956F2B5F4CA0F488D3434F8A44F58A3D /* UC_Commonmodule */,
 				4A20E00BC2F7C9C142C026391342E7A2 /* Ucm_NetWork */,
@@ -26375,16 +26385,6 @@
 			name = QMUIAnimation;
 			sourceTree = "<group>";
 		};
-		CEAE41F4550FE9A263172CDA5903B45E /* Pod */ = {
-			isa = PBXGroup;
-			children = (
-				9EA7935AAC3297BC3AA22405F442C49E /* FILE_LICENSE */,
-				89654E7766810EB094FBA701096BD2F6 /* README.md */,
-				B851A93C5D7CD371B293E418F9A5A543 /* WMBase.podspec */,
-			);
-			name = Pod;
-			sourceTree = "<group>";
-		};
 		CF05B58CE007C04D226581E44A0C32A3 /* Support Files */ = {
 			isa = PBXGroup;
 			children = (
@@ -31723,8 +31723,8 @@
 		BFDFE7DC352907FC980B868725387E98 /* Project object */ = {
 			isa = PBXProject;
 			attributes = {
-				LastSwiftUpdateCheck = 1500;
-				LastUpgradeCheck = 1500;
+				LastSwiftUpdateCheck = 1240;
+				LastUpgradeCheck = 1240;
 			};
 			buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */;
 			compatibilityVersion = "Xcode 13.0";
@@ -36502,7 +36502,10 @@
 			buildSettings = {
 				APPLICATION_EXTENSION_API_ONLY = No;
 				CODE_SIGNING_ALLOWED = NO;
+				CODE_SIGN_IDENTITY = "Apple Development";
+				CODE_SIGN_STYLE = Automatic;
 				CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/GoogleSignIn";
+				DEVELOPMENT_TEAM = BUGL3DWWB7;
 				IBSC_MODULE = GoogleSignIn;
 				INFOPLIST_FILE = "Target Support Files/GoogleSignIn/ResourceBundle-GoogleSignIn-GoogleSignIn-Info.plist";
 				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
@@ -36805,7 +36808,10 @@
 			buildSettings = {
 				APPLICATION_EXTENSION_API_ONLY = No;
 				CODE_SIGNING_ALLOWED = NO;
+				CODE_SIGN_IDENTITY = "Apple Development";
+				CODE_SIGN_STYLE = Automatic;
 				CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/gRPC-C++";
+				DEVELOPMENT_TEAM = BUGL3DWWB7;
 				IBSC_MODULE = grpcpp;
 				INFOPLIST_FILE = "Target Support Files/gRPC-C++/ResourceBundle-gRPCCertificates-Cpp-gRPC-C++-Info.plist";
 				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
@@ -37636,7 +37642,10 @@
 			buildSettings = {
 				APPLICATION_EXTENSION_API_ONLY = No;
 				CODE_SIGNING_ALLOWED = NO;
+				CODE_SIGN_IDENTITY = "Apple Distribution";
+				CODE_SIGN_STYLE = Automatic;
 				CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/gRPC-C++";
+				DEVELOPMENT_TEAM = BUGL3DWWB7;
 				IBSC_MODULE = grpcpp;
 				INFOPLIST_FILE = "Target Support Files/gRPC-C++/ResourceBundle-gRPCCertificates-Cpp-gRPC-C++-Info.plist";
 				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
@@ -38178,7 +38187,10 @@
 			baseConfigurationReference = 0CAB2E0EE690DD514943D007A25CEBFD /* QMUIKit.debug.xcconfig */;
 			buildSettings = {
 				APPLICATION_EXTENSION_API_ONLY = No;
+				CODE_SIGN_IDENTITY = "Apple Development";
+				CODE_SIGN_STYLE = Automatic;
 				CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/QMUIKit";
+				DEVELOPMENT_TEAM = BUGL3DWWB7;
 				IBSC_MODULE = QMUIKit;
 				INFOPLIST_FILE = "Target Support Files/QMUIKit/ResourceBundle-QMUIResources-QMUIKit-Info.plist";
 				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
@@ -38737,7 +38749,10 @@
 			buildSettings = {
 				APPLICATION_EXTENSION_API_ONLY = No;
 				CODE_SIGNING_ALLOWED = NO;
+				CODE_SIGN_IDENTITY = "Apple Distribution";
+				CODE_SIGN_STYLE = Automatic;
 				CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/GoogleSignIn";
+				DEVELOPMENT_TEAM = BUGL3DWWB7;
 				IBSC_MODULE = GoogleSignIn;
 				INFOPLIST_FILE = "Target Support Files/GoogleSignIn/ResourceBundle-GoogleSignIn-GoogleSignIn-Info.plist";
 				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
@@ -38788,7 +38803,10 @@
 			baseConfigurationReference = 9468BFDA307FC4799228FB8F4CC0AF15 /* QMUIKit.release.xcconfig */;
 			buildSettings = {
 				APPLICATION_EXTENSION_API_ONLY = No;
+				CODE_SIGN_IDENTITY = "Apple Distribution";
+				CODE_SIGN_STYLE = Automatic;
 				CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/QMUIKit";
+				DEVELOPMENT_TEAM = BUGL3DWWB7;
 				IBSC_MODULE = QMUIKit;
 				INFOPLIST_FILE = "Target Support Files/QMUIKit/ResourceBundle-QMUIResources-QMUIKit-Info.plist";
 				IPHONEOS_DEPLOYMENT_TARGET = 11.0;

+ 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"