MOFirstRechargeCell.m 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463
  1. //
  2. // MOFirstRechargeCell.m
  3. // MiMoLive
  4. //
  5. // Created by SuperC on 2024/9/9.
  6. //
  7. #import "MOFirstRechargeCell.h"
  8. #import "MOFirstRechargeRulesView.h"
  9. #import "MOTopUpStatusView.h"
  10. #import "MOCongratulationsView.h"
  11. #import <AdjustSdk/ADJEvent.h>
  12. @interface MOFirstRechargeCell ()<UITableViewDelegate,UITableViewDataSource>
  13. @property (weak, nonatomic) IBOutlet UILabel *titleLab;
  14. @property (weak, nonatomic) IBOutlet UILabel *bottomTipLab;
  15. @property (weak, nonatomic) IBOutlet UILabel *topTipLab;
  16. @property (weak, nonatomic) IBOutlet UIImageView *oneTimeImgView;
  17. @property (weak, nonatomic) IBOutlet UIImageView *selectImgView;
  18. @property (weak, nonatomic) IBOutlet NSLayoutConstraint *selectImgCenterX;
  19. @property (weak, nonatomic) IBOutlet UIButton *fisrtBtn;
  20. @property (weak, nonatomic) IBOutlet UIButton *secondBtn;
  21. @property (weak, nonatomic) IBOutlet UIButton *thirdBtn;
  22. @property (weak, nonatomic) IBOutlet UITableView *tableView;
  23. @property (nonatomic, strong) NSArray *dataArr;
  24. @property (weak, nonatomic) IBOutlet UIView *payView;
  25. @property (weak, nonatomic) IBOutlet UILabel *payOldLab;
  26. @property (weak, nonatomic) IBOutlet UILabel *payNewLab;
  27. @property (weak, nonatomic) IBOutlet UIView *purchasedTagView;
  28. @property (weak, nonatomic) IBOutlet UIButton *purchasedBtn;
  29. @property (nonatomic, strong) MOGiftPackList *selectPackListModel;
  30. @property (weak, nonatomic) IBOutlet UIView *offView;
  31. @property (weak, nonatomic) IBOutlet UILabel *offNumLab;
  32. @property (weak, nonatomic) IBOutlet UILabel *offTagLab;
  33. @property (weak, nonatomic) IBOutlet UIButton *purchasedStatusBtn;
  34. @end
  35. @implementation MOFirstRechargeCell
  36. - (void)awakeFromNib {
  37. [super awakeFromNib];
  38. // Initialization code
  39. self.titleLab.font = [MOTextTools getTheFontWithSize:24.0 AndFontName:kNormalTitleFontStr];
  40. self.topTipLab.font = [MOTextTools getTheFontWithSize:12.0 AndFontName:kNormalTitleFontStr];
  41. [self.fisrtBtn setFont:[MOTextTools getTheFontWithSize:10.0 AndFontName:kNormalContentBlodFontStr]];
  42. [self.secondBtn setFont:[MOTextTools getTheFontWithSize:10.0 AndFontName:kNormalContentBlodFontStr]];
  43. [self.thirdBtn setFont:[MOTextTools getTheFontWithSize:10.0 AndFontName:kNormalContentBlodFontStr]];
  44. self.offNumLab.font = [MOTextTools getTheFontWithSize:17.0 AndFontName:kNormalContentFontStr];
  45. self.offTagLab.font = [MOTextTools getTheFontWithSize:12.0 AndFontName:kNormalContentFontStr];
  46. self.bottomTipLab.font = [MOTextTools getTheFontWithSize:10.0 AndFontName:kNormalContentBlodFontStr];
  47. self.payOldLab.font = [MOTextTools getTheFontWithSize:16.0 AndFontName:kNormalContentBlodFontStr];
  48. self.payNewLab.font = [MOTextTools getTheFontWithSize:26.0 AndFontName:kNormalContentBlodFontStr];
  49. [self.purchasedBtn setFont:[MOTextTools getTheFontWithSize:24.0 AndFontName:kNormalContentFontStr]];
  50. [self.purchasedStatusBtn setFont:[MOTextTools getTheFontWithSize:10.0 AndFontName:kNormalContentFontStr]];
  51. self.tableView.layer.cornerRadius = 10.0;
  52. self.tableView.layer.masksToBounds = YES;
  53. self.fisrtBtn.titleEdgeInsets = UIEdgeInsetsMake(0, 0, 5, 0);
  54. self.secondBtn.titleEdgeInsets = UIEdgeInsetsMake(0, 0, 5, 0);
  55. self.thirdBtn.titleEdgeInsets = UIEdgeInsetsMake(0, 0, 5, 0);
  56. self.purchasedBtn.titleEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);
  57. self.purchasedBtn.layer.cornerRadius = 45.0 / 2.0;
  58. self.purchasedBtn.layer.masksToBounds = YES;
  59. [self.purchasedBtn setTitle:NSLocalString(@"mimo_first_recharge_purchased") forState:UIControlStateNormal];
  60. self.tableView.delegate = self;
  61. self.tableView.dataSource = self;
  62. self.tableView.rowHeight = 58.0;
  63. self.tableView.estimatedRowHeight = 0;
  64. self.tableView.estimatedSectionHeaderHeight = 0;
  65. self.tableView.estimatedSectionFooterHeight = 0;
  66. //iOS15适配
  67. if (@available(iOS 15.0, *))
  68. {
  69. self.tableView.sectionHeaderTopPadding = 0;
  70. }
  71. [self.tableView registerNib:[UINib nibWithNibName:@"MOFirstRechargeTableViewCell" bundle:nil] forCellReuseIdentifier:MOFirstRechargeTableViewCell_ID];
  72. [self changePayTypeClick:self.fisrtBtn];
  73. self.offView.hidden = YES;
  74. }
  75. - (IBAction)payBtnClick:(id)sender {
  76. //付款按钮
  77. if(self.selectPackListModel){
  78. if(!self.selectPackListModel.bought){
  79. //礼包还未购买
  80. if(self.selectPackListModel.id.length == 0){
  81. return;
  82. }
  83. [self payWith:self.selectPackListModel.payCode];
  84. }
  85. }
  86. }
  87. - (void)payWith:(NSString *)productId{
  88. if(productId.length == 0){
  89. return;
  90. }
  91. [MBProgressHUD showActivityMessageInWindow:NSLocalString(@"mimo_money_Purchasing")];
  92. WEAKSELF
  93. MOInAppPurchaseManager *inAppPurchase = [MOInAppPurchaseManager shareManager];
  94. [inAppPurchase queryByPuoductId:productId productInfoReuslts:^(SKProductsResponse * _Nonnull resp) {
  95. //如果商品不为空, 则发起请求
  96. if(resp){
  97. if(weakSelf.selectPackListModel.id.length > 0){
  98. NSDictionary *dict = @{@"id":weakSelf.selectPackListModel.id};
  99. [weakSelf toCreateOrderIdWith:dict];
  100. }
  101. else{
  102. [MBProgressHUD hideHUD];
  103. }
  104. }
  105. else{
  106. [MBProgressHUD hideHUD];
  107. }
  108. }];
  109. inAppPurchase.IAPurchaseResult = ^(MOIAPurchaseStatusType status) {
  110. MOLogV(@"当前状态是.....%zd",status);
  111. kMainThreadBlock(^{
  112. [MBProgressHUD hideHUD];
  113. if(status == MOIAPurchaseSuccess){
  114. //下方的回调 有购买成功的提示
  115. NSString *userId = GetUserId;
  116. //首次购买
  117. // ADJEvent *event = [ADJEvent eventWithEventToken:@"ckukpp"];
  118. ADJEvent *event = [[ADJEvent alloc] initWithEventToken:@"ckukpp"];
  119. if(userId.length != 0){
  120. [event addCallbackParameter:@"userId" value:userId];
  121. }
  122. [Adjust trackEvent:event];
  123. //应用内购买 与 充值埋点一样
  124. // ADJEvent *eventTwo = [ADJEvent eventWithEventToken:@"5fbkeh"];
  125. ADJEvent *eventTwo = [[ADJEvent alloc] initWithEventToken:@"5fbkeh"];
  126. if(userId.length != 0){
  127. [eventTwo addCallbackParameter:@"userId" value:userId];
  128. }
  129. if(productId.length != 0){
  130. [eventTwo addCallbackParameter:@"productId" value:productId];
  131. }
  132. [eventTwo setRevenue:(weakSelf.selectPackListModel.amount ? weakSelf.selectPackListModel.amount : 0.0) currency:@"IDR"];
  133. [Adjust trackEvent:eventTwo];
  134. }
  135. else{
  136. MOTopUpStatusView *view = [MOTopUpStatusView moTopUpStatusView];
  137. view.viewType = 2;
  138. [view showTopUpStatusView];
  139. }
  140. })
  141. };
  142. inAppPurchase.buyGiftSuccessBlock = ^(MOBuyGiftData * _Nonnull giftData) {
  143. MOCongratulationsView *view = [MOCongratulationsView moCongratulationsView];
  144. view.viewData = giftData;
  145. [view showCongratulationsView];
  146. weakSelf.selectPackListModel.bought = YES;
  147. [weakSelf updataBuyStatusWith:weakSelf.selectPackListModel];
  148. };
  149. }
  150. - (void)toCreateOrderIdWith:(NSDictionary *)dict{
  151. WEAKSELF
  152. [kHttpManager toGetTheGiftPackPreOrderWithParams:dict andBlock:^(id _Nonnull data, NSError * _Nonnull error) {
  153. if(kCode_Success){
  154. MOLogV(@"%@",[[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:data options:0 error:nil] encoding:NSUTF8StringEncoding]);
  155. [MOInAppPurchaseManager shareManager].orderId = [MODataManager objectOrNilForKey:@"orderId" fromDictionary:data[@"data"]];
  156. [[MOInAppPurchaseManager shareManager] createInPurchasePay];
  157. //预下单
  158. // ADJEvent *event = [ADJEvent eventWithEventToken:@"gvw84q"];
  159. ADJEvent *event = [[ADJEvent alloc] initWithEventToken:@"gvw84q"];
  160. NSString *userId = GetUserId;
  161. if(userId.length != 0){
  162. [event addCallbackParameter:@"userId" value:userId];
  163. }
  164. [Adjust trackEvent:event];
  165. }
  166. else{
  167. [MBProgressHUD hideHUD];
  168. MOLogV(@"toGetTheGiftPackPreOrderWithParams 接口报错了");
  169. kShowNetError(data)
  170. }
  171. }];
  172. }
  173. - (IBAction)changePayTypeClick:(UIButton *)sender {
  174. CGFloat stackWidth = 300.0 - 40.0 * 2.0;
  175. CGFloat theSpacing = (stackWidth - 10.0 * 2) / 3.0;
  176. for (MOGiftPackList *model in self.viewData.giftPackList) {
  177. model.isChoose = NO;
  178. }
  179. MOGiftPackList *chooseModel;
  180. if(sender == self.fisrtBtn){
  181. self.selectImgCenterX.constant = theSpacing + 10.0;
  182. [self.fisrtBtn setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
  183. [self.secondBtn setBackgroundImage:[UIImage imageNamed:@"icon_f_t_u_no_select"] forState:UIControlStateNormal];
  184. [self.thirdBtn setBackgroundImage:[UIImage imageNamed:@"icon_f_t_u_no_select"] forState:UIControlStateNormal];
  185. if(self.viewData.giftPackList.count >= 1){
  186. MOGiftPackList *model = self.viewData.giftPackList[0];
  187. model.isChoose = YES;
  188. chooseModel = model;
  189. }
  190. }
  191. else if (sender == self.secondBtn){
  192. self.selectImgCenterX.constant = 0.0;
  193. [self.fisrtBtn setBackgroundImage:[UIImage imageNamed:@"icon_f_t_u_no_select"] forState:UIControlStateNormal];
  194. [self.secondBtn setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
  195. [self.thirdBtn setBackgroundImage:[UIImage imageNamed:@"icon_f_t_u_no_select"] forState:UIControlStateNormal];
  196. if(self.viewData.giftPackList.count >= 2){
  197. MOGiftPackList *model = self.viewData.giftPackList[1];
  198. model.isChoose = YES;
  199. chooseModel = model;
  200. }
  201. }
  202. else if (sender == self.thirdBtn){
  203. self.selectImgCenterX.constant = -theSpacing - 10.0;
  204. [self.fisrtBtn setBackgroundImage:[UIImage imageNamed:@"icon_f_t_u_no_select"] forState:UIControlStateNormal];
  205. [self.secondBtn setBackgroundImage:[UIImage imageNamed:@"icon_f_t_u_no_select"] forState:UIControlStateNormal];
  206. [self.thirdBtn setBackgroundImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
  207. if(self.viewData.giftPackList.count == 3){
  208. MOGiftPackList *model = self.viewData.giftPackList[2];
  209. model.isChoose = YES;
  210. chooseModel = model;
  211. }
  212. }
  213. if(chooseModel){
  214. [self updataBuyStatusWith:chooseModel];
  215. }
  216. [UIView animateWithDuration:0.3 animations:^{
  217. [self layoutIfNeeded];
  218. }];
  219. }
  220. - (IBAction)ruleBtnClick:(id)sender {
  221. //规则
  222. MOFirstRechargeRulesView *view = [MOFirstRechargeRulesView moFirstRechargeRulesView];
  223. [view showFirstRechargeRulesView];
  224. }
  225. #pragma mark - UITableViewDelegate,UITableViewDataSource
  226. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
  227. return 1;
  228. }
  229. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
  230. return self.dataArr.count;
  231. }
  232. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
  233. MOGiftPackItems *model = self.dataArr[indexPath.row];
  234. MOFirstRechargeTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MOFirstRechargeTableViewCell_ID];
  235. cell.bought = self.selectPackListModel.bought;
  236. cell.cellModel = model;
  237. return cell;
  238. }
  239. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
  240. [tableView deselectRowAtIndexPath:indexPath animated:YES];
  241. }
  242. - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
  243. UIView *view = [[UIView alloc] init];
  244. view.backgroundColor = [UIColor clearColor];
  245. return view;
  246. }
  247. - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
  248. return 0.01;
  249. }
  250. - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
  251. return 0.01;
  252. }
  253. - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
  254. UIView *view = [[UIView alloc] init];
  255. view.backgroundColor = [UIColor clearColor];
  256. return view;
  257. }
  258. - (void)toGetViewData{
  259. if(!self.viewData){
  260. [self toGetTheGiftPackInfoListData];
  261. }
  262. else{
  263. [self updataAllView];
  264. }
  265. [self.tableView reloadData];
  266. }
  267. #pragma mark - Http
  268. - (void)toGetTheGiftPackInfoListData{
  269. WEAKSELF
  270. [kHttpManager toGetTheGiftPackListWithParams:nil andBlock:^(id _Nonnull data, NSError * _Nonnull error) {
  271. if(kCode_Success){
  272. MOLogV(@"%@",[[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:data options:0 error:nil] encoding:NSUTF8StringEncoding]);
  273. weakSelf.viewData = [MOGiftPackData modelObjectWithDictionary:data[@"data"]];
  274. weakSelf.viewDataBlock ? weakSelf.viewDataBlock(weakSelf.viewData) : nil;
  275. [weakSelf updataAllView];
  276. }
  277. else{
  278. MOLogV(@"toGetTheGiftPackListWithParams 接口报错了");
  279. kShowNetError(data)
  280. }
  281. }];
  282. }
  283. - (void)updataAllView{
  284. self.titleLab.text = self.viewData.title;
  285. if(self.viewData.giftPackList.count == 2){
  286. self.thirdBtn.hidden = YES;
  287. }
  288. if(self.viewData.giftPackList.count == 1){
  289. self.thirdBtn.hidden = YES;
  290. self.secondBtn.hidden = YES;
  291. }
  292. if(self.viewData.giftPackList.count >= 1){
  293. NSInteger selectIndex = 0;
  294. for (MOGiftPackList *model in self.viewData.giftPackList) {
  295. if(model.isChoose){
  296. break;
  297. }
  298. selectIndex ++;
  299. }
  300. if(selectIndex > (self.viewData.giftPackList.count - 1)){
  301. [self changePayTypeClick:self.fisrtBtn];
  302. }
  303. else{
  304. if(selectIndex == 0){
  305. [self changePayTypeClick:self.fisrtBtn];
  306. }
  307. else if (selectIndex == 1){
  308. [self changePayTypeClick:self.secondBtn];
  309. }
  310. else if (selectIndex == 2){
  311. [self changePayTypeClick:self.thirdBtn];
  312. }
  313. }
  314. }
  315. for (int x = 0; x < self.viewData.giftPackList.count; x ++) {
  316. MOGiftPackList *dataModel = self.viewData.giftPackList[x];
  317. if(x == 0){
  318. [self.fisrtBtn setTitle:[NSString stringWithFormat:@"%.f USD",dataModel.amount] forState:UIControlStateNormal];
  319. }
  320. else if (x == 1){
  321. [self.secondBtn setTitle:[NSString stringWithFormat:@"%.f USD",dataModel.amount] forState:UIControlStateNormal];
  322. }
  323. else if (x == 2){
  324. [self.thirdBtn setTitle:[NSString stringWithFormat:@"%.f USD",dataModel.amount] forState:UIControlStateNormal];
  325. }
  326. }
  327. }
  328. - (void)updataBuyStatusWith:(MOGiftPackList *)packModel{
  329. self.selectPackListModel = packModel;
  330. self.dataArr = [packModel.giftPackItems copy];
  331. [self.tableView reloadData];
  332. if(packModel.bought){
  333. self.purchasedTagView.hidden = NO;
  334. self.purchasedBtn.hidden = NO;
  335. self.oneTimeImgView.hidden = YES;
  336. self.payView.hidden = YES;
  337. self.offView.hidden = YES;
  338. }
  339. else{
  340. self.purchasedTagView.hidden = YES;
  341. self.purchasedBtn.hidden = YES;
  342. self.oneTimeImgView.hidden = NO;
  343. self.payView.hidden = NO;
  344. self.offView.hidden = NO;
  345. }
  346. NSString *oldText = [MOTextTools formatNumberDecimalValue:packModel.costPrice];
  347. self.payOldLab.text = [NSString stringWithFormat:@"%@ USD",oldText];
  348. NSString *newText = [MOTextTools formatNumberDecimalValue:packModel.amount];
  349. self.payNewLab.text = [NSString stringWithFormat:@"%@ USD",newText];
  350. if(packModel.costPrice > 0){
  351. NSInteger offNum = (packModel.costPrice - packModel.amount) / packModel.costPrice * 100;
  352. self.offNumLab.text = [NSString stringWithFormat:@"%zd%%",offNum];
  353. }
  354. }
  355. @end