ICDetailViewController.swift 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. //
  2. // ICDetailViewController.swift
  3. // O2Platform
  4. //
  5. // Created by 刘振兴 on 2016/10/25.
  6. // Copyright © 2016年 zoneland. All rights reserved.
  7. //
  8. import UIKit
  9. import Alamofire
  10. import AlamofireImage
  11. import AlamofireObjectMapper
  12. import ObjectMapper
  13. import SwiftyJSON
  14. import CocoaLumberjack
  15. import O2OA_Auth_SDK
  16. class ICDetailViewController: UIViewController {
  17. @IBOutlet weak var tableView: ZLBaseTableView!
  18. var currentTime:ICTimeComponent?
  19. var detailDatas:[AttendanceDetailEntry] = []
  20. var selectedDetailDatas:[AttendanceDetailEntry] = []
  21. var segmentedControl:SegmentedControl?{
  22. didSet {
  23. tabIndex = (segmentedControl?.selectedIndex)!
  24. }
  25. }
  26. var filterPredicate = NSPredicate()
  27. var tabIndex:Int = 0
  28. override func viewDidLoad() {
  29. super.viewDidLoad()
  30. setupUI()
  31. self.tableView.emptyTitle = "您没有考勤信息"
  32. self.tableView.dataSource = self
  33. self.tableView.delegate = self
  34. self.tableView.mj_header = MJRefreshNormalHeader(refreshingBlock: {
  35. self.loadICDetailData()
  36. })
  37. self.loadICDetailData()
  38. }
  39. func setupUI(){
  40. self.initSegmentedControl()
  41. }
  42. func initSegmentedControl(){
  43. //申诉状态:0-未申诉,1-申诉中,-1-申诉未通过,9-申诉通过
  44. let titleStrings = ["全部","未申诉","申诉中","未通过","通过"]
  45. let titles: [NSAttributedString] = {
  46. let attributes = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 16), NSAttributedString.Key.foregroundColor: UIColor.black]
  47. var titles = [NSAttributedString]()
  48. for titleString in titleStrings {
  49. let title = NSAttributedString(string: titleString, attributes: attributes)
  50. titles.append(title)
  51. }
  52. return titles
  53. }()
  54. let selectedTitles: [NSAttributedString] = {
  55. let attributes = [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 16), NSAttributedString.Key.foregroundColor: base_color]
  56. var selectedTitles = [NSAttributedString]()
  57. for titleString in titleStrings {
  58. let selectedTitle = NSAttributedString(string: titleString, attributes: attributes)
  59. selectedTitles.append(selectedTitle)
  60. }
  61. return selectedTitles
  62. }()
  63. self.segmentedControl = SegmentedControl.initWithTitles(titles, selectedTitles: selectedTitles)
  64. self.segmentedControl!.delegate = self
  65. self.segmentedControl!.backgroundColor = toolbar_background_color
  66. self.segmentedControl!.autoresizingMask = [.flexibleRightMargin, .flexibleWidth]
  67. self.segmentedControl!.selectionIndicatorStyle = .bottom
  68. self.segmentedControl!.selectionIndicatorColor = base_color
  69. self.segmentedControl!.selectionIndicatorHeight = 3
  70. self.segmentedControl!.segmentWidth = SCREEN_WIDTH / CGFloat(titleStrings.count)
  71. self.segmentedControl!.frame.origin.y = 0
  72. self.segmentedControl!.frame.size = CGSize(width: UIScreen.main.bounds.width, height: 40)
  73. view.insertSubview(self.segmentedControl!, belowSubview: navigationController!.navigationBar)
  74. self.tableView.contentInset = UIEdgeInsets(top: 40, left: 0, bottom: 0, right: 0)
  75. }
  76. func loadICDetailData(){
  77. let url = AppDelegate.o2Collect.generateURLWithAppContextKey(icContext.icContextKey, query: icContext.detailMonthPieChartQuery, parameter: nil)
  78. let filter = AttendanceDetailWrapInFilter()
  79. filter.cycleYear = currentTime?.year
  80. filter.cycleMonth = currentTime?.month
  81. filter.order = "asc"
  82. filter.q_empName = O2AuthSDK.shared.myInfo()?.name
  83. self.detailDatas.removeAll()
  84. Alamofire.request(url!, method: .put, parameters: filter.toJSON(), encoding: JSONEncoding.default, headers: nil).responseJSON { (response) in
  85. switch response.result {
  86. case .success(let val):
  87. let type = JSON(val)["type"]
  88. if type == "success" {
  89. let dataJSON = JSON(val)["data"]
  90. let detailArray = Mapper<AttendanceDetailData>().mapArray(JSONString: dataJSON.description)
  91. if detailArray != nil {
  92. let entrys:[AttendanceDetailEntry] = (detailArray?.map({ (element) -> AttendanceDetailEntry in
  93. return AttendanceDetailEntry.generateDetailEntry(detailData: element)
  94. }))!
  95. self.detailDatas.append(contentsOf: entrys)
  96. self.tabIndexFilter(tabIndex:self.tabIndex)
  97. }
  98. }else{
  99. DDLogError(JSON(val).description)
  100. }
  101. case .failure(let err):
  102. DDLogError(err.localizedDescription)
  103. }
  104. if self.tableView.mj_header.isRefreshing() {
  105. self.tableView.mj_header.endRefreshing()
  106. }
  107. }
  108. }
  109. override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
  110. if segue.identifier == "showAppealDetailSegue"{
  111. let destVC = segue.destination as! ICAppealFormViewController
  112. destVC.detailData = sender as? AttendanceDetailData
  113. }else if segue.identifier == "showDetailPopoverSegue" {
  114. let navVC = segue.destination as! ZLNavigationController
  115. let destVC = navVC.topViewController as! ICDetailDisplayViewController
  116. destVC.detailData = sender as? AttendanceDetailData
  117. }
  118. }
  119. override func didReceiveMemoryWarning() {
  120. super.didReceiveMemoryWarning()
  121. }
  122. @IBAction func unWindRefreshSegueForFrom(_ segue:UIStoryboardSegue) {
  123. self.tableView.mj_header.beginRefreshing()
  124. }
  125. }
  126. extension ICDetailViewController:SegmentedControlDelegate{
  127. func segmentedControl(_ segmentedControl: SegmentedControl, didSelectIndex selectedIndex: Int) {
  128. DDLogDebug("selectedIndex = \(selectedIndex)")
  129. tabIndex = selectedIndex
  130. tabIndexFilter(tabIndex: selectedIndex)
  131. }
  132. func tabIndexFilter(tabIndex selectedIndex:Int){
  133. switch selectedIndex {
  134. case 0:
  135. filterDetailDatas(appealStatus: Int.max)
  136. case 1:
  137. filterDetailDatas(appealStatus: 0)
  138. case 2:
  139. filterDetailDatas(appealStatus: 1)
  140. case 3:
  141. filterDetailDatas(appealStatus: -1)
  142. case 4:
  143. filterDetailDatas(appealStatus: 9)
  144. default:
  145. DDLogDebug("selectedIndex = \(selectedIndex)")
  146. }
  147. }
  148. private func filterDetailDatas(appealStatus:Int,isAppeal:Bool=true){
  149. self.selectedDetailDatas.removeAll()
  150. let result = self.detailDatas.filter { (entry) -> Bool in
  151. if appealStatus == Int.max {
  152. return true
  153. }else{
  154. if entry.appealStatus == appealStatus && entry.isAppeal == isAppeal {
  155. return true
  156. }else{
  157. return false
  158. }
  159. }
  160. }
  161. self.selectedDetailDatas.append(contentsOf: result)
  162. self.tableView.reloadData()
  163. }
  164. }
  165. extension ICDetailViewController:AppealDetailCellDelegate{
  166. func appealDetailAction(_ cell: AppealDetailCell) {
  167. DDLogDebug(cell.entry?.detailObj?.id ?? "id error")
  168. let detailObj = cell.entry?.detailObj
  169. self.performSegue(withIdentifier: "showAppealDetailSegue", sender: detailObj)
  170. }
  171. }
  172. extension ICDetailViewController:UITableViewDelegate,UITableViewDataSource {
  173. func numberOfSections(in tableView: UITableView) -> Int {
  174. return 1
  175. }
  176. func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  177. return self.selectedDetailDatas.count
  178. }
  179. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  180. let cell:AppealDetailCell = tableView.dequeueReusableCell(withIdentifier: "appealDetailCell", for: indexPath) as! AppealDetailCell
  181. cell.entry = self.selectedDetailDatas[indexPath.row]
  182. cell.delegate = self
  183. return cell
  184. }
  185. func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  186. DDLogDebug("cell clicked")
  187. // if tabIndex != Int.max {
  188. // let detailEntry:AttendanceDetailEntry = self.selectedDetailDatas[indexPath.row]
  189. // self.performSegue(withIdentifier: "showDetailPopoverSegue", sender: detailEntry.detailObj)
  190. // }
  191. }
  192. }