GoodsReviewsWriteC.m 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442
  1. //
  2. // GoodsReviewsWriteC.m
  3. // Asteria
  4. //
  5. // Created by 王猛 on 2024/1/10.
  6. //
  7. #import "GoodsReviewsWriteC.h"
  8. #import "AS_GoodsDetailsC.h"
  9. #import "HCSStarRatingView.h"
  10. #import "GoodWritUpImgV.h"
  11. #import <QMUIKit/QMUIImagePickerPreviewViewController.h>
  12. #import "ASGoodsDetailsVM.h"
  13. #import "QDSingleImagePickerPreviewViewController.h"
  14. #define kWriteUpimgWdith (KScreenWidth-40)/3
  15. static QMUIAlbumContentType const kAlbumContentType = QMUIAlbumContentTypeOnlyPhoto;
  16. @interface GoodsReviewsWriteC ()
  17. <QMUITextViewDelegate,
  18. QMUIAlbumViewControllerDelegate,
  19. QMUIImagePickerViewControllerDelegate,
  20. QDSingleImagePickerPreviewViewControllerDelegate,
  21. RY_baseVMprotocol>
  22. @property (nonatomic, strong) TT_CustonTF *buyernameTF;
  23. @property (nonatomic, strong) TT_CustonTF *orderlengthTF;
  24. @property (nonatomic, strong) NSMutableArray *starValueAry;
  25. @property (nonatomic, strong) UIButton *bootomBtn;
  26. @property (nonatomic, strong) QMUITextView *writeTextV;
  27. @property (nonatomic, strong) NSMutableArray *xxx_upLoadImgAry;
  28. @property (nonatomic, assign) NSInteger xxx_tapImgIndex;
  29. @property (nonatomic, strong) NSMutableArray *xxx_imgUrlAry;
  30. @property (nonatomic, strong) NSMutableArray *xxx_selectImgAry;
  31. @property (nonatomic, strong) ASGoodsDetailsVM *VM;
  32. @end
  33. @implementation GoodsReviewsWriteC
  34. - (void)viewDidLoad {
  35. [super viewDidLoad];
  36. self.title = self.nav_title;
  37. }
  38. - (void)ucm_bindvmmodel{
  39. self.VM = [[ASGoodsDetailsVM alloc]initDelegate:self];
  40. }
  41. - (void)initSubviews {
  42. [super initSubviews];
  43. [self.view addSubview:self.topBgV];
  44. [self.view addSubview:self.buyernameTF];
  45. [self.view addSubview:self.orderlengthTF];
  46. IPhoneXHeigh
  47. self.topBgV.frame = CGRectMake(0, securitytop_Y, KScreenWidth, 60);
  48. self.buyernameTF.mj_y = CGRectGetMaxY(self.topBgV.frame)+20;
  49. self.orderlengthTF.mj_y = CGRectGetMaxY(self.buyernameTF.frame)+20;
  50. NSArray *titileAry = @[@"QUALITY",@"SHIPPING",@"SERVICE"];
  51. self.starValueAry = [NSMutableArray arrayWithArray:@[@"0.0",@"0.0",@"0.0"]];
  52. UIView *lastView = nil;
  53. for (int i = 0; i<titileAry.count; i++) {
  54. UILabel *tipslab = [UILabel new];
  55. tipslab.text = titileAry[i];
  56. tipslab.font = [UIFont fontWithName:Rob_Regular size:14];
  57. tipslab.textColor = [UIColor colorWithHexString:@"#B2B2B2"];
  58. [self.view addSubview:tipslab];
  59. tipslab.frame = CGRectMake(10, CGRectGetMaxY(self.orderlengthTF.frame)+20+i*40, 70, 40);
  60. HCSStarRatingView *reviews_startV = [[HCSStarRatingView alloc]initWithFrame:CGRectMake(10+70+10, CGRectGetMaxY(self.orderlengthTF.frame)+20+i*40,160, 40)];
  61. reviews_startV.value =0;
  62. reviews_startV.filledStarImage = IMAGE(@"reviews_full_star");
  63. reviews_startV.emptyStarImage = IMAGE(@"reviews_empty_star");
  64. reviews_startV.maximumValue = 5;
  65. reviews_startV.backgroundColor = [UIColor clearColor];
  66. reviews_startV.tag = i;
  67. [reviews_startV addTarget:self action:@selector(didChangeValue:) forControlEvents:UIControlEventValueChanged];
  68. [self.view addSubview:reviews_startV];
  69. if(i == titileAry.count-1){
  70. lastView = reviews_startV;
  71. }
  72. }
  73. [self.view addSubview:self.writeTextV];
  74. self.writeTextV.mj_y = CGRectGetMaxY(lastView.frame)+30;
  75. self.xxx_upLoadImgAry = [NSMutableArray arrayWithCapacity:3];
  76. for (int i = 0; i<3; i++) {
  77. GoodWritUpImgV *upImgV = [[GoodWritUpImgV alloc]initWithFrame:CGRectMake(10+i*(kWriteUpimgWdith+10),CGRectGetMaxY(self.writeTextV.frame)+30, kWriteUpimgWdith, kWriteUpimgWdith)];
  78. upImgV.tag = i;
  79. upImgV.closeBtn.tag = i;
  80. upImgV.isCanTap = YES;
  81. [upImgV.closeBtn addTarget:self action:@selector(handle_closeDeleteImgBtn:) forControlEvents:UIControlEventTouchUpInside];
  82. upImgV.hidden = YES;
  83. upImgV.image = [UIImage imageNamed:@"goods_wirte_upload"];
  84. [self.view addSubview:upImgV];
  85. UITapGestureRecognizer *tap= [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handle_TapUpImgLoad:)];
  86. [upImgV addGestureRecognizer:tap];
  87. if(i == 0 ){
  88. upImgV.hidden = NO;
  89. }
  90. [self.xxx_upLoadImgAry addObject:upImgV];
  91. }
  92. [self.view addSubview:self.bootomBtn];
  93. }
  94. #pragma mark - **************** handle ****************
  95. -(void)didChangeValue:(HCSStarRatingView *)starV{
  96. NSLog(@"Changed rating to %.1f", starV.value);
  97. [self.starValueAry replaceObjectAtIndex:starV.tag withObject:[NSString stringWithFormat:@"%f",starV.value]];
  98. }
  99. /// upLoad Img 相关内容
  100. -(void)handle_closeDeleteImgBtn:(UIButton *)btn{
  101. [FTT_Helper CreateTitle:@"Whether to delete the current photo" message:nil CantionTitle:@"Cancel" Sure:@"Sure" preferredStyle:UIAlertControllerStyleAlert SureAC:^{
  102. [self tool_deleteImgChange:btn.tag];
  103. } NoAC:nil ViewController:self];
  104. }
  105. -(void)tool_deleteImgChange:(NSInteger )index{
  106. [self.xxx_imgUrlAry removeObjectAtIndex:index];
  107. [self.xxx_selectImgAry removeObjectAtIndex:index];
  108. for (int i = 0; i<self.xxx_upLoadImgAry.count; i++) {
  109. GoodWritUpImgV * imgV = self.xxx_upLoadImgAry[i];
  110. imgV.hidden = NO;
  111. if(self.xxx_selectImgAry.count > i){
  112. imgV.image = self.xxx_selectImgAry[i];
  113. imgV.isCanTap = NO;
  114. }else if (self.xxx_selectImgAry.count == i){
  115. imgV.image = [UIImage imageNamed:@"goods_wirte_upload"];
  116. imgV.isCanTap = YES;
  117. }else{
  118. imgV.hidden = YES;
  119. }
  120. }
  121. }
  122. //点击添加图片
  123. -(void)handle_TapUpImgLoad:(UITapGestureRecognizer *)tap{
  124. GoodWritUpImgV * imgV =(GoodWritUpImgV *_Nullable )tap.view;
  125. if(imgV.isCanTap){//调用相片
  126. self.xxx_tapImgIndex = imgV.tag;
  127. [self tool_presentAlbumViewControllerWith:imgV.tag];
  128. }
  129. }
  130. #pragma mark - **************** 选择照片上传 ****************
  131. -(void)tool_presentAlbumViewControllerWith:(NSInteger )index{
  132. QMUIAlbumViewController *albumViewController = [[QMUIAlbumViewController alloc] init];
  133. albumViewController.albumViewControllerDelegate = self;
  134. albumViewController.contentType = QMUIAlbumContentTypeOnlyPhoto;
  135. UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:albumViewController];
  136. // 获取最近发送图片时使用过的相簿,如果有则直接进入该相簿
  137. [albumViewController pickLastAlbumGroupDirectlyIfCan];
  138. [self presentViewController:navigationController animated:YES completion:NULL];
  139. }
  140. #pragma mark - **************** QMUIAlbumViewControllerDelegate ****************
  141. - (QMUIImagePickerViewController *)imagePickerViewControllerForAlbumViewController:(QMUIAlbumViewController *)albumViewController {
  142. QMUIImagePickerViewController *imagePickerViewController = [[QMUIImagePickerViewController alloc] init];
  143. imagePickerViewController.imagePickerViewControllerDelegate = self;
  144. imagePickerViewController.maximumSelectImageCount = 3;
  145. imagePickerViewController.view.tag = albumViewController.view.tag;
  146. imagePickerViewController.allowsMultipleSelection = NO;
  147. return imagePickerViewController;
  148. }
  149. #pragma mark - **************** QMUIImagePickerViewControllerDelegate ****************
  150. - (void)imagePickerViewController:(QMUIImagePickerViewController *)imagePickerViewController didFinishPickingImageWithImagesAssetArray:(NSMutableArray<QMUIAsset *> *)imagesAssetArray {
  151. // 储存最近选择了图片的相册,方便下次直接进入该相册
  152. [QMUIImagePickerHelper updateLastestAlbumWithAssetsGroup:imagePickerViewController.assetsGroup ablumContentType:kAlbumContentType userIdentify:nil];
  153. }
  154. - (QMUIImagePickerPreviewViewController *)imagePickerPreviewViewControllerForImagePickerViewController:(QMUIImagePickerViewController *)imagePickerViewController {
  155. QDSingleImagePickerPreviewViewController *imagePickerPreviewViewController = [[QDSingleImagePickerPreviewViewController alloc] init];
  156. imagePickerPreviewViewController.delegate = self;
  157. imagePickerPreviewViewController.assetsGroup = imagePickerViewController.assetsGroup;
  158. imagePickerPreviewViewController.view.tag = imagePickerViewController.view.tag;
  159. return imagePickerPreviewViewController;
  160. }
  161. #pragma mark - <QDSingleImagePickerPreviewViewControllerDelegate>
  162. - (void)imagePickerPreviewViewController:(QDSingleImagePickerPreviewViewController *)imagePickerPreviewViewController didSelectImageWithImagesAsset:(QMUIAsset *)imageAsset {
  163. // 储存最近选择了图片的相册,方便下次直接进入该相册
  164. [QMUIImagePickerHelper updateLastestAlbumWithAssetsGroup:imagePickerPreviewViewController.assetsGroup ablumContentType:kAlbumContentType userIdentify:nil];
  165. // 显示 loading
  166. [MBProgressHUD showHUDAddedTo:self.view animated:YES];
  167. [imageAsset requestImageData:^(NSData *imageData, NSDictionary<NSString *,id> *info, BOOL isGif, BOOL isHEIC) {
  168. UIImage *targetImage = nil;
  169. if (isGif) {
  170. targetImage = [UIImage qmui_animatedImageWithData:imageData];
  171. } else {
  172. targetImage = [UIImage imageWithData:imageData];
  173. // if (isHEIC) {
  174. // // iOS 11 中新增 HEIF/HEVC 格式的资源,直接发送新格式的照片到不支持新格式的设备,照片可能会无法识别,可以先转换为通用的 JPEG 格式再进行使用。
  175. // // 详细请浏览:https://github.com/Tencent/QMUI_iOS/issues/224
  176. // targetImage = [UIImage imageWithData:UIImageJPEGRepresentation(targetImage, 1)];
  177. // }
  178. }
  179. [self performSelector:@selector(tool_setAvatarWithAvatarImage:) withObject:targetImage afterDelay:1.8];
  180. }];
  181. }
  182. ///执行相关的网络请求
  183. -(void)tool_setAvatarWithAvatarImage:(UIImage *)avatarImage{
  184. [MBProgressHUD hideHUDForView:self.view animated:YES];
  185. if(self.xxx_tapImgIndex<2){
  186. GoodWritUpImgV *tempImgV = self.xxx_upLoadImgAry[self.xxx_tapImgIndex+1];
  187. tempImgV.hidden = NO;
  188. }
  189. GoodWritUpImgV *upImgV = self.xxx_upLoadImgAry[self.xxx_tapImgIndex];
  190. upImgV.image = avatarImage;
  191. upImgV.isCanTap = NO;
  192. [self.xxx_selectImgAry addObject:avatarImage];
  193. [self reqNet_upload:avatarImage];
  194. }
  195. #pragma mark - **************** reqNet ****************
  196. -(void)reqNet_upload:(UIImage *)img{
  197. NSData *imageData = UIImageJPEGRepresentation(img, 0.6);
  198. NSString *dataStr = [imageData base64EncodedStringWithOptions:0];
  199. NSMutableDictionary *params = [NSMutableDictionary dictionary];
  200. [params setObject:dataStr forKey:@"image_video[]"];
  201. [MBProgressHUD showHUDAddedTo:self.view animated:YES];
  202. NSString *reqUrl = RequestAllUrl(Reivews_rewriteProductAddImg);
  203. [PPNetworkHelper uploadImagesWithURL:reqUrl parameters:@{} name:@"image_video[]" images:@[img] fileNames:nil imageScale:0.6 imageType:nil progress:^(NSProgress *progress) {
  204. } success:^(id responseObject) {
  205. [MBProgressHUD hideHUDForView:self.view animated:YES];
  206. if(RequestSuccess){
  207. [self.view makeToast:@"Sucess" duration:2 position:CSToastPositionCenter];
  208. NSDictionary *dataDic = responseObject[@"data"];
  209. [self.xxx_imgUrlAry addObject:dataDic[@"image_video"]];
  210. }else{
  211. [self.view makeToast:RequestMsg duration:2 position:CSToastPositionCenter];
  212. }
  213. } failure:^(NSError *error) {
  214. [MBProgressHUD hideHUDForView:self.view animated:YES];
  215. [self.view makeToast:ReqNetWorkFaild duration:2 position:CSToastPositionCenter];
  216. }];
  217. }
  218. -(void)handle_postCommentEvent:(UIButton *)btn{
  219. if(self.writeTextV.text.length == 0 || self.orderlengthTF.text.length == 0 || self.buyernameTF.text.length == 0){
  220. [self.view makeToast:@"Please complete the score first" duration:2 position:CSToastPositionCenter];
  221. return;
  222. }
  223. NSMutableString *imageStr= [[NSMutableString alloc]initWithString:@""];
  224. for (int i=0; i<self.xxx_imgUrlAry.count; i++) {
  225. NSString * imgUrl = self.xxx_imgUrlAry[i];
  226. [imageStr appendString:imgUrl];
  227. }
  228. NSMutableDictionary *params = [NSMutableDictionary dictionary];
  229. params[@"id"] = MM_str(self.goodsM.Id) ;
  230. params[@"nickname"] = MM_str(self.buyernameTF.text) ;
  231. params[@"title"] = MM_str(self.orderlengthTF.text) ;
  232. params[@"detail"] = MM_str(self.writeTextV.text) ;
  233. params[@"verified_purchase"] = @"0" ;
  234. params[@"image_video"] = imageStr;
  235. for (int i = 0; i<self.starValueAry.count; i++) {
  236. NSString *str = self.starValueAry[i];
  237. if([str integerValue] == 0){
  238. [self.view makeToast:@"Please complete the score first" duration:2 position:CSToastPositionCenter];
  239. return;
  240. }
  241. NSString *ratingStr = [NSString stringWithFormat:@"%ld",[str integerValue] + i*5];
  242. [params setObject:ratingStr forKey:[NSString stringWithFormat:@"ratings[%d]",i+1]];
  243. }
  244. [self.VM ry_formDataRequestPostApi:Reviews_rewriteProductAddReview param:params];
  245. }
  246. - (void)ry_respnsData:(nullable id)data
  247. parseAry:(nullable NSMutableArray *)arry
  248. sucess:(BOOL)sucessOrFail
  249. mark:(nonnull NSString *)mark {
  250. [MBProgressHUD hideHUDForView:self.view animated:YES];
  251. if([mark isEqualToString:Reivews_rewriteProductAddImg]){
  252. if(sucessOrFail){
  253. [self.view makeToast:@"Sucess" duration:2 position:CSToastPositionCenter];
  254. [self.xxx_imgUrlAry addObject:(NSDictionary *)data[@"image_video"]];
  255. }else{
  256. [self.view makeToast:(NSString *)data duration:2 position:CSToastPositionCenter];
  257. }
  258. }else if ([mark isEqualToString:Reviews_rewriteProductAddReview]){
  259. if(sucessOrFail){
  260. @weakify(self)
  261. [self.view makeToast:@"Your review has been accepted for moderation" duration:2 position:CSToastPositionCenter title:nil image:nil style:nil completion:^(BOOL didTap) {
  262. @strongify(self)
  263. NSArray *tmpVcAry = self.navigationController.viewControllers;
  264. for(UIViewController *vc in tmpVcAry){
  265. if([vc isKindOfClass:[AS_GoodsDetailsC class]]){
  266. [self.navigationController popToViewController:vc animated:YES];
  267. return;
  268. }
  269. }
  270. }];
  271. }else{
  272. [self.view makeToast:(NSString *)data duration:2 position:CSToastPositionCenter];
  273. }
  274. }
  275. }
  276. #pragma mark - **************** lazy ****************
  277. -(TT_CustonTF *)buyernameTF{
  278. if(!_buyernameTF){
  279. _buyernameTF = [TT_ControlTool FTT_ControlToolUITextFieldFrame:CGRectMake(10, 0, KScreenWidth-20, 45)
  280. PlaceHolder:@"* BUYER NAME"
  281. andLifImage:nil
  282. AndRightImage:nil LiftImageFrame:CGRectZero
  283. RightImageFrame:CGRectZero
  284. AndTag:0
  285. AndKeyboardType:UIKeyboardTypeDefault
  286. clearButtonMode:UITextFieldViewModeAlways
  287. AndReturnKeyType:UIReturnKeyDone
  288. masksToBounds:YES
  289. conrenRadius:4
  290. BorderColor:[UIColor colorWithHexString:@"#000000"]
  291. BorderWidth:1];
  292. _buyernameTF.font = [UIFont fontWithName:Rob_Regular size:14];
  293. _buyernameTF.backgroundColor = [UIColor colorWithHexString:@"#FFFFFF"];
  294. }
  295. return _buyernameTF;
  296. }
  297. -(TT_CustonTF *)orderlengthTF{
  298. if(!_orderlengthTF){
  299. _orderlengthTF = [TT_ControlTool FTT_ControlToolUITextFieldFrame:CGRectMake(10, 0, KScreenWidth-20, 45)
  300. PlaceHolder:@"* ORDER LENGTH"
  301. andLifImage:nil
  302. AndRightImage:nil LiftImageFrame:CGRectZero
  303. RightImageFrame:CGRectZero
  304. AndTag:0
  305. AndKeyboardType:UIKeyboardTypeDefault
  306. clearButtonMode:UITextFieldViewModeAlways
  307. AndReturnKeyType:UIReturnKeyDone
  308. masksToBounds:YES
  309. conrenRadius:4
  310. BorderColor:[UIColor colorWithHexString:@"#000000"]
  311. BorderWidth:1];
  312. _orderlengthTF.font = [UIFont fontWithName:Rob_Regular size:14];
  313. _orderlengthTF.backgroundColor = [UIColor colorWithHexString:@"#FFFFFF"];
  314. }
  315. return _orderlengthTF;
  316. }
  317. -(QMUITextView *)writeTextV{
  318. if(!_writeTextV){
  319. _writeTextV = [[QMUITextView alloc]initWithFrame:CGRectMake(10, 0, KScreenWidth-20, 110)];
  320. _writeTextV.textContainerInset = UIEdgeInsetsMake(10, 7, 10, 7);
  321. _writeTextV.placeholder = @" * WRITE A REVIEW";
  322. _writeTextV.layer.cornerRadius = 4;
  323. _writeTextV.layer.borderColor = [UIColor colorWithHexString:@"#0B0B0B"].CGColor;
  324. _writeTextV.layer.borderWidth = 1;
  325. _writeTextV.clipsToBounds = YES;
  326. _writeTextV.font = [UIFont fontWithName:Rob_Regular size:14];
  327. _writeTextV.placeholderColor = [UIColor colorWithHexString:@"#999999"];
  328. }
  329. return _writeTextV;
  330. }
  331. -(UIButton *)bootomBtn{
  332. if(!_bootomBtn){
  333. IPhoneXHeigh
  334. _bootomBtn = [TT_ControlTool FTT_ControlToolUIButtonFrame:CGRectMake(20, KScreenHeight-45-securityBottom_H, KScreenWidth-40, 45)
  335. taeget:self
  336. sel:@selector(handle_postCommentEvent:)
  337. tag:0
  338. AntTitle:@"POST COMMENT"
  339. titleFont:16
  340. titleColor:[UIColor colorWithHexString:@"#FFFFFF"]
  341. andImage:nil
  342. AndBackColor:[UIColor colorWithHexString:@"#000000"]
  343. adjustsFontSizesTowidth:NO
  344. masksToBounds:YES
  345. conrenRadius:4 BorderColor:nil BorderWidth:0 ContentHorizontalAligment:0];
  346. }
  347. return _bootomBtn;
  348. }
  349. - (NSMutableArray *)xxx_imgUrlAry {
  350. if (!_xxx_imgUrlAry) {
  351. _xxx_imgUrlAry = [[NSMutableArray alloc] init];
  352. }
  353. return _xxx_imgUrlAry;
  354. }
  355. - (NSMutableArray *)xxx_selectImgAry {
  356. if (!_xxx_selectImgAry) {
  357. _xxx_selectImgAry = [[NSMutableArray alloc] init];
  358. }
  359. return _xxx_selectImgAry;
  360. }
  361. /**
  362. 上传图片
  363. [formData appendPartWithFileData:uploadImageData name:@"content_pic" fileName:fileName mimeType:ECGBJKeyJPEG];
  364. @param URLString URL
  365. @param content 弹框的内容
  366. @param parameters 参数体
  367. @param uploadDatas 上传图片NSData
  368. @param completeSuccess 成功回调
  369. @param completeFailure 失败回调
  370. [manager POST:URLString parameters:parameters constructingBodyWithBlock:^(id< AFMultipartFormData > _Nonnull formData) {
  371. NSDateFormatter *formatter=[[NSDateFormatter alloc]init];
  372. formatter.dateFormat=@"yyyyMMddHHmmss";
  373. NSString *str=[formatter stringFromDate:[NSDate date]];
  374. NSString *fileName=[NSString stringWithFormat:@"%@.jpg",str];
  375. [formData appendPartWithFileData:uploadImageData name:@"content_pic" fileName:fileName mimeType:ECGBJKeyJPEG];
  376. } progress:^(NSProgress * _Nonnull uploadProgress) {
  377. } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
  378. // 转换responseObject对象
  379. NSDictionary *dict = nil;
  380. if ([responseObject isKindOfClass:[NSDictionary class]]) {
  381. dict = (NSDictionary *)responseObject;
  382. } else {
  383. dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
  384. }
  385. // 成功后弹框处理,回调出去
  386. [weakSelf notDismissedWith:dict responseObject:responseObject complete:^(NSDictionary *respinseDic, id responseObject) {
  387. completeSuccess(respinseDic,responseObject);
  388. } failedComplete:^{
  389. completeFailure();
  390. }];
  391. } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  392. // 网络问题,弹框处理
  393. [weakSelf notNetconnetNotDismissComplete:^{
  394. completeFailure();
  395. }];
  396. }]
  397. */
  398. @end