Newer
Older
LaserMethane / LaserMethane / ViewController / Inspect / InspectViewController.swift
//
//  InspectViewController.swift
//  LaserMethane
//
//  Created by 203 on 2021/7/28.
//

import Alamofire
import KeychainAccess
import MJRefresh
import SwiftyJSON
import UIKit

class InspectViewController: UIViewController {
    @IBOutlet var startTimePicker: UIDatePicker!
    @IBOutlet var endTimePicker: UIDatePicker!
    @IBOutlet var keywordsView: UITextField!
    @IBOutlet var inspectTableView: UITableView!

    private var keychain = Keychain()
    private var baseURL: String?
    private var rowsArray: [RowsModel] = []
    private var dformatter = DateFormatter()
    private var pageOffSet: Int = 1
    private var isUpdate: Bool = false
    private var startDate: String?
    private var endDate: String?
    private var keyWords: String?

    var valueDelegate: TransferValueDelegate!

    override func viewDidLoad() {
        super.viewDidLoad()
        title = "巡检记录查询"
        navigationController?.navigationBar.isTranslucent = false
        navigationController?.navigationBar.barTintColor = .systemBlue
        let dict: [NSAttributedString.Key: Any] = [NSAttributedString.Key.foregroundColor: UIColor.white]
        navigationController?.navigationBar.titleTextAttributes = dict
        navigationController?.navigationBar.tintColor = .white
        // Do any additional setup after loading the view.
        setupTableView()
        // 默认加载数据
        loadData(keywords: "", startTime: "", endTime: "", offset: 1)
    }

    func loadData(keywords: String, startTime: String, endTime: String, offset: Int) {
        baseURL = keychain[Constant.ServerConfig.rawValue]
        let inspectListURL = baseURL! + Constant.inspectList.rawValue
        Alamofire.request(inspectListURL, method: .get,
                parameters: ["keywords": keywords, "startTime": startTime, "endTime": endTime, "limit": 15, "offset": offset],
                headers: ["token": keychain[Constant.Token.rawValue]!]).responseJSON { [self] response in
            switch response.result {
            case let .success(value):
                let inspectModel = InspectListModel(respJson: JSON(value))
                if inspectModel.code == 200 {
                    if isUpdate {
                        rowsArray = inspectModel.data.rows
                    } else {
                        inspectModel.data.rows.forEach { model in
                            rowsArray.append(model)
                        }
                    }
                    // 必须要重新加载数据,否则不走数据绑定
                    inspectTableView.reloadData()
                } else {
                    AlertHub.shared.showWaringAlert(controller: self, message: "查询失败,请重试")
                }
            case .failure:
                AlertHub.shared.showWaringAlert(controller: self, message: "未知错误")
            }
        }
    }

    func setupTableView() {
        inspectTableView.register(UINib(nibName: "ListCustomCell", bundle: nil), forCellReuseIdentifier: "listCustomCell")
        inspectTableView.dataSource = self
        inspectTableView.delegate = self

        inspectTableView.mj_header = MJRefreshNormalHeader {
            DispatchQueue.main.asyncAfter(deadline: .now() + 0.5, execute: { [self] in
                isUpdate = true
                pageOffSet = 1
                loadData(keywords: "", startTime: "", endTime: "", offset: pageOffSet)
                inspectTableView.mj_header?.endRefreshing()
            })
        }

        inspectTableView.mj_footer = MJRefreshBackNormalFooter {
            DispatchQueue.main.asyncAfter(deadline: .now() + 0.5, execute: { [self] in
                isUpdate = false
                pageOffSet += 1
                loadData(keywords: keyWords ?? "", startTime: startDate ?? "", endTime: endDate ?? "", offset: pageOffSet)
                inspectTableView.mj_footer?.endRefreshing()
            })
        }
    }

    @IBAction func startSearchAction(_ sender: Any) {
        dformatter.dateFormat = "yyyy-MM-dd"
        startDate = dformatter.string(from: startTimePicker.date)
        endDate = dformatter.string(from: endTimePicker.date)
        keyWords = keywordsView?.description
        loadData(keywords: keyWords ?? "", startTime: startDate ?? "", endTime: endDate ?? "", offset: 1)
    }
}

extension InspectViewController: UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        rowsArray.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell: ListCustomCell! = inspectTableView.dequeueReusableCell(withIdentifier: "listCustomCell", for: indexPath) as? ListCustomCell
        cell.selectionStyle = .none
        let row = (indexPath as NSIndexPath).row
        let model = rowsArray[row]
        cell.nameLabel.text = model.name
        cell.dateLabel.text = model.date
        cell.userLabel.text = model.user
        return cell
    }
}

extension InspectViewController: UITableViewDelegate {
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let mapViewController = InspectMapViewController(nibName: "InspectMapViewController", bundle: nil)
        // 委托代理
        valueDelegate = mapViewController
        // 实现代理的方法,传值
        let row = (indexPath as NSIndexPath).row
        let model = rowsArray[row]
        valueDelegate.transfer(controller: self, dic: ["id": model.id])
        navigationController?.pushViewController(mapViewController, animated: true)
    }
}