// // MeTraineeDetailsPageViewController.swift // JiaPeiManage // // Created by Ning.ge on 2023/6/16. // import UIKit import RxSwift import RxCocoa final class MeTraineeDetailsPageViewController: BaseViewController { // MARK: 服务属性 private let cocahService: CoachServiceType = CoachService(networking: CoachNetworking()) // MARK: 私有属性 private var menuTitles : [String] = ["基本信息", "理论成绩", "人脸比对记录", "签到记录"] // private var menuTitles : [String] = ["", "", "", ""] private var idxs: [UInt] = [] private var menuItemCurrentBtn : UIButton? //学员ID var stuId:Int = 0 var traineeInfoModel:TraineeInfoModel? // MARK: UI属性 @IBOutlet weak var title_label: UILabel! @IBOutlet weak var header_view: UIView! //头像 @IBOutlet weak var user_icon_imageview: UIImageView! @IBOutlet weak var sex_imageview: UIImageView! //用户名 @IBOutlet weak var username_label: UILabel! //电话 @IBOutlet weak var userphone_label: UILabel! let pageController = VTMagicController().then { $0.view.translatesAutoresizingMaskIntoConstraints = false $0.magicView.navigationColor = .db_theme $0.magicView.sliderColor = .db_sliderColor $0.magicView.switchStyle = .default $0.magicView.layoutStyle = .divide // $0.magicView.sliderStyle = .bubble $0.magicView.navigationHeight = 57.f // $0.magicView.sliderExtension = -10 $0.magicView.sliderWidth = 22.f $0.magicView.sliderOffset = -8 $0.magicView.sliderHeight = 4 $0.magicView.isSeparatorHidden = false $0.magicView.bubbleRadius = 2 $0.magicView.needPreloading = true $0.magicView.separatorHeight = 0 //下划线h $0.magicView.isSliderHidden = true } override func setupConstraints() { pageController.view.snp.makeConstraints { (make) in make.left.right.bottom.equalToSuperview() make.top.equalTo(header_view.snp.bottom) } } override func viewDidLoad() { super.viewDidLoad() setupUI() configureMagicController() cocahService.studentInfoByIdRequest(city: LocalManager.userInfo.city!, id: stuId) .subscribe { traineeInfoModel in self.traineeInfoModel = traineeInfoModel self.biandView() if(self.pageController.currentPage==0){ let vc:MeTraineeDetails01Controller = self.pageController.currentViewController as! MeTraineeDetails01Controller vc.setInfo(info: traineeInfoModel) } //刷新理论成绩 guard let details02vc:MeTraineeDetails02Controller = self.pageController.viewController(atPage: 1) as? MeTraineeDetails02Controller else { return } details02vc.setStuOutId(stuId: traineeInfoModel.id) } onError: { error in }.disposed(by: disposeBag) } // MARK: 私有方法 func setupUI(){ self.view.backgroundColor = .db_theme } func biandView(){ self.title_label.text = (traineeInfoModel?.name)! + "个人信息" //头像 self.user_icon_imageview.sd_setImage(with: traineeInfoModel?.photoPath?.urlValue, placeholderImage: traineeInfoModel?.sex == "1" ? NYImage.Home.usermale:NYImage.Home.userfemale) //用户名 self.username_label.text = traineeInfoModel?.name //电话 self.userphone_label.text = traineeInfoModel?.phone self.sex_imageview.image = traineeInfoModel?.sex == "1" ? NYImage.Home.sexmale:NYImage.Home.sexfemale } func configureMagicController(){ self.addChild(pageController) self.view.addSubview(pageController.view) //设置VTMagicController代理,初始页码 pageController.magicView.delegate = self pageController.magicView.dataSource = self pageController.magicView.reloadData(toPage: 0) } } //VTMagicViewDelegate view代理 extension MeTraineeDetailsPageViewController : VTMagicViewDelegate { func magicView(_ magicView: VTMagicView, didSelectItemAt itemIndex: UInt) { var menuItem = magicView.menuItem(at: itemIndex) if (menuItemCurrentBtn != nil) { (menuItemCurrentBtn as?QMUIButton)?.spacingBetweenImageAndTitle = -25 } (menuItem as?QMUIButton)?.spacingBetweenImageAndTitle = -30 menuItemCurrentBtn = menuItem if itemIndex == 0 || itemIndex == 1 { guard let currentVc:MeTraineeSubjectPageViewController = pageController.currentViewController as? MeTraineeSubjectPageViewController else { return } let currentPage = pageController.currentPage if currentPage == itemIndex { // TogetherDataManager.refreshDataForVTMagic(currentVc,true) } } } func magicView(_ magicView: VTMagicView, viewDidAppear viewController: UIViewController, atPage pageIndex: UInt) { if pageIndex == 0 || pageIndex == 1 { var canRefresh: Bool = false if let collectionVc = viewController as? BaseCollectionViewController { if collectionVc.totalItems() > 0 { canRefresh = true } } if idxs.contains(pageIndex) || canRefresh { // TogetherDataManager.refreshDataForVTMagic(viewController, false) } } } func magicView(_ magicView: VTMagicView, viewDidDisappear viewController: UIViewController, atPage pageIndex: UInt) { if pageIndex == 0 || pageIndex == 1 { if !idxs.contains(pageIndex) { idxs.append(pageIndex) } } if pageIndex == 1 { // TogetherDataManager.referenceDate = Date() } } } //VTMagicViewDataSource 数据源代理 extension MeTraineeDetailsPageViewController : VTMagicViewDataSource{ func menuTitles(for magicView: VTMagicView) -> [String] { return menuTitles } func magicView(_ magicView: VTMagicView, menuItemAt itemIndex: UInt) -> UIButton { var menuItem = magicView.dequeueReusableItem(withIdentifier: "homeItemIdentifier") if menuItem == nil { menuItem = QMUIButton(type: .custom) menuItem?.titleLabel?.font = NYFont.SysFont.sys_13 menuItem?.setTitleColor(.db_fontGray, for: .normal) menuItem?.setTitleColor(.db_fontSelColor, for: .selected) menuItem?.setImage(NYImage.Home.stuBtnSel, for: .selected) menuItem?.setImage(NYImage.Home.stuBtnNor, for: .normal) (menuItem as?QMUIButton)?.imagePosition = .top (menuItem as?QMUIButton)?.spacingBetweenImageAndTitle = -25 // menuItem?.imageEdgeInsets = UIEdgeInsets(top: -5, left: -5, bottom: 0, right: -5) // let title_label = UILabel() // title_label.font = NYFont.SysFont.sys_13 // title_label.textColor = .db_fontGray // title_label.textAlignment = .center // title_label.text = menuTitleArray[Int(itemIndex)] // menuItem?.addSubview(title_label) // let t_top = (57.f - 18.f)*0.5 // title_label.snp.makeConstraints { make in // make.top.equalTo(t_top) // make.left.right.equalTo(menuItem!) // make.height.equalTo(18.f) // } if itemIndex==0 { (menuItem as?QMUIButton)?.spacingBetweenImageAndTitle = -30 menuItemCurrentBtn = menuItem } } return menuItem ?? UIButton() } func magicView(_ magicView: VTMagicView, viewControllerAtPage pageIndex: UInt) -> UIViewController { if pageIndex == 0 { var meTraineeDetails01Controller = magicView.dequeueReusablePage(withIdentifier: "MeTraineeDetails01Controller") if meTraineeDetails01Controller == nil { meTraineeDetails01Controller = MeTraineeDetails01Controller.init() } return meTraineeDetails01Controller ?? UIViewController() } else if pageIndex == 1 { var meTraineeDetails02Controller = magicView.dequeueReusablePage(withIdentifier: "MeTraineeDetails02Controller") if meTraineeDetails02Controller == nil { meTraineeDetails02Controller = MeTraineeDetails02Controller.init() } return meTraineeDetails02Controller ?? UIViewController() } else if pageIndex == 2 { var meTraineeDetails03Controller = magicView.dequeueReusablePage(withIdentifier: "MeTraineeDetails03Controller") if meTraineeDetails03Controller == nil { var stuId = 0 if (traineeInfoModel != nil) { stuId = (traineeInfoModel?.id)! } meTraineeDetails03Controller = MeTraineeDetails03Controller(stuOutId: stuId) } return meTraineeDetails03Controller ?? UIViewController() } else { var meTraineeDetails04Controller = magicView.dequeueReusablePage(withIdentifier: "MeTraineeDetails04Controller") if meTraineeDetails04Controller == nil { var stuId = 0 if (traineeInfoModel != nil) { stuId = (traineeInfoModel?.id)! } meTraineeDetails04Controller = MeTraineeDetails04Controller(stuOutId: stuId) } return meTraineeDetails04Controller ?? UIViewController() } } }