OrderViewController.swift 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. //
  2. // OrderListViewController.swift
  3. // RainbowPlanet
  4. //
  5. // Created by 南鑫林 on 2019/5/15.
  6. // Copyright © 2019 RainbowPlanet. All rights reserved.
  7. //
  8. import UIKit
  9. import JXSegmentedView
  10. /// 我的订单类型
  11. ///
  12. /// - all: 全部
  13. /// - pendingPayment: 待付款
  14. /// - toBeShipped: 待收货
  15. /// - toBeReceived: 待发货
  16. /// - toBeEvaluated: 待评价
  17. /// - refund: 退款
  18. enum OrderVCType : Int {
  19. case all = -1
  20. case pendingPayment = 0
  21. case toBeShipped = 1
  22. case toBeReceived = 2
  23. case toBeEvaluated = 3
  24. case refund = 4
  25. }
  26. class OrderViewController: BaseViewController {
  27. var orderVCType : OrderVCType?
  28. override func viewDidLoad() {
  29. super.viewDidLoad()
  30. setupViews()
  31. setupLayouts()
  32. setupData()
  33. }
  34. override func setupViews() {
  35. navigationBar.title = "我的订单"
  36. view.addSubview(segmentedView)
  37. view.addSubview(listContainerView)
  38. }
  39. override func setupLayouts() {
  40. segmentedView.snp.makeConstraints { (make) in
  41. make.left.right.equalToSuperview()
  42. make.height.equalTo(44)
  43. make.top.equalTo(kNavBarTotalHeight)
  44. }
  45. listContainerView.snp.makeConstraints { (make) in
  46. make.top.equalTo(segmentedView.snp.bottom)
  47. make.left.right.bottom.equalToSuperview()
  48. }
  49. }
  50. override func setupData() {
  51. }
  52. //1.初始化JXSegmentedView
  53. lazy var segmentedView: JXSegmentedView = {
  54. let segmentedView = JXSegmentedView()
  55. segmentedView.delegate = self
  56. segmentedView.dataSource = segmentedDataSource
  57. segmentedView.indicators = [indicator]
  58. segmentedView.contentScrollView = listContainerView.scrollView
  59. segmentedView.selectItemAt(index: orderVCType!.rawValue+1)
  60. segmentedView.defaultSelectedIndex = orderVCType!.rawValue+1
  61. return segmentedView
  62. }()
  63. //2.初始化dataSource
  64. lazy var segmentedDataSource: JXSegmentedTitleDataSource = {
  65. let segmentedDataSource = JXSegmentedTitleDataSource()
  66. segmentedDataSource.titles = ["全部","待付款","待发货","待收货","待评价","退款"]
  67. segmentedDataSource.isTitleColorGradientEnabled = true
  68. segmentedDataSource.isItemSpacingAverageEnabled = true
  69. segmentedDataSource.titleNormalColor = k333333Color
  70. segmentedDataSource.titleSelectedColor = kFFA42FColor
  71. segmentedDataSource.titleNormalFont = kRegularFont14!
  72. segmentedDataSource.titleSelectedFont = kBoldFont14
  73. //reloadData(selectedIndex:)方法一定要调用,方法内部会刷新数据源数组
  74. segmentedDataSource.reloadData(selectedIndex: orderVCType!.rawValue+1)
  75. return segmentedDataSource
  76. }()
  77. //3.初始化指示器indicator
  78. lazy var indicator: JXSegmentedIndicatorLineView = {
  79. let indicator = JXSegmentedIndicatorLineView()
  80. indicator.indicatorColor = kFFA42FColor
  81. indicator.indicatorHeight = 4
  82. indicator.indicatorWidth = 20
  83. return indicator
  84. }()
  85. //4.初始化JXSegmentedListContainerView
  86. lazy var listContainerView: JXSegmentedListContainerView = {
  87. let listContainerView = JXSegmentedListContainerView(dataSource: self)
  88. listContainerView.didAppearPercent = 0.01
  89. listContainerView.defaultSelectedIndex = orderVCType!.rawValue + 1
  90. return listContainerView
  91. }()
  92. }
  93. extension OrderViewController : JXSegmentedViewDelegate {
  94. //点击选中或者滚动选中都会调用该方法。适用于只关心选中事件,而不关心具体是点击还是滚动选中的情况。
  95. func segmentedView(_ segmentedView: JXSegmentedView, didSelectedItemAt index: Int) {
  96. }
  97. // 点击选中的情况才会调用该方法
  98. func segmentedView(_ segmentedView: JXSegmentedView, didClickSelectedItemAt index: Int) {
  99. //传递didClickSelectedItemAt事件给listContainerView,必须调用!!!
  100. listContainerView.didClickSelectedItem(at: index)
  101. }
  102. // 滚动选中的情况才会调用该方法
  103. func segmentedView(_ segmentedView: JXSegmentedView, didScrollSelectedItemAt index: Int) {
  104. }
  105. // 正在滚动中的回调
  106. func segmentedView(_ segmentedView: JXSegmentedView, scrollingFrom leftIndex: Int, to rightIndex: Int, percent: CGFloat) {
  107. //传递scrolling事件给listContainerView,必须调用!!!
  108. listContainerView.segmentedViewScrolling(from: leftIndex, to: rightIndex, percent: percent, selectedIndex: segmentedView.selectedIndex)
  109. }
  110. /// 是否允许点击选中目标index的item
  111. func segmentedView(_ segmentedView: JXSegmentedView, canClickItemAt index: Int) -> Bool {
  112. return true
  113. }
  114. }
  115. extension OrderViewController :JXSegmentedListContainerViewDataSource {
  116. func numberOfLists(in listContainerView: JXSegmentedListContainerView) -> Int {
  117. if let titleDataSource = segmentedView.dataSource as? JXSegmentedBaseDataSource {
  118. return titleDataSource.dataSource.count
  119. }
  120. return 0
  121. }
  122. func listContainerView(_ listContainerView: JXSegmentedListContainerView, initListAt index: Int) -> JXSegmentedListContainerViewListDelegate {
  123. let vc = OrderListViewController()
  124. vc.orderVCType = OrderVCType(rawValue: index-1)
  125. vc.setButtonBlock = {
  126. [weak self] (button,orderModel) in
  127. self?.setButton(button: button, orderModel: orderModel, vc: vc)
  128. }
  129. vc.didSelectBlock = {
  130. [weak self] (orderModel) in
  131. let orderDetailVC = OrderDetailViewController()
  132. orderDetailVC.orderModel = orderModel
  133. orderDetailVC.cancelOrderClosure = {
  134. vc.orderPurchaseOrderListApi(page: 1)
  135. }
  136. self?.navigationController?.pushViewController(orderDetailVC, animated: true)
  137. }
  138. return vc
  139. }
  140. func setButton(button:UIButton,orderModel:OrderModel,vc: OrderListViewController) {
  141. if button.titleLabel?.text == "去付款" {
  142. // 弹出支付方式View
  143. let orderPayModel = OrderCreateBackModel()
  144. orderPayModel.money = "\(orderModel.realPrice ?? 0)"
  145. orderPayModel.patchNum = orderModel.patchNum
  146. PayManagerPay.shared.payAlertView(orderPayModel: orderPayModel)
  147. }
  148. if button.titleLabel?.text == "取消订单" {
  149. orderPurchaseCloseApi(orderModel: orderModel, vc: vc)
  150. }
  151. if button.titleLabel?.text == "确认收货" {
  152. orderPurchaseConfirmApi(orderModel: orderModel, vc: vc)
  153. }
  154. if button.titleLabel?.text == "查看物流" {
  155. let vc = OrderLogisticsController()
  156. self.navigationController?.pushViewController(vc, animated: true)
  157. }
  158. if button.titleLabel?.text == "退款详情" {
  159. let vc = OrderRefunddetailsViewController()
  160. vc.refundNo = orderModel.refundNo
  161. self.navigationController?.pushViewController(vc, animated: true)
  162. }
  163. if button.titleLabel?.text == "去评价" {
  164. let vc = OrderCommentController()
  165. vc.orderDetailModel = orderModel
  166. self.navigationController?.pushViewController(vc, animated: true)
  167. }
  168. if button.titleLabel?.text == "再次购买" {
  169. let vc = ShopViewController()
  170. vc.shopId = orderModel.shopId
  171. self.navigationController?.pushViewController(vc, animated: true)
  172. }
  173. if button.titleLabel?.text == "申请退款" {
  174. let vc = OrderApplyRefundController()
  175. vc.orderDetailModel = orderModel
  176. self.navigationController?.pushViewController(vc, animated: true)
  177. }
  178. }
  179. /// 取消订单
  180. func orderPurchaseCloseApi(orderModel:OrderModel,vc: OrderListViewController) {
  181. SwiftMoyaNetWorkServiceOrder.shared().orderPurchaseCloseApi(patchNum: orderModel.patchNum ?? "") { (data) -> (Void) in
  182. vc.orderPurchaseOrderListApi(page: 1)
  183. }
  184. }
  185. /// 确认收货
  186. func orderPurchaseConfirmApi(orderModel:OrderModel,vc: OrderListViewController) {
  187. SwiftMoyaNetWorkServiceOrder.shared().orderPurchaseConfirmApi(purchaseId: orderModel.purchaseNo!) { (data) -> (Void) in
  188. vc.orderPurchaseOrderListApi(page: 1)
  189. }
  190. }
  191. }