OOMeetingCreateViewController.swift 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  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. import CocoaLumberjack
  10. private let headerIdentifier = "OOMeetingPersonSelectHeaderView"
  11. private let footerIdentifier = "OOMeetingPersonFooterView"
  12. private let personCellIdentifier = "OOMeetingPersonCell"
  13. private let personActionCellIdentifier = "OOMeetingPersonActionCell"
  14. class OOMeetingCreateViewController: UIViewController {
  15. @IBOutlet weak var ooFormView: OOMeetingCreateFormView!
  16. @IBOutlet weak var ooPersonCollectionView: UICollectionView!
  17. private lazy var viewModel:OOMeetingCreateViewModel = {
  18. return OOMeetingCreateViewModel()
  19. }()
  20. @IBOutlet weak var topLayouConstraint: NSLayoutConstraint!
  21. override func viewDidLoad() {
  22. super.viewDidLoad()
  23. title = "申请会议"
  24. self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "创建", style: .plain, target: self, action: #selector(createMeetingAction(_:)))
  25. ooFormView.delegate = self
  26. ooPersonCollectionView.dataSource = self
  27. ooPersonCollectionView.delegate = self
  28. ooPersonCollectionView.register(UINib.init(nibName: "OOMeetingPersonCell", bundle: nil), forCellWithReuseIdentifier: personCellIdentifier)
  29. ooPersonCollectionView.register(UINib.init(nibName: "OMeetingPersonActionCell", bundle: nil), forCellWithReuseIdentifier: personActionCellIdentifier)
  30. ooPersonCollectionView.register(UINib.init(nibName: "OOMeetingPersonSelectHeaderView", bundle: nil), forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: headerIdentifier)
  31. ooPersonCollectionView.register(UINib.init(nibName: "OOMeetingPersonFooterView", bundle: nil), forSupplementaryViewOfKind: UICollectionView.elementKindSectionFooter, withReuseIdentifier: footerIdentifier)
  32. // topLayouConstraint.constant = 66
  33. ooFormView.ooFormsModels = viewModel.getFormModels()
  34. }
  35. @objc func createMeetingAction(_ sender:Any){
  36. let mForm = ooFormView.getFormDataFormBean()
  37. self.viewModel.selectedPersons.forEach { (p) in
  38. mForm.invitePersonList.append(p.distinguishedName!)
  39. }
  40. let mBean = OOMeetingFormBean(meetingForm: mForm)
  41. if mBean.checkFormValues() {
  42. let jsno = mBean.toJSONString() ?? "default "
  43. DDLogDebug(jsno)
  44. viewModel.createMeetingAction(mBean, completedBlock: { (resultMessage) in
  45. if let message = resultMessage {
  46. //error fail
  47. print(message)
  48. }else{
  49. //successful
  50. self.navigationController?.popViewController(animated: true)
  51. }
  52. })
  53. }
  54. }
  55. override func didReceiveMemoryWarning() {
  56. super.didReceiveMemoryWarning()
  57. // Dispose of any resources that can be recreated.
  58. }
  59. override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
  60. if segue.identifier == "showPersonSelectedSegue" {
  61. let navVC = segue.destination as! ZLNavigationController
  62. let destVC = navVC.topViewController as! OOMeetingSelectedPersonController
  63. destVC.viewModel = self.viewModel
  64. destVC.delegate = self
  65. destVC.currentMode = 2
  66. destVC.title = "选择人员"
  67. }else if segue.identifier == "showPickerRoom" {
  68. if let dest = segue.destination as? OOMeetingMeetingRoomManageController {
  69. dest.currentMode = 1 //单选
  70. dest.delegate = self
  71. }
  72. }
  73. }
  74. }
  75. extension OOMeetingCreateViewController:UICollectionViewDataSource,UICollectionViewDelegate {
  76. func numberOfSections(in collectionView: UICollectionView) -> Int {
  77. return viewModel.collectionViewNumberOfSections()
  78. }
  79. func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
  80. return viewModel.collectionViewNumberOfRowsInSection(section)
  81. }
  82. func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
  83. var cell:UICollectionViewCell?
  84. if let model = viewModel.collectionViewNodeForIndexPath(indexPath) {
  85. cell = collectionView.dequeueReusableCell(withReuseIdentifier: personCellIdentifier, for: indexPath)
  86. let uCell = cell as! (OOMeetingPersonCell & Configurable)
  87. uCell.viewModel = self.viewModel
  88. uCell.config(withItem: model)
  89. } else {
  90. cell = collectionView.dequeueReusableCell(withReuseIdentifier: personActionCellIdentifier, for: indexPath)
  91. let uCell = cell as! OOMeetingPersonActionCell
  92. uCell.delegate = self
  93. }
  94. return cell!
  95. }
  96. func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
  97. var reusableView:UICollectionReusableView = UICollectionReusableView(frame: .zero)
  98. if kind == UICollectionView.elementKindSectionHeader {
  99. reusableView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: headerIdentifier, for: indexPath)
  100. let headerView = reusableView as! OOMeetingPersonSelectHeaderView
  101. headerView.personCount = viewModel.collectionViewNumberOfRowsInSection(indexPath.section) - 1
  102. }else if kind == UICollectionView.elementKindSectionFooter {
  103. reusableView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: footerIdentifier, for: indexPath)
  104. }
  105. return reusableView
  106. }
  107. func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
  108. DDLogDebug("click item")
  109. if let model = viewModel.collectionViewNodeForIndexPath(indexPath) {
  110. self.viewModel.removeSelectPerson(model)
  111. self.ooPersonCollectionView.reloadData()
  112. }
  113. }
  114. }
  115. extension OOMeetingCreateViewController:UICollectionViewDelegateFlowLayout {
  116. func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
  117. return CGSize(width: kScreenW, height: 50)
  118. }
  119. func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForFooterInSection section: Int) -> CGSize {
  120. return CGSize(width: kScreenW, height: 30)
  121. }
  122. }
  123. extension OOMeetingCreateViewController:OOMeetingPersonActionCellDelegate{
  124. func addPersonActionClick(_ sender: UIButton) {
  125. //已经选择的人员
  126. var alreadyChoosePersons: [String] = []
  127. if !self.viewModel.selectedPersons.isEmpty {
  128. self.viewModel.selectedPersons.forEach { (model) in
  129. if let dn = model.distinguishedName {
  130. alreadyChoosePersons.append(dn)
  131. }
  132. }
  133. }
  134. if let v = ContactPickerViewController.providePickerVC(
  135. pickerModes: [ContactPickerType.person],
  136. multiple: true,
  137. initUserPickedArray: alreadyChoosePersons,
  138. pickedDelegate: { (result: O2BizContactPickerResult) in
  139. if let users = result.users {
  140. var persons :[OOPersonModel] = []
  141. users.forEach({ (item) in
  142. let pm = OOPersonModel()
  143. pm.id = item.id
  144. pm.name = item.name
  145. pm.genderType = item.genderType
  146. pm.distinguishedName = item.distinguishedName
  147. persons.append(pm)
  148. })
  149. if !persons.isEmpty {
  150. self.viewModel.selectedPersons = persons
  151. self.ooPersonCollectionView.reloadData()
  152. }
  153. }
  154. }) {
  155. self.navigationController?.pushViewController(v, animated: true)
  156. }
  157. }
  158. }
  159. // MARK:- Common Back Result
  160. extension OOMeetingCreateViewController:OOCommonBackResultDelegate {
  161. func backResult(_ vcIdentifiter: String, _ result: Any?) {
  162. //返回的值
  163. if vcIdentifiter == "OOMeetingMeetingRoomManageController" {
  164. if let rooms = result as? [OOMeetingRoomInfo] {
  165. if !rooms.isEmpty {
  166. self.ooFormView.setSelectedRoom(rooms.first!)
  167. }
  168. }
  169. }else if vcIdentifiter == "showPersonSelectedSegue" {
  170. if let persons = result as? [OOPersonModel] {
  171. if !persons.isEmpty{
  172. self.viewModel.selectedPersons = persons
  173. self.ooPersonCollectionView.reloadData()
  174. }
  175. }
  176. }
  177. }
  178. }
  179. // MARK:- OOMeetingCreateFormViewDelegate
  180. extension OOMeetingCreateViewController:OOMeetingCreateFormViewDelegate{
  181. // MARK:- 人员选择
  182. func performPersonSelected() {
  183. }
  184. // MARK:- 会议室选择
  185. func performRoomSelected() {
  186. self.performSegue(withIdentifier: "showPickerRoom", sender: nil)
  187. // let destVC = self.storyboard?.instantiateViewController(withIdentifier: "OOMeetingMeetingRoomManageController") as! OOMeetingMeetingRoomManageController
  188. // destVC.currentMode = 1 //单选
  189. // destVC.delegate = self
  190. // let navVC = ZLNavigationController(rootViewController: destVC)
  191. // self.pushVC(navVC)
  192. // self.present(navVC, animated: true, completion: nil)
  193. }
  194. }