OrderViewController.swift 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  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. deinit {
  28. NotificationCenter.default.removeObserver(observe!)
  29. }
  30. weak var observe : NSObjectProtocol?
  31. var orderVCType : OrderVCType?
  32. var orderListViewController : OrderListViewController?
  33. override func viewDidLoad() {
  34. super.viewDidLoad()
  35. setupViews()
  36. setupLayouts()
  37. setupData()
  38. }
  39. override func setupViews() {
  40. navigationBar.title = "我的订单"
  41. view.addSubview(segmentedView)
  42. view.addSubview(listContainerView)
  43. }
  44. override func setupLayouts() {
  45. segmentedView.snp.makeConstraints { (make) in
  46. make.left.right.equalToSuperview()
  47. make.height.equalTo(44)
  48. make.top.equalTo(kNavBarTotalHeight)
  49. }
  50. listContainerView.snp.makeConstraints { (make) in
  51. make.top.equalTo(segmentedView.snp.bottom)
  52. make.left.right.bottom.equalToSuperview()
  53. }
  54. }
  55. override func setupData() {
  56. observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("OrderFinishPayVCOrderDetail"), object: nil, queue: OperationQueue.main) {
  57. [weak self] (notification) in
  58. self?.orderListViewController?.orderPurchaseOrderListApi(page: 1)
  59. }
  60. }
  61. //1.初始化JXSegmentedView
  62. lazy var segmentedView: JXSegmentedView = {
  63. let segmentedView = JXSegmentedView()
  64. segmentedView.delegate = self
  65. segmentedView.dataSource = segmentedDataSource
  66. segmentedView.indicators = [indicator]
  67. segmentedView.contentScrollView = listContainerView.scrollView
  68. segmentedView.selectItemAt(index: orderVCType!.rawValue+1)
  69. segmentedView.defaultSelectedIndex = orderVCType!.rawValue+1
  70. return segmentedView
  71. }()
  72. //2.初始化dataSource
  73. lazy var segmentedDataSource: JXSegmentedTitleDataSource = {
  74. let segmentedDataSource = JXSegmentedTitleDataSource()
  75. segmentedDataSource.titles = ["全部","待付款","待发货","待收货","待评价","退款"]
  76. segmentedDataSource.isTitleColorGradientEnabled = true
  77. segmentedDataSource.isItemSpacingAverageEnabled = true
  78. segmentedDataSource.titleNormalColor = k333333Color
  79. segmentedDataSource.titleSelectedColor = kFFA42FColor
  80. segmentedDataSource.titleNormalFont = kRegularFont14!
  81. segmentedDataSource.titleSelectedFont = kBoldFont14
  82. //reloadData(selectedIndex:)方法一定要调用,方法内部会刷新数据源数组
  83. segmentedDataSource.reloadData(selectedIndex: orderVCType!.rawValue+1)
  84. return segmentedDataSource
  85. }()
  86. //3.初始化指示器indicator
  87. lazy var indicator: JXSegmentedIndicatorLineView = {
  88. let indicator = JXSegmentedIndicatorLineView()
  89. indicator.indicatorColor = kFFA42FColor
  90. indicator.indicatorHeight = 4
  91. indicator.indicatorWidth = 20
  92. return indicator
  93. }()
  94. //4.初始化JXSegmentedListContainerView
  95. lazy var listContainerView: JXSegmentedListContainerView = {
  96. let listContainerView = JXSegmentedListContainerView(dataSource: self)
  97. listContainerView.didAppearPercent = 0.01
  98. listContainerView.defaultSelectedIndex = orderVCType!.rawValue + 1
  99. return listContainerView
  100. }()
  101. }
  102. extension OrderViewController : JXSegmentedViewDelegate {
  103. //点击选中或者滚动选中都会调用该方法。适用于只关心选中事件,而不关心具体是点击还是滚动选中的情况。
  104. func segmentedView(_ segmentedView: JXSegmentedView, didSelectedItemAt index: Int) {
  105. }
  106. // 点击选中的情况才会调用该方法
  107. func segmentedView(_ segmentedView: JXSegmentedView, didClickSelectedItemAt index: Int) {
  108. //传递didClickSelectedItemAt事件给listContainerView,必须调用!!!
  109. listContainerView.didClickSelectedItem(at: index)
  110. }
  111. // 滚动选中的情况才会调用该方法
  112. func segmentedView(_ segmentedView: JXSegmentedView, didScrollSelectedItemAt index: Int) {
  113. }
  114. // 正在滚动中的回调
  115. func segmentedView(_ segmentedView: JXSegmentedView, scrollingFrom leftIndex: Int, to rightIndex: Int, percent: CGFloat) {
  116. //传递scrolling事件给listContainerView,必须调用!!!
  117. listContainerView.segmentedViewScrolling(from: leftIndex, to: rightIndex, percent: percent, selectedIndex: segmentedView.selectedIndex)
  118. }
  119. /// 是否允许点击选中目标index的item
  120. func segmentedView(_ segmentedView: JXSegmentedView, canClickItemAt index: Int) -> Bool {
  121. return true
  122. }
  123. }
  124. extension OrderViewController :JXSegmentedListContainerViewDataSource {
  125. func numberOfLists(in listContainerView: JXSegmentedListContainerView) -> Int {
  126. if let titleDataSource = segmentedView.dataSource as? JXSegmentedBaseDataSource {
  127. return titleDataSource.dataSource.count
  128. }
  129. return 0
  130. }
  131. func listContainerView(_ listContainerView: JXSegmentedListContainerView, initListAt index: Int) -> JXSegmentedListContainerViewListDelegate {
  132. let vc = OrderListViewController()
  133. vc.orderVCType = OrderVCType(rawValue: index-1)
  134. vc.setButtonBlock = {
  135. [weak self] (button,orderModel) in
  136. self?.orderListViewController = vc
  137. self?.setButton(button: button, orderModel: orderModel, vc: vc)
  138. }
  139. vc.didSelectBlock = {
  140. [weak self] (orderModel) in
  141. let orderDetailVC = OrderDetailViewController()
  142. orderDetailVC.orderModel = orderModel
  143. orderDetailVC.cancelOrderClosure = {
  144. vc.orderPurchaseOrderListApi(page: 1)
  145. }
  146. self?.navigationController?.pushViewController(orderDetailVC, animated: true)
  147. }
  148. vc.productDidSelectBlock = {
  149. [weak self] (orderModel,orderModelDetailModel) in
  150. let vc = ProductDetailViewController()
  151. vc.productId = orderModelDetailModel.productId
  152. vc.shopId = orderModel.shopId
  153. self?.navigationController?.pushViewController(vc, animated: true)
  154. }
  155. return vc
  156. }
  157. func setButton(button:UIButton,orderModel:OrderModel,vc: OrderListViewController) {
  158. if button.titleLabel?.text == "去付款" {
  159. // 弹出支付方式View
  160. let orderPayModel = OrderCreateBackModel()
  161. orderPayModel.money = "\(orderModel.realPrice ?? 0)"
  162. orderPayModel.patchNum = orderModel.patchNum
  163. PayManagerPay.shared.payAlertView(orderPayModel: orderPayModel, orderFinishPayVCType: .order, vc: self)
  164. PayManagerPay.shared.reloadClosure = {
  165. vc.orderPurchaseOrderListApi(page: 1)
  166. }
  167. }
  168. if button.titleLabel?.text == "取消订单" {
  169. orderPurchaseCloseApi(orderModel: orderModel, vc: vc)
  170. }
  171. if button.titleLabel?.text == "确认收货" {
  172. orderPurchaseConfirmApi(orderModel: orderModel, vc: vc)
  173. }
  174. if button.titleLabel?.text == "查看物流" {
  175. let vc = OrderLogisticsController()
  176. self.navigationController?.pushViewController(vc, animated: true)
  177. }
  178. if button.titleLabel?.text == "退款详情" {
  179. let vc = OrderRefunddetailsViewController()
  180. vc.refundNo = orderModel.refundNo
  181. vc.orderRefunddetailsVCType = .order
  182. vc.orderStatus = orderModel.status
  183. self.navigationController?.pushViewController(vc, animated: true)
  184. }
  185. if button.titleLabel?.text == "去评价" {
  186. let vc1 = OrderCommentController()
  187. vc1.orderDetailModel = orderModel
  188. vc1.commentSuccessedBlock = {
  189. kOrderVCTypeAlliSRefresh = true
  190. vc.orderPurchaseOrderListApi(page: 1)
  191. }
  192. self.navigationController?.pushViewController(vc1, animated: true)
  193. }
  194. if button.titleLabel?.text == "再次购买" {
  195. let vc = ShopViewController()
  196. vc.shopId = orderModel.shopId
  197. self.navigationController?.pushViewController(vc, animated: true)
  198. }
  199. if button.titleLabel?.text == "申请退款" {
  200. let vc = OrderApplyRefundController()
  201. vc.orderDetailModel = orderModel
  202. self.navigationController?.pushViewController(vc, animated: true)
  203. }
  204. }
  205. /// 取消订单
  206. func orderPurchaseCloseApi(orderModel:OrderModel,vc: OrderListViewController) {
  207. AlertSheetView.alert(title: "是否取消订单", cancelTitle: "取消", sureTitle: "确定", cancelBlock: nil) { (popupView, index, str) in
  208. SwiftMoyaNetWorkServiceOrder.shared().orderPurchaseCloseApi(patchNum: orderModel.patchNum ?? "") { (data) -> (Void) in
  209. kOrderVCTypeAlliSRefresh = true
  210. vc.orderPurchaseOrderListApi(page: 1)
  211. }
  212. }
  213. }
  214. /// 确认收货
  215. func orderPurchaseConfirmApi(orderModel:OrderModel,vc: OrderListViewController) {
  216. AlertSheetView.alert(title: "是否确认收货", cancelTitle: "取消", sureTitle: "确定", cancelBlock: nil) { (popupView, index, str) in
  217. SwiftMoyaNetWorkServiceOrder.shared().orderPurchaseConfirmApi(purchaseId: orderModel.id ?? 0) { (data) -> (Void) in
  218. kOrderVCTypeAlliSRefresh = true
  219. vc.orderPurchaseOrderListApi(page: 1)
  220. }
  221. }
  222. }
  223. }