| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281 |
- //
- // OOPersonsViewController.swift
- // O2Platform
- //
- // Created by 刘振兴 on 2018/4/24.
- // Copyright © 2018年 zoneland. All rights reserved.
- //
- import UIKit
- import RxSwift
- import RxCocoa
- import JMessage
- private let ooPersonCellIdentifier = "OOContactPersonCell"
- class OOPersonsViewController: UIViewController {
-
- @IBOutlet weak var tableView: UITableView!
-
- private let viewModel = OOPersonListViewModel()
-
- private var parameter = CommonPageModel()
-
- private var selectedPersons:[OOPersonModel] = []
-
- var isSingleSelected:Bool = true
-
- private var searchController:UISearchController!
-
-
- override func viewDidLoad() {
- super.viewDidLoad()
- navigationItem.rightBarButtonItem = UIBarButtonItem(title: "请选择", style: .plain, target: self, action: #selector(startChart(_:)))
- setRightItem()
- //===添加搜索=====
- searchController = UISearchController.init(searchResultsController: nil)
- searchController.searchResultsUpdater = self
- searchController.dimsBackgroundDuringPresentation = false
- searchController.hidesNavigationBarDuringPresentation = true
- tableView.tableHeaderView = searchController.searchBar
- tableView.register(UINib.init(nibName: "OOSelectPersonTableViewCell", bundle: nil), forCellReuseIdentifier: "OOSelectPersonTableViewCell")
- definesPresentationContext = true
- searchController.searchBar.delegate = self
- //单选发起单聊
- tableView.allowsSelection = true
- if !isSingleSelected {
- tableView.allowsMultipleSelection = true
- }
-
- tableView.register(UINib.init(nibName: "OOContactPersonCell", bundle: nil), forCellReuseIdentifier: ooPersonCellIdentifier)
- tableView.delegate = self
- tableView.dataSource = self
- tableView.mj_header = MJRefreshNormalHeader(refreshingBlock: {
- self.parameter = CommonPageModel()
- self.viewModel.getAllPerson(false,self.parameter, callbackCompleted: { (parameter, errorMessage) in
- self.parameter = parameter
- self.reloadData()
- if self.tableView.mj_header.isRefreshing() {
- self.tableView.mj_header.endRefreshing()
- }
- })
- })
-
- tableView.mj_footer = MJRefreshAutoNormalFooter(refreshingBlock: {
- if self.parameter.isLast() {
- self.tableView.mj_footer.endRefreshingWithNoMoreData()
- }else{
- self.viewModel.getAllPerson(true,self.parameter, callbackCompleted: { (parameter, errorMessage) in
- self.parameter = parameter
- self.reloadData()
- if self.tableView.mj_footer.isRefreshing() {
- self.tableView.mj_footer.endRefreshing()
- }
- })
- }
- })
-
- MBProgressHUD_JChat.showMessage(message: "loading...", toView: view)
- viewModel.getAllPerson(false, parameter) { (parameter, errorMessage) in
- MBProgressHUD_JChat.hide(forView: self.view, animated: true)
- self.parameter = parameter
- self.reloadData()
- }
- }
- override func didReceiveMemoryWarning() {
- super.didReceiveMemoryWarning()
- // Dispose of any resources that can be recreated.
- }
-
- @objc func startChart(_ sender:UIButton){
- if isSingleSelected {
- let username = selectedPersons.first?.id
- MBProgressHUD_JChat.showMessage(message: "创建中...", toView: view)
- JMSGConversation.createSingleConversation(withUsername: username!) { (result, error) in
- MBProgressHUD_JChat.hide(forView: self.view, animated: true)
- if error == nil {
- let conv = result as! JMSGConversation
- let vc = JCChatViewController(conversation: conv)
- NotificationCenter.default.post(name: NSNotification.Name(rawValue: kUpdateConversation), object: nil, userInfo: nil)
- self.navigationController?.pushViewController(vc, animated: true)
- }else{
- O2Logger.error(error.debugDescription)
- MBProgressHUD_JChat.show(text: "创建会话失败,请重试", view: self.view)
- }
- }
- }else{
- MBProgressHUD_JChat.showMessage(message: "创建中...", toView: view)
- let userNames = selectedPersons.map { (p) -> String in
- return p.id!
- }
- JMSGGroup.createGroup(withName: nil, desc: nil, memberArray: userNames, completionHandler: { (result, error) in
- MBProgressHUD_JChat.hide(forView: self.view, animated: true)
- if error == nil {
- for vc in (self.navigationController?.viewControllers)! {
- if vc is JCConversationListViewController {
- self.navigationController?.popToViewController(vc, animated: true)
- let group = result as! JMSGGroup
- JMSGConversation.createGroupConversation(withGroupId: group.gid, completionHandler: { (result, error) in
- let conv = JMSGConversation.groupConversation(withGroupId: group.gid)
- let chatVC = JCChatViewController(conversation: conv!)
- vc.navigationController?.pushViewController(chatVC, animated: true)
- })
- }
- }
-
- } else {
- O2Logger.error(error.debugDescription)
- MBProgressHUD_JChat.show(text: "创建会话失败,请确保添加的群聊成员都使用过O2移动端应用", view: self.view)
- }
- })
- }
- }
-
- private func reloadData(){
- //selectedPersons.removeAll()
- tableView.reloadSections(IndexSet(integer: 1), with: .automatic)
- }
-
- private func setRightItem(){
- navigationItem.rightBarButtonItem?.isEnabled = !selectedPersons.isEmpty
- if !selectedPersons.isEmpty {
- navigationItem.rightBarButtonItem?.title = "确定(\(selectedPersons.count))"
- }else{
- navigationItem.rightBarButtonItem?.title = "请选择"
- }
- }
- }
- extension OOPersonsViewController:UITableViewDataSource,UITableViewDelegate {
- func numberOfSections(in tableView: UITableView) -> Int {
- return viewModel.numberOfSections()
- }
-
- func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
- return viewModel.numberOfRowsInSection(section)
- }
-
- func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
- if indexPath.section == 0 {
- let personCell = tableView.dequeueReusableCell(withIdentifier: "OOSelectPersonTableViewCell", for: indexPath) as! (OOSelectPersonTableViewCell & Configurable)
- personCell.config(withItem: selectedPersons)
- return personCell
- } else if indexPath.section == 1 {
- let cell = tableView.dequeueReusableCell(withIdentifier: ooPersonCellIdentifier, for: indexPath)
- let uCell = cell as! (OOContactPersonCell & Configurable)
- uCell.viewModel = viewModel
- let item = viewModel.nodeForIndexPath(indexPath)
- uCell.config(withItem: item)
- return cell
- }
- return UITableViewCell()
-
- }
-
- func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
- let item = viewModel.nodeForIndexPath(indexPath)
- if isSingleSelected {
- //单选直接删除换新
- selectedPersons.removeAll()
- selectedPersons.append(item!)
- }else{
- if !selectedPersons.contains(item!) {
- selectedPersons.append(item!)
- }
- }
- tableView.beginUpdates()
- tableView.reloadSections(IndexSet(integer: 0) , with: .automatic)
- tableView.endUpdates()
- tableView.deselectRow(at: indexPath, animated: true)
- //searchController.isActive = false
- setRightItem()
- }
-
-
- // func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
- // let cell = tableView.cellForRow(at: indexPath)
- // tableView.beginUpdates()
- // cell?.accessoryView = nil
- // tableView.endUpdates()
- // let item = viewModel.nodeForIndexPath(indexPath)
- // selectedPersons.removeFirst(item!)
- // setRightItem()
- // }
-
- func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
- if section == 0 {
- return "所选择的人员"
- }else if section == 1 {
- return "人员列表"
- }
- return nil
- }
-
- func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
- if section == 0 {
- return 30.0
- }else if section == 1 {
- return 30.0
- }
- return 0.0
- }
-
- func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
- if indexPath.section == 0 {
- return 70.0
- }else if indexPath.section == 1 {
- return 60.0
- }
- return 60.0
- }
-
-
- }
- extension OOPersonsViewController:UISearchResultsUpdating {
- func updateSearchResults(for searchController: UISearchController) {
- if let searchText = searchController.searchBar.text {
- viewModel.isSearchActive = searchController.isActive
- viewModel.filterPerson(searchText) { (errorMessage) in
- if errorMessage == nil {
- self.reloadData()
- }else{
- self.showError(title: errorMessage ?? "")
- }
- }
- }
- }
- }
- extension OOPersonsViewController:UISearchBarDelegate {
-
- func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
- viewModel.isSearchActive = !viewModel.isSearchActive
- self.reloadData()
- }
-
- func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool {
- return true
- }
-
- func searchBarShouldEndEditing(_ searchBar: UISearchBar) -> Bool {
- return true
- }
-
- func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
-
- }
-
- func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
- viewModel.isSearchActive = !viewModel.isSearchActive
- self.reloadData()
- }
-
-
- func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
-
- }
- }
|