| | |
| | | 133A61882A4E7A200066C4E6 /* CustomerSubListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133A61872A4E7A200066C4E6 /* CustomerSubListVC.swift */; }; |
| | | 133A618C2A4E7AF90066C4E6 /* CustomerContentTCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133A618A2A4E7AF90066C4E6 /* CustomerContentTCell.swift */; }; |
| | | 133A618D2A4E7AF90066C4E6 /* CustomerContentTCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 133A618B2A4E7AF90066C4E6 /* CustomerContentTCell.xib */; }; |
| | | 133E223C2AFB37020045B544 /* StoresInfo_2_View.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133E223B2AFB37020045B544 /* StoresInfo_2_View.swift */; }; |
| | | 133E223E2AFB370D0045B544 /* StoresInfo_2_View.xib in Resources */ = {isa = PBXBuildFile; fileRef = 133E223D2AFB370D0045B544 /* StoresInfo_2_View.xib */; }; |
| | | 133E22402AFB85330045B544 /* CustomPointAnnotation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133E223F2AFB85330045B544 /* CustomPointAnnotation.swift */; }; |
| | | 1347D1BA2AB4457A0052082A /* GamesDataSourceSubListVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1347D1B92AB4457A0052082A /* GamesDataSourceSubListVC.swift */; }; |
| | | 1347D1BC2AB448C20052082A /* CourseUnAssignView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1347D1BB2AB448C20052082A /* CourseUnAssignView.swift */; }; |
| | | 1347D1BE2AB448CC0052082A /* CourseUnAssignView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1347D1BD2AB448CC0052082A /* CourseUnAssignView.xib */; }; |
| | |
| | | 133A61872A4E7A200066C4E6 /* CustomerSubListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomerSubListVC.swift; sourceTree = "<group>"; }; |
| | | 133A618A2A4E7AF90066C4E6 /* CustomerContentTCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomerContentTCell.swift; sourceTree = "<group>"; }; |
| | | 133A618B2A4E7AF90066C4E6 /* CustomerContentTCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CustomerContentTCell.xib; sourceTree = "<group>"; }; |
| | | 133E223B2AFB37020045B544 /* StoresInfo_2_View.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoresInfo_2_View.swift; sourceTree = "<group>"; }; |
| | | 133E223D2AFB370D0045B544 /* StoresInfo_2_View.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = StoresInfo_2_View.xib; sourceTree = "<group>"; }; |
| | | 133E223F2AFB85330045B544 /* CustomPointAnnotation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomPointAnnotation.swift; sourceTree = "<group>"; }; |
| | | 1347D1B92AB4457A0052082A /* GamesDataSourceSubListVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GamesDataSourceSubListVC.swift; sourceTree = "<group>"; }; |
| | | 1347D1BB2AB448C20052082A /* CourseUnAssignView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CourseUnAssignView.swift; sourceTree = "<group>"; }; |
| | | 1347D1BD2AB448CC0052082A /* CourseUnAssignView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CourseUnAssignView.xib; sourceTree = "<group>"; }; |
| | |
| | | 8D79A59A2A3967A90029874B /* StudentUpdateInfoView.xib */, |
| | | 8D6D58D22A39970C0003CFE6 /* StoresInfoView.swift */, |
| | | 8D6D58D42A3997250003CFE6 /* StoresInfoView.xib */, |
| | | 133E223B2AFB37020045B544 /* StoresInfo_2_View.swift */, |
| | | 133E223D2AFB370D0045B544 /* StoresInfo_2_View.xib */, |
| | | ); |
| | | path = View; |
| | | sourceTree = "<group>"; |
| | |
| | | 8D79A5952A39677C0029874B /* View */, |
| | | 8D7D87142A380932003209D6 /* TCell */, |
| | | 8DC3BE0E2A38039700C91B7F /* VC */, |
| | | 133E223F2AFB85330045B544 /* CustomPointAnnotation.swift */, |
| | | ); |
| | | path = Activity; |
| | | sourceTree = "<group>"; |
| | |
| | | 8D6E54D22A381CB000D750CE /* ActivityDetailVC.xib in Resources */, |
| | | 13272DD12A4034A300AC6481 /* YardDetailVC.xib in Resources */, |
| | | 137B866B2AB3F03F00C4D01B /* GamesVC.xib in Resources */, |
| | | 133E223E2AFB370D0045B544 /* StoresInfo_2_View.xib in Resources */, |
| | | 13CCC4BD2A4A820100DEDF19 /* StudentCourseDetailHeadView.xib in Resources */, |
| | | 8D5C150D2A31885B00A8BCC9 /* AgreentView.xib in Resources */, |
| | | 130EC1822AD3F6C0003CA9BA /* CommonAlertSheetView.xib in Resources */, |
| | |
| | | 1347D1BA2AB4457A0052082A /* GamesDataSourceSubListVC.swift in Sources */, |
| | | 8D8DEDED2A31D82100F2C7FA /* PaymentResultVC.swift in Sources */, |
| | | 8D6810E72A370EFB004486DE /* CouponTCell.swift in Sources */, |
| | | 133E22402AFB85330045B544 /* CustomPointAnnotation.swift in Sources */, |
| | | 133A618C2A4E7AF90066C4E6 /* CustomerContentTCell.swift in Sources */, |
| | | 1387B66C2A4AC61F00BF2F2E /* CourseBookingFuncView.swift in Sources */, |
| | | 8D8400D22A2F1430003AF6A2 /* AppDelegate.swift in Sources */, |
| | |
| | | 8D8400E92A2F14A3003AF6A2 /* LoginVC.swift in Sources */, |
| | | 1376A6992A4A7B7B00D4C851 /* StudentCourseDetailVC.swift in Sources */, |
| | | 133A61862A4E78340066C4E6 /* CustomerListVC.swift in Sources */, |
| | | 133E223C2AFB37020045B544 /* StoresInfo_2_View.swift in Sources */, |
| | | 13A7F72C2AB7E0EC000B3436 /* CourseEXPVC.swift in Sources */, |
| | | 136B63982A4ECDD900E594F9 /* SearchStoreDetail_1_TCell.swift in Sources */, |
| | | 8D4905A92A31A6EC00E38513 /* HomeCCell.swift in Sources */, |
| | |
| | | var idCard:String = "" |
| | | var stuPhone:String = "" |
| | | var stuHeadImg:String = "" |
| | | var sex:GenderType = .man |
| | | } |
| | | |
| | | struct StudentSimpleProfileModel:HandyJSON{ |
| | |
| | | struct PaymentModel:HandyJSON{ |
| | | var orderString = "" |
| | | var returnId = 0 |
| | | var siteBooking:Int = 0 |
| | | } |
| | | |
| | | struct StoreWalfareModel:HandyJSON{ |
| | |
| | | |
| | | struct YardBookingDetailModel:HandyJSON{ |
| | | var data:YardBookingDetailDataModel? |
| | | var shopName:String = "" |
| | | var siteName:String = "" |
| | | var shopAddress:String = "" |
| | | var siteType:String = "" |
| | | |
| | | // var ids = [Int]() //区域ID |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | /// 更新课后视频学习状态 |
| | | static func updateVideoStatus(coursePackageId:Int,videoId:Int)->Observable<BaseResponse<SimpleModel>>{ |
| | | static func updateVideoStatus(coursePackageId:Int,videoId:Int?)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/course/api/startCource/updateVideoStatus") |
| | | .append(key: "coursePackageId", value: coursePackageId) |
| | | .append(key: "videoId", value: videoId) |
| | | .append(key: "isOver", value: 1) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 更新课后视频学习状态 |
| | | /// 观看视频结束后领取奖励 |
| | | static func receiveAward(id:Int)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/activity/api/benefitsVideo/receiveAward") |
| | |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/other/base/site/querySiteInfo") |
| | | .append(key: "id", value: id) |
| | | .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) |
| | | .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | |
| | | .append(key: "day", value: day) |
| | | .append(key: "halfName", value: halfName) |
| | | .append(key: "siteName", value: siteName) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 预约场地支付 |
New file |
| | |
| | | // |
| | | // CustomPointAnnotation.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2023/11/8. |
| | | // |
| | | |
| | | import Foundation |
| | | |
| | | |
| | | class CustomPointAnnotation:MAPointAnnotation{ |
| | | |
| | | var index = 0 |
| | | } |
| | |
| | | @IBAction func applyAction(_ sender: UIButton) { |
| | | |
| | | guard students.count != 0 else { |
| | | alertError(msg: "请至少选择一位参赛人员");return |
| | | alertError(msg: "请至少选择一位活动人员");return |
| | | } |
| | | |
| | | StoresInfoView.show(activityDetailModel.storeInfos.first!) { [weak self] status in |
| | | guard let weakSelf = self else { return } |
| | | |
| | | let price = weakSelf.activityDetailModel.cashPrice * Double(weakSelf.students.count) |
| | | let coin = weakSelf.activityDetailModel.playPaiCoin * weakSelf.students.count |
| | | let course = weakSelf.activityDetailModel.classPrice * weakSelf.students.count |
| | | if activityDetailModel.storeInfos.count > 1{ |
| | | let a = activityDetailModel.storeInfos.map({$0.name}) |
| | | StoresInfo_2_View.show(a) {[weak self] status in |
| | | guard let weakSelf = self else { return } |
| | | |
| | | if status{ |
| | | let isStudent = weakSelf.students.filter({$0.isStudent == 0}).count > 0 ? true:false |
| | | PaymentView.show(money: (ali:price,wx:price,coin:coin,course:course,integral:nil),hasNotStudent: isStudent) { [weak self] type in |
| | | guard let weakSelf = self else { return } |
| | | if type == .courseNum{ |
| | | PaymentCourseView.show(id: weakSelf.activityDetailModel.id,number:course) { id in |
| | | weakSelf.payment(type: type,paymentId: id) |
| | | let price = weakSelf.activityDetailModel.cashPrice * Double(weakSelf.students.count) |
| | | let coin = weakSelf.activityDetailModel.playPaiCoin * weakSelf.students.count |
| | | let course = weakSelf.activityDetailModel.classPrice * weakSelf.students.count |
| | | |
| | | if status{ |
| | | let isStudent = weakSelf.students.filter({$0.isStudent == 0}).count > 0 ? true:false |
| | | PaymentView.show(money: (ali:price,wx:price,coin:coin,course:course,integral:nil),hasNotStudent: isStudent) { [weak self] type in |
| | | guard let weakSelf = self else { return } |
| | | if type == .courseNum{ |
| | | PaymentCourseView.show(id: weakSelf.activityDetailModel.id,number:course) { id in |
| | | weakSelf.payment(type: type,paymentId: id) |
| | | } |
| | | }else{ |
| | | weakSelf.payment(type: type) |
| | | } |
| | | }else{ |
| | | weakSelf.payment(type: type) |
| | | } |
| | | } |
| | | }else{ |
| | | NotificationCenter.default.post(name: ChooseHomeStore_Noti, object: nil) |
| | | }else{ |
| | | weakSelf.navigationController?.qmui_popToRootViewController(animated: true, completion: { |
| | | NotificationCenter.default.post(name: ChooseHomeStore_Noti, object: nil) |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | }else{ |
| | | StoresInfoView.show(activityDetailModel.storeInfos.first!) { [weak self] status in |
| | | guard let weakSelf = self else { return } |
| | | |
| | | let price = weakSelf.activityDetailModel.cashPrice * Double(weakSelf.students.count) |
| | | let coin = weakSelf.activityDetailModel.playPaiCoin * weakSelf.students.count |
| | | let course = weakSelf.activityDetailModel.classPrice * weakSelf.students.count |
| | | |
| | | if status{ |
| | | let isStudent = weakSelf.students.filter({$0.isStudent == 0}).count > 0 ? true:false |
| | | PaymentView.show(money: (ali:price,wx:price,coin:coin,course:course,integral:nil),hasNotStudent: isStudent) { [weak self] type in |
| | | guard let weakSelf = self else { return } |
| | | if type == .courseNum{ |
| | | PaymentCourseView.show(id: weakSelf.activityDetailModel.id,number:course) { id in |
| | | weakSelf.payment(type: type,paymentId: id) |
| | | } |
| | | }else{ |
| | | weakSelf.payment(type: type) |
| | | } |
| | | } |
| | | }else{ |
| | | weakSelf.navigationController?.qmui_popToRootViewController(animated: true, completion: { |
| | | NotificationCenter.default.post(name: ChooseHomeStore_Noti, object: nil) |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | private func payment(type:PayType,paymentId:Int? = nil){ |
| | | let ids = students.map({"\($0.id)"}).joined(separator: ",") |
| | | Services.paymentCompetition(id: activityDetailModel.id, userIds: ids, payType: type,coursePaymentId: paymentId).subscribe(onNext: {[weak self] data in |
| | | guard let weakSelf = self else { return } |
| | | if let m = data.data{ |
| | | switch type { |
| | | case .aliPay: |
| | |
| | | label_coin.text = String(format: "%ld币/人", activityDetailModel.playPaiCoin) |
| | | label_courseNum.text = String(format: "%ld课时/人", activityDetailModel.classPrice) |
| | | |
| | | let name = activityDetailModel.apply == 1 ? "已报名":"立即报名" |
| | | let color = activityDetailModel.apply == 1 ? UIColor.gray.withAlphaComponent(0.5):Def_ThemeColor |
| | | btn_enroll.setTitle(name, for: .normal) |
| | | btn_enroll.backgroundColor = color |
| | | // let name = activityDetailModel.apply == 1 ? "已报名":"立即报名" |
| | | // let color = activityDetailModel.apply == 1 ? UIColor.gray.withAlphaComponent(0.5):Def_ThemeColor |
| | | // btn_enroll.setTitle(name, for: .normal) |
| | | // btn_enroll.backgroundColor = color |
| | | |
| | | let imgs = activityDetailModel.imgs.components(separatedBy: ",") |
| | | var items = [CommonBannerModel]() |
| | |
| | | } |
| | | |
| | | @IBAction func joinAction(_ sender: UIButton) { |
| | | guard activityDetailModel.apply == 0 else {return} |
| | | let vc = ActivityDetailApplyVC(model: activityDetailModel) |
| | | push(vc: vc) |
| | | } |
| | |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "赛事活动列表" |
| | | title = "活动列表" |
| | | viewModel.configure(tableView,needMore: false) |
| | | viewModel.beginRefresh() |
| | | } |
| | |
| | | tableView.dataSource = self |
| | | tableView.separatorStyle = .none |
| | | tableView.register(UINib(nibName: "StudentInfo_2_TCell", bundle: nil), forCellReuseIdentifier: "_StudentInfo_2_TCell") |
| | | // tableView.jq_setEmptyView("暂无参赛人员") |
| | | // tableView.jq_setEmptyView("暂无活动人员") |
| | | } |
| | | |
| | | override func setRx() { |
New file |
| | |
| | | // |
| | | // StoresInfo_2_View.swift |
| | | // WanPai |
| | | // |
| | | // Created by 无故事王国 on 2023/11/8. |
| | | // |
| | | |
| | | import UIKit |
| | | import JQTools |
| | | |
| | | class StoresInfo_2_View: UIView,JQNibView{ |
| | | |
| | | @IBOutlet weak var view_container: UIView! |
| | | @IBOutlet weak var stack_view: UIStackView! |
| | | |
| | | |
| | | private var clouse:((Bool)->Void)! |
| | | |
| | | override func awakeFromNib() { |
| | | super.awakeFromNib() |
| | | view_container.transform = .init(scaleX: 0.1, y: 0.1) |
| | | alpha = 0 |
| | | layoutIfNeeded() |
| | | } |
| | | |
| | | static func show(_ stores:[String],clouse:@escaping (Bool)->Void){ |
| | | let storesView = StoresInfo_2_View.jq_loadNibView() |
| | | storesView.frame = sceneDelegate?.window?.frame ?? .zero |
| | | storesView.clouse = clouse |
| | | |
| | | for store in stores { |
| | | let label = UILabel(text: store) |
| | | label.text = store |
| | | label.textAlignment = .center |
| | | label.textColor = .black.withAlphaComponent(0.7) |
| | | label.font = UIFont.systemFont(ofSize: 14, weight: .semibold) |
| | | storesView.stack_view.addArrangedSubview(label) |
| | | } |
| | | |
| | | // storesView.label_content.attributedText = AttributedStringbuilder.build().add(string: stores, withFont: UIFont.systemFont(ofSize: 14, weight: .semibold), withColor: .black.withAlphaComponent(0.7), lineSpace: 4).mutableAttributedString |
| | | sceneDelegate?.window?.addSubview(storesView) |
| | | |
| | | UIView.animate(withDuration: 0.4) { |
| | | storesView.view_container.transform = CGAffineTransform(scaleX: 1.0, y: 1.0) |
| | | storesView.alpha = 1 |
| | | } |
| | | } |
| | | |
| | | @IBAction func cancelAction(_ sender: UIButton) { |
| | | close() |
| | | } |
| | | |
| | | |
| | | @IBAction func completeAction(_ sender: UIButton) { |
| | | close() |
| | | clouse(true) |
| | | } |
| | | |
| | | private func close(){ |
| | | UIView.animate(withDuration: 0.4) { |
| | | self.view_container.transform = .init(scaleX: 0.1, y: 0.1) |
| | | self.alpha = 0 |
| | | } completion: { _ in |
| | | self.removeFromSuperview() |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | <?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"> |
| | | <device id="retina6_12" orientation="portrait" appearance="light"/> |
| | | <dependencies> |
| | | <deployment identifier="iOS"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22131"/> |
| | | <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"/> |
| | | <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> |
| | | </dependencies> |
| | | <objects> |
| | | <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/> |
| | | <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> |
| | | <view contentMode="scaleToFill" id="iN0-l3-epB" customClass="StoresInfo_2_View" customModule="WanPai" customModuleProvider="target"> |
| | | <rect key="frame" x="0.0" y="0.0" width="393" height="852"/> |
| | | <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="aac-V4-Eez"> |
| | | <rect key="frame" x="14" y="348" width="365" height="181"/> |
| | | <subviews> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="参与门店" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Tfj-b9-BsK"> |
| | | <rect key="frame" x="150" y="17" width="65.333333333333314" height="22"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="22" id="XnP-sO-ijp"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/> |
| | | <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <button opaque="NO" contentMode="scaleToFill" ambiguous="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="VX5-ve-F9r"> |
| | | <rect key="frame" x="27" y="121" width="145.66666666666666" height="40"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="40" id="gO6-7D-tBu"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="15"/> |
| | | <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> |
| | | <state key="normal" title="取消"> |
| | | <color key="titleColor" name="FE6E0D"/> |
| | | </state> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="color" keyPath="borderColor"> |
| | | <color key="value" name="FE6E0D"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="borderWidth"> |
| | | <real key="value" value="1"/> |
| | | </userDefinedRuntimeAttribute> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius"> |
| | | <real key="value" value="20"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | <connections> |
| | | <action selector="cancelAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="XNk-lZ-wOL"/> |
| | | </connections> |
| | | </button> |
| | | <button opaque="NO" contentMode="scaleToFill" ambiguous="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="69m-4Z-8zI"> |
| | | <rect key="frame" x="192.66666666666663" y="121" width="145.33333333333337" height="40"/> |
| | | <color key="backgroundColor" name="FE6E0D"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="40" id="T1Y-sP-aBb"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="15"/> |
| | | <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> |
| | | <state key="normal" title="确认支付"> |
| | | <color key="titleColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | </state> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="cornerRadius"> |
| | | <real key="value" value="20"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | <connections> |
| | | <action selector="completeAction:" destination="iN0-l3-epB" eventType="touchUpInside" id="jmF-Ip-aI2"/> |
| | | </connections> |
| | | </button> |
| | | <stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="13" translatesAutoresizingMaskIntoConstraints="NO" id="NfF-aM-rUk"> |
| | | <rect key="frame" x="10" y="61" width="345" height="28"/> |
| | | </stackView> |
| | | </subviews> |
| | | <color key="backgroundColor" systemColor="systemBackgroundColor"/> |
| | | <constraints> |
| | | <constraint firstAttribute="trailing" secondItem="69m-4Z-8zI" secondAttribute="trailing" constant="27" id="3ZT-zf-aGe"/> |
| | | <constraint firstItem="69m-4Z-8zI" firstAttribute="top" secondItem="VX5-ve-F9r" secondAttribute="top" id="DKK-9w-TMk"/> |
| | | <constraint firstItem="NfF-aM-rUk" firstAttribute="centerX" secondItem="aac-V4-Eez" secondAttribute="centerX" id="Ecq-IU-j31"/> |
| | | <constraint firstItem="Tfj-b9-BsK" firstAttribute="centerX" secondItem="aac-V4-Eez" secondAttribute="centerX" id="H3g-Q4-TcJ"/> |
| | | <constraint firstAttribute="trailing" secondItem="NfF-aM-rUk" secondAttribute="trailing" constant="10" id="KSR-Cr-z8O"/> |
| | | <constraint firstItem="Tfj-b9-BsK" firstAttribute="top" secondItem="aac-V4-Eez" secondAttribute="top" constant="17" id="RBp-jQ-mqN"/> |
| | | <constraint firstItem="69m-4Z-8zI" firstAttribute="width" secondItem="VX5-ve-F9r" secondAttribute="width" id="S9h-Je-UsC"/> |
| | | <constraint firstItem="VX5-ve-F9r" firstAttribute="leading" secondItem="aac-V4-Eez" secondAttribute="leading" constant="27" id="SV9-yh-nSw"/> |
| | | <constraint firstItem="NfF-aM-rUk" firstAttribute="leading" secondItem="aac-V4-Eez" secondAttribute="leading" constant="10" id="Yau-zW-a49"/> |
| | | <constraint firstItem="VX5-ve-F9r" firstAttribute="top" secondItem="NfF-aM-rUk" secondAttribute="bottom" constant="32" id="a1l-0K-nWG"/> |
| | | <constraint firstItem="NfF-aM-rUk" firstAttribute="top" secondItem="Tfj-b9-BsK" secondAttribute="bottom" constant="22" id="dxS-ar-wWo"/> |
| | | <constraint firstAttribute="bottom" secondItem="VX5-ve-F9r" secondAttribute="bottom" constant="20" id="g8U-Wv-ZzZ"/> |
| | | <constraint firstItem="69m-4Z-8zI" firstAttribute="leading" secondItem="VX5-ve-F9r" secondAttribute="trailing" constant="20" id="zXI-5O-BKn"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> |
| | | <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> |
| | | <real key="value" value="6"/> |
| | | </userDefinedRuntimeAttribute> |
| | | </userDefinedRuntimeAttributes> |
| | | </view> |
| | | </subviews> |
| | | <viewLayoutGuide key="safeArea" id="vUN-kp-3ea"/> |
| | | <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.69999999999999996" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstItem="vUN-kp-3ea" firstAttribute="trailing" secondItem="aac-V4-Eez" secondAttribute="trailing" constant="14" id="OpL-D6-qoa"/> |
| | | <constraint firstItem="aac-V4-Eez" firstAttribute="centerY" secondItem="vUN-kp-3ea" secondAttribute="centerY" id="aUP-hp-4Ba"/> |
| | | <constraint firstItem="aac-V4-Eez" firstAttribute="centerX" secondItem="vUN-kp-3ea" secondAttribute="centerX" id="cYh-XP-qXn"/> |
| | | <constraint firstItem="aac-V4-Eez" firstAttribute="leading" secondItem="vUN-kp-3ea" secondAttribute="leading" constant="14" id="dOa-BD-Qwr"/> |
| | | </constraints> |
| | | <connections> |
| | | <outlet property="stack_view" destination="NfF-aM-rUk" id="PAx-TY-RJ6"/> |
| | | <outlet property="view_container" destination="aac-V4-Eez" id="Ge6-hx-bTO"/> |
| | | </connections> |
| | | <point key="canvasLocation" x="139.69465648854961" y="20.422535211267608"/> |
| | | </view> |
| | | </objects> |
| | | <resources> |
| | | <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> |
| | | </resources> |
| | | </document> |
| | |
| | | sceneDelegate?.window?.addSubview(storesView) |
| | | storesView.cons_bottom.constant = 0 |
| | | storesView.tf_phone.text = model.phone |
| | | storesView.tf_height.text = model.height.string |
| | | storesView.tf_weight.text = model.weight.string |
| | | storesView.tf_height.text = "\(model.height.int)" |
| | | storesView.tf_weight.text = "\(model.weight.int)" |
| | | |
| | | UIView.animate(withDuration: 0.4) { |
| | | storesView.alpha = 1 |
| | |
| | | guard tf_weight.text!.int != 0 else {alertError(msg: "请输入正确的体重");return} |
| | | |
| | | self.endEditing(true) |
| | | Services.editParticipant(id: model!.id, height: tf_height.text!.int!, weight: tf_weight.text!.int!, phone: tf_phone.text,isStudent: model!.isStudent).subscribe(onNext: {data in |
| | | Services.editParticipant(id: model!.id, height: tf_height.text!.int ?? 0, weight: tf_weight.text!.int ?? 0, phone: tf_phone.text,isStudent: model!.isStudent).subscribe(onNext: {data in |
| | | alertSuccess(msg: "修改成功") |
| | | DispatchQueue.main.asyncAfter(deadline: .now()+1) { |
| | | NotificationCenter.default.post(name: StudentUpdate_Nofi, object: nil) |
| | |
| | | <?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="22155" 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="22130"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22131"/> |
| | | <capability name="Named colors" 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"/> |
| | |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ipR-Qm-467"> |
| | | <rect key="frame" x="168.33333333333337" y="39" width="153.66666666666663" height="13.333333333333336"/> |
| | | <rect key="frame" x="168.33333333333337" y="39" width="179.66666666666663" height="13.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="11"/> |
| | | <color key="textColor" red="0.23921568627450979" green="0.24313725490196078" blue="0.27058823529411763" alpha="0.69999999999999996" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | |
| | | <constraint firstItem="ipR-Qm-467" firstAttribute="top" secondItem="sRF-Wi-a0T" secondAttribute="bottom" constant="4" id="1Mp-Ed-ktl"/> |
| | | <constraint firstItem="BbO-Ve-6Ru" firstAttribute="bottom" secondItem="PxT-nX-Lp5" secondAttribute="bottom" id="AIc-He-2Mh"/> |
| | | <constraint firstAttribute="bottom" secondItem="FLy-JX-VOh" secondAttribute="bottom" id="Agr-CJ-fHk"/> |
| | | <constraint firstAttribute="trailing" secondItem="ipR-Qm-467" secondAttribute="trailing" constant="39" id="CCN-wj-dEh"/> |
| | | <constraint firstAttribute="trailing" secondItem="ipR-Qm-467" secondAttribute="trailing" constant="13" id="CCN-wj-dEh"/> |
| | | <constraint firstAttribute="trailing" secondItem="FLy-JX-VOh" secondAttribute="trailing" constant="12" id="Efd-WO-zFw"/> |
| | | <constraint firstItem="zTl-3I-CmB" firstAttribute="centerY" secondItem="R4u-Yo-mQ2" secondAttribute="centerY" id="GXy-UK-1E8"/> |
| | | <constraint firstItem="FLy-JX-VOh" firstAttribute="top" secondItem="PxT-nX-Lp5" secondAttribute="bottom" constant="13" id="H84-dZ-k9i"/> |
| | |
| | | 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 |
| | |
| | | |
| | | |
| | | if let m = detailModel{ |
| | | let vc = CourseDetailApplyVC(detailModel: m) |
| | | let vc = CourseDetailApplyVC(detailModel: m,isExtend: signUpCourseModel?.payStatus == 2) |
| | | push(vc: vc) |
| | | } |
| | | } |
| | |
| | | for (index,img) in imgs.enumerated(){ |
| | | items.append(CommonBannerModel(index: index,resource: img,mediaType: .imageUrl)) |
| | | } |
| | | self?.searchView.bannerView.setItems(items: items) |
| | | self?.searchView.bannerView.setItems(items: items,selectClouse: { m in |
| | | let index = m.index |
| | | jumpPage(model: models[index].model, page: models[index].page, type: models[index].type, id: models[index].turnId) |
| | | }) |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | |
| | |
| | | self?.label_introduce.text = model.synopsis |
| | | self?.label_studyState.isHidden = false |
| | | if model.studyStatus == 1{ |
| | | self?.label_studyState.text = "已学习" |
| | | self?.label_studyState.backgroundColor = UIColor(hexStr: "#318C10").withAlphaComponent(0.29) |
| | | self?.label_studyState.textColor = UIColor(hexStr: "#318C10") |
| | | }else{ |
| | | self?.label_studyState.text = "未学习" |
| | | self?.label_studyState.backgroundColor = UIColor(hexStr: "#FD9331").withAlphaComponent(0.29) |
| | | self?.label_studyState.textColor = Def_ThemeColor |
| | | }else{ |
| | | self?.label_studyState.text = "已学习" |
| | | self?.label_studyState.backgroundColor = UIColor(hexStr: "#318C10").withAlphaComponent(0.29) |
| | | self?.label_studyState.textColor = UIColor(hexStr: "#318C10") |
| | | } |
| | | |
| | | if let videoUrl = URL(string: model.videoURL){ |
| | |
| | | if timeDuration >= CMTimeGetSeconds((playerVC.player?.currentItem?.duration)!) && m.studyStatus == 0 { |
| | | Services.updateVideoStatus(coursePackageId: m.coursePackageId, videoId: m.videoId).subscribe(onNext: {[weak self] data in |
| | | alertSuccess(msg: "已获得积分") |
| | | self?.exerciseVideoDetailModel?.studyStatus = 1 |
| | | self?.exerciseVideoDetailModel?.studyStatus = 2 |
| | | self?.label_studyState.text = "已学习" |
| | | self?.label_studyState.backgroundColor = UIColor(hexStr: "#318C10").withAlphaComponent(0.29) |
| | | self?.label_studyState.textColor = UIColor(hexStr: "#318C10") |
| | |
| | | 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)) |
| | | case .sport: |
| | | self?.items.append(MentalInfo(icon: UIImage(named: "icon_coupon_2"), l1: "EVENTS", l2: model.medalName, level: model.levelNum, info: String(format: "再参与赛事%@次可升级LV%ld", model.upgradeConditions,model.nextLevel), btnName: "去报名",medalType: model.medalType)) |
| | | self?.items.append(MentalInfo(icon: UIImage(named: "icon_coupon_2"), l1: "EVENTS", l2: model.medalName, level: model.levelNum, info: String(format: "再参与活动%@次可升级LV%ld", model.upgradeConditions,model.nextLevel), btnName: "去报名",medalType: model.medalType)) |
| | | } |
| | | } |
| | | self?.tableView.reloadData() |
| | |
| | | private var storeId:Int? |
| | | private var currentLocal:CLLocation? |
| | | |
| | | override func viewDidAppear(_ animated: Bool) { |
| | | super.viewDidAppear(animated) |
| | | if let nav = navigationController as? BaseNav{ |
| | | nav.navigationController(nav, willShow: self, animated: true) |
| | | } |
| | | } |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | startLocation() |
| | | |
| | | |
| | | // let vc = PaymentResultVC(result: .success, objType: .member) |
| | | // push(vc: vc) |
| | | |
| | | |
| | | |
| | | Services.startCourseHome().subscribe(onNext: {[weak self] data in |
| | | if let model = data.data{ |
| | |
| | | // |
| | | // JoinMemberIntroduceVC.swift |
| | | // WanPai |
| | | // |
| | | // Created by 杨锴 on 2023/6/8. |
| | | // |
| | | // |
| | | // JoinMemberIntroduceVC.swift |
| | | // WanPai |
| | | // |
| | | // Created by 杨锴 on 2023/6/8. |
| | | // |
| | | |
| | | import UIKit |
| | | import QMUIKit |
| | |
| | | import JQTools |
| | | |
| | | class JoinMemberIntroduceVC: BaseVC { |
| | | @IBOutlet weak var btn_join: QMUIButton! |
| | | @IBOutlet weak var webView: WKWebView! |
| | | @IBOutlet weak var btn_join: QMUIButton! |
| | | @IBOutlet weak var webView: WKWebView! |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "成为会员" |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "成为会员" |
| | | |
| | | Services.querySystemImg(type: .becomeVip).subscribe(onNext: {data in |
| | | if let imgString = data.data{ |
| | | let html = "<img src='\(imgString)' width='\(JQ_ScreenW)' loading=eager/>" |
| | | self.webView.loadHTMLString(html.jq_wrapHtml(), baseURL: nil) |
| | | } |
| | | }) { error in |
| | | Services.querySystemImg(type: .becomeVip).subscribe(onNext: {data in |
| | | if let imgString = data.data{ |
| | | let html = "<img src='\(imgString)' width='\(JQ_ScreenW)' loading=eager/>" |
| | | self.webView.loadHTMLString(html.jq_wrapHtml(), baseURL: nil) |
| | | } |
| | | }) { error in |
| | | |
| | | }.disposed(by: disposeBag) |
| | | } |
| | | |
| | | override func setUI() { |
| | | btn_join.spacingBetweenImageAndTitle = 3 |
| | | btn_join.imagePosition = .left |
| | | } |
| | | |
| | | |
| | | @IBAction func joinAction(_ sender: QMUIButton) { |
| | | }.disposed(by: disposeBag) |
| | | } |
| | | |
| | | override func setUI() { |
| | | btn_join.spacingBetweenImageAndTitle = 3 |
| | | btn_join.imagePosition = .left |
| | | } |
| | | |
| | | |
| | | @IBAction func joinAction(_ sender: QMUIButton) { |
| | | |
| | | var price = 0.01 |
| | | #if !DEBUG |
| | |
| | | if let er = error as? NetworkRequest.NetRequestError{ |
| | | switch er { |
| | | case .Other(let code,let string): |
| | | let vc = PaymentResultVC(result: .fail(string,code), objType: .games) |
| | | let vc = PaymentResultVC(result: .fail(string,code), objType: .member) |
| | | weakSelf.push(vc: vc) |
| | | default: |
| | | let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .games) |
| | | let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .member) |
| | | weakSelf.push(vc: vc) |
| | | } |
| | | } |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> |
| | | <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"> |
| | | <device id="retina6_12" orientation="portrait" appearance="light"/> |
| | | <dependencies> |
| | | <deployment identifier="iOS"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/> |
| | | <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22131"/> |
| | | <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"/> |
| | |
| | | <autoresizingMask key="autoresizingMask"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="tgl-HJ-o47"> |
| | | <rect key="frame" x="14" y="10" width="431" height="122"/> |
| | | <rect key="frame" x="14" y="7.6666666666666714" width="431" height="127.00000000000001"/> |
| | | <subviews> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="1000" verticalHuggingPriority="251" image="icon_coupon_header" translatesAutoresizingMaskIntoConstraints="NO" id="zmS-eg-Mj0"> |
| | | <rect key="frame" x="0.0" y="0.0" width="100" height="122"/> |
| | | <rect key="frame" x="0.0" y="0.0" width="100" height="127"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="100" id="Q7m-lv-Y2D"/> |
| | | </constraints> |
| | | </imageView> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_coupon_footer" translatesAutoresizingMaskIntoConstraints="NO" id="gIO-rm-Idg"> |
| | | <rect key="frame" x="100" y="0.0" width="331" height="122"/> |
| | | <rect key="frame" x="100" y="0.0" width="331" height="127"/> |
| | | </imageView> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0元" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3QE-LO-GFM"> |
| | | <rect key="frame" x="5" y="5" width="90" height="112"/> |
| | | <rect key="frame" x="5" y="5" width="90" height="117"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="24"/> |
| | | <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="有效期至--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7mn-yy-wtX"> |
| | | <rect key="frame" x="0.0" y="20" width="241" height="17"/> |
| | | <rect key="frame" x="0.0" y="20.000000000000007" width="241" height="17"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="17" id="FUm-Cr-mcZ"/> |
| | | </constraints> |
| | |
| | | </subviews> |
| | | </stackView> |
| | | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="uap-oQ-COV"> |
| | | <rect key="frame" x="361" y="49.666666666666664" width="61" height="22.999999999999993"/> |
| | | <rect key="frame" x="361" y="52" width="61" height="23"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="61" id="E0U-vG-ym7"/> |
| | | <constraint firstAttribute="height" constant="23" id="swg-VA-9gM"/> |
| | |
| | | </view> |
| | | </subviews> |
| | | <constraints> |
| | | <constraint firstItem="tgl-HJ-o47" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="10" id="IAF-yN-tsN"/> |
| | | <constraint firstAttribute="bottom" secondItem="tgl-HJ-o47" secondAttribute="bottom" constant="10" id="IHo-qw-9LQ"/> |
| | | <constraint firstItem="tgl-HJ-o47" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="7.5" id="IAF-yN-tsN"/> |
| | | <constraint firstAttribute="bottom" secondItem="tgl-HJ-o47" secondAttribute="bottom" constant="7.5" id="IHo-qw-9LQ"/> |
| | | <constraint firstItem="tgl-HJ-o47" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="14" id="elG-km-OZX"/> |
| | | <constraint firstAttribute="trailing" secondItem="tgl-HJ-o47" secondAttribute="trailing" constant="14" id="vx5-fe-yx7"/> |
| | | </constraints> |
| | |
| | | case .success: |
| | | btn_again.setTitle("查看报名", for: .normal) |
| | | btn_back.setTitle("返回首页", for: .normal) |
| | | label_content.text = "报名成功,请注意赛事开始时间!" |
| | | label_content.text = "报名成功,请注意活动开始时间!" |
| | | case .none:break |
| | | } |
| | | |
| | |
| | | private var storesModel = [CityProfileModel]() |
| | | |
| | | |
| | | private var clouse:((CityProfileModel,CityProfileModel?,CityProfileModel)->Void)! |
| | | private var clouse:((CityProfileModel,CityProfileModel?,CityProfileModel)->Void)? |
| | | private var clouse2:((CityProfileModel?,CityProfileModel?,CityProfileModel?)->Void)? |
| | | private let disposeBag = DisposeBag() |
| | | |
| | | private var defaultStoreModel:HomeStoreModel? |
| | |
| | | storesView.getData() |
| | | } |
| | | } |
| | | |
| | | static func showMarket(defaultM:HomeStoreModel? = nil, clouse:@escaping (CityProfileModel?,CityProfileModel?,CityProfileModel?)->Void){ |
| | | let storesView = StoresChooseView.jq_loadNibView() |
| | | storesView.clouse2 = clouse |
| | | storesView.defaultStoreModel = defaultM |
| | | storesView.frame = sceneDelegate?.window?.frame ?? .zero |
| | | sceneDelegate?.window?.addSubview(storesView) |
| | | |
| | | if let m = defaultM{ |
| | | storesView.label_city.text = m.city.isEmpty ? "选择城市":m.city |
| | | storesView.label_province.text = m.province.isEmpty ? "选择省份":m.province |
| | | storesView.label_currently.text = m.name.isEmpty ? "选择门店":m.name |
| | | |
| | | if m.provinceCode != 0{ |
| | | storesView.provinceModel = CityProfileModel(id: 0, code: m.provinceCode, name: m.province) |
| | | storesView.getData(m.provinceCode) |
| | | storesView.getStore(nil,provinceCode: m.provinceCode) |
| | | } |
| | | |
| | | if m.cityCode != 0{ |
| | | storesView.cityModel = CityProfileModel(id: 0, code: m.cityCode, name: m.city) |
| | | } |
| | | |
| | | if m.storeId != 0{ |
| | | storesView.storeModel = CityProfileModel(id: m.storeId, code: 0, name: m.name) |
| | | } |
| | | } |
| | | |
| | | UIView.animate(withDuration: 0.4) { |
| | | storesView.view_container.transform = CGAffineTransform(scaleX: 1.0, y: 1.0) |
| | | storesView.alpha = 1 |
| | | }completion: { _ in |
| | | storesView.getData() |
| | | } |
| | | } |
| | | |
| | | private func getData(_ provinceId:Int? = nil){ |
| | | Services.queryProvinceAndCity(pcode: provinceId).subscribe(onNext: { [weak self] data in |
| | |
| | | } |
| | | |
| | | @IBAction func completeAction(_ sender: UIButton) { |
| | | |
| | | |
| | | if let c = clouse2{ |
| | | c(provinceModel,cityModel,storeModel) |
| | | close() |
| | | return |
| | | } |
| | | |
| | | guard provinceModel != nil else { |
| | | alertError(msg: "请先选择省份");return |
| | | } |
| | |
| | | let item = actViewModel.dataSource.value[indexPath.row] |
| | | if self.selectStudents.contains(where: {($0 as! ActivityDetailPartModel).id == item.id}){ |
| | | if self.selectStudents.count == 1{ |
| | | alert(msg: "至少选择一位参赛运动营成员");return |
| | | alert(msg: "至少选择一位运动营成员");return |
| | | } |
| | | if let index = self.selectStudents.firstIndex(where: {($0 as! ActivityDetailPartModel).id == item.id}){ |
| | | self.selectStudents.remove(at: index) |
| | |
| | | mapView.frame = CGRect(origin: .zero, size: view_container.size) |
| | | |
| | | for (index,v) in models.enumerated(){ |
| | | let point = MAPointAnnotation() |
| | | let point = CustomPointAnnotation() |
| | | point.coordinate = CLLocationCoordinate2D(latitude: v.latitude, longitude:v.longitude) |
| | | point.title = v.storeName |
| | | point.title = v.storeAddr |
| | | point.index = index |
| | | v.index = index |
| | | v.annotation = point |
| | | } |
| | | |
| | | let points = models.map({$0.annotation}) as! [MAPointAnnotation] |
| | | let points = models.map({$0.annotation}) as! [CustomPointAnnotation] |
| | | mapView.addAnnotations(points) |
| | | mapView.showAnnotations(points, animated: true) |
| | | mapView.selectAnnotation(points.first!, animated: true) |
| | |
| | | extension SearchVC:MAMapViewDelegate{ |
| | | |
| | | func mapView(_ mapView: MAMapView!, viewFor annotation: MAAnnotation!) -> MAAnnotationView! { |
| | | if annotation is MAPointAnnotation{ |
| | | var pointView = mapView.dequeueReusableAnnotationView(withIdentifier: "point") |
| | | if annotation is CustomPointAnnotation{ |
| | | var pointView = mapView.dequeueReusableAnnotationView(withIdentifier: "point") as? CustomPointAnnotationView |
| | | if pointView == nil{ |
| | | pointView = MAAnnotationView(annotation: annotation, reuseIdentifier: "point") |
| | | pointView = CustomPointAnnotationView(annotation: annotation, reuseIdentifier: "point") |
| | | } |
| | | pointView?.canShowCallout = true |
| | | pointView?.label.text = "\((annotation as! CustomPointAnnotation).index + 1)" |
| | | pointView?.image = UIImage(named: "icon_point")?.withTintColor(UIColor(hexStr: "#f54444")) |
| | | return pointView |
| | | } |
| | |
| | | setUI() |
| | | } |
| | | |
| | | override init(frame: CGRect) { |
| | | super.init(frame: frame) |
| | | |
| | | } |
| | | |
| | | |
| | | private func setUI(){ |
| | | label = UILabel(text: "123") |
| | | label.textColor = .black |
| | | label = UILabel(text: "") |
| | | label.textColor = .white |
| | | label.font = UIFont.systemFont(ofSize: 11, weight: .medium) |
| | | addSubview(label) |
| | | label.snp.makeConstraints { make in |
| | | make.center.equalToSuperview() |
| | | make.center.equalToSuperview().inset(UIEdgeInsets(top: -3, left: 0, bottom: 0, right: 0)) |
| | | } |
| | | } |
| | | |
| | |
| | | label_price.text = billingModel.consumeAmount.jq_formatFloat |
| | | label_price.textColor = UIColor(hexStr: "#FD2A02") |
| | | }else{ |
| | | label_price.text = billingModel.consumeAmount.jq_formatFloat |
| | | label_price.text = "+" + billingModel.consumeAmount.jq_formatFloat |
| | | label_price.textColor = UIColor(hexStr: "#2AA60B") |
| | | } |
| | | } |
| | |
| | | let model = viewModel.dataSource.value[indexPath.row] |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "_BillInfoTCell") as! BillInfoTCell |
| | | cell.billingModel = model |
| | | |
| | | if viewModel.subType.value == .coin{ |
| | | if model.detailsType == .positive{ |
| | | cell.label_price.textColor = UIColor(hexStr: "#FD7302") |
| | | }else{ |
| | | cell.label_price.textColor = UIColor(hexStr: "#FD2A02") |
| | | } |
| | | } |
| | | return cell |
| | | } |
| | | |
| | |
| | | // var mpower = max(1,studentModels.count) //倍率 |
| | | |
| | | if exchangeGoodsModel!.perLimit > 1{ |
| | | ChooseNumberView.show(maxNumber: exchangeGoodsModel!.perLimit) {[weak self] num in |
| | | var n = exchangeGoodsModel!.perLimit |
| | | if exchangeGoodsModel!.goodType == .course{ |
| | | n = floor(Double(exchangeGoodsModel!.perLimit / studentModels.count)).int |
| | | } |
| | | |
| | | ChooseNumberView.show(maxNumber: n) {[weak self] num in |
| | | self?.showExchangeUI(num: num) |
| | | } |
| | | }else{ |
| | |
| | | |
| | | extension WelfareVC:UICollectionViewDataSource{ |
| | | func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { |
| | | return benefitHomeModel?.commodities.count ?? 0 |
| | | let resultCount = min(5,benefitHomeModel?.commodities.count ?? 0) |
| | | return resultCount |
| | | } |
| | | |
| | | func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { |
| | |
| | | } |
| | | |
| | | @IBAction func storeAction(_ sender: UIButton) { |
| | | StoresChooseView.show { [weak self] province,city,store in |
| | | self?.btn_store.setTitle(store.name, for: .normal) |
| | | self?.viewModel.shopId.accept(store.id) |
| | | StoresChooseView.showMarket { [weak self] province,city,store in |
| | | self?.btn_store.setTitle(store?.name ?? "选择门店", for: .normal) |
| | | self?.viewModel.shopId.accept(store?.id) |
| | | self?.viewModel.beginRefresh() |
| | | } |
| | | } |
| | |
| | | @IBOutlet weak var label_dealtime: UILabel! |
| | | |
| | | private var timer:Timer? |
| | | |
| | | private var yardBookingModel:YardBookingModel! |
| | | private var siteBookingId:Int? |
| | | private var yardBookingModel:YardBookingModel? |
| | | private var yardBookingDetailDataModel:YardBookingDetailDataModel? |
| | | |
| | | init(model:YardBookingModel) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.yardBookingModel = model |
| | | } |
| | | |
| | | init(siteBookingId:Int) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.siteBookingId = siteBookingId |
| | | } |
| | | |
| | | required init?(coder: NSCoder) { |
| | |
| | | super.viewDidLoad() |
| | | title = "我的预约" |
| | | |
| | | label_title.text = yardBookingModel.name |
| | | label_address.text = String(format: "%@(%@)", yardBookingModel.storeName,yardBookingModel.storeAddress) |
| | | label_type.text = yardBookingModel.siteTypeName |
| | | view_yard.isHidden = yardBookingModel.siteTypeName.isEmpty |
| | | // if let model = yardBookingModel{ |
| | | // label_title.text = model.name |
| | | // label_address.text = String(format: "%@(%@)", model.storeName,model.storeAddress) |
| | | // label_type.text = model.siteTypeName |
| | | // view_yard.isHidden = model.siteTypeName.isEmpty |
| | | // } |
| | | |
| | | getData() |
| | | } |
| | | |
| | | private func getData(){ |
| | | Services.siteDetail(id: yardBookingModel.id).subscribe(onNext: {[weak self] data in |
| | | var id = 0 |
| | | if yardBookingModel != nil{ |
| | | id = yardBookingModel!.id |
| | | }else{ |
| | | id = siteBookingId! |
| | | } |
| | | |
| | | Services.siteDetail(id: id).subscribe(onNext: {[weak self] data in |
| | | if let model = data.data?.data{ |
| | | self?.yardBookingDetailDataModel = model |
| | | |
| | | self?.label_title.text = data.data!.siteName |
| | | self?.label_address.text = String(format: "%@(%@)", data.data!.shopName,data.data!.shopAddress) |
| | | self?.label_type.text = data.data!.siteType |
| | | self?.view_yard.isHidden = data.data!.siteType.isEmpty |
| | | |
| | | self?.label_yardName.text = model.nextName |
| | | self?.label_yardName.isHidden = model.nextName.isEmpty |
| | | self?.label_bookingType.text = model.isHalf == 1 ? "半场":"全场" |
| | |
| | | |
| | | |
| | | @IBAction func cancelAction(_ sender: UIButton) { |
| | | |
| | | var id = 0 |
| | | if yardBookingModel != nil{ |
| | | id = yardBookingModel!.id |
| | | }else{ |
| | | id = siteBookingId! |
| | | } |
| | | |
| | | CommonAlertView.show(title: "提示", content: "确认取消本次的预约吗?") {[weak self] status in |
| | | if status{ |
| | | guard let weakSelf = self else { return } |
| | | Services.cancelMySite(id: weakSelf.yardBookingModel.id).subscribe(onNext: { data in |
| | | Services.cancelMySite(id: id).subscribe(onNext: { data in |
| | | weakSelf.getData() |
| | | }) { error in |
| | | |
| | |
| | | } |
| | | |
| | | @IBAction func paymentAction(_ sender: UIButton) { |
| | | Services.continuePaymentPrice(id: yardBookingModel.id).subscribe(onNext: {data in |
| | | |
| | | var id = 0 |
| | | if yardBookingModel != nil{ |
| | | id = yardBookingModel!.id |
| | | }else{ |
| | | id = siteBookingId! |
| | | } |
| | | |
| | | Services.continuePaymentPrice(id: id).subscribe(onNext: {data in |
| | | if let model = data.data{ |
| | | PaymentView.show(money: (ali: model.cash, wx: model.cash, coin: model.playPaiCoin, course: nil,integral:nil)) { [weak self] paytype in |
| | | guard let weakSelf = self else { return } |
| | | Services.continuePayment(id: weakSelf.yardBookingModel.id, payType: paytype).subscribe(onNext: {data in |
| | | Services.continuePayment(id: id, payType: paytype).subscribe(onNext: {data in |
| | | if let m = data.data{ |
| | | switch paytype { |
| | | case .aliPay: |
| | |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Dtc-xv-Gmh"> |
| | | <rect key="frame" x="282" y="15.333333333333329" width="40" height="19"/> |
| | | <subviews> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aO5-bJ-0tv"> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aO5-bJ-0tv"> |
| | | <rect key="frame" x="5" y="2" width="30" height="15"/> |
| | | <fontDescription key="fontDescription" type="system" weight="medium" pointSize="10"/> |
| | | <color key="textColor" red="0.99215686270000003" green="0.45098039220000002" blue="0.0078431372550000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | |
| | | </view> |
| | | </subviews> |
| | | <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> |
| | | <constraints> |
| | | <constraint firstAttribute="bottom" secondItem="1hl-Kq-mul" secondAttribute="bottom" id="j6f-3p-P7a"/> |
| | | </constraints> |
| | | <userDefinedRuntimeAttributes> |
| | | <userDefinedRuntimeAttribute type="size" keyPath="shadowOffset"> |
| | | <size key="value" width="0.0" height="2"/> |
| | |
| | | switch result { |
| | | case .success: |
| | | NotificationCenter.default.post(name: UpdateDetailDate_Noti, object: nil) |
| | | //todo |
| | | let vc = YardBookingDetailVC(siteBookingId: m.siteBooking) |
| | | weakSelf.push(vc: vc) |
| | | case .cancel: |
| | | alert(msg: "交易取消") |
| | | let vc = YardBookingListVC(page: 5) |
| | |
| | | case .wechat,.integral:break |
| | | case .coin: |
| | | NotificationCenter.default.post(name: UpdateDetailDate_Noti, object: nil) |
| | | //todo |
| | | let vc = YardBookingDetailVC(siteBookingId: m.siteBooking) |
| | | weakSelf.push(vc: vc) |
| | | case .courseNum:break |
| | | } |
| | | } |
| | |
| | | UIView.animate(withDuration: 0.5) { |
| | | self.view.layoutIfNeeded() |
| | | } |
| | | |
| | | var halfName:String? |
| | | var nextName:String? |
| | | if halfIndex != nil{ |
| | | halfName = siteDetailModel.halfName[halfIndex!] |
| | | } |
| | | |
| | | if siteDetailModel.nextName.count > 0{ |
| | | nextName = siteDetailModel.nextName[yardIndex] |
| | | } |
| | | vc.querySiteTimes(halfName: halfName, siteName: nextName) |
| | | } |
| | | } |
| | | |