123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- //
- // ContactSearchViewController.swift
- // O2Platform
- //
- // Created by 刘振兴 on 16/7/18.
- // Copyright © 2016年 zoneland. All rights reserved.
- //
- import UIKit
- import Alamofire
- import AlamofireImage
- import AlamofireObjectMapper
- import SwiftyJSON
- import ObjectMapper
- import CocoaLumberjack
- class ContactSearchViewController: UITableViewController {
-
-
- var searchContacts:[Int:[CellViewModel]] = [:]
-
- var sections:[Int:String] = [:]
-
- let searchController = UISearchController(searchResultsController: nil)
-
-
- override func viewWillAppear(_ animated: Bool) {
- //self.navigationController?.navigationBarHidden = true
- //searchController.searchBar.showsCancelButton = false
- }
-
- override func viewDidDisappear(_ animated: Bool) {
- //self.navigationController?.navigationBarHidden = false
- }
- override func viewDidLoad() {
- super.viewDidLoad()
- self.title = "搜索"
- // if (self.navigationController != nil) {
- // self.navigationController?.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Cancel, target: self, action: #selector(closeSearch))
- // }
-
-
- searchController.delegate = self
- searchController.searchResultsUpdater = self
- searchController.searchBar.delegate = self
- searchBarInit(searchController.searchBar)
- searchController.searchBar.scopeButtonTitles = ["所有", "公司", "部门", "个人"]
- //searchController.searchBar.showsScopeBar = true
- self.definesPresentationContext = true
- searchController.dimsBackgroundDuringPresentation = false
- searchController.hidesNavigationBarDuringPresentation = false
- // Setup the Scope Bar
- tableView.tableHeaderView = searchController.searchBar
- tableView.tableHeaderView?.sizeToFit()
- //searchController.active = true
-
- //self.navigationController?.navigationBar.addSubview(searchController.searchBar)
- }
-
- private func searchBarInit(_ searchBar:UISearchBar){
- // searchBar.setBackgroundImage(UIImage(), for: .any, barMetrics: .default)
- // searchBar.barTintColor = navbar_barTint_color
- //
- if let searchField = searchBar.value(forKey: "searchField") as? UITextField {
- searchField.placeholder = "请输入搜索关键字"
- // searchField.backgroundColor = navbar_barTint_color
- // searchField.layer.cornerRadius = 14
- // searchField.layer.borderColor = UIColor.gray.cgColor
- // searchField.layer.borderWidth = 1
- // searchField.layer.masksToBounds = true
-
- }
-
- UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).title = "取消"
- }
-
-
-
-
- override func didReceiveMemoryWarning() {
- super.didReceiveMemoryWarning()
- // Dispose of any resources that can be recreated.
- }
- // MARK: - Table view data source
- override func numberOfSections(in tableView: UITableView) -> Int {
- return self.searchContacts.count
- }
- override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
- return (self.searchContacts[section]?.count)!
- }
-
- override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
- let cell = tableView.dequeueReusableCell(withIdentifier: "searchItemCell", for: indexPath) as! ContactItemCell
- cell.cellViewModel = self.searchContacts[(indexPath as NSIndexPath).section]![(indexPath as NSIndexPath).row]
- return cell
- }
-
- override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
- return self.sections[section]
- }
-
- override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
- let cellViewModel = self.searchContacts[(indexPath as NSIndexPath).section]![(indexPath as NSIndexPath).row]
- switch cellViewModel.dataType {
- case .company(let c):
- //self.performSegueWithIdentifier("searchCompanyDepartSegue", sender: c)
- let contactStoryboard = UIStoryboard(name: "contacts", bundle: Bundle.main)
- let destVC = contactStoryboard.instantiateViewController(withIdentifier: "companyDept") as! ContactCompanyDeptController
- destVC.superCompany = c as? Company
- self.navigationController?.pushViewController(destVC, animated: true)
- case .depart(let d):
- let contactStoryboard = UIStoryboard(name: "contacts", bundle: Bundle.main)
- let destVC = contactStoryboard.instantiateViewController(withIdentifier: "DeptPerson") as! ContactDeptPersonController
- destVC.superOrgUnit = d as? OrgUnit
- self.navigationController?.pushViewController(destVC, animated: true)
- //self.performSegueWithIdentifier("searchDepartPersonSegue", sender: d)
- case .group(let g):
- self.performSegue(withIdentifier: "searchPersonGroupSegue", sender: g)
- case .identity(let i):
- self.performSegue(withIdentifier: "searchPersonInfoSegue", sender: i)
- case .person(let p):
- self.performSegue(withIdentifier: "searchPersonDetailInfoSegue", sender: p)
- case .title:
- break
- }
- }
-
- override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
- if segue.identifier == "searchCompanyDepartSegue" {
- let destVC = segue.destination as! ContactCompanyDeptController
- destVC.superCompany = sender as? Company
- }else if segue.identifier == "searchDepartPersonSegue" {
- let destVC = segue.destination as! ContactDeptPersonController
- destVC.superOrgUnit = sender as? OrgUnit
- }else if segue.identifier == "searchPersonDetailInfoSegue" {
- let destVC = segue.destination as! ContactPersonInfoController
- destVC.contact = sender as? PersonV2
- }
- }
-
- func loadSearchData(_ searchText:String?,scopeIndex:Int){
- //let sText = (searchText == nil ? "":searchText)
- //DDLogDebug("searchText=\(sText),scopeIndex = \(scopeIndex)")
- self.searchContacts.removeAll()
- if !(searchText?.isEmpty)! {
- let urls = getURLSFromScope(searchText!, scope: scopeIndex)
- if urls.count>1 {
- for (index,url) in urls {
- AF.request(url).responseJSON {
- response in
- switch response.result {
- case .success(let val):
- let objects = JSON(val)["data"]
- self.searchContacts[index]?.removeAll()
- switch index {
- case 0:
- let companys = Mapper<Company>().mapArray(JSONString:objects.description)
- for comp in companys!{
- let vm = CellViewModel(name: comp.name,sourceObject: comp)
- self.searchContacts[index]?.append(vm)
- }
- case 1:
- let departmets = Mapper<Department>().mapArray(JSONString:objects.description)
- for dept in departmets!{
- let vm = CellViewModel(name: dept.name,sourceObject: dept)
- self.searchContacts[index]?.append(vm)
- }
- case 2:
- let persons = Mapper<Person>().mapArray(JSONString:objects.description)
- for person in persons!{
- let vm = CellViewModel(name: person.name,sourceObject: person)
- self.searchContacts[index]?.append(vm)
- }
- default:
- DDLogError("have no match category")
- }
- case .failure(let err):
- DDLogError("request err = \(err)")
- }
- self.tableView.reloadData()
- }
-
- }
- }else{
- let (index,url) = urls.first!
- AF.request(url).responseJSON {
- response in
- switch response.result {
- case .success(let val):
- let objects = JSON(val)["data"]
- self.searchContacts[0]?.removeAll()
- switch index {
- case 0:
- let companys = Mapper<Company>().mapArray(JSONString:objects.description)
- for comp in companys!{
- let vm = CellViewModel(name: comp.name,sourceObject: comp)
- self.searchContacts[0]?.append(vm)
- }
- case 1:
- let departmets = Mapper<Department>().mapArray(JSONString:objects.description)
- for dept in departmets!{
- let vm = CellViewModel(name: dept.name,sourceObject: dept)
- self.searchContacts[0]?.append(vm)
- }
- case 2:
- let persons = Mapper<Person>().mapArray(JSONString:objects.description)
- for person in persons!{
- let vm = CellViewModel(name: person.name,sourceObject: person)
- self.searchContacts[0]?.append(vm)
- }
- default:
- DDLogError("have no match category")
- }
- case .failure(let err):
- DDLogError("request err = \(err)")
- }
- self.tableView.reloadData()
- }
- }
- }else{
- self.searchContacts.removeAll()
- self.sections.removeAll()
- self.tableView.reloadData()
- }
- //self.tableView.reloadData()
- }
-
- func getURLSFromScope(_ searchText:String,scope:Int)->[Int:String]{
- var urls:[Int:String]=[:]
- self.searchContacts.removeAll()
- switch scope {
- case 1:
- self.searchContacts = [0:[]]
- self.sections = [0:"公司列表"]
- let url = AppDelegate.o2Collect.generateURLWithAppContextKey(ContactContext.contactsContextKey, query: ContactContext.companySearchByKeyQuery, parameter: ["##key##":searchText as AnyObject])
- urls = [0:url!]
- case 2:
- self.searchContacts = [0:[]]
- self.sections = [0:"部门列表"]
- let url = AppDelegate.o2Collect.generateURLWithAppContextKey(ContactContext.contactsContextKey, query: ContactContext.departmentSearchByKeyQuery, parameter: ["##key##":searchText as AnyObject])
- urls = [1:url!]
- case 3:
- self.searchContacts = [0:[]]
- self.sections = [0:"人员列表"]
- let url = AppDelegate.o2Collect.generateURLWithAppContextKey(ContactContext.contactsContextKey, query: ContactContext.personSearchByKeyQuery, parameter: ["##key##":searchText as AnyObject])
- urls = [2:url!]
- default:
- self.searchContacts = [0:[],1:[],2:[]]
- self.sections = [0:"公司列表",1:"部门列表",2:"人员列表"]
- let url1 = AppDelegate.o2Collect.generateURLWithAppContextKey(ContactContext.contactsContextKey, query: ContactContext.companySearchByKeyQuery, parameter: ["##key##":searchText as AnyObject])
- let url2 = AppDelegate.o2Collect.generateURLWithAppContextKey(ContactContext.contactsContextKey, query: ContactContext.departmentSearchByKeyQuery, parameter: ["##key##":searchText as AnyObject])
- let url3 = AppDelegate.o2Collect.generateURLWithAppContextKey(ContactContext.contactsContextKey, query: ContactContext.personSearchByKeyQuery, parameter: ["##key##":searchText as AnyObject])
- urls[0]=url1!
- urls[1]=url2!
- urls[2]=url3!
- }
- return urls
- }
-
- @IBAction func closeWindow(_ sender: AnyObject) {
- if let preVC = self.presentedViewController {
- preVC.dismiss(animated: true, completion: {
-
- })
- }
- self.dismiss(animated: true, completion: nil)
- }
- // func closeSearch(sender:AnyObject?){
- // self.dismissViewControllerAnimated(true, completion: nil)
- // }
-
-
-
- }
- extension ContactSearchViewController:UISearchControllerDelegate{
- func willPresentSearchController(_ searchController: UISearchController) {
- NSLog("willPresentSearchController")
-
- }
-
- func didPresentSearchController(_ searchController: UISearchController) {
- NSLog("didPresentSearchController")
- searchController.searchBar.setShowsCancelButton(false, animated: true)
- }
-
- func willDismissSearchController(_ searchController: UISearchController) {
- NSLog("willDismissSearchController")
- }
-
- func didDismissSearchController(_ searchController: UISearchController) {
- NSLog("didDismissSearchController")
- }
-
- func presentSearchController(_ searchController: UISearchController) {
- NSLog("presentSearchController")
- }
-
-
- }
- extension ContactSearchViewController:UISearchBarDelegate{
- // func searchBarCancelButtonClicked(searchBar: UISearchBar) {
- // self.dismissViewControllerAnimated(true, completion: nil)
- // }
- func searchBar(_ searchBar: UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int) {
- self.loadSearchData(searchBar.text, scopeIndex: selectedScope)
- }
-
-
- }
- extension ContactSearchViewController:UISearchResultsUpdating{
- func updateSearchResults(for searchController: UISearchController) {
- let searchBar = searchController.searchBar
- self.loadSearchData(searchBar.text, scopeIndex: searchBar.selectedScopeButtonIndex)
- }
- }
|