OOMeetingCreateViewController.swift 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. //
  2. // OOMeetingCreateViewController.swift
  3. // o2app
  4. //
  5. // Created by 刘振兴 on 2018/1/26.
  6. // Copyright © 2018年 zone. All rights reserved.
  7. //
  8. import UIKit
  9. private let headerIdentifier = "OOMeetingPersonSelectHeaderView"
  10. private let footerIdentifier = "OOMeetingPersonFooterView"
  11. private let personCellIdentifier = "OOMeetingPersonCell"
  12. private let personActionCellIdentifier = "OOMeetingPersonActionCell"
  13. class OOMeetingCreateViewController: UIViewController {
  14. @IBOutlet weak var ooFormView: OOMeetingCreateFormView!
  15. @IBOutlet weak var ooPersonCollectionView: UICollectionView!
  16. private lazy var viewModel:OOMeetingCreateViewModel = {
  17. return OOMeetingCreateViewModel()
  18. }()
  19. @IBOutlet weak var topLayouConstraint: NSLayoutConstraint!
  20. override func viewDidLoad() {
  21. super.viewDidLoad()
  22. title = "申请会议"
  23. self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "创建", style: .plain, target: self, action: #selector(createMeetingAction(_:)))
  24. ooFormView.delegate = self
  25. ooPersonCollectionView.dataSource = self
  26. ooPersonCollectionView.delegate = self
  27. ooPersonCollectionView.register(UINib.init(nibName: "OOMeetingPersonCell", bundle: nil), forCellWithReuseIdentifier: personCellIdentifier)
  28. ooPersonCollectionView.register(UINib.init(nibName: "OMeetingPersonActionCell", bundle: nil), forCellWithReuseIdentifier: personActionCellIdentifier)
  29. ooPersonCollectionView.register(UINib.init(nibName: "OOMeetingPersonSelectHeaderView", bundle: nil), forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: headerIdentifier)
  30. ooPersonCollectionView.register(UINib.init(nibName: "OOMeetingPersonFooterView", bundle: nil), forSupplementaryViewOfKind: UICollectionView.elementKindSectionFooter, withReuseIdentifier: footerIdentifier)
  31. // topLayouConstraint.constant = 66
  32. ooFormView.ooFormsModels = viewModel.getFormModels()
  33. }
  34. @objc func createMeetingAction(_ sender:Any){
  35. let mForm = ooFormView.getFormDataFormBean()
  36. self.viewModel.selectedPersons.forEach { (p) in
  37. mForm.invitePersonList.append(p.id!)
  38. }
  39. let mBean = OOMeetingFormBean(meetingForm: mForm)
  40. if mBean.checkFormValues() {
  41. viewModel.createMeetingAction(mBean, completedBlock: { (resultMessage) in
  42. if let message = resultMessage {
  43. //error fail
  44. print(message)
  45. }else{
  46. //successful
  47. self.navigationController?.popViewController(animated: true)
  48. }
  49. })
  50. }
  51. }
  52. override func didReceiveMemoryWarning() {
  53. super.didReceiveMemoryWarning()
  54. // Dispose of any resources that can be recreated.
  55. }
  56. override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
  57. if segue.identifier == "showPersonSelectedSegue" {
  58. let navVC = segue.destination as! ZLNavigationController
  59. let destVC = navVC.topViewController as! OOMeetingSelectedPersonController
  60. destVC.viewModel = self.viewModel
  61. destVC.delegate = self
  62. destVC.currentMode = 2
  63. destVC.title = "选择人员"
  64. }
  65. }
  66. }
  67. extension OOMeetingCreateViewController:UICollectionViewDataSource,UICollectionViewDelegate {
  68. func numberOfSections(in collectionView: UICollectionView) -> Int {
  69. return viewModel.collectionViewNumberOfSections()
  70. }
  71. func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
  72. return viewModel.collectionViewNumberOfRowsInSection(section)
  73. }
  74. func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
  75. var cell:UICollectionViewCell?
  76. if let model = viewModel.collectionViewNodeForIndexPath(indexPath) {
  77. cell = collectionView.dequeueReusableCell(withReuseIdentifier: personCellIdentifier, for: indexPath)
  78. let uCell = cell as! (OOMeetingPersonCell & Configurable)
  79. uCell.viewModel = self.viewModel
  80. uCell.config(withItem: model)
  81. } else {
  82. cell = collectionView.dequeueReusableCell(withReuseIdentifier: personActionCellIdentifier, for: indexPath)
  83. let uCell = cell as! OOMeetingPersonActionCell
  84. uCell.delegate = self
  85. }
  86. return cell!
  87. }
  88. func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
  89. var reusableView:UICollectionReusableView = UICollectionReusableView(frame: .zero)
  90. if kind == UICollectionView.elementKindSectionHeader {
  91. reusableView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: headerIdentifier, for: indexPath)
  92. let headerView = reusableView as! OOMeetingPersonSelectHeaderView
  93. headerView.personCount = viewModel.collectionViewNumberOfRowsInSection(indexPath.section) - 1
  94. }else if kind == UICollectionView.elementKindSectionFooter {
  95. reusableView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: footerIdentifier, for: indexPath)
  96. }
  97. return reusableView
  98. }
  99. }
  100. extension OOMeetingCreateViewController:UICollectionViewDelegateFlowLayout {
  101. func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
  102. return CGSize(width: kScreenW, height: 50)
  103. }
  104. func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForFooterInSection section: Int) -> CGSize {
  105. return CGSize(width: kScreenW, height: 30)
  106. }
  107. }
  108. extension OOMeetingCreateViewController:OOMeetingPersonActionCellDelegate{
  109. func addPersonActionClick(_ sender: UIButton) {
  110. //执行segue
  111. self.performSegue(withIdentifier: "showPersonSelectedSegue", sender: nil)
  112. }
  113. }
  114. // MARK:- Common Back Result
  115. extension OOMeetingCreateViewController:OOCommonBackResultDelegate {
  116. func backResult(_ vcIdentifiter: String, _ result: Any?) {
  117. //返回的值
  118. if vcIdentifiter == "OOMeetingMeetingRoomManageController" {
  119. if let rooms = result as? [OOMeetingRoomInfo] {
  120. if !rooms.isEmpty {
  121. self.ooFormView.setSelectedRoom(rooms.first!)
  122. }
  123. }
  124. }else if vcIdentifiter == "showPersonSelectedSegue" {
  125. if let persons = result as? [OOPersonModel] {
  126. if !persons.isEmpty{
  127. self.viewModel.selectedPersons = persons
  128. self.ooPersonCollectionView.reloadData()
  129. }
  130. }
  131. }
  132. }
  133. }
  134. // MARK:- OOMeetingCreateFormViewDelegate
  135. extension OOMeetingCreateViewController:OOMeetingCreateFormViewDelegate{
  136. // MARK:- 人员选择
  137. func performPersonSelected() {
  138. }
  139. // MARK:- 会议室选择
  140. func performRoomSelected() {
  141. let destVC = self.storyboard?.instantiateViewController(withIdentifier: "OOMeetingMeetingRoomManageController") as! OOMeetingMeetingRoomManageController
  142. destVC.currentMode = 1 //单选
  143. destVC.delegate = self
  144. let navVC = ZLNavigationController(rootViewController: destVC)
  145. self.present(navVC, animated: true, completion: nil)
  146. }
  147. }