MyIncomeViewController.m 12 KB

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