Commit 4ed6e7a7dc766754c90c492010b3ff594eb18404

Authored by 张旭
1 parent 75b5e01a

短剧,课程 详情页添加分页请求

metaCode/Classes/Main/HomePage/Controller/DownSlideController/CNUpSlideDetailViewController.swift
... ... @@ -3,8 +3,8 @@
3 3 // metaCode
4 4 //
5 5 // Created by zx on 2023/10/16.
6   -// 认证-下滑页原生页--课程 大图点击详情页
7   -// 首页原生页--短剧 大图点击详情页
  6 +// 认证-下滑页原生页--课程 大图课程详情页/全部课程详情页
  7 +// 首页原生页--短剧 大图详情页
8 8  
9 9 import Foundation
10 10 import MJRefresh
... ... @@ -91,35 +91,38 @@ class CNUpSlideDetailViewController: CNLiveBaseViewController,UITableViewDataSou
91 91 override func viewDidLoad() {
92 92 super.viewDidLoad()
93 93 setupUI()
94   - getImageFromCell()
95   - if self.cellType == .playlet{
  94 +// getImageFromCell()
  95 +// if self.cellType == .playlet{
96 96 self.getBlockContents(page: 1)
97   - }
  97 +// }
98 98 }
99 99  
100 100 private func setupUI() {
101 101 self.view.layer.masksToBounds = true
  102 + self.view.addSubview(self.tableView)
  103 + self.tableView.frame = CGRect(x: 0, y: 0, width: KSreenWidth, height: KSreenHeight)
  104 +
102 105 if self.cellType == .playlet{//短剧 大图
103   - self.view.addSubview(self.tableView)
104   - self.tableView.frame = CGRect(x: 0, y: 0, width: KSreenWidth, height: KSreenHeight)
105   - }else{//课程 大图
106   - view.addSubview(scrollView)
107   - scrollView.slideModel = _slideModel
  106 +// self.view.addSubview(self.tableView)
  107 +// self.tableView.frame = CGRect(x: 0, y: 0, width: KSreenWidth, height: KSreenHeight)
  108 + }else if self.cellType == .course{//课程 大图
  109 + if self.slideModel!.type == SlideModelTypeAllCourse12{
  110 + //全部课程
  111 +
  112 + }else if self.slideModel!.type == SlideModelTypeOneCourse75{
  113 + //大图课程
  114 +
  115 + }
  116 +// view.addSubview(scrollView)
  117 +// scrollView.slideModel = _slideModel
  118 + }else if self.cellType == .playletToCourse{
  119 + //首页->课程
  120 +
108 121 }
109 122 view.addSubview(closeBtn)
110 123 view.addGestureRecognizer(dismissPanGesture)
111   -
112   - if #available(iOS 11.0, *) {
113   - scrollView.contentInsetAdjustmentBehavior = .never
114   - } else {
115   - automaticallyAdjustsScrollViewInsets = false
116   - }
117   - }
118   -
119   - private func getImageFromCell() {
120   - scrollView.imageView.image = cell.bgImageView.image
121 124 }
122   -
  125 +
