MinePageCourseView.m 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806
  1. //
  2. // MinePageCourseView.m
  3. // KulexiuForTeacher
  4. //
  5. // Created by Kyle on 2022/3/30.
  6. //
  7. #import "MinePageCourseView.h"
  8. #import "MinePageSortView.h"
  9. #import "KSBaseWKWebViewController.h"
  10. #import "MusicMessageModel.h"
  11. #import "AccompanyCourseCell.h"
  12. #import "LiveCourseCell.h"
  13. #import "MinePageMusicCell.h"
  14. #import "AuthDisplayView.h"
  15. #import "AccompanyLessonModel.h"
  16. #import "KSChatConversationViewController.h"
  17. #import "AccompanyDetailViewController.h"
  18. #import <KSToolLibrary/KSFullDatePicker.h>
  19. #import "MusicSortView.h"
  20. #import <KSToolLibrary/KSChoosePicker.h>
  21. @interface MinePageCourseView ()<UITableViewDelegate,UITableViewDataSource>
  22. @property (nonatomic, strong) NSMutableArray *dataArray;
  23. @property (nonatomic, strong) StateView *promptView;
  24. @property (nonatomic, strong) UIView *promptPlaceView;
  25. @property (nonatomic, assign) BOOL networkAvaiable; // 网络是否可用
  26. @property (nonatomic, assign) BOOL isLoadMore;
  27. @property (nonatomic, assign) NSInteger rows;
  28. @property (nonatomic, assign) NSInteger pages;
  29. @property (nonatomic, strong) AuthDisplayView *authView;
  30. @property (nonatomic, strong) MinePageSortView *sortView;
  31. @property (nonatomic, assign) BOOL teacherAuthPass; // 是否通过老师审核
  32. @property (nonatomic, assign) BOOL musicianPass; // 是否通过音乐人审核
  33. @property (nonatomic, strong) NSString *chooseMonth;
  34. @property (nonatomic, strong) NSDateFormatter *dateFormatter;
  35. @property (nonatomic, strong) MusicSortView *searchView;
  36. @property (nonatomic, strong) NSString *searchKey;
  37. @property (nonatomic, strong) NSString *subjectIds;
  38. @end
  39. @implementation MinePageCourseView
  40. - (instancetype)initWithFrame:(CGRect)frame {
  41. self = [super initWithFrame:frame];
  42. if (self) {
  43. self.backgroundColor = HexRGB(0xf6f8f9);
  44. self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height) style:UITableViewStylePlain];
  45. self.tableView.backgroundColor = HexRGB(0xf6f8f9);
  46. self.tableView.showsVerticalScrollIndicator = NO;
  47. self.tableView.dataSource = self;
  48. self.tableView.delegate = self;
  49. self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
  50. [self addSubview:self.tableView];
  51. self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
  52. [self.dateFormatter setDateFormat:@"yyyy-MM"];
  53. NSDate *currentDate = [NSDate date];
  54. self.chooseMonth = [self.dateFormatter stringFromDate:currentDate];
  55. UIView *headView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 10)];
  56. headView.backgroundColor = HexRGB(0xf6f8f9);
  57. self.tableView.tableHeaderView = headView;
  58. UIView *bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 10)];
  59. bottomView.backgroundColor = HexRGB(0xf6f8f9);
  60. self.tableView.tableFooterView = bottomView;
  61. [self.tableView registerNib:[UINib nibWithNibName:@"AccompanyCourseCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"AccompanyCourseCell"];
  62. [self.tableView registerNib:[UINib nibWithNibName:@"LiveCourseCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"LiveCourseCell"];
  63. [self.tableView registerNib:[UINib nibWithNibName:@"MinePageMusicCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"MinePageMusicCell"];
  64. MJWeakSelf;
  65. self.tableView.mj_header = [KSGifRefreshHeader headerWithRefreshingBlock:^{
  66. [weakSelf resetParamenter];
  67. [weakSelf requestData];
  68. }];
  69. self.tableView.mj_footer = [KSGifRefreshFooter footerWithRefreshingBlock:^{
  70. if (weakSelf.isLoadMore) {
  71. weakSelf.pages += 1;
  72. [weakSelf requestData];
  73. }
  74. else {
  75. [weakSelf.tableView.mj_footer endRefreshingWithNoMoreData];
  76. }
  77. }];
  78. }
  79. return self;
  80. }
  81. - (void)endRefresh {
  82. @weakObj(self);
  83. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  84. @strongObj(self);
  85. [self.tableView.mj_header endRefreshing];
  86. [self.tableView.mj_footer endRefreshing];
  87. });
  88. }
  89. - (void)refreshAndRequestData {
  90. [self resetParamenter];
  91. [self requestData];
  92. }
  93. - (void)resetParamenter {
  94. self.isLoadMore = YES;
  95. self.pages = 1;
  96. self.rows = 10;
  97. self.dataArray = [NSMutableArray array];
  98. [self.tableView.mj_footer resetNoMoreData];
  99. [self setPromptString:@"本月没有课程" imageName:@"empty_course" inView:self.tableView];
  100. [self.tableView reloadData];
  101. }
  102. - (void)requestData {
  103. if (self.selectIndex == 1) { // 陪练课
  104. [KSNetworkingManager accompanyCourseRequest:KS_POST classMonth:self.chooseMonth status:nil subjectId:nil page:self.pages rows:self.rows success:^(NSDictionary * _Nonnull dic) {
  105. [self endRefresh];
  106. if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
  107. NSArray *sourceArray = [[dic ks_dictionaryValueForKey:@"data"] ks_arrayValueForKey:@"rows"];
  108. for (NSDictionary *parm in sourceArray) {
  109. AccompanyLessonModel *model = [[AccompanyLessonModel alloc] initWithDictionary:parm];
  110. [self.dataArray addObject:model];
  111. }
  112. if (sourceArray.count < self.rows) {
  113. self.isLoadMore = NO;
  114. }
  115. }
  116. else {
  117. [LOADING_MANAGER MBShowAUTOHidingInWindow:MESSAGEKEY];
  118. }
  119. [self.tableView reloadData];
  120. [self changePromptLabelStateWithArray:self.dataArray];
  121. } faliure:^(NSError * _Nonnull error) {
  122. [self endRefresh];
  123. if (self.networkAvaiable == NO) {
  124. [self setPromptString:@"暂无网络" imageName:@"no_networking" inView:self.tableView];
  125. }
  126. [self.dataArray removeAllObjects];
  127. [self.tableView reloadData];
  128. [self changePromptLabelStateWithArray:self.dataArray];
  129. }];
  130. }
  131. else if (self.selectIndex == 2) { // 直播课
  132. [KSNetworkingManager LiveCourseGroupRequest:KS_POST groupStatus:@"APPLY" page:self.pages rows:self.rows success:^(NSDictionary * _Nonnull dic) {
  133. [self endRefresh];
  134. if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
  135. NSArray *sourceArray = [[dic ks_dictionaryValueForKey:@"data"] ks_arrayValueForKey:@"rows"];
  136. for (NSDictionary *parm in sourceArray) {
  137. LiveCourseModel *model = [[LiveCourseModel alloc] initWithDictionary:parm];
  138. [self.dataArray addObject:model];
  139. }
  140. if (sourceArray.count < self.rows) {
  141. self.isLoadMore = NO;
  142. }
  143. }
  144. else {
  145. [LOADING_MANAGER MBShowAUTOHidingInWindow:MESSAGEKEY];
  146. }
  147. [self.tableView reloadData];
  148. [self changePromptLabelStateWithArray:self.dataArray];
  149. } faliure:^(NSError * _Nonnull error) {
  150. [self endRefresh];
  151. if (self.networkAvaiable == NO) {
  152. [self setPromptString:@"暂无网络" imageName:@"no_networking" inView:self.tableView];
  153. }
  154. [self.dataArray removeAllObjects];
  155. [self.tableView reloadData];
  156. [self changePromptLabelStateWithArray:self.dataArray];
  157. }];
  158. }
  159. else if (self.selectIndex == 4) { // 乐谱
  160. [KSNetworkingManager musicListRequest:KS_POST auditStatus:@"PASS" page:self.pages rows:self.rows search:self.searchKey subjectIds:self.subjectIds success:^(NSDictionary * _Nonnull dic) {
  161. [self endRefresh];
  162. if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
  163. NSArray *sourceArray = [[dic ks_dictionaryValueForKey:@"data"] ks_arrayValueForKey:@"rows"];
  164. for (NSDictionary *parm in sourceArray) {
  165. MusicMessageModel *model = [[MusicMessageModel alloc] initWithDictionary:parm];
  166. [self.dataArray addObject:model];
  167. }
  168. if (sourceArray.count < self.rows) {
  169. self.isLoadMore = NO;
  170. }
  171. }
  172. else {
  173. [LOADING_MANAGER MBShowAUTOHidingInWindow:MESSAGEKEY];
  174. }
  175. [self.tableView reloadData];
  176. [self changePromptLabelStateWithArray:self.dataArray];
  177. } faliure:^(NSError * _Nonnull error) {
  178. [self endRefresh];
  179. if (self.networkAvaiable == NO) {
  180. [self setPromptString:@"暂无网络" imageName:@"no_networking" inView:self.tableView];
  181. }
  182. [self.dataArray removeAllObjects];
  183. [self.tableView reloadData];
  184. [self changePromptLabelStateWithArray:self.dataArray];
  185. }];
  186. }
  187. }
  188. - (void)beginRefreshImmediately {
  189. [self.tableView.mj_header beginRefreshing];
  190. }
  191. - (void)beginFirstRefresh {
  192. if (!self.isHeaderRefreshed) {
  193. [self beginRefreshImmediately];
  194. }
  195. }
  196. - (void)selectCellAtIndexPath:(NSIndexPath *)indexPath {
  197. if (self.lastSelectedIndexPath == indexPath) {
  198. return;
  199. }
  200. if (self.lastSelectedIndexPath != nil) {
  201. UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:self.lastSelectedIndexPath];
  202. [cell setSelected:NO animated:NO];
  203. }
  204. UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
  205. [cell setSelected:YES animated:NO];
  206. self.lastSelectedIndexPath = indexPath;
  207. }
  208. - (void)layoutSubviews {
  209. [super layoutSubviews];
  210. CGFloat topHeight = [MinePageSortView getViewHeight];
  211. self.tableView.frame = CGRectMake(0, topHeight, self.bounds.size.width, self.bounds.size.height - topHeight);
  212. if (self.selectIndex != 4) {
  213. if (![self.subviews containsObject:self.sortView]) {
  214. [self addSubview:self.sortView];
  215. if (self.teacherAuthPass == NO) {
  216. [self showAuthView];
  217. }
  218. else {
  219. [self hideAuthView];
  220. }
  221. }
  222. }
  223. else {
  224. if (![self.subviews containsObject:self.searchView]) {
  225. [self addSubview:self.searchView];
  226. // 曲谱 sort
  227. if (self.teacherAuthPass == NO) {
  228. [self showAuthView];
  229. }
  230. else {
  231. [self hideAuthView];
  232. }
  233. }
  234. }
  235. }
  236. #pragma mark - UITableViewDataSource
  237. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  238. return self.dataArray.count;
  239. }
  240. - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
  241. if (self.selectIndex == 1) {
  242. return 147.0f;
  243. }
  244. else if (self.selectIndex == 2) {
  245. return 182.0f;
  246. }
  247. else {
  248. return 80.0f;;
  249. }
  250. }
  251. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  252. if (self.selectIndex == 1) {
  253. AccompanyLessonModel *model = self.dataArray[indexPath.row];
  254. AccompanyCourseCell *cell = [tableView dequeueReusableCellWithIdentifier:@"AccompanyCourseCell"];
  255. MJWeakSelf;
  256. [cell configWithSource:model actionCallback:^(ACCOMPANY_TYPE type, AccompanyLessonModel * _Nonnull source) {
  257. [weakSelf courseOperation:type sourceModel:source];
  258. }];
  259. return cell;
  260. }
  261. else if (self.selectIndex == 2) {
  262. LiveCourseCell *cell = [tableView dequeueReusableCellWithIdentifier:@"LiveCourseCell"];
  263. LiveCourseModel *model = self.dataArray[indexPath.row];
  264. [cell configCellWithSource:model groupStatus:COURSERSTATUS_APPLY hideStatusView:YES];
  265. return cell;
  266. }
  267. else {
  268. MusicMessageModel *model = self.dataArray[indexPath.row];
  269. MinePageMusicCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MinePageMusicCell"];
  270. ROWINDEX rowIndex = ROWINDEX_MIDDLE;
  271. if (indexPath.row == 0 && self.dataArray.count == 1) {
  272. rowIndex = ROWINDEX_TOP_BOTTOM;
  273. }
  274. else if (indexPath.row == 0) {
  275. rowIndex = ROWINDEX_TOP;
  276. }
  277. else if (indexPath.row == self.dataArray.count - 1) {
  278. rowIndex = ROWINDEX_BOTTOM;
  279. }
  280. [cell configWithMessage:model rowIndex:rowIndex];
  281. return cell;
  282. }
  283. }
  284. - (void)courseOperation:(ACCOMPANY_TYPE)type sourceModel:(AccompanyLessonModel *)model {
  285. switch (type) {
  286. case ACCOMPANY_TYPE_CHAT: // 聊天
  287. {
  288. TUIChatConversationModel *conversation = [[TUIChatConversationModel alloc] init];
  289. conversation.userID = model.imUserId;
  290. KSChatConversationViewController *ctrl = [[KSChatConversationViewController alloc] init];
  291. ctrl.conversation = conversation;
  292. [self.naviController pushViewController:ctrl animated:YES];
  293. }
  294. break;
  295. case ACCOMPANY_TYPE_ADJUST: // 调整
  296. {
  297. [self showAdjustPicker:model];
  298. }
  299. break;
  300. case ACCOMPANY_DETAIL: // 陪练课详情
  301. {
  302. [self showAccompanyDetail:model];
  303. }
  304. break;
  305. default:
  306. break;
  307. }
  308. }
  309. - (void)showAccompanyDetail:(AccompanyLessonModel *)model {
  310. AccompanyDetailViewController *detailVC = [[AccompanyDetailViewController alloc] init];
  311. detailVC.courseId = model.courseId;
  312. detailVC.courseGroupId = model.courseGoupId;
  313. detailVC.studentId = model.userId;
  314. [self.naviController pushViewController:detailVC animated:YES];
  315. }
  316. - (void)showAdjustPicker:(AccompanyLessonModel *)model {
  317. KSFullDatePicker *picker = [[KSFullDatePicker alloc] initWithTitle:@"课时调整" date:[NSDate date] pickMode:KSDATEPICKER_MODE_DAY_TIME sureButtonColor:THEMECOLOR selectDateBlock:^(NSString *date) {
  318. [self courseAdjustAction:model];
  319. } cancleBlock:^{
  320. }];
  321. [picker show];
  322. }
  323. - (void)courseAdjustAction:(AccompanyLessonModel *)model {
  324. }
  325. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  326. if (self.selectIndex == 1) {
  327. AccompanyLessonModel *model = self.dataArray[indexPath.row];
  328. [self showAccompanyDetail:model];
  329. }
  330. else if (self.selectIndex == 2) { // 直播课详情
  331. LiveCourseModel *model = self.dataArray[indexPath.row];
  332. KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
  333. NSString *url = [NSString stringWithFormat:@"%@%@%.0f", WEBHOST, @"/#/liveDetail?groupId=",model.courseGroupId];
  334. ctrl.url = url;
  335. [self.naviController pushViewController:ctrl animated:YES];
  336. }
  337. else if (self.selectIndex == 4) { // 曲谱详情
  338. MusicMessageModel *model = self.dataArray[indexPath.row];
  339. KSBaseWKWebViewController *ctrl = [[KSBaseWKWebViewController alloc] init];
  340. ctrl.url = [NSString stringWithFormat:@"%@%@%@", WEBHOST, @"/#/music-detail?id=",model.internalBaseClassIdentifier];
  341. [self.naviController pushViewController:ctrl animated:YES];
  342. }
  343. }
  344. /**
  345. 设置没有数据时的显示
  346. @param promptString 提示语
  347. @param imgName 图片名称
  348. @param view 显示在什么地方
  349. */
  350. - (void)setPromptString:(NSString *)promptString imageName:(NSString *)imgName inView:(UIView *)view {
  351. if (self.promptView != nil) {
  352. [self.promptView removeFromSuperview];
  353. }
  354. else {
  355. self.promptView = [[StateView alloc]init];
  356. self.promptView.frame = CGRectMake(0, 0, kScreenWidth, kScreenHeight - 300);
  357. }
  358. _promptPlaceView = view;
  359. //当请求不到数据时 ,自定义提示view 将会出现;
  360. self.promptView.imageName = imgName;
  361. self.promptView.alpha = 0.0f;
  362. [self.promptView setText:promptString];
  363. [view addSubview:self.promptView];
  364. }
  365. // 结束刷新后调用方法
  366. - (void)changePromptLabelStateWithArray:(NSMutableArray *)array {
  367. NSInteger count;
  368. if (array.count) {
  369. count = array.count;
  370. } else {
  371. count = 0;
  372. }
  373. [UIView animateWithDuration:0.1 animations:^{
  374. [[self promptView] setAlpha:count ? 0.0f :1.0f ] ;
  375. }] ;
  376. }
  377. - (BOOL)networkAvaiable {
  378. return [self checkNetworkAvaiable];
  379. }
  380. - (BOOL)checkNetworkAvaiable {
  381. BOOL isExistenceNetwork = YES;
  382. Reachability *reach = [Reachability reachabilityWithHostName:@"www.apple.com"];
  383. switch ([reach currentReachabilityStatus]) {
  384. case NotReachable:
  385. isExistenceNetwork = NO;
  386. //NSLog(@"notReachable");
  387. break;
  388. case ReachableViaWiFi:
  389. isExistenceNetwork = YES;
  390. //NSLog(@"WIFI");
  391. break;
  392. case ReachableViaWWAN:
  393. isExistenceNetwork = YES;
  394. //NSLog(@"3G");
  395. break;
  396. }
  397. return isExistenceNetwork;
  398. }
  399. #pragma mark ----- lazying
  400. - (NSDateFormatter *)dateFormatter {
  401. if (!_dateFormatter) {
  402. _dateFormatter = [NSObject getDateformatter];
  403. }
  404. return _dateFormatter;
  405. }
  406. - (MinePageSortView *)sortView {
  407. if (!_sortView) {
  408. _sortView = [MinePageSortView shareInstance];
  409. [self.dateFormatter setDateFormat:@"yyyy-MM"];
  410. NSDate *currentDate = [NSDate date];
  411. SORTVIEWTYPE type = [self getSortViewType:self.selectIndex];
  412. _sortView.viewType = type;
  413. [_sortView.timeLabel setText:[self.dateFormatter stringFromDate:currentDate]];
  414. CGFloat topHeight = [MinePageSortView getViewHeight];
  415. _sortView.frame = CGRectMake(0, 0, KPortraitWidth, topHeight);
  416. MJWeakSelf;
  417. [_sortView sortActionCallback:^(MINEPAGESORT type) {
  418. [weakSelf sortViewAction:type];
  419. }];
  420. }
  421. return _sortView;
  422. }
  423. - (SORTVIEWTYPE)getSortViewType:(NSInteger)index {
  424. if (index == 1) {
  425. return SORTVIEWTYPE_ACCOMPANY;
  426. }
  427. else if (index == 2) {
  428. return SORTVIEWTYPE_LIVE;
  429. }
  430. else {
  431. return SORTVIEWTYPE_VIDEO;
  432. }
  433. }
  434. - (void)sortViewAction:(MINEPAGESORT)type {
  435. switch (type) {
  436. case MINEPAGESORT_TIME:
  437. {
  438. [self showPickerView];
  439. }
  440. break;
  441. case MINEPAGESORT_SETTING:
  442. {
  443. [self settingAction];
  444. }
  445. break;
  446. default:
  447. break;
  448. }
  449. }
  450. - (void)settingAction {
  451. if (self.selectIndex == 1) { // 陪练课设置
  452. KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
  453. webCtrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/practiceSetting"];
  454. [self.naviController pushViewController:webCtrl animated:YES];
  455. }
  456. else if (self.selectIndex == 2) { // 直播课
  457. KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
  458. webCtrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/liveCreate"];
  459. [self.naviController pushViewController:webCtrl animated:YES];
  460. }
  461. else if (self.selectIndex == 4) { // 曲谱上传
  462. KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
  463. webCtrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/music-upload"];
  464. [self.naviController pushViewController:webCtrl animated:YES];
  465. }
  466. }
  467. - (void)showPickerView {
  468. KSFullDatePicker *picker = [[KSFullDatePicker alloc] initWithTitle:@"" date:[NSDate date] pickMode:KSDATEPICKER_MODE_YEAR_MONTH sureButtonColor:THEMECOLOR selectDateBlock:^(NSString *date) {
  469. self.chooseMonth = date;
  470. NSString *displayTime = [self getTimeDisplay:date];
  471. [self.sortView.timeLabel setText:displayTime];
  472. // 请求数据
  473. [self refreshAndRequestData];
  474. } cancleBlock:^{
  475. }];
  476. [picker show];
  477. }
  478. - (NSString *)getTimeDisplay:(NSString *)chooseMonth {
  479. [self.dateFormatter setDateFormat:@"yyyy-MM"];
  480. NSDate *chooseDate = [self.dateFormatter dateFromString:chooseMonth];
  481. NSString *displayTime = [self.dateFormatter stringFromDate:chooseDate];
  482. return displayTime;
  483. }
  484. - (void)setTeaherStatus:(NSString *)teaherStatus {
  485. _teaherStatus = teaherStatus;
  486. if ([teaherStatus isEqualToString:@"UNPAALY"]) { // 未申请
  487. self.teacherAuthPass = NO;
  488. }
  489. else if ([teaherStatus isEqualToString:@"DOING"]) { // 审核中
  490. self.teacherAuthPass = NO;
  491. }
  492. else if ([teaherStatus isEqualToString:@"UNPASS"]) { // 不通过
  493. self.teacherAuthPass = NO;
  494. }
  495. else {
  496. self.teacherAuthPass = YES;
  497. }
  498. // 如果
  499. if (self.selectIndex == 2) { // 直播课
  500. if (self.liveFlag == NO) { // 无直播权限直接改成未通过
  501. self.teacherAuthPass = NO;
  502. }
  503. }
  504. if (self.selectIndex == 1 || self.selectIndex == 2 || self.selectIndex == 4) {
  505. if (self.teacherAuthPass == NO) {
  506. [self showAuthView];
  507. }
  508. else {
  509. [self hideAuthView];
  510. }
  511. }
  512. }
  513. - (void)showAuthView {
  514. [self configAuthDisplay];
  515. if ([self.subviews containsObject:self.authView]) {
  516. [self bringSubviewToFront:self.authView];
  517. }
  518. else {
  519. [self addSubview:self.authView];
  520. [self.authView mas_makeConstraints:^(MASConstraintMaker *make) {
  521. make.left.top.bottom.right.mas_equalTo(self);
  522. }];
  523. }
  524. }
  525. - (void)configAuthDisplay {
  526. [self.authView configDisplayMessage:[self getAuthDisplayMessage]];
  527. if (self.selectIndex == 1) { // 陪练课
  528. if ([self.teaherStatus isEqualToString:@"DOING"]) {
  529. self.authView.sureButton.userInteractionEnabled = NO;
  530. self.authView.sureButton.hidden = YES;
  531. }
  532. else {
  533. self.authView.sureButton.userInteractionEnabled = YES;
  534. self.authView.sureButton.hidden = NO;
  535. }
  536. }
  537. else if (self.selectIndex == 2) { // 直播课
  538. if ([self.teaherStatus isEqualToString:@"DOING"]) {
  539. self.authView.sureButton.userInteractionEnabled = NO;
  540. self.authView.sureButton.hidden = YES;
  541. }
  542. else {
  543. if ([self.teaherStatus isEqual:@"PASS"] && self.liveFlag == NO) {
  544. [self.authView.sureButton setTitle:@"立即开通" forState:UIControlStateNormal];
  545. }
  546. else {
  547. [self.authView.sureButton setTitle:@"去认证" forState:UIControlStateNormal];
  548. }
  549. self.authView.sureButton.userInteractionEnabled = YES;
  550. self.authView.sureButton.hidden = NO;
  551. }
  552. }
  553. else { // 曲谱
  554. if ([self.teaherStatus isEqualToString:@"DOING"]) {
  555. self.authView.sureButton.userInteractionEnabled = NO;
  556. self.authView.sureButton.hidden = YES;
  557. }
  558. else {
  559. self.authView.sureButton.userInteractionEnabled = YES;
  560. self.authView.sureButton.hidden = NO;
  561. }
  562. }
  563. }
  564. - (void)hideAuthView {
  565. if ([self.subviews containsObject:self.authView]) {
  566. [self.authView removeFromSuperview];
  567. self.authView = nil;
  568. }
  569. }
  570. - (AuthDisplayView *)authView {
  571. if (!_authView) {
  572. _authView = [AuthDisplayView shareInstance];
  573. [_authView.imageView setImage:[UIImage imageNamed:[self getAuthDisplayImage]]];
  574. MJWeakSelf;
  575. [_authView sureCallback:^{
  576. [weakSelf authAction];
  577. }];
  578. }
  579. return _authView;
  580. }
  581. - (NSString *)getAuthDisplayImage {
  582. if (self.selectIndex == 1) {
  583. return @"authTeacher_accompany";
  584. }
  585. else if (self.selectIndex == 2) {
  586. return @"authTeacher_Live";
  587. }
  588. else {
  589. return @"authMuscian";
  590. }
  591. }
  592. - (NSString *)getAuthDisplayMessage {
  593. if (self.selectIndex == 1) { // 陪练课
  594. if ([self.teaherStatus isEqualToString:@"DOING"]) { // 审核中
  595. return @"您已提交认证申请,请耐心等待审核结果~";
  596. }
  597. else {
  598. return @"您还没有完成达人认证,认证后才可设置陪练课哦~";
  599. }
  600. }
  601. else if (self.selectIndex == 2) { // 直播课
  602. if ([self.teaherStatus isEqualToString:@"DOING"]) { // 审核中
  603. return @"您已提交认证申请,请耐心等待审核结果~";
  604. }
  605. else {
  606. if ([self.teaherStatus isEqualToString:@"PASS"] && self.liveFlag == NO) { // 如果达人认证通过
  607. return @"您尚未开通直播服务,开通后即可创建直播课程~";
  608. }
  609. return @"您还没有完成达人认证,认证后才可创建直播课哦~";
  610. }
  611. }
  612. else { // 曲谱
  613. if ([self.teaherStatus isEqualToString:@"DOING"]) { // 审核中
  614. return @"您已提交认证申请,请耐心等待审核结果~";
  615. }
  616. else {
  617. return @"您还没有完成达人认证,认证后才可上传曲谱哦~";
  618. }
  619. }
  620. }
  621. - (void)authAction {
  622. if (self.selectIndex == 1) {
  623. KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
  624. webCtrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/teacherCert"];
  625. [self.naviController pushViewController:webCtrl animated:YES];
  626. }
  627. else if (self.selectIndex == 2) {
  628. if ([self.teaherStatus isEqual:@"PASS"] && self.liveFlag == NO) { // 开通直播
  629. KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
  630. webCtrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/openLive"];
  631. [self.naviController pushViewController:webCtrl animated:YES];
  632. }
  633. else {
  634. KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
  635. webCtrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/teacherCert"];
  636. [self.naviController pushViewController:webCtrl animated:YES];
  637. }
  638. }
  639. else {
  640. KSBaseWKWebViewController *webCtrl = [[KSBaseWKWebViewController alloc] init];
  641. webCtrl.url = [NSString stringWithFormat:@"%@%@", WEBHOST, @"/#/teacherCert"];
  642. [self.naviController pushViewController:webCtrl animated:YES];
  643. }
  644. }
  645. - (MusicSortView *)searchView {
  646. if (!_searchView) {
  647. _searchView = [MusicSortView shareInstance];
  648. CGFloat topHeight = [MusicSortView getViewHeight];
  649. _searchView.frame = CGRectMake(0, 0, kScreenWidth, topHeight);
  650. MJWeakSelf;
  651. [_searchView searchActionCallback:^(MUSICSORT type, NSString * _Nullable searchKey) {
  652. [weakSelf musicSortAction:type searchKey:searchKey];
  653. }];
  654. }
  655. return _searchView;
  656. }
  657. - (void)musicSortAction:(MUSICSORT)type searchKey:(NSString *)searchKey {
  658. switch (type) {
  659. case MUSICSORT_UPLOAD:
  660. {
  661. [self settingAction];
  662. }
  663. break;
  664. case MUSICSORT_SUBJECT:
  665. {
  666. [self searchSubject];
  667. }
  668. break;
  669. case MUSICSORT_SEARCH:
  670. {
  671. [self evaluateSource:searchKey];
  672. }
  673. break;
  674. default:
  675. break;
  676. }
  677. }
  678. - (void)evaluateSource:(NSString *)searchKey {
  679. self.searchKey = searchKey;
  680. [self refreshAndRequestData];
  681. }
  682. - (void)searchSubject {
  683. if (self.subjectList.count) {
  684. NSMutableArray *nameArray = [NSMutableArray array];
  685. [nameArray addObject:@"全部"];
  686. for (NSDictionary *parm in self.subjectList) {
  687. [nameArray addObject:[parm ks_stringValueForKey:@"subjectName"]];
  688. }
  689. MJWeakSelf;
  690. KSChoosePicker *picker = [[KSChoosePicker alloc] initWithTitle:@"声部" sourceData:nameArray lastChooseIndex:0 sureButtonColor:THEMECOLOR chooseReturnWithBlock:^(NSString * _Nonnull returnValue, NSInteger chooseIndex) {
  691. if (chooseIndex == 0) {
  692. weakSelf.searchView.subjectLabel.text = @"声部";
  693. weakSelf.subjectIds = nil;
  694. }
  695. else {
  696. weakSelf.searchView.subjectLabel.text = returnValue;
  697. NSDictionary *parm = self.subjectList[chooseIndex-1];
  698. weakSelf.subjectIds = [parm ks_stringValueForKey:@"subjectId"];
  699. }
  700. [weakSelf refreshAndRequestData];
  701. } cancel:^{
  702. }];
  703. [picker showPicker];
  704. }
  705. else {
  706. [LOADING_MANAGER MBShowAUTOHidingInWindow:@"无声部信息"];
  707. }
  708. }
  709. /*
  710. // Only override drawRect: if you perform custom drawing.
  711. // An empty implementation adversely affects performance during animation.
  712. - (void)drawRect:(CGRect)rect {
  713. // Drawing code
  714. }
  715. */
  716. @end