| | |
| | | "scale" : "1x" |
| | | }, |
| | | { |
| | | "filename" : "bg_worldCup@2x.png", |
| | | "filename" : "底图@2x@2x.png", |
| | | "idiom" : "universal", |
| | | "scale" : "2x" |
| | | }, |
| | | { |
| | | "filename" : "bg_worldCup@3x.png", |
| | | "filename" : "底图@2x@3x.png", |
| | | "idiom" : "universal", |
| | | "scale" : "3x" |
| | | } |
| | |
| | | private var lucencyVCs = [RechargeRecordVC.self,RechargeCenterVC.self] |
| | | |
| | | /// 世界杯风格 |
| | | private var worldCupVCs = [SearchVC.self,WorldCupVC.self,WorldCupHeaderVC.self,WorldCupMenuVC.self,WorldCupContentVC.self,WorldCupRecordVC.self,WorldCupRankVC.self] |
| | | private var worldCupVCs = [SearchVC.self,WorldCupVC.self,WorldCupHeaderVC.self,WorldCupMenuVC.self,WorldCupContentVC.self,WorldCupRecordVC.self,WorldCupRankVC.self,WorldCupListVC.self,WorldCupContentApplyVC.self,WorldCupContentApplyInputVC.self,WorldCupContentDetailVC.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) |
| | | |
| | |
| | | init(type:AgreentType,customTitle:String? = nil,content:String? = nil,needBackBtn:Bool = false) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.type = type |
| | | self.customTitle = customTitle |
| | | self.content = content |
| | | self.needBackBtn = needBackBtn |
| | | } |
| | |
| | | } |
| | | |
| | | Services.queryProtocol(type,progress: false).subscribe(onNext: {[weak self] result in |
| | | if let text = result.data?.jq_wrapHtml(){ |
| | | if let text = result.data?.jq_wrapHtml(edge: .init(top: 5, left:0, bottom: 0, right: 0)){ |
| | | self?.webView.loadHTMLString(text, baseURL: nil) |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | }else{ |
| | | webView.loadHTMLString(content?.jq_wrapHtml() ?? "", baseURL: nil) |
| | | webView.loadHTMLString(content?.jq_wrapHtml(edge: .init(top: 5, left: 0, bottom: 0, right: 0)) ?? "", baseURL: nil) |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { |
| | | |
| | | let js = """ |
| | | document.createElement('meta');script.name = 'viewport';script.content=\"width=device-width, initial-scale=1.0,maximum-scale=1.0, minimum-scale=1.0, user-scalable=no\";document.getElementsByTagName('head')[0].appendChild(script);var style = document.createElement('style');style.type='text/css';style.innerHTML='body{width:100%;height:auto;margin:auto;background-color:#ffffff}img{max-width:100%}p{word-wrap: break-word;color: #222;list-style-position: inside;list-style-type: square;margin-top: 17px;font-size: 18px;line-height: 1.76;border: none;outline: none;display: block;margin-block-start: 1em;margin-block-end: 1em;margin-inline-start: 0px;margin-inline-end: 0px;} p img {margin-bottom: -9px}';document.body.appendChild(style); |
| | | """ |
| | | webView.evaluateJavaScript(js) |
| | | |
| | | switch type { |
| | | case .user,.safe,.privacy: |
| | | view_btns.isHidden = false |
| | |
| | | switch self { |
| | | case .club:return "COURSE" |
| | | case .sport:return "EVENTS" |
| | | case .communtiy:return "ON_LINE" |
| | | case .communtiy:return "KING" |
| | | case .deepPlayer:return "APPOINTMENT" |
| | | case .winner:return "TRIUMPH" |
| | | case .counter:return "FIGHTING" |
| | |
| | | |
| | | mentals.append(MentalInfo(img: UIImage(named: "icon_coupon_1"), t1: "COURSE", t2: "俱乐部之星")) |
| | | mentals.append(MentalInfo(img: UIImage(named: "icon_coupon_2"), t1: "EVENTS", t2: "运动大人")) |
| | | mentals.append(MentalInfo(img: UIImage(named: "icon_coupon_3"), t1: "ON_LINE", t2: "社区之王")) |
| | | mentals.append(MentalInfo(img: UIImage(named: "icon_coupon_3"), t1: "KING", t2: "社区之王")) |
| | | mentals.append(MentalInfo(img: UIImage(named: "icon_coupon_4"), t1: "APPOINTMENT", t2: "深度玩家")) |
| | | mentals.append(MentalInfo(img: UIImage(named: "icon_coupon_5"), t1: "EVENTS", t2: "月度冠军")) |
| | | mentals.append(MentalInfo(img: UIImage(named: "icon_coupon_6"), t1: "MORE", t2: "更多"))*/ |
| | |
| | | var sign = "" |
| | | var timestamp:TimeInterval = 0 |
| | | |
| | | var isStaff:Bool{ |
| | | return orderString.isEmpty && returnId == 0 && siteBooking == 0 && appid.isEmpty && noncestr.isEmpty && package.isEmpty && partnerid.isEmpty && prepayid.isEmpty && sign.isEmpty && timestamp == 0 |
| | | } |
| | | |
| | | } |
| | | |
| | | struct StoreWalfareModel:HandyJSON{ |
| | |
| | | var commodityName: String = "" |
| | | var commodityPrice: Double = 0 |
| | | var goodsType:ExchangeType = .goods |
| | | var integral:Int = 0 //支付积分 |
| | | var redemptionMethod:Int = 0 //兑换方式(1=积分,2=积分+现金) |
| | | } |
| | | |
| | | struct BillingModel:HandyJSON{ |
| | |
| | | var playCoin = 0 |
| | | var video = "" |
| | | var intro = "" |
| | | var gameType = 1 //1:普通游戏,2:世界杯 |
| | | } |
| | | |
| | | struct DoorModel:HandyJSON{ |
| | |
| | | import JQTools |
| | | |
| | | #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://221.182.45.100:56666" |
| | | let All_Url = "http://8.137.22.229:56666" |
| | | let Game_Url = "https://try.daowepark.com" |
| | | //let Socket_Url = "192.168.110.22" |
| | | #else |
| | | let All_Url = "http://8.137.22.229:56666" //正式地址 |
| | | let Game_Url = "https://port.daowepark.com"//正式地址 |
| | | //let Game_Url = "https://try.daowepark.com" //测试地址 |
| | | //let Game_Url = "https://port.daowepark.com"//正式地址 |
| | | let Game_Url = "https://try.daowepark.com" |
| | | |
| | | //let Socket_Url = "192.168.110.22" |
| | | #endif |
| | |
| | | } |
| | | |
| | | //支付游戏 |
| | | class func payGame(configId:Int,gameId:Int,spaceId:Int,sutuId:Int,type:PayType)->Observable<BaseResponse<PaymentModel>>{ |
| | | class func payGame(configId:Int,gameId:Int,spaceId:Int,sutuId:Int,type:PayType,gameType:Int)->Observable<BaseResponse<PaymentModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/api/game/payGame") |
| | | .append(key: "configId", value: configId) |
| | |
| | | .append(key: "spaceId", value: spaceId) |
| | | .append(key: "sutuId", value: sutuId) |
| | | .append(key: "type", value: type.rawValue) |
| | | .append(key: "gameType", value: gameType) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | |
| | | tf_gender.delegate = self |
| | | } |
| | | |
| | | // override func setRx() { |
| | | // tf_idCard.rx.text.orEmpty.subscribe(onNext: { text in |
| | | // if text.count == 18{ |
| | | // print("---->") |
| | | // } |
| | | // }).disposed(by: disposeBag) |
| | | // } |
| | | |
| | | @objc func userImgUploadAction(){ |
| | | JQ_ImagePickerTool.getSharedInstance().singleImage({ [weak self] image in |
| | | self?.img_profile.image = image |
| | |
| | | |
| | | viewModel.configure(tableView) |
| | | viewModel.beginRefresh() |
| | | viewModel.classificationId.accept(classificationId!) |
| | | |
| | | // tableView.jq_setEmptyView() |
| | | |
| | | } |
| | | |
| | | init(classificationId:Int) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.classificationId = classificationId |
| | | viewModel.classificationId.accept(classificationId) |
| | | } |
| | | |
| | | |
| | |
| | | case .club: |
| | | self?.items.append(MentalInfo(icon: UIImage(named: "icon_coupon_1"), l1: "COURSE", l2: model.medalName, level: model.levelNum, info: String(format: "再上课打卡%@次可升级LV%ld", model.upgradeConditions,model.nextLevel), btnName: "去预约",medalType: model.medalType,isTopLevel: model.isTopLevel)) |
| | | case .communtiy: |
| | | self?.items.append(MentalInfo(icon: UIImage(named: "icon_coupon_3"), l1: "ON_LINE", l2: model.medalName, level: model.levelNum, info: String(format: "再预约场地%@次可升级LV%ld", model.upgradeConditions,model.nextLevel), btnName: "去预约",medalType: model.medalType,isTopLevel: model.isTopLevel)) |
| | | self?.items.append(MentalInfo(icon: UIImage(named: "icon_coupon_3"), l1: "KING", l2: model.medalName, level: model.levelNum, info: String(format: "再预约场地%@次可升级LV%ld", model.upgradeConditions,model.nextLevel), btnName: "去预约",medalType: model.medalType,isTopLevel: model.isTopLevel)) |
| | | case .deepPlayer: |
| | | self?.items.append(MentalInfo(icon: UIImage(named: "icon_coupon_4"), l1: "APPOINTMENT", l2: model.medalName, level: model.levelNum, info: String(format: "再完成课后练习%@次可升级LV%ld", model.upgradeConditions,model.nextLevel), btnName: "去完成",medalType: model.medalType,isTopLevel: model.isTopLevel)) |
| | | case .sport: |
| | |
| | | guard let weakSelf = self else { return } |
| | | PaymentView.show(enumType:.game,money: (ali: weakSelf.gameListModel.cash, wx: weakSelf.gameListModel.cash, coin: weakSelf.gameListModel.playCoin, course: nil,integral:weakSelf.gameListModel.integral)) { [weak self] payType in |
| | | guard let weakSelf = self else { return } |
| | | Services.payGame(configId: weakSelf.gameListModel.id, gameId: weakSelf.gameListModel.gameId, spaceId: weakSelf.storeId, sutuId: weakSelf.sutuId, type: payType).subscribe(onNext: {data in |
| | | Services.payGame(configId: weakSelf.gameListModel.id, gameId: weakSelf.gameListModel.gameId, spaceId: weakSelf.storeId, sutuId: weakSelf.sutuId, type: payType,gameType: weakSelf.gameListModel.gameType).subscribe(onNext: {data in |
| | | if let m = data.data{ |
| | | |
| | | if m.isStaff{ |
| | | let vc = PaymentResultVC(result: .success, objType: .games) |
| | | JQ_currentViewController().jq_push(vc: vc) |
| | | return |
| | | } |
| | | |
| | | switch payType { |
| | | case .wechat: |
| | | YYPaymentManager.shared.sendPaymentRequest(YYWeChatPayRequest(partnerId: m.partnerid, prepayId: m.prepayid, package: m.package, nonceStr: m.noncestr, timeStamp: m.timestamp, sign: m.sign)) { result in |
| | |
| | | struct WorldCupDetailModel:HandyJSON{ |
| | | var address: String = "" |
| | | var age: String = "" |
| | | var cash: Double = 0 |
| | | var classHour: Int = 0 |
| | | var cash:Double? |
| | | var classHour:Int? |
| | | var content: String = "" |
| | | var endTime: String = "" |
| | | var gender: Int = 0 |
| | |
| | | var infoImg: String = "" |
| | | var intro: String = "" |
| | | var name: String = "" |
| | | var paiCoin: Int = 0 |
| | | var paiCoin:Int? |
| | | var registrationClosingTime:String? |
| | | var startTime: String = "" |
| | | var storeInfos = [ActivityDetailStoreModel]() |
| | |
| | | SDWebImageDownloader.shared.downloadImage(with: URL(string: m.backgroundImage), options: .useNSURLCache) { _, _,_ in |
| | | } completed: { image, data, error, status in |
| | | |
| | | guard m.backgroundImage.isEmpty else { |
| | | guard !m.backgroundImage.isEmpty else { |
| | | m.cellHeight = 100 |
| | | group.leave() |
| | | return |
| | |
| | | import QMUIKit |
| | | import RxRelay |
| | | import RxSwift |
| | | import SDWebImage |
| | | |
| | | class WorldCupListViewModel:RefreshModel<WorldCupListModel>{ |
| | | |
| | |
| | | for (index,img) in imgs.enumerated(){ |
| | | items.append(CommonBannerModel(index: index,resource: img,mediaType: .imageUrl)) |
| | | } |
| | | self?.footerView.setItems(items: items) { m in |
| | | let model = models[m.index] |
| | | jumpPage(model: model.model, page: model.page, type: model.type, id: model.turnId) |
| | | |
| | | |
| | | if let img = imgs.first{ |
| | | guard SDImageCache.shared.diskImageDataExists(withKey: img) else { |
| | | SDWebImageDownloader.shared.downloadImage(with: URL(string: img), options: .useNSURLCache) { _, _,_ in |
| | | } completed: { image, data, error, status in |
| | | |
| | | guard !img.isEmpty else { |
| | | return |
| | | } |
| | | |
| | | if let img = image{ |
| | | let footH = JQ_ScreenW / (img.size.width / img.size.height) |
| | | self?.footerView.frame = CGRect(x: 0, y: 0, width: JQ_ScreenW, height: footH) |
| | | self?.footerView.setItems(items: items) { m in |
| | | let model = models[m.index] |
| | | jumpPage(model: model.model, page: model.page, type: model.type, id: model.turnId) |
| | | } |
| | | self?.tableview.reloadData() |
| | | } |
| | | } |
| | | return |
| | | } |
| | | if let data = SDImageCache.shared.diskCache.data(forKey: img),let img = UIImage(data: data){ |
| | | let footH = JQ_ScreenW / (img.size.width / img.size.height) |
| | | self?.footerView.frame = CGRect(x: 0, y: 0, width: JQ_ScreenW, height: footH) |
| | | self?.footerView.setItems(items: items) { m in |
| | | let model = models[m.index] |
| | | jumpPage(model: model.model, page: model.page, type: model.type, id: model.turnId) |
| | | } |
| | | self?.tableview.reloadData() |
| | | } |
| | | } |
| | | self?.tableview.reloadData() |
| | | |
| | | |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | |
| | | btn_complete.isEnabled = false |
| | | btn_complete.backgroundColor = .gray.withAlphaComponent(0.5) |
| | | Services.queryProtocol(.other,progress: false).subscribe(onNext: {[weak self] result in |
| | | if let text = result.data?.jq_wrapHtml(){ |
| | | if let text = result.data?.jq_wrapHtml(edge: .init(top: 5, left: 3, bottom: 0, right: 3)){ |
| | | self?.webView.loadHTMLString(text, baseURL: nil) |
| | | } |
| | | }).disposed(by: disposeBag) |
| | |
| | | |
| | | class CustomerContentDetailVC: BaseVC { |
| | | |
| | | @IBOutlet weak var label_title: UILabel! |
| | | @IBOutlet weak var label_datetime: UILabel! |
| | | @IBOutlet weak var webView: WKWebView! |
| | | @IBOutlet weak var cons_webHei: NSLayoutConstraint! |
| | | |
| | | private var id:Int! |
| | | private var type:CustomerSubListVC.CustomerSubType! |
| | | @IBOutlet weak var label_title: UILabel! |
| | | @IBOutlet weak var label_datetime: UILabel! |
| | | @IBOutlet weak var webView: WKWebView! |
| | | @IBOutlet weak var cons_webHei: NSLayoutConstraint! |
| | | |
| | | private var id:Int! |
| | | private var type:CustomerSubListVC.CustomerSubType! |
| | | |
| | | |
| | | init(id:Int,type:CustomerSubListVC.CustomerSubType) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.id = id |
| | | self.type = type |
| | | } |
| | | |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | |
| | | if type == .notice{ |
| | | title = "公告详情" |
| | | }else{ |
| | | title = "问题详情" |
| | | } |
| | | |
| | | Services.exploreNoticeDetail(id: id, type: type).subscribe(onNext: {[weak self] data in |
| | | |
| | | if self?.type == .notice{ |
| | | self?.label_title.text = data.data?.noticeTitle |
| | | self?.label_datetime.text = data.data?.noticeTime |
| | | |
| | | if let str = data.data?.noticeContents.jq_wrapHtml(){ |
| | | self?.webView.loadHTMLString(str, baseURL: nil) |
| | | init(id:Int,type:CustomerSubListVC.CustomerSubType) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.id = id |
| | | self.type = type |
| | | } |
| | | }else{ |
| | | self?.label_title.text = data.data?.quesTitle |
| | | self?.label_datetime.text = data.data?.quesTime |
| | | |
| | | if let str = data.data?.quesContents.jq_wrapHtml(){ |
| | | self?.webView.loadHTMLString(str, baseURL: nil) |
| | | required init?(coder: NSCoder) { |
| | | fatalError("init(coder:) has not been implemented") |
| | | } |
| | | } |
| | | |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | |
| | | override func setRx() { |
| | | self.webView.scrollView.rx.observe(CGSize.self, "contentSize").map { (size) -> CGFloat? in |
| | | if let size = size{ |
| | | return size.height |
| | | } |
| | | return nil |
| | | }.subscribe(onNext: { [unowned self](height) in |
| | | if let height = height{ |
| | | self.cons_webHei.constant = height |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | if type == .notice{ |
| | | title = "公告详情" |
| | | }else{ |
| | | title = "问题详情" |
| | | } |
| | | |
| | | } |
| | | Services.exploreNoticeDetail(id: id, type: type).subscribe(onNext: {[weak self] data in |
| | | |
| | | if self?.type == .notice{ |
| | | self?.label_title.text = data.data?.noticeTitle |
| | | self?.label_datetime.text = data.data?.noticeTime |
| | | |
| | | if let str = data.data?.noticeContents.jq_wrapHtml(){ |
| | | self?.webView.loadHTMLString(str, baseURL: nil) |
| | | } |
| | | }else{ |
| | | self?.label_title.text = data.data?.quesTitle |
| | | self?.label_datetime.text = data.data?.quesTime |
| | | |
| | | if let str = data.data?.quesContents.jq_wrapHtml(){ |
| | | self?.webView.loadHTMLString(str, baseURL: nil) |
| | | } |
| | | } |
| | | |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | override func setRx() { |
| | | self.webView.scrollView.rx.observe(CGSize.self, "contentSize").map { (size) -> CGFloat? in |
| | | if let size = size{ |
| | | return size.height |
| | | } |
| | | return nil |
| | | }.subscribe(onNext: { [unowned self](height) in |
| | | if let height = height{ |
| | | self.cons_webHei.constant = height |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | |
| | | } |
| | | } |
| | |
| | | var benefitHomeModel:BenefitHomeModel? |
| | | private var models = [StartClouseExploreModel]() |
| | | |
| | | private var items = ["我的二维码","我的订场","社区世界杯","已报名活动","我的运动营","人员管理","我的券包","兑换记录","消费记录","积分明细","我的玩湃币"] |
| | | private var itemsImg = ["me_code","me_yard","me_wordCup","me_activity","me_camp","me_peoples","me_coupons","me_withdrawRec","me_consume","me_coin","me_payCoin","me_judge"] |
| | | // private var items = ["我的二维码","我的订场","社区世界杯","已报名活动","我的运动营","人员管理","我的券包","兑换记录","消费记录","积分明细","我的玩湃币"] |
| | | private var items = ["我的二维码","我的订场","社区世界杯","已报名活动","我的运动营","人员管理","我的券包","兑换记录","消费记录","积分明细"] |
| | | // private var itemsImg = ["me_code","me_yard","me_wordCup","me_activity","me_camp","me_peoples","me_coupons","me_withdrawRec","me_consume","me_coin","me_payCoin","me_judge"] |
| | | private var itemsImg = ["me_code","me_yard","me_wordCup","me_activity","me_camp","me_peoples","me_coupons","me_withdrawRec","me_consume","me_coin"] |
| | | |
| | | override func viewDidDisappear(_ animated: Bool) { |
| | | super.viewDidDisappear(animated) |
| | |
| | | func_collectionView.dataSource = self |
| | | func_collectionView.register(UINib(nibName: "FindItemCCell", bundle: nil), forCellWithReuseIdentifier: "_FindItemCCell") |
| | | func_collectionView.contentInset = UIEdgeInsets(top: 25, left: 0, bottom: 25, right: 0) |
| | | |
| | | |
| | | //临时隐藏会员功能按钮 |
| | | label_vip.text = "普通会员" |
| | | label_vip.isHidden = false |
| | | img_vipMedal.isHidden = true |
| | | btn_becomeVIP.isEnabled = false |
| | | //临时隐藏会员功能按钮 |
| | | } |
| | | |
| | | |
| | |
| | | private func getData(){ |
| | | Services.benefitHome().subscribe(onNext: {[weak self] data in |
| | | if let model = data.data{ |
| | | guard let weakSelf = self else { return } |
| | | self?.benefitHomeModel = model |
| | | self?.user_avarImg.sd_setImage(with: URL(string: model.userHeadImg)) |
| | | self?.label_userName.text = model.userName.isEmpty ? "未命名":model.userName |
| | |
| | | self?.label_coin.text = "\(model.userIntegral)" |
| | | self?.img_vipMedal.isHidden = model.isMember != "年度会员" |
| | | self?.btn_becomeVIP.isEnabled = model.isMember != "年度会员" |
| | | |
| | | |
| | | //临时隐藏会员功能按钮 |
| | | self?.label_vip.text = "普通会员" |
| | | self?.label_vip.isHidden = false |
| | | self?.img_vipMedal.isHidden = true |
| | | self?.btn_becomeVIP.isEnabled = false |
| | | //临时隐藏会员功能按钮 |
| | | |
| | | |
| | | if model.referee == 1{ |
| | | self?.items.append("裁判入口") |
| | | self?.func_collectionView.reloadData() |
| | | if !weakSelf.items.contains(where: {$0 == "裁判入口"}){ |
| | | self?.items.append("裁判入口") |
| | | self?.itemsImg.append("me_judge") |
| | | self?.func_collectionView.reloadData() |
| | | } |
| | | }else { |
| | | if weakSelf.items.contains(where: {$0 == "裁判入口"}){ |
| | | self?.items.removeLast() |
| | | self?.itemsImg.removeLast() |
| | | self?.func_collectionView.reloadData() |
| | | } |
| | | } |
| | | } |
| | | }) { error in |
| | |
| | | <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="hBG-jc-I1P"> |
| | | <button hidden="YES" opaque="NO" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="hBG-jc-I1P"> |
| | | <rect key="frame" x="72" y="244.33333333333331" width="58" height="29"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> |
| | | <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> |
| | |
| | | </connections> |
| | | </button> |
| | | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="DTA-Zx-9lB"> |
| | | <rect key="frame" x="262.66666666666669" y="244.33333333333331" width="58" height="29"/> |
| | | <rect key="frame" x="232" y="192" width="119" height="46.333333333333343"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> |
| | | <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> |
| | | <state key="normal" title="查看详情"> |
| | | <state key="normal"> |
| | | <color key="titleColor" red="1" green="1" blue="1" alpha="0.29999999999999999" colorSpace="custom" customColorSpace="sRGB"/> |
| | | </state> |
| | | <connections> |
| | |
| | | <constraint firstItem="Iaq-eP-lJ7" firstAttribute="top" secondItem="IFx-3f-1QD" secondAttribute="top" constant="33.5" id="8T1-8Q-gib"/> |
| | | <constraint firstItem="reN-LL-PRO" firstAttribute="centerY" secondItem="qIB-bn-Xg1" secondAttribute="centerY" id="BeY-KC-laa"/> |
| | | <constraint firstItem="IFx-3f-1QD" firstAttribute="top" secondItem="1Yu-z5-de2" secondAttribute="top" constant="23.5" id="E6N-4k-GPZ"/> |
| | | <constraint firstItem="DTA-Zx-9lB" firstAttribute="top" secondItem="TBO-dZ-vzH" secondAttribute="bottom" constant="6" id="HhC-ff-6wp"/> |
| | | <constraint firstItem="qIB-bn-Xg1" firstAttribute="leading" secondItem="Iaq-eP-lJ7" secondAttribute="leading" id="JzW-jd-ATz"/> |
| | | <constraint firstAttribute="width" secondItem="1Yu-z5-de2" secondAttribute="height" multiplier="1:0.763" id="Kr8-62-LYF"/> |
| | | <constraint firstItem="ywf-si-kai" firstAttribute="top" secondItem="QKu-db-8Fs" secondAttribute="bottom" constant="9" id="L5f-Wd-uEY"/> |
| | | <constraint firstItem="TBO-dZ-vzH" firstAttribute="centerY" secondItem="ywf-si-kai" secondAttribute="centerY" id="LvV-6U-Pmw"/> |
| | | <constraint firstItem="TBO-dZ-vzH" firstAttribute="top" secondItem="3pw-YC-Oys" secondAttribute="bottom" constant="9" id="NGT-uL-LPH"/> |
| | | <constraint firstItem="DTA-Zx-9lB" firstAttribute="centerX" secondItem="TBO-dZ-vzH" secondAttribute="centerX" id="OMM-7I-mY8"/> |
| | | <constraint firstItem="reN-LL-PRO" firstAttribute="leading" secondItem="qIB-bn-Xg1" secondAttribute="trailing" constant="13.5" id="RG9-2c-y1p"/> |
| | | <constraint firstItem="qIB-bn-Xg1" firstAttribute="top" secondItem="Iaq-eP-lJ7" secondAttribute="bottom" constant="11" id="S1p-gw-G8F"/> |
| | | <constraint firstItem="hBG-jc-I1P" firstAttribute="centerX" secondItem="ywf-si-kai" secondAttribute="centerX" id="SKj-6E-fFA"/> |
| | | <constraint firstItem="ISP-Cr-8RW" firstAttribute="leading" secondItem="qIB-bn-Xg1" secondAttribute="leading" id="UMN-jk-7va"/> |
| | | <constraint firstItem="ISP-Cr-8RW" firstAttribute="centerY" secondItem="qIB-bn-Xg1" secondAttribute="centerY" id="XaT-uF-Irt"/> |
| | | <constraint firstItem="DTA-Zx-9lB" firstAttribute="leading" secondItem="TBO-dZ-vzH" secondAttribute="leading" id="Y4w-cg-kMC"/> |
| | | <constraint firstItem="hBG-jc-I1P" firstAttribute="top" secondItem="ywf-si-kai" secondAttribute="bottom" constant="6" id="ZRW-iT-ity"/> |
| | | <constraint firstItem="ywf-si-kai" firstAttribute="leading" secondItem="1Yu-z5-de2" secondAttribute="leading" constant="41.5" id="dy9-73-RcY"/> |
| | | <constraint firstItem="DTA-Zx-9lB" firstAttribute="trailing" secondItem="TBO-dZ-vzH" secondAttribute="trailing" id="eiR-Ml-1h8"/> |
| | | <constraint firstItem="IFx-3f-1QD" firstAttribute="leading" secondItem="1Yu-z5-de2" secondAttribute="leading" constant="26" id="hAd-UM-xF3"/> |
| | | <constraint firstItem="TBO-dZ-vzH" firstAttribute="centerX" secondItem="3pw-YC-Oys" secondAttribute="centerX" id="oWb-y0-H8A"/> |
| | | <constraint firstItem="DTA-Zx-9lB" firstAttribute="top" secondItem="TBO-dZ-vzH" secondAttribute="top" id="omr-1g-o8d"/> |
| | | <constraint firstAttribute="trailing" secondItem="TBO-dZ-vzH" secondAttribute="trailing" constant="42" id="qQN-dr-eUO"/> |
| | | <constraint firstItem="xGl-Vo-Gjm" firstAttribute="centerY" secondItem="IFx-3f-1QD" secondAttribute="centerY" id="tX3-fg-Fqb"/> |
| | | <constraint firstAttribute="trailing" secondItem="xGl-Vo-Gjm" secondAttribute="trailing" constant="34" id="uEs-l3-zLr"/> |
| | | <constraint firstItem="DTA-Zx-9lB" firstAttribute="bottom" secondItem="TBO-dZ-vzH" secondAttribute="bottom" id="uRS-D4-DDz"/> |
| | | <constraint firstItem="Iaq-eP-lJ7" firstAttribute="leading" secondItem="IFx-3f-1QD" secondAttribute="trailing" constant="14" id="x9S-au-83K"/> |
| | | <constraint firstItem="reN-LL-PRO" firstAttribute="trailing" secondItem="ISP-Cr-8RW" secondAttribute="trailing" id="zk3-fl-xGo"/> |
| | | </constraints> |
| | |
| | | @IBOutlet weak var btn_addStudent: QMUIButton! |
| | | @IBOutlet weak var btn_enroll: UIButton! |
| | | |
| | | |
| | | @IBOutlet weak var view_cash: UIView! |
| | | @IBOutlet weak var view_payCoin: UIView! |
| | | @IBOutlet weak var view_course: UIView! |
| | | |
| | | private var students = [ActivityDetailPartModel]() |
| | | private var detailModel:WorldCupDetailModel! |
| | |
| | | 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)课时/人" |
| | | view_cash.isHidden = detailModel.cash == nil |
| | | view_payCoin.isHidden = detailModel.paiCoin == nil |
| | | view_course.isHidden = detailModel.classHour == nil |
| | | |
| | | if let cash = detailModel.cash{ |
| | | label_pay_money.text = cash == 0 ? "免费":"¥\(cash)/人" |
| | | } |
| | | |
| | | if let paiCoin = detailModel.paiCoin{ |
| | | label_pay_coin.text = paiCoin == 0 ? "免费":"\(paiCoin)币/人" |
| | | } |
| | | |
| | | if let classHour = detailModel.classHour{ |
| | | label_pay_course.text = classHour == 0 ? "免费":"\(classHour)课时/人" |
| | | } |
| | | } |
| | | |
| | | override func setRx() { |
| | |
| | | result.append(["id":v.id,"isStudent":v.isStudent]) |
| | | } |
| | | |
| | | var money:Double = 0 |
| | | var paiCoin:Int = 0 |
| | | var classHour:Int = 0 |
| | | var money:Double? |
| | | var paiCoin:Int? |
| | | var classHour:Int? |
| | | |
| | | //选中有非学员,显示课时支付灰色 |
| | | let hasNotStudent = students.filter({$0.isStudent == 0}).count > 0 |
| | | |
| | | money = detailModel.cash * Double(students.count) |
| | | paiCoin = detailModel.paiCoin * students.count |
| | | classHour = detailModel.classHour * students.count |
| | | if detailModel.cash != nil{ |
| | | money = detailModel.cash! * Double(students.count) |
| | | } |
| | | |
| | | if detailModel.paiCoin != nil{ |
| | | paiCoin = detailModel.paiCoin! * students.count |
| | | } |
| | | |
| | | if detailModel.classHour != nil{ |
| | | classHour = detailModel.classHour! * students.count |
| | | } |
| | | |
| | | if money == 0 && paiCoin == 0 && classHour == 0{ |
| | | payment(payType: .free, result: result) |
| | |
| | | <outlet property="tableView" destination="vdV-Kg-Dhx" id="Rw4-fo-CUk"/> |
| | | <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> |
| | | <outlet property="view_banner" destination="iHH-PB-5zL" id="0G8-9s-0ju"/> |
| | | <outlet property="view_cash" destination="eMQ-rk-ufL" id="DXM-Wn-VDB"/> |
| | | <outlet property="view_course" destination="TGs-DL-QOC" id="4SW-kN-WV1"/> |
| | | <outlet property="view_payCoin" destination="wNH-nX-al9" id="U3e-iX-y05"/> |
| | | </connections> |
| | | </placeholder> |
| | | <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> |
| | |
| | | <constraint firstItem="00C-zB-N9A" firstAttribute="top" secondItem="SW6-bw-VJg" secondAttribute="bottom" constant="14" id="e94-Bx-fY0"/> |
| | | <constraint firstAttribute="trailing" secondItem="00C-zB-N9A" secondAttribute="trailing" id="hcX-oq-8zQ"/> |
| | | <constraint firstItem="SW6-bw-VJg" firstAttribute="top" secondItem="oPd-tE-l3b" secondAttribute="bottom" constant="12" id="km2-TG-Obh"/> |
| | | <constraint firstAttribute="height" constant="115" id="nnO-7y-jH3"/> |
| | | <constraint firstAttribute="bottom" secondItem="00C-zB-N9A" secondAttribute="bottom" id="oM7-og-cch"/> |
| | | <constraint firstItem="oPd-tE-l3b" firstAttribute="leading" secondItem="aGT-jP-y75" secondAttribute="leading" constant="14" id="soz-s5-g6q"/> |
| | | <constraint firstItem="dAY-sB-Oy6" firstAttribute="top" secondItem="aGT-jP-y75" secondAttribute="top" id="uT1-3g-2a0"/> |
| | |
| | | @IBOutlet weak var cons_webHei: NSLayoutConstraint! |
| | | @IBOutlet weak var btn_moreStore: UIButton! |
| | | @IBOutlet weak var btn_enroll: UIButton! |
| | | |
| | | @IBOutlet weak var view_cash: UIView! |
| | | @IBOutlet weak var view_payCoin: UIView! |
| | | @IBOutlet weak var view_course: UIView! |
| | | |
| | | private var detailModel:WorldCupDetailModel? |
| | | |
| | | private lazy var bannerView:CommonBannerView = { |
| | |
| | | self?.label_address.text = model.address |
| | | self?.label_matchPoint.text = model.storeInfos.map({$0.name}).joined(separator: "、") |
| | | |
| | | if model.cash == 0{ |
| | | self?.label_pay_money.text = "免费" |
| | | }else{ |
| | | self?.label_pay_money.text = "¥\(model.cash)/人" |
| | | |
| | | self?.view_cash.isHidden = model.cash == nil |
| | | self?.view_payCoin.isHidden = model.paiCoin == nil |
| | | self?.view_course.isHidden = model.classHour == nil |
| | | |
| | | if let cash = model.cash{ |
| | | self?.label_pay_money.text = cash == 0 ? "免费":"¥\(cash)/人" |
| | | } |
| | | |
| | | if model.paiCoin == 0{ |
| | | self?.label_pay_coin.text = "免费" |
| | | }else{ |
| | | self?.label_pay_coin.text = "\(model.paiCoin)币/人" |
| | | if let paiCoin = model.paiCoin{ |
| | | self?.label_pay_coin.text = paiCoin == 0 ? "免费":"\(paiCoin)币/人" |
| | | } |
| | | |
| | | if model.classHour == 0{ |
| | | self?.label_pay_course.text = "免费" |
| | | }else{ |
| | | self?.label_pay_course.text = "\(model.classHour)课时/人" |
| | | if let classHour = model.classHour{ |
| | | self?.label_pay_course.text = classHour == 0 ? "免费":"\(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_course.text = "免费" |
| | | // }else{ |
| | | // self?.label_pay_course.text = "\(model.classHour)课时/人" |
| | | // } |
| | | |
| | | self?.label_desc.text = model.intro |
| | | |
| | |
| | | self?.btn_enroll.isEnabled = false |
| | | } |
| | | } |
| | | |
| | | |
| | | self?.detailModel = model |
| | | } |
| | |
| | | <outlet property="label_title" destination="tkR-Qw-6Qd" id="W9O-KH-zcd"/> |
| | | <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> |
| | | <outlet property="view_banner" destination="rEE-UF-kCK" id="yik-z7-fwy"/> |
| | | <outlet property="view_cash" destination="Y2l-H5-uB9" id="8rV-8V-qmg"/> |
| | | <outlet property="view_course" destination="g9N-2R-H2H" id="1jL-PV-tZs"/> |
| | | <outlet property="view_payCoin" destination="z37-YH-24K" id="SIr-3K-Xmw"/> |
| | | <outlet property="webView" destination="sHP-li-Ukm" id="2vx-dd-7hx"/> |
| | | </connections> |
| | | </placeholder> |
| | |
| | | <constraint firstItem="NtA-5U-4tc" firstAttribute="top" secondItem="H2m-qM-cUy" secondAttribute="bottom" constant="12" id="Ik0-pv-FDV"/> |
| | | <constraint firstItem="H2m-qM-cUy" firstAttribute="top" secondItem="wcV-Lw-oh0" secondAttribute="bottom" constant="14" id="IpT-vv-cD9"/> |
| | | <constraint firstItem="wcV-Lw-oh0" firstAttribute="top" secondItem="ULs-al-mjr" secondAttribute="top" id="K0J-Sm-K5I"/> |
| | | <constraint firstAttribute="height" constant="115" id="NHh-2F-h4t"/> |
| | | <constraint firstItem="wcV-Lw-oh0" firstAttribute="leading" secondItem="ULs-al-mjr" secondAttribute="leading" constant="13" id="OEp-4S-aAg"/> |
| | | <constraint firstAttribute="trailing" secondItem="wcV-Lw-oh0" secondAttribute="trailing" id="QiP-QD-VlZ"/> |
| | | <constraint firstItem="H2m-qM-cUy" firstAttribute="leading" secondItem="ULs-al-mjr" secondAttribute="leading" constant="14" id="V0W-Hu-0uT"/> |
| | |
| | | import UIKit |
| | | import RxSwift |
| | | import RxRelay |
| | | import RxDataSources |
| | | |
| | | let WorldCupRefresh_Noti = Notification.Name.init("WorldCupRefresh_Noti") |
| | | |
| | |
| | | var partModel:BehaviorRelay<ActivityDetailPartModel?>? |
| | | var superScrollView:UIScrollView? |
| | | private var viewModel = WorldCupContentViewModel() |
| | | private(set) var tableView:UITableView! |
| | | private(set) var tableView:BaseScrollInnerTableView! |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | view.backgroundColor = .clear |
| | |
| | | } |
| | | |
| | | override func setUI() { |
| | | tableView = UITableView(frame: .zero, style: .plain) |
| | | tableView = BaseScrollInnerTableView(frame: .zero, style: .plain) |
| | | tableView.delegate = self |
| | | tableView.dataSource = self |
| | | tableView.separatorStyle = .none |
| | |
| | | } |
| | | |
| | | viewModel.configure(tableView) |
| | | |
| | | superScrollView?.delegate = self |
| | | } |
| | | |
| | | override func setRx() { |
| | |
| | | extension WorldCupContentVC:UIScrollViewDelegate{ |
| | | |
| | | func scrollViewDidScroll(_ scrollView: UIScrollView) { |
| | | let off = superScrollView!.contentOffset.y + scrollView.contentOffset.y |
| | | superScrollView!.contentOffset.y = max(0,min(350,off)) |
| | | var canScroll = true |
| | | if scrollView.tag == 2100{ |
| | | |
| | | if scrollView.contentOffset.y < 350 && scrollView.contentOffset.y != 0{ |
| | | canScroll = false |
| | | } |
| | | print("\(scrollView.contentOffset.y)----\(canScroll)") |
| | | tableView.isScrollEnabled = canScroll |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | extension WorldCupContentVC:UITableViewDelegate,UITableViewDataSource{ |
| | | |
| | |
| | | } |
| | | |
| | | } |
| | | |
| | | class BaseScrollInnerTableView:UITableView,UIScrollViewDelegate{ |
| | | func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { |
| | | return true |
| | | } |
| | | } |
| | |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="418"/> |
| | | <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
| | | <subviews> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_user_large" translatesAutoresizingMaskIntoConstraints="NO" id="rC1-GG-uHG"> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="rC1-GG-uHG"> |
| | | <rect key="frame" x="24.000000000000007" y="24.000000000000007" width="87.666666666666686" height="87.666666666666686"/> |
| | | <color key="backgroundColor" name="F6F6F6"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="87.5" id="acp-fA-EI4"/> |
| | | <constraint firstAttribute="width" constant="87.5" id="viK-40-g8b"/> |
| | |
| | | </button> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="kqK-MA-Vfm"> |
| | | <rect key="frame" x="282" y="29.666666666666671" width="76" height="76"/> |
| | | <color key="backgroundColor" systemColor="systemGray4Color"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="76" id="dqa-c1-DHq"/> |
| | | <constraint firstAttribute="height" constant="76" id="meQ-qP-IB9"/> |
| | |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0.00%" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="14" translatesAutoresizingMaskIntoConstraints="NO" id="m9A-Xb-JPg"> |
| | | <rect key="frame" x="268" y="274.33333333333331" width="93" height="46"/> |
| | | <rect key="frame" x="272" y="274.33333333333331" width="101" height="46"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="46" id="8tN-ps-bbt"/> |
| | | </constraints> |
| | |
| | | <color key="textColor" red="0.34901960784313724" green="0.3411764705882353" blue="0.3411764705882353" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="color" keyPath="ld_borderColorXIB"> |
| | | <color key="value" name="FE6E0D"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_borderWidthXIB"> |
| | | <real key="value" value="1"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="23"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="rEf-8b-RAY"> |
| | | <rect key="frame" x="32" y="274.33333333333331" width="93" height="46"/> |
| | | <rect key="frame" x="20" y="274.33333333333331" width="101" height="46"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="46" id="Zh3-Gp-bHb"/> |
| | | </constraints> |
| | |
| | | <color key="textColor" red="0.34901960784313724" green="0.3411764705882353" blue="0.3411764705882353" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="color" keyPath="ld_borderColorXIB"> |
| | | <color key="value" name="FE6E0D"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_borderWidthXIB"> |
| | | <real key="value" value="1"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="23"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lO3-VT-LVU"> |
| | | <rect key="frame" x="150" y="274.33333333333331" width="93" height="46"/> |
| | | <rect key="frame" x="146" y="274.33333333333331" width="101" height="46"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="46" id="Fpt-PG-81C"/> |
| | | </constraints> |
| | |
| | | <color key="textColor" red="0.34901960784313724" green="0.3411764705882353" blue="0.3411764705882353" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="color" keyPath="ld_borderColorXIB"> |
| | | <color key="value" name="FE6E0D"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_borderWidthXIB"> |
| | | <real key="value" value="1"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="23"/> |
| | | </userDefinedRuntimeAttribute> |
| | |
| | | <constraint firstItem="CLm-un-lHA" firstAttribute="leading" secondItem="rC1-GG-uHG" secondAttribute="trailing" constant="13.5" id="7KP-Up-Wjn"/> |
| | | <constraint firstItem="9RA-9C-jhI" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="31" id="7YN-Nf-NVK"/> |
| | | <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="7Tv-DA-R5E" secondAttribute="trailing" id="97Z-Lt-Xc6"/> |
| | | <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="m9A-Xb-JPg" secondAttribute="trailing" constant="32" id="AOB-qc-e1Y"/> |
| | | <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="m9A-Xb-JPg" secondAttribute="trailing" constant="20" id="AOB-qc-e1Y"/> |
| | | <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="9RA-9C-jhI" secondAttribute="trailing" constant="31" id="Adw-GT-Y0X"/> |
| | | <constraint firstItem="dho-Mk-UEo" firstAttribute="top" secondItem="kqK-MA-Vfm" secondAttribute="bottom" constant="37" id="ENW-DR-ptu"/> |
| | | <constraint firstItem="kqK-MA-Vfm" firstAttribute="centerY" secondItem="rC1-GG-uHG" secondAttribute="centerY" id="H2t-1L-Swv"/> |
| | | <constraint firstItem="rC1-GG-uHG" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="24" id="HgH-ec-6mG"/> |
| | | <constraint firstItem="rEf-8b-RAY" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="32" id="J8r-1H-0zw"/> |
| | | <constraint firstItem="rEf-8b-RAY" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="20" id="J8r-1H-0zw"/> |
| | | <constraint firstItem="3bk-Zw-hOl" firstAttribute="top" secondItem="CLm-un-lHA" secondAttribute="bottom" constant="9" id="NL7-24-lfZ"/> |
| | | <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="dho-Mk-UEo" secondAttribute="trailing" id="Oyo-J1-MSN"/> |
| | | <constraint firstItem="lO3-VT-LVU" firstAttribute="leading" secondItem="rEf-8b-RAY" secondAttribute="trailing" constant="25" id="PmD-Dt-ho8"/> |
| | |
| | | </objects> |
| | | <resources> |
| | | <image name="btn_exchange" width="40" height="35"/> |
| | | <image name="icon_user_large" width="92" height="94"/> |
| | | <namedColor name="F6F6F6"> |
| | | <color red="0.9649999737739563" green="0.9649999737739563" blue="0.9649999737739563" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | </namedColor> |
| | | <namedColor name="FE6E0D"> |
| | | <color red="0.99199998378753662" green="0.53299999237060547" blue="0.0080000003799796104" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | </namedColor> |
| | | <systemColor name="systemBackgroundColor"> |
| | | <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
| | | </systemColor> |
| | | <systemColor name="systemGray4Color"> |
| | | <color red="0.81960784310000001" green="0.81960784310000001" blue="0.83921568629999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | </systemColor> |
| | | </resources> |
| | | </document> |
| | |
| | | private let yearBtn = QMUIButton(type: .custom) |
| | | private let ratioRankBtn = QMUIButton(type: .custom) |
| | | // private let provinceBtn = UIButton(type: .custom) |
| | | private var tableView:UITableView! |
| | | private var tableView:BaseScrollInnerTableView! |
| | | var superScrollView:UIScrollView? |
| | | |
| | | var flowCell:WorldCupRankTCell? |
| | |
| | | } |
| | | |
| | | override func setUI() { |
| | | tableView = UITableView(frame: .zero, style: .plain) |
| | | superScrollView?.delegate = self |
| | | tableView = BaseScrollInnerTableView(frame: .zero, style: .plain) |
| | | tableView.delegate = self |
| | | tableView.dataSource = self |
| | | tableView.showsVerticalScrollIndicator = false |
| | |
| | | make.bottom.equalToSuperview().offset(-69) |
| | | } |
| | | |
| | | |
| | | |
| | | viewModel.configure(tableView,needMore: false) |
| | | viewModel.beginRefresh() |
| | | viewModel.id.subscribe(onNext: {[weak self] _ in |
| | | guard let weakSelf = self else { return } |
| | | self?.viewModel.configure(weakSelf.tableView,needMore: false) |
| | | self?.viewModel.beginRefresh() |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | override func setRx() { |
| | |
| | | extension WorldCupRankVC:UIScrollViewDelegate{ |
| | | |
| | | func scrollViewDidScroll(_ scrollView: UIScrollView) { |
| | | let off = superScrollView!.contentOffset.y + scrollView.contentOffset.y |
| | | superScrollView!.contentOffset.y = max(0,min(350,off)) |
| | | var canScroll = true |
| | | if scrollView.tag == 2100{ |
| | | |
| | | if scrollView.contentOffset.y < 350 && scrollView.contentOffset.y != 0{ |
| | | canScroll = false |
| | | } |
| | | print("\(scrollView.contentOffset.y)----\(canScroll)") |
| | | tableView.isScrollEnabled = canScroll |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { |
| | | |
| | | if section != 0{ |
| | | return nil |
| | | } |
| | | if section != 0{return nil} |
| | | |
| | | var headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: "header") |
| | | if headerView == nil{ |
| | |
| | | |
| | | class WorldCupRecordVC: BaseVC { |
| | | |
| | | private(set) var tableView:UITableView! |
| | | private(set) var tableView:BaseScrollInnerTableView! |
| | | private var viewModel = WorldCupRecordViewModel() |
| | | var partModel:BehaviorRelay<ActivityDetailPartModel?>? |
| | | var superScrollView:UIScrollView? |
| | |
| | | } |
| | | |
| | | override func setUI() { |
| | | tableView = UITableView(frame: .zero, style: .grouped) |
| | | superScrollView?.delegate = self |
| | | tableView = BaseScrollInnerTableView(frame: .zero, style: .grouped) |
| | | tableView.delegate = self |
| | | tableView.dataSource = self |
| | | tableView.separatorStyle = .none |
| | |
| | | extension WorldCupRecordVC:UIScrollViewDelegate{ |
| | | |
| | | func scrollViewDidScroll(_ scrollView: UIScrollView) { |
| | | let off = superScrollView!.contentOffset.y + scrollView.contentOffset.y |
| | | superScrollView!.contentOffset.y = max(0,min(350,off)) |
| | | var canScroll = true |
| | | if scrollView.tag == 2100{ |
| | | |
| | | if scrollView.contentOffset.y < 350 && scrollView.contentOffset.y != 0{ |
| | | canScroll = false |
| | | } |
| | | print("\(scrollView.contentOffset.y)----\(canScroll)") |
| | | tableView.isScrollEnabled = canScroll |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | return vc |
| | | }() |
| | | |
| | | // lazy var flowImageView:UIImageView = { |
| | | // let i = UIImageView() |
| | | // i.tag = 1001 |
| | | // return i |
| | | // }() |
| | | |
| | | |
| | | lazy var pageVC:FFPageViewController = { |
| | | let pageViewController = FFPageViewController() |
| | | pageViewController.view.backgroundColor = .clear |
| | |
| | | self.pageVC.scroll(toPage: self.toPage ?? 0, animation: false) |
| | | } |
| | | |
| | | adapterVC.scrollview.tag = 2100 |
| | | addFootView() |
| | | } |
| | | |
| | |
| | | if let cell = weakSelf.footView.viewWithTag(1100) as? WorldCupRankTCell{ |
| | | cell.model = model |
| | | } |
| | | weakSelf.footView.isHidden = false |
| | | weakSelf.footView.isHidden = model.name.isEmpty |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | |
| | |
| | | func pageViewController(_ pageViewController: FFPageViewController, currentPageChanged currentPage: Int) { |
| | | menuVC.pageMenu.selectedItemIndex = currentPage |
| | | // flowImageView.isHidden = currentPage != 3 |
| | | footView.isHidden = currentPage != 3 |
| | | footView.isHidden = currentPage != 3 || partModel.value == nil |
| | | } |
| | | } |
| | | |
| | |
| | | func pageMenu(_ pageMenu: SPPageMenu, didSelectedItem index: Int) { |
| | | pageVC.scroll(toPage: index, animation: true) |
| | | // flowImageView.isHidden = index != 3 |
| | | footView.isHidden = index != 3 |
| | | footView.isHidden = index != 3 || partModel.value == nil |
| | | } |
| | | |
| | | func pageMenu(_ pageMenu: SPPageMenu, itemSelectedAt index: Int) { |
| | |
| | | let model = benefitHomeModel!.commodities[indexPath.row] |
| | | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_WelfareCoinCCell", for: indexPath) as! WelfareCoinCCell |
| | | cell.label_name.text = model.commodityName |
| | | cell.label_price.text = model.commodityPrice.currency() |
| | | |
| | | switch model.redemptionMethod { |
| | | case 1: //积分 |
| | | cell.label_price.text = "\(model.integral)积分" |
| | | case 2: //现金+积分 |
| | | cell.label_price.text = "\(model.integral)积分+\(model.commodityPrice.currency())" |
| | | case 3://现金 |
| | | cell.label_price.text = "\(model.commodityPrice.currency())" |
| | | default: |
| | | cell.label_price.text = "" |
| | | } |
| | | |
| | | |
| | | cell.img_cover.sd_setImage(with: URL(string: model.commodityImg), placeholderImage: nil) |
| | | return cell |
| | | } |
| | |
| | | private var handle:UIScrollView! |
| | | |
| | | lazy var refreshSubject = PublishSubject<RefreshState>() |
| | | var page:Int = 0 |
| | | var page:Int = 1 |
| | | var pageSize:Int = 20 |
| | | private var needRefreshData:Bool = true |
| | | lazy var dataSource = BehaviorRelay<[T]>(value: []) |
| | |
| | | } |
| | | |
| | | func beginRefresh(){ |
| | | handle.mj_header?.beginRefreshing() |
| | | guard handle != nil else {return} |
| | | api()?.subscribe(onNext: { data in |
| | | if let datas = data.data{ |
| | | self.dataSource.accept(datas) |
| | | self.refreshSubject.onNext(.completedRefresh) |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | func refreshData() ->(()->Void) { |