123 126 @objc private func closeAction() {
124 127 dismiss(animated: true, completion: nil)
125 128 let nav = self.navigationController as! CNSlideBaseNavigationController
... ... @@ -162,12 +165,9 @@ class CNUpSlideDetailViewController: CNLiveBaseViewController,UITableViewDataSou
162 165  
163 166 switch gesture.state {
164 167 case .began,.changed:
165   - scrollView.isScrollEnabled = false
166 168 gesture.view?.transform = CGAffineTransform(scaleX: currentScale, y: currentScale)
167 169 gesture.view?.layer.cornerRadius = GlobalConstants.toDayCardCornerRadius * (progress)
168   - scrollView.showsVerticalScrollIndicator = false
169 170 case .cancelled,.ended:
170   - scrollView.isScrollEnabled = true
171 171 stopDismissPanGesture(gesture)
172 172 default:
173 173 break
... ... @@ -178,18 +178,18 @@ class CNUpSlideDetailViewController: CNLiveBaseViewController,UITableViewDataSou
178 178 private func stopDismissPanGesture(_ gesture: UIPanGestureRecognizer) {
179 179 draggingDownToDismiss = false
180 180 interactiveStartingPoint = nil
181   - scrollView.showsVerticalScrollIndicator = true
182 181  
183 182 UIView.animate(withDuration: 0.2) {
184 183 gesture.view?.transform = CGAffineTransform.identity
185 184 }
186 185 }
187 186  
188   - // MARK: - 短剧cell列表详情页
  187 + // MARK: - 列表详情页
  188 + let kCNLiveCourseTitleCellIdentifier = "kCNLiveCourseTitleCellIdentifier"
189 189 let kCNLiveAlbumImageCellIdentifier = "kCNLiveAlbumImageCellIdentifier"
190 190 let kCNLiveAlbumCellIdentifier = "kCNLiveAlbumCellIdentifier"
191 191  
192   - var pageNum: NSInteger
  192 + var pageNum: NSInteger = 1
193 193 var network_type: CNLiveMineResponseType!
194 194 // MARK: - 懒加载
195 195 ///数据源
... ... @@ -207,6 +207,8 @@ class CNUpSlideDetailViewController: CNLiveBaseViewController,UITableViewDataSou
207 207 tableView.tableFooterView = UIView.init()
208 208 tableView.register(CNLiveAlbumCell.self, forCellReuseIdentifier: kCNLiveAlbumCellIdentifier)
209 209 tableView.register(CNLiveAlbumImageCell.self, forCellReuseIdentifier: kCNLiveAlbumImageCellIdentifier)
  210 + tableView.register(CNLiveDuanjuTitleCell.self, forCellReuseIdentifier: kCNLiveCourseTitleCellIdentifier)
  211 +
210 212 return tableView
211 213 }()
212 214  
... ... @@ -225,14 +227,43 @@ class CNUpSlideDetailViewController: CNLiveBaseViewController,UITableViewDataSou
225 227 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
226 228  
227 229 if indexPath.section == 0{
228   - guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveAlbumImageCellIdentifier) as? CNLiveAlbumImageCell
229   - else {
230   - let cell = CNLiveAlbumImageCell()
  230 + if self.cellType == .playlet{
  231 + //短剧大图
  232 + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveAlbumImageCellIdentifier) as? CNLiveAlbumImageCell
  233 + else {
  234 + let cell = CNLiveAlbumImageCell()
  235 + return cell
  236 + }
  237 + cell.iconImgView.image = self.cell.bgImageView.image
231 238 return cell
  239 + }else if self.cellType == .course || self.cellType == .playletToCourse{
  240 +
  241 + if self.slideModel?.type == SlideModelTypeAllCourse12{
  242 + //全部课程
  243 + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveCourseTitleCellIdentifier) as? CNLiveDuanjuTitleCell
  244 + else {
  245 + let cell = CNLiveDuanjuTitleCell()
  246 + return cell
  247 + }
  248 + cell.cellType = .course
  249 + cell.blockName = self.slideModel?.blockName
  250 + return cell
  251 +
  252 + }else if self.slideModel?.type == SlideModelTypeOneCourse75{
  253 + //大图课程
  254 + guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveAlbumImageCellIdentifier) as? CNLiveAlbumImageCell
  255 + else {
  256 + let cell = CNLiveAlbumImageCell()
  257 + return cell
  258 + }
  259 + cell.iconImgView.image = self.cell.bgImageView.image
  260 + return cell
  261 +
  262 + }
232 263 }
233   - cell.iconImgView.image = self.cell.bgImageView.image
234   - return cell
  264 +
235 265 }else{
  266 + //列表cell
236 267 let albumModel = self.dataArray[indexPath.row] as! CNLiveAlbumModel
237 268  
238 269 guard let cell = tableView.dequeueReusableCell(withIdentifier: kCNLiveAlbumCellIdentifier) as? CNLiveAlbumCell
... ... @@ -241,42 +272,60 @@ class CNUpSlideDetailViewController: CNLiveBaseViewController,UITableViewDataSou
241 272 return cell
242 273 }
243 274 cell.albumModel = albumModel
  275 + cell.enterBlock = { albumModel in
  276 + CNLiveDownSlideTool.pushWebVCWithCNLiveAlbumMdl(albumModel: albumModel,controller: self)
  277 + }
244 278 return cell
245 279 }
  280 + return UITableViewCell()
246 281 }
247 282 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
248 283 if indexPath.section == 0{
249   - return KSreenWidth
  284 + if self.cellType == .playlet{
  285 + //短剧大图
  286 + return KSreenWidth
  287 + }else if self.cellType == .course || self.cellType == .playletToCourse{
  288 + if self.slideModel?.type == SlideModelTypeAllCourse12{
  289 + //全部课程
  290 + return 75
  291 + }else if self.slideModel?.type == SlideModelTypeOneCourse75{
  292 + //大图课程
  293 + return KSreenWidth
  294 + }
  295 + }
250 296 }else{
251 297 return 75
252 298 }
  299 + return 75
253 300 }
254 301  
255   - // MARK: - 获取全部专辑列表
  302 + // MARK: - 在追短剧--获取全部专辑列表
256 303 func getBlockContents(page:NSInteger){
257 304 showLoading(message: "")
258 305 CNLiveHomePageViewModel.getBlockContents(blockId: self.slideModel!.blockId ?? "", page: page) {[weak self] result, status in
259 306 hiddenLoading()
260 307 if status == .success{
261   - if self!.pageNum > 1 {
262   - self!.dataArray.addObjects(from: result as! [CNLiveAlbumModel])
  308 + let albumBaseModel = result as! CNLiveAlbumBaseModel
  309 + if self!.pageNum > 1 && albumBaseModel.list.count > 0 {
  310 + self!.dataArray.addObjects(from: albumBaseModel.list)
263 311 }
264 312 if self!.pageNum == 1 {
265 313 self!.dataArray.removeAllObjects()
266   - self!.dataArray.addObjects(from: result as! [CNLiveAlbumModel])
  314 + self!.dataArray.addObjects(from: albumBaseModel.list)
267 315 if self!.dataArray.count > 0 && self!.tableView.mj_header == nil && self!.tableView.mj_footer == nil {
268 316 self!.addRefreshView()
269   - self!.pageNum = self!.pageNum + 1
270   - self!.getBlockContents(page: self!.pageNum)
  317 +// self!.pageNum = self!.pageNum + 1
  318 +// self!.getBlockContents(page: self!.pageNum)
271 319 }
272 320 }
273 321  
274 322 self!.tableView.mj_header?.endRefreshing()
275   - self!.tableView.mj_footer?.endRefreshing()
  323 +
276 324 self!.tableView.reloadData()
277   - if (result as! Array<Any>).count == 0 {
  325 + if albumBaseModel.hasNextPage{
  326 + self!.tableView.mj_footer?.endRefreshing()
  327 + }else{
278 328 self!.tableView.mj_footer?.endRefreshingWithNoMoreData()
279   - self!.tableView.reloadData()
280 329 }
281 330  
282 331 }else if (status == .noNetwork) {
... ...
metaCode/Classes/Main/HomePage/Controller/DownSlideController/CNUpSlideViewController.swift
... ... @@ -187,7 +187,6 @@ class CNUpSlideViewController: CNLiveBaseViewController,UITableViewDelegate,UITa
187 187 StrongSelf.updateStatusBarAndTabbarFrame(visible: true)
188 188 }
189 189 updateStatusBarAndTabbarFrame(visible: false)
190   -
191 190 present(detailVC, animated: true, completion: nil)
192 191 }else if slideModel.type == SlideModelTypeOneCourse75{
193 192 guard let cell = tableView.cellForRow(at: indexPath) as? CNDownSlideSingleCourseCell else { return }
... ...
metaCode/Classes/Main/HomePages/Controller/AuthController/push相关/CNHomepageDuanJuDetailViewController.swift
... ... @@ -121,6 +121,8 @@ class CNHomepageDuanJuDetailViewController: CNLiveBaseViewController ,UITableVi
121 121 let cell = CNLiveDuanjuTitleCell()
122 122 return cell
123 123 }
  124 + cell.cellType = .playlet
  125 + cell.blockName = "在追短剧"
124 126 return cell
125 127 }else{
126 128 let albumModel = self.dataArray[indexPath.row] as! CNLiveAlbumMsgModel
... ...
metaCode/Classes/Main/HomePages/Model/CNLiveAlbumModel.swift
... ... @@ -7,6 +7,28 @@
7 7  
8 8 import Foundation
9 9  
  10 +class CNLiveAlbumBaseModel:BaseModel{
  11 + var endRow = 0
  12 + var firstPage = 0
  13 + var hasNextPage = false
  14 + var nextPage = 0
  15 + var hasPreviousPage = false
  16 + var isFirstPage = true
  17 + var isLastPage = true
  18 + var lastPage = 0
  19 + var list = [CNLiveAlbumModel]()
  20 + var navigateFirstPage = 0
  21 + var navigateLastPage = 0
  22 + var navigatePages = 0
  23 + var navigatepageNums:Array<Any> = []
  24 + var pageNum = 0
  25 + var pageSize = 0
  26 + var pages = 0
  27 + var prePage = 0
  28 + var size = 0
  29 + var startRow = 0
  30 + var total = 0
  31 +}
10 32 class CNLiveAlbumModel:BaseModel{
11 33 var title = ""
12 34 var subTitle = ""
... ...
metaCode/Classes/Main/HomePages/Model/CNLiveHomePageModel.swift
... ... @@ -11,6 +11,7 @@ class CNLiveHomePageModel:BaseModel{
11 11 var endRow = 0
12 12 var firstPage = 0
13 13 var hasNextPage = false
  14 + var nextPage = 0
14 15 var hasPreviousPage = false
15 16 var isFirstPage = true
16 17 var isLastPage = true
... ... @@ -20,7 +21,6 @@ class CNLiveHomePageModel:BaseModel{
20 21 var navigateLastPage = 0
21 22 var navigatePages = 0
22 23 var navigatepageNums:Array<Any> = []
23   - var nextPage = 0
24 24 var pageNum = 0
25 25 var pageSize = 0
26 26 var pages = 0
... ...
metaCode/Classes/Main/HomePages/View/HomepageDetail/CNLiveAlbumCell.swift
... ... @@ -7,11 +7,16 @@
7 7  
8 8 import Foundation
9 9 import QMUIKit
  10 +
  11 +typealias CNLiveAlbumCellEnterBlock = (_ albumModel:CNLiveAlbumModel)->Void;
  12 +
10 13 class CNLiveAlbumCell:UITableViewCell{
11 14  
  15 + var enterBlock:CNLiveAlbumCellEnterBlock?
12 16 var albumModelArr:Array<CNLiveAlbumListModel>?
13 17  
14 18 var isDetail:Bool = false
  19 + var cellType:CNLiveHomePageCellType = .course
15 20  
16 21 var _albumMsgModel : CNLiveAlbumMsgModel?
17 22 var albumMsgModel : CNLiveAlbumMsgModel? {
... ... @@ -88,7 +93,15 @@ class CNLiveAlbumCell:UITableViewCell{
88 93 fatalError("init(coder:) has not been implemented")
89 94 }
90 95 func setupNewUI(model:CNLiveAlbumModel){
91   -
  96 + if model.model == "1" || model.model == "2" || model.model == "3" || model.model == "4"{
  97 + //课程-跳转h5网页
  98 + self.cellType = .course
  99 + self.playBtn.setTitle("进入", for: .normal)
  100 + }else if model.model == "album_ugc"{
  101 + //短剧-跳转短剧播放页
  102 + self.cellType = .playlet
  103 + self.playBtn.setTitle("播放", for: .normal)
  104 + }
92 105 self.titleLabl.text = model.title
93 106 self.subTitleLabel.text = model.subTitle
94 107 self.iconImgView.kf.setImage(with: URL(string: model.poster))
... ... @@ -109,7 +122,6 @@ class CNLiveAlbumCell:UITableViewCell{
109 122 }
110 123 }
111 124 @objc func playBtnAction(){
112   - showLoading(message: "")
113 125 var aid = ""
114 126 if self.albumModel != nil{
115 127 aid = self.albumModel!.contentId
... ... @@ -118,6 +130,19 @@ class CNLiveAlbumCell:UITableViewCell{
118 130 }else{
119 131 aid = ""
120 132 }
121   - navigationViewController().visibleViewController?.navigationController?.pushViewController(CNLiveShortVideoViewController(aid: aid), animated: pushAnimated)
  133 + if (self.albumModel != nil){
  134 + if (self.albumModel?.model == "1" || self.albumModel?.model == "2" || self.albumModel?.model == "3" || self.albumModel?.model == "4"){
  135 + //课程-跳转h5网页
  136 + self.enterBlock!(self.albumModel!)
  137 + }else if self.albumModel?.model == "album_ugc"{
  138 + //短剧-跳转短剧播放页
  139 + navigationViewController().visibleViewController?.navigationController?.pushViewController(CNLiveShortVideoViewController(aid: aid), animated: pushAnimated)
  140 + }
  141 + }else if (self.albumMsgModel != nil){
  142 + //短剧-跳转短剧播放页
  143 + navigationViewController().visibleViewController?.navigationController?.pushViewController(CNLiveShortVideoViewController(aid: aid), animated: pushAnimated)
  144 +
  145 + }
  146 +
122 147 }
123 148 }
... ...
metaCode/Classes/Main/HomePages/View/HomepageDetail/CNLiveDuanjuTitleCell.swift
... ... @@ -3,12 +3,31 @@
3 3 // metaCode
4 4 //
5 5 // Created by zx on 2024/1/10.
6   -// 在追短剧详情页-title cell
  6 +// 在追短剧详情页/全部课程详情页 --title cell
7 7  
8 8 import Foundation
9 9  
10 10 class CNLiveDuanjuTitleCell:UITableViewCell{
11   -
  11 + var _blockName:String?
  12 + var blockName:String?{
  13 + get{
  14 + _blockName
  15 + }
  16 + set{
  17 + _blockName = newValue!
  18 +
  19 + if self.cellType == .course || self.cellType == .playletToCourse{
  20 + self.blockTitleLabl.text = _blockName ?? "全部课程"
  21 + self.blockTitleLabl.top = KStatusBarHeight+10
  22 + }else if self.cellType == .playlet{
  23 + self.blockTitleLabl.text = _blockName ?? "在追短剧"
  24 + self.blockTitleLabl.top = 10
  25 +
  26 + }
  27 + }
  28 + }
  29 + var cellType:CNLiveHomePageCellType = .course
  30 +
12 31 //MARK: - 懒加载
13 32 ///区块标题
14 33 lazy var blockTitleLabl: UILabel = {
... ...
metaCode/Classes/Main/HomePages/ViewModel/CNLiveHomePageViewModel.swift
... ... @@ -90,7 +90,7 @@ class CNLiveHomePageViewModel:NSObject{
90 90 }
91 91 }
92 92 }
93   - /// 获取首页-全部专辑列表
  93 + /// 获取首页-全部专辑列表,区块内容分页
94 94 static func getBlockContents(blockId:String,page:NSInteger,resultBlock: @escaping downSlideResultBlock) {
95 95 let param = NSMutableDictionary()
96 96 param.setValue(blockId, forKey: "blockId")
... ... @@ -105,14 +105,8 @@ class CNLiveHomePageViewModel:NSObject{
105 105 let errorCode = "\(resp["errorCode"] ?? "0")"
106 106 if (errorCode == "0") {
107 107 let dataDic = resp["data"] as! Dictionary<String, Any>
108   - let dataList = dataDic["list"] as! Array<Any>
109   - var listArr = Array<Any>()
110   - for listDic in dataList{
111   - let dataMdl = newDictionaryToModel(listDic as! [String : Any], CNLiveAlbumModel.self)
112   - listArr.append(dataMdl)
113   - }
114   -
115   - resultBlock(listArr,.success)
  108 + let dataMdl = newDictionaryToModel(dataDic , CNLiveAlbumBaseModel.self)
  109 + resultBlock(dataMdl,.success)
116 110 }
117 111 else{
118 112 resultBlock(NSNull(),.failed)
... ...
metaCode/Classes/Main/Util/CNLiveDownSlideTool.swift
... ... @@ -19,14 +19,11 @@ class CNLiveDownSlideTool:NSObject{
19 19 let regURL = urlComponents.url
20 20 let webVC = CNWebViewController()
21 21 webVC.url = regURL
22   - navigationViewController().pushViewController(webVC, animated: pushAnimated)
23   -// currentViewController()?.navigationController?.pushViewController(webVC, animated: pushAnimated)
24   -
  22 + navigationViewController().visibleViewController?.navigationController?.pushViewController(webVC, animated: pushAnimated)
25 23 }else if (contentMdl.model == kCNDownSlideContentsModelModel3) || (contentMdl.model == kCNDownSlideContentsModelModel4){
26 24 let webVC = CNWebViewController()
27 25 webVC.url = URL(string: (contentMdl.thirdUrl)!)
28   - navigationViewController().pushViewController(webVC, animated: pushAnimated)
29   -// currentViewController()?.navigationController?.pushViewController(webVC, animated: pushAnimated)
  26 + navigationViewController().visibleViewController?.navigationController?.pushViewController(webVC, animated: pushAnimated)
30 27 }else if (contentMdl.model == kCNDownSlideContentsModelModelAlbum) || (contentMdl.model == kCNDownSlideContentsModelModelAlbum_ugc) || (contentMdl.model == kCNDownSlideContentsModelModelAlbum_video){
31 28  
32 29 let urlString = "http://wjjh5.cnlive.com/cnYmAlbumVideoList.html"
... ... @@ -37,8 +34,38 @@ class CNLiveDownSlideTool:NSObject{
37 34 let regURL = urlComponents?.url
38 35 let webVC = CNWebViewController()
39 36 webVC.url = regURL
40   - navigationViewController().pushViewController(webVC, animated: pushAnimated)
41   -// currentViewController()?.navigationController?.pushViewController(webVC, animated: pushAnimated)
  37 + navigationViewController().visibleViewController?.navigationController?.pushViewController(webVC, animated: pushAnimated)
  38 + }else{
  39 + return
  40 + }
  41 + }
  42 + class func pushWebVCWithCNLiveAlbumMdl(albumModel:CNLiveAlbumModel,controller:UIViewController){
  43 +
  44 + if (albumModel.model == kCNDownSlideContentsModelModel1) || (albumModel.model == kCNDownSlideContentsModelModel2){
  45 +
  46 + let queryItem = URLQueryItem(name: "contentId", value: albumModel.contentId)
  47 + let queryItem1 = URLQueryItem(name: "videoId", value: albumModel.pid)
  48 + let urlComponents = NSURLComponents(string: (albumModel.shareUrl))!
  49 + urlComponents.queryItems = [queryItem, queryItem1]
  50 + let regURL = urlComponents.url
  51 + let webVC = CNWebViewController()
  52 + webVC.url = regURL
  53 + controller.navigationController?.pushViewController(webVC, animated: pushAnimated)
  54 + }else if (albumModel.model == kCNDownSlideContentsModelModel3) || (albumModel.model == kCNDownSlideContentsModelModel4){
  55 + let webVC = CNWebViewController()
  56 + webVC.url = URL(string: (albumModel.thirdUrl))
  57 + controller.navigationController?.pushViewController(webVC, animated: pushAnimated)
  58 + }else if (albumModel.model == kCNDownSlideContentsModelModelAlbum) || (albumModel.model == kCNDownSlideContentsModelModelAlbum_ugc) || (albumModel.model == kCNDownSlideContentsModelModelAlbum_video){
  59 +
  60 + let urlString = "http://wjjh5.cnlive.com/cnYmAlbumVideoList.html"
  61 + let queryItem = URLQueryItem(name: "aid", value: albumModel.contentId)
  62 + let queryItem1 = URLQueryItem(name: "title", value: albumModel.title)
  63 + let urlComponents = NSURLComponents(string: urlString)
  64 + urlComponents!.queryItems = [queryItem, queryItem1]
  65 + let regURL = urlComponents?.url
  66 + let webVC = CNWebViewController()
  67 + webVC.url = regURL
  68 + navigationViewController().visibleViewController?.navigationController?.pushViewController(webVC, animated: pushAnimated)
42 69 }else{
43 70 return
44 71 }
... ...