123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285 |
- //
- // O2SearchController.swift
- // O2Platform
- //
- // Created by FancyLou on 2021/5/21.
- // Copyright © 2021 zoneland. All rights reserved.
- //
- import UIKit
- import CocoaLumberjack
- class O2SearchController: UIViewController {
-
- private lazy var viewmodel: O2SearchViewModel = {
- return O2SearchViewModel()
- }()
-
- /// 查询结果 ListView
- fileprivate lazy var tableview: UITableView = {
- var tableview = UITableView(frame: CGRect(x: 0, y: 0, width: self.view.width, height: self.view.height - TAB_BAR_HEIGHT))
- tableview.delegate = self
- tableview.dataSource = self
- tableview.backgroundColor = UIColor(hex: "#F5F5F5")
- tableview.register(UINib(nibName: "O2SearchResultCell", bundle: nil), forCellReuseIdentifier: "O2SearchResultCell")
- tableview.separatorStyle = .none
- return tableview
- }()
-
- /// 空数据的View
- fileprivate lazy var emptyView: UIView = {
- let view = UIView(frame: CGRect(x: 0, y: 0, width: self.view.width, height: self.view.height - TAB_BAR_HEIGHT))
- view.backgroundColor = UIColor(hex: "#F5F5F5")
- let wuImage = UIImageView(frame: CGRect(x: 0, y: 0, width: 260, height: 163.5))
- wuImage.image = UIImage(named: "pic_wu")
- view.addSubview(wuImage)
- wuImage.snp.makeConstraints { (maker) in
- maker.center.equalToSuperview()
- }
-
- let tips = UILabel()
- tips.text = L10n.Search.searchNoResult
- tips.textColor = UIColor(hex: "#B3B3B3")
- tips.sizeToFit()
- view.addSubview(tips)
- tips.snp.makeConstraints { (maker) in
- maker.top.equalTo(wuImage.snp.bottom).offset(20)
- maker.centerX.equalToSuperview()
- }
- return view
- }()
-
- /// 历史查询关键字
- fileprivate lazy var historyView: O2SearchHistoryView = {
- let view = O2SearchHistoryView(frame: CGRect(x: 0, y: 0, width: self.view.width, height: self.view.height - TAB_BAR_HEIGHT))
- return view
- }()
-
- // 搜索框
- private var searchBar: UISearchBar?
- private var searchKey: String = ""
- private var resultList: [O2SearchEntry] = []
- private var page = 1
- private var totalPage = 1
-
-
- override func viewDidLoad() {
- super.viewDidLoad()
- self.title = L10n.Search.search
- self.view.backgroundColor = UIColor(hex: "#F5F5F5")
- view.addSubview(tableview)
- //分页刷新功能
- self.tableview.mj_header = MJRefreshNormalHeader(refreshingBlock: {
- self.search()
- })
-
- self.tableview.mj_footer = MJRefreshAutoFooter(refreshingBlock: {
- self.morePage()
- })
- view.addSubview(emptyView)
- emptyView.isHidden = true
- view.addSubview(historyView)
- historyView.delegate = self
- self.searchBarInit()
- // 获取焦点
- self.searchBar?.becomeFirstResponder()
- }
-
- /// 初始化 搜索框
- private func searchBarInit() {
- let view = UIView(frame: CGRect(x: 0, y: 0, width: 250, height: 28))
- view.backgroundColor = self.navigationController?.navigationBar.tintColor
- view.layer.cornerRadius = 14
- view.layer.masksToBounds = true
- self.searchBar = UISearchBar(frame: CGRect(x: 0, y: 0, width: 250, height: 28))
- self.searchBar?.placeholder = L10n.Search.placeholder
- self.searchBar?.layer.cornerRadius = 14
- self.searchBar?.layer.masksToBounds = true
- self.searchBar?.backgroundColor = .white
- self.searchBar?.delegate = self
- self.searchBar?.setImage(O2ThemeManager.image(for: "Icon.icon_sousuo"), for: .search, state: .normal)
- view.addSubview(self.searchBar!)
- self.navigationItem.titleView = view
- }
-
-
- /// 查询数据
- private func search() {
- DDLogDebug("search key \(self.searchKey)")
- if self.searchKey != "" {
- self.showLoading()
- self.viewmodel.search(key: self.searchKey).then { (page) in
- self.resultList = page.list
- self.page = 1
- self.totalPage = page.totalPage
- self.refreshUI()
- }.always {
- self.hideLoading()
- }.catch { (err) in
- DDLogError(err.localizedDescription)
- self.showError(title: L10n.errorWithMsg(err.localizedDescription))
- }
- }
- }
-
- private func morePage() {
- DDLogDebug("morePage page \(self.page) total \(self.totalPage)")
- if self.page < self.totalPage {
- self.showLoading()
- self.viewmodel.nextPage().then { (page) in
- page.list.forEach { (entry) in
- self.resultList.append(entry)
- }
- self.page = page.page
- self.totalPage = page.totalPage
- self.refreshUI()
- }.always {
- self.hideLoading()
- }.catch { (err) in
- DDLogError(err.localizedDescription)
- self.showError(title: L10n.errorWithMsg(err.localizedDescription))
- }
- }
- }
-
- // 刷新页面
- private func refreshUI() {
- DDLogDebug("refreshUI page \(self.page) total \(self.totalPage)")
- self.tableview.reloadData()
- if self.resultList.count > 0 {
- self.emptyView.isHidden = true
- self.tableview.isHidden = false
- } else {
- self.tableview.isHidden = true
- self.emptyView.isHidden = false
- }
- }
-
- }
- extension O2SearchController: UISearchBarDelegate {
- /// 点击输入法搜索按钮
- func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
- let key = searchBar.text
- DDLogDebug("搜索关键字: \(key ?? "无")")
- if key != nil && key != "" {
- self.historyView.addSearchHistory(key: key!)
- }
- self.historyView.isHidden = true // 隐藏搜索历史
- searchBar.endEditing(true)
- self.searchKey = key ?? ""
- self.search()
- }
-
- func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
- if searchText.count == 0 { // 清空了
- self.resultList = []
- self.searchKey = ""
- self.page = 1
- self.totalPage = 1
- self.tableview.reloadData()
- self.historyView.isHidden = false
- self.tableview.isHidden = true
- }
- }
- }
- extension O2SearchController: O2SearchHistoryDelegate {
- /// 点击搜索历史
- func clickToSearchTag(tag: String) {
- DDLogDebug("查询tag: \(tag)")
- self.historyView.isHidden = true // 隐藏搜索历史
- self.searchBar?.text = tag
- self.searchBar?.endEditing(true)
- self.searchKey = tag
- self.search()
- }
- }
- extension O2SearchController: UITableViewDelegate, UITableViewDataSource {
- func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
- return self.resultList.count
- }
-
- func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
- return 190
- }
-
- func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
- if let cell = tableview.dequeueReusableCell(withIdentifier: "O2SearchResultCell") as? O2SearchResultCell {
- cell.setData(data: self.resultList[indexPath.row], currentKey: self.searchKey)
- return cell
- }
- return UITableViewCell()
- }
-
- func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
- tableview.deselectRow(at: indexPath, animated: false)
- let entry = self.resultList[indexPath.row]
- if entry.type == "cms" {
- self.openCmsPage(id: entry.reference ?? "", title: entry.title ?? "")
- } else {
- self.openWorkPage(work: entry.reference ?? "", title: entry.title ?? "")
- }
- }
-
- /// 打开文档
- private func openCmsPage(id: String, title: String) {
- let bbsStoryboard = UIStoryboard(name: "information", bundle: Bundle.main)
- let destVC = bbsStoryboard.instantiateViewController(withIdentifier: "CMSSubjectDetailVC") as! CMSItemDetailViewController
- destVC.documentId = id
- destVC.title = title
- destVC.modalPresentationStyle = .fullScreen
- self.navigationController?.pushViewController(destVC, animated: false)
- }
- /// 打开工作
- private func openWorkPage(work: String, title: String) {
- if work.isEmpty {
- DDLogError("没有传入work id")
- self.showError(title: "参数不正确!")
- return
- }
- let storyBoard = UIStoryboard(name: "task", bundle: nil)
- let destVC = storyBoard.instantiateViewController(withIdentifier: "todoTaskDetailVC") as! TodoTaskDetailViewController
- let json = """
- {"work":"\(work)", "workCompleted":"", "title":"\(title)"}
- """
- let todo = TodoTask(JSONString: json)
- destVC.todoTask = todo
- destVC.backFlag = 3 //隐藏就行
- self.show(destVC, sender: nil)
- }
-
-
- /// Cell 圆角背景计算
- func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
- //圆率
- let cornerRadius:CGFloat = 10.0
- //大小
- let bounds:CGRect = cell.bounds
- //绘制曲线
- // var bezierPath: UIBezierPath? = nil
- //一个为一组时,四个角都为圆角
- let bezierPath: UIBezierPath? = UIBezierPath(roundedRect: bounds, byRoundingCorners: .allCorners, cornerRadii: CGSize(width: cornerRadius, height: cornerRadius))
- //cell的背景色透明
- cell.backgroundColor = .clear
- //新建一个图层
- let layer = CAShapeLayer()
- //图层边框路径
- layer.path = bezierPath?.cgPath
- //图层填充色,也就是cell的底色
- layer.fillColor = UIColor.white.cgColor
- //图层边框线条颜色
- /*
- 如果self.tableView.style = UITableViewStyleGrouped时,每一组的首尾都会有一根分割线,目前我还没找到去掉每组首尾分割线,保留cell分割线的办法。
- 所以这里取巧,用带颜色的图层边框替代分割线。
- 这里为了美观,最好设为和tableView的底色一致。
- 设为透明,好像不起作用。
- */
- layer.strokeColor = UIColor.white.cgColor
- //将图层添加到cell的图层中,并插到最底层
- cell.layer.insertSublayer(layer, at: 0)
-
- }
-
- }
|