| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- //
- // ICDetailViewController.swift
- // O2Platform
- //
- // Created by 刘振兴 on 2016/10/25.
- // Copyright © 2016年 zoneland. All rights reserved.
- //
- import UIKit
- import Alamofire
- import AlamofireImage
- import AlamofireObjectMapper
- import ObjectMapper
- import SwiftyJSON
- import CocoaLumberjack
- import O2OA_Auth_SDK
- class ICDetailViewController: UIViewController {
-
-
- @IBOutlet weak var tableView: ZLBaseTableView!
-
- var currentTime:ICTimeComponent?
-
- var detailDatas:[AttendanceDetailEntry] = []
-
- var selectedDetailDatas:[AttendanceDetailEntry] = []
-
- var segmentedControl:SegmentedControl?{
- didSet {
- tabIndex = (segmentedControl?.selectedIndex)!
- }
- }
-
- var filterPredicate = NSPredicate()
-
- var tabIndex:Int = 0
- override func viewDidLoad() {
- super.viewDidLoad()
- setupUI()
- self.tableView.emptyTitle = "您没有考勤信息"
- self.tableView.dataSource = self
- self.tableView.delegate = self
- self.tableView.mj_header = MJRefreshNormalHeader(refreshingBlock: {
- self.loadICDetailData()
- })
- self.loadICDetailData()
- }
-
- func setupUI(){
- self.initSegmentedControl()
- }
-
- func initSegmentedControl(){
- //申诉状态:0-未申诉,1-申诉中,-1-申诉未通过,9-申诉通过
- let titleStrings = ["全部","未申诉","申诉中","未通过","通过"]
- let titles: [NSAttributedString] = {
- let attributes = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 16), NSAttributedString.Key.foregroundColor: UIColor.black]
- var titles = [NSAttributedString]()
- for titleString in titleStrings {
- let title = NSAttributedString(string: titleString, attributes: attributes)
- titles.append(title)
- }
- return titles
- }()
- let selectedTitles: [NSAttributedString] = {
- let attributes = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 16), NSAttributedString.Key.foregroundColor: base_color]
- var selectedTitles = [NSAttributedString]()
- for titleString in titleStrings {
- let selectedTitle = NSAttributedString(string: titleString, attributes: attributes)
- selectedTitles.append(selectedTitle)
- }
- return selectedTitles
- }()
- self.segmentedControl = SegmentedControl.initWithTitles(titles, selectedTitles: selectedTitles)
- self.segmentedControl!.delegate = self
- self.segmentedControl!.backgroundColor = toolbar_background_color
- self.segmentedControl!.autoresizingMask = [.flexibleRightMargin, .flexibleWidth]
- self.segmentedControl!.selectionIndicatorStyle = .bottom
- self.segmentedControl!.selectionIndicatorColor = base_color
- self.segmentedControl!.selectionIndicatorHeight = 3
- self.segmentedControl!.segmentWidth = SCREEN_WIDTH / CGFloat(titleStrings.count)
- self.segmentedControl!.frame.origin.y = 0
- self.segmentedControl!.frame.size = CGSize(width: UIScreen.main.bounds.width, height: 40)
- view.insertSubview(self.segmentedControl!, belowSubview: navigationController!.navigationBar)
- self.tableView.contentInset = UIEdgeInsets(top: 40, left: 0, bottom: 0, right: 0)
- }
-
- func loadICDetailData(){
- let url = AppDelegate.o2Collect.generateURLWithAppContextKey(icContext.icContextKey, query: icContext.detailMonthPieChartQuery, parameter: nil)
- let filter = AttendanceDetailWrapInFilter()
- filter.cycleYear = currentTime?.year
- filter.cycleMonth = currentTime?.month
- filter.order = "asc"
- filter.q_empName = O2AuthSDK.shared.myInfo()?.name
- self.detailDatas.removeAll()
- Alamofire.request(url!, method: .put, parameters: filter.toJSON(), encoding: JSONEncoding.default, headers: nil).responseJSON { (response) in
- switch response.result {
- case .success(let val):
- let type = JSON(val)["type"]
- if type == "success" {
- let dataJSON = JSON(val)["data"]
- let detailArray = Mapper<AttendanceDetailData>().mapArray(JSONString: dataJSON.description)
- if detailArray != nil {
- let entrys:[AttendanceDetailEntry] = (detailArray?.map({ (element) -> AttendanceDetailEntry in
- return AttendanceDetailEntry.generateDetailEntry(detailData: element)
- }))!
- self.detailDatas.append(contentsOf: entrys)
- self.tabIndexFilter(tabIndex:self.tabIndex)
- }
- }else{
- DDLogError(JSON(val).description)
- }
- case .failure(let err):
- DDLogError(err.localizedDescription)
- }
- if self.tableView.mj_header.isRefreshing() {
- self.tableView.mj_header.endRefreshing()
- }
- }
- }
-
- override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
- if segue.identifier == "showAppealDetailSegue"{
- let destVC = segue.destination as! ICAppealFormViewController
- destVC.detailData = sender as? AttendanceDetailData
- }else if segue.identifier == "showDetailPopoverSegue" {
- let navVC = segue.destination as! ZLNavigationController
- let destVC = navVC.topViewController as! ICDetailDisplayViewController
- destVC.detailData = sender as? AttendanceDetailData
- }
- }
- override func didReceiveMemoryWarning() {
- super.didReceiveMemoryWarning()
- }
- @IBAction func unWindRefreshSegueForFrom(_ segue:UIStoryboardSegue) {
- self.tableView.mj_header.beginRefreshing()
- }
-
-
-
-
-
- }
- extension ICDetailViewController:SegmentedControlDelegate{
- func segmentedControl(_ segmentedControl: SegmentedControl, didSelectIndex selectedIndex: Int) {
- DDLogDebug("selectedIndex = \(selectedIndex)")
- tabIndex = selectedIndex
- tabIndexFilter(tabIndex: selectedIndex)
-
- }
- func tabIndexFilter(tabIndex selectedIndex:Int){
- switch selectedIndex {
- case 0:
- filterDetailDatas(appealStatus: Int.max)
- case 1:
- filterDetailDatas(appealStatus: 0)
- case 2:
- filterDetailDatas(appealStatus: 1)
- case 3:
- filterDetailDatas(appealStatus: -1)
- case 4:
- filterDetailDatas(appealStatus: 9)
- default:
- DDLogDebug("selectedIndex = \(selectedIndex)")
- }
- }
-
- private func filterDetailDatas(appealStatus:Int,isAppeal:Bool=true){
- self.selectedDetailDatas.removeAll()
- let result = self.detailDatas.filter { (entry) -> Bool in
- if appealStatus == Int.max {
- return true
- }else{
- if entry.appealStatus == appealStatus && entry.isAppeal == isAppeal {
- return true
- }else{
- return false
- }
- }
- }
- self.selectedDetailDatas.append(contentsOf: result)
- self.tableView.reloadData()
- }
- }
- extension ICDetailViewController:AppealDetailCellDelegate{
- func appealDetailAction(_ cell: AppealDetailCell) {
- DDLogDebug(cell.entry?.detailObj?.id ?? "id error")
- let detailObj = cell.entry?.detailObj
- self.performSegue(withIdentifier: "showAppealDetailSegue", sender: detailObj)
- }
- }
- extension ICDetailViewController:UITableViewDelegate,UITableViewDataSource {
- func numberOfSections(in tableView: UITableView) -> Int {
- return 1
- }
-
- func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
- return self.selectedDetailDatas.count
- }
-
- func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
- let cell:AppealDetailCell = tableView.dequeueReusableCell(withIdentifier: "appealDetailCell", for: indexPath) as! AppealDetailCell
- cell.entry = self.selectedDetailDatas[indexPath.row]
- cell.delegate = self
- return cell
- }
-
- func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
- DDLogDebug("cell clicked")
- // if tabIndex != Int.max {
- // let detailEntry:AttendanceDetailEntry = self.selectedDetailDatas[indexPath.row]
- // self.performSegue(withIdentifier: "showDetailPopoverSegue", sender: detailEntry.detailObj)
- // }
- }
- }
|