MyIncomeViewController.m 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362
  1. //
  2. // MyIncomeViewController.m
  3. // KulexiuForTeacher
  4. //
  5. // Created by 王智 on 2022/4/26.
  6. //
  7. #import "MyIncomeViewController.h"
  8. #import "MyIncomeListCell.h"
  9. #import "IncomeHeaderView.h"
  10. #import "WithdrawViewController.h"
  11. #import <KSFullDatePicker.h>
  12. #import "IncomeListModel.h"
  13. #import "IncomeCountViewController.h"
  14. #import "KSBaseWKWebViewController.h"
  15. #import <KSChoosePicker.h>
  16. #import "FreezeListViewController.h"
  17. #import "NoRecordViewController.h"
  18. #import "UserInfoManager.h"
  19. @interface MyIncomeViewController ()<UITableViewDelegate,UITableViewDataSource>
  20. @property (nonatomic, strong) IncomeHeaderView *headView;
  21. @property (nonatomic, strong) NSDateFormatter *dateFormatter;
  22. @property (nonatomic, strong) NSString *searchDate;
  23. @property (nonatomic, strong) UITableView *tableView;
  24. @property (nonatomic, strong) NSString *bizType;
  25. @property (nonatomic, assign) NSInteger chooseIndex;
  26. @property (nonatomic, strong) NSMutableArray *sortArray;
  27. @property (nonatomic, assign) NSInteger lastChooseIndex;
  28. @end
  29. @implementation MyIncomeViewController
  30. - (void)viewDidLoad {
  31. [super viewDidLoad];
  32. // Do any additional setup after loading the view.
  33. [self allocTitle:@"我的收入"];
  34. [self configUI];
  35. [self setDefaultConfig];
  36. [self countUMEvent];
  37. }
  38. - (void)countUMEvent {
  39. [USER_MANAGER sendUMEvent:@"klx_income"];
  40. }
  41. - (void)setDefaultConfig {
  42. [self.dateFormatter setDateFormat:@"yyyy-MM"];
  43. NSDate *date = [NSDate date];
  44. self.searchDate = [self.dateFormatter stringFromDate:date];
  45. [self.dateFormatter setDateFormat:@"yyyy年M月"];
  46. self.headView.timeLabel.text = [self.dateFormatter stringFromDate:date];
  47. self.headView.typeLabel.text = @"全部收入";
  48. }
  49. - (void)rightBtnClick {
  50. // web
  51. KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
  52. ctrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/incomeConsus"];
  53. [self.navigationController pushViewController:ctrl animated:YES];
  54. }
  55. - (void)configUI {
  56. [self rightButtonTitle:@"收入统计"];
  57. [self.scrollView removeFromSuperview];
  58. [self.view addSubview:self.headView];
  59. CGFloat headHeight = [IncomeHeaderView getViewHeight];
  60. [self.headView mas_makeConstraints:^(MASConstraintMaker *make) {
  61. make.left.right.top.mas_equalTo(self.view);
  62. make.height.mas_equalTo(headHeight);
  63. }];
  64. [self.view addSubview:self.tableView];
  65. [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
  66. make.left.right.mas_equalTo(self.view);
  67. make.top.mas_equalTo(self.headView.mas_bottom);
  68. make.bottom.mas_equalTo(self.view.mas_bottom).offset(-iPhoneXSafeBottomMargin);
  69. }];
  70. MJWeakSelf;
  71. self.tableView.mj_header = [KSGifRefreshHeader headerWithRefreshingBlock:^{
  72. [weakSelf resetParamenter];
  73. [weakSelf requestData];
  74. [weakSelf requestAccountDetail];
  75. }];
  76. self.tableView.mj_footer = [KSGifRefreshFooter footerWithRefreshingBlock:^{
  77. if (weakSelf.isLoadMore) {
  78. weakSelf.pages += 1;
  79. [weakSelf requestData];
  80. }
  81. else {
  82. [weakSelf.tableView.mj_footer endRefreshingWithNoMoreData];
  83. }
  84. }];
  85. }
  86. - (void)viewWillAppear:(BOOL)animated {
  87. [super viewWillAppear:animated];
  88. [self refreshAndRequestData];
  89. }
  90. - (void)refreshAndRequestData {
  91. [self requestAccountDetail];
  92. [self resetParamenter];
  93. [self requestData];
  94. }
  95. - (void)resetParamenter {
  96. self.pages = 1;
  97. self.isLoadMore = YES;
  98. self.dataArray = [NSMutableArray array];
  99. [self.tableView.mj_footer resetNoMoreData];
  100. [self setPromptString:@"暂无数据" imageName:@"wd_img_zwsj" inView:self.tableView];
  101. [self.tableView reloadData];
  102. }
  103. - (void)endRefresh {
  104. @weakObj(self);
  105. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  106. @strongObj(self);
  107. [self.tableView.mj_header endRefreshing];
  108. [self.tableView.mj_footer endRefreshing];
  109. });
  110. }
  111. - (void)requestAccountDetail {
  112. [KSNetworkingManager teacherAccountDetail:KS_GET success:^(NSDictionary * _Nonnull dic) {
  113. if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
  114. double amount = [[dic ks_dictionaryValueForKey:@"data"] ks_doubleValueForKey:@"amountUsable"];
  115. double freezeAmount = [[dic ks_dictionaryValueForKey:@"data"] ks_doubleValueForKey:@"amountFrozen"];
  116. double noRecordAmount = [[dic ks_dictionaryValueForKey:@"data"] ks_doubleValueForKey:@"amountUnrecorded"];
  117. self.headView.moneyLabel.text = [NSString formatMoneyDoubleNum:amount];
  118. self.headView.freezeAmount.text = [NSString formatMoneyDoubleNum:freezeAmount];
  119. self.headView.noRecordAmount.text = [NSString formatMoneyDoubleNum:noRecordAmount];
  120. }
  121. else {
  122. [LOADING_MANAGER MBShowAUTOHidingInWindow:MESSAGEKEY];
  123. }
  124. } faliure:^(NSError * _Nonnull error) {
  125. }];
  126. }
  127. - (void)requestData {
  128. [LOADING_MANAGER showHUD];
  129. [KSNetworkingManager userAccountPageRequest:KS_POST paymentStatus:@"IN" searchDate:self.searchDate bizType:self.bizType postStatus:@"RECORDED" page:self.pages rows:self.rows success:^(NSDictionary * _Nonnull dic) {
  130. [LOADING_MANAGER removeHUD];
  131. [self endRefresh];
  132. if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
  133. NSArray *sourceArray = [[dic ks_dictionaryValueForKey:@"data"] ks_arrayValueForKey:@"rows"];
  134. for (NSDictionary *parm in sourceArray) {
  135. IncomeListModel *model = [[IncomeListModel alloc] initWithDictionary:parm];
  136. [self.dataArray addObject:model];
  137. }
  138. if (sourceArray.count < self.rows) {
  139. self.isLoadMore = NO;
  140. }
  141. }
  142. else {
  143. [LOADING_MANAGER MBShowAUTOHidingInWindow:MESSAGEKEY];
  144. }
  145. [self.tableView reloadData];
  146. [self changePromptLabelState];
  147. } faliure:^(NSError * _Nonnull error) {
  148. [LOADING_MANAGER removeHUD];
  149. [self endRefresh];
  150. if (self.networkAvaiable == NO) {
  151. [self setPromptString:@"暂无网络" imageName:@"no_networking" inView:self.tableView];
  152. }
  153. [self.dataArray removeAllObjects];
  154. [self.tableView reloadData];
  155. }];
  156. }
  157. #pragma mark --- table data source
  158. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  159. return self.dataArray.count;
  160. }
  161. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  162. IncomeListModel *model = self.dataArray[indexPath.row];
  163. NSString *preDay = nil;
  164. if (indexPath.row != 0) {
  165. IncomeListModel *preModel = self.dataArray[indexPath.row-1];
  166. preDay = preModel.timeDay;
  167. }
  168. MyIncomeListCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIncomeListCell"];
  169. [cell configSource:model preSourceDay:preDay];
  170. return cell;
  171. }
  172. #pragma mark --- lazying
  173. - (NSDateFormatter *)dateFormatter {
  174. if (!_dateFormatter) {
  175. _dateFormatter = [NSObject getDateformatter];
  176. }
  177. return _dateFormatter;
  178. }
  179. - (UITableView *)tableView {
  180. if (!_tableView) {
  181. _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
  182. _tableView.backgroundColor = [UIColor clearColor];
  183. _tableView.delegate = self;
  184. _tableView.dataSource = self;
  185. _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
  186. [_tableView registerNib:[UINib nibWithNibName:@"MyIncomeListCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"MyIncomeListCell"];
  187. _tableView.estimatedRowHeight = 125.0f;
  188. _tableView.rowHeight = UITableViewAutomaticDimension;
  189. UIView *bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 15)];
  190. bottomView.backgroundColor = HexRGB(0xf8f9fc);
  191. _tableView.tableFooterView = bottomView;
  192. }
  193. return _tableView;
  194. }
  195. - (IncomeHeaderView *)headView {
  196. if (!_headView) {
  197. _headView = [IncomeHeaderView shareInstance];
  198. MJWeakSelf;
  199. [_headView headerActionCallback:^(INCOME_ACTION action) {
  200. [weakSelf sortAction:action];
  201. }];
  202. }
  203. return _headView;
  204. }
  205. - (void)sortAction:(INCOME_ACTION)action {
  206. switch (action) {
  207. case INCOME_ACTION_TIME:
  208. {
  209. [self showPickerView];
  210. }
  211. break;
  212. case INCOME_ACTION_TYPE:
  213. {
  214. NSMutableArray *nameArray = [NSMutableArray array];
  215. for (NSDictionary *parm in self.sortArray) {
  216. [nameArray addObject:[parm ks_stringValueForKey:@"name"]];
  217. }
  218. MJWeakSelf;
  219. KSChoosePicker *picker = [[KSChoosePicker alloc] initWithTitle:@"" sourceData:nameArray lastChooseIndex:self.lastChooseIndex sureButtonColor:THEMECOLOR chooseReturnWithBlock:^(NSString * _Nonnull returnValue, NSInteger chooseIndex) {
  220. self.lastChooseIndex = chooseIndex;
  221. if (chooseIndex == 0) {
  222. weakSelf.headView.typeLabel.text = @"全部收入";
  223. weakSelf.bizType = nil;
  224. }
  225. else {
  226. weakSelf.headView.typeLabel.text = returnValue;
  227. NSDictionary *parm = self.sortArray[chooseIndex];
  228. weakSelf.bizType = [parm ks_stringValueForKey:@"bizType"];
  229. }
  230. weakSelf.headView.secondArrowUp = NO;
  231. [weakSelf refreshAndRequestData];
  232. } cancel:^{
  233. self.headView.secondArrowUp = NO;
  234. }];
  235. [picker showPicker];
  236. }
  237. break;
  238. case INCOME_ACTION_WITHDRAW:
  239. {
  240. WithdrawViewController *ctrl = [[WithdrawViewController alloc] init];
  241. [self.navigationController pushViewController:ctrl animated:YES];
  242. }
  243. break;
  244. case INCOME_ACTION_FREEZE:
  245. {
  246. FreezeListViewController *ctrl = [[FreezeListViewController alloc] init];
  247. [self.navigationController pushViewController:ctrl animated:YES];
  248. }
  249. break;
  250. case INCOME_ACTION_NORECORD:
  251. {
  252. NoRecordViewController *ctrl = [[NoRecordViewController alloc] init];
  253. [self.navigationController pushViewController:ctrl animated:YES];
  254. }
  255. break;
  256. default:
  257. break;
  258. }
  259. }
  260. - (void)showPickerView {
  261. [self.dateFormatter setDateFormat:@"yyyy-MM"];
  262. NSDate *preDate = [NSDate date];
  263. if (![NSString isEmptyString:self.searchDate]) {
  264. preDate = [self.dateFormatter dateFromString:self.searchDate];
  265. }
  266. KSFullDatePicker *pickerView = [[KSFullDatePicker alloc] initWithTitle:@"" date:preDate pickMode:KSDATEPICKER_MODE_YEAR_MONTH sureButtonColor:THEMECOLOR selectDateBlock:^(NSString *date) {
  267. self.searchDate = date;
  268. NSString *displayTime = [self getTimeDisplay:date];
  269. [self.headView.timeLabel setText:displayTime];
  270. [self resetPickerStatus];
  271. [self refreshAndRequestData];//
  272. } cancleBlock:^{
  273. [self resetPickerStatus];
  274. }];
  275. [pickerView show];
  276. }
  277. - (NSString *)getTimeDisplay:(NSString *)chooseMonth {
  278. [self.dateFormatter setDateFormat:@"yyyy-MM"];
  279. NSDate *chooseDate = [self.dateFormatter dateFromString:chooseMonth];
  280. [self.dateFormatter setDateFormat:@"yyyy年M月"];
  281. NSString *displayTime = [self.dateFormatter stringFromDate:chooseDate];
  282. return displayTime;
  283. }
  284. - (void)resetPickerStatus {
  285. self.headView.firstArrowUp = NO;
  286. }
  287. - (NSMutableArray *)sortArray {
  288. if (!_sortArray) {
  289. _sortArray = [NSMutableArray array];
  290. [_sortArray addObject:@{@"name" : @"全部收入", @"bizType": @""}];
  291. [_sortArray addObject:@{@"name" : @"VIP定制课", @"bizType": @"VIP_COURSE"}];
  292. [_sortArray addObject:@{@"name" : @"趣纠课", @"bizType": @"PRACTICE"}];
  293. [_sortArray addObject:@{@"name" : @"直播课", @"bizType": @"LIVE"}];
  294. [_sortArray addObject:@{@"name" : @"视频课", @"bizType": @"VIDEO"}];
  295. [_sortArray addObject:@{@"name" : @"乐谱", @"bizType": @"MUSIC"}];
  296. [_sortArray addObject:@{@"name" : @"直播课推荐", @"bizType": @"LIVE_SHARE"}];
  297. [_sortArray addObject:@{@"name" : @"视频课推荐", @"bizType": @"VIDEO_SHARE"}];
  298. [_sortArray addObject:@{@"name" : @"乐谱推荐", @"bizType": @"MUSIC_SHARE"}];
  299. [_sortArray addObject:@{@"name" : @"小酷Ai推荐", @"bizType": @"VIP_SHARE"}];
  300. [_sortArray addObject:@{@"name" : @"商品推荐", @"bizType": @"MALL_SHARE"}];
  301. [_sortArray addObject:@{@"name" : @"活动推广", @"bizType": @"ACTI_REGIST_SHARE"}];
  302. [_sortArray addObject:@{@"name" : @"专辑推荐", @"bizType": @"ALBUM_SHARE"}];
  303. }
  304. return _sortArray;
  305. }
  306. /*
  307. #pragma mark - Navigation
  308. // In a storyboard-based application, you will often want to do a little preparation before navigation
  309. - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
  310. // Get the new view controller using [segue destinationViewController].
  311. // Pass the selected object to the new view controller.
  312. }
  313. */
  314. @end