2 Commits 053d675cb4 ... 10b286a392

Auteur SHA1 Bericht Datum
  wangmeng 10b286a392 Merge branch 'master' of http://gogs.hnwmzp.cn/nzk1/Asteria-APP 1 jaar geleden
  wangmeng 6a849a16be 商品Write功能完成,form-data表单 请求封装完成 1 jaar geleden
47 gewijzigde bestanden met toevoegingen van 1372 en 171 verwijderingen
  1. 98 0
      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_wirte_upload.imageset/Contents.json
  5. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_wirte_upload.imageset/上传图片.png
  6. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_wirte_upload.imageset/上传图片@2x.png
  7. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goods_wirte_upload.imageset/上传图片@3x.png
  8. 23 0
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_normal.imageset/Contents.json
  9. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_normal.imageset/thumb-up-line.png
  10. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_normal.imageset/thumb-up-line@2x.png
  11. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_normal.imageset/thumb-up-line@3x.png
  12. 23 0
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_select.imageset/Contents.json
  13. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_select.imageset/thumb-up-fill.png
  14. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_select.imageset/thumb-up-fill@2x.png
  15. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/goos_zan_select.imageset/thumb-up-fill@3x.png
  16. 23 0
      Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_empty_star.imageset/Contents.json
  17. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_empty_star.imageset/star-NUMORAL.png
  18. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_empty_star.imageset/star-NUMORAL@2x.png
  19. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_empty_star.imageset/star-NUMORAL@3x.png
  20. 23 0
      Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_full_star.imageset/Contents.json
  21. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_full_star.imageset/star-fill.png
  22. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_full_star.imageset/star-fill@2x.png
  23. BIN
      Asteria/Fuction/Goods/Assets/Goods.xcassets/reviews_full_star.imageset/star-fill@3x.png
  24. 66 30
      Asteria/Fuction/Goods/Revies/AS_GoodsReviewsListC.m
  25. 23 0
      Asteria/Fuction/Goods/Revies/Base/QDSingleImagePickerPreviewViewController.h
  26. 66 0
      Asteria/Fuction/Goods/Revies/Base/QDSingleImagePickerPreviewViewController.m
  27. 19 0
      Asteria/Fuction/Goods/Revies/GoodsReviewsWriteC.h
  28. 442 0
      Asteria/Fuction/Goods/Revies/GoodsReviewsWriteC.m
  29. 18 0
      Asteria/Fuction/Goods/Revies/V/GoodWritUpImgV.h
  30. 55 0
      Asteria/Fuction/Goods/Revies/V/GoodWritUpImgV.m
  31. 1 0
      Asteria/Fuction/Goods/Revies/V/GoodsReviewsListTableV.m
  32. 1 1
      Asteria/Fuction/Goods/Revies/V/ReviewsTableHearV.h
  33. 80 21
      Asteria/Fuction/Goods/Revies/V/ReviewsTableHearV.m
  34. 24 3
      Asteria/Fuction/Goods/Revies/cell/GoodsReviewsCell.m
  35. 1 3
      Asteria/Fuction/Goods/V/GoodsDetailSrcView.m
  36. 2 2
      Asteria/Fuction/Goods/VC/AS_GoodsDetailsC.m
  37. 8 0
      Asteria/Fuction/Goods/VM/ASGoodsDetailsVM.h
  38. 3 0
      Asteria/Fuction/Goods/VM/ASGoodsDetailsVM.m
  39. 1 1
      Asteria/Fuction/Login/VC/AS_SignUpC.m
  40. 10 0
      Asteria/Info.plist
  41. 1 0
      Asteria/NetTools/ASNetApis.h
  42. 2 0
      Asteria/NetTools/ASNetTools.h
  43. 65 0
      Asteria/NetTools/ASNetTools.m
  44. 2 0
      Podfile
  45. 1 1
      Podfile.lock
  46. 1 1
      Pods/Manifest.lock
  47. 251 100
      Pods/Pods.xcodeproj/project.pbxproj

+ 98 - 0
Asteria.xcodeproj/project.pbxproj

@@ -203,6 +203,25 @@
 		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 */; };
@@ -257,6 +276,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 */
@@ -662,6 +683,26 @@
 		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>"; };
@@ -772,6 +813,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>"; };
@@ -785,7 +830,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;
 		};
@@ -803,6 +866,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 */,
@@ -1626,6 +1707,9 @@
 		9A32A2252B4BEB2D005A5831 /* Revies */ = {
 			isa = PBXGroup;
 			children = (
+				9A98E5042B5A159500E8C5C1 /* Base */,
+				9ADA8A1C2B4E481E00BACDEA /* GoodsReviewsWriteC.h */,
+				9ADA8A1D2B4E481E00BACDEA /* GoodsReviewsWriteC.m */,
 				9A31EDFE2B469A73009F11EE /* AS_GoodsReviewsListC.h */,
 				9A31EDFF2B469A73009F11EE /* AS_GoodsReviewsListC.m */,
 				9A32A2262B4BEB5F005A5831 /* V */,
@@ -1637,6 +1721,8 @@
 		9A32A2262B4BEB5F005A5831 /* V */ = {
 			isa = PBXGroup;
 			children = (
+				9ADA8A202B4E96C900BACDEA /* GoodWritUpImgV.h */,
+				9ADA8A1F2B4E96C800BACDEA /* GoodWritUpImgV.m */,
 				9A35203C2B47FF2300D097CB /* GoodsReviewsListTableV.h */,
 				9A35203D2B47FF2300D097CB /* GoodsReviewsListTableV.m */,
 				9AD4D3952B48E8780086D6FB /* ReviewsTableHearV.h */,
@@ -1785,6 +1871,15 @@
 			path = Assets;
 			sourceTree = "<group>";
 		};
+		9A98E5042B5A159500E8C5C1 /* Base */ = {
+			isa = PBXGroup;
+			children = (
+				9A98E5062B5A15A400E8C5C1 /* QDSingleImagePickerPreviewViewController.h */,
+				9A98E5052B5A15A400E8C5C1 /* QDSingleImagePickerPreviewViewController.m */,
+			);
+			path = Base;
+			sourceTree = "<group>";
+		};
 		9ACBEC1E2A1457E800A8F97A /* CTMediatoaTargets */ = {
 			isa = PBXGroup;
 			children = (
@@ -2400,6 +2495,7 @@
 				81717D3A2A3D322700648139 /* KWHisAndHotWordsView.m in Sources */,
 				81DFA5592A4681E900DA708B /* ASPointEranCell.m in Sources */,
 				81354BE72A28786C0082C93A /* ASProductBaseModel.m in Sources */,
+				9ADA8A212B4E96C900BACDEA /* GoodWritUpImgV.m in Sources */,
 				9A8DD8C52A0B8F1700573324 /* As_GoodsSizeC.m in Sources */,
 				9A3F5CB82B3BF90100DDB6A7 /* GoodsDetailsIntroduceV.m in Sources */,
 				8134C1BD2A1372D5006EB0EC /* ASUserCenterTableHeadView.m in Sources */,
@@ -2457,6 +2553,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 */,
@@ -2496,6 +2593,7 @@
 				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 */,
 				81717D222A3C4AE000648139 /* KWSearchMainTypeCell.m in Sources */,
 				81DFA5672A46D60900DA708B /* ASPointDetailViewController.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_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


+ 66 - 30
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 sub_veiwTapBlock];
 }
 
 - (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)sub_veiwTapBlock{
+    @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.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

+ 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

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

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

@@ -56,8 +56,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];

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

@@ -12,6 +12,14 @@
 #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")
+
+
 NS_ASSUME_NONNULL_BEGIN
 
 @interface ASGoodsDetailsVM : RYBaseVM

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

@@ -16,6 +16,9 @@
     }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];
+
     }
 }
 @end

+ 1 - 1
Asteria/Fuction/Login/VC/AS_SignUpC.m

@@ -46,7 +46,7 @@
         [self reqNet_singup:(NSDictionary *)data];
     };
 }
-//wm_todo 注册请求
+//wm_todo 注册请求修改
 -(void)reqNet_singup:(NSDictionary *)dic{
     NSString *urlStr = [NSString stringWithFormat:@"%@V1/customers",AS_Server];
     [MBProgressHUD showHUDAddedTo:self.view animated:YES];

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

+ 1 - 0
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])

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

+ 65 - 0
Asteria/NetTools/ASNetTools.m

@@ -130,6 +130,70 @@
     });
 }
 
+// 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];
+    
+    
+    for (NSString *key in param.allKeys) {
+           // 循环拿到所有参数进行拼接
+        NSString * searchStr = [param[key] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
+        [op addData:[searchStr dataUsingEncoding:NSUTF8StringEncoding] 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 +427,5 @@
     }];
 }
 
+
 @end

+ 2 - 0
Podfile

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

+ 1 - 1
Podfile.lock

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

+ 1 - 1
Pods/Manifest.lock

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

File diff suppressed because it is too large
+ 251 - 100
Pods/Pods.xcodeproj/project.pbxproj