123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441 |
- //
- // NotiferMessageViewController.m
- // KulexiuForTeacher
- //
- // Created by 王智 on 2022/4/18.
- //
- #import "NotiferMessageViewController.h"
- #import "NotiferMessageCell.h"
- #import "NotiferHeadView.h"
- #import "NotiferMessageModel.h"
- #import "KSBaseWKWebViewController.h"
- #import "CustomNavViewController.h"
- #import "HomeworkDetailViewController.h"
- #import <UIButton+EnlargeEdge.h>
- #import "NotiferNavView.h"
- #import "UserInfoManager.h"
- #import "FeedbackListViewController.h"
- #import "MyCourseViewController.h"
- #import "VIPCourseGroupViewController.h"
- #import "AccompanyCourseGroupViewController.h"
- #import "MusicRoomGroupViewController.h"
- #import "VipCouseDetailViewController.h"
- #import "AccompanyDetailViewController.h"
- @interface NotiferMessageViewController ()<UITableViewDelegate, UITableViewDataSource>
- @property (nonatomic, strong) NotiferNavView *navView;
- @property (nonatomic, strong) NotiferHeadView *headView;
- @property (nonatomic, strong) UITableView *tableView;
- @property (nonatomic, strong) NSString *groupType;
- @property (nonatomic, assign) BOOL hasUnreadCount;
- @end
- @implementation NotiferMessageViewController
- - (void)refreshView {
- [self queryUnReadCount];
- [self resetSourceAndRequest];
- }
- - (void)countUMEvent {
- [USER_MANAGER sendUMEvent:@"klx_notification"];
- }
- - (void)viewDidLoad {
- [super viewDidLoad];
- // Do any additional setup after loading the view.
- self.ks_prefersNavigationBarHidden = YES;
- [self configUI];
- self.hasUnreadCount = NO;
- [self countUMEvent];
- }
- - (void)viewWillAppear:(BOOL)animated {
- [super viewWillAppear:animated];
- [self queryUnReadCount];
- [self resetSourceAndRequest];
- }
- - (void)clearNotiferAction {
- if (self.hasUnreadCount == NO) {
- return;
- }
- [KSNetworkingManager batchSetReadRequest:KS_POST success:^(NSDictionary * _Nonnull dic) {
- if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
- [LOADING_MANAGER MBShowAUTOHidingInWindow:@"清除成功"];
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
- [self resetSourceAndRequest];
- });
- }
- else {
- [LOADING_MANAGER MBShowAUTOHidingInWindow:MESSAGEKEY];
- }
- } faliure:^(NSError * _Nonnull error) {
-
- }];
- }
- - (void)configUI {
- [self.view addSubview:self.navView];
- [self.navView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.right.top.mas_equalTo(self.view);
- make.height.mas_equalTo(kNaviBarHeight);
- }];
- [self.view addSubview:self.headView];
- [self.headView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.top.mas_equalTo(self.navView.mas_bottom);
- make.left.right.mas_equalTo(self.view);
- make.height.mas_equalTo(100);
- }]; [self.view addSubview:self.tableView];
- [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.right.mas_equalTo(self.view);
- make.top.mas_equalTo(self.headView.mas_bottom);
- make.bottom.mas_equalTo(self.view.mas_bottom).offset(-iPhoneXSafeBottomMargin);
- }];
-
- MJWeakSelf;
- self.tableView.mj_header = [KSGifRefreshHeader headerWithRefreshingBlock:^{
- [weakSelf resetSourceAndRequest];
- }];
- self.tableView.mj_footer = [KSGifRefreshFooter footerWithRefreshingBlock:^{
- if (weakSelf.isLoadMore) {
- weakSelf.pages += 1;
- [weakSelf requestData];
- }
- else {
- [weakSelf.tableView.mj_footer endRefreshingWithNoMoreData];
- }
- }];
- }
- - (void)resetSourceAndRequest {
- [self resetParamenter];
- [self requestData];
- [self queryUnReadCount];
- }
- - (void)queryUnReadCount {
- [KSNetworkingManager queryCountOfUnreadRequest:KS_GET success:^(NSDictionary * _Nonnull dic) {
- if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
- NSArray *countArray = [dic ks_arrayValueForKey:@"data"];
- NSInteger courseCount = 0;
- NSInteger sysCount = 0;
- for (NSDictionary *parm in countArray) {
- if ([[parm ks_stringValueForKey:@"key"] isEqualToString:@"COURSE"]) {
- courseCount = [parm ks_integerValueForKey:@"value"];
- }
- if ([[parm ks_stringValueForKey:@"key"] isEqualToString:@"SYSTEM"]) {
- sysCount = [parm ks_integerValueForKey:@"value"];
- }
- }
- if (courseCount > 0 || sysCount > 0) {
- self.hasUnreadCount = YES;
- }
- [self.headView configUnreadCountCourse:courseCount sysMessage:sysCount];
- }
- else {
- [LOADING_MANAGER MBShowAUTOHidingInWindow:MESSAGEKEY];
- }
- } faliure:^(NSError * _Nonnull error) {
-
- }];
- }
- - (void)resetParamenter {
- self.pages = 1;
- self.isLoadMore = YES;
- self.dataArray = [NSMutableArray array];
- [self.tableView.mj_footer resetNoMoreData];
- [self setPromptString:@"暂无消息" imageName:@"empty_message" inView:self.tableView];
- [self.tableView reloadData];
- }
- - (void)endRefresh {
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
- [self.tableView.mj_header endRefreshing];
- [self.tableView.mj_footer endRefreshing];
- });
- }
- - (void)requestData {
- [LOADING_MANAGER showHUD];
- [KSNetworkingManager sysMessageListRequest:KS_POST group:self.groupType page:self.pages rows:self.rows success:^(NSDictionary * _Nonnull dic) {
- [LOADING_MANAGER removeHUD];
- [self endRefresh];
- if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
- // rows
- NSArray *sourceArray = [[dic ks_dictionaryValueForKey:@"data"] ks_arrayValueForKey:@"rows"];
- for (NSDictionary *parm in sourceArray) {
- NotiferMessageModel *model = [[NotiferMessageModel alloc] initWithDictionary:parm];
- [self.dataArray addObject:model];
- }
- if (sourceArray.count < self.rows) {
- self.isLoadMore = NO;
- }
- }
- else {
- [LOADING_MANAGER MBShowAUTOHidingInWindow:MESSAGEKEY];
- }
- [self.tableView reloadData];
- [self changePromptLabelState];
- } faliure:^(NSError * _Nonnull error) {
- [LOADING_MANAGER removeHUD];
- [self endRefresh];
- if (self.networkAvaiable == NO) {
- [self setPromptString:@"暂无网络" imageName:@"no_networking" inView:self.tableView];
- }
- [self.dataArray removeAllObjects];
- [self.tableView reloadData];
- [self changePromptLabelState];
- }];
- }
- #pragma mark ----- table data source
- - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
- return self.dataArray.count;
- }
- - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
- NotiferMessageModel *model = self.dataArray[indexPath.row];
- NotiferMessageCell *cell = [tableView dequeueReusableCellWithIdentifier:@"NotiferMessageCell"];
- [cell configCellWithSource:model];
- return cell;
- }
- - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
- // 选择跳转
- NotiferMessageModel *model = self.dataArray[indexPath.row];
- if (model.readStatus == 0) {
- NotiferMessageCell *cell = [tableView cellForRowAtIndexPath:indexPath];
- [self readMessage:model baseCell:cell];
- }
- else {
- // 跳转页面
- [self toDetailViewWithTypeString:model.memo];
- }
- }
- - (void)readMessage:(NotiferMessageModel *)model baseCell:(NotiferMessageCell *)cell {
- [KSNetworkingManager setReadMessage:KS_POST messageId:model.internalBaseClassIdentifier success:^(NSDictionary * _Nonnull dic) {
- if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
- [self queryUnReadCount];
- model.readStatus = 1;
- cell.isRead = YES;
- // 跳转页面
- [self toDetailViewWithTypeString:model.memo];
- }
- else {
- [LOADING_MANAGER MBShowAUTOHidingInWindow:MESSAGEKEY];
- }
- } faliure:^(NSError * _Nonnull error) {
-
- }];
- }
- - (void)toDetailViewWithTypeString:(NSString *)memo {
-
- if (![NSString isEmptyString:memo]) {
- NSData *jsonData = [memo mj_JSONData];
- NSError *error;
- NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
- if (!error) {
- NSString *action = [dict ks_stringValueForKey:@"action"];
- if ([action isEqualToString:@"app"]) {
- NSString *pageType = [dict ks_stringValueForKey:@"pageTag"];
- if ([pageType isEqualToString:@"homework"]) { // 作业
- NSString *parmString = [dict ks_stringValueForKey:@"params"];
- NSData *parmData = [parmString mj_JSONData];
- NSDictionary *parm = [NSJSONSerialization JSONObjectWithData:parmData options:NSJSONReadingMutableContainers error:&error];
- if (!error) {
- HomeworkDetailViewController *detailVC = [[HomeworkDetailViewController alloc] init];
- detailVC.courseId = [parm ks_stringValueForKey:@"courseId"];
- [self.navigationController pushViewController:detailVC animated:YES];
- }
- }
- else if ([pageType isEqualToString:@"buyPractice"] || [pageType isEqualToString:@"courseRemind"]) {
- [self toCourseTable];
- }
- else if ([pageType isEqualToString:@"feedback"]) { //反馈
- [self toFeedback];
- }
- else if ([pageType isEqualToString:@"vipClass"]) { // 我的课程 ->vip定制课
- DISPLAY_INDEX index = DISPLAY_INDEX_VIP;
- MyCourseViewController *ctrl = [[MyCourseViewController alloc] init];
- [ctrl displayWithIndex:index];
- [self.navigationController pushViewController:ctrl animated:YES];
- }
- else if ([pageType isEqualToString:@"practiceClass"]) { // 我的课程 ->趣纠课
- DISPLAY_INDEX index = DISPLAY_INDEX_FIRST;
- MyCourseViewController *ctrl = [[MyCourseViewController alloc] init];
- [ctrl displayWithIndex:index];
- [self.navigationController pushViewController:ctrl animated:YES];
- }
- else if ([pageType isEqualToString:@"liveClass"]) { // 我的课程 ->直播课
- DISPLAY_INDEX index = DISPLAY_INDEX_LIVE;
- MyCourseViewController *ctrl = [[MyCourseViewController alloc] init];
- [ctrl displayWithIndex:index];
- [self.navigationController pushViewController:ctrl animated:YES];
- }
- else if ([pageType isEqualToString:@"videoClass"]) { // 我的课程 ->视频课
- DISPLAY_INDEX index = DISPLAY_INDEX_VIDEO;
- MyCourseViewController *ctrl = [[MyCourseViewController alloc] init];
- [ctrl displayWithIndex:index];
- [self.navigationController pushViewController:ctrl animated:YES];
- }
- else if ([pageType isEqualToString:@"coursePlan"]) { // 课程规划
- NSString *parmString = [dict ks_stringValueForKey:@"params"];
- NSData *parmData = [parmString mj_JSONData];
- NSError *error;
- NSDictionary *parm = [NSJSONSerialization JSONObjectWithData:parmData options:NSJSONReadingMutableContainers error:&error];
- if (!error) {
- NSString *courseType = [parm ks_stringValueForKey:@"courseType"];
- NSString *courseGroupId = [parm ks_stringValueForKey:@"courseGroupId"];
- if ([courseType isEqualToString:@"VIP"]) {
- VIPCourseGroupViewController *ctrl = [[VIPCourseGroupViewController alloc] init];
- ctrl.courseGroupId = courseGroupId;
- [self.navigationController pushViewController:ctrl animated:YES];
- }
- else if ([courseType isEqualToString:@"PRACTICE"]) {
- AccompanyCourseGroupViewController *ctrl = [[AccompanyCourseGroupViewController alloc] init];
- ctrl.courseGroupId = courseGroupId;
- [self.navigationController pushViewController:ctrl animated:YES];
- }
- else if ([courseType isEqualToString:@"PIANO_ROOM_CLASS"]) {
- MusicRoomGroupViewController *ctrl = [[MusicRoomGroupViewController alloc] init];
- ctrl.courseGroupId = courseGroupId;
- [self.navigationController pushViewController:ctrl animated:YES];
- }
- }
- }
- else if ([pageType isEqualToString:@"evaluate"]) { // 老师评价
- NSString *parmString = [dict ks_stringValueForKey:@"params"];
- NSData *parmData = [parmString mj_JSONData];
- NSError *error;
- NSDictionary *parm = [NSJSONSerialization JSONObjectWithData:parmData options:NSJSONReadingMutableContainers error:&error];
- if (!error) {
- NSString *courseType = [parm ks_stringValueForKey:@"courseType"];
- NSString *courseId = [parm ks_stringValueForKey:@"courseId"];
- NSString *courseGroupId = [parm ks_stringValueForKey:@"courseGroupId"];
- if ([courseType isEqualToString:@"VIP"]) {
- VipCouseDetailViewController *ctrl = [[VipCouseDetailViewController alloc] init];
- ctrl.courseId = courseId;
- ctrl.courseGroupId = courseGroupId;
- [self.navigationController pushViewController:ctrl animated:YES];
- }
- else if ([courseType isEqualToString:@"PRACTICE"]) {
- AccompanyDetailViewController *ctrl = [[AccompanyDetailViewController alloc] init];
- ctrl.courseId = courseId;
- ctrl.courseGroupId = courseGroupId;
- [self.navigationController pushViewController:ctrl animated:YES];
- }
- }
- }
- }
- else {
- NSString *webUrl = [dict ks_stringValueForKey:@"url"];
- if (![NSString isEmptyString:webUrl]) {
- KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
- webCtrl.url = [webUrl getUrlEndcodeString];
- CustomNavViewController *navCtrl = self.tabBarController.selectedViewController;
- [navCtrl pushViewController:webCtrl animated:YES];
- }
- }
- }
- }
- }
- - (void)toFeedback {
- FeedbackListViewController *ctrl = [[FeedbackListViewController alloc] init];
- [self.navigationController pushViewController:ctrl animated:YES];
- }
- - (void)toCourseTable {
- [self selectBarHomeWithIndex:2];
- [self.navigationController popToRootViewControllerAnimated:YES];
- }
- #pragma mark ---- lazying
- - (NotiferNavView *)navView {
- if (!_navView) {
- _navView = [NotiferNavView shareInstance];
- MJWeakSelf;
- [_navView notiferNavAction:^(BOOL isBack) {
- if (isBack) {
- [weakSelf backAction];
- }
- else {
- [weakSelf clearNotiferAction];
- }
- }];
- }
- return _navView;
- }
- - (NotiferHeadView *)headView {
- if (!_headView) {
- _headView = [NotiferHeadView shareIntance];
- MJWeakSelf;
- [_headView chooseTypeCallback:^(NOTIFER_TYPE type) {
- [weakSelf chooseTypeSort:type];
- }];
- }
- return _headView;
- }
- - (void)chooseTypeSort:(NOTIFER_TYPE)type {
- switch (type) {
- case NOTIFER_TYPE_ALL:
- {
- self.groupType = nil;
- }
- break;
- case NOTIFER_TYPE_COURSE:
- {
- self.groupType = @"COURSE";
- }
- break;
- case NOTIFER_TYPE_SYSMSG:
- {
- self.groupType = @"SYSTEM";
- }
- break;
- default:
- break;
- }
- [self resetSourceAndRequest];
- }
- - (UITableView *)tableView {
- if (!_tableView) {
- _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
- _tableView.backgroundColor = [UIColor clearColor];
- _tableView.delegate = self;
- _tableView.dataSource = self;
- _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
- [_tableView registerNib:[UINib nibWithNibName:@"NotiferMessageCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"NotiferMessageCell"];
- _tableView.rowHeight = 85.0f;
- UIView *bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 15)];
- bottomView.backgroundColor = HexRGB(0xf6f8f9);
- _tableView.tableFooterView = bottomView;
- }
- return _tableView;
- }
- /*
- #pragma mark - Navigation
- // In a storyboard-based application, you will often want to do a little preparation before navigation
- - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
- // Get the new view controller using [segue destinationViewController].
- // Pass the selected object to the new view controller.
- }
- */
- @end
|