IHAreaVCtr.swift 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410
  1. //
  2. // IHAreaVCtr.swift
  3. // Inhealth
  4. //
  5. // Created by weclouds on 2019/12/10.
  6. // Copyright © 2019 weclouds. All rights reserved.
  7. //
  8. import UIKit
  9. import JXSegmentedView
  10. class IHAreaVCtr: UIViewController {
  11. lazy var segmentedDataSource: JXSegmentedTitleDataSource = {
  12. return JXSegmentedTitleDataSource()
  13. }()
  14. //var segmentedDataSource: JXSegmentedBaseDataSource?
  15. let segmentedView = JXSegmentedView()
  16. lazy var listContainerView: JXSegmentedListContainerView! = {
  17. return JXSegmentedListContainerView(dataSource: self)
  18. }()
  19. lazy var selectedBtn: UIButton = {
  20. let button = UIButton(type: .custom)
  21. button.backgroundColor = .white
  22. button.setTitleColor(UIColor(hexString: "#573F95"), for: .normal)
  23. button.setTitle("···", for: .normal)
  24. button.titleLabel?.font = UIFont(name: Alibaba_PuHuiTi_Bold, size: 16)
  25. return button
  26. }()
  27. var areaSelectedIndex = 0
  28. lazy var buidlistView: IHAreaItem = {
  29. let v = IHAreaItem(frame: CGRect(x: 0, y: 0, width: 100, height: 33))
  30. return v
  31. }()
  32. var buildListData : [DropDownData]?{
  33. didSet{
  34. var titleArray = [String]()
  35. if let datalist = self.buildListData {
  36. for build in datalist{
  37. titleArray.append(build.name!)
  38. }
  39. self.buidlistView.titleArray = titleArray
  40. //默认后去第一个楼房的楼层
  41. if datalist.count > 0 {
  42. if Intermediate.buildName != "所有" || Intermediate.buildId != ""{
  43. self.buidlistView.defaultDesc = Intermediate.buildName
  44. self.buildId = Intermediate.buildId
  45. //获取楼层列表
  46. self.getFloorList(Intermediate.buildId)
  47. }else{
  48. let firstBuild = datalist[0]
  49. self.getFloorList(firstBuild.id!)
  50. self.buildId = firstBuild.id
  51. }
  52. }else{
  53. self.floorList = nil
  54. self.reloadSegmentedView([""])
  55. }
  56. }
  57. }
  58. }
  59. var hotelId :String? = "0"
  60. var buildId:String? = "0"
  61. var floorList:[RoomListData]?
  62. lazy var addNewBtn: UIButton = {
  63. let button = UIButton(type: .custom)
  64. button.backgroundColor = .white
  65. button.setImage(UIImage(named: "添加"), for: .normal)
  66. return button
  67. }()
  68. var manager = IHAreaManager()
  69. override func viewDidLoad() {
  70. super.viewDidLoad()
  71. setNavigationBar()
  72. createUI()
  73. addNewBtn.addTarget(self, action: #selector(addNewRoom), for: .touchUpInside)
  74. NotificationCenter.default.addObserver(self, selector: #selector(notifyHotleInfo(_:)), name: NSNotification.Name(kNotificationIHDashboardManagerNotifyHotleInfo), object: nil)
  75. // var titleArray = [String]()
  76. NotificationCenter.default.addObserver(self, selector: #selector(notifyReloadFloor), name: NSNotification.Name(kNotificationIHAreaServiceNotificationReloadFloorList), object: nil)
  77. NotificationCenter.default.addObserver(self, selector: #selector(reloadAddressNotify), name: NSNotification.Name(kNotificationIHAddressControllerReloadAddress), object: nil)
  78. //选择楼房下拉之后
  79. buidlistView.confirmBlock = {(idx) in
  80. let build = self.buildListData![idx]
  81. self.buildId = build.id
  82. Intermediate.buildId = build.id!
  83. Intermediate.buildName = build.name!
  84. //获取楼层列表
  85. self.getFloorList(build.id!)
  86. }
  87. }
  88. deinit {
  89. NotificationCenter.default.removeObserver(self)
  90. }
  91. @objc func reloadAddressNotify() {
  92. self.navigationBarTitle = Intermediate.hotelName
  93. self.hotelId = Intermediate.hotelId
  94. IHAreaService.share.getBuildNavData(hotelId: self.hotelId, requestSuccess: { (dataList) in
  95. self.buildListData = dataList
  96. }) {
  97. }
  98. }
  99. @objc func notifyHotleInfo(_ notif:Notification) {
  100. let annotion = notif.object as! IHAnotation
  101. self.navigationBarTitle = annotion.name
  102. Intermediate.share.selectedCoordinate = annotion.coordinate
  103. }
  104. @objc func notifyReloadFloor() {
  105. getFloorList(self.buildId!)
  106. }
  107. @objc func addNewRoom () {
  108. let vc = IHNewRoomVCtr()
  109. vc.floorList = self.floorList
  110. vc.buildId = self.buildId
  111. self.navigationController?.pushViewController(vc)
  112. }
  113. override func viewDidLayoutSubviews() {
  114. super.viewDidLayoutSubviews()
  115. // log.debug("viewDidLayoutSubviews")
  116. }
  117. }
  118. extension IHAreaVCtr {
  119. //如果是教室的时候就显示这里
  120. func getClassRoom(){
  121. let classBtn = UIButton.init(frame: CGRect.init(x: 0, y: KNavBarHeight, width: KSCREENWIDTH, height: 100))
  122. classBtn.backgroundColor = .red
  123. classBtn.setTitle("教室", for: .normal)
  124. classBtn.addTarget(self, action: #selector(jump), for: .touchUpInside)
  125. view.addSubview(classBtn)
  126. }
  127. @objc func jump() {
  128. log.debug("----")
  129. }
  130. }
  131. //
  132. extension IHAreaVCtr{
  133. func createUI() {
  134. let titles = [String]()
  135. // let dataSource = JXSegmentedTitleDataSource()
  136. segmentedDataSource.isItemSpacingAverageEnabled = false
  137. segmentedDataSource.titles = titles
  138. segmentedDataSource.titleSelectedColor = UIColor(hexString: "#573F95")!
  139. segmentedDataSource.titleNormalColor = UIColor(hexString: "#92A6C0")!
  140. segmentedDataSource.titleNormalFont = UIFont(name: PingFangSC_Semibold, size: 13)!
  141. segmentedDataSource.titleSelectedFont = UIFont(name: PingFangSC_Semibold, size: 13)!
  142. //配置指示器
  143. //segmentedViewDataSource一定要通过属性强持有!!!!!!!!!
  144. segmentedView.dataSource = segmentedDataSource
  145. segmentedView.delegate = self
  146. segmentedView.backgroundColor = UIColor(hexString: "#F6F8FA")
  147. let indicator = JXSegmentedIndicatorLineView()
  148. indicator.indicatorColor = UIColor(hexString: "#573F95")!
  149. indicator.indicatorWidth = 25
  150. segmentedView.indicators = [indicator]
  151. view.addSubview(segmentedView)
  152. segmentedView.listContainer = listContainerView
  153. view.addSubview(listContainerView)
  154. view.addSubview(selectedBtn)
  155. view.addSubview(addNewBtn)
  156. view.addSubview(buidlistView)
  157. // buidlistView.frame = CGRect(x: 0, y: 0, width: 100, height: 33)
  158. segmentedView.frame = CGRect(x: 100, y: 0, width: view.bounds.size.width - 33 - 100 , height: 33)
  159. listContainerView.frame = CGRect(x: 0, y: 33, width: view.bounds.size.width, height: KSCREENHEIGHT - 33 - KNavBarHeight - KTabbarHeight)
  160. selectedBtn.frame = CGRect(x: view.bounds.size.width - 33, y: 0, width: 33, height: 33)
  161. addNewBtn.snp.makeConstraints { (make) in
  162. make.right.equalToSuperview().offset(-14)
  163. make.bottom.equalToSuperview().offset(-10 - KTabbarHeight)
  164. make.width.height.equalTo(50)
  165. }
  166. addNewBtn.layer.masksToBounds = true
  167. addNewBtn.layer.cornerRadius = 25
  168. selectedBtn.addTarget(self, action: #selector(selectedFloor), for: .touchUpInside)
  169. if Intermediate.hotelId == "" {
  170. IHAddressService.share.getFirstHotel { (hotelId, hotelName) in
  171. self.hotelId = hotelId
  172. self.navigationBarTitle = hotelName
  173. IHAreaService.share.getBuildNavData(hotelId: Intermediate.hotelId , requestSuccess: { (dataList) in
  174. self.buildListData = dataList
  175. }) {
  176. }
  177. }
  178. }else{
  179. self.hotelId = Intermediate.hotelId
  180. self.navigationBarTitle = Intermediate.hotelName
  181. IHAreaService.share.getBuildNavData(hotelId: Intermediate.hotelId , requestSuccess: { (dataList) in
  182. self.buildListData = dataList
  183. }) {
  184. }
  185. }
  186. }
  187. func setNavigationBar() {
  188. //导航栏的渲染方式
  189. self.navigationBarTitle = " "
  190. let leftItem = UIBarButtonItem(image: UIImage(named: "定位")?.withRenderingMode(.alwaysOriginal), style: .plain, target: self, action: #selector(mapAction1))
  191. self.navigationItem.leftBarButtonItem = leftItem
  192. let mapItem = UIBarButtonItem(image: UIImage(named: "map")?.withRenderingMode(.alwaysOriginal), style: .plain, target: self, action: #selector(mapAction))
  193. let searchItem = UIBarButtonItem(image: UIImage(named: "搜索")?.withRenderingMode(.alwaysOriginal), style: .plain, target: self, action: #selector(searchAction))
  194. let setItem = UIBarButtonItem(image: UIImage(named: "模式设置")?.withRenderingMode(.alwaysOriginal), style: .plain, target: self, action: #selector(modeSetAction))
  195. self.navigationItem.rightBarButtonItems = [mapItem,setItem,searchItem]
  196. }
  197. @objc func selectedFloor(){
  198. let alert = IHFloorListVCtr()
  199. alert.floorList = self.floorList
  200. alert.selected_def = areaSelectedIndex
  201. alert.dismissOnTap = false //禁止手动关闭
  202. alert.modalSize = (width: .full, height: .custom(size: Float(KSCREENHEIGHT - 175)))
  203. alert.modalPosition = .bottomCenter
  204. alert.cornerRadius = 32
  205. alert.selectedCallback = {(selectedIdx) in
  206. self.segmentedView.selectItemAt(index: selectedIdx)
  207. self.segmentedView.listContainer?.didClickSelectedItem(at: selectedIdx)//列表滚动
  208. }
  209. // alert.show(above: self, completion: nil)
  210. self.present(alert, animated: true, completion: nil)
  211. }
  212. @objc func searchAction() {
  213. let vc = IHAreaSearchVCtr()
  214. vc.floorList = self.floorList
  215. self.navigationController?.pushViewController(vc, animated: false)
  216. }
  217. @objc func modeSetAction() {
  218. let vc = IHCentralizedVCtr()
  219. vc.floorList = self.floorList
  220. vc.isSetSencenModel = false
  221. self.navigationController?.pushViewController(vc, animated: true)
  222. }
  223. @objc func mapAction1(){
  224. log.debug("点击了")
  225. let picker = IHHotelPickerVCtr.shareInstance
  226. self.navigationController?.pushViewController(picker, animated: true)
  227. }
  228. @objc func mapAction(){
  229. log.debug("点击了")
  230. let map = IHDashboardMapMainVCtr()
  231. self.navigationController?.pushViewController(map, animated: true)
  232. }
  233. func reloadSegmentedView(_ titles :[String]) {
  234. //默认选择第一个楼层
  235. segmentedDataSource.dataSource.removeAll()
  236. segmentedDataSource.titles = titles
  237. segmentedView.dataSource = segmentedDataSource
  238. segmentedView.reloadData()
  239. }
  240. func getFloorList(_ buildId:String) {
  241. var segmentViewTitles = [String]()
  242. IHAreaService.share.getRoomListData(buildId: buildId, keyworkds: nil, requestSuccess: { (roomlist) in
  243. for mRoomL in roomlist{
  244. segmentViewTitles.append(mRoomL.name!)
  245. // mRoomL.roomList
  246. }
  247. self.floorList = roomlist
  248. log.debug("segmentViewTitles == \(segmentViewTitles)")
  249. self.reloadSegmentedView(segmentViewTitles)
  250. }) {
  251. }
  252. }
  253. }
  254. extension IHAreaVCtr:JXSegmentedViewDelegate{
  255. func segmentedView(_ segmentedView: JXSegmentedView, didSelectedItemAt index: Int) {
  256. if let dotDataSource = segmentedDataSource as? JXSegmentedDotDataSource {
  257. //先更新数据源的数据
  258. dotDataSource.dotStates[index] = false
  259. //再调用reloadItem(at: index)
  260. segmentedView.reloadItem(at: index)
  261. }
  262. if areaSelectedIndex < index {
  263. //向后滑动
  264. UIView.animate(withDuration: 0.25) {
  265. self.buidlistView.x = -100
  266. self.segmentedView.x = 0
  267. self.segmentedView.width = self.view.bounds.size.width - 33
  268. }
  269. }else{
  270. //向前滑动
  271. UIView.animate(withDuration: 0.25) {
  272. self.buidlistView.x = 0
  273. self.segmentedView.x = 100
  274. self.segmentedView.width = self.view.bounds.size.width - 33 - 100
  275. }
  276. }
  277. areaSelectedIndex = index
  278. }
  279. }
  280. extension IHAreaVCtr :JXSegmentedListContainerViewDataSource{
  281. func numberOfLists(in listContainerView: JXSegmentedListContainerView) -> Int {
  282. if let titleDataSource = segmentedView.dataSource as? JXSegmentedBaseDataSource {
  283. return titleDataSource.dataSource.count
  284. }
  285. return 0
  286. }
  287. func listContainerView(_ listContainerView: JXSegmentedListContainerView, initListAt index: Int) -> JXSegmentedListContainerViewListDelegate {
  288. log.debug("initListAt ==\(index)")
  289. let vc = IHAreaListVCtr()
  290. if self.floorList != nil {
  291. let floor = self.floorList![index]
  292. // 传的时候房间列表 roomlist
  293. vc.roomList = floor.roomList
  294. vc.hotelId = self.hotelId
  295. vc.buildId = self.buildId
  296. vc.floorId = floor.id
  297. }
  298. return vc
  299. }
  300. }
  301. extension IHAreaVCtr : IHAddressControllerDelegate{
  302. func selectedAddress(address: String, addressID: String) {
  303. self.navigationBarTitle = address
  304. // Intermediate.hotelId = addressID
  305. Intermediate.hotelId = addressID
  306. Intermediate.hotelName = address
  307. self.hotelId = addressID
  308. IHAreaService.share.getBuildNavData(hotelId: addressID, requestSuccess: { (dataList) in
  309. self.buildListData = dataList
  310. }) {
  311. }
  312. }
  313. }