123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415 |
- //
- // OrderListViewController.swift
- // RainbowPlanet
- //
- // Created by 南鑫林 on 2019/5/16.
- // Copyright © 2019 RainbowPlanet. All rights reserved.
- //
- import UIKit
- import JXSegmentedView
- import RxSwift
- public var kOrderVCTypeAlliSRefresh : Bool = false
- class OrderListViewController: UIViewController {
-
- deinit {
- if observe != nil {
- NotificationCenter.default.removeObserver(observe!)
- }
- }
- weak var observe : NSObjectProtocol?
- let disposeBag = DisposeBag()
-
- var orderVCType : OrderVCType?
- var orderModelArray = Array<OrderModel>()
-
- var change : Bool? {
- didSet {
- orderPurchaseOrderListApi(page:1)
- }
- }
-
- typealias SetButtonBlock = (_ button:UIButton,_ orderModel:OrderModel) -> Void
- var setButtonBlock : SetButtonBlock?
-
- typealias DidSelectBlock = (_ orderModel:OrderModel) -> Void
- var didSelectBlock : DidSelectBlock?
-
- typealias ProductDidSelectBlock = (OrderModel,OrderModelDetailModel) -> Void
- var productDidSelectBlock : ProductDidSelectBlock?
-
- override func viewWillAppear(_ animated: Bool) {
- super.viewWillAppear(animated)
-
- }
-
- override func viewDidLoad() {
- super.viewDidLoad()
- setupViews()
- setupLayouts()
- setupData()
- }
-
- func setupViews() {
- view.addSubview(orderListView)
- }
-
- func setupLayouts() {
- orderListView.snp.makeConstraints { (make) in
- make.edges.equalToSuperview()
- }
- }
-
- func setupData() {
- orderListView.tableView.addHeaderWithHeader(withBeginRefresh: true, animation: false) {
- [weak self] (page) in
- self?.orderPurchaseOrderListApi(page: page)
- }
- orderListView.tableView.addFooterWithWithHeader(withAutomaticallyRefresh: true) {
- [weak self] (page) in
- self?.orderPurchaseOrderListApi(page: page)
- }
-
- observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("OrderListVCAll"), object: nil, queue: OperationQueue.main) {[weak self] (notification) in
- self?.orderPurchaseOrderListApi(page: 1)
- }
- }
-
-
- /// 订单列表
- ///
- /// - Parameter page: <#page description#>
- func orderPurchaseOrderListApi(page:Int = 1) {
-
- SwiftMoyaNetWorkServiceOrder.shared().orderPurchaseOrderListApi(page: page, status: orderVCType.map { $0.rawValue } ?? -1) {
- [weak self] (orderListModel) -> (Void) in
- let orderListModel = orderListModel as? OrderListModel
- if orderListModel?.pagination?.currentPage ?? 1 <= orderListModel?.pagination?.totalPages ?? 1 {
- if orderListModel?.pagination?.currentPage == 1{
- self?.orderModelArray.removeAll()
- self?.orderListView.tableView.resetNoMoreData()
- }
- self?.orderModelArray = (self?.orderModelArray)! + (orderListModel?.data!)!
- self?.orderListView.tableView.reloadData()
- if self?.orderModelArray.isEmpty ?? true {
- self?.orderListView.tableView.isHiddenFooter(true)
- }
- }else {
- self?.orderListView.tableView.endFooterNoMoreData()
- }
- }
- }
-
- func setButton(button:UIButton,orderModel:OrderModel) {
- if let setButtonBlock = setButtonBlock {
- setButtonBlock(button,orderModel)
- }
- }
-
- private lazy var orderListView: OrderListView = {
- let orderListView = OrderListView()
- orderListView.tableView.dataSource = self
- orderListView.tableView.delegate = self
- return orderListView
- }()
- }
- extension OrderListViewController : UITableViewDelegate, UITableViewDataSource {
- func numberOfSections(in tableView: UITableView) -> Int {
-
- return orderModelArray.isEmpty ? 0 : orderModelArray.count
- }
-
- func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
- let orderModel = orderModelArray[section]
-
-
- if !(orderModel.detail?.isEmpty ?? true) {
- switch orderModel.deliverType {
- case 1: //自提
- if orderModel.feedbackStatus == 0 { //未维权
- switch orderModel.status {
- case 0: //待付款
- return 4 + (orderModel.detail?.count ?? 0)
- case 1: //待发货
- return 4 + (orderModel.detail?.count ?? 0)
- case 3: //配送中
- return 4 + (orderModel.detail?.count ?? 0)
- case 4: //待自提
- return 4 + (orderModel.detail?.count ?? 0)
- case 5: //已自提
- return 4 + (orderModel.detail?.count ?? 0)
- case 7: //已关闭
- return 4 + (orderModel.detail?.count ?? 0)
- default:
- return 0
- }
- }else {
- return 4 + (orderModel.detail?.count ?? 0)
- }
-
- case 2: //快递
- if orderModel.feedbackStatus == 0 { //未维权
- switch orderModel.status {
- case 0: //待付款
- return 5 + (orderModel.detail?.count ?? 0)
- case 1: //待发货
- return 4 + (orderModel.detail?.count ?? 0)
- case 2: //已发货/待收货
- return 5 + (orderModel.detail?.count ?? 0)
- case 6: //已完成
- return 5 + (orderModel.detail?.count ?? 0)
- case 7: //已关闭
- return 4 + (orderModel.detail?.count ?? 0)
- default:
- return 0
- }
- }else {
- return 5 + (orderModel.detail?.count ?? 0)
- }
- default:
- return 0
- }
- }else {
- return 0
- }
- }
-
- func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
- let orderModel = orderModelArray[indexPath.section]
- let details = orderModel.detail
-
- if orderModel.deliverType == 1 { //自提
- switch indexPath.row {
- case 0:
- let cell = OrderShopAndStatusTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
- cell.orderModel = orderModel
- return cell
- case 1:
- let cell = OrderDeliveryModeAndTimeTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
- cell.orderModel = orderModel
- return cell
- case details!.count + 2:
- let cell = OrderTotalAmountTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
- cell.orderModel = orderModel
- return cell
- case details!.count + 3:
- switch orderModel.status {
- case 0:
- let cell = OrderDeliveryModeAndButtonTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
- cell.orderModel = orderModel
- cell.setButtonBlock = {
- [weak self] (button,orderModel) in
- self?.setButton(button: button,orderModel:orderModel)
-
- }
- return cell
- case 5:
- if orderModel.isComment == 0 {
- let cell = OrderDeliveryModeAndButtonTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
- cell.orderModel = orderModel
- cell.setButtonBlock = {
- [weak self] (button,orderModel) in
- self?.setButton(button: button,orderModel:orderModel)
-
- }
- return cell
- }else {
- let cell = OrderDeliveryModeTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
- cell.orderModel = orderModel
- return cell
- }
-
- case 1,3,4:
- if orderModel.feedbackStatus == 0 {
- let cell = OrderDeliveryModeTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
- cell.orderModel = orderModel
- return cell
- }else {
- let cell = OrderDeliveryModeAndButtonTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
- cell.orderModel = orderModel
- cell.setButtonBlock = {
- [weak self] (button,orderModel) in
- self?.setButton(button: button,orderModel:orderModel)
- }
- return cell
- }
- case 7:
- let cell = OrderDeliveryModeTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
- cell.orderModel = orderModel
- return cell
- default:
- return UITableViewCell()
- }
- default:
- let cell = OrderProductTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
- cell.orderModelDetailModel = details?[indexPath.row - 2]
- return cell
- }
- }else if orderModel.deliverType == 2 { //快递
- switch indexPath.row {
- case 0:
- let cell = OrderShopAndStatusTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
- cell.orderModel = orderModel
- return cell
- case 1:
- let cell = OrderDeliveryModeAndTimeTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
- cell.orderModel = orderModel
- return cell
- case details!.count + 2:
- let cell = OrderFreightTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
- cell.orderModel = orderModel
- return cell
- case details!.count + 3:
- let cell = OrderTotalAmountTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
- cell.orderModel = orderModel
- return cell
- case details!.count + 4:
- let orderModel = orderModel
- switch orderModel.status {
- case 0,2,6:
- let cell = OrderButtonTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
- cell.orderModel = orderModel
- cell.setButtonBlock = {
- [weak self] (button,orderModel) in
- self?.setButton(button: button,orderModel:orderModel)
-
- }
- return cell
- case 1:
- if orderModel.feedbackStatus != 0 {
- let cell = OrderButtonTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
- cell.orderModel = orderModel
- cell.setButtonBlock = {
- [weak self] (button,orderModel) in
- self?.setButton(button: button,orderModel:orderModel)
- }
- return cell
- }else {
- return UITableViewCell()
- }
- default:
- return UITableViewCell()
- }
- default:
- let cell = OrderProductTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)
- cell.orderModelDetailModel = details?[indexPath.row - 2]
- return cell
- }
- }else {
- return UITableViewCell()
- }
- }
-
- func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
- let orderModel = orderModelArray[indexPath.section]
- let details = orderModel.detail
- switch indexPath.row {
- case 0:
- return 48
- case 1:
- return 40
- case details!.count + 2:
- return 40
- case details!.count + 3:
- if orderModel.deliverType == 1 { //自提
- return UITableView.automaticDimension
- }else if orderModel.deliverType == 2 { //快递
- return 40
- }else {
- return 0
- }
- case details!.count + 4:
- return UITableView.automaticDimension
- default:
- return 108
- }
- }
-
- func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
-
- let orderModel = orderModelArray[indexPath.section]
- let details = orderModel.detail
- if orderModel.deliverType == 1 { //自提
- switch indexPath.row {
- case details!.count + 3:
- break
- default:
- if let didSelectBlock = didSelectBlock {
- didSelectBlock(orderModel)
- }
- break
- }
- }else if orderModel.deliverType == 2 { //快递
- switch indexPath.row {
- case details!.count + 4:
- break
- default:
- if let didSelectBlock = didSelectBlock {
- didSelectBlock(orderModel)
- }
- break
- }
- }
-
- }
-
- func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
- return 10
- }
-
- func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
- return nil
- }
-
- func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
- return 0
- }
-
- func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
- return nil
- }
- }
- extension OrderListViewController : JXSegmentedListContainerViewListDelegate {
- func listView() -> UIView {
-
- return view
- }
-
- func listDidAppear() {
- if self.orderVCType == .all && kOrderVCTypeAlliSRefresh {
- orderPurchaseOrderListApiAll()
- }
- }
-
- /// 订单列表
- ///
- /// - Parameter page: <#page description#>
- func orderPurchaseOrderListApiAll(page:Int = 1) {
-
- SwiftMoyaNetWorkServiceOrder.shared().orderPurchaseOrderListApi(page: page, status: -1) {
- [weak self] (orderListModel) -> (Void) in
- let orderListModel = orderListModel as? OrderListModel
- if orderListModel?.pagination?.currentPage ?? 1 <= orderListModel?.pagination?.totalPages ?? 1 {
- if orderListModel?.pagination?.currentPage == 1{
- self?.orderModelArray.removeAll()
- self?.orderListView.tableView.resetNoMoreData()
- }
- self?.orderModelArray = (self?.orderModelArray)! + (orderListModel?.data!)!
- self?.orderListView.tableView.reloadData()
- if self?.orderModelArray.isEmpty ?? true {
- self?.orderListView.tableView.isHiddenFooter(true)
- }
- }else {
- self?.orderListView.tableView.endFooterNoMoreData()
- }
- kOrderVCTypeAlliSRefresh = false
- }
- }
- }
|