OOMeetingCreateViewController.swift 9.7 KB

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