New file |
| | |
| | | { |
| | | "images" : [ |
| | | { |
| | | "idiom" : "universal", |
| | | "scale" : "1x" |
| | | }, |
| | | { |
| | | "filename" : "bg_worldCup@2x.png", |
| | | "idiom" : "universal", |
| | | "scale" : "2x" |
| | | }, |
| | | { |
| | | "filename" : "bg_worldCup@3x.png", |
| | | "idiom" : "universal", |
| | | "scale" : "3x" |
| | | } |
| | | ], |
| | | "info" : { |
| | | "author" : "xcode", |
| | | "version" : 1 |
| | | } |
| | | } |
| | |
| | | // |
| | | // BaseNavigationController.swift |
| | | // BrokerDriver |
| | | // |
| | | // Created by 无故事王国 on 2023/4/24. |
| | | // |
| | | // |
| | | // BaseNavigationController.swift |
| | | // BrokerDriver |
| | | // |
| | | // Created by 无故事王国 on 2023/4/24. |
| | | // |
| | | |
| | | import UIKit |
| | | import JQTools |
| | | |
| | | class BaseNav: UINavigationController,UINavigationControllerDelegate { |
| | | |
| | | // private var popDelegate: UIGestureRecognizerDelegate? |
| | | |
| | | // private var popDelegate: UIGestureRecognizerDelegate? |
| | | |
| | | |
| | | /// 需要透明Nav的VC |
| | | private var lucencyVCs = [RechargeRecordVC.self,RechargeCenterVC.self] |
| | | /// 需要透明Nav的VC |
| | | private var lucencyVCs = [RechargeRecordVC.self,RechargeCenterVC.self] |
| | | |
| | | private let img = UIImage.jq_gradient([UIColor(hexStr: "#FD8C02"),UIColor(hexStr: "#FD7202")], size: CGSize(width: JQ_ScreenW, height: JQ_NavBarHeight), radius: 0, locations: [0,1], direction: .vertical) |
| | | |
| | | open override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | self.navigationBar.barTintColor = .white |
| | | self.navigationBar.titleTextAttributes = [.font:UIFont.systemFont(ofSize: 18, weight: .medium), .foregroundColor:UIColor.white] |
| | | self.navigationBar.tintColor = UIColor.black |
| | | self.navigationBar.shadowImage = UIImage() |
| | | self.navigationBar.isTranslucent = true |
| | | self.delegate = self |
| | | // self.popDelegate = self.interactivePopGestureRecognizer?.delegate |
| | | self.interactivePopGestureRecognizer?.delegate = self |
| | | /// 世界杯风格 |
| | | private var worldCupVCs = [SearchVC.self,WorldCupVC.self,WorldCupHeaderVC.self,WorldCupMenuVC.self,WorldCupContentVC.self,WorldCupRecordVC.self,WorldCupRankVC.self] |
| | | |
| | | private let img = UIImage.jq_gradient([UIColor(hexStr: "#FD8C02"),UIColor(hexStr: "#FD7202")], size: CGSize(width: JQ_ScreenW, height: JQ_NavBarHeight), radius: 0, locations: [0,1], direction: .vertical) |
| | | |
| | | open override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | self.navigationBar.barTintColor = .white |
| | | self.navigationBar.titleTextAttributes = [.font:UIFont.systemFont(ofSize: 18, weight: .medium), .foregroundColor:UIColor.white] |
| | | self.navigationBar.tintColor = UIColor.black |
| | | self.navigationBar.shadowImage = UIImage() |
| | | self.navigationBar.isTranslucent = true |
| | | self.delegate = self |
| | | // self.popDelegate = self.interactivePopGestureRecognizer?.delegate |
| | | self.interactivePopGestureRecognizer?.delegate = self |
| | | |
| | | |
| | | if #available(iOS 15.0, *) { |
| | | let scrollBar = UINavigationBarAppearance() |
| | | scrollBar.configureWithOpaqueBackground() |
| | | scrollBar.backgroundEffect = nil |
| | | scrollBar.shadowColor = nil |
| | | scrollBar.titleTextAttributes = [.foregroundColor:UIColor.white,.font:Def_NavFont] |
| | | scrollBar.backgroundColor = UIColor.clear |
| | | scrollBar.backgroundImage = img |
| | | |
| | | |
| | | let standardBar = UINavigationBarAppearance() |
| | | standardBar.configureWithOpaqueBackground() |
| | | standardBar.backgroundEffect = nil |
| | | standardBar.shadowColor = nil |
| | | standardBar.shadowImage = nil |
| | | standardBar.titleTextAttributes = [.foregroundColor:UIColor.white,.font:Def_NavFont] |
| | | standardBar.backgroundColor = UIColor.clear |
| | | standardBar.backgroundImage = img |
| | | |
| | | navigationBar.scrollEdgeAppearance = scrollBar //顶部透明 |
| | | navigationBar.standardAppearance = standardBar |
| | | }else { |
| | | navigationBar.titleTextAttributes = [.foregroundColor:UIColor.white,.font:Def_NavFont] |
| | | navigationBar.isTranslucent = true |
| | | navigationBar.setBackgroundImage(UIImage(), for: .default) |
| | | navigationBar.shadowImage = UIImage() |
| | | } |
| | | } |
| | | |
| | | open func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) { |
| | | let status = lucencyVCs.contains(where: {$0 == viewController.classForCoder}) |
| | | if (navigationController.viewControllers.count == 1 || status) && !(viewController is WelfareVC){ |
| | | if #available(iOS 15.0, *) { |
| | | navigationBar.standardAppearance.backgroundImage = nil |
| | | navigationBar.scrollEdgeAppearance?.backgroundImage = nil |
| | | }else{ |
| | | navigationBar.setBackgroundImage(UIImage(), for: .default) |
| | | navigationBar.shadowImage = UIImage() |
| | | } |
| | | }else{ |
| | | if #available(iOS 15.0, *) { |
| | | navigationBar.standardAppearance.backgroundImage = img |
| | | navigationBar.scrollEdgeAppearance?.backgroundImage = img |
| | | }else{ |
| | | navigationBar.setBackgroundImage(img, for: .default) |
| | | } |
| | | } |
| | | } |
| | | |
| | | //侧滑 |
| | | public func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) { |
| | | if viewController == self.viewControllers[0] { |
| | | self.interactivePopGestureRecognizer!.delegate = self |
| | | }else{ |
| | | self.interactivePopGestureRecognizer!.delegate = nil |
| | | } |
| | | } |
| | | if #available(iOS 15.0, *) { |
| | | let scrollBar = UINavigationBarAppearance() |
| | | scrollBar.configureWithOpaqueBackground() |
| | | scrollBar.backgroundEffect = nil |
| | | scrollBar.shadowColor = nil |
| | | scrollBar.titleTextAttributes = [.foregroundColor:UIColor.white,.font:Def_NavFont] |
| | | scrollBar.backgroundColor = UIColor.clear |
| | | scrollBar.backgroundImage = img |
| | | |
| | | open override var childForStatusBarHidden: UIViewController? { |
| | | return self.topViewController |
| | | } |
| | | |
| | | open override var childForStatusBarStyle: UIViewController? { |
| | | return self.topViewController |
| | | } |
| | | |
| | | override var preferredStatusBarStyle: UIStatusBarStyle{ |
| | | return .lightContent |
| | | } |
| | | |
| | | let standardBar = UINavigationBarAppearance() |
| | | standardBar.configureWithOpaqueBackground() |
| | | standardBar.backgroundEffect = nil |
| | | standardBar.shadowColor = nil |
| | | standardBar.shadowImage = nil |
| | | standardBar.titleTextAttributes = [.foregroundColor:UIColor.white,.font:Def_NavFont] |
| | | standardBar.backgroundColor = UIColor.clear |
| | | standardBar.backgroundImage = img |
| | | |
| | | navigationBar.scrollEdgeAppearance = scrollBar //顶部透明 |
| | | navigationBar.standardAppearance = standardBar |
| | | }else { |
| | | navigationBar.titleTextAttributes = [.foregroundColor:UIColor.white,.font:Def_NavFont] |
| | | navigationBar.isTranslucent = true |
| | | navigationBar.setBackgroundImage(UIImage(), for: .default) |
| | | navigationBar.shadowImage = UIImage() |
| | | } |
| | | } |
| | | |
| | | open func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) { |
| | | |
| | | if worldCupVCs.contains(where: {$0 == viewController.classForCoder}){ |
| | | navigationBar.standardAppearance.backgroundImage = UIImage(named: "bg_worldCup") |
| | | navigationBar.scrollEdgeAppearance?.backgroundImage = UIImage(named: "bg_worldCup") |
| | | return |
| | | } |
| | | |
| | | let status = lucencyVCs.contains(where: {$0 == viewController.classForCoder}) |
| | | if (navigationController.viewControllers.count == 1 || status) && !(viewController is WelfareVC){ |
| | | if #available(iOS 15.0, *) { |
| | | navigationBar.standardAppearance.backgroundImage = nil |
| | | navigationBar.scrollEdgeAppearance?.backgroundImage = nil |
| | | }else{ |
| | | navigationBar.setBackgroundImage(UIImage(), for: .default) |
| | | navigationBar.shadowImage = UIImage() |
| | | } |
| | | }else{ |
| | | if #available(iOS 15.0, *) { |
| | | navigationBar.standardAppearance.backgroundImage = img |
| | | navigationBar.scrollEdgeAppearance?.backgroundImage = img |
| | | }else{ |
| | | navigationBar.setBackgroundImage(img, for: .default) |
| | | } |
| | | } |
| | | } |
| | | |
| | | //侧滑 |
| | | public func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) { |
| | | if viewController == self.viewControllers[0] { |
| | | self.interactivePopGestureRecognizer!.delegate = self |
| | | }else{ |
| | | self.interactivePopGestureRecognizer!.delegate = nil |
| | | } |
| | | } |
| | | |
| | | open override var childForStatusBarHidden: UIViewController? { |
| | | return self.topViewController |
| | | } |
| | | |
| | | open override var childForStatusBarStyle: UIViewController? { |
| | | return self.topViewController |
| | | } |
| | | |
| | | override var preferredStatusBarStyle: UIStatusBarStyle{ |
| | | return .lightContent |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | class LoginNav: UINavigationController,UINavigationControllerDelegate { |
| | | |
| | | private var popDelegate: UIGestureRecognizerDelegate? |
| | | |
| | | open override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | self.navigationBar.barTintColor = .white |
| | | self.navigationBar.titleTextAttributes = [.font:UIFont.systemFont(ofSize: 18, weight: .medium), .foregroundColor:UIColor.black] |
| | | self.navigationBar.tintColor = UIColor.black |
| | | self.navigationBar.shadowImage = UIImage() |
| | | self.navigationBar.isTranslucent = true |
| | | self.delegate = self |
| | | self.popDelegate = self.interactivePopGestureRecognizer?.delegate |
| | | |
| | | |
| | | if #available(iOS 15.0, *) { |
| | | |
| | | // let img = UIImage.jq_gradient([UIColor(hexStr: "#FD8C02"),UIColor(hexStr: "#FD7202")], size: CGSize(width: JQ_ScreenW, height: JQ_NavBarHeight), radius: 0, locations: [0,1], direction: .vertical) |
| | | |
| | | let scrollBar = UINavigationBarAppearance() |
| | | scrollBar.configureWithOpaqueBackground() |
| | | scrollBar.backgroundEffect = nil |
| | | scrollBar.shadowColor = nil |
| | | scrollBar.titleTextAttributes = [.foregroundColor:Def_NavFontColor,.font:Def_NavFont] |
| | | scrollBar.backgroundColor = UIColor.clear |
| | | // scrollBar.backgroundImage = img |
| | | |
| | | |
| | | let standardBar = UINavigationBarAppearance() |
| | | standardBar.configureWithOpaqueBackground() |
| | | standardBar.backgroundEffect = nil |
| | | standardBar.shadowColor = nil |
| | | standardBar.shadowImage = nil |
| | | standardBar.titleTextAttributes = [.foregroundColor:Def_NavFontColor,.font:Def_NavFont] |
| | | standardBar.backgroundColor = UIColor.clear |
| | | // standardBar.backgroundImage = img |
| | | |
| | | navigationBar.scrollEdgeAppearance = scrollBar //顶部透明 |
| | | navigationBar.standardAppearance = standardBar |
| | | |
| | | |
| | | }else { |
| | | navigationBar.titleTextAttributes = [.foregroundColor:Def_NavFontColor,.font:Def_NavFont] |
| | | } |
| | | } |
| | | |
| | | open func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) { |
| | | |
| | | |
| | | } |
| | | |
| | | //侧滑 |
| | | public func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) { |
| | | if viewController == self.viewControllers[0] { |
| | | self.interactivePopGestureRecognizer!.delegate = self.popDelegate |
| | | }else{ |
| | | self.interactivePopGestureRecognizer!.delegate = nil |
| | | } |
| | | } |
| | | |
| | | open override var childForStatusBarHidden: UIViewController? { |
| | | return self.topViewController |
| | | } |
| | | |
| | | open override var childForStatusBarStyle: UIViewController? { |
| | | return self.topViewController |
| | | } |
| | | |
| | | |
| | | private var popDelegate: UIGestureRecognizerDelegate? |
| | | |
| | | open override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | self.navigationBar.barTintColor = .white |
| | | self.navigationBar.titleTextAttributes = [.font:UIFont.systemFont(ofSize: 18, weight: .medium), .foregroundColor:UIColor.black] |
| | | self.navigationBar.tintColor = UIColor.black |
| | | self.navigationBar.shadowImage = UIImage() |
| | | self.navigationBar.isTranslucent = true |
| | | self.delegate = self |
| | | self.popDelegate = self.interactivePopGestureRecognizer?.delegate |
| | | |
| | | |
| | | if #available(iOS 15.0, *) { |
| | | |
| | | // let img = UIImage.jq_gradient([UIColor(hexStr: "#FD8C02"),UIColor(hexStr: "#FD7202")], size: CGSize(width: JQ_ScreenW, height: JQ_NavBarHeight), radius: 0, locations: [0,1], direction: .vertical) |
| | | |
| | | let scrollBar = UINavigationBarAppearance() |
| | | scrollBar.configureWithOpaqueBackground() |
| | | scrollBar.backgroundEffect = nil |
| | | scrollBar.shadowColor = nil |
| | | scrollBar.titleTextAttributes = [.foregroundColor:Def_NavFontColor,.font:Def_NavFont] |
| | | scrollBar.backgroundColor = UIColor.clear |
| | | // scrollBar.backgroundImage = img |
| | | |
| | | |
| | | let standardBar = UINavigationBarAppearance() |
| | | standardBar.configureWithOpaqueBackground() |
| | | standardBar.backgroundEffect = nil |
| | | standardBar.shadowColor = nil |
| | | standardBar.shadowImage = nil |
| | | standardBar.titleTextAttributes = [.foregroundColor:Def_NavFontColor,.font:Def_NavFont] |
| | | standardBar.backgroundColor = UIColor.clear |
| | | // standardBar.backgroundImage = img |
| | | |
| | | navigationBar.scrollEdgeAppearance = scrollBar //顶部透明 |
| | | navigationBar.standardAppearance = standardBar |
| | | |
| | | |
| | | }else { |
| | | navigationBar.titleTextAttributes = [.foregroundColor:Def_NavFontColor,.font:Def_NavFont] |
| | | } |
| | | } |
| | | |
| | | open func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) { |
| | | |
| | | |
| | | } |
| | | |
| | | //侧滑 |
| | | public func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) { |
| | | if viewController == self.viewControllers[0] { |
| | | self.interactivePopGestureRecognizer!.delegate = self.popDelegate |
| | | }else{ |
| | | self.interactivePopGestureRecognizer!.delegate = nil |
| | | } |
| | | } |
| | | |
| | | open override var childForStatusBarHidden: UIViewController? { |
| | | return self.topViewController |
| | | } |
| | | |
| | | open override var childForStatusBarStyle: UIViewController? { |
| | | return self.topViewController |
| | | } |
| | | |
| | | } |
| | |
| | | |
| | | let attributed = AttributedStringbuilder.build() |
| | | |
| | | if type != .other && type != .matchStore && type != .useStore{ |
| | | if type != .other && type != .matchStore && type != .useStore && type != .matchPoint{ |
| | | Services.queryProtocol(type,progress: false).subscribe(onNext: { result in |
| | | if let text = result.data?.jq_wrapHtml(){ |
| | | attributed.add(string: text, withFont: UIFont.systemFont(ofSize: 14, weight: .semibold), withColor: UIColor(hexStr: "727272"), lineSpace: 4) |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22154" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <device id="retina6_12" orientation="portrait" appearance="light"/> |
| | | <dependencies> |
| | | <deployment identifier="iOS"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22129"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/> |
| | | <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> |
| | | </dependencies> |
| | | <objects> |
| | |
| | | </connections> |
| | | </button> |
| | | </subviews> |
| | | <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.69999999999999996" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.90000000000000002" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstAttribute="trailing" secondItem="6HX-Cl-1DV" secondAttribute="trailing" constant="44" id="97i-gB-Zk8"/> |
| | | <constraint firstItem="Uua-ww-qMC" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="Hsf-NB-MIA"/> |
| | |
| | | } |
| | | |
| | | if page == "社区世界杯"{ |
| | | JQ_currentViewController().jq_push(vc: WorldCupListVC()) |
| | | if type == "详情"{ |
| | | JQ_currentViewController().jq_push(vc: WorldCupContentApplyVC(id: id!)) |
| | | } |
| | | if type == "主页" || type == "列表"{ |
| | | JQ_currentViewController().jq_push(vc: WorldCupListVC()) |
| | | } |
| | | } |
| | | |
| | | case "开始课程": |
| | |
| | | ///智慧球场 |
| | | case wisdomCourt = 8 |
| | | |
| | | case worldcupDetail = 9 |
| | | |
| | | case nothing = -999 |
| | | |
| | | var defaultImg:UIImage{ |
| | |
| | | case .wisdomCourt: |
| | | return UIImage(named: "b_7")! |
| | | default: |
| | | return UIImage() |
| | | return UIImage(named: "b_1")! |
| | | } |
| | | } |
| | | } |
| | |
| | | #if DEBUG |
| | | //let All_Url = "http://192.168.110.27:56666" //罗易胜 |
| | | //let All_Url = "http://192.168.110.85:56666" //正式地址 |
| | | let All_Url = "http://192.168.110.80:56666" //正式地址 |
| | | //let All_Url = "http://192.168.110.80:56666" //正式地址 |
| | | let All_Url = "http://221.182.45.100:56666" |
| | | let Game_Url = "https://try.daowepark.com" |
| | | //let Socket_Url = "192.168.110.22" |
| | | #else |
| | |
| | | |
| | | class ActivitySignupDetailVC: BaseVC { |
| | | |
| | | private var id:Int! |
| | | @IBOutlet weak var view_banner: CommonBannerView! |
| | | // @IBOutlet weak var img_profile: UIImageView! |
| | | // @IBOutlet weak var label_storeNames: UILabel! |
| | | @IBOutlet weak var label_title: UILabel! |
| | | @IBOutlet weak var label_joinCondition: UILabel! |
| | | @IBOutlet weak var label_address: UILabel! |
| | | @IBOutlet weak var label_duetime: UILabel! |
| | | @IBOutlet weak var label_starttime: UILabel! |
| | | @IBOutlet weak var label_endtime: UILabel! |
| | | @IBOutlet weak var label_ageScope: UILabel! |
| | | @IBOutlet weak var label_city: UILabel! |
| | | @IBOutlet weak var label_money: UILabel! |
| | | @IBOutlet weak var label_totalMoney: UILabel! |
| | | @IBOutlet weak var label_introducion: UILabel! |
| | | @IBOutlet weak var img_enrollRequired: UIImageView! |
| | | @IBOutlet weak var cons_imgEnrollHei: NSLayoutConstraint! |
| | | @IBOutlet weak var btn_cancel: QMUIButton! |
| | | @IBOutlet weak var tableView: UITableView! |
| | | @IBOutlet weak var cons_tableHei: NSLayoutConstraint! |
| | | @IBOutlet weak var label_matchStore: UILabel! |
| | | @IBOutlet weak var btn_moreMatchStore: UIButton! |
| | | |
| | | var activityDetailModel:ActivityDetailModel?{ |
| | | didSet{ |
| | | private var id:Int! |
| | | @IBOutlet weak var view_banner: CommonBannerView! |
| | | // @IBOutlet weak var img_profile: UIImageView! |
| | | // @IBOutlet weak var label_storeNames: UILabel! |
| | | @IBOutlet weak var label_title: UILabel! |
| | | @IBOutlet weak var label_joinCondition: UILabel! |
| | | @IBOutlet weak var label_address: UILabel! |
| | | @IBOutlet weak var label_duetime: UILabel! |
| | | @IBOutlet weak var label_starttime: UILabel! |
| | | @IBOutlet weak var label_endtime: UILabel! |
| | | @IBOutlet weak var label_ageScope: UILabel! |
| | | @IBOutlet weak var label_city: UILabel! |
| | | @IBOutlet weak var label_money: UILabel! |
| | | @IBOutlet weak var label_totalMoney: UILabel! |
| | | @IBOutlet weak var label_introducion: UILabel! |
| | | @IBOutlet weak var img_enrollRequired: UIImageView! |
| | | @IBOutlet weak var cons_imgEnrollHei: NSLayoutConstraint! |
| | | @IBOutlet weak var btn_cancel: QMUIButton! |
| | | @IBOutlet weak var tableView: UITableView! |
| | | @IBOutlet weak var cons_tableHei: NSLayoutConstraint! |
| | | @IBOutlet weak var label_matchStore: UILabel! |
| | | @IBOutlet weak var btn_moreMatchStore: UIButton! |
| | | |
| | | guard let m = activityDetailModel else {return} |
| | | var activityDetailModel:ActivityDetailModel?{ |
| | | didSet{ |
| | | |
| | | guard let m = activityDetailModel else {return} |
| | | |
| | | |
| | | let imgs = m.imgs.components(separatedBy: ",") |
| | | var items = [CommonBannerModel]() |
| | | for (index,img) in imgs.enumerated(){ |
| | | items.append(CommonBannerModel(index: index,resource: img,mediaType: .imageUrl)) |
| | | } |
| | | view_banner.setItems(items: items) |
| | | let imgs = m.imgs.components(separatedBy: ",") |
| | | var items = [CommonBannerModel]() |
| | | for (index,img) in imgs.enumerated(){ |
| | | items.append(CommonBannerModel(index: index,resource: img,mediaType: .imageUrl)) |
| | | } |
| | | view_banner.setItems(items: items) |
| | | |
| | | label_title.text = m.name |
| | | label_joinCondition.text = m.registerCondition.strTitle + "参与" |
| | | label_address.text = m.address |
| | | label_duetime.text = m.registerEndTime |
| | | label_starttime.text = m.startTime |
| | | label_endtime.text = m.endTime |
| | | label_ageScope.text = m.age + "岁" |
| | | label_introducion.text = m.introduction |
| | | label_city.isHidden = m.province.isEmpty || m.city.isEmpty |
| | | label_city.text = m.province + "|" + m.city |
| | | label_matchStore.text = m.storeInfos.map({$0.name}).joined(separator: ",") |
| | | btn_moreMatchStore.isHidden = (label_matchStore.text?.count ?? 0) < 50 |
| | | label_title.text = m.name |
| | | label_joinCondition.text = m.registerCondition.strTitle + "参与" |
| | | label_address.text = m.address |
| | | label_duetime.text = m.registerEndTime |
| | | label_starttime.text = m.startTime |
| | | label_endtime.text = m.endTime |
| | | label_ageScope.text = m.age + "岁" |
| | | label_introducion.text = m.introduction |
| | | label_city.isHidden = m.province.isEmpty || m.city.isEmpty |
| | | label_city.text = m.province + "|" + m.city |
| | | label_matchStore.text = m.storeInfos.map({$0.name}).joined(separator: ",") |
| | | btn_moreMatchStore.isHidden = (label_matchStore.text?.count ?? 0) < 50 |
| | | |
| | | img_enrollRequired.sd_setImage(with: URL(string: m.registrationNotes)) {[weak self] image, error, type, url in |
| | | guard let img = image else { |
| | | self?.cons_imgEnrollHei.constant = 0;return |
| | | img_enrollRequired.sd_setImage(with: URL(string: m.registrationNotes)) {[weak self] image, error, type, url in |
| | | guard let img = image else { |
| | | self?.cons_imgEnrollHei.constant = 0;return |
| | | } |
| | | |
| | | let radio = img.size.width / img.size.height |
| | | self?.cons_imgEnrollHei.constant = JQ_ScreenW / radio |
| | | } |
| | | |
| | | switch m.payType { |
| | | case .wechat,.aliPay: |
| | | label_money.text = String(format: "%@/人", m.cashPrice.currency()) |
| | | label_totalMoney.text = String(format: "合计:%@", (m.cashPrice * Double(m.participant.count)).currency()) |
| | | case .coin: |
| | | label_money.text = String(format: "%ld币/人", m.playPaiCoin) |
| | | label_totalMoney.text = String(format: "合计:%ld币", (m.playPaiCoin * m.participant.count)) |
| | | case .courseNum: |
| | | label_money.text = String(format: "%ld课时/人", m.classPrice) |
| | | label_totalMoney.text = String(format: "合计:%ld课时", (m.classPrice * m.participant.count)) |
| | | default: |
| | | label_money.text = "未知" |
| | | label_totalMoney.text = "未知" |
| | | } |
| | | |
| | | cons_tableHei.constant = Double(m.participant.count) * 100 |
| | | tableView.reloadData() |
| | | |
| | | switch m.status { |
| | | case .prepare: |
| | | let name = m.apply == 1 ? "取消":"已取消" |
| | | let color = m.apply == 1 ? Def_ThemeColor:UIColor(hexStr: "#C0C0C0") |
| | | btn_cancel.isUserInteractionEnabled = m.apply == 1 |
| | | btn_cancel.setTitle(name, for: .normal) |
| | | btn_cancel.backgroundColor = color |
| | | |
| | | if m.apply == 1{ |
| | | btn_cancel.setImage(UIImage(named: "btn_cancel"), for: .normal) |
| | | } |
| | | |
| | | case .ongoing: |
| | | let endTime = Date.jq_StringToTimeInterval(m.registerEndTime, "yyyy-MM-dd HH:mm") |
| | | let a = Date.jq_CalByDays(startDate: Date(), endDate: Date(timeIntervalSince1970: endTime)) |
| | | if Date.jq_CalByEnum(startDate: Date(), endDate: Date(timeIntervalSince1970: endTime)).minute > 0{ |
| | | let name = m.apply == 1 ? "取消":"已取消" |
| | | let color = m.apply == 1 ? Def_ThemeColor:UIColor(hexStr: "#C0C0C0") |
| | | btn_cancel.isUserInteractionEnabled = m.apply == 1 |
| | | btn_cancel.setTitle(name, for: .normal) |
| | | btn_cancel.backgroundColor = color |
| | | if m.apply == 1{ |
| | | btn_cancel.setImage(UIImage(named: "btn_cancel"), for: .normal) |
| | | } |
| | | }else{ |
| | | btn_cancel.setTitle("进行中", for: .normal) |
| | | btn_cancel.isUserInteractionEnabled = false |
| | | btn_cancel.backgroundColor = UIColor(hexStr: "#C0C0C0") |
| | | } |
| | | |
| | | case .over: |
| | | btn_cancel.setTitle("已结束", for: .normal) |
| | | btn_cancel.isUserInteractionEnabled = false |
| | | btn_cancel.backgroundColor = UIColor(hexStr: "#C0C0C0") |
| | | case .cancel: |
| | | btn_cancel.setTitle("已取消", for: .normal) |
| | | btn_cancel.isUserInteractionEnabled = false |
| | | btn_cancel.backgroundColor = UIColor(hexStr: "#C0C0C0") |
| | | default:break |
| | | } |
| | | } |
| | | } |
| | | |
| | | let radio = img.size.width / img.size.height |
| | | self?.cons_imgEnrollHei.constant = JQ_ScreenW / radio |
| | | } |
| | | required init(id: Int) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.id = id |
| | | } |
| | | |
| | | switch m.payType { |
| | | case .wechat,.aliPay: |
| | | label_money.text = String(format: "%@/人", m.cashPrice.currency()) |
| | | label_totalMoney.text = String(format: "合计:%@", (m.cashPrice * Double(m.participant.count)).currency()) |
| | | case .coin: |
| | | label_money.text = String(format: "%ld币/人", m.playPaiCoin) |
| | | label_totalMoney.text = String(format: "合计:%ld币", (m.playPaiCoin * m.participant.count)) |
| | | case .courseNum: |
| | | label_money.text = String(format: "%ld课时/人", m.classPrice) |
| | | label_totalMoney.text = String(format: "合计:%ld课时", (m.classPrice * m.participant.count)) |
| | | default: |
| | | label_money.text = "未知" |
| | | label_totalMoney.text = "未知" |
| | | } |
| | | |
| | | cons_tableHei.constant = Double(m.participant.count) * 100 |
| | | tableView.reloadData() |
| | | |
| | | switch m.status { |
| | | case .prepare: |
| | | let name = m.apply == 1 ? "取消":"已取消" |
| | | let color = m.apply == 1 ? Def_ThemeColor:UIColor(hexStr: "#C0C0C0") |
| | | btn_cancel.isUserInteractionEnabled = m.apply == 1 |
| | | btn_cancel.setTitle(name, for: .normal) |
| | | btn_cancel.backgroundColor = color |
| | | |
| | | if m.apply == 1{ |
| | | btn_cancel.setImage(UIImage(named: "btn_cancel"), for: .normal) |
| | | } |
| | | |
| | | case .ongoing: |
| | | let endTime = Date.jq_StringToTimeInterval(m.registerEndTime, "yyyy-MM-dd HH:mm") |
| | | let a = Date.jq_CalByDays(startDate: Date(), endDate: Date(timeIntervalSince1970: endTime)) |
| | | if Date.jq_CalByEnum(startDate: Date(), endDate: Date(timeIntervalSince1970: endTime)).minute > 0{ |
| | | let name = m.apply == 1 ? "取消":"已取消" |
| | | let color = m.apply == 1 ? Def_ThemeColor:UIColor(hexStr: "#C0C0C0") |
| | | btn_cancel.isUserInteractionEnabled = m.apply == 1 |
| | | btn_cancel.setTitle(name, for: .normal) |
| | | btn_cancel.backgroundColor = color |
| | | if m.apply == 1{ |
| | | btn_cancel.setImage(UIImage(named: "btn_cancel"), for: .normal) |
| | | } |
| | | }else{ |
| | | btn_cancel.setTitle("进行中", for: .normal) |
| | | btn_cancel.isUserInteractionEnabled = false |
| | | btn_cancel.backgroundColor = UIColor(hexStr: "#C0C0C0") |
| | | } |
| | | |
| | | case .over: |
| | | btn_cancel.setTitle("已结束", for: .normal) |
| | | btn_cancel.isUserInteractionEnabled = false |
| | | btn_cancel.backgroundColor = UIColor(hexStr: "#C0C0C0") |
| | | case .cancel: |
| | | btn_cancel.setTitle("已取消", for: .normal) |
| | | btn_cancel.isUserInteractionEnabled = false |
| | | btn_cancel.backgroundColor = UIColor(hexStr: "#C0C0C0") |
| | | default:break |
| | | } |
| | | } |
| | | } |
| | | |
| | | required init(id: Int) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.id = id |
| | | } |
| | | |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "活动详情" |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "活动详情" |
| | | |
| | | Services.queryMyCompetitionInfo(id: id).subscribe(onNext: {data in |
| | | self.activityDetailModel = data.data |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | Services.queryMyCompetitionInfo(id: id).subscribe(onNext: {data in |
| | | self.activityDetailModel = data.data |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | override func setUI() { |
| | | btn_cancel.imagePosition = .left |
| | | btn_cancel.spacingBetweenImageAndTitle = 12 |
| | | tableView.delegate = self |
| | | tableView.dataSource = self |
| | | tableView.separatorStyle = .none |
| | | tableView.register(UINib(nibName: "StudentInfo_2_TCell", bundle: nil), forCellReuseIdentifier: "_StudentInfo_2_TCell") |
| | | let moreBtnAttributeding = AttributedStringbuilder.build().add(string: "查看更多", withFont: UIFont.systemFont(ofSize: 12, weight: .medium), withColor: Def_ThemeColor).underLine(color: Def_ThemeColor).mutableAttributedString |
| | | btn_moreMatchStore.setAttributedTitle(moreBtnAttributeding, for: .normal) |
| | | } |
| | | override func setUI() { |
| | | btn_cancel.imagePosition = .left |
| | | btn_cancel.spacingBetweenImageAndTitle = 12 |
| | | tableView.delegate = self |
| | | tableView.dataSource = self |
| | | tableView.separatorStyle = .none |
| | | tableView.register(UINib(nibName: "StudentInfo_2_TCell", bundle: nil), forCellReuseIdentifier: "_StudentInfo_2_TCell") |
| | | let moreBtnAttributeding = AttributedStringbuilder.build().add(string: "查看更多", withFont: UIFont.systemFont(ofSize: 12, weight: .medium), withColor: Def_ThemeColor).underLine(color: Def_ThemeColor).mutableAttributedString |
| | | btn_moreMatchStore.setAttributedTitle(moreBtnAttributeding, for: .normal) |
| | | } |
| | | |
| | | @IBAction func matchStoreAction(_ sender: UIButton) { |
| | | if let content = activityDetailModel?.storeInfos.map({$0.name}).joined(separator: ","){ |
| | | AgreentView.show(type: .matchStore, content: content) |
| | | } |
| | | } |
| | | @IBAction func matchStoreAction(_ sender: UIButton) { |
| | | if let content = activityDetailModel?.storeInfos.map({$0.name}).joined(separator: ","){ |
| | | AgreentView.show(type: .matchStore, content: content) |
| | | } |
| | | } |
| | | |
| | | @IBAction func operationAction(_ sender: UIButton) { |
| | | CommonAlertView.show(title: "提示", content: "确认取消吗?取消后相关费用将会退还到原支付账户!") { [weak self]status in |
| | | guard let weakSelf = self else { return } |
| | | if status{ |
| | | Services.cancelMyCOmpetition(id: weakSelf.id).subscribe(onNext: { data in |
| | | alertSuccess(msg: "取消成功") |
| | | self?.btn_cancel.setTitle("已取消", for: .normal) |
| | | self?.btn_cancel.backgroundColor = UIColor(hexStr: "#C0C0C0") |
| | | NotificationCenter.default.post(name: CancelActivitySingup_Noti, object: nil) |
| | | NotificationCenter.default.post(name: StudentRefresh_Nofi, object: nil) |
| | | }).disposed(by: weakSelf.disposeBag) |
| | | } |
| | | } |
| | | } |
| | | @IBAction func operationAction(_ sender: UIButton) { |
| | | CommonAlertView.show(title: "提示", content: "确认取消吗?取消后相关费用将会退还到原支付账户!") { [weak self]status in |
| | | guard let weakSelf = self else { return } |
| | | if status{ |
| | | Services.cancelMyCOmpetition(id: weakSelf.id).subscribe(onNext: { data in |
| | | alertSuccess(msg: "取消成功") |
| | | self?.btn_cancel.setTitle("已取消", for: .normal) |
| | | self?.btn_cancel.backgroundColor = UIColor(hexStr: "#C0C0C0") |
| | | NotificationCenter.default.post(name: CancelActivitySingup_Noti, object: nil) |
| | | NotificationCenter.default.post(name: StudentRefresh_Nofi, object: nil) |
| | | }).disposed(by: weakSelf.disposeBag) |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | extension ActivitySignupDetailVC:UITableViewDataSource{ |
| | | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
| | | let student = activityDetailModel!.participant[indexPath.row] |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "_StudentInfo_2_TCell") as! StudentInfo_2_TCell |
| | | cell.indexPath = indexPath |
| | | cell.activityDetailPartModel = student |
| | | cell.btn_edit.isHidden = true |
| | | cell.img_radio.isHidden = true |
| | | cell.btn_delete.isHidden = true |
| | | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
| | | let student = activityDetailModel!.participant[indexPath.row] |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "_StudentInfo_2_TCell") as! StudentInfo_2_TCell |
| | | cell.indexPath = indexPath |
| | | cell.activityDetailPartModel = student |
| | | cell.btn_edit.isHidden = true |
| | | cell.img_radio.isHidden = true |
| | | cell.btn_delete.isHidden = true |
| | | |
| | | return cell |
| | | } |
| | | return cell |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
| | | return activityDetailModel?.participant.count ?? 0 |
| | | } |
| | | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
| | | return activityDetailModel?.participant.count ?? 0 |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | class AddStudentVC: BaseVC { |
| | | |
| | | @IBOutlet weak var img_profile: UIImageView! |
| | | @IBOutlet weak var view_profile: UIView! |
| | | @IBOutlet weak var tf_name: QMUITextField! |
| | | @IBOutlet weak var tf_gender: UITextField! |
| | | @IBOutlet weak var tf_idCard: UITextField! |
| | | @IBOutlet weak var tf_height: QMUITextField! |
| | | @IBOutlet weak var view_height: UIView! |
| | | @IBOutlet weak var view_weight: UIView! |
| | | @IBOutlet weak var view_phone: UIView! |
| | | @IBOutlet weak var tf_weight: QMUITextField! |
| | | @IBOutlet weak var tf_phone: QMUITextField! |
| | | @IBOutlet weak var tf_birthday: UITextField! |
| | | @IBOutlet weak var img_profile: UIImageView! |
| | | @IBOutlet weak var view_profile: UIView! |
| | | @IBOutlet weak var tf_name: QMUITextField! |
| | | @IBOutlet weak var tf_gender: UITextField! |
| | | @IBOutlet weak var tf_idCard: UITextField! |
| | | @IBOutlet weak var tf_height: QMUITextField! |
| | | @IBOutlet weak var view_height: UIView! |
| | | @IBOutlet weak var view_weight: UIView! |
| | | @IBOutlet weak var view_phone: UIView! |
| | | @IBOutlet weak var tf_weight: QMUITextField! |
| | | @IBOutlet weak var tf_phone: QMUITextField! |
| | | @IBOutlet weak var tf_birthday: UITextField! |
| | | |
| | | var profileImg:UIImage? |
| | | var profileImg:UIImage? |
| | | |
| | | var studentModel = StudentProfileModel() |
| | | var studentInfo:StudentProfile1Model? |
| | | var activityDetailPartModel:ActivityDetailPartModel? |
| | | var type:ItemType! |
| | | var studentModel = StudentProfileModel() |
| | | var studentInfo:StudentProfile1Model? |
| | | var activityDetailPartModel:ActivityDetailPartModel? |
| | | var type:ItemType! |
| | | |
| | | var verifyIdCard:Bool = false |
| | | var verifyIdCard:Bool = false |
| | | |
| | | init(type:ItemType,studentInfo:StudentProfile1Model? = nil) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.type = type |
| | | self.studentInfo = studentInfo |
| | | } |
| | | init(type:ItemType,studentInfo:StudentProfile1Model? = nil) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.type = type |
| | | self.studentInfo = studentInfo |
| | | } |
| | | |
| | | init(activityDetailPartModel:ActivityDetailPartModel? = nil) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.type = .activity |
| | | self.activityDetailPartModel = activityDetailPartModel |
| | | } |
| | | init(activityDetailPartModel:ActivityDetailPartModel? = nil) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.type = .activity |
| | | self.activityDetailPartModel = activityDetailPartModel |
| | | } |
| | | |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | if type == .course{ |
| | | title = "添加运动营成员" |
| | | view_profile.isHidden = false |
| | | if studentInfo != nil{ |
| | | title = "编辑运动营成员" |
| | | tf_name.placeholder = "请输入运动营成员姓名" |
| | | tf_height.placeholder = "请输入运动营成员身高" |
| | | tf_weight.placeholder = "请输入运动营成员体重" |
| | | tf_phone.placeholder = "请输入运动营成员联系方式" |
| | | tf_idCard.placeholder = "请输入运动营成员身份证号" |
| | | tf_name.text = studentInfo!.stuName |
| | | tf_idCard.text = studentInfo!.idCard |
| | | tf_height.text = String(format: "%.0lf", studentInfo!.stuHeight) |
| | | tf_weight.text = String(format: "%.0lf", studentInfo!.stuWeight) |
| | | tf_phone.text = studentInfo!.stuPhone |
| | | tf_birthday.text = studentInfo!.birthday |
| | | img_profile.sd_setImage(with: URL(string: studentInfo!.stuHeadImg)) |
| | | studentModel.headImg = studentInfo!.stuHeadImg |
| | | studentModel.stuId = studentInfo!.stuId |
| | | tf_gender.text = studentModel.sex == .man ? "男":"女" |
| | | } |
| | | }else{ |
| | | view_profile.isHidden = true |
| | | title = "添加人员" |
| | | tf_name.placeholder = "请输入人员姓名" |
| | | tf_height.placeholder = "请输入身高" |
| | | tf_weight.placeholder = "请输入体重" |
| | | tf_phone.placeholder = "请输入联系方式" |
| | | tf_idCard.placeholder = "请输入身份证号" |
| | | if let m = activityDetailPartModel{ |
| | | title = "编辑人员" |
| | | tf_name.text = m.name |
| | | tf_idCard.text = m.idcard |
| | | tf_height.text = String(format: "%.0lf", m.height) |
| | | tf_weight.text = String(format: "%.0lf", m.weight) |
| | | tf_phone.text = m.phone |
| | | tf_birthday.text = m.birthday |
| | | tf_gender.text = m.gender == .man ? "男":"女" |
| | | view_height.isHidden = true |
| | | view_weight.isHidden = true |
| | | view_phone.isHidden = true |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | if type == .course{ |
| | | title = "添加运动营成员" |
| | | view_profile.isHidden = false |
| | | if studentInfo != nil{ |
| | | title = "编辑运动营成员" |
| | | tf_name.placeholder = "请输入运动营成员姓名" |
| | | tf_height.placeholder = "请输入运动营成员身高" |
| | | tf_weight.placeholder = "请输入运动营成员体重" |
| | | tf_phone.placeholder = "请输入运动营成员联系方式" |
| | | tf_idCard.placeholder = "请输入运动营成员身份证号" |
| | | tf_name.text = studentInfo!.stuName |
| | | tf_idCard.text = studentInfo!.idCard |
| | | tf_height.text = String(format: "%.0lf", studentInfo!.stuHeight) |
| | | tf_weight.text = String(format: "%.0lf", studentInfo!.stuWeight) |
| | | tf_phone.text = studentInfo!.stuPhone |
| | | tf_birthday.text = studentInfo!.birthday |
| | | img_profile.sd_setImage(with: URL(string: studentInfo!.stuHeadImg)) |
| | | studentModel.headImg = studentInfo!.stuHeadImg |
| | | studentModel.stuId = studentInfo!.stuId |
| | | tf_gender.text = studentModel.sex == .man ? "男":"女" |
| | | } |
| | | }else{ |
| | | view_profile.isHidden = true |
| | | title = "添加人员" |
| | | tf_name.placeholder = "请输入人员姓名" |
| | | tf_height.placeholder = "请输入身高" |
| | | tf_weight.placeholder = "请输入体重" |
| | | tf_phone.placeholder = "请输入联系方式" |
| | | tf_idCard.placeholder = "请输入身份证号" |
| | | if let m = activityDetailPartModel{ |
| | | title = "编辑人员" |
| | | tf_name.text = m.name |
| | | tf_idCard.text = m.idcard |
| | | tf_height.text = String(format: "%.0lf", m.height) |
| | | tf_weight.text = String(format: "%.0lf", m.weight) |
| | | tf_phone.text = m.phone |
| | | tf_birthday.text = m.birthday |
| | | tf_gender.text = m.gender == .man ? "男":"女" |
| | | view_height.isHidden = true |
| | | view_weight.isHidden = true |
| | | view_phone.isHidden = true |
| | | |
| | | tf_name.isEnabled = false |
| | | tf_birthday.isEnabled = false |
| | | tf_gender.isEnabled = false |
| | | } |
| | | } |
| | | tf_name.isEnabled = false |
| | | tf_birthday.isEnabled = false |
| | | tf_gender.isEnabled = false |
| | | } |
| | | } |
| | | |
| | | let idCardView = IDCardView() |
| | | idCardView.box.bind { [weak self] text in |
| | | self?.tf_idCard.text = text |
| | | } |
| | | tf_idCard.inputView = idCardView |
| | | let idCardView = IDCardView() |
| | | idCardView.box.bind { [weak self] text in |
| | | self?.tf_idCard.text = text |
| | | } |
| | | tf_idCard.inputView = idCardView |
| | | |
| | | let tap = UITapGestureRecognizer(target: self, action: #selector(userImgUploadAction)) |
| | | img_profile.isUserInteractionEnabled = true |
| | | img_profile.addGestureRecognizer(tap) |
| | | } |
| | | let tap = UITapGestureRecognizer(target: self, action: #selector(userImgUploadAction)) |
| | | img_profile.isUserInteractionEnabled = true |
| | | img_profile.addGestureRecognizer(tap) |
| | | } |
| | | |
| | | override func setUI() { |
| | | tf_birthday.delegate = self |
| | | tf_gender.delegate = self |
| | | } |
| | | override func setUI() { |
| | | tf_birthday.delegate = self |
| | | tf_gender.delegate = self |
| | | } |
| | | |
| | | @objc func userImgUploadAction(){ |
| | | JQ_ImagePickerTool.getSharedInstance().singleImage({ [weak self] image in |
| | | self?.img_profile.image = image |
| | | self?.profileImg = image |
| | | }, clipSize: CGSize(width: JQ_ScreenW, height: JQ_ScreenW)) |
| | | } |
| | | @objc func userImgUploadAction(){ |
| | | JQ_ImagePickerTool.getSharedInstance().singleImage({ [weak self] image in |
| | | self?.img_profile.image = image |
| | | self?.profileImg = image |
| | | }, clipSize: CGSize(width: JQ_ScreenW, height: JQ_ScreenW)) |
| | | } |
| | | |
| | | |
| | | @IBAction func completeAction(_ sender: UIButton) { |
| | | if studentInfo == nil && type == .course{ |
| | | guard profileImg != nil else {alertError(msg: "请上传运动营成员头像");return} |
| | | } |
| | | @IBAction func completeAction(_ sender: UIButton) { |
| | | if studentInfo == nil && type == .course{ |
| | | guard profileImg != nil else {alertError(msg: "请上传运动营成员头像");return} |
| | | } |
| | | |
| | | guard !tf_name.text!.isEmpty else {alertError(msg: tf_name.placeholder!);return} |
| | | guard !tf_birthday.text!.isEmpty else {alertError(msg: "请选择生日");return} |
| | | guard !tf_gender.text!.isEmpty else {alertError(msg: "请选择性别");return} |
| | | guard !tf_name.text!.isEmpty else {alertError(msg: tf_name.placeholder!);return} |
| | | guard !tf_birthday.text!.isEmpty else {alertError(msg: "请选择生日");return} |
| | | guard !tf_gender.text!.isEmpty else {alertError(msg: "请选择性别");return} |
| | | |
| | | if type == .course{ |
| | | guard !tf_height.text!.isEmpty else {alertError(msg: tf_height.placeholder!);return} |
| | | guard !tf_weight.text!.isEmpty else {alertError(msg: tf_weight.placeholder!);return} |
| | | guard tf_height.text != "0" else {alertError(msg: "请输入正确的身高");return} |
| | | guard tf_weight.text != "0" else {alertError(msg: "请输入正确的体重");return} |
| | | } |
| | | if type == .course{ |
| | | guard !tf_height.text!.isEmpty else {alertError(msg: tf_height.placeholder!);return} |
| | | guard !tf_weight.text!.isEmpty else {alertError(msg: tf_weight.placeholder!);return} |
| | | guard tf_height.text != "0" else {alertError(msg: "请输入正确的身高");return} |
| | | guard tf_weight.text != "0" else {alertError(msg: "请输入正确的体重");return} |
| | | } |
| | | |
| | | if !tf_phone.isEmpty{ |
| | | guard tf_phone.text!.jq_isPhone else {alertError(msg: "请输入正确的手机号");return} |
| | | } |
| | | |
| | | if !tf_idCard.isEmpty || activityDetailPartModel != nil{ |
| | | guard tf_idCard.text!.jq_idCard() else {alertError(msg: "请输入正确的身份证号码");return} |
| | | } |
| | | if !tf_phone.isEmpty{ |
| | | guard tf_phone.text!.jq_isPhone else {alertError(msg: "请输入正确的手机号");return} |
| | | } |
| | | |
| | | studentModel.birthday = tf_birthday.text! |
| | | studentModel.name = tf_name.text! |
| | | studentModel.height = tf_height.text!.toDouble |
| | | studentModel.weight = tf_weight.text!.toDouble |
| | | studentModel.phone = tf_phone.text! |
| | | studentModel.idCard = tf_idCard.text! |
| | | studentModel.name = tf_name.text! |
| | | // if !tf_idCard.isEmpty || activityDetailPartModel != nil{ |
| | | // |
| | | // } |
| | | guard tf_idCard.text!.jq_idCard() else {alertError(msg: "请输入正确的身份证号码");return} |
| | | |
| | | if profileImg != nil{ |
| | | showHUD("正在上传头像") |
| | | profileImg!.uploadImgToService().subscribe(onNext: { [weak self] imgUrl in |
| | | guard let weakSelf = self else { return } |
| | | weakSelf.studentModel.headImg = imgUrl |
| | | hiddenHUD() |
| | | weakSelf.addStudent() |
| | | }, onError: { error in |
| | | hiddenHUD() |
| | | alertError(msg: error.localizedDescription) |
| | | }).disposed(by: disposeBag) |
| | | }else{ |
| | | addStudent() |
| | | } |
| | | } |
| | | studentModel.birthday = tf_birthday.text! |
| | | studentModel.name = tf_name.text! |
| | | studentModel.height = tf_height.text!.toDouble |
| | | studentModel.weight = tf_weight.text!.toDouble |
| | | studentModel.phone = tf_phone.text! |
| | | studentModel.idCard = tf_idCard.text! |
| | | studentModel.name = tf_name.text! |
| | | |
| | | private func addStudent(){ |
| | | if type == .course{ |
| | | if studentInfo == nil{ |
| | | Services.addStudent(studentModel).subscribe(onNext: { [weak self] data in |
| | | self?.addStudentSuccess(text: "编辑成功") |
| | | }).disposed(by: disposeBag) |
| | | }else{ |
| | | Services.editStu(studentModel).subscribe(onNext: {[weak self]data in |
| | | self?.addStudentSuccess(text: "添加成功") |
| | | NotificationCenter.default.post(name: StudentUpdate_Nofi, object: nil) |
| | | }) { error in |
| | | if profileImg != nil{ |
| | | showHUD("正在上传头像") |
| | | profileImg!.uploadImgToService().subscribe(onNext: { [weak self] imgUrl in |
| | | guard let weakSelf = self else { return } |
| | | weakSelf.studentModel.headImg = imgUrl |
| | | hiddenHUD() |
| | | weakSelf.addStudent() |
| | | }, onError: { error in |
| | | hiddenHUD() |
| | | alertError(msg: error.localizedDescription) |
| | | }).disposed(by: disposeBag) |
| | | }else{ |
| | | addStudent() |
| | | } |
| | | } |
| | | |
| | | }.disposed(by: disposeBag) |
| | | } |
| | | }else{ |
| | | if activityDetailPartModel != nil{ |
| | | activityDetailPartModel!.idcard = tf_idCard.text! |
| | | Services.editParticipant(activityDetailPartModel!).subscribe(onNext: {[weak self] data in |
| | | self?.addStudentSuccess(text: "编辑成功") |
| | | }).disposed(by: disposeBag) |
| | | private func addStudent(){ |
| | | if type == .course{ |
| | | if studentInfo == nil{ |
| | | Services.addStudent(studentModel).subscribe(onNext: { [weak self] data in |
| | | self?.addStudentSuccess(text: "编辑成功") |
| | | }).disposed(by: disposeBag) |
| | | }else{ |
| | | Services.editStu(studentModel).subscribe(onNext: {[weak self]data in |
| | | self?.addStudentSuccess(text: "添加成功") |
| | | NotificationCenter.default.post(name: StudentUpdate_Nofi, object: nil) |
| | | }) { error in |
| | | |
| | | }else{ |
| | | Services.addParticipant(studentModel).subscribe(onNext: {[weak self] data in |
| | | self?.addStudentSuccess(text: "添加成功") |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | } |
| | | } |
| | | }.disposed(by: disposeBag) |
| | | } |
| | | }else{ |
| | | if activityDetailPartModel != nil{ |
| | | activityDetailPartModel!.idcard = tf_idCard.text! |
| | | Services.editParticipant(activityDetailPartModel!).subscribe(onNext: {[weak self] data in |
| | | self?.addStudentSuccess(text: "编辑成功") |
| | | }).disposed(by: disposeBag) |
| | | |
| | | private func addStudentSuccess(text:String){ |
| | | alertSuccess(msg: text) |
| | | DispatchQueue.main.asyncAfter(deadline: .now()+1) { |
| | | self.navigationController?.popViewController() |
| | | NotificationCenter.default.post(name: StudentUpdate_Nofi, object: nil) |
| | | } |
| | | } |
| | | }else{ |
| | | Services.addParticipant(studentModel).subscribe(onNext: {[weak self] data in |
| | | self?.addStudentSuccess(text: "添加成功") |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | } |
| | | } |
| | | |
| | | deinit{ |
| | | JQ_ImagePickerTool.destroy() |
| | | } |
| | | private func addStudentSuccess(text:String){ |
| | | alertSuccess(msg: text) |
| | | DispatchQueue.main.asyncAfter(deadline: .now()+1) { |
| | | self.navigationController?.popViewController() |
| | | NotificationCenter.default.post(name: StudentUpdate_Nofi, object: nil) |
| | | } |
| | | } |
| | | |
| | | deinit{ |
| | | JQ_ImagePickerTool.destroy() |
| | | } |
| | | } |
| | | |
| | | extension AddStudentVC:UITextFieldDelegate{ |
| | | func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { |
| | | if textField == tf_birthday{ |
| | | view.endEditing(true) |
| | | CommonDatePickerView.show(before: 60, after: 0, type: .YMD) { year, month, day,_,_ in |
| | | textField.text = String(format: "%ld-%02ld-%02ld", year!,month!,day!) |
| | | } |
| | | return false |
| | | } |
| | | func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { |
| | | if textField == tf_birthday{ |
| | | view.endEditing(true) |
| | | CommonDatePickerView.show(before: 60, after: 0, type: .YMD) { year, month, day,_,_ in |
| | | textField.text = String(format: "%ld-%02ld-%02ld", year!,month!,day!) |
| | | } |
| | | return false |
| | | } |
| | | |
| | | if textField == tf_gender{ |
| | | if textField == tf_gender{ |
| | | |
| | | let alertVC = UIAlertController(title: "性别", message: nil, preferredStyle: .actionSheet) |
| | | alertVC.addAction(UIAlertAction(title: "男", style: .default) { _ in |
| | | self.tf_gender.text = "男" |
| | | }) |
| | | let alertVC = UIAlertController(title: "性别", message: nil, preferredStyle: .actionSheet) |
| | | alertVC.addAction(UIAlertAction(title: "男", style: .default) { _ in |
| | | self.tf_gender.text = "男" |
| | | }) |
| | | |
| | | alertVC.addAction(UIAlertAction(title: "女", style: .default) { _ in |
| | | self.tf_gender.text = "女" |
| | | }) |
| | | alertVC.addAction(UIAlertAction(title: "女", style: .default) { _ in |
| | | self.tf_gender.text = "女" |
| | | }) |
| | | |
| | | alertVC.addAction(UIAlertAction(title: "取消", style: .cancel)) |
| | | present(alertVC, animated: true) |
| | | return false |
| | | } |
| | | return true |
| | | } |
| | | alertVC.addAction(UIAlertAction(title: "取消", style: .cancel)) |
| | | present(alertVC, animated: true) |
| | | return false |
| | | } |
| | | return true |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22155" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <device id="retina6_12" orientation="portrait" appearance="light"/> |
| | | <dependencies> |
| | | <deployment identifier="iOS"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22131"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/> |
| | | <capability name="Named colors" minToolsVersion="9.0"/> |
| | | <capability name="Safe area layout guides" minToolsVersion="9.0"/> |
| | | <capability name="System colors in document resources" minToolsVersion="11.0"/> |
| | |
| | | </constraints> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="身份证号" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="JjF-jS-GPH"> |
| | | <rect key="frame" x="14.000000000000004" y="16.666666666666629" width="57.333333333333343" height="17"/> |
| | | <rect key="frame" x="30.000000000000004" y="16.666666666666629" width="57.333333333333343" height="17"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_item_p" translatesAutoresizingMaskIntoConstraints="NO" id="Udv-bd-yGQ"> |
| | | <rect key="frame" x="15" y="19" width="12" height="12"/> |
| | | </imageView> |
| | | <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="请输入运动营成员身份证号" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="LD0-ej-DmH"> |
| | | <rect key="frame" x="120" y="0.0" width="233" height="49.666666666666664"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> |
| | |
| | | <constraint firstItem="LD0-ej-DmH" firstAttribute="top" secondItem="eXg-lM-iFa" secondAttribute="top" id="2K7-zV-OyA"/> |
| | | <constraint firstAttribute="bottom" secondItem="NlW-dD-gIp" secondAttribute="bottom" id="9Mu-Gg-yex"/> |
| | | <constraint firstItem="LD0-ej-DmH" firstAttribute="leading" secondItem="eXg-lM-iFa" secondAttribute="leading" constant="120" id="9U6-rD-Jfd"/> |
| | | <constraint firstItem="JjF-jS-GPH" firstAttribute="leading" secondItem="eXg-lM-iFa" secondAttribute="leading" constant="14" id="IKT-yR-MXN"/> |
| | | <constraint firstItem="JjF-jS-GPH" firstAttribute="centerY" secondItem="Udv-bd-yGQ" secondAttribute="centerY" id="9u5-dT-w12"/> |
| | | <constraint firstItem="JjF-jS-GPH" firstAttribute="leading" secondItem="Udv-bd-yGQ" secondAttribute="trailing" constant="3" id="D3m-eN-BHV"/> |
| | | <constraint firstItem="NlW-dD-gIp" firstAttribute="leading" secondItem="eXg-lM-iFa" secondAttribute="leading" constant="14" id="Qir-9y-1mQ"/> |
| | | <constraint firstAttribute="trailing" secondItem="NlW-dD-gIp" secondAttribute="trailing" constant="14" id="jSc-75-egP"/> |
| | | <constraint firstItem="NlW-dD-gIp" firstAttribute="top" secondItem="LD0-ej-DmH" secondAttribute="bottom" id="mxF-BK-Axi"/> |
| | | <constraint firstAttribute="height" constant="50" id="ngz-MT-wKh"/> |
| | | <constraint firstItem="Udv-bd-yGQ" firstAttribute="leading" secondItem="eXg-lM-iFa" secondAttribute="leading" constant="15" id="vAa-A7-sCK"/> |
| | | <constraint firstItem="JjF-jS-GPH" firstAttribute="centerY" secondItem="eXg-lM-iFa" secondAttribute="centerY" id="xph-Ep-7kc"/> |
| | | </constraints> |
| | | </view> |
| | |
| | | var sort:Int = 0 |
| | | var backgroundImage:String = "" |
| | | var cellHeight:Double = 270 |
| | | var id = 0 |
| | | } |
| | | |
| | | class HomeStoreTopBannerModel:HandyJSON{ |
| | |
| | | struct WorldCupDetailModel:HandyJSON{ |
| | | var address: String = "" |
| | | var age: String = "" |
| | | var cash: Int = 0 |
| | | var cash: Double = 0 |
| | | var classHour: Int = 0 |
| | | var content: String = "" |
| | | var endTime: String = "" |
| | |
| | | |
| | | } |
| | | |
| | | struct WorldCupDetailBannerModel:HandyJSON{ |
| | | var name = "" |
| | | var url = "" |
| | | } |
| | | |
| | | struct WorldCupJudgeModel:HandyJSON{ |
| | | var activeTime: String = "" |
| | | var id: Int = 0 |
| | |
| | | guard SDImageCache.shared.diskImageDataExists(withKey: m.backgroundImage) else { |
| | | SDWebImageDownloader.shared.downloadImage(with: URL(string: m.backgroundImage), options: .useNSURLCache) { _, _,_ in |
| | | } completed: { image, data, error, status in |
| | | |
| | | guard m.backgroundImage.isEmpty else { |
| | | m.cellHeight = 100 |
| | | group.leave() |
| | | return |
| | | } |
| | | |
| | | if let img = image{ |
| | | m.cellHeight = w / (img.size.width / img.size.height) |
| | | }else{ |
| | |
| | | } completed: { image, data, error, status in |
| | | if let img = image{ |
| | | m.cellHeight = w / (img.size.width / img.size.height) |
| | | }else{ |
| | | m.cellHeight = 100 |
| | | } |
| | | group.leave() |
| | | } |
| | |
| | | case .worldcup: |
| | | let vc = WorldCupIntroVC() |
| | | push(vc: vc) |
| | | case .worldcupDetail: |
| | | let vc = WorldCupContentApplyVC(id: m.id) |
| | | push(vc: vc) |
| | | case .course: |
| | | let vc = CourseListVC(selectStore: simpleModel) |
| | | push(vc: vc) |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22155" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <device id="retina6_12" orientation="portrait" appearance="light"/> |
| | | <dependencies> |
| | | <deployment identifier="iOS"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22131"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/> |
| | | <capability name="Safe area layout guides" minToolsVersion="9.0"/> |
| | | <capability name="System colors in document resources" minToolsVersion="11.0"/> |
| | | <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> |
| | |
| | | <constraint firstItem="pid-yy-hW2" firstAttribute="leading" secondItem="WGQ-UH-Uvg" secondAttribute="leading" id="y7p-rN-LaS"/> |
| | | </constraints> |
| | | </view> |
| | | <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="ysy-N3-BCh" customClass="BaseCollectionView" customModule="WanPai" customModuleProvider="target"> |
| | | <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="ysy-N3-BCh" customClass="BaseCollectionView" customModule="WanPai" customModuleProvider="target"> |
| | | <rect key="frame" x="0.0" y="290.33333333333331" width="393" height="527.66666666666674"/> |
| | | <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="Hvc-jj-SAe"> |
| | | <size key="itemSize" width="128" height="128"/> |
| | |
| | | |
| | | override func api() -> (Observable<BaseResponse<[WorldCupListModel]>>)? { |
| | | let deserModel = HomeStoreModel.deserialize(from: UserDefaults.standard.object(forKey: "CurrentStore") as? String) |
| | | return Services.worldCupList(id: deserModel!.storeId, content: search.value, gender: gender.value.id, sort: sort.value, storeId: storeId.value?.id) |
| | | |
| | | var genderID:Int? |
| | | if gender.value.id == 0{ |
| | | genderID = nil |
| | | }else{ |
| | | genderID = gender.value.id |
| | | } |
| | | |
| | | return Services.worldCupList(id: deserModel!.storeId, content: search.value, gender:genderID, sort: sort.value, storeId: storeId.value?.id) |
| | | } |
| | | } |
| | | |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <device id="retina6_12" orientation="portrait" appearance="light"/> |
| | | <dependencies> |
| | | <deployment identifier="iOS"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/> |
| | | <capability name="Named colors" minToolsVersion="9.0"/> |
| | | <capability name="Safe area layout guides" minToolsVersion="9.0"/> |
| | | <capability name="System colors in document resources" minToolsVersion="11.0"/> |
| | |
| | | <subviews> |
| | | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Z7Q-0r-hlk" customClass="QMUIButton"> |
| | | <rect key="frame" x="0.0" y="0.0" width="79" height="52"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" relation="lessThanOrEqual" constant="120" id="ycg-Nq-H9l"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/> |
| | | <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> |
| | | <state key="normal" title="举办城市" image="icon_down_arrow"> |
| | |
| | | </button> |
| | | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="8O9-Hj-qgP" customClass="QMUIButton"> |
| | | <rect key="frame" x="113" y="0.0" width="79" height="52"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" relation="lessThanOrEqual" constant="120" id="ERe-vA-51w"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/> |
| | | <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> |
| | | <state key="normal" title="报名条件" image="icon_down_arrow"> |
| | |
| | | } |
| | | |
| | | @IBAction func completeAction(_ sender: UIButton) { |
| | | // clickClouse!(selectStudents) |
| | | guard selectStudents != nil else { |
| | | alert(msg: "请选择" );return |
| | | } |
| | | clickClouse!(selectStudents!) |
| | | closeAction() |
| | | } |
| | | } |
| | |
| | | |
| | | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "_StudentInfo_2_TCell") as! StudentInfo_2_TCell |
| | | cell.indexPath = indexPath |
| | | cell.activityDetailPartModel = viewModel.dataSource.value[indexPath.row] |
| | | cell.img_radio.isHidden = false |
| | | cell.btn_delete.isHidden = true |
| | | cell.btn_edit.isHidden = true |
| | | |
| | | cell.img_radio.image = UIImage(named: selectStudents?.id == viewModel.dataSource.value[indexPath.row].id ? "btn_select" : "btn_select_u") |
| | | return cell |
| | | } |
| | | } |
| | |
| | | label_state.text = model.status.rawTitle |
| | | label_time.text = "活动时间:\(model.activeTime)" |
| | | label_times.text = "已比赛场次数:\(model.matchNumber)" |
| | | btn_begin.isHidden = model.status == .cancel || model.status == .ongoing |
| | | btn_begin.isHidden = model.status != .ongoing |
| | | } |
| | | |
| | | } |
| | |
| | | private var userNameLabel:UILabel! |
| | | private var numerLabel:UILabel! |
| | | private var radioLabel:UILabel! |
| | | var indexPath:IndexPath! |
| | | |
| | | var model:WorldCupMatchRankModel?{ |
| | | didSet{ |
| | | if let m = model{ |
| | | userNameLabel.text = m.name |
| | | userImg.sd_setImage(with: URL(string: m.avatar)) |
| | | numerLabel.text = "\(m.totalSession)" |
| | | radioLabel.text = "\(m.winRate)%" |
| | | |
| | | rankImg.image = UIImage(named: "rank_\(indexPath.row + 1)") |
| | | switch indexPath.row{ |
| | | case 0...2: |
| | | rankImg.isHidden = false |
| | | rankLabel.text = "" |
| | | default: |
| | | rankImg.isHidden = true |
| | | rankLabel.text = "\(indexPath.row + 1)" |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { |
| | | super.init(style: .default, reuseIdentifier: reuseIdentifier) |
| | |
| | | |
| | | selectionStyle = .none |
| | | |
| | | rankImg = UIImageView(image: UIImage(named: "rank_1")) |
| | | rankImg = UIImageView() |
| | | contentView.addSubview(rankImg) |
| | | rankImg.snp.makeConstraints { make in |
| | | make.left.equalTo(15) |
| | |
| | | } |
| | | |
| | | userNameLabel = UILabel() |
| | | userNameLabel.text = "wang" |
| | | userNameLabel.text = "" |
| | | userNameLabel.font = UIFont.systemFont(ofSize: 14, weight: .medium) |
| | | userNameLabel.textColor = .black |
| | | contentView.addSubview(userNameLabel) |
| | |
| | | override func api() -> (Observable<BaseResponse<[WorldCupJudgeModel]>>)? { |
| | | return Services.worldCupJudgeList(content: content.value, storeId: storeId.value?.id) |
| | | } |
| | | |
| | | } |
| | | |
| | | class JudgeListVC: BaseVC { |
| | |
| | | class MatchDetailVC: BaseVC { |
| | | |
| | | @IBOutlet weak var view_red1: UIView! |
| | | @IBOutlet weak var view_red1Img: UIImageView! |
| | | @IBOutlet weak var view_red2: UIView! |
| | | @IBOutlet weak var view_red2Img: UIImageView! |
| | | @IBOutlet weak var view_red3: UIView! |
| | | @IBOutlet weak var view_red3Img: UIImageView! |
| | | |
| | | @IBOutlet weak var view_blue1: UIView! |
| | | @IBOutlet weak var view_blue1Img: UIImageView! |
| | | @IBOutlet weak var view_blue2: UIView! |
| | | @IBOutlet weak var view_blue2Img: UIImageView! |
| | | @IBOutlet weak var view_blue3: UIView! |
| | | |
| | | @IBOutlet weak var view_blue3Img: UIImageView! |
| | | |
| | | @IBOutlet weak var view_device: UIView! |
| | | @IBOutlet weak var label_deviceTitle: UILabel! |
| | | @IBOutlet weak var label_matchPoint: UILabel! |
| | |
| | | |
| | | @IBAction func deleRedUserAction(_ sender: UIButton) { |
| | | let index = sender.tag - 10 |
| | | redTeamItems.remove(at: index) |
| | | redStackView.arrangedSubviews[index].isHidden = true |
| | | |
| | | if index > redTeamItems.count{ |
| | | redTeamItems.removeLast() |
| | | }else{ |
| | | redTeamItems.remove(at: index) |
| | | } |
| | | if index == 0{ |
| | | view_red1.isHidden = true |
| | | } |
| | | if index == 1{ |
| | | view_red2.isHidden = true |
| | | } |
| | | if index == 2{ |
| | | view_red3.isHidden = true |
| | | } |
| | | |
| | | } |
| | | |
| | | @IBAction func deleBlueUserAction(_ sender: UIButton) { |
| | | let index = sender.tag - 10 |
| | | blueTeamItems.remove(at: index) |
| | | blueStackView.arrangedSubviews[index].isHidden = true |
| | | let index = sender.tag - 20 |
| | | if index > blueTeamItems.count{ |
| | | blueTeamItems.removeLast() |
| | | }else{ |
| | | blueTeamItems.remove(at: index) |
| | | } |
| | | if index == 0{ |
| | | view_blue1.isHidden = true |
| | | } |
| | | if index == 1{ |
| | | view_blue2.isHidden = true |
| | | } |
| | | if index == 2{ |
| | | view_blue3.isHidden = true |
| | | } |
| | | } |
| | | |
| | | private func updateUserView(){ |
| | | for item in redTeamItems { |
| | | for subView in redStackView.arrangedSubviews{ |
| | | if subView.isHidden{ |
| | | if let img = subView.subviews.first as? UIImageView{ |
| | | img.sd_setImage(with: URL(string: item.avatar)) |
| | | subView.isHidden = false |
| | | break |
| | | } |
| | | } |
| | | |
| | | view_red1.isHidden = true |
| | | view_red2.isHidden = true |
| | | view_red3.isHidden = true |
| | | view_blue1.isHidden = true |
| | | view_blue2.isHidden = true |
| | | view_blue3.isHidden = true |
| | | |
| | | for (index,item) in redTeamItems.enumerated() { |
| | | if index == 0{ |
| | | view_red1.isHidden = false |
| | | view_red1Img.sd_setImage(with: URL(string: item.avatar)) |
| | | } |
| | | if index == 1{ |
| | | view_red2.isHidden = false |
| | | view_red2Img.sd_setImage(with: URL(string: item.avatar)) |
| | | } |
| | | |
| | | if index == 2{ |
| | | view_red3.isHidden = false |
| | | view_red3Img.sd_setImage(with: URL(string: item.avatar)) |
| | | } |
| | | } |
| | | |
| | | for item in blueTeamItems { |
| | | for subView in blueStackView.arrangedSubviews{ |
| | | if subView.isHidden{ |
| | | if let img = subView.subviews.first as? UIImageView{ |
| | | img.sd_setImage(with: URL(string: item.avatar)) |
| | | subView.isHidden = false |
| | | break |
| | | } |
| | | } |
| | | for (index,item) in blueTeamItems.enumerated() { |
| | | if index == 0{ |
| | | view_blue1.isHidden = false |
| | | view_blue1Img.sd_setImage(with: URL(string: item.avatar)) |
| | | } |
| | | if index == 1{ |
| | | view_blue2.isHidden = false |
| | | view_blue2Img.sd_setImage(with: URL(string: item.avatar)) |
| | | } |
| | | |
| | | if index == 2{ |
| | | view_blue3.isHidden = false |
| | | view_blue3Img.sd_setImage(with: URL(string: item.avatar)) |
| | | } |
| | | } |
| | | } |
| | |
| | | @IBAction func handleAction(_ sender: UIButton) { |
| | | |
| | | if sender.isSelected{ |
| | | #if !DEBUG |
| | | guard redTeamItems.count == 3 else{alert(msg: "红队人数不足");return} |
| | | guard blueTeamItems.count == 3 else{alert(msg: "蓝队人数不足");return} |
| | | #endif |
| | | guard let devCode = deviceQRCode else{alert(msg: "请扫描设备二维码");return} |
| | | |
| | | struct TempModel:HandyJSON{ |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <device id="retina6_12" orientation="portrait" appearance="light"/> |
| | | <dependencies> |
| | | <deployment identifier="iOS"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/> |
| | | <capability name="Named colors" minToolsVersion="9.0"/> |
| | | <capability name="Safe area layout guides" minToolsVersion="9.0"/> |
| | | <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> |
| | |
| | | <outlet property="redStackView" destination="IM3-iJ-n3i" id="rMz-jS-Vq6"/> |
| | | <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> |
| | | <outlet property="view_blue1" destination="NC1-mI-zKx" id="tlf-qa-Zta"/> |
| | | <outlet property="view_blue1Img" destination="kwN-sM-5Jp" id="963-M8-A7H"/> |
| | | <outlet property="view_blue2" destination="MAY-fE-XVW" id="zXt-hK-2nw"/> |
| | | <outlet property="view_blue2Img" destination="4Ro-YL-VwE" id="I9u-ba-DRO"/> |
| | | <outlet property="view_blue3" destination="Pv2-U4-eh9" id="8Aa-BL-tOr"/> |
| | | <outlet property="view_blue3Img" destination="bcy-TN-a7B" id="uG4-ip-AIs"/> |
| | | <outlet property="view_device" destination="t22-L5-pNm" id="pM5-Hn-UwJ"/> |
| | | <outlet property="view_red1" destination="WaE-Ya-Qah" id="PZx-EF-S91"/> |
| | | <outlet property="view_red1Img" destination="WBK-jh-hgX" id="LMQ-F9-sL9"/> |
| | | <outlet property="view_red2" destination="DL1-JD-042" id="u4s-RH-wK5"/> |
| | | <outlet property="view_red2Img" destination="pDI-vT-Fpd" id="Pf2-kf-y1O"/> |
| | | <outlet property="view_red3" destination="yx0-w9-Zk2" id="PNW-Kh-vZM"/> |
| | | <outlet property="view_red3Img" destination="Duc-CA-hkw" id="6Zs-qv-zxe"/> |
| | | </connections> |
| | | </placeholder> |
| | | <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> |
| | |
| | | self?.items.append("裁判入口") |
| | | self?.func_collectionView.reloadData() |
| | | } |
| | | |
| | | #if DEBUG |
| | | self?.items.append("裁判入口") |
| | | self?.func_collectionView.reloadData() |
| | | #endif |
| | | } |
| | | }) { error in |
| | | |
| | |
| | | } |
| | | |
| | | override var preferredStatusBarStyle: UIStatusBarStyle{ |
| | | return .darkContent |
| | | return .lightContent |
| | | } |
| | | } |
| | | |
| | |
| | | return CGSize(width: JQ_ScreenW, height: JQ_ScreenW * 0.6541) |
| | | } |
| | | } |
| | | |
| | |
| | | @IBOutlet weak var btn_agreement: UIButton! |
| | | @IBOutlet weak var cons_tableHei: NSLayoutConstraint! |
| | | @IBOutlet weak var btn_addStudent: QMUIButton! |
| | | @IBOutlet weak var btn_enroll: UIButton! |
| | | |
| | | |
| | | |
| | |
| | | tableView.register(UINib(nibName: "StudentInfo_2_TCell", bundle: nil), forCellReuseIdentifier: "_StudentInfo_2_TCell") |
| | | } |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "社区世界杯" |
| | | let imgs = detailModel.infoImg.components(separatedBy: ",") |
| | | var items = [CommonBannerModel]() |
| | | for (index,img) in imgs.enumerated(){ |
| | | items.append(CommonBannerModel(index: index,resource: img,mediaType: .imageUrl)) |
| | | } |
| | | bannerView.setItems(items: items) |
| | | var items = [CommonBannerModel]() |
| | | for (index,img) in imgs.enumerated(){ |
| | | items.append(CommonBannerModel(index: index,resource: img,mediaType: .imageUrl)) |
| | | } |
| | | bannerView.setItems(items: items) |
| | | |
| | | btn_moreStore.isHidden = detailModel.storeInfos.count > 1 |
| | | let endDateTimeInterval = Date.jq_StringToTimeInterval(detailModel.registrationClosingTime, "yyyy-MM-dd HH:mm") |
| | | if endDateTimeInterval < Date().timeIntervalSince1970{ |
| | | btn_enroll.setTitle("报名已截止", for: .normal) |
| | | btn_enroll.backgroundColor = .gray.withAlphaComponent(0.5) |
| | | } |
| | | |
| | | label_title.text = detailModel.name |
| | | label_hot.text = "\(detailModel.heat)" |
| | | label_duetime.text = detailModel.registrationClosingTime |
| | | label_starttime.text = detailModel.startTime |
| | | label_endtime.text = detailModel.endTime |
| | | label_ageScope.text = detailModel.age + "岁" |
| | | switch detailModel.gender{ |
| | | case 1:label_genderCond.text = "男" |
| | | case 2:label_genderCond.text = "女" |
| | | default:label_genderCond.text = "全部" |
| | | } |
| | | label_city.text = "" |
| | | label_address.text = detailModel.address |
| | | label_matchPoint.text = detailModel.storeInfos.map({$0.name}).joined(separator: "、") |
| | | label_pay_money.text = "¥\(detailModel.cash)/人" |
| | | label_pay_coin.text = "\(detailModel.paiCoin)币/人" |
| | | label_pay_course.text = "\(detailModel.classHour)课时/人" |
| | | |
| | | } |
| | | btn_moreStore.isHidden = detailModel.storeInfos.count == 1 |
| | | |
| | | label_title.text = detailModel.name |
| | | label_hot.text = "\(detailModel.heat)" |
| | | label_duetime.text = detailModel.registrationClosingTime |
| | | label_starttime.text = detailModel.startTime |
| | | label_endtime.text = detailModel.endTime |
| | | label_ageScope.text = detailModel.age + "岁" |
| | | switch detailModel.gender{ |
| | | case 1:label_genderCond.text = "男" |
| | | case 2:label_genderCond.text = "女" |
| | | default:label_genderCond.text = "全部" |
| | | } |
| | | label_city.text = "" |
| | | label_address.text = detailModel.address |
| | | label_matchPoint.text = detailModel.storeInfos.map({$0.name}).joined(separator: "、") |
| | | |
| | | label_pay_money.text = detailModel.cash == 0 ? "免费":"¥\(detailModel.cash)/人" |
| | | label_pay_coin.text = detailModel.paiCoin == 0 ? "免费":"\(detailModel.paiCoin)币/人" |
| | | label_pay_course.text = detailModel.classHour == 0 ? "免费":"\(detailModel.classHour)课时/人" |
| | | |
| | | } |
| | | |
| | | override func setRx() { |
| | | tableView.rx.observe(CGSize.self, "contentSize").subscribe(onNext: {[weak self] size in |
| | |
| | | sender.isSelected = !sender.isSelected |
| | | |
| | | } |
| | | |
| | | |
| | | @IBAction func webAction(_ sender: Any) { |
| | | let webVC = CommonWebVC(type: .matchStore,customTitle: "社区世界杯报名协议") |
| | | push(vc: webVC) |
| | |
| | | for v in weakSelf.students{ |
| | | result.append(["id":v.id,"isStudent":v.isStudent]) |
| | | } |
| | | Services.worldCupPaymentCheck(id: weakSelf.detailModel.id, ids: result.jq_toJson1(), uid: nil).subscribe(onNext: {data in |
| | | if let model = data.data{ |
| | | |
| | | var money:Double? |
| | | var paiCoin:Int? |
| | | var classHour:Int? |
| | | var money:Double = 0 |
| | | var paiCoin:Int = 0 |
| | | var classHour:Int = 0 |
| | | |
| | | money = weakSelf.detailModel.cash.double |
| | | money = weakSelf.detailModel.cash |
| | | paiCoin = weakSelf.detailModel.paiCoin |
| | | classHour = weakSelf.detailModel.classHour |
| | | |
| | | if model.paiCoin == 1{ |
| | | paiCoin = weakSelf.detailModel.paiCoin |
| | | } |
| | | |
| | | if model.classHour == 1{ |
| | | classHour = weakSelf.detailModel.classHour |
| | | } |
| | | PaymentView.show(enumType: .worldCup, money: (ali: money, wx: money, coin: paiCoin, course:classHour, integral: nil)) {[weak self] payType in |
| | | guard let weakSelf = self else { return } |
| | | Services.worldCupPayment(id: weakSelf.detailModel.id, ids: result.jq_toJson1(), payType: payType, uid: nil).subscribe(onNext: {data in |
| | | if let m = data.data{ |
| | | switch payType { |
| | | case .aliPay: |
| | | YYPaymentManager.shared.sendPaymentRequest(YYAlipayRequest(orderString: m.orderString)) { result in |
| | | switch result { |
| | | case .success: |
| | | let vc = PaymentResultVC(result: .success, objType: .worldCup) |
| | | self?.push(vc: vc) |
| | | case .cancel: |
| | | alert(msg: "交易取消") |
| | | case .failure(_): |
| | | let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .worldCup) |
| | | self?.push(vc: vc) |
| | | } |
| | | } |
| | | case .coin,.free: |
| | | let vc = PaymentResultVC(result: .success, objType: .worldCup) |
| | | self?.push(vc: vc) |
| | | case .courseNum: |
| | | let vc = PaymentResultVC(result: .success, objType: .worldCup) |
| | | self?.push(vc: vc) |
| | | default:break |
| | | } |
| | | } |
| | | },onError: { error in |
| | | if let er = error as? NetworkRequest.NetRequestError{ |
| | | switch er { |
| | | case .Other(let code,let string): |
| | | let vc = PaymentResultVC(result: .fail(string,code), objType: .worldCup) |
| | | JQ_currentViewController().jq_push(vc: vc) |
| | | default: |
| | | let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .worldCup) |
| | | JQ_currentViewController().jq_push(vc: vc) |
| | | } |
| | | } |
| | | }).disposed(by: weakSelf.disposeBag) |
| | | } |
| | | if money == 0 && paiCoin == 0 && classHour == 0{ |
| | | weakSelf.payment(payType: .free, result: result) |
| | | }else{ |
| | | PaymentView.show(enumType: .worldCup, money: (ali: money, wx: money, coin: paiCoin, course:classHour, integral: nil)) {[weak self] payType in |
| | | guard let weakSelf = self else { return } |
| | | weakSelf.payment(payType: payType, result: result) |
| | | } |
| | | }).disposed(by: weakSelf.disposeBag) |
| | | |
| | | |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | private func payment(payType:PayType,result:[Dictionary<String,Int>]){ |
| | | Services.worldCupPayment(id: detailModel.id, ids: result.jq_toJson1(), payType: payType, uid: nil).subscribe(onNext: {[weak self]data in |
| | | if let m = data.data{ |
| | | switch payType { |
| | | case .aliPay: |
| | | YYPaymentManager.shared.sendPaymentRequest(YYAlipayRequest(orderString: m.orderString)) { result in |
| | | switch result { |
| | | case .success: |
| | | let vc = PaymentResultVC(result: .success, objType: .worldCup) |
| | | self?.push(vc: vc) |
| | | case .cancel: |
| | | alert(msg: "交易取消") |
| | | case .failure(_): |
| | | let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .worldCup) |
| | | self?.push(vc: vc) |
| | | } |
| | | } |
| | | case .coin,.free: |
| | | let vc = PaymentResultVC(result: .success, objType: .worldCup) |
| | | self?.push(vc: vc) |
| | | case .courseNum: |
| | | let vc = PaymentResultVC(result: .success, objType: .worldCup) |
| | | self?.push(vc: vc) |
| | | default:break |
| | | } |
| | | } |
| | | },onError: { error in |
| | | if let er = error as? NetworkRequest.NetRequestError{ |
| | | switch er { |
| | | case .Other(let code,let string): |
| | | let vc = PaymentResultVC(result: .fail(string,code), objType: .worldCup) |
| | | JQ_currentViewController().jq_push(vc: vc) |
| | | default: |
| | | let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .worldCup) |
| | | JQ_currentViewController().jq_push(vc: vc) |
| | | } |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <device id="retina6_12" orientation="portrait" appearance="light"/> |
| | | <dependencies> |
| | | <deployment identifier="iOS"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/> |
| | | <capability name="Named colors" minToolsVersion="9.0"/> |
| | | <capability name="Safe area layout guides" minToolsVersion="9.0"/> |
| | | <capability name="System colors in document resources" minToolsVersion="11.0"/> |
| | |
| | | <connections> |
| | | <outlet property="btn_addStudent" destination="J6G-ci-uFv" id="NWF-LA-tm8"/> |
| | | <outlet property="btn_agreement" destination="q5y-in-bNV" id="dA7-bY-ILw"/> |
| | | <outlet property="btn_enroll" destination="kdj-bD-RIR" id="FnQ-m9-e5f"/> |
| | | <outlet property="btn_moreStore" destination="AgA-ET-N0O" id="u3j-bV-RNv"/> |
| | | <outlet property="cons_tableHei" destination="7Nj-Ch-Bss" id="g2d-CY-NCq"/> |
| | | <outlet property="label_address" destination="Mmh-IM-z9o" id="hJU-oa-HZD"/> |
| | |
| | | @IBOutlet weak var webView: WKWebView! |
| | | @IBOutlet weak var cons_webHei: NSLayoutConstraint! |
| | | @IBOutlet weak var btn_moreStore: UIButton! |
| | | @IBOutlet weak var btn_enroll: UIButton! |
| | | |
| | | private var detailModel:WorldCupDetailModel? |
| | | |
| | |
| | | } |
| | | self?.bannerView.setItems(items: items) |
| | | |
| | | self?.btn_moreStore.isHidden = model.storeInfos.count > 1 |
| | | self?.btn_moreStore.isHidden = model.storeInfos.count == 1 |
| | | |
| | | self?.label_title.text = model.name |
| | | self?.label_hot.text = "\(model.heat)" |
| | |
| | | self?.label_city.text = "" |
| | | self?.label_address.text = model.address |
| | | self?.label_matchPoint.text = model.storeInfos.map({$0.name}).joined(separator: "、") |
| | | self?.label_pay_money.text = "¥\(model.cash)/人" |
| | | self?.label_pay_coin.text = "\(model.paiCoin)币/人" |
| | | self?.label_pay_course.text = "\(model.classHour)课时/人" |
| | | |
| | | if model.cash == 0{ |
| | | self?.label_pay_money.text = "免费" |
| | | }else{ |
| | | self?.label_pay_money.text = "¥\(model.cash)/人" |
| | | } |
| | | |
| | | if model.paiCoin == 0{ |
| | | self?.label_pay_coin.text = "免费" |
| | | }else{ |
| | | self?.label_pay_coin.text = "\(model.paiCoin)币/人" |
| | | } |
| | | |
| | | if model.classHour == 0{ |
| | | self?.label_pay_coin.text = "免费" |
| | | }else{ |
| | | self?.label_pay_course.text = "\(model.classHour)课时/人" |
| | | } |
| | | |
| | | self?.label_desc.text = model.intro |
| | | |
| | | self?.webView.loadHTMLString(model.content.jq_wrapHtml(), baseURL: nil) |
| | | |
| | | let endDateTimeInterval = Date.jq_StringToTimeInterval(model.registrationClosingTime, "yyyy-MM-dd HH:mm") |
| | | if endDateTimeInterval < Date().timeIntervalSince1970{ |
| | | self?.btn_enroll.setTitle("报名已截止", for: .normal) |
| | | self?.btn_enroll.backgroundColor = .gray.withAlphaComponent(0.5) |
| | | } |
| | | |
| | | self?.detailModel = model |
| | | } |
| | | }).disposed(by: disposeBag) |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <device id="retina6_12" orientation="portrait" appearance="light"/> |
| | | <dependencies> |
| | | <deployment identifier="iOS"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/> |
| | | <capability name="Named colors" minToolsVersion="9.0"/> |
| | | <capability name="Safe area layout guides" minToolsVersion="9.0"/> |
| | | <capability name="System colors in document resources" minToolsVersion="11.0"/> |
| | |
| | | <objects> |
| | | <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="WorldCupContentApplyVC" customModule="WanPai" customModuleProvider="target"> |
| | | <connections> |
| | | <outlet property="btn_enroll" destination="3aZ-G8-j6f" id="hd5-No-xwO"/> |
| | | <outlet property="btn_moreStore" destination="8A3-ba-Lfp" id="gNd-9Y-tYk"/> |
| | | <outlet property="cons_webHei" destination="mZW-Bo-YeJ" id="jsg-oq-zAd"/> |
| | | <outlet property="label_address" destination="5zE-II-xtR" id="bgD-gj-Q7I"/> |
| | |
| | | @IBOutlet weak var webView: WKWebView! |
| | | @IBOutlet weak var cons_webHei: NSLayoutConstraint! |
| | | @IBOutlet weak var cons__cancelBtnHei: NSLayoutConstraint! |
| | | @IBOutlet weak var btn_enroll: UIButton! |
| | | |
| | | private var id:Int! |
| | | private lazy var bannerView:CommonBannerView = { |
| | |
| | | self?.label_address.text = model.address |
| | | self?.label_city.text = "" |
| | | self?.label_matchStore.text = model.storeInfos.map({$0.name}).joined(separator: "、") |
| | | self?.btn_moreMatchStore.isHidden = model.storeInfos.count > 1 |
| | | self?.btn_moreMatchStore.isHidden = model.storeInfos.count == 1 |
| | | self?.tableView.reloadData() |
| | | self?.webView.loadHTMLString(model.content.jq_wrapHtml(), baseURL: nil) |
| | | self?.btn_cancel.isHidden = model.revocable == 0 |
| | | self?.cons__cancelBtnHei.constant = model.revocable == 0 ? 0:40 |
| | | |
| | | let endDateTimeInterval = Date.jq_StringToTimeInterval(model.registrationClosingTime, "yyyy-MM-dd HH:mm") |
| | | if endDateTimeInterval < Date().timeIntervalSince1970{ |
| | | self?.btn_enroll.setTitle("报名已截止", for: .normal) |
| | | self?.btn_enroll.backgroundColor = .gray.withAlphaComponent(0.5) |
| | | } |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <device id="retina6_12" orientation="portrait" appearance="light"/> |
| | | <dependencies> |
| | | <deployment identifier="iOS"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/> |
| | | <capability name="Named colors" minToolsVersion="9.0"/> |
| | | <capability name="Safe area layout guides" minToolsVersion="9.0"/> |
| | | <capability name="System colors in document resources" minToolsVersion="11.0"/> |
| | |
| | | <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="WorldCupContentDetailVC" customModule="WanPai" customModuleProvider="target"> |
| | | <connections> |
| | | <outlet property="btn_cancel" destination="Gkg-tn-WFH" id="u4S-QZ-qFa"/> |
| | | <outlet property="btn_enroll" destination="Gkg-tn-WFH" id="dHR-xr-fFS"/> |
| | | <outlet property="btn_moreMatchStore" destination="tjO-5y-Kg9" id="twv-r8-wNh"/> |
| | | <outlet property="cons__cancelBtnHei" destination="y3u-8o-eMw" id="eWN-fY-L44"/> |
| | | <outlet property="cons_tableHei" destination="HCn-5Z-SAr" id="JPW-ED-7vP"/> |
| | |
| | | } |
| | | |
| | | class WorldCupContentVC: BaseVC { |
| | | var currentPartModel:ActivityDetailPartModel? |
| | | |
| | | // var currentPartModel:ActivityDetailPartModel? |
| | | var partModel:BehaviorRelay<ActivityDetailPartModel?>? |
| | | var superScrollView:UIScrollView? |
| | | private var viewModel = WorldCupContentViewModel() |
| | | |
| | | private var tableView:UITableView! |
| | | private(set) var tableView:UITableView! |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | view.backgroundColor = .clear |
| | |
| | | |
| | | viewModel.configure(tableView) |
| | | |
| | | if let m = currentPartModel{ |
| | | viewModel.studentID.accept(m.id) |
| | | viewModel.isStudent.accept(m.isStudent) |
| | | viewModel.beginRefresh() |
| | | } |
| | | // if let m = currentPartModel{ |
| | | // viewModel.studentID.accept(m.id) |
| | | // viewModel.isStudent.accept(m.isStudent) |
| | | // viewModel.beginRefresh() |
| | | // } |
| | | |
| | | // tableView.panGestureRecognizer.delegate = self |
| | | } |
| | | |
| | | override func setRx() { |
| | | partModel?.subscribe(onNext: {[weak self] model in |
| | | if let m = model{ |
| | | self?.viewModel.studentID.accept(m.id) |
| | | self?.viewModel.isStudent.accept(m.isStudent) |
| | | self?.viewModel.beginRefresh() |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | } |
| | | |
| | | extension WorldCupContentVC:UIScrollViewDelegate{ |
| | | |
| | | func scrollViewDidScroll(_ scrollView: UIScrollView) { |
| | | let off = superScrollView!.contentOffset.y + scrollView.contentOffset.y |
| | | superScrollView!.contentOffset.y = max(0,min(350,off)) |
| | | } |
| | | } |
| | | |
| | |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "_WorldCupTCell") as! WorldCupTCell |
| | | cell.backgroundColor = .clear |
| | | cell.setWorldCupListModel(model) |
| | | cell.label_state.text = viewModel.state.value == 2 ? "未开始":"进行中" |
| | | cell.label_state.text = viewModel.state.value == 2 ? "进行中":"未开始" |
| | | return cell |
| | | } |
| | | |
| | |
| | | import UIKit |
| | | import QMUIKit |
| | | import JQTools |
| | | import RxRelay |
| | | |
| | | class WorldCupHeaderVC: BaseVC { |
| | | |
| | |
| | | @IBOutlet weak var label_loseNum: UILabel! |
| | | @IBOutlet weak var label_winRate: UILabel! |
| | | |
| | | var currentPartModel:ActivityDetailPartModel?{ |
| | | didSet{ |
| | | if let m = currentPartModel{ |
| | | label_name.text = m.name |
| | | if let qrCode = WorldCupUserInfoQRCodel(id: m.id, isStudent: m.isStudent).toJSONString(){ |
| | | img_QR.image = UIImage.jq_GenerateQRCode(with: "\(qrCode)", width: 76) |
| | | } |
| | | getData(id: m.id, isStudent: m.isStudent) |
| | | } |
| | | // var currentPartModel:ActivityDetailPartModel?{ |
| | | // didSet{ |
| | | // if let m = currentPartModel{ |
| | | // label_name.text = m.name |
| | | // if let qrCode = WorldCupUserInfoQRCodel(id: m.id, isStudent: m.isStudent).toJSONString(){ |
| | | // img_QR.image = UIImage.jq_GenerateQRCode(with: "\(qrCode)", width: 76) |
| | | // } |
| | | // getData(id: m.id, isStudent: m.isStudent) |
| | | // } |
| | | // |
| | | // } |
| | | // } |
| | | |
| | | } |
| | | } |
| | | var partModel:BehaviorRelay<ActivityDetailPartModel?>? |
| | | |
| | | var partModels = [ActivityDetailPartModel](){ |
| | | didSet{ |
| | | btn_exchange.isHidden = partModels.count <= 1 |
| | |
| | | |
| | | setProvince(rank: 0) |
| | | setCity(cityName: "", rank: 0) |
| | | } |
| | | |
| | | override func setRx() { |
| | | partModel?.subscribe(onNext: {[weak self]model in |
| | | if let m = model{ |
| | | self?.label_name.text = m.name |
| | | if let qrCode = WorldCupUserInfoQRCodel(id: m.id, isStudent: m.isStudent).toJSONString(){ |
| | | self?.img_QR.image = UIImage.jq_GenerateQRCode(with: "\(qrCode)", width: 76) |
| | | } |
| | | self?.getData(id: m.id, isStudent: m.isStudent) |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | private func getData(id:Int,isStudent:Int){ |
| | |
| | | |
| | | @IBAction func exchangeAction(_ sender: Any) { |
| | | |
| | | StudentChoose2View.show { items in |
| | | |
| | | StudentChoose2View.show {[weak self] item in |
| | | self?.partModel?.accept(item) |
| | | } |
| | | } |
| | | } |
| | |
| | | class WorldCupRankVC: BaseVC { |
| | | |
| | | private var viewModel = WorldCupRankViewModel() |
| | | var currentPartModel:ActivityDetailPartModel? |
| | | var partModel:BehaviorRelay<ActivityDetailPartModel?>? |
| | | private var worldCupRankModel:WorldCupRankModel? |
| | | private let cityBtn = UIButton(type: .custom) |
| | | private let yearBtn = QMUIButton(type: .custom) |
| | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | view.backgroundColor = .clear |
| | | if let model = currentPartModel{ |
| | | viewModel.id.accept(model.id) |
| | | viewModel.isStudent.accept(model.isStudent) |
| | | Services.getEntrantRank(id: model.id, isStudent: model.isStudent).subscribe(onNext: {[weak self] data in |
| | | if let model = data.data{ |
| | | self?.worldCupRankModel = model |
| | | self?.cityBtn.setTitle(model.cityName, for: .normal) |
| | | self?.cityBtn.layoutIfNeeded() |
| | | self?.cityBtn.layoutSubviews() |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | // if let model = currentPartModel{ |
| | | // viewModel.id.accept(model.id) |
| | | // viewModel.isStudent.accept(model.isStudent) |
| | | // Services.getEntrantRank(id: model.id, isStudent: model.isStudent).subscribe(onNext: {[weak self] data in |
| | | // if let model = data.data{ |
| | | // self?.worldCupRankModel = model |
| | | // self?.cityBtn.setTitle(model.cityName, for: .normal) |
| | | // self?.cityBtn.layoutIfNeeded() |
| | | // self?.cityBtn.layoutSubviews() |
| | | // } |
| | | // }).disposed(by: disposeBag) |
| | | // } |
| | | } |
| | | |
| | | override func setUI() { |
| | |
| | | stackView.addArrangedSubview(provinceBtn) |
| | | stackView.addArrangedSubview(cityBtn) |
| | | |
| | | viewModel.configure(tableView) |
| | | viewModel.configure(tableView,needMore: false) |
| | | viewModel.beginRefresh() |
| | | } |
| | | |
| | | override func setRx() { |
| | | partModel?.subscribe(onNext: {[weak self] model in |
| | | guard let weakSelf = self else { return } |
| | | if let m = model{ |
| | | self?.viewModel.id.accept(m.id) |
| | | self?.viewModel.isStudent.accept(m.isStudent) |
| | | |
| | | Services.getEntrantRank(id: m.id, isStudent: m.isStudent).subscribe(onNext: {[weak self] data in |
| | | if let model = data.data{ |
| | | self?.worldCupRankModel = model |
| | | self?.cityBtn.setTitle(model.cityName, for: .normal) |
| | | self?.cityBtn.layoutIfNeeded() |
| | | self?.cityBtn.layoutSubviews() |
| | | } |
| | | }).disposed(by: weakSelf.disposeBag) |
| | | } |
| | | |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | @objc func radiusAction(btn:UIButton){ |
| | |
| | | return cell! |
| | | } |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "rankTCell") as! WorldCupRankTCell |
| | | cell.indexPath = indexPath |
| | | cell.model = viewModel.dataSource.value[indexPath.row] |
| | | cell.addLine(UIColor(hexStr: "#E1E1E1"), false, true, false, true, 0.4) |
| | | return cell |
| | | } |
| | |
| | | |
| | | class WorldCupRecordVC: BaseVC { |
| | | |
| | | private var tableView:UITableView! |
| | | private(set) var tableView:UITableView! |
| | | private var viewModel = WorldCupRecordViewModel() |
| | | var partModel:BehaviorRelay<ActivityDetailPartModel?>? |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | view.backgroundColor = .clear |
| | |
| | | viewModel.configure(tableView) |
| | | viewModel.beginRefresh() |
| | | } |
| | | |
| | | override func setRx() { |
| | | partModel?.subscribe(onNext: {[weak self]model in |
| | | if let m = model{ |
| | | self?.viewModel.studentId.accept(m.id) |
| | | self?.viewModel.isStudent.accept(m.isStudent) |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | } |
| | | |
| | | extension WorldCupRecordVC:UITableViewDelegate,UITableViewDataSource{ |
| | |
| | | import SPPageMenu |
| | | import FFPage |
| | | import JQTools |
| | | |
| | | import RxSwift |
| | | import RxRelay |
| | | import RxCocoa |
| | | import RxDataSources |
| | | import ReplayKit |
| | | |
| | | class WorldCupVC: BaseVC { |
| | | |
| | | private var partModels = [ActivityDetailPartModel](){ |
| | | didSet{ |
| | | currentPartModel = partModels.first |
| | | } |
| | | } |
| | | |
| | | private var currentPartModel:ActivityDetailPartModel?{ |
| | | didSet{ |
| | | headerVC.currentPartModel = currentPartModel |
| | | pageVC.reloadData() |
| | | } |
| | | } |
| | | private var partModels = [ActivityDetailPartModel]() |
| | | private var partModel = BehaviorRelay<ActivityDetailPartModel?>(value:nil) |
| | | |
| | | lazy var headerVC:WorldCupHeaderVC = { |
| | | let vc = WorldCupHeaderVC() |
| | | vc.partModel = partModel |
| | | return vc |
| | | }() |
| | | |
| | |
| | | vc.headViewController = headerVC |
| | | vc.menuViewController = menuVC |
| | | vc.pageViewController = pageVC |
| | | vc.style = .headRefresh |
| | | vc.headHeight = 350 |
| | | vc.menuHeight = 50 |
| | | vc.style = .subRefresh |
| | |
| | | } |
| | | |
| | | menuVC.pageMenu.delegate = self |
| | | |
| | | Services.getParticipant().subscribe(onNext: {[weak self ]data in |
| | | if let items = data.data{ |
| | | guard let weakSelf = self else { return } |
| | | weakSelf.partModels = items |
| | | weakSelf.headerVC.partModels = items |
| | | weakSelf.partModel.accept(items.first) |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | |
| | | headerVC.partModel = partModel |
| | | } |
| | | |
| | | override func setUI() { |
| | | |
| | | } |
| | | |
| | | override func setRx() { |
| | | // partModel.subscribe(onNext: { data in |
| | | // |
| | | // |
| | | // }).disposed(by: disposeBag) |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | func pageViewController(_ pageViewConteoller: FFPageViewController, controllerForPage page: Int) -> UIViewController { |
| | | if page <= 1{ |
| | | let contentVC = WorldCupContentVC(state:page + 1) |
| | | contentVC.currentPartModel = currentPartModel |
| | | var state = 1 |
| | | if page == 0{ |
| | | state = 2 |
| | | } |
| | | let contentVC = WorldCupContentVC(state:state) |
| | | contentVC.superScrollView = adapterVC.scrollview |
| | | contentVC.partModel = partModel |
| | | return contentVC |
| | | }else if page == 2{ |
| | | return WorldCupRecordVC() |
| | | let vc = WorldCupRecordVC() |
| | | vc.partModel = partModel |
| | | return vc |
| | | }else{ |
| | | let vc = WorldCupRankVC() |
| | | vc.currentPartModel = currentPartModel |
| | | vc.partModel = partModel |
| | | return vc |
| | | } |
| | | } |
| | |
| | | |
| | | @objc func jumpAction(){ |
| | | if let m = model{ |
| | | jumpPage(model: m.model, page: m.page, type: m.type, id: m.id) |
| | | jumpPage(model: m.model, page: m.page, type: m.type, id: m.turnId) |
| | | } |
| | | |
| | | } |