OOPersonsViewController.swift 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. //
  2. // OOPersonsViewController.swift
  3. // O2Platform
  4. //
  5. // Created by 刘振兴 on 2018/4/24.
  6. // Copyright © 2018年 zoneland. All rights reserved.
  7. //
  8. import UIKit
  9. import RxSwift
  10. import RxCocoa
  11. import JMessage
  12. private let ooPersonCellIdentifier = "OOContactPersonCell"
  13. class OOPersonsViewController: UIViewController {
  14. @IBOutlet weak var tableView: UITableView!
  15. private let viewModel = OOPersonListViewModel()
  16. private var parameter = CommonPageModel()
  17. private var selectedPersons:[OOPersonModel] = []
  18. var isSingleSelected:Bool = true
  19. private var searchController:UISearchController!
  20. override func viewDidLoad() {
  21. super.viewDidLoad()
  22. navigationItem.rightBarButtonItem = UIBarButtonItem(title: "请选择", style: .plain, target: self, action: #selector(startChart(_:)))
  23. setRightItem()
  24. //===添加搜索=====
  25. searchController = UISearchController.init(searchResultsController: nil)
  26. searchController.searchResultsUpdater = self
  27. searchController.dimsBackgroundDuringPresentation = false
  28. searchController.hidesNavigationBarDuringPresentation = true
  29. tableView.tableHeaderView = searchController.searchBar
  30. tableView.register(UINib.init(nibName: "OOSelectPersonTableViewCell", bundle: nil), forCellReuseIdentifier: "OOSelectPersonTableViewCell")
  31. definesPresentationContext = true
  32. searchController.searchBar.delegate = self
  33. //单选发起单聊
  34. tableView.allowsSelection = true
  35. if !isSingleSelected {
  36. tableView.allowsMultipleSelection = true
  37. }
  38. tableView.register(UINib.init(nibName: "OOContactPersonCell", bundle: nil), forCellReuseIdentifier: ooPersonCellIdentifier)
  39. tableView.delegate = self
  40. tableView.dataSource = self
  41. tableView.mj_header = MJRefreshNormalHeader(refreshingBlock: {
  42. self.parameter = CommonPageModel()
  43. self.viewModel.getAllPerson(false,self.parameter, callbackCompleted: { (parameter, errorMessage) in
  44. self.parameter = parameter
  45. self.reloadData()
  46. if self.tableView.mj_header.isRefreshing() {
  47. self.tableView.mj_header.endRefreshing()
  48. }
  49. })
  50. })
  51. tableView.mj_footer = MJRefreshAutoNormalFooter(refreshingBlock: {
  52. if self.parameter.isLast() {
  53. self.tableView.mj_footer.endRefreshingWithNoMoreData()
  54. }else{
  55. self.viewModel.getAllPerson(true,self.parameter, callbackCompleted: { (parameter, errorMessage) in
  56. self.parameter = parameter
  57. self.reloadData()
  58. if self.tableView.mj_footer.isRefreshing() {
  59. self.tableView.mj_footer.endRefreshing()
  60. }
  61. })
  62. }
  63. })
  64. MBProgressHUD_JChat.showMessage(message: "loading...", toView: view)
  65. viewModel.getAllPerson(false, parameter) { (parameter, errorMessage) in
  66. MBProgressHUD_JChat.hide(forView: self.view, animated: true)
  67. self.parameter = parameter
  68. self.reloadData()
  69. }
  70. }
  71. override func didReceiveMemoryWarning() {
  72. super.didReceiveMemoryWarning()
  73. // Dispose of any resources that can be recreated.
  74. }
  75. @objc func startChart(_ sender:UIButton){
  76. if isSingleSelected {
  77. let username = selectedPersons.first?.id
  78. MBProgressHUD_JChat.showMessage(message: "创建中...", toView: view)
  79. JMSGConversation.createSingleConversation(withUsername: username!) { (result, error) in
  80. MBProgressHUD_JChat.hide(forView: self.view, animated: true)
  81. if error == nil {
  82. let conv = result as! JMSGConversation
  83. let vc = JCChatViewController(conversation: conv)
  84. NotificationCenter.default.post(name: NSNotification.Name(rawValue: kUpdateConversation), object: nil, userInfo: nil)
  85. self.navigationController?.pushViewController(vc, animated: true)
  86. }else{
  87. O2Logger.error(error.debugDescription)
  88. MBProgressHUD_JChat.show(text: "创建会话失败,请重试", view: self.view)
  89. }
  90. }
  91. }else{
  92. MBProgressHUD_JChat.showMessage(message: "创建中...", toView: view)
  93. let userNames = selectedPersons.map { (p) -> String in
  94. return p.id!
  95. }
  96. JMSGGroup.createGroup(withName: nil, desc: nil, memberArray: userNames, completionHandler: { (result, error) in
  97. MBProgressHUD_JChat.hide(forView: self.view, animated: true)
  98. if error == nil {
  99. for vc in (self.navigationController?.viewControllers)! {
  100. if vc is JCConversationListViewController {
  101. self.navigationController?.popToViewController(vc, animated: true)
  102. let group = result as! JMSGGroup
  103. JMSGConversation.createGroupConversation(withGroupId: group.gid, completionHandler: { (result, error) in
  104. let conv = JMSGConversation.groupConversation(withGroupId: group.gid)
  105. let chatVC = JCChatViewController(conversation: conv!)
  106. vc.navigationController?.pushViewController(chatVC, animated: true)
  107. })
  108. }
  109. }
  110. } else {
  111. O2Logger.error(error.debugDescription)
  112. MBProgressHUD_JChat.show(text: "创建会话失败,请确保添加的群聊成员都使用过O2移动端应用", view: self.view)
  113. }
  114. })
  115. }
  116. }
  117. private func reloadData(){
  118. //selectedPersons.removeAll()
  119. tableView.reloadSections(IndexSet(integer: 1), with: .automatic)
  120. }
  121. private func setRightItem(){
  122. navigationItem.rightBarButtonItem?.isEnabled = !selectedPersons.isEmpty
  123. if !selectedPersons.isEmpty {
  124. navigationItem.rightBarButtonItem?.title = "确定(\(selectedPersons.count))"
  125. }else{
  126. navigationItem.rightBarButtonItem?.title = "请选择"
  127. }
  128. }
  129. }
  130. extension OOPersonsViewController:UITableViewDataSource,UITableViewDelegate {
  131. func numberOfSections(in tableView: UITableView) -> Int {
  132. return viewModel.numberOfSections()
  133. }
  134. func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  135. return viewModel.numberOfRowsInSection(section)
  136. }
  137. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  138. if indexPath.section == 0 {
  139. let personCell = tableView.dequeueReusableCell(withIdentifier: "OOSelectPersonTableViewCell", for: indexPath) as! (OOSelectPersonTableViewCell & Configurable)
  140. personCell.config(withItem: selectedPersons)
  141. return personCell
  142. } else if indexPath.section == 1 {
  143. let cell = tableView.dequeueReusableCell(withIdentifier: ooPersonCellIdentifier, for: indexPath)
  144. let uCell = cell as! (OOContactPersonCell & Configurable)
  145. uCell.viewModel = viewModel
  146. let item = viewModel.nodeForIndexPath(indexPath)
  147. uCell.config(withItem: item)
  148. return cell
  149. }
  150. return UITableViewCell()
  151. }
  152. func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  153. let item = viewModel.nodeForIndexPath(indexPath)
  154. if isSingleSelected {
  155. //单选直接删除换新
  156. selectedPersons.removeAll()
  157. selectedPersons.append(item!)
  158. }else{
  159. if !selectedPersons.contains(item!) {
  160. selectedPersons.append(item!)
  161. }
  162. }
  163. tableView.beginUpdates()
  164. tableView.reloadSections(IndexSet(integer: 0) , with: .automatic)
  165. tableView.endUpdates()
  166. tableView.deselectRow(at: indexPath, animated: true)
  167. //searchController.isActive = false
  168. setRightItem()
  169. }
  170. // func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
  171. // let cell = tableView.cellForRow(at: indexPath)
  172. // tableView.beginUpdates()
  173. // cell?.accessoryView = nil
  174. // tableView.endUpdates()
  175. // let item = viewModel.nodeForIndexPath(indexPath)
  176. // selectedPersons.removeFirst(item!)
  177. // setRightItem()
  178. // }
  179. func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
  180. if section == 0 {
  181. return "所选择的人员"
  182. }else if section == 1 {
  183. return "人员列表"
  184. }
  185. return nil
  186. }
  187. func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
  188. if section == 0 {
  189. return 30.0
  190. }else if section == 1 {
  191. return 30.0
  192. }
  193. return 0.0
  194. }
  195. func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  196. if indexPath.section == 0 {
  197. return 70.0
  198. }else if indexPath.section == 1 {
  199. return 60.0
  200. }
  201. return 60.0
  202. }
  203. }
  204. extension OOPersonsViewController:UISearchResultsUpdating {
  205. func updateSearchResults(for searchController: UISearchController) {
  206. if let searchText = searchController.searchBar.text {
  207. viewModel.isSearchActive = searchController.isActive
  208. viewModel.filterPerson(searchText) { (errorMessage) in
  209. if errorMessage == nil {
  210. self.reloadData()
  211. }else{
  212. self.showError(title: errorMessage ?? "")
  213. }
  214. }
  215. }
  216. }
  217. }
  218. extension OOPersonsViewController:UISearchBarDelegate {
  219. func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
  220. viewModel.isSearchActive = !viewModel.isSearchActive
  221. self.reloadData()
  222. }
  223. func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool {
  224. return true
  225. }
  226. func searchBarShouldEndEditing(_ searchBar: UISearchBar) -> Bool {
  227. return true
  228. }
  229. func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
  230. }
  231. func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
  232. viewModel.isSearchActive = !viewModel.isSearchActive
  233. self.reloadData()
  234. }
  235. func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
  236. }
  237. }