WanPai/Assets.xcassets/Bg/.DS_StoreBinary files differ
WanPai/Assets.xcassets/Bg/bg_long.imageset/bg_long@2x.pngWanPai/Assets.xcassets/Bg/bg_long.imageset/bg_long@3x.pngWanPai/Assets.xcassets/Icons/.DS_StoreBinary files differ
WanPai/Assets.xcassets/Icons/icon_coupon_7.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "filename" : "Ô½Õ½Ô½ÓÂ@2x.png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "Ô½Õ½Ô½ÓÂ@3x.png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } WanPai/Assets.xcassets/Icons/icon_coupon_7.imageset/Ô½Õ½Ô½ÓÂ@2x.png
WanPai/Assets.xcassets/Icons/icon_coupon_7.imageset/Ô½Õ½Ô½ÓÂ@3x.png
WanPai/Assets.xcassets/Icons/icon_coupon_8.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "filename" : "³£Ê¤½«¾ü@2x.png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "³£Ê¤½«¾ü@3x.png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } WanPai/Assets.xcassets/Icons/icon_coupon_8.imageset/³£Ê¤½«¾ü@2x.png
WanPai/Assets.xcassets/Icons/icon_coupon_8.imageset/³£Ê¤½«¾ü@3x.png
WanPai/Assets.xcassets/Icons/icon_lose.imageset/Contents.json
New file @@ -0,0 +1,22 @@ { "images" : [ { "idiom" : "universal", "scale" : "1x" }, { "filename" : "icon_lose@2x.png", "idiom" : "universal", "scale" : "2x" }, { "filename" : "icon_lose@3x.png", "idiom" : "universal", "scale" : "3x" } ], "info" : { "author" : "xcode", "version" : 1 } } WanPai/Assets.xcassets/Icons/icon_lose.imageset/icon_lose@2x.png
WanPai/Assets.xcassets/Icons/icon_lose.imageset/icon_lose@3x.png
WanPai/Common/VC/CommonWebVC.swift
@@ -16,11 +16,13 @@ @IBOutlet weak var webView: WKWebView! @IBOutlet weak var cons_webHeight: NSLayoutConstraint! @IBOutlet weak var view_btns: UIView! private var needBackBtn:Bool? init(type:AgreentType,customTitle:String? = nil,content:String? = nil) { init(type:AgreentType,customTitle:String? = nil,content:String? = nil,needBackBtn:Bool? = nil) { super.init(nibName: nil, bundle: nil) self.type = type self.content = content self.needBackBtn = needBackBtn } required init?(coder: NSCoder) { @@ -98,7 +100,9 @@ switch type { case .user,.safe,.privacy: view_btns.isHidden = false navigationItem.leftBarButtonItem = UIBarButtonItem() if needBackBtn == false{ navigationItem.leftBarButtonItem = UIBarButtonItem() } default: view_btns.isHidden = true } WanPai/Common/View/PaymentView.swift
@@ -21,152 +21,152 @@ case worldCup } @IBOutlet weak var view_container: UIView! @IBOutlet weak var cons_bottom: NSLayoutConstraint! @IBOutlet weak var btn_wechat: UIButton! @IBOutlet weak var btn_alipay: UIButton! @IBOutlet weak var btn_coin: UIButton! @IBOutlet weak var btn_course: UIButton! @IBOutlet weak var label_integral: UILabel! @IBOutlet weak var view_wechat: UIView! @IBOutlet weak var view_alipay: UIView! @IBOutlet weak var view_coin: UIView! @IBOutlet weak var view_course: UIView! @IBOutlet weak var view_integral: UIView! @IBOutlet weak var label_wechatMoney: UILabel! @IBOutlet weak var label_aliPayMoney: UILabel! @IBOutlet weak var label_coinMoney: UILabel! @IBOutlet weak var label_courseMoney: UILabel! @IBOutlet weak var btn_complete: UIButton! @IBOutlet weak var btn_integral: UIButton! private var hasNotStudent:Bool = false private var clouse:((PayType)->Void)? private var payType:PayType! private var paymentEnumType:PaymentEnumType! private var customType = [PayType]() //支付项目 @IBOutlet weak var view_container: UIView! @IBOutlet weak var cons_bottom: NSLayoutConstraint! @IBOutlet weak var btn_wechat: UIButton! @IBOutlet weak var btn_alipay: UIButton! @IBOutlet weak var btn_coin: UIButton! @IBOutlet weak var btn_course: UIButton! @IBOutlet weak var label_integral: UILabel! override func awakeFromNib() { super.awakeFromNib() @IBOutlet weak var view_wechat: UIView! @IBOutlet weak var view_alipay: UIView! @IBOutlet weak var view_coin: UIView! @IBOutlet weak var view_course: UIView! @IBOutlet weak var view_integral: UIView! cons_bottom.constant = -(225 + UIDevice.jq_safeEdges.bottom) view_wechat.isHidden = true view_coin.isHidden = true view_course.isHidden = true view_alipay.isHidden = true alpha = 0 @IBOutlet weak var label_wechatMoney: UILabel! @IBOutlet weak var label_aliPayMoney: UILabel! @IBOutlet weak var label_coinMoney: UILabel! @IBOutlet weak var label_courseMoney: UILabel! @IBOutlet weak var btn_complete: UIButton! @IBOutlet weak var btn_integral: UIButton! private var hasNotStudent:Bool = false private var clouse:((PayType)->Void)? private var payType:PayType! private var paymentEnumType:PaymentEnumType! private var customType = [PayType]() //支付项目 layoutIfNeeded() } override func awakeFromNib() { super.awakeFromNib() static func show(enumType:PaymentEnumType,money:(ali:Double?,wx:Double?,coin:Int?,course:Int?,integral:Int?),hasNotStudent:Bool = false,_ clouse:@escaping (PayType)->Void){ let paymentView = PaymentView.jq_loadNibView() paymentView.frame = sceneDelegate?.window?.frame ?? .zero paymentView.clouse = clouse paymentView.paymentEnumType = enumType // paymentView.view_wechat.isHidden = (money.wx == nil || money.wx == 0) paymentView.view_coin.isHidden = (money.coin == nil || money.coin == 0) paymentView.view_course.isHidden = (money.course == nil || money.course == 0) paymentView.view_alipay.isHidden = (money.ali == nil || money.ali == 0) paymentView.view_integral.isHidden = (money.integral == nil || money.integral == 0) paymentView.label_aliPayMoney.text = money.ali?.currency() ?? "0" paymentView.label_wechatMoney.text = money.wx?.currency() ?? "0" paymentView.label_coinMoney.text = "\(money.coin ?? 0)币" paymentView.label_courseMoney.text = "\(money.course ?? 0)课时" paymentView.label_integral.text = "\(money.integral ?? 0)积分" paymentView.view_course.alpha = hasNotStudent ? 0.5:1 sceneDelegate?.window?.addSubview(paymentView) paymentView.cons_bottom.constant = 0 cons_bottom.constant = -(225 + UIDevice.jq_safeEdges.bottom) view_wechat.isHidden = true view_coin.isHidden = true view_course.isHidden = true view_alipay.isHidden = true alpha = 0 var customType = [PayType]() if !paymentView.view_alipay.isHidden{customType.append(.aliPay)} if !paymentView.view_wechat.isHidden{customType.append(.wechat)} if !paymentView.view_coin.isHidden{customType.append(.coin)} paymentView.customType = customType paymentView.btn_course.isUserInteractionEnabled = !hasNotStudent paymentView.payType = customType.first switch customType.first { case .aliPay:paymentView.btn_alipay.isSelected = true case .coin:paymentView.btn_coin.isSelected = true case .wechat:paymentView.btn_wechat.isSelected = true default:break } UIView.animate(withDuration: 0.4) { paymentView.alpha = 1 paymentView.layoutIfNeeded() } } override func layoutSubviews() { super.layoutSubviews() view_container.jq_addCorners(corner: [.topLeft,.topRight], radius: 20) btn_complete.localGradientColor(cornerRadius: 20) } private func hidden(){ cons_bottom.constant = -(225 + UIDevice.jq_safeEdges.bottom) UIView.animate(withDuration: 0.4) { self.alpha = 0 self.layoutIfNeeded() }completion: { _ in self.removeFromSuperview() } } @IBAction func tapAction(_ sender: UIButton) { switch sender.tag{ case 10: payType = .wechat case 11: payType = .aliPay case 12: payType = .coin case 14: payType = .courseNum case 15: payType = .integral default:break } btn_alipay.isSelected = payType == .aliPay btn_coin.isSelected = payType == .coin btn_wechat.isSelected = payType == .wechat btn_course.isSelected = payType == .courseNum btn_integral.isSelected = payType == .integral } @IBAction func paymentAction(_ sender: UIButton) { //场地,游戏,门票 可免费,根据上面的金额,展示了哪些条目判断,如果都没展示,金额全部会是0 switch paymentEnumType { case .yard,.game: if payType == nil && customType.count == 0{ payType = .coin }else{ guard payType != nil else {alertError(msg: "请选择支付方式");return} layoutIfNeeded() } case .goods(let type): if type == .ticket{ if payType == nil && customType.count == 0{ payType = .coin }else{ guard payType != nil else {alertError(msg: "请选择支付方式");return} } }else{ guard payType != nil else {alertError(msg: "请选择支付方式");return} static func show(enumType:PaymentEnumType,money:(ali:Double?,wx:Double?,coin:Int?,course:Int?,integral:Int?),hasNotStudent:Bool = false,_ clouse:@escaping (PayType)->Void){ let paymentView = PaymentView.jq_loadNibView() paymentView.frame = sceneDelegate?.window?.frame ?? .zero paymentView.clouse = clouse paymentView.paymentEnumType = enumType paymentView.view_wechat.isHidden = (money.wx == nil || money.wx == 0) || !WXApi.isWXAppInstalled() paymentView.view_coin.isHidden = (money.coin == nil || money.coin == 0) paymentView.view_course.isHidden = (money.course == nil || money.course == 0) paymentView.view_alipay.isHidden = (money.ali == nil || money.ali == 0) paymentView.view_integral.isHidden = (money.integral == nil || money.integral == 0) paymentView.label_aliPayMoney.text = money.ali?.currency() ?? "0" paymentView.label_wechatMoney.text = money.wx?.currency() ?? "0" paymentView.label_coinMoney.text = "\(money.coin ?? 0)币" paymentView.label_courseMoney.text = "\(money.course ?? 0)课时" paymentView.label_integral.text = "\(money.integral ?? 0)积分" paymentView.view_course.alpha = hasNotStudent ? 0.5:1 sceneDelegate?.window?.addSubview(paymentView) paymentView.cons_bottom.constant = 0 var customType = [PayType]() if !paymentView.view_alipay.isHidden{customType.append(.aliPay)} if !paymentView.view_wechat.isHidden{customType.append(.wechat)} if !paymentView.view_coin.isHidden{customType.append(.coin)} paymentView.customType = customType paymentView.btn_course.isUserInteractionEnabled = !hasNotStudent paymentView.payType = customType.first switch customType.first { case .aliPay:paymentView.btn_alipay.isSelected = true case .coin:paymentView.btn_coin.isSelected = true case .wechat:paymentView.btn_wechat.isSelected = true default:break } UIView.animate(withDuration: 0.4) { paymentView.alpha = 1 paymentView.layoutIfNeeded() } } default:guard payType != nil else {alertError(msg: "请选择支付方式");return} } clouse?(payType!) hidden() } @IBAction func cancelAction(_ sender: UIButton) { hidden() } override func layoutSubviews() { super.layoutSubviews() view_container.jq_addCorners(corner: [.topLeft,.topRight], radius: 20) btn_complete.localGradientColor(cornerRadius: 20) } private func hidden(){ cons_bottom.constant = -(225 + UIDevice.jq_safeEdges.bottom) UIView.animate(withDuration: 0.4) { self.alpha = 0 self.layoutIfNeeded() }completion: { _ in self.removeFromSuperview() } } @IBAction func tapAction(_ sender: UIButton) { switch sender.tag{ case 10: payType = .wechat case 11: payType = .aliPay case 12: payType = .coin case 14: payType = .courseNum case 15: payType = .integral default:break } btn_alipay.isSelected = payType == .aliPay btn_coin.isSelected = payType == .coin btn_wechat.isSelected = payType == .wechat btn_course.isSelected = payType == .courseNum btn_integral.isSelected = payType == .integral } @IBAction func paymentAction(_ sender: UIButton) { //场地,游戏,门票 可免费,根据上面的金额,展示了哪些条目判断,如果都没展示,金额全部会是0 switch paymentEnumType { case .yard,.game: if payType == nil && customType.count == 0{ payType = .coin }else{ guard payType != nil else {alertError(msg: "请选择支付方式");return} } case .goods(let type): if type == .ticket{ if payType == nil && customType.count == 0{ payType = .coin }else{ guard payType != nil else {alertError(msg: "请选择支付方式");return} } }else{ guard payType != nil else {alertError(msg: "请选择支付方式");return} } default:guard payType != nil else {alertError(msg: "请选择支付方式");return} } clouse?(payType!) hidden() } @IBAction func cancelAction(_ sender: UIButton) { hidden() } } WanPai/Common/View/PaymentView.xib
@@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22155" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <device id="retina6_12" orientation="portrait" appearance="light"/> <dependencies> <deployment identifier="iOS"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22131"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/> <capability name="Named colors" minToolsVersion="9.0"/> <capability name="Safe area layout guides" minToolsVersion="9.0"/> <capability name="System colors in document resources" minToolsVersion="11.0"/> @@ -17,13 +17,13 @@ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="I0g-vn-aAw"> <rect key="frame" x="0.0" y="508" width="393" height="344"/> <rect key="frame" x="0.0" y="448" width="393" height="404"/> <subviews> <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="6oz-tW-MFV"> <rect key="frame" x="0.0" y="14" width="393" height="240"/> <rect key="frame" x="0.0" y="14" width="393" height="300"/> <subviews> <view hidden="YES" tag="10" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ME6-yW-eFT"> <rect key="frame" x="0.0" y="-60" width="393" height="60"/> <view tag="10" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ME6-yW-eFT"> <rect key="frame" x="0.0" y="0.0" width="393" height="60"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="85J-Gs-279"> <rect key="frame" x="14" y="59.666666666666629" width="365" height="0.3333333333333357"/> @@ -78,7 +78,7 @@ </constraints> </view> <view tag="11" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4Ft-AC-zgU"> <rect key="frame" x="0.0" y="0.0" width="393" height="60"/> <rect key="frame" x="0.0" y="60" width="393" height="60"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="HtX-dv-eVh"> <rect key="frame" x="14" y="59.666666666666629" width="365" height="0.3333333333333357"/> @@ -133,7 +133,7 @@ </constraints> </view> <view tag="11" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="S7h-OF-RAr"> <rect key="frame" x="0.0" y="60" width="393" height="60"/> <rect key="frame" x="0.0" y="120" width="393" height="60"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="BOu-gk-wSG"> <rect key="frame" x="14" y="59.666666666666629" width="365" height="0.3333333333333357"/> @@ -188,7 +188,7 @@ </constraints> </view> <view tag="11" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="zmh-9K-6Xt"> <rect key="frame" x="0.0" y="120" width="393" height="60"/> <rect key="frame" x="0.0" y="180" width="393" height="60"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="kUh-Iu-yW9"> <rect key="frame" x="14" y="59.666666666666629" width="365" height="0.3333333333333357"/> @@ -243,7 +243,7 @@ </constraints> </view> <view tag="11" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="FeB-qF-5jl"> <rect key="frame" x="0.0" y="180" width="393" height="60"/> <rect key="frame" x="0.0" y="240" width="393" height="60"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8Ok-2i-KOu"> <rect key="frame" x="14" y="59.666666666666629" width="365" height="0.3333333333333357"/> @@ -275,7 +275,7 @@ </connections> </button> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0积分" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="U8u-9j-U4a"> <rect key="frame" x="132.33333333333334" y="26" width="43" height="19.333333333333329"/> <rect key="frame" x="132.33333333333334" y="26" width="45" height="19.333333333333329"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="16"/> <color key="textColor" red="0.93333333330000001" green="0.043137254899999998" blue="0.043137254899999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> @@ -300,7 +300,7 @@ </subviews> </stackView> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="glt-oZ-fup"> <rect key="frame" x="206.66666666666663" y="274" width="145.33333333333337" height="40"/> <rect key="frame" x="206.66666666666663" y="334" width="145.33333333333337" height="40"/> <color key="backgroundColor" name="FE6E0D"/> <constraints> <constraint firstAttribute="height" constant="40" id="JV7-c4-7tD"/> @@ -319,7 +319,7 @@ </connections> </button> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Ji4-B6-Ozw"> <rect key="frame" x="41" y="274" width="145.66666666666666" height="40"/> <rect key="frame" x="41" y="334" width="145.66666666666666" height="40"/> <constraints> <constraint firstAttribute="height" constant="40" id="Tyg-21-Wcc"/> </constraints> WanPai/Config/Enums.swift
@@ -387,8 +387,8 @@ case .sport:return UIImage(named: "icon_coupon_2")! case .communtiy:return UIImage(named: "icon_coupon_3")! case .deepPlayer:return UIImage(named: "icon_coupon_4")! case .winner:return UIImage(named: "icon_coupon_4")! case .counter:return UIImage(named: "icon_coupon_4")! case .winner:return UIImage(named: "icon_coupon_8")! case .counter:return UIImage(named: "icon_coupon_7")! case .more:return UIImage(named: "icon_coupon_6")! } } @@ -399,8 +399,8 @@ case .sport:return "EVENTS" case .communtiy:return "ON_LINE" case .deepPlayer:return "APPOINTMENT" case .winner:return "WINNER" case .counter:return "COUNTER" case .winner:return "TRIUMPH" case .counter:return "FIGHTING" case .more:return "MORE" } } WanPai/Model/CommonModels.swift
@@ -244,6 +244,7 @@ var height:Double = 0 var weight:Double = 0 var isStudent = 0 // 1:是学员, 0:否 var avatar = "" } WanPai/Network/Services.swift
@@ -412,6 +412,7 @@ .append(key: "id", value: id) .append(key: "lat", value: locationTool.currentLocation?.coordinate.latitude.string) .append(key: "lon", value: locationTool.currentLocation?.coordinate.longitude.string) .append(key: "stuId", value:UserDefaults.standard.value(forKey: "currentStuId") as? Int) .append(key: "payId", value: payId) return NetworkRequest.request(params: params, method: .post, progress: true) } WanPai/Root/Activity/TCell/ActivityInfoTCell.swift
@@ -22,7 +22,7 @@ label_limit.text = temp.joined(separator: "|") label_info.text = m.introduction label_duetime.text = "截止报名:" + m.registerEndTime label_duetime.text = "截止报名:" + m.registerEndTime label_ageScope.text = m.age + "岁" label_hot.text = "\(m.heat)" WanPai/Root/Activity/VC/ActivityDetailApplyVC.swift
@@ -201,8 +201,11 @@ } 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 let students = students.map { m in return ["id":m.id,"isStudent":m.isStudent] }.jq_toJson1() Services.paymentCompetition(id: activityDetailModel.id, userIds: students, payType: type,coursePaymentId: paymentId).subscribe(onNext: {[weak self] data in NotificationCenter.default.post(name: StudentRefresh_Nofi, object: nil) if let m = data.data{ switch type { WanPai/Root/Course/VC/AddStudentVC.swift
@@ -140,12 +140,10 @@ guard !tf_birthday.text!.isEmpty else {alertError(msg: "请选择生日");return} guard !tf_gender.text!.isEmpty else {alertError(msg: "请选择性别");return} if type == .course{ guard !tf_height.text!.isEmpty else {alertError(msg: tf_height.placeholder!);return} guard !tf_weight.text!.isEmpty else {alertError(msg: tf_weight.placeholder!);return} guard tf_height.text != "0" else {alertError(msg: "请输入正确的身高");return} guard tf_weight.text != "0" else {alertError(msg: "请输入正确的体重");return} } guard !tf_height.text!.isEmpty else {alertError(msg: tf_height.placeholder!);return} guard !tf_weight.text!.isEmpty else {alertError(msg: tf_weight.placeholder!);return} guard tf_height.text != "0" else {alertError(msg: "请输入正确的身高");return} guard tf_weight.text != "0" else {alertError(msg: "请输入正确的体重");return} if !tf_phone.isEmpty{ guard tf_phone.text!.jq_isPhone else {alertError(msg: "请输入正确的手机号");return} WanPai/Root/Course/VC/CourseInfoVC.swift
@@ -15,604 +15,604 @@ class CourseInfoVC: BaseVC { @IBOutlet weak var scrollView: CourseInfoScrollView! @IBOutlet weak var view_container: UIView! @IBOutlet weak var img_header: UIImageView! @IBOutlet weak var label_stu_name: UILabel! @IBOutlet weak var label_stu_hei: UILabel! @IBOutlet weak var label_stu_wei: UILabel! @IBOutlet weak var label_stu_BMI: UILabel! @IBOutlet weak var img_gender: UIImageView! @IBOutlet weak var label_age: UILabel! @IBOutlet weak var view_menu: UIView! @IBOutlet weak var cons_menuHeight: NSLayoutConstraint! @IBOutlet weak var btn_record: UIButton! @IBOutlet weak var view_schedule: UIView! @IBOutlet weak var tableView: UITableView! @IBOutlet weak var cons_tableHei: NSLayoutConstraint! @IBOutlet weak var mentalCollectionView: UICollectionView! @IBOutlet weak var cons_mentalViewHei: NSLayoutConstraint! @IBOutlet weak var exerciseCollectionView: UICollectionView! @IBOutlet weak var label_weeklyScope: UILabel! @IBOutlet weak var label_totalNums: UILabel! @IBOutlet weak var label_deductedNums: UILabel! @IBOutlet weak var label_remainingNums: UILabel! @IBOutlet weak var stack_courseExercise: UIStackView! @IBOutlet weak var view_exerciseTitle: UIView! @IBOutlet weak var view_footer: UIView! @IBOutlet weak var view_menuDetail: UIView! @IBOutlet weak var scrollView: CourseInfoScrollView! @IBOutlet weak var view_container: UIView! @IBOutlet weak var img_header: UIImageView! @IBOutlet weak var label_stu_name: UILabel! @IBOutlet weak var label_stu_hei: UILabel! @IBOutlet weak var label_stu_wei: UILabel! @IBOutlet weak var label_stu_BMI: UILabel! @IBOutlet weak var img_gender: UIImageView! @IBOutlet weak var label_age: UILabel! @IBOutlet weak var view_menu: UIView! @IBOutlet weak var cons_menuHeight: NSLayoutConstraint! @IBOutlet weak var btn_record: UIButton! @IBOutlet weak var view_schedule: UIView! @IBOutlet weak var tableView: UITableView! @IBOutlet weak var cons_tableHei: NSLayoutConstraint! @IBOutlet weak var mentalCollectionView: UICollectionView! @IBOutlet weak var cons_mentalViewHei: NSLayoutConstraint! @IBOutlet weak var exerciseCollectionView: UICollectionView! @IBOutlet weak var label_weeklyScope: UILabel! @IBOutlet weak var label_totalNums: UILabel! @IBOutlet weak var label_deductedNums: UILabel! @IBOutlet weak var label_remainingNums: UILabel! @IBOutlet weak var stack_courseExercise: UIStackView! @IBOutlet weak var view_exerciseTitle: UIView! @IBOutlet weak var view_footer: UIView! @IBOutlet weak var view_menuDetail: UIView! private var updateProdDate:Date? private var updateProdDate:Date? var startClouseHomeModel:StartClouseHomeModel? var weeklyCourseModel:WeeklyCourseModel? private var currentDate = Date() private var unDispatchNum:Int? private var mentals = [StudentMedalModel]() var startClouseHomeModel:StartClouseHomeModel? var weeklyCourseModel:WeeklyCourseModel? private var currentDate = Date() private var unDispatchNum:Int? private var mentals = [StudentMedalModel]() private var pageMenu:SPPageMenu = { let pageMenu = SPPageMenu(frame: .zero, trackerStyle: .line) // 追踪线 pageMenu.trackerWidth = 56 pageMenu.setTrackerHeight(3, cornerRadius: 1.5) pageMenu.tracker.backgroundColor = .clear pageMenu.trackerFollowingMode = .always pageMenu.contentInset = UIEdgeInsets(top: 0, left: 19, bottom: 0, right: 19) private var pageMenu:SPPageMenu = { let pageMenu = SPPageMenu(frame: .zero, trackerStyle: .line) // 追踪线 pageMenu.trackerWidth = 56 pageMenu.setTrackerHeight(3, cornerRadius: 1.5) pageMenu.tracker.backgroundColor = .clear pageMenu.trackerFollowingMode = .always pageMenu.contentInset = UIEdgeInsets(top: 0, left: 19, bottom: 0, right: 19) // 分割线 pageMenu.dividingLine.backgroundColor = .clear pageMenu.dividingLineHeight = 1 // 分割线 pageMenu.dividingLine.backgroundColor = .clear pageMenu.dividingLineHeight = 1 // item pageMenu.spacing = 27.0 pageMenu.permutationWay = .scrollAdaptContent // item pageMenu.spacing = 27.0 pageMenu.permutationWay = .scrollAdaptContent // 字体 pageMenu.selectedItemTitleFont = UIFont.systemFont(ofSize: 18, weight: .medium) pageMenu.unSelectedItemTitleFont = UIFont.systemFont(ofSize: 18,weight: .medium) // 颜色 pageMenu.selectedItemTitleColor = UIColor(hexStr: "#6CC366") pageMenu.unSelectedItemTitleColor = UIColor(hexStr: "#A4A4A4") // 字体 pageMenu.selectedItemTitleFont = UIFont.systemFont(ofSize: 18, weight: .medium) pageMenu.unSelectedItemTitleFont = UIFont.systemFont(ofSize: 18,weight: .medium) // 颜色 pageMenu.selectedItemTitleColor = UIColor(hexStr: "#6CC366") pageMenu.unSelectedItemTitleColor = UIColor(hexStr: "#A4A4A4") return pageMenu }() return pageMenu }() lazy var pageViewController:FFPageViewController = { let pageVC = FFPageViewController() pageVC.view.backgroundColor = .clear pageVC.scrollview.backgroundColor = .clear lazy var pageViewController:FFPageViewController = { let pageVC = FFPageViewController() pageVC.view.backgroundColor = .clear pageVC.scrollview.backgroundColor = .clear pageVC.scrollview.bounces = false return pageVC }() pageVC.scrollview.bounces = false return pageVC }() private lazy var btn_dispatchCourse:UIButton = { let btn = UIButton(type: .custom) btn.setTitleColor(Def_ThemeColor, for: .normal) private lazy var btn_dispatchCourse:UIButton = { let btn = UIButton(type: .custom) btn.setTitleColor(Def_ThemeColor, for: .normal) let attribute = AttributedStringbuilder.build().add(string: "未分配课时", withFont: UIFont.systemFont(ofSize: 14), withColor: Def_ThemeColor).underLine(color: Def_ThemeColor).mutableAttributedString btn.setAttributedTitle(attribute, for: .normal) btn.addTarget(self, action: #selector(dispatchCourseAction), for: .touchUpInside) return btn let attribute = AttributedStringbuilder.build().add(string: "未分配课时", withFont: UIFont.systemFont(ofSize: 14), withColor: Def_ThemeColor).underLine(color: Def_ThemeColor).mutableAttributedString btn.setAttributedTitle(attribute, for: .normal) btn.addTarget(self, action: #selector(dispatchCourseAction), for: .touchUpInside) return btn }() }() override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) if let date = updateProdDate{ //防止反复切换,15秒 if Date().timeIntervalSince1970 - date.timeIntervalSince1970 > 15{ NotificationCenter.default.post(name: StudentRefresh_Nofi, object: nil) } } } override func viewDidLoad() { super.viewDidLoad() updateData() } override func setUI() { cons_menuHeight.constant = 0 scrollView.contentInset = UIEdgeInsets( top: UIDevice.jq_safeEdges.top + 158, left: 0, bottom: 0, right: 0) scrollView.delegate = self scrollView.bringSubviewToFront(img_header) scrollView.bounces = false scrollView.contentInsetAdjustmentBehavior = .never let attribute = AttributedStringbuilder() attribute.add(string: "上课记录", withFont: UIFont.systemFont(ofSize: 14), withColor: Def_ThemeColor) attribute.underLine(color: Def_ThemeColor) btn_record.titleLabel?.attributedText = attribute.mutableAttributedString view_schedule.addSubview(pageViewController.view) addChild(pageViewController) pageViewController.delegate = self view_schedule.insertSubview(pageViewController.view, at: 0) pageViewController.didMove(toParent: self) pageViewController.view.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: 90) tableView.delegate = self tableView.dataSource = self tableView.isScrollEnabled = false if #available(iOS 15.0, *) { tableView.sectionHeaderTopPadding = 0 } else { } tableView.separatorStyle = .none tableView.register(UINib(nibName: "CourseBookingTCell", bundle: nil), forCellReuseIdentifier: "_CourseBookingTCell") tableView.backgroundColor = .clear mentalCollectionView.delegate = self mentalCollectionView.dataSource = self mentalCollectionView.contentInset = UIEdgeInsets(top: 0, left: 58, bottom: 0, right: 58) mentalCollectionView.tag = 1000 mentalCollectionView.isScrollEnabled = false mentalCollectionView.register(UINib(nibName: "StudentMedalCCell", bundle: nil), forCellWithReuseIdentifier: "_StudentMedalCCell") exerciseCollectionView.delegate = self exerciseCollectionView.dataSource = self exerciseCollectionView.tag = 1001 exerciseCollectionView.register(UINib(nibName: "StudentVideoCCell", bundle: nil), forCellWithReuseIdentifier: "_StudentVideoCCell") } override func setRx() { NotificationCenter.default.rx.notification(StudentRefresh_Nofi).take(until: self.rx.deallocated).subscribe(onNext: {[weak self] noti in guard let weakSelf = self else { return } Services.startCourseHome().subscribe(onNext: {[weak self] data in if let model = data.data{ self?.startClouseHomeModel = model UserDefaults.standard.setValue(model.stuId, forKey: "currentStuId") UserDefaults.standard.synchronize() self?.updateData() if let date = updateProdDate{ //防止反复切换,15秒 if Date().timeIntervalSince1970 - date.timeIntervalSince1970 > 15{ NotificationCenter.default.post(name: StudentRefresh_Nofi, object: nil) } } } }).disposed(by: weakSelf.disposeBag) }).disposed(by: disposeBag) NotificationCenter.default.rx.notification(UpdateCurrentStore_Noti).take(until: self.rx.deallocated).subscribe(onNext: {[weak self] noti in self?.getSelectDayData() }) { error in }.disposed(by: disposeBag) } private func updateData(){ if let m = startClouseHomeModel{ updateProdDate = Date() img_header.sd_setImage(with: URL(string: m.stuImg)) label_stu_name.text = m.stuName img_gender.image = m.stuSex == .man ? UIImage(named: "icon_man") : UIImage(named: "icon_woman") label_age.text = "/\(m.stuAge)岁" label_stu_hei.attributedText = setAttribute(t1: "\(m.height)", t2: "cm") label_stu_wei.attributedText = setAttribute(t1: "\(m.weight)", t2: "kg") label_stu_BMI.attributedText = setAttribute(t1: m.bmi.jq_formatFloat, t2: m.bodyStatus) pageMenu.removeAllItems() if !view_menu.subviews.contains(where: {$0 == self.pageMenu}){ pageMenu.frame = CGRect(origin: .zero, size: CGSize(width: JQ_ScreenW - 100, height: 25)) pageMenu.delegate = self view_menu.addSubview(pageMenu) cons_menuHeight.constant = 25 } pageMenu.setItems(m.courseList.map({$0.courseName}), selectedItemIndex: 0) view_menuDetail.isHidden = m.courseList.count == 0 view_menu.addSubview(btn_dispatchCourse) btn_dispatchCourse.snp.makeConstraints { make in make.right.equalTo(-19) make.centerY.equalToSuperview() make.height.equalTo(25) } exerciseCollectionView.reloadData() label_totalNums.text = "总课时数\( m.courseList.first?.totalNums ?? 0)" label_deductedNums.text = "已扣课时数\( m.courseList.first?.deductedNums ?? 0)" label_remainingNums.text = "剩余课时数\( m.courseList.first?.remainingNums ?? 0)" exerciseCollectionView.isHidden = m.exerciseVideoList.isEmpty view_exerciseTitle.isHidden = m.exerciseVideoList.isEmpty // view_footer.isHidden = m.exerciseVideoList.isEmpty Services.studMedalList(studentId: m.stuId).subscribe(onNext: {[weak self] data in guard let weakSelf = self else { return } if let models = data.data{ weakSelf.mentals = models if models.count > 0{ weakSelf.mentals.append(StudentMedalModel(medalName: "更多", medalType: .more)) } weakSelf.mentalCollectionView.reloadData() let he = ceil(Double(weakSelf.mentals.count) / 3) * 91 + floor(Double(weakSelf.mentals.count) / 3) * 35 weakSelf.cons_mentalViewHei.constant = he UIView.animate(withDuration: 0.3) { weakSelf.view.layoutIfNeeded() } override func viewDidLoad() { super.viewDidLoad() updateData() } }).disposed(by: disposeBag) Services.weeksOfGetHours().subscribe(onNext: {[weak self] data in self?.unDispatchNum = data.data }) { error in }.disposed(by: disposeBag) getSelectDayData() } } private func setAttribute(t1:String,t2:String)->NSMutableAttributedString{ let color:UIColor = UIColor(hexStr: "#2F5264") let a1 = AttributedStringbuilder() a1.add(string: t1, withFont: UIFont.systemFont(ofSize: 22), withColor: color) .add(string: t2, withFont: UIFont.systemFont(ofSize: 12), withColor: color) return a1.mutableAttributedString } override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() view_container.jq_addCorners(corner: [.topLeft,.topRight], radius: 42) } @objc func dispatchCourseAction(){ guard unDispatchNum != 0 else { alert(msg: "没有未分配的课时");return } CourseUnAssignView.show(startClouseHomeModel?.courseList ?? [], num: unDispatchNum ?? 0) } @IBAction func addStudentAction(_ sender: QMUIButton) { let vc = AddStudentVC(type: .course) push(vc: vc) } @IBAction func exchangeAction(_ sender: UIButton) { let vc = StudentExchangeVC() push(vc: vc) } @IBAction func reportAction(_ sender: UIButton) { guard startClouseHomeModel != nil else {return} let vc = StudentReportVC(stuId: startClouseHomeModel!.stuId) push(vc: vc) } @IBAction func detailAction(_ sender: UIButton) { guard (startClouseHomeModel?.courseList.count ?? 0) > 0 else {return} override func setUI() { cons_menuHeight.constant = 0 scrollView.contentInset = UIEdgeInsets( top: UIDevice.jq_safeEdges.top + 158, left: 0, bottom: 0, right: 0) scrollView.delegate = self scrollView.bringSubviewToFront(img_header) let index = pageMenu.selectedItemIndex let models = startClouseHomeModel!.courseList let studentModel = StudentSimpleProfileModel(stuId: startClouseHomeModel!.stuId, stuName: startClouseHomeModel!.stuName, stuImage: startClouseHomeModel!.stuImg) let vc = StudentCourseDetailVC(models: models.filter({$0.courseType == 1}),defaultIndex: index,studentModel: studentModel) push(vc: vc) } scrollView.bounces = false scrollView.contentInsetAdjustmentBehavior = .never let attribute = AttributedStringbuilder() attribute.add(string: "上课记录", withFont: UIFont.systemFont(ofSize: 14), withColor: Def_ThemeColor) attribute.underLine(color: Def_ThemeColor) btn_record.titleLabel?.attributedText = attribute.mutableAttributedString @IBAction func renewalAction(_ sender: UIButton) { let index = pageMenu.selectedItemIndex let models = startClouseHomeModel!.courseList guard index < models.count else {return} Services.registeredData(coursePayId: models[index].id,orderId: models[index].orderId).subscribe(onNext: {data in if let m1 = data.data{ let vc = CourseDetailVC(id: models[index].courseId, signUpCourseModel: m1) self.push(vc: vc) } }) { error in view_schedule.addSubview(pageViewController.view) addChild(pageViewController) pageViewController.delegate = self view_schedule.insertSubview(pageViewController.view, at: 0) pageViewController.didMove(toParent: self) pageViewController.view.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: 90) }.disposed(by: disposeBag) } @IBAction func bookingRecordAction(_ sender: UIButton) { guard startClouseHomeModel != nil else {return} let vc = CourseBookingListVC(student: startClouseHomeModel!) push(vc: vc) } tableView.delegate = self tableView.dataSource = self tableView.isScrollEnabled = false if #available(iOS 15.0, *) { tableView.sectionHeaderTopPadding = 0 } else { } tableView.separatorStyle = .none tableView.register(UINib(nibName: "CourseBookingTCell", bundle: nil), forCellReuseIdentifier: "_CourseBookingTCell") tableView.backgroundColor = .clear @IBAction func remarkAction(_ sender: UIButton) { guard startClouseHomeModel != nil else {return} let vc = StudentRemarkListVC(stuId: startClouseHomeModel!.stuId) push(vc: vc) } mentalCollectionView.delegate = self mentalCollectionView.dataSource = self mentalCollectionView.contentInset = UIEdgeInsets(top: 0, left: 58, bottom: 0, right: 58) mentalCollectionView.tag = 1000 mentalCollectionView.isScrollEnabled = false mentalCollectionView.register(UINib(nibName: "StudentMedalCCell", bundle: nil), forCellWithReuseIdentifier: "_StudentMedalCCell") exerciseCollectionView.delegate = self exerciseCollectionView.dataSource = self exerciseCollectionView.tag = 1001 exerciseCollectionView.register(UINib(nibName: "StudentVideoCCell", bundle: nil), forCellWithReuseIdentifier: "_StudentVideoCCell") @IBAction func forwardWeekAction(_ sender: UIButton) { let forwardPage = pageViewController.currentPage - 1 pageViewController.scroll(toPage: forwardPage, animation: true) } @IBAction func nextWeekAction(_ sender: UIButton) { let nextPage = pageViewController.currentPage + 1 pageViewController.scroll(toPage: nextPage, animation: true) } @IBAction func exerciseAction(_ sender: UITapGestureRecognizer) { let vc = CourseExerciseSubListVC() push(vc: vc) } private func getSelectDayData(){ if let model = startClouseHomeModel{ if let storeStr = UserDefaults.standard.object(forKey: "CurrentStore") as? String{ if let deserModel = HomeStoreModel.deserialize(from: storeStr){ Services.weeksOfCourseDetails(stuId: model.stuId, time: currentDate,storeId: deserModel.storeId).subscribe(onNext: {[weak self] data in if let model = data.data{ self?.weeklyCourseModel = model self?.cons_tableHei.constant = 58 + 72 * Double(model.data.count) UIView.animate(withDuration: 0.3) { self?.view.layoutIfNeeded() self?.viewDidLayoutSubviews() } self?.tableView.reloadData() } }).disposed(by: disposeBag) } } } } override var preferredStatusBarStyle: UIStatusBarStyle{ return .lightContent } override func setRx() { NotificationCenter.default.rx.notification(StudentRefresh_Nofi).take(until: self.rx.deallocated).subscribe(onNext: {[weak self] noti in guard let weakSelf = self else { return } Services.startCourseHome().subscribe(onNext: {[weak self] data in if let model = data.data{ self?.startClouseHomeModel = model UserDefaults.standard.setValue(model.stuId, forKey: "currentStuId") UserDefaults.standard.synchronize() self?.updateData() } }).disposed(by: weakSelf.disposeBag) }).disposed(by: disposeBag) NotificationCenter.default.rx.notification(UpdateCurrentStore_Noti).take(until: self.rx.deallocated).subscribe(onNext: {[weak self] noti in self?.getSelectDayData() }) { error in }.disposed(by: disposeBag) } private func updateData(){ if let m = startClouseHomeModel{ updateProdDate = Date() img_header.sd_setImage(with: URL(string: m.stuImg)) label_stu_name.text = m.stuName img_gender.image = m.stuSex == .man ? UIImage(named: "icon_man") : UIImage(named: "icon_woman") label_age.text = "/\(m.stuAge)岁" label_stu_hei.attributedText = setAttribute(t1: "\(m.height)", t2: "cm") label_stu_wei.attributedText = setAttribute(t1: "\(m.weight)", t2: "kg") label_stu_BMI.attributedText = setAttribute(t1: m.bmi.jq_formatFloat, t2: m.bodyStatus) pageMenu.removeAllItems() if !view_menu.subviews.contains(where: {$0 == self.pageMenu}){ pageMenu.frame = CGRect(origin: .zero, size: CGSize(width: JQ_ScreenW - 100, height: 25)) pageMenu.delegate = self view_menu.addSubview(pageMenu) cons_menuHeight.constant = 25 } pageMenu.setItems(m.courseList.map({$0.courseName}), selectedItemIndex: 0) view_menuDetail.isHidden = m.courseList.count == 0 view_menu.addSubview(btn_dispatchCourse) btn_dispatchCourse.snp.makeConstraints { make in make.right.equalTo(-19) make.centerY.equalToSuperview() make.height.equalTo(25) } exerciseCollectionView.reloadData() label_totalNums.text = "总课时数\( m.courseList.first?.totalNums ?? 0)" label_deductedNums.text = "已扣课时数\( m.courseList.first?.deductedNums ?? 0)" label_remainingNums.text = "剩余课时数\( m.courseList.first?.remainingNums ?? 0)" exerciseCollectionView.isHidden = m.exerciseVideoList.isEmpty view_exerciseTitle.isHidden = m.exerciseVideoList.isEmpty // view_footer.isHidden = m.exerciseVideoList.isEmpty Services.studMedalList(studentId: m.stuId).subscribe(onNext: {[weak self] data in guard let weakSelf = self else { return } if let models = data.data{ weakSelf.mentals = models if models.count > 0{ weakSelf.mentals.append(StudentMedalModel(medalName: "更多", medalType: .more)) } weakSelf.mentalCollectionView.reloadData() let he = ceil(Double(weakSelf.mentals.count) / 3) * 91 + floor(Double(weakSelf.mentals.count) / 3) * 35 weakSelf.cons_mentalViewHei.constant = he UIView.animate(withDuration: 0.3) { weakSelf.view.layoutIfNeeded() } } }).disposed(by: disposeBag) Services.weeksOfGetHours().subscribe(onNext: {[weak self] data in self?.unDispatchNum = data.data }) { error in }.disposed(by: disposeBag) getSelectDayData() } } private func setAttribute(t1:String,t2:String)->NSMutableAttributedString{ let color:UIColor = UIColor(hexStr: "#2F5264") let a1 = AttributedStringbuilder() a1.add(string: t1, withFont: UIFont.systemFont(ofSize: 22), withColor: color) .add(string: t2, withFont: UIFont.systemFont(ofSize: 12), withColor: color) return a1.mutableAttributedString } override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() view_container.jq_addCorners(corner: [.topLeft,.topRight], radius: 42) } @objc func dispatchCourseAction(){ guard unDispatchNum != 0 else { alert(msg: "没有未分配的课时");return } CourseUnAssignView.show(startClouseHomeModel?.courseList ?? [], num: unDispatchNum ?? 0) } @IBAction func addStudentAction(_ sender: QMUIButton) { let vc = AddStudentVC(type: .course) push(vc: vc) } @IBAction func exchangeAction(_ sender: UIButton) { let vc = StudentExchangeVC() push(vc: vc) } @objc func localDetailAction(btn:UIButton){ let index = btn.tag - 10 guard let m = weeklyCourseModel else {return} JQ_MapNavigationTool.startNav(CLLocationCoordinate2D(latitude: m.lat, longitude: m.lon), distanceName: m.name, scheme: "weparklife") } @IBAction func reportAction(_ sender: UIButton) { guard startClouseHomeModel != nil else {return} let vc = StudentReportVC(stuId: startClouseHomeModel!.stuId) push(vc: vc) } @IBAction func detailAction(_ sender: UIButton) { guard (startClouseHomeModel?.courseList.count ?? 0) > 0 else {return} let index = pageMenu.selectedItemIndex let models = startClouseHomeModel!.courseList let studentModel = StudentSimpleProfileModel(stuId: startClouseHomeModel!.stuId, stuName: startClouseHomeModel!.stuName, stuImage: startClouseHomeModel!.stuImg) let vc = StudentCourseDetailVC(models: models.filter({$0.courseType == 1}),defaultIndex: index,studentModel: studentModel) push(vc: vc) } @IBAction func renewalAction(_ sender: UIButton) { let index = pageMenu.selectedItemIndex let models = startClouseHomeModel!.courseList guard index < models.count else {return} Services.registeredData(coursePayId: models[index].id,orderId: models[index].orderId).subscribe(onNext: {data in if let m1 = data.data{ let vc = CourseDetailVC(id: models[index].courseId, signUpCourseModel: m1) self.push(vc: vc) } }) { error in }.disposed(by: disposeBag) } @IBAction func bookingRecordAction(_ sender: UIButton) { guard startClouseHomeModel != nil else {return} let vc = CourseBookingListVC(student: startClouseHomeModel!) push(vc: vc) } @IBAction func remarkAction(_ sender: UIButton) { guard startClouseHomeModel != nil else {return} let vc = StudentRemarkListVC(stuId: startClouseHomeModel!.stuId) push(vc: vc) } @IBAction func forwardWeekAction(_ sender: UIButton) { let forwardPage = pageViewController.currentPage - 1 pageViewController.scroll(toPage: forwardPage, animation: true) } @IBAction func nextWeekAction(_ sender: UIButton) { let nextPage = pageViewController.currentPage + 1 pageViewController.scroll(toPage: nextPage, animation: true) } @IBAction func exerciseAction(_ sender: UITapGestureRecognizer) { let vc = CourseExerciseSubListVC() push(vc: vc) } private func getSelectDayData(){ if let model = startClouseHomeModel{ if let storeStr = UserDefaults.standard.object(forKey: "CurrentStore") as? String{ if let deserModel = HomeStoreModel.deserialize(from: storeStr){ Services.weeksOfCourseDetails(stuId: model.stuId, time: currentDate,storeId: deserModel.storeId).subscribe(onNext: {[weak self] data in if let model = data.data{ self?.weeklyCourseModel = model self?.cons_tableHei.constant = 58 + 72 * Double(model.data.count) UIView.animate(withDuration: 0.3) { self?.view.layoutIfNeeded() self?.viewDidLayoutSubviews() } self?.tableView.reloadData() } }).disposed(by: disposeBag) } } } } override var preferredStatusBarStyle: UIStatusBarStyle{ return .lightContent } @objc func localDetailAction(btn:UIButton){ let index = btn.tag - 10 guard let m = weeklyCourseModel else {return} JQ_MapNavigationTool.startNav(CLLocationCoordinate2D(latitude: m.lat, longitude: m.lon), distanceName: m.name, scheme: "weparklife") } } extension CourseInfoVC:UITableViewDelegate{ func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { // let m = weeklyCourseModel?.data[indexPath.row] // let vc = SignUpCourseVC() // push(vc: vc) } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { // let m = weeklyCourseModel?.data[indexPath.row] // let vc = SignUpCourseVC() // push(vc: vc) } } extension CourseInfoVC:UITableViewDataSource{ func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "_CourseBookingTCell") as! CourseBookingTCell func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "_CourseBookingTCell") as! CourseBookingTCell cell.view_corner.jq_addShadows(shadowColor: UIColor(hexStr: "#DADADA").withAlphaComponent(0.5), corner: 16, radius: 3.5, offset: CGSize(width: 0, height: 2), opacity: 1) guard indexPath.row < weeklyCourseModel?.data.count ?? 0 else { return cell } cell.view_corner.jq_addShadows(shadowColor: UIColor(hexStr: "#DADADA").withAlphaComponent(0.5), corner: 16, radius: 3.5, offset: CGSize(width: 0, height: 2), opacity: 1) guard indexPath.row < weeklyCourseModel?.data.count ?? 0 else { return cell } cell.weeklyCourseItemModel = weeklyCourseModel?.data[indexPath.row] cell.clickClouse = {[weak self] m in guard let weakSelf = self else { return } if let stuId = weakSelf.startClouseHomeModel?.stuId{ //请假 if m.type == 1 && m.isType == 0{ CommonAlertView.show(title: "提示", content: "确认请假?") { status in if status{ let ftime = m.time.first!.components(separatedBy: "-").first! let leveTime = String(format: "%@ %@", weakSelf.currentDate.jq_format("yyyy-MM-dd"),ftime) Services.startCourceRreverse(courseId: m.id, time: leveTime, stuId: stuId).subscribe(onNext: {[weak self] data in alertSuccess(msg: "请假成功") self?.getSelectDayData() cell.weeklyCourseItemModel = weeklyCourseModel?.data[indexPath.row] cell.clickClouse = {[weak self] m in guard let weakSelf = self else { return } if let stuId = weakSelf.startClouseHomeModel?.stuId{ //请假 if m.type == 1 && m.isType == 0{ CommonAlertView.show(title: "提示", content: "确认请假?") { status in if status{ let ftime = m.time.first!.components(separatedBy: "-").first! let leveTime = String(format: "%@ %@", weakSelf.currentDate.jq_format("yyyy-MM-dd"),ftime) Services.startCourceRreverse(courseId: m.id, time: leveTime, stuId: stuId).subscribe(onNext: {[weak self] data in alertSuccess(msg: "请假成功") self?.getSelectDayData() }).disposed(by: weakSelf.disposeBag) } } } //购课 if m.type == 2{ let vc = ExperienceCourseVC(courseId: m.id) weakSelf.push(vc: vc) }).disposed(by: weakSelf.disposeBag) } } } //购课 if m.type == 2{ let vc = ExperienceCourseVC(courseId: m.id) weakSelf.push(vc: vc) } } } return cell } } } return cell } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return weeklyCourseModel?.data.count ?? 0 } func numberOfSections(in tableView: UITableView) -> Int { return 1 } func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 72 } func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { if let m = weeklyCourseModel{ var headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: "header") if headerView == nil{ headerView = UITableViewHeaderFooterView(reuseIdentifier: "header") let contentView = UIView() contentView.borderColor = UIColor(hexStr: "#E7E3E3") contentView.borderWidth = 1 contentView.cornerRadius = 11 headerView?.contentView.addSubview(contentView) contentView.snp.makeConstraints { make in make.center.equalToSuperview() make.left.right.equalToSuperview() make.height.equalTo(22) func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return weeklyCourseModel?.data.count ?? 0 } let label_address = UILabel() label_address.tag = 1000 label_address.text = "成都非遗玩湃全科体育公园 0.0km" label_address.font = UIFont.systemFont(ofSize: 10, weight: .medium) label_address.textColor = UIColor(hexStr: "#AFB4BC") contentView.addSubview(label_address) label_address.snp.makeConstraints { make in make.left.equalToSuperview().offset(12) make.centerY.equalToSuperview() make.right.equalTo(-50) func numberOfSections(in tableView: UITableView) -> Int { return 1 } let btn_detial = QMUIButton(type: .custom) btn_detial.setTitle("位置详情", for: .normal) btn_detial.tag = 10 + section btn_detial.addTarget(self, action: #selector(localDetailAction(btn:)), for: .touchUpInside) btn_detial.titleLabel?.font = UIFont.systemFont(ofSize: 10) btn_detial.setTitleColor(UIColor(hexStr: "#AFB4BC"), for: .normal) btn_detial.setImage(UIImage(named: "icon_pop"), for: .normal) btn_detial.imagePosition = .left btn_detial.spacingBetweenImageAndTitle = 3 contentView.addSubview(btn_detial) btn_detial.snp.makeConstraints { make in make.right.equalTo(-10) make.centerY.equalToSuperview() func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 72 } } if let label = headerView?.contentView.viewWithTag(1000) as? UILabel{ label.text = String(format: "%@ %.1lfkm", m.name,m.distance) } func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { if let m = weeklyCourseModel{ var headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: "header") if headerView == nil{ headerView = UITableViewHeaderFooterView(reuseIdentifier: "header") headerView?.contentView.backgroundColor = .white return headerView } return nil } let contentView = UIView() contentView.borderColor = UIColor(hexStr: "#E7E3E3") contentView.borderWidth = 1 contentView.cornerRadius = 11 headerView?.contentView.addSubview(contentView) contentView.snp.makeConstraints { make in make.center.equalToSuperview() make.left.right.equalToSuperview() make.height.equalTo(22) } func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 58 } let label_address = UILabel() label_address.tag = 1000 label_address.text = "成都非遗玩湃全科体育公园 0.0km" label_address.font = UIFont.systemFont(ofSize: 10, weight: .medium) label_address.textColor = UIColor(hexStr: "#AFB4BC") contentView.addSubview(label_address) label_address.snp.makeConstraints { make in make.left.equalToSuperview().offset(12) make.centerY.equalToSuperview() make.right.equalTo(-50) } let btn_detial = QMUIButton(type: .custom) btn_detial.setTitle("位置详情", for: .normal) btn_detial.tag = 10 + section btn_detial.addTarget(self, action: #selector(localDetailAction(btn:)), for: .touchUpInside) btn_detial.titleLabel?.font = UIFont.systemFont(ofSize: 10) btn_detial.setTitleColor(UIColor(hexStr: "#AFB4BC"), for: .normal) btn_detial.setImage(UIImage(named: "icon_pop"), for: .normal) btn_detial.imagePosition = .left btn_detial.spacingBetweenImageAndTitle = 3 contentView.addSubview(btn_detial) btn_detial.snp.makeConstraints { make in make.right.equalTo(-10) make.centerY.equalToSuperview() } } if let label = headerView?.contentView.viewWithTag(1000) as? UILabel{ label.text = String(format: "%@ %.1lfkm", m.name,m.distance) } headerView?.contentView.backgroundColor = .white return headerView } return nil } func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 58 } } extension CourseInfoVC:UICollectionViewDelegate{ func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { if collectionView.tag == 1000{ guard let stuId = startClouseHomeModel?.stuId else { return } let vc = StudentMentalListVC(stuId: stuId) push(vc: vc) }else{ let model = startClouseHomeModel?.exerciseVideoList[indexPath.row] Services.exerciseCourseList(courseTypeId: model?.coursePackageId).subscribe(onNext: {[weak self] data in if let d = data.data?.first{ let vc = CourseVideoDetailVC(model: d) vc.title = "课后练习" self?.push(vc: vc) if collectionView.tag == 1000{ guard let stuId = startClouseHomeModel?.stuId else { return } let vc = StudentMentalListVC(stuId: stuId) push(vc: vc) }else{ let model = startClouseHomeModel?.exerciseVideoList[indexPath.row] Services.exerciseCourseList(courseTypeId: model?.coursePackageId).subscribe(onNext: {[weak self] data in if let d = data.data?.first{ let vc = CourseVideoDetailVC(model: d) vc.title = "课后练习" self?.push(vc: vc) } }).disposed(by: disposeBag) } } }).disposed(by: disposeBag) } } } extension CourseInfoVC:UICollectionViewDataSource{ func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { if collectionView.tag == 1000{ return mentals.count }else{ return startClouseHomeModel?.exerciseVideoList.count ?? 0 } } if collectionView.tag == 1000{ return mentals.count }else{ return startClouseHomeModel?.exerciseVideoList.count ?? 0 } } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { if collectionView.tag == 1000{ let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_StudentMedalCCell", for: indexPath) as! StudentMedalCCell cell.img.image = mentals[indexPath.row].medalType.image cell.t1.text = mentals[indexPath.row].medalType.title_en cell.t2.text = mentals[indexPath.row].medalType.title return cell } else{ let model = startClouseHomeModel!.exerciseVideoList[indexPath.row] let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_StudentVideoCCell", for: indexPath) as! StudentVideoCCell cell.videoListModel = model return cell } } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { if collectionView.tag == 1000{ let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_StudentMedalCCell", for: indexPath) as! StudentMedalCCell cell.img.image = mentals[indexPath.row].medalType.image cell.t1.text = mentals[indexPath.row].medalType.title_en cell.t2.text = mentals[indexPath.row].medalType.title return cell } else{ let model = startClouseHomeModel!.exerciseVideoList[indexPath.row] let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_StudentVideoCCell", for: indexPath) as! StudentVideoCCell cell.videoListModel = model return cell } } } extension CourseInfoVC:UICollectionViewDelegateFlowLayout{ func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { if collectionView.tag == 1000{ return 30 }else { return 12 } } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { if collectionView.tag == 1000{ return 30 }else { return 12 } } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { if collectionView.tag == 1000{ return 30 }else { return 0 } } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { if collectionView.tag == 1000{ return 30 }else { return 0 } } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { if collectionView.tag == 1000{ let CellW = (JQ_ScreenW - 116 - 62 * 2) / 3 return CGSize(width: CellW, height: 91) }else { let CellW = (JQ_ScreenW - 44 - 13) / 2 return CGSize(width: CellW, height: 166) } } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { if collectionView.tag == 1000{ let CellW = (JQ_ScreenW - 116 - 62 * 2) / 3 return CGSize(width: CellW, height: 91) }else { let CellW = (JQ_ScreenW - 44 - 13) / 2 return CGSize(width: CellW, height: 166) } } } extension CourseInfoVC:SPPageMenuDelegate{ func pageMenu(_ pageMenu: SPPageMenu, itemSelectedAt index: Int) { guard startClouseHomeModel != nil else {return} if let m = startClouseHomeModel?.courseList[index]{ label_totalNums.text = "总课时数\( m.totalNums)" label_deductedNums.text = "已扣课时数\( m.deductedNums)" label_remainingNums.text = "剩余课时数\( m.remainingNums)" func pageMenu(_ pageMenu: SPPageMenu, itemSelectedAt index: Int) { guard startClouseHomeModel != nil else {return} if let m = startClouseHomeModel?.courseList[index]{ label_totalNums.text = "总课时数\( m.totalNums)" label_deductedNums.text = "已扣课时数\( m.deductedNums)" label_remainingNums.text = "剩余课时数\( m.remainingNums)" view_menuDetail.isHidden = startClouseHomeModel?.courseList[index].courseType == 2 } } view_menuDetail.isHidden = startClouseHomeModel?.courseList[index].courseType == 2 } } } extension CourseInfoVC:FFPageViewControllerDelegate{ func pageViewController(_ pageViewController: FFPageViewController, currentPageChanged currentPage: Int) { let vc = pageViewController.currentController as! CourseInfoScheduleVC vc.currentSelectDate = currentDate let first = vc.dates.first?.jq_format("yyyy.MM.dd") let last = vc.dates.last?.jq_format("yyyy.MM.dd") label_weeklyScope.text = "\(first ?? "")-\(last ?? "")" } func pageViewController(_ pageViewController: FFPageViewController, currentPageChanged currentPage: Int) { let vc = pageViewController.currentController as! CourseInfoScheduleVC vc.currentSelectDate = currentDate let first = vc.dates.first?.jq_format("yyyy.MM.dd") let last = vc.dates.last?.jq_format("yyyy.MM.dd") label_weeklyScope.text = "\(first ?? "")-\(last ?? "")" } func totalPagesOfpageViewController(_ pageViewConteoller: FFPageViewController) -> UInt { return 11 } func totalPagesOfpageViewController(_ pageViewConteoller: FFPageViewController) -> UInt { return 11 } func pageViewController(_ pageViewConteoller: FFPageViewController, controllerForPage page: Int) -> UIViewController { let vc = CourseInfoScheduleVC(index: page) {[weak self] date in self?.currentDate = date self?.getSelectDayData() } return vc } func pageViewController(_ pageViewConteoller: FFPageViewController, controllerForPage page: Int) -> UIViewController { let vc = CourseInfoScheduleVC(index: page) {[weak self] date in self?.currentDate = date self?.getSelectDayData() } return vc } } public class CourseInfoScrollView:UIScrollView{ public override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { for subView in subviews{ let p = subView.convert(point, to: self) let hitTestView = subView.hitTest(p, with: event) return hitTestView } return nil } public override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { for subView in subviews{ let p = subView.convert(point, to: self) let hitTestView = subView.hitTest(p, with: event) return hitTestView } return nil } } WanPai/Root/Course/VC/CourseVC.swift
@@ -12,98 +12,98 @@ class CourseVC: BaseVC { @IBOutlet weak var scrollView: CourseScrollView! @IBOutlet weak var view_container: UIView! @IBOutlet weak var btn_addStudent: QMUIButton! @IBOutlet weak var img_bg: UIImageView! @IBOutlet weak var cons_imgHeight: NSLayoutConstraint! private var imgSize:CGSize = .zero @IBOutlet weak var scrollView: CourseScrollView! @IBOutlet weak var view_container: UIView! @IBOutlet weak var btn_addStudent: QMUIButton! @IBOutlet weak var img_bg: UIImageView! @IBOutlet weak var cons_imgHeight: NSLayoutConstraint! private var imgSize:CGSize = .zero var startClouseHomeModel:StartClouseHomeModel? var startClouseHomeModel:StartClouseHomeModel? override func viewDidLoad() { super.viewDidLoad() override func viewDidLoad() { super.viewDidLoad() } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) guard !children.contains(where: {$0 is CourseInfoVC}) else {return} Services.startCourseHome().subscribe(onNext: {[weak self] data in if let model = data.data{ if model.isThere == 1{ UserDefaults.standard.setValue(model.stuId, forKey: "currentStuId") UserDefaults.standard.synchronize() let courseInfoVC = CourseInfoVC() courseInfoVC.startClouseHomeModel = model self?.addChild(courseInfoVC) courseInfoVC.view.frame = self?.view.frame ?? .zero self?.view.addSubview(courseInfoVC.view) self?.didMove(toParent: courseInfoVC) } self?.img_bg.sd_setImage(with: URL(string: model.imgs)) {[weak self] image, error, type, url in if let image{ self?.img_bg.image = image let radio = image.size.width / image.size.height self?.cons_imgHeight.constant = JQ_ScreenW / radio } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) guard !children.contains(where: {$0 is CourseInfoVC}) else {return} Services.startCourseHome().subscribe(onNext: {[weak self] data in if let model = data.data{ if model.isThere == 1{ UserDefaults.standard.setValue(model.stuId, forKey: "currentStuId") UserDefaults.standard.synchronize() let courseInfoVC = CourseInfoVC() courseInfoVC.startClouseHomeModel = model self?.addChild(courseInfoVC) courseInfoVC.view.frame = self?.view.frame ?? .zero self?.view.addSubview(courseInfoVC.view) self?.didMove(toParent: courseInfoVC) } self?.img_bg.sd_setImage(with: URL(string: model.imgs)) {[weak self] image, error, type, url in if let image{ self?.img_bg.image = image let radio = image.size.width / image.size.height self?.cons_imgHeight.constant = JQ_ScreenW / radio } } } }).disposed(by: disposeBag) } } }).disposed(by: disposeBag) } override func setUI() { scrollView.bounces = false btn_addStudent.imagePosition = .left btn_addStudent.spacingBetweenImageAndTitle = 0 btn_addStudent.imageEdgeInsets = UIEdgeInsets(top: 3, left: 0, bottom: 0, right: 0) cons_imgHeight.constant = JQ_ScreenH * imgSize.width / JQ_ScreenW scrollView.contentInset = UIEdgeInsets( top: JQ_ScreenW * 0.6794 - JQ_NavBarHeight - 20, left: 0, bottom: 0, right: 0) } override func setUI() { scrollView.bounces = false btn_addStudent.imagePosition = .left btn_addStudent.spacingBetweenImageAndTitle = 0 btn_addStudent.imageEdgeInsets = UIEdgeInsets(top: 3, left: 0, bottom: 0, right: 0) cons_imgHeight.constant = JQ_ScreenH * imgSize.width / JQ_ScreenW scrollView.contentInset = UIEdgeInsets( top: JQ_ScreenW * 0.6794 - JQ_NavBarHeight - 20, left: 0, bottom: 0, right: 0) } override func setRx() { // NotificationCenter.default.rx.notification(StudentUpdate_Nofi).take(until: self.rx.deallocated).subscribe(onNext: { [weak self] data in // guard let weakSelf = self else { return } // Services.startCourseHome().subscribe(onNext: {[weak self] data in // if let model = data.data{ // if model.isThere == 1{ // UserDefaults.standard.setValue(model.stuId, forKey: "currentStuId") // UserDefaults.standard.synchronize() // let courseInfoVC = CourseInfoVC() // courseInfoVC.startClouseHomeModel = model // let clouseNav = BaseNav(rootViewController: courseInfoVC) // clouseNav.tabBarItem = UITabBarItem(title: "玩湃运动营", image: UIImage(named: "tabbar_course"), selectedImage: UIImage(named: "tabbar_course_s")!.withRenderingMode(.alwaysOriginal)) // self?.tabBarController?.viewControllers![1] = clouseNav // }else{ // let courseVC = CourseVC() // courseVC.startClouseHomeModel = model // let clouseNav = BaseNav(rootViewController: courseVC) // clouseNav.tabBarItem = UITabBarItem(title: "玩湃运动营", image: UIImage(named: "tabbar_course"), selectedImage: UIImage(named: "tabbar_course_s")!.withRenderingMode(.alwaysOriginal)) // self?.tabBarController?.viewControllers![1] = clouseNav // } // } // }).disposed(by: weakSelf.disposeBag) // }).disposed(by: disposeBag) } override func setRx() { // NotificationCenter.default.rx.notification(StudentUpdate_Nofi).take(until: self.rx.deallocated).subscribe(onNext: { [weak self] data in // guard let weakSelf = self else { return } // Services.startCourseHome().subscribe(onNext: {[weak self] data in // if let model = data.data{ // if model.isThere == 1{ // UserDefaults.standard.setValue(model.stuId, forKey: "currentStuId") // UserDefaults.standard.synchronize() // let courseInfoVC = CourseInfoVC() // courseInfoVC.startClouseHomeModel = model // let clouseNav = BaseNav(rootViewController: courseInfoVC) // clouseNav.tabBarItem = UITabBarItem(title: "玩湃运动营", image: UIImage(named: "tabbar_course"), selectedImage: UIImage(named: "tabbar_course_s")!.withRenderingMode(.alwaysOriginal)) // self?.tabBarController?.viewControllers![1] = clouseNav // }else{ // let courseVC = CourseVC() // courseVC.startClouseHomeModel = model // let clouseNav = BaseNav(rootViewController: courseVC) // clouseNav.tabBarItem = UITabBarItem(title: "玩湃运动营", image: UIImage(named: "tabbar_course"), selectedImage: UIImage(named: "tabbar_course_s")!.withRenderingMode(.alwaysOriginal)) // self?.tabBarController?.viewControllers![1] = clouseNav // } // } // }).disposed(by: weakSelf.disposeBag) // }).disposed(by: disposeBag) } @IBAction func addStudentAction(_ sender: QMUIButton) { let addstudentVC = AddStudentVC(type: .course) push(vc: addstudentVC) } @IBAction func addStudentAction(_ sender: QMUIButton) { let addstudentVC = AddStudentVC(type: .course) push(vc: addstudentVC) } } public class CourseScrollView:UIScrollView{ public override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { for subView in subviews{ let p = subView.convert(point, to: self) let hitTestView = subView.hitTest(p, with: event) return hitTestView } return nil } public override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { for subView in subviews{ let p = subView.convert(point, to: self) let hitTestView = subView.hitTest(p, with: event) return hitTestView } return nil } } WanPai/Root/Course/VC/SignUpCourseVC.swift
@@ -13,139 +13,139 @@ import RxCocoa class SignUpCourseViewModel:RefreshModel<SignUpCourseItemModel>{ var packageTypeData = BehaviorRelay<[NormalSimpleModel]?>(value: nil) var selectPackeType = BehaviorRelay<NormalSimpleModel?>(value: nil) var courseType = BehaviorRelay<NormalSimpleModel?>(value: nil) var search = BehaviorRelay<String?>(value: nil) override func api() -> (Observable<BaseResponse<[SignUpCourseItemModel]>>)? { return Services.registeredCourse(courseTypeId: courseType.value?.id, search: search.value) } func getDefaultData(){ Services.coursePackageType().subscribe(onNext: {[weak self] data in if var datas = data.data{ datas.insert(NormalSimpleModel(id: -1, name: "全部"), at: 0) self?.packageTypeData.accept(datas) } }) { error in }.disposed(by: disposeBag) } var packageTypeData = BehaviorRelay<[NormalSimpleModel]?>(value: nil) var selectPackeType = BehaviorRelay<NormalSimpleModel?>(value: nil) var courseType = BehaviorRelay<NormalSimpleModel?>(value: nil) var search = BehaviorRelay<String?>(value: nil) override func api() -> (Observable<BaseResponse<[SignUpCourseItemModel]>>)? { return Services.registeredCourse(courseTypeId: courseType.value?.id, search: search.value) } func getDefaultData(){ Services.coursePackageType().subscribe(onNext: {[weak self] data in if var datas = data.data{ datas.insert(NormalSimpleModel(id: -1, name: "全部"), at: 0) self?.packageTypeData.accept(datas) } }) { error in }.disposed(by: disposeBag) } } class SignUpCourseVC: BaseVC { @IBOutlet weak var view_topView: UIView! @IBOutlet weak var tf_search: QMUITextField! @IBOutlet weak var tableView: BaseTableView! @IBOutlet weak var btn_courseType: QMUIButton! private var showSubTypeView:CourseSubTypeView? private let viewModel = SignUpCourseViewModel() override func viewDidLoad() { super.viewDidLoad() title = "已报名运动营" viewModel.getDefaultData() viewModel.beginRefresh() } override func setUI() { btn_courseType.imagePosition = .right btn_courseType.spacingBetweenImageAndTitle = 5 tableView.delegate = self tableView.dataSource = self tableView.register(UINib(nibName: "CourseSignUpTCell", bundle: nil), forCellReuseIdentifier: "_CourseSignUpTCell") tableView.separatorStyle = .none tf_search.delegate = self viewModel.configure(tableView,needMore: false) // tableView.jq_setEmptyView() } override func setRx() { tf_search.rx.controlEvent(.editingDidEnd).subscribe(onNext: { [weak self] in if self?.tf_search.text?.isEmpty ?? true{ self?.viewModel.search.accept(nil) }else{ self?.viewModel.search.accept(self?.tf_search.text!) } self?.viewModel.beginRefresh() }).disposed(by: disposeBag) } private func cleanOther(){ btn_courseType.isSelected = false } @IBAction func crouseTypeAction(_ sender: UIButton) { guard !sender.isSelected else {return} cleanOther() sender.isSelected = true showSubTypeView = CourseSubTypeView.show(inView: self.view, afterView: view_topView, items: viewModel.packageTypeData.value!,selectModel: viewModel.courseType.value) { [weak self] m in if m.name != "全部"{ sender.setTitle(m.name, for: .normal) self?.viewModel.courseType.accept(m) }else{ sender.setTitle("运动营类型", for: .normal) self?.viewModel.courseType.accept(nil) } sender.isSelected = false self?.viewModel.beginRefresh() } closeClouse: { sender.isSelected = false } } @IBAction func searchAction(_ sender: UIButton) { view.endEditing(true) viewModel.beginRefresh() } @IBOutlet weak var view_topView: UIView! @IBOutlet weak var tf_search: QMUITextField! @IBOutlet weak var tableView: BaseTableView! @IBOutlet weak var btn_courseType: QMUIButton! private var showSubTypeView:CourseSubTypeView? private let viewModel = SignUpCourseViewModel() override func viewDidLoad() { super.viewDidLoad() title = "已报名运动营" viewModel.getDefaultData() viewModel.beginRefresh() } override func setUI() { btn_courseType.imagePosition = .right btn_courseType.spacingBetweenImageAndTitle = 5 tableView.delegate = self tableView.dataSource = self tableView.register(UINib(nibName: "CourseSignUpTCell", bundle: nil), forCellReuseIdentifier: "_CourseSignUpTCell") tableView.separatorStyle = .none tf_search.delegate = self viewModel.configure(tableView,needMore: false) // tableView.jq_setEmptyView() } override func setRx() { tf_search.rx.controlEvent(.editingDidEnd).subscribe(onNext: { [weak self] in if self?.tf_search.text?.isEmpty ?? true{ self?.viewModel.search.accept(nil) }else{ self?.viewModel.search.accept(self?.tf_search.text!) } self?.viewModel.beginRefresh() }).disposed(by: disposeBag) } private func cleanOther(){ btn_courseType.isSelected = false } @IBAction func crouseTypeAction(_ sender: UIButton) { guard !sender.isSelected else {return} cleanOther() sender.isSelected = true showSubTypeView = CourseSubTypeView.show(inView: self.view, afterView: view_topView, items: viewModel.packageTypeData.value!,selectModel: viewModel.courseType.value) { [weak self] m in if m.name != "全部"{ sender.setTitle(m.name, for: .normal) self?.viewModel.courseType.accept(m) }else{ sender.setTitle("运动营类型", for: .normal) self?.viewModel.courseType.accept(nil) } sender.isSelected = false self?.viewModel.beginRefresh() } closeClouse: { sender.isSelected = false } } @IBAction func searchAction(_ sender: UIButton) { view.endEditing(true) viewModel.beginRefresh() } } extension SignUpCourseVC:UITableViewDelegate{ func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let item = viewModel.dataSource.value[indexPath.row] Services.registeredData(coursePayId: item.coursePayId,orderId: item.orderId).subscribe(onNext: {data in if let m1 = data.data{ if m1.payStatus == .unPayment{ Services.queryCourseInfo(id: item.coursePackageId,payId: item.coursePayId).subscribe(onNext: { data in if let m2 = data.data{ let vc = CourseDetailApplyVC(detailModel: m2,signUpModel: m1) self.push(vc: vc) } }).disposed(by: self.disposeBag) }else{ let vc = CourseDetailVC(id: item.coursePackageId, signUpCourseModel: m1) self.push(vc: vc) func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let item = viewModel.dataSource.value[indexPath.row] Services.registeredData(coursePayId: item.coursePayId,orderId: item.orderId).subscribe(onNext: {data in if let m1 = data.data{ if m1.payStatus == .unPayment{ Services.queryCourseInfo(id:item.coursePackageId,payId: item.coursePayId).subscribe(onNext: { data in if let m2 = data.data{ let vc = CourseDetailApplyVC(detailModel: m2,signUpModel: m1) self.push(vc: vc) } }).disposed(by: self.disposeBag) }else{ let vc = CourseDetailVC(id: item.coursePackageId, signUpCourseModel: m1) self.push(vc: vc) } } }) { error in }.disposed(by: disposeBag) } } }) { error in }.disposed(by: disposeBag) } } extension SignUpCourseVC:UITableViewDataSource{ func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "_CourseSignUpTCell") as! CourseSignUpTCell cell.signUpCourseItemModel = viewModel.dataSource.value[indexPath.row] return cell } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return viewModel.dataSource.value.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "_CourseSignUpTCell") as! CourseSignUpTCell cell.signUpCourseItemModel = viewModel.dataSource.value[indexPath.row] return cell } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return viewModel.dataSource.value.count } } extension SignUpCourseVC:QMUITextFieldDelegate{ func textFieldShouldReturn(_ textField: UITextField) -> Bool { textField.resignFirstResponder() viewModel.beginRefresh() return true } func textFieldShouldReturn(_ textField: UITextField) -> Bool { textField.resignFirstResponder() viewModel.beginRefresh() return true } } WanPai/Root/Course/VC/StudentCourseDetailVC.swift
@@ -1,9 +1,9 @@ // // StudentCourseDetailVC.swift // WanPai // // Created by 无故事王国 on 2023/6/27. // // // StudentCourseDetailVC.swift // WanPai // // Created by 无故事王国 on 2023/6/27. // import UIKit import JQTools @@ -15,142 +15,127 @@ class StudentCourseViewModel:RefreshModel<CourseRecordModel>{ let stuId = BehaviorRelay<Int>(value: 0) let lessionId = BehaviorRelay<Int>(value: 0) let startTime = BehaviorRelay<Date?>(value: nil) let type = BehaviorRelay<Int?>(value: nil) let stuId = BehaviorRelay<Int>(value: 0) let lessionId = BehaviorRelay<Int>(value: 0) let startTime = BehaviorRelay<Date?>(value: nil) let type = BehaviorRelay<Int?>(value: nil) override func api() -> (Observable<BaseResponse<[CourseRecordModel]>>)? { return Services.recordDetails(stuId: stuId.value, lessionId: lessionId.value, startTime: startTime.value?.jq_format("yyyy-MM"), type: type.value) } override func api() -> (Observable<BaseResponse<[CourseRecordModel]>>)? { return Services.recordDetails(stuId: stuId.value, lessionId: lessionId.value, startTime: startTime.value?.jq_format("yyyy-MM"), type: type.value) } } class StudentCourseDetailVC: BaseVC { private var models = [StartClouseListModel]() private var studentModel:StudentSimpleProfileModel! private var defaultIndex = 0 private var models = [StartClouseListModel]() private var studentModel:StudentSimpleProfileModel! private var defaultIndex = 0 private lazy var tableView:BaseTableView = { let table = BaseTableView(frame: .zero, style: .plain) table.separatorStyle = .none table.delegate = self table.dataSource = self if #available(iOS 15.0, *) { table.sectionHeaderTopPadding = 0 } table.register(UINib(nibName: "CourseChargeTCell", bundle: nil), forCellReuseIdentifier: "_CourseChargeTCell") return table }() private lazy var tableView:BaseTableView = { let table = BaseTableView(frame: .zero, style: .plain) table.separatorStyle = .none table.delegate = self table.dataSource = self if #available(iOS 15.0, *) { table.sectionHeaderTopPadding = 0 } table.register(UINib(nibName: "CourseChargeTCell", bundle: nil), forCellReuseIdentifier: "_CourseChargeTCell") return table }() private var headView:StudentCourseDetailHeadView = { return StudentCourseDetailHeadView.jq_loadNibView() }() private let viewModel = StudentCourseViewModel() private var headView:StudentCourseDetailHeadView = { return StudentCourseDetailHeadView.jq_loadNibView() }() private let viewModel = StudentCourseViewModel() private lazy var sectionView:HeaderInSectionView = { let v = HeaderInSectionView() v.btn_filter.addTarget(self, action: #selector(fliterAction), for: .touchUpInside) v.btn_datetime.addTarget(self, action: #selector(datetimePickerAction), for: .touchUpInside) return v }() private lazy var sectionView:HeaderInSectionView = { let v = HeaderInSectionView() v.btn_filter.addTarget(self, action: #selector(fliterAction), for: .touchUpInside) v.btn_datetime.addTarget(self, action: #selector(datetimePickerAction), for: .touchUpInside) return v }() required init(models:[StartClouseListModel],defaultIndex:Int,studentModel:StudentSimpleProfileModel) { super.init(nibName: nil, bundle: nil) self.models = models self.defaultIndex = defaultIndex self.studentModel = studentModel } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func viewDidLoad() { super.viewDidLoad() title = "课时详情" headView.renewalClouse = { [weak self] () in guard let weakSelf = self else { return } let model = weakSelf.models[weakSelf.headView.pageMenu.selectedItemIndex] Services.registeredData(coursePayId: model.id,orderId: model.orderId).subscribe(onNext: {[weak self]data in if let m1 = data.data{ let vc = CourseDetailVC(id: model.courseId, signUpCourseModel: m1) self?.push(vc: vc) required init(models:[StartClouseListModel],defaultIndex:Int,studentModel:StudentSimpleProfileModel) { super.init(nibName: nil, bundle: nil) self.models = models self.defaultIndex = defaultIndex self.studentModel = studentModel } }) { error in }.disposed(by: weakSelf.disposeBag) /** Services.queryCourseInfo(id: model.courseId).subscribe(onNext: {[weak self] data in guard let weakSelf = self else { return } if let m = data.data{ Services.registeredData(coursePayId: model.coursePayId ?? 0,orderId: model.orderId).subscribe(onNext: {data in if let m1 = data.data{ let vc = CourseDetailVC(id: model.courseId, signUpCourseModel: m1) weakSelf.push(vc: vc) } }) { error in required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } }.disposed(by: weakSelf.disposeBag) } }).disposed(by: weakSelf.disposeBag) override func viewDidLoad() { super.viewDidLoad() title = "课时详情" **/ } headView.renewalClouse = { [weak self] () in guard let weakSelf = self else { return } let model = weakSelf.models[weakSelf.headView.pageMenu.selectedItemIndex] viewModel.startTime.accept(Date()) viewModel.lessionId.accept(models[defaultIndex].courseId) viewModel.stuId.accept(studentModel.stuId) Services.registeredData(coursePayId: model.id,orderId: model.orderId).subscribe(onNext: {[weak self]data in if let m1 = data.data{ let vc = CourseDetailVC(id: model.courseId, signUpCourseModel: m1) self?.push(vc: vc) } }) { error in headView.pageMenu.setItems(models.map({$0.courseName}), selectedItemIndex: defaultIndex) headView.pageMenu.delegate = self headView.label_stuName.text = studentModel.stuName headView.img_stuProfile.sd_setImage(with: URL(string: studentModel.stuImage),placeholderImage: nil) }.disposed(by: weakSelf.disposeBag) viewModel.beginRefresh() } } override func setUI() { view.addSubview(tableView) tableView.snp.makeConstraints { make in make.edges.equalToSuperview() } viewModel.startTime.accept(Date()) viewModel.lessionId.accept(models[defaultIndex].courseId) viewModel.stuId.accept(studentModel.stuId) tableView.tableHeaderView = headView headView.snp.makeConstraints { make in make.width.equalToSuperview() make.height.greaterThanOrEqualTo(0) } // tableView.jq_setEmptyView() viewModel.configure(tableView,needMore: false) headView.layoutIfNeeded() } headView.pageMenu.setItems(models.map({$0.courseName}), selectedItemIndex: defaultIndex) headView.pageMenu.delegate = self headView.label_stuName.text = studentModel.stuName headView.img_stuProfile.sd_setImage(with: URL(string: studentModel.stuImage),placeholderImage: nil) @objc func fliterAction(){ JQ_MenuView().show(self, tapView: sectionView.btn_filter, items: ["全部","增加","扣除"],tableHei: 160) {[weak self] index, str in if index == 0{ self?.sectionView.btn_filter.setTitle("全部记录", for: .normal) self?.viewModel.type.accept(nil) }else{ self?.sectionView.btn_filter.setTitle(str, for: .normal) self?.viewModel.type.accept(index) } self?.viewModel.beginRefresh() } } viewModel.beginRefresh() } @objc func datetimePickerAction(){ CommonDatePickerView.show(before: 3, after: 0, type: .YM) { [weak self] year, month, _,_,_ in let date = Date.jq_format(year: year!, month: month!, day: 2) self?.sectionView.btn_datetime.setTitle(date!.jq_format("yyyy年MM月>"), for: .normal) self?.viewModel.startTime.accept(date) self?.viewModel.beginRefresh() } } override func setUI() { view.addSubview(tableView) tableView.snp.makeConstraints { make in make.edges.equalToSuperview() } tableView.tableHeaderView = headView headView.snp.makeConstraints { make in make.width.equalToSuperview() make.height.greaterThanOrEqualTo(0) } // tableView.jq_setEmptyView() viewModel.configure(tableView,needMore: false) headView.layoutIfNeeded() } @objc func fliterAction(){ JQ_MenuView().show(self, tapView: sectionView.btn_filter, items: ["全部","增加","扣除"],tableHei: 160) {[weak self] index, str in if index == 0{ self?.sectionView.btn_filter.setTitle("全部记录", for: .normal) self?.viewModel.type.accept(nil) }else{ self?.sectionView.btn_filter.setTitle(str, for: .normal) self?.viewModel.type.accept(index) } self?.viewModel.beginRefresh() } } @objc func datetimePickerAction(){ CommonDatePickerView.show(before: 3, after: 0, type: .YM) { [weak self] year, month, _,_,_ in let date = Date.jq_format(year: year!, month: month!, day: 2) self?.sectionView.btn_datetime.setTitle(date!.jq_format("yyyy年MM月>"), for: .normal) self?.viewModel.startTime.accept(date) self?.viewModel.beginRefresh() } } } extension StudentCourseDetailVC:UITableViewDelegate{ @@ -158,111 +143,111 @@ } extension StudentCourseDetailVC:UITableViewDataSource{ func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let model = viewModel.dataSource.value[indexPath.row] let cell = tableView.dequeueReusableCell(withIdentifier: "_CourseChargeTCell") as! CourseChargeTCell cell.courseRecordModel = model return cell } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let model = viewModel.dataSource.value[indexPath.row] let cell = tableView.dequeueReusableCell(withIdentifier: "_CourseChargeTCell") as! CourseChargeTCell cell.courseRecordModel = model return cell } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return viewModel.dataSource.value.count } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return viewModel.dataSource.value.count } func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 67 } func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 67 } func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { sectionView.btn_datetime.setTitle(viewModel.startTime.value?.jq_format("yyyy年MM月>"), for: .normal) return sectionView } func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { sectionView.btn_datetime.setTitle(viewModel.startTime.value?.jq_format("yyyy年MM月>"), for: .normal) return sectionView } } private class HeaderInSectionView:UIView{ private(set) lazy var btn_datetime:QMUIButton = { let btn = QMUIButton(type: .custom) btn.setTitle(Date().jq_format("yyyy年M月>"), for: .normal) btn.setTitleColor(UIColor(hexStr: "#0048FF"), for: .normal) btn.titleLabel?.font = UIFont.systemFont(ofSize: 16, weight: .medium) return btn }() private(set) lazy var btn_datetime:QMUIButton = { let btn = QMUIButton(type: .custom) btn.setTitle(Date().jq_format("yyyy年M月>"), for: .normal) btn.setTitleColor(UIColor(hexStr: "#0048FF"), for: .normal) btn.titleLabel?.font = UIFont.systemFont(ofSize: 16, weight: .medium) return btn }() private(set) lazy var btn_filter:QMUIButton = { let btn = QMUIButton(type: .custom) btn.setTitleColor(UIColor(hexStr: "#414141"), for: .normal) btn.titleLabel?.font = UIFont.systemFont(ofSize: 16) btn.jq_borderWidth = 1 btn.jq_borderColor = UIColor(hexStr: "#D5D1D1") btn.jq_cornerRadius = 4 btn.setTitle("全部记录", for: .normal) btn.setImage(UIImage(named: "icon_down_arrow"), for: .normal) btn.imagePosition = .right btn.spacingBetweenImageAndTitle = 5 return btn }() private(set) lazy var btn_filter:QMUIButton = { let btn = QMUIButton(type: .custom) btn.setTitleColor(UIColor(hexStr: "#414141"), for: .normal) btn.titleLabel?.font = UIFont.systemFont(ofSize: 16) btn.jq_borderWidth = 1 btn.jq_borderColor = UIColor(hexStr: "#D5D1D1") btn.jq_cornerRadius = 4 btn.setTitle("全部记录", for: .normal) btn.setImage(UIImage(named: "icon_down_arrow"), for: .normal) btn.imagePosition = .right btn.spacingBetweenImageAndTitle = 5 return btn }() override init(frame: CGRect) { super.init(frame: frame) override init(frame: CGRect) { super.init(frame: frame) backgroundColor = .white backgroundColor = .white addSubview(btn_datetime) addSubview(btn_filter) addSubview(btn_datetime) addSubview(btn_filter) btn_filter.snp.makeConstraints { make in make.right.equalTo(-14) make.height.equalTo(38) make.width.equalTo(100) make.bottom.equalTo(-16) } btn_filter.snp.makeConstraints { make in make.right.equalTo(-14) make.height.equalTo(38) make.width.equalTo(100) make.bottom.equalTo(-16) } btn_datetime.snp.makeConstraints { make in make.left.equalTo(14) make.height.equalTo(22) make.centerY.equalTo(btn_filter) } } btn_datetime.snp.makeConstraints { make in make.left.equalTo(14) make.height.equalTo(22) make.centerY.equalTo(btn_filter) } } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } } extension StudentCourseDetailVC:SPPageMenuDelegate{ func pageMenu(_ pageMenu: SPPageMenu, itemSelectedAt index: Int) { defaultIndex = index func pageMenu(_ pageMenu: SPPageMenu, itemSelectedAt index: Int) { defaultIndex = index var totoalNum = 0 var totalDeductedNum = 0 var totalRemainingNum = 0 var totoalNum = 0 var totalDeductedNum = 0 var totalRemainingNum = 0 for m in models{ totoalNum += m.totalNums totalDeductedNum += m.deductedNums totalRemainingNum += m.remainingNums } for m in models{ totoalNum += m.totalNums totalDeductedNum += m.deductedNums totalRemainingNum += m.remainingNums } let model = models[index] headView.label_deductedNums.text = "\(totalDeductedNum)" headView.label_totalNums.text = "\(totoalNum)" headView.label_remainingNums.text = "\(totalRemainingNum)" let model = models[index] headView.label_deductedNums.text = "\(totalDeductedNum)" headView.label_totalNums.text = "\(totoalNum)" headView.label_remainingNums.text = "\(totalRemainingNum)" headView.label_preDeductedNums.text = "\(model.deductedNums)" headView.label_preTotalNums.text = "\(model.totalNums)" headView.label_preRemainingNums.text = "\(model.remainingNums)" headView.label_preDeductedNums.text = "\(model.deductedNums)" headView.label_preTotalNums.text = "\(model.totalNums)" headView.label_preRemainingNums.text = "\(model.remainingNums)" headView.label_datetime.text = "有效期:\(model.periodOfValidity)" headView.label_datetime.text = "有效期:\(model.periodOfValidity)" viewModel.lessionId.accept(model.courseId) viewModel.beginRefresh() // // Services.lessonDetails(lessonId: model.courseId, stuId: studentModel.stuId).subscribe(onNext: { data in // // }).disposed(by: disposeBag) } viewModel.lessionId.accept(model.courseId) viewModel.beginRefresh() // // Services.lessonDetails(lessonId: model.courseId, stuId: studentModel.stuId).subscribe(onNext: { data in // // }).disposed(by: disposeBag) } } WanPai/Root/Course/VC/StudentMentalListVC.swift
@@ -9,104 +9,112 @@ class StudentMentalListVC: BaseVC { struct MentalInfo { var icon:UIImage! var l1:String! var l2:String! var level:Int! var info:String! var btnName:String! var medalType:MedalType = .club var isTopLevel:Int! } lazy private var tableView:UITableView = { let table = UITableView(frame: .zero, style: .plain) table.separatorStyle = .none table.delegate = self table.dataSource = self table.contentInset = UIEdgeInsets(top: -21, left: 0, bottom: 0, right: 0) table.register(UINib(nibName: "StudentMentalTCell", bundle: nil), forCellReuseIdentifier: "_StudentMentalTCell") return table }() private var items = [MentalInfo]() private var stuId:Int! required init(stuId:Int) { super.init(nibName: nil, bundle: nil) self.stuId = stuId } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func viewDidLoad() { super.viewDidLoad() title = "运动营成员徽章" view.addSubview(tableView) tableView.snp.makeConstraints { make in make.edges.equalToSuperview() } Services.courseStuMedal(stuId: stuId).subscribe(onNext: { [weak self] data in if let models = data.data{ for model in models{ switch model.medalType{ 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)) 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: 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,isTopLevel: model.isTopLevel)) default:break } struct MentalInfo { var icon:UIImage! var l1:String! var l2:String! var level:Int! var info:String! var btnName:String! var medalType:MedalType = .club var isTopLevel:Int! } self?.tableView.reloadData() } }).disposed(by: disposeBag) } lazy private var tableView:UITableView = { let table = UITableView(frame: .zero, style: .plain) table.separatorStyle = .none table.delegate = self table.dataSource = self table.contentInset = UIEdgeInsets(top: -21, left: 0, bottom: 0, right: 0) table.register(UINib(nibName: "StudentMentalTCell", bundle: nil), forCellReuseIdentifier: "_StudentMentalTCell") return table }() private var items = [MentalInfo]() private var stuId:Int! required init(stuId:Int) { super.init(nibName: nil, bundle: nil) self.stuId = stuId } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func viewDidLoad() { super.viewDidLoad() title = "运动营成员徽章" view.addSubview(tableView) tableView.snp.makeConstraints { make in make.edges.equalToSuperview() } Services.courseStuMedal(stuId: stuId).subscribe(onNext: { [weak self] data in if let models = data.data{ for model in models{ switch model.medalType{ 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)) 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: 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,isTopLevel: model.isTopLevel)) case .winner: self?.items.append(MentalInfo(icon: UIImage(named: "icon_coupon_8"), l1: "TRIUMPH", l2: model.medalName, level: model.levelNum, info: String(format: "社区世界杯再胜利%@次可升级LV%ld", model.upgradeConditions,model.nextLevel), btnName: "去查看",medalType: model.medalType,isTopLevel: model.isTopLevel)) case .counter: self?.items.append(MentalInfo(icon: UIImage(named: "icon_coupon_7"), l1: "FIGHTING", l2: model.medalName, level: model.levelNum, info: String(format: "社区世界杯再参与%@次可升级LV%ld", model.upgradeConditions,model.nextLevel), btnName: "去查看",medalType: model.medalType,isTopLevel: model.isTopLevel)) default:break } } self?.tableView.reloadData() } }).disposed(by: disposeBag) } } extension StudentMentalListVC:UITableViewDelegate{ func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let model = items[indexPath.row] switch model.medalType { case .club: navigationController?.popToRootViewController(animated: true) case .communtiy: let vc = YardListVC() push(vc: vc) case .sport: var storeModel:HomeStoreModel? if let storeStr = UserDefaults.standard.object(forKey: "CurrentStore") as? String{ if let deserModel = HomeStoreModel.deserialize(from: storeStr){ storeModel = deserModel } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let model = items[indexPath.row] switch model.medalType { case .club: navigationController?.popToRootViewController(animated: true) case .communtiy: let vc = YardListVC() push(vc: vc) case .sport: var storeModel:HomeStoreModel? if let storeStr = UserDefaults.standard.object(forKey: "CurrentStore") as? String{ if let deserModel = HomeStoreModel.deserialize(from: storeStr){ storeModel = deserModel } } let vc = ActivityListVC(cityModel: storeModel) push(vc: vc) case .deepPlayer: let vc = CourseExerciseSubListVC() push(vc: vc) case .counter,.winner: let vc = WorldCupVC() push(vc: vc) default:break } } let vc = ActivityListVC(cityModel: storeModel) push(vc: vc) case .deepPlayer: let vc = CourseExerciseSubListVC() push(vc: vc) default:break } } } extension StudentMentalListVC:UITableViewDataSource{ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return items.count } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return items.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "_StudentMentalTCell") as! StudentMentalTCell cell.mentalInfo = items[indexPath.row] return cell } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "_StudentMentalTCell") as! StudentMentalTCell cell.mentalInfo = items[indexPath.row] return cell } } WanPai/Root/Course/View/CourseSubTypeView.swift
@@ -91,7 +91,7 @@ let item = items[indexPath.row] cell.label_content.text = item.name if selectModel == nil{ cell.isSelected = indexPath.row == 0 cell.isSelected = false }else{ cell.isSelected = selectModel?.name == item.name } WanPai/Root/Home/Model/WorldCupModel.swift
@@ -19,6 +19,7 @@ var matchNumber: Int = 0 var name: String = "" var registrationClosingTime:String? var endTime:String = "" var worldCupId:Int = 0 } WanPai/Root/Home/VC/WorldCupListVC.swift
@@ -14,21 +14,13 @@ class WorldCupListViewModel:RefreshModel<WorldCupListModel>{ var search = BehaviorRelay<String?>(value:nil) var gender = BehaviorRelay<NormalSimpleModel>(value:NormalSimpleModel(id: 0, name: "全部")) var gender = BehaviorRelay<NormalSimpleModel?>(value:nil) var sort = BehaviorRelay<Int?>(value:nil) var storeId = BehaviorRelay<NormalSimpleModel?>(value: nil) override func api() -> (Observable<BaseResponse<[WorldCupListModel]>>)? { let deserModel = HomeStoreModel.deserialize(from: UserDefaults.standard.object(forKey: "CurrentStore") as? String) var genderID:Int? if gender.value.id == 0{ genderID = nil }else{ genderID = gender.value.id } return Services.worldCupList(id: deserModel!.storeId, content: search.value, gender:genderID, sort: sort.value, storeId: storeId.value?.id) return Services.worldCupList(id: deserModel!.storeId, content: search.value, gender:gender.value?.id, sort: sort.value, storeId: storeId.value?.id) } } @@ -211,7 +203,7 @@ pointView?.removeFromSuperview() conditionView?.removeFromSuperview() btn.isSelected = !btn.isSelected let sortType = btn.isSelected ? SortType.desc:SortType.asc let sortType = btn.isSelected ? SortType.asc:SortType.desc btn.setImage(sortType.img, for: .normal) viewModel.sort.accept(btn.isSelected ? 1:2) viewModel.beginRefresh() WanPai/Root/Other/VC/PaymentResultVC.swift
@@ -272,7 +272,7 @@ jumpAndRemoveSelfVC(vc) case "查看预约": let vc = YardBookingListVC() jumpAndRemoveSelfVC(vc) case "立即预约": navigationController?.qmui_popToRootViewController(animated: true, completion: { () in JQ_currentViewController().tabBarController?.selectedIndex = 1 @@ -288,7 +288,7 @@ jumpAndRemoveSelfVC(vc) } case "再次支付": if objType == .courseApply{ if objType == .courseApply || objType == .worldCup{ navigationController?.popViewController(animated: true, {[weak self] in self?.againClouse?() }) WanPai/Root/Other/VC/ProfileVC.swift
@@ -39,6 +39,11 @@ self?.label_vipDutime.text = model.memberLifespan self?.btn_userProfile.sd_setImage(with: URL(string: model.userImage), for: .normal,placeholderImage: UIImage(named: "btn_userProfile")) self?.view_vipExpired.isHidden = model.isVip == 0 self?.tf_username.isEnabled = model.userName.isEmpty self?.tf_gender.isEnabled = model.sex.isEmpty self?.tf_birthday.isEnabled = model.birthday.isEmpty } }).disposed(by: disposeBag) @@ -113,13 +118,13 @@ } @IBAction func userAgreementAction(_ sender: Any) { push(vc: CommonWebVC(type: .user)) push(vc: CommonWebVC(type: .user,needBackBtn: true)) } @IBAction func privacyAgreementAction(_ sender: Any) { push(vc: CommonWebVC(type: .privacy)) push(vc: CommonWebVC(type: .privacy,needBackBtn: true)) } @IBAction func dismissAccountAction(_ sender: UIButton) { @@ -142,7 +147,7 @@ }else{ gender = .woman } Services.updateInfo(birthday: nil, gender: gender.rawValue, name: nil).subscribe(onNext: {[weak self] data in self?.updateUserInfo() }).disposed(by: weakSelf.disposeBag) WanPai/Root/Other/VC/ProfileVC.xib
@@ -28,408 +28,433 @@ <rect key="frame" x="0.0" y="0.0" width="393" height="852"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <subviews> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="DAK-PF-zJB"> <rect key="frame" x="140.66666666666666" y="111" width="112" height="112"/> <color key="backgroundColor" systemColor="systemGroupedBackgroundColor"/> <constraints> <constraint firstAttribute="width" constant="112" id="E73-rD-eBI"/> <constraint firstAttribute="height" constant="112" id="SQv-JR-SYy"/> </constraints> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" image="btn_camera"/> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="56"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> <connections> <action selector="updateProfileAction:" destination="-1" eventType="touchUpInside" id="o0X-nt-Wcu"/> </connections> </button> <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="R9B-6k-bGu"> <rect key="frame" x="0.0" y="253" width="393" height="459"/> <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="xeS-ed-nBY"> <rect key="frame" x="0.0" y="0.0" width="393" height="852"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="b2k-2V-k9C"> <rect key="frame" x="0.0" y="0.0" width="393" height="51"/> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="BX3-7g-nap"> <rect key="frame" x="0.0" y="0.0" width="393" height="753"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="vAy-G7-z7P"> <rect key="frame" x="14" y="50.666666666666686" width="365" height="0.3333333333333357"/> <color key="backgroundColor" red="0.83137254901960778" green="0.83137254901960778" blue="0.83137254901960778" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="DAK-PF-zJB"> <rect key="frame" x="140.66666666666666" y="52" width="112" height="112"/> <color key="backgroundColor" systemColor="systemGroupedBackgroundColor"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="rhn-Yh-6ix"/> <constraint firstAttribute="width" constant="112" id="E73-rD-eBI"/> <constraint firstAttribute="height" constant="112" id="SQv-JR-SYy"/> </constraints> </view> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="用户姓名" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="p1h-rL-UFE"> <rect key="frame" x="14.000000000000004" y="17" width="57.333333333333343" height="17"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="--" textAlignment="right" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="Hv3-2p-Y2p"> <rect key="frame" x="81.333333333333343" y="16.333333333333314" width="294.66666666666663" height="18.666666666666671"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <textInputTraits key="textInputTraits"/> </textField> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <state key="normal" image="btn_camera"/> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="56"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> <connections> <action selector="updateProfileAction:" destination="-1" eventType="touchUpInside" id="o0X-nt-Wcu"/> </connections> </button> <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="R9B-6k-bGu"> <rect key="frame" x="0.0" y="194" width="393" height="459"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="b2k-2V-k9C"> <rect key="frame" x="0.0" y="0.0" width="393" height="51"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="vAy-G7-z7P"> <rect key="frame" x="14" y="50.666666666666657" width="365" height="0.3333333333333357"/> <color key="backgroundColor" red="0.83137254901960778" green="0.83137254901960778" blue="0.83137254901960778" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="rhn-Yh-6ix"/> </constraints> </view> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="用户姓名" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="p1h-rL-UFE"> <rect key="frame" x="14.000000000000004" y="17" width="57.333333333333343" height="17"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="--" textAlignment="right" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="Hv3-2p-Y2p"> <rect key="frame" x="81.333333333333343" y="16.333333333333343" width="294.66666666666663" height="18.666666666666671"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <textInputTraits key="textInputTraits"/> </textField> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="Hv3-2p-Y2p" firstAttribute="leading" secondItem="p1h-rL-UFE" secondAttribute="trailing" constant="10" id="5ta-tU-Hc1"/> <constraint firstAttribute="bottom" secondItem="vAy-G7-z7P" secondAttribute="bottom" id="GI1-cv-eE2"/> <constraint firstItem="vAy-G7-z7P" firstAttribute="leading" secondItem="b2k-2V-k9C" secondAttribute="leading" constant="14" id="NsJ-TV-WEK"/> <constraint firstItem="Hv3-2p-Y2p" firstAttribute="centerY" secondItem="p1h-rL-UFE" secondAttribute="centerY" id="Yze-58-o2M"/> <constraint firstAttribute="trailing" secondItem="Hv3-2p-Y2p" secondAttribute="trailing" constant="17" id="boO-W9-SJP"/> <constraint firstAttribute="height" constant="51" id="mb3-Lu-vBK"/> <constraint firstItem="p1h-rL-UFE" firstAttribute="leading" secondItem="b2k-2V-k9C" secondAttribute="leading" constant="14" id="nAZ-DK-56m"/> <constraint firstAttribute="trailing" secondItem="vAy-G7-z7P" secondAttribute="trailing" constant="14" id="sOJ-L7-0Zl"/> <constraint firstItem="p1h-rL-UFE" firstAttribute="centerY" secondItem="b2k-2V-k9C" secondAttribute="centerY" id="ze5-YL-hOl"/> </constraints> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="iPt-bU-TRd"> <rect key="frame" x="0.0" y="51" width="393" height="51"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="beT-Wj-n8U"> <rect key="frame" x="14" y="50.666666666666686" width="365" height="0.3333333333333357"/> <color key="backgroundColor" red="0.83137254900000002" green="0.83137254900000002" blue="0.83137254900000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="xcZ-6d-tbL"/> </constraints> </view> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="联系方式" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6jx-eb-RXN"> <rect key="frame" x="14.000000000000004" y="17" width="57.333333333333343" height="17"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ec9-N9-5yO"> <rect key="frame" x="362.66666666666669" y="17" width="13.333333333333314" height="17"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstAttribute="height" constant="51" id="G9D-P8-wg3"/> <constraint firstAttribute="trailing" secondItem="beT-Wj-n8U" secondAttribute="trailing" constant="14" id="YHI-Zf-Mtd"/> <constraint firstItem="Ec9-N9-5yO" firstAttribute="centerY" secondItem="6jx-eb-RXN" secondAttribute="centerY" id="bQF-5m-1lv"/> <constraint firstItem="beT-Wj-n8U" firstAttribute="leading" secondItem="iPt-bU-TRd" secondAttribute="leading" constant="14" id="g3H-0c-BfQ"/> <constraint firstItem="6jx-eb-RXN" firstAttribute="leading" secondItem="iPt-bU-TRd" secondAttribute="leading" constant="14" id="ikM-S3-5oE"/> <constraint firstAttribute="trailing" secondItem="Ec9-N9-5yO" secondAttribute="trailing" constant="17" id="qDd-PW-T0v"/> <constraint firstAttribute="bottom" secondItem="beT-Wj-n8U" secondAttribute="bottom" id="sut-wb-5tA"/> <constraint firstItem="6jx-eb-RXN" firstAttribute="centerY" secondItem="iPt-bU-TRd" secondAttribute="centerY" id="vdb-in-qiD"/> </constraints> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mCJ-rn-t8T"> <rect key="frame" x="0.0" y="102" width="393" height="51"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="W8Y-Oy-amf"> <rect key="frame" x="14" y="50.666666666666686" width="365" height="0.3333333333333357"/> <color key="backgroundColor" red="0.83137254900000002" green="0.83137254900000002" blue="0.83137254900000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="fI7-fO-gjk"/> </constraints> </view> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="性别" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Cbg-dh-tEs"> <rect key="frame" x="14.000000000000002" y="17" width="28.666666666666671" height="17"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="--" textAlignment="right" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="0Ca-pS-Hc6"> <rect key="frame" x="52.666666666666657" y="16.333333333333314" width="323.33333333333337" height="18.666666666666671"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <textInputTraits key="textInputTraits"/> </textField> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="0Ca-pS-Hc6" firstAttribute="centerY" secondItem="mCJ-rn-t8T" secondAttribute="centerY" id="1iz-RF-m5t"/> <constraint firstAttribute="height" constant="51" id="5Ax-vc-Jq2"/> <constraint firstItem="Cbg-dh-tEs" firstAttribute="leading" secondItem="mCJ-rn-t8T" secondAttribute="leading" constant="14" id="9Is-NY-Rfj"/> <constraint firstItem="W8Y-Oy-amf" firstAttribute="leading" secondItem="mCJ-rn-t8T" secondAttribute="leading" constant="14" id="A8V-2Q-OkG"/> <constraint firstAttribute="bottom" secondItem="W8Y-Oy-amf" secondAttribute="bottom" id="IfV-KU-7Uw"/> <constraint firstAttribute="trailing" secondItem="W8Y-Oy-amf" secondAttribute="trailing" constant="14" id="Xeg-eH-YdH"/> <constraint firstAttribute="trailing" secondItem="0Ca-pS-Hc6" secondAttribute="trailing" constant="17" id="m7L-nB-dNl"/> <constraint firstItem="0Ca-pS-Hc6" firstAttribute="leading" secondItem="Cbg-dh-tEs" secondAttribute="trailing" constant="10" id="pnQ-ND-x8x"/> <constraint firstItem="Cbg-dh-tEs" firstAttribute="centerY" secondItem="mCJ-rn-t8T" secondAttribute="centerY" id="yWX-ky-P9t"/> </constraints> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Jsd-mD-Qt3"> <rect key="frame" x="0.0" y="153" width="393" height="51"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Knb-gk-eBK"> <rect key="frame" x="14" y="50.666666666666686" width="365" height="0.3333333333333357"/> <color key="backgroundColor" red="0.83137254900000002" green="0.83137254900000002" blue="0.83137254900000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="Fd6-iF-l84"/> </constraints> </view> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="生日" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WTO-bR-h4Z"> <rect key="frame" x="14.000000000000002" y="17" width="28.666666666666671" height="17"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="--" textAlignment="right" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="yvE-PF-kOr"> <rect key="frame" x="52.666666666666657" y="16.333333333333314" width="323.33333333333337" height="18.666666666666671"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <textInputTraits key="textInputTraits"/> </textField> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstAttribute="trailing" secondItem="yvE-PF-kOr" secondAttribute="trailing" constant="17" id="Dus-An-dJ6"/> <constraint firstAttribute="height" constant="51" id="EWY-q4-QLf"/> <constraint firstAttribute="bottom" secondItem="Knb-gk-eBK" secondAttribute="bottom" id="Ngh-sd-5Pb"/> <constraint firstItem="yvE-PF-kOr" firstAttribute="centerY" secondItem="Jsd-mD-Qt3" secondAttribute="centerY" id="XpD-h6-noL"/> <constraint firstItem="yvE-PF-kOr" firstAttribute="leading" secondItem="WTO-bR-h4Z" secondAttribute="trailing" constant="10" id="f9a-pl-fCn"/> <constraint firstItem="Knb-gk-eBK" firstAttribute="leading" secondItem="Jsd-mD-Qt3" secondAttribute="leading" constant="14" id="ipI-UQ-pKG"/> <constraint firstItem="WTO-bR-h4Z" firstAttribute="leading" secondItem="Jsd-mD-Qt3" secondAttribute="leading" constant="14" id="m7i-iB-HpR"/> <constraint firstAttribute="trailing" secondItem="Knb-gk-eBK" secondAttribute="trailing" constant="14" id="q4i-PG-Eid"/> <constraint firstItem="WTO-bR-h4Z" firstAttribute="centerY" secondItem="Jsd-mD-Qt3" secondAttribute="centerY" id="qit-ZY-uWv"/> </constraints> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4Si-tj-2Vy"> <rect key="frame" x="0.0" y="204" width="393" height="51"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="9qT-eV-ESp"> <rect key="frame" x="14" y="50.666666666666686" width="365" height="0.3333333333333357"/> <color key="backgroundColor" red="0.83137254900000002" green="0.83137254900000002" blue="0.83137254900000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="6bW-cF-74K"/> </constraints> </view> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="所在地区" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dbZ-d2-h7V"> <rect key="frame" x="14.000000000000004" y="17" width="57.333333333333343" height="17"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="KeY-Wp-GF3"> <rect key="frame" x="362.66666666666669" y="17" width="13.333333333333314" height="17"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="KeY-Wp-GF3" firstAttribute="centerY" secondItem="dbZ-d2-h7V" secondAttribute="centerY" id="3Pp-Qg-Mr9"/> <constraint firstAttribute="bottom" secondItem="9qT-eV-ESp" secondAttribute="bottom" id="4bi-ot-7lC"/> <constraint firstItem="9qT-eV-ESp" firstAttribute="leading" secondItem="4Si-tj-2Vy" secondAttribute="leading" constant="14" id="BOk-qL-NNF"/> <constraint firstItem="dbZ-d2-h7V" firstAttribute="leading" secondItem="4Si-tj-2Vy" secondAttribute="leading" constant="14" id="Nta-IR-59f"/> <constraint firstAttribute="height" constant="51" id="Rd6-4a-1UP"/> <constraint firstItem="dbZ-d2-h7V" firstAttribute="centerY" secondItem="4Si-tj-2Vy" secondAttribute="centerY" id="YGt-Wb-w44"/> <constraint firstAttribute="trailing" secondItem="KeY-Wp-GF3" secondAttribute="trailing" constant="17" id="dfN-6i-jk7"/> <constraint firstAttribute="trailing" secondItem="9qT-eV-ESp" secondAttribute="trailing" constant="14" id="nl3-MS-TPO"/> </constraints> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="2K0-H1-xLC"> <rect key="frame" x="0.0" y="255" width="393" height="51"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4ZK-ib-Om9"> <rect key="frame" x="14" y="50.666666666666686" width="365" height="0.3333333333333357"/> <color key="backgroundColor" red="0.83137254900000002" green="0.83137254900000002" blue="0.83137254900000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="uM9-Am-vue"/> </constraints> </view> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="会员有效期" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fzJ-cy-nAh"> <rect key="frame" x="14" y="17" width="71.666666666666671" height="17"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Xkh-Hd-htf"> <rect key="frame" x="362.66666666666669" y="17" width="13.333333333333314" height="17"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="4ZK-ib-Om9" firstAttribute="leading" secondItem="2K0-H1-xLC" secondAttribute="leading" constant="14" id="8NC-rr-Xt1"/> <constraint firstItem="Xkh-Hd-htf" firstAttribute="centerY" secondItem="fzJ-cy-nAh" secondAttribute="centerY" id="Erp-Sb-T10"/> <constraint firstItem="fzJ-cy-nAh" firstAttribute="centerY" secondItem="2K0-H1-xLC" secondAttribute="centerY" id="GeP-tm-5G8"/> <constraint firstAttribute="bottom" secondItem="4ZK-ib-Om9" secondAttribute="bottom" id="Vzb-iH-qzt"/> <constraint firstAttribute="trailing" secondItem="4ZK-ib-Om9" secondAttribute="trailing" constant="14" id="YMq-4b-uEw"/> <constraint firstAttribute="height" constant="51" id="c4K-Tf-r3G"/> <constraint firstItem="fzJ-cy-nAh" firstAttribute="leading" secondItem="2K0-H1-xLC" secondAttribute="leading" constant="14" id="cBf-Qo-UE7"/> <constraint firstAttribute="trailing" secondItem="Xkh-Hd-htf" secondAttribute="trailing" constant="17" id="feQ-Qt-XfD"/> </constraints> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="aso-eB-Jim" customClass="TapBtn" customModule="WanPai" customModuleProvider="target"> <rect key="frame" x="0.0" y="306" width="393" height="51"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="SLz-E6-EPU"> <rect key="frame" x="14" y="50.666666666666629" width="365" height="0.3333333333333357"/> <color key="backgroundColor" red="0.83137254900000002" green="0.83137254900000002" blue="0.83137254900000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="CAc-BC-e3a"/> </constraints> </view> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="修改密码" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="pEn-a6-qmn"> <rect key="frame" x="14.000000000000004" y="17" width="57.333333333333343" height="17"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <color key="textColor" red="0.99215686274509807" green="0.49019607843137253" blue="0.0078431372549019607" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_more_y" translatesAutoresizingMaskIntoConstraints="NO" id="qUv-ob-kMX"> <rect key="frame" x="368" y="19" width="8" height="13"/> </imageView> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstAttribute="height" constant="51" id="8MJ-n9-d5E"/> <constraint firstItem="pEn-a6-qmn" firstAttribute="centerY" secondItem="aso-eB-Jim" secondAttribute="centerY" id="FO6-2p-wvq"/> <constraint firstAttribute="trailing" secondItem="SLz-E6-EPU" secondAttribute="trailing" constant="14" id="Jrt-m4-UqB"/> <constraint firstAttribute="trailing" secondItem="qUv-ob-kMX" secondAttribute="trailing" constant="17" id="MlX-2j-Pyx"/> <constraint firstItem="qUv-ob-kMX" firstAttribute="centerY" secondItem="aso-eB-Jim" secondAttribute="centerY" id="ebm-DD-4tP"/> <constraint firstItem="pEn-a6-qmn" firstAttribute="leading" secondItem="aso-eB-Jim" secondAttribute="leading" constant="14" id="gth-DS-Xey"/> <constraint firstAttribute="bottom" secondItem="SLz-E6-EPU" secondAttribute="bottom" id="opp-Jf-hI6"/> <constraint firstItem="SLz-E6-EPU" firstAttribute="leading" secondItem="aso-eB-Jim" secondAttribute="leading" constant="14" id="t1v-7m-CO7"/> </constraints> <connections> <action selector="updatePwdAction:" destination="-1" eventType="touchUpInside" id="Vzm-fA-XKJ"/> </connections> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="a63-aL-Eid" customClass="TapBtn" customModule="WanPai" customModuleProvider="target"> <rect key="frame" x="0.0" y="357" width="393" height="51"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="EkC-Bl-hHR"> <rect key="frame" x="14" y="50.666666666666629" width="365" height="0.3333333333333357"/> <color key="backgroundColor" red="0.83137254900000002" green="0.83137254900000002" blue="0.83137254900000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="Aev-y4-DHo"/> </constraints> </view> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_more_y" translatesAutoresizingMaskIntoConstraints="NO" id="9S4-qi-vaZ"> <rect key="frame" x="368" y="19" width="8" height="13"/> </imageView> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="用户协议" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="HaZ-hn-5rr"> <rect key="frame" x="14.000000000000004" y="17" width="57.333333333333343" height="17"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <color key="textColor" red="0.99215686274509807" green="0.49019607843137253" blue="0.0078431372549019607" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstAttribute="height" constant="51" id="4EW-cg-s06"/> <constraint firstItem="9S4-qi-vaZ" firstAttribute="centerY" secondItem="a63-aL-Eid" secondAttribute="centerY" id="4Vd-WS-SzJ"/> <constraint firstItem="HaZ-hn-5rr" firstAttribute="centerY" secondItem="a63-aL-Eid" secondAttribute="centerY" id="8KB-sH-D4g"/> <constraint firstItem="HaZ-hn-5rr" firstAttribute="leading" secondItem="a63-aL-Eid" secondAttribute="leading" constant="14" id="B9X-cp-07Q"/> <constraint firstItem="EkC-Bl-hHR" firstAttribute="leading" secondItem="a63-aL-Eid" secondAttribute="leading" constant="14" id="OLO-rC-rbt"/> <constraint firstAttribute="bottom" secondItem="EkC-Bl-hHR" secondAttribute="bottom" id="nEh-g5-PJM"/> <constraint firstAttribute="trailing" secondItem="EkC-Bl-hHR" secondAttribute="trailing" constant="14" id="rGm-Rf-FM7"/> <constraint firstAttribute="trailing" secondItem="9S4-qi-vaZ" secondAttribute="trailing" constant="17" id="uv0-5f-OxN"/> </constraints> <connections> <action selector="userAgreementAction:" destination="-1" eventType="touchUpInside" id="io5-1K-Mso"/> </connections> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="tYi-Sq-9DM" customClass="TapBtn" customModule="WanPai" customModuleProvider="target"> <rect key="frame" x="0.0" y="408" width="393" height="51"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="9AA-Gm-jhb"> <rect key="frame" x="14" y="50.666666666666629" width="365" height="0.33333333333334281"/> <color key="backgroundColor" red="0.83137254900000002" green="0.83137254900000002" blue="0.83137254900000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="Xkf-ds-Ako"/> </constraints> </view> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_more_y" translatesAutoresizingMaskIntoConstraints="NO" id="IWJ-Hr-d0k"> <rect key="frame" x="368" y="19" width="8" height="13"/> </imageView> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="隐私协议" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Zuo-b2-tac"> <rect key="frame" x="14.000000000000004" y="17" width="57.333333333333343" height="17"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <color key="textColor" red="0.99215686270000003" green="0.49019607840000001" blue="0.0078431372550000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstAttribute="trailing" secondItem="IWJ-Hr-d0k" secondAttribute="trailing" constant="17" id="E2s-3s-LxE"/> <constraint firstItem="Zuo-b2-tac" firstAttribute="leading" secondItem="tYi-Sq-9DM" secondAttribute="leading" constant="14" id="E3j-KS-wM1"/> <constraint firstItem="Zuo-b2-tac" firstAttribute="centerY" secondItem="tYi-Sq-9DM" secondAttribute="centerY" id="FkA-gs-1KF"/> <constraint firstAttribute="bottom" secondItem="9AA-Gm-jhb" secondAttribute="bottom" id="Olv-4Q-30b"/> <constraint firstItem="9AA-Gm-jhb" firstAttribute="leading" secondItem="tYi-Sq-9DM" secondAttribute="leading" constant="14" id="hmy-7l-SRg"/> <constraint firstAttribute="trailing" secondItem="9AA-Gm-jhb" secondAttribute="trailing" constant="14" id="vR5-Je-hF3"/> <constraint firstItem="IWJ-Hr-d0k" firstAttribute="centerY" secondItem="tYi-Sq-9DM" secondAttribute="centerY" id="xQC-Gb-HD9"/> <constraint firstAttribute="height" constant="51" id="ytx-zO-bvu"/> </constraints> <connections> <action selector="privacyAgreementAction:" destination="-1" eventType="touchUpInside" id="hHw-z6-VRl"/> </connections> </view> </subviews> </stackView> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="s12-1B-Lxb"> <rect key="frame" x="41" y="699" width="145.66666666666666" height="40"/> <constraints> <constraint firstAttribute="height" constant="40" id="oiT-GM-y4C"/> </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="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="20"/> </userDefinedRuntimeAttribute> <userDefinedRuntimeAttribute type="color" keyPath="jq_xibBorderColor"> <color key="value" name="FE6E0D"/> </userDefinedRuntimeAttribute> <userDefinedRuntimeAttribute type="number" keyPath="jq_xibBorderWidth"> <real key="value" value="1"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> <connections> <action selector="dismissAccountAction:" destination="-1" eventType="touchUpInside" id="1MR-wG-d2B"/> <action selector="logOffAction:" destination="-1" eventType="touchUpInside" id="vzg-QJ-4Yu"/> </connections> </button> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="5Bn-Ou-0kZ"> <rect key="frame" x="206.66666666666663" y="699" width="145.33333333333337" height="40"/> <color key="backgroundColor" name="FE6E0D"/> <constraints> <constraint firstAttribute="height" constant="40" id="5al-Qy-joB"/> </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="退出登录"/> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="20"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> <connections> <action selector="logoutAction:" destination="-1" eventType="touchUpInside" id="4VC-G0-dpn"/> </connections> </button> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="Hv3-2p-Y2p" firstAttribute="leading" secondItem="p1h-rL-UFE" secondAttribute="trailing" constant="10" id="5ta-tU-Hc1"/> <constraint firstAttribute="bottom" secondItem="vAy-G7-z7P" secondAttribute="bottom" id="GI1-cv-eE2"/> <constraint firstItem="vAy-G7-z7P" firstAttribute="leading" secondItem="b2k-2V-k9C" secondAttribute="leading" constant="14" id="NsJ-TV-WEK"/> <constraint firstItem="Hv3-2p-Y2p" firstAttribute="centerY" secondItem="p1h-rL-UFE" secondAttribute="centerY" id="Yze-58-o2M"/> <constraint firstAttribute="trailing" secondItem="Hv3-2p-Y2p" secondAttribute="trailing" constant="17" id="boO-W9-SJP"/> <constraint firstAttribute="height" constant="51" id="mb3-Lu-vBK"/> <constraint firstItem="p1h-rL-UFE" firstAttribute="leading" secondItem="b2k-2V-k9C" secondAttribute="leading" constant="14" id="nAZ-DK-56m"/> <constraint firstAttribute="trailing" secondItem="vAy-G7-z7P" secondAttribute="trailing" constant="14" id="sOJ-L7-0Zl"/> <constraint firstItem="p1h-rL-UFE" firstAttribute="centerY" secondItem="b2k-2V-k9C" secondAttribute="centerY" id="ze5-YL-hOl"/> <constraint firstItem="DAK-PF-zJB" firstAttribute="top" secondItem="BX3-7g-nap" secondAttribute="top" constant="52" id="08p-ad-dXd"/> <constraint firstItem="5Bn-Ou-0kZ" firstAttribute="leading" secondItem="s12-1B-Lxb" secondAttribute="trailing" constant="20" id="1w7-Yb-3e2"/> <constraint firstItem="DAK-PF-zJB" firstAttribute="centerX" secondItem="BX3-7g-nap" secondAttribute="centerX" id="7d7-gf-Qcy"/> <constraint firstAttribute="bottom" secondItem="s12-1B-Lxb" secondAttribute="bottom" constant="14" id="IoO-zy-rDM"/> <constraint firstAttribute="trailing" secondItem="5Bn-Ou-0kZ" secondAttribute="trailing" constant="41" id="LO0-Wm-R96"/> <constraint firstItem="R9B-6k-bGu" firstAttribute="leading" secondItem="BX3-7g-nap" secondAttribute="leading" id="Wqj-cT-bwr"/> <constraint firstAttribute="trailing" secondItem="R9B-6k-bGu" secondAttribute="trailing" id="alK-GB-5Bt"/> <constraint firstItem="s12-1B-Lxb" firstAttribute="width" secondItem="5Bn-Ou-0kZ" secondAttribute="width" id="cFf-fs-uT6"/> <constraint firstItem="R9B-6k-bGu" firstAttribute="top" secondItem="DAK-PF-zJB" secondAttribute="bottom" constant="30" id="gOP-T5-KJq"/> <constraint firstItem="s12-1B-Lxb" firstAttribute="top" secondItem="R9B-6k-bGu" secondAttribute="bottom" constant="46" id="oCl-do-Ayr"/> <constraint firstItem="s12-1B-Lxb" firstAttribute="leading" secondItem="BX3-7g-nap" secondAttribute="leading" constant="41" id="oeH-ip-gbn"/> <constraint firstItem="s12-1B-Lxb" firstAttribute="centerY" secondItem="5Bn-Ou-0kZ" secondAttribute="centerY" id="qrj-cx-BlZ"/> </constraints> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="iPt-bU-TRd"> <rect key="frame" x="0.0" y="51" width="393" height="51"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="beT-Wj-n8U"> <rect key="frame" x="14" y="50.666666666666686" width="365" height="0.3333333333333357"/> <color key="backgroundColor" red="0.83137254900000002" green="0.83137254900000002" blue="0.83137254900000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="xcZ-6d-tbL"/> </constraints> </view> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="联系方式" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6jx-eb-RXN"> <rect key="frame" x="14.000000000000004" y="17" width="57.333333333333343" height="17"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ec9-N9-5yO"> <rect key="frame" x="362.66666666666669" y="17" width="13.333333333333314" height="17"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstAttribute="height" constant="51" id="G9D-P8-wg3"/> <constraint firstAttribute="trailing" secondItem="beT-Wj-n8U" secondAttribute="trailing" constant="14" id="YHI-Zf-Mtd"/> <constraint firstItem="Ec9-N9-5yO" firstAttribute="centerY" secondItem="6jx-eb-RXN" secondAttribute="centerY" id="bQF-5m-1lv"/> <constraint firstItem="beT-Wj-n8U" firstAttribute="leading" secondItem="iPt-bU-TRd" secondAttribute="leading" constant="14" id="g3H-0c-BfQ"/> <constraint firstItem="6jx-eb-RXN" firstAttribute="leading" secondItem="iPt-bU-TRd" secondAttribute="leading" constant="14" id="ikM-S3-5oE"/> <constraint firstAttribute="trailing" secondItem="Ec9-N9-5yO" secondAttribute="trailing" constant="17" id="qDd-PW-T0v"/> <constraint firstAttribute="bottom" secondItem="beT-Wj-n8U" secondAttribute="bottom" id="sut-wb-5tA"/> <constraint firstItem="6jx-eb-RXN" firstAttribute="centerY" secondItem="iPt-bU-TRd" secondAttribute="centerY" id="vdb-in-qiD"/> </constraints> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mCJ-rn-t8T"> <rect key="frame" x="0.0" y="102" width="393" height="51"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="W8Y-Oy-amf"> <rect key="frame" x="14" y="50.666666666666686" width="365" height="0.3333333333333357"/> <color key="backgroundColor" red="0.83137254900000002" green="0.83137254900000002" blue="0.83137254900000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="fI7-fO-gjk"/> </constraints> </view> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="性别" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Cbg-dh-tEs"> <rect key="frame" x="14.000000000000002" y="17" width="28.666666666666671" height="17"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="--" textAlignment="right" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="0Ca-pS-Hc6"> <rect key="frame" x="52.666666666666657" y="16.333333333333314" width="323.33333333333337" height="18.666666666666671"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <textInputTraits key="textInputTraits"/> </textField> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="0Ca-pS-Hc6" firstAttribute="centerY" secondItem="mCJ-rn-t8T" secondAttribute="centerY" id="1iz-RF-m5t"/> <constraint firstAttribute="height" constant="51" id="5Ax-vc-Jq2"/> <constraint firstItem="Cbg-dh-tEs" firstAttribute="leading" secondItem="mCJ-rn-t8T" secondAttribute="leading" constant="14" id="9Is-NY-Rfj"/> <constraint firstItem="W8Y-Oy-amf" firstAttribute="leading" secondItem="mCJ-rn-t8T" secondAttribute="leading" constant="14" id="A8V-2Q-OkG"/> <constraint firstAttribute="bottom" secondItem="W8Y-Oy-amf" secondAttribute="bottom" id="IfV-KU-7Uw"/> <constraint firstAttribute="trailing" secondItem="W8Y-Oy-amf" secondAttribute="trailing" constant="14" id="Xeg-eH-YdH"/> <constraint firstAttribute="trailing" secondItem="0Ca-pS-Hc6" secondAttribute="trailing" constant="17" id="m7L-nB-dNl"/> <constraint firstItem="0Ca-pS-Hc6" firstAttribute="leading" secondItem="Cbg-dh-tEs" secondAttribute="trailing" constant="10" id="pnQ-ND-x8x"/> <constraint firstItem="Cbg-dh-tEs" firstAttribute="centerY" secondItem="mCJ-rn-t8T" secondAttribute="centerY" id="yWX-ky-P9t"/> </constraints> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Jsd-mD-Qt3"> <rect key="frame" x="0.0" y="153" width="393" height="51"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Knb-gk-eBK"> <rect key="frame" x="14" y="50.666666666666686" width="365" height="0.3333333333333357"/> <color key="backgroundColor" red="0.83137254900000002" green="0.83137254900000002" blue="0.83137254900000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="Fd6-iF-l84"/> </constraints> </view> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="生日" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WTO-bR-h4Z"> <rect key="frame" x="14.000000000000002" y="17" width="28.666666666666671" height="17"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <textField opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="248" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="--" textAlignment="right" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="yvE-PF-kOr"> <rect key="frame" x="52.666666666666657" y="16.333333333333314" width="323.33333333333337" height="18.666666666666671"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <textInputTraits key="textInputTraits"/> </textField> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstAttribute="trailing" secondItem="yvE-PF-kOr" secondAttribute="trailing" constant="17" id="Dus-An-dJ6"/> <constraint firstAttribute="height" constant="51" id="EWY-q4-QLf"/> <constraint firstAttribute="bottom" secondItem="Knb-gk-eBK" secondAttribute="bottom" id="Ngh-sd-5Pb"/> <constraint firstItem="yvE-PF-kOr" firstAttribute="centerY" secondItem="Jsd-mD-Qt3" secondAttribute="centerY" id="XpD-h6-noL"/> <constraint firstItem="yvE-PF-kOr" firstAttribute="leading" secondItem="WTO-bR-h4Z" secondAttribute="trailing" constant="10" id="f9a-pl-fCn"/> <constraint firstItem="Knb-gk-eBK" firstAttribute="leading" secondItem="Jsd-mD-Qt3" secondAttribute="leading" constant="14" id="ipI-UQ-pKG"/> <constraint firstItem="WTO-bR-h4Z" firstAttribute="leading" secondItem="Jsd-mD-Qt3" secondAttribute="leading" constant="14" id="m7i-iB-HpR"/> <constraint firstAttribute="trailing" secondItem="Knb-gk-eBK" secondAttribute="trailing" constant="14" id="q4i-PG-Eid"/> <constraint firstItem="WTO-bR-h4Z" firstAttribute="centerY" secondItem="Jsd-mD-Qt3" secondAttribute="centerY" id="qit-ZY-uWv"/> </constraints> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4Si-tj-2Vy"> <rect key="frame" x="0.0" y="204" width="393" height="51"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="9qT-eV-ESp"> <rect key="frame" x="14" y="50.666666666666686" width="365" height="0.3333333333333357"/> <color key="backgroundColor" red="0.83137254900000002" green="0.83137254900000002" blue="0.83137254900000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="6bW-cF-74K"/> </constraints> </view> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="所在地区" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="dbZ-d2-h7V"> <rect key="frame" x="14.000000000000004" y="17" width="57.333333333333343" height="17"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="KeY-Wp-GF3"> <rect key="frame" x="362.66666666666669" y="17" width="13.333333333333314" height="17"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="KeY-Wp-GF3" firstAttribute="centerY" secondItem="dbZ-d2-h7V" secondAttribute="centerY" id="3Pp-Qg-Mr9"/> <constraint firstAttribute="bottom" secondItem="9qT-eV-ESp" secondAttribute="bottom" id="4bi-ot-7lC"/> <constraint firstItem="9qT-eV-ESp" firstAttribute="leading" secondItem="4Si-tj-2Vy" secondAttribute="leading" constant="14" id="BOk-qL-NNF"/> <constraint firstItem="dbZ-d2-h7V" firstAttribute="leading" secondItem="4Si-tj-2Vy" secondAttribute="leading" constant="14" id="Nta-IR-59f"/> <constraint firstAttribute="height" constant="51" id="Rd6-4a-1UP"/> <constraint firstItem="dbZ-d2-h7V" firstAttribute="centerY" secondItem="4Si-tj-2Vy" secondAttribute="centerY" id="YGt-Wb-w44"/> <constraint firstAttribute="trailing" secondItem="KeY-Wp-GF3" secondAttribute="trailing" constant="17" id="dfN-6i-jk7"/> <constraint firstAttribute="trailing" secondItem="9qT-eV-ESp" secondAttribute="trailing" constant="14" id="nl3-MS-TPO"/> </constraints> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="2K0-H1-xLC"> <rect key="frame" x="0.0" y="255" width="393" height="51"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4ZK-ib-Om9"> <rect key="frame" x="14" y="50.666666666666629" width="365" height="0.3333333333333357"/> <color key="backgroundColor" red="0.83137254900000002" green="0.83137254900000002" blue="0.83137254900000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="uM9-Am-vue"/> </constraints> </view> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="会员有效期" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="fzJ-cy-nAh"> <rect key="frame" x="14" y="17" width="71.666666666666671" height="17"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Xkh-Hd-htf"> <rect key="frame" x="362.66666666666669" y="17" width="13.333333333333314" height="17"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.80000000000000004" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="4ZK-ib-Om9" firstAttribute="leading" secondItem="2K0-H1-xLC" secondAttribute="leading" constant="14" id="8NC-rr-Xt1"/> <constraint firstItem="Xkh-Hd-htf" firstAttribute="centerY" secondItem="fzJ-cy-nAh" secondAttribute="centerY" id="Erp-Sb-T10"/> <constraint firstItem="fzJ-cy-nAh" firstAttribute="centerY" secondItem="2K0-H1-xLC" secondAttribute="centerY" id="GeP-tm-5G8"/> <constraint firstAttribute="bottom" secondItem="4ZK-ib-Om9" secondAttribute="bottom" id="Vzb-iH-qzt"/> <constraint firstAttribute="trailing" secondItem="4ZK-ib-Om9" secondAttribute="trailing" constant="14" id="YMq-4b-uEw"/> <constraint firstAttribute="height" constant="51" id="c4K-Tf-r3G"/> <constraint firstItem="fzJ-cy-nAh" firstAttribute="leading" secondItem="2K0-H1-xLC" secondAttribute="leading" constant="14" id="cBf-Qo-UE7"/> <constraint firstAttribute="trailing" secondItem="Xkh-Hd-htf" secondAttribute="trailing" constant="17" id="feQ-Qt-XfD"/> </constraints> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="aso-eB-Jim" customClass="TapBtn" customModule="WanPai" customModuleProvider="target"> <rect key="frame" x="0.0" y="306" width="393" height="51"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="SLz-E6-EPU"> <rect key="frame" x="14" y="50.666666666666629" width="365" height="0.3333333333333357"/> <color key="backgroundColor" red="0.83137254900000002" green="0.83137254900000002" blue="0.83137254900000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="CAc-BC-e3a"/> </constraints> </view> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="修改密码" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="pEn-a6-qmn"> <rect key="frame" x="14.000000000000004" y="17" width="57.333333333333343" height="17"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <color key="textColor" red="0.99215686274509807" green="0.49019607843137253" blue="0.0078431372549019607" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_more_y" translatesAutoresizingMaskIntoConstraints="NO" id="qUv-ob-kMX"> <rect key="frame" x="368" y="19" width="8" height="13"/> </imageView> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstAttribute="height" constant="51" id="8MJ-n9-d5E"/> <constraint firstItem="pEn-a6-qmn" firstAttribute="centerY" secondItem="aso-eB-Jim" secondAttribute="centerY" id="FO6-2p-wvq"/> <constraint firstAttribute="trailing" secondItem="SLz-E6-EPU" secondAttribute="trailing" constant="14" id="Jrt-m4-UqB"/> <constraint firstAttribute="trailing" secondItem="qUv-ob-kMX" secondAttribute="trailing" constant="17" id="MlX-2j-Pyx"/> <constraint firstItem="qUv-ob-kMX" firstAttribute="centerY" secondItem="aso-eB-Jim" secondAttribute="centerY" id="ebm-DD-4tP"/> <constraint firstItem="pEn-a6-qmn" firstAttribute="leading" secondItem="aso-eB-Jim" secondAttribute="leading" constant="14" id="gth-DS-Xey"/> <constraint firstAttribute="bottom" secondItem="SLz-E6-EPU" secondAttribute="bottom" id="opp-Jf-hI6"/> <constraint firstItem="SLz-E6-EPU" firstAttribute="leading" secondItem="aso-eB-Jim" secondAttribute="leading" constant="14" id="t1v-7m-CO7"/> </constraints> <connections> <action selector="updatePwdAction:" destination="-1" eventType="touchUpInside" id="Vzm-fA-XKJ"/> </connections> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="a63-aL-Eid" customClass="TapBtn" customModule="WanPai" customModuleProvider="target"> <rect key="frame" x="0.0" y="357" width="393" height="51"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="EkC-Bl-hHR"> <rect key="frame" x="14" y="50.666666666666629" width="365" height="0.3333333333333357"/> <color key="backgroundColor" red="0.83137254900000002" green="0.83137254900000002" blue="0.83137254900000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="Aev-y4-DHo"/> </constraints> </view> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_more_y" translatesAutoresizingMaskIntoConstraints="NO" id="9S4-qi-vaZ"> <rect key="frame" x="368" y="19" width="8" height="13"/> </imageView> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="用户协议" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="HaZ-hn-5rr"> <rect key="frame" x="14.000000000000004" y="17" width="57.333333333333343" height="17"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <color key="textColor" red="0.99215686274509807" green="0.49019607843137253" blue="0.0078431372549019607" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstAttribute="height" constant="51" id="4EW-cg-s06"/> <constraint firstItem="9S4-qi-vaZ" firstAttribute="centerY" secondItem="a63-aL-Eid" secondAttribute="centerY" id="4Vd-WS-SzJ"/> <constraint firstItem="HaZ-hn-5rr" firstAttribute="centerY" secondItem="a63-aL-Eid" secondAttribute="centerY" id="8KB-sH-D4g"/> <constraint firstItem="HaZ-hn-5rr" firstAttribute="leading" secondItem="a63-aL-Eid" secondAttribute="leading" constant="14" id="B9X-cp-07Q"/> <constraint firstItem="EkC-Bl-hHR" firstAttribute="leading" secondItem="a63-aL-Eid" secondAttribute="leading" constant="14" id="OLO-rC-rbt"/> <constraint firstAttribute="bottom" secondItem="EkC-Bl-hHR" secondAttribute="bottom" id="nEh-g5-PJM"/> <constraint firstAttribute="trailing" secondItem="EkC-Bl-hHR" secondAttribute="trailing" constant="14" id="rGm-Rf-FM7"/> <constraint firstAttribute="trailing" secondItem="9S4-qi-vaZ" secondAttribute="trailing" constant="17" id="uv0-5f-OxN"/> </constraints> <connections> <action selector="userAgreementAction:" destination="-1" eventType="touchUpInside" id="io5-1K-Mso"/> </connections> </view> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="tYi-Sq-9DM" customClass="TapBtn" customModule="WanPai" customModuleProvider="target"> <rect key="frame" x="0.0" y="408" width="393" height="51"/> <subviews> <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="9AA-Gm-jhb"> <rect key="frame" x="14" y="50.666666666666629" width="365" height="0.3333333333333357"/> <color key="backgroundColor" red="0.83137254900000002" green="0.83137254900000002" blue="0.83137254900000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> <constraint firstAttribute="height" constant="0.5" id="Xkf-ds-Ako"/> </constraints> </view> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_more_y" translatesAutoresizingMaskIntoConstraints="NO" id="IWJ-Hr-d0k"> <rect key="frame" x="368" y="19" width="8" height="13"/> </imageView> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="隐私协议" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Zuo-b2-tac"> <rect key="frame" x="14.000000000000004" y="17" width="57.333333333333343" height="17"/> <fontDescription key="fontDescription" type="system" weight="medium" pointSize="14"/> <color key="textColor" red="0.99215686270000003" green="0.49019607840000001" blue="0.0078431372550000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> </subviews> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstAttribute="trailing" secondItem="IWJ-Hr-d0k" secondAttribute="trailing" constant="17" id="E2s-3s-LxE"/> <constraint firstItem="Zuo-b2-tac" firstAttribute="leading" secondItem="tYi-Sq-9DM" secondAttribute="leading" constant="14" id="E3j-KS-wM1"/> <constraint firstItem="Zuo-b2-tac" firstAttribute="centerY" secondItem="tYi-Sq-9DM" secondAttribute="centerY" id="FkA-gs-1KF"/> <constraint firstAttribute="bottom" secondItem="9AA-Gm-jhb" secondAttribute="bottom" id="Olv-4Q-30b"/> <constraint firstItem="9AA-Gm-jhb" firstAttribute="leading" secondItem="tYi-Sq-9DM" secondAttribute="leading" constant="14" id="hmy-7l-SRg"/> <constraint firstAttribute="trailing" secondItem="9AA-Gm-jhb" secondAttribute="trailing" constant="14" id="vR5-Je-hF3"/> <constraint firstItem="IWJ-Hr-d0k" firstAttribute="centerY" secondItem="tYi-Sq-9DM" secondAttribute="centerY" id="xQC-Gb-HD9"/> <constraint firstAttribute="height" constant="51" id="ytx-zO-bvu"/> </constraints> <connections> <action selector="privacyAgreementAction:" destination="-1" eventType="valueChanged" id="ise-7d-JPs"/> </connections> </view> </subviews> </stackView> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="5Bn-Ou-0kZ"> <rect key="frame" x="206.66666666666663" y="764" width="145.33333333333337" height="40"/> <color key="backgroundColor" name="FE6E0D"/> <constraints> <constraint firstAttribute="height" constant="40" id="5al-Qy-joB"/> <constraint firstItem="BX3-7g-nap" firstAttribute="leading" secondItem="xeS-ed-nBY" secondAttribute="leading" id="HJR-Dm-jYh"/> <constraint firstItem="BX3-7g-nap" firstAttribute="top" secondItem="xeS-ed-nBY" secondAttribute="top" id="OpI-rf-M1D"/> <constraint firstAttribute="trailing" secondItem="BX3-7g-nap" secondAttribute="trailing" id="gnf-dC-Wvs"/> <constraint firstAttribute="bottom" secondItem="BX3-7g-nap" secondAttribute="bottom" id="pKC-uu-SHy"/> <constraint firstItem="BX3-7g-nap" firstAttribute="centerX" secondItem="xeS-ed-nBY" secondAttribute="centerX" id="weR-yt-0ES"/> </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="退出登录"/> <userDefinedRuntimeAttributes> <userDefinedRuntimeAttribute type="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="20"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> <connections> <action selector="logoutAction:" destination="-1" eventType="touchUpInside" id="4VC-G0-dpn"/> </connections> </button> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="s12-1B-Lxb"> <rect key="frame" x="41" y="764" width="145.66666666666666" height="40"/> <constraints> <constraint firstAttribute="height" constant="40" id="oiT-GM-y4C"/> </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="boolean" keyPath="ld_maskToBoundsXIB" value="YES"/> <userDefinedRuntimeAttribute type="number" keyPath="ld_cornerRadiusXIB"> <real key="value" value="20"/> </userDefinedRuntimeAttribute> <userDefinedRuntimeAttribute type="color" keyPath="jq_xibBorderColor"> <color key="value" name="FE6E0D"/> </userDefinedRuntimeAttribute> <userDefinedRuntimeAttribute type="number" keyPath="jq_xibBorderWidth"> <real key="value" value="1"/> </userDefinedRuntimeAttribute> </userDefinedRuntimeAttributes> <connections> <action selector="dismissAccountAction:" destination="-1" eventType="touchUpInside" id="1MR-wG-d2B"/> <action selector="logOffAction:" destination="-1" eventType="touchUpInside" id="vzg-QJ-4Yu"/> </connections> </button> </scrollView> </subviews> <viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/> <color key="backgroundColor" systemColor="systemBackgroundColor"/> <constraints> <constraint firstItem="DAK-PF-zJB" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" constant="52" id="1FR-zh-UKo"/> <constraint firstItem="R9B-6k-bGu" firstAttribute="top" secondItem="DAK-PF-zJB" secondAttribute="bottom" constant="30" id="5Mk-Vl-rUN"/> <constraint firstItem="5Bn-Ou-0kZ" firstAttribute="width" secondItem="s12-1B-Lxb" secondAttribute="width" id="8Ge-n4-jc5"/> <constraint firstItem="R9B-6k-bGu" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="8qt-Ti-aWv"/> <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="R9B-6k-bGu" secondAttribute="trailing" id="EvA-Ni-NVV"/> <constraint firstItem="DAK-PF-zJB" firstAttribute="centerX" secondItem="fnl-2z-Ty3" secondAttribute="centerX" id="IiC-2V-4AK"/> <constraint firstItem="5Bn-Ou-0kZ" firstAttribute="leading" secondItem="s12-1B-Lxb" secondAttribute="trailing" constant="20" id="Ypn-90-5iS"/> <constraint firstItem="s12-1B-Lxb" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="41" id="aHO-aI-WfL"/> <constraint firstItem="5Bn-Ou-0kZ" firstAttribute="bottom" secondItem="s12-1B-Lxb" secondAttribute="bottom" id="ePh-NT-gLh"/> <constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="5Bn-Ou-0kZ" secondAttribute="bottom" constant="14" id="equ-tY-b44"/> <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="5Bn-Ou-0kZ" secondAttribute="trailing" constant="41" id="mjx-71-n9m"/> <constraint firstItem="xeS-ed-nBY" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="039-XF-pCl"/> <constraint firstAttribute="bottom" secondItem="xeS-ed-nBY" secondAttribute="bottom" id="f2a-49-k7m"/> <constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="xeS-ed-nBY" secondAttribute="trailing" id="qVM-IS-Won"/> <constraint firstItem="xeS-ed-nBY" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="top" id="zsz-Ji-Jpt"/> </constraints> <point key="canvasLocation" x="63" y="21"/> <point key="canvasLocation" x="61.832061068702288" y="20.422535211267608"/> </view> </objects> <resources> @@ -442,7 +467,7 @@ <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> </systemColor> <systemColor name="systemGroupedBackgroundColor"> <color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color red="0.94901960780000005" green="0.94901960780000005" blue="0.96862745100000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> </systemColor> </resources> </document> WanPai/Root/Other/View/StudentChoose2View.swift
@@ -128,6 +128,14 @@ cell.btn_edit.isHidden = true cell.img_radio.image = UIImage(named: selectStudents?.id == viewModel.dataSource.value[indexPath.row].id ? "btn_select" : "btn_select_u") if selectStudents?.id == viewModel.dataSource.value[indexPath.row].id{ cell.view_container.borderColor = UIColor(hexString: "#FD7902")?.withAlphaComponent(0.28) cell.img_radio.isHidden = false }else{ cell.view_container.borderColor = UIColor(hexString: "#ADADAD")?.withAlphaComponent(0.28) cell.img_radio.isHidden = true } return cell } } WanPai/Root/Other/View/StudentChooseView.swift
@@ -219,9 +219,11 @@ if self.selectStudents.contains(where: {($0 as! ActivityDetailPartModel).id == item.id}){ cell.img_radio.image = UIImage(named: "btn_choose_s") cell.view_container.borderColor = UIColor(hexStr: "#FD7902").withAlphaComponent(0.28) cell.img_radio.isHidden = false }else{ cell.img_radio.image = UIImage(named: "") cell.view_container.borderColor = UIColor(hexStr: "#ADADAD").withAlphaComponent(0.28) cell.img_radio.isHidden = true } return cell } WanPai/Root/Search/TCell/WorldCupTCell.swift
@@ -29,9 +29,9 @@ label_desc.text = model.content img_cover.sd_setImage(with: URL(string: model.coverImg)) if model.registrationClosingTime == nil{ label_dealTime.text = "截止报名:无截止时间" label_dealTime.text = "截止报名:\(model.endTime)" }else{ label_dealTime.text = "截止报名:\(model.registrationClosingTime!)" label_dealTime.text = "截止报名:\(model.registrationClosingTime!)" } label_age.text = model.age + "岁" WanPai/Root/Search/TCell/WorldCupTCell.xib
@@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <device id="retina6_12" orientation="portrait" appearance="light"/> <dependencies> <deployment identifier="iOS"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/> <capability name="Safe area layout guides" minToolsVersion="9.0"/> <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> </dependencies> @@ -65,16 +65,20 @@ </imageView> <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_time_1" translatesAutoresizingMaskIntoConstraints="NO" id="e7G-ry-OMa"> <rect key="frame" x="143" y="154" width="22" height="22"/> <constraints> <constraint firstAttribute="height" constant="22" id="29y-0l-ijM"/> <constraint firstAttribute="width" constant="22" id="GOr-bi-5qp"/> </constraints> </imageView> <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="OGN-Ix-gGZ"> <rect key="frame" x="180.33333333333334" y="193.66666666666666" width="14" height="18"/> <fontDescription key="fontDescription" type="system" pointSize="15"/> <rect key="frame" x="174.66666666666666" y="194.33333333333334" width="13" height="17"/> <fontDescription key="fontDescription" type="system" pointSize="14"/> <color key="textColor" red="0.62352941176470589" green="0.62745098039215685" blue="0.62745098039215685" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <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="SpG-d6-Mry"> <rect key="frame" x="180.33333333333334" y="156" width="14" height="18"/> <fontDescription key="fontDescription" type="system" pointSize="15"/> <rect key="frame" x="174.66666666666666" y="156.33333333333334" width="13" height="17"/> <fontDescription key="fontDescription" type="system" pointSize="14"/> <color key="textColor" red="0.62352941179999999" green="0.62745098040000002" blue="0.62745098040000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <nil key="highlightedColor"/> </label> @@ -104,7 +108,7 @@ <constraint firstItem="SpG-d6-Mry" firstAttribute="centerY" secondItem="e7G-ry-OMa" secondAttribute="centerY" id="F6s-bY-LKk"/> <constraint firstItem="Aw5-DE-ZTd" firstAttribute="leading" secondItem="NAy-P9-bIs" secondAttribute="trailing" constant="14" id="JBj-Uz-DN6"/> <constraint firstItem="y0L-La-CTe" firstAttribute="bottom" secondItem="oFc-5H-7bu" secondAttribute="bottom" id="Jhb-q7-a96"/> <constraint firstItem="OGN-Ix-gGZ" firstAttribute="leading" secondItem="bT7-Y5-qoi" secondAttribute="trailing" constant="17.5" id="RO1-4l-siK"/> <constraint firstItem="OGN-Ix-gGZ" firstAttribute="leading" secondItem="bT7-Y5-qoi" secondAttribute="trailing" constant="12" id="RO1-4l-siK"/> <constraint firstItem="bT7-Y5-qoi" firstAttribute="centerX" secondItem="e7G-ry-OMa" secondAttribute="centerX" id="S2R-pm-p9d"/> <constraint firstItem="INC-Mr-eUQ" firstAttribute="leading" secondItem="idI-Bn-7t7" secondAttribute="trailing" constant="3.5" id="SiA-Z0-Kmo"/> <constraint firstItem="y0L-La-CTe" firstAttribute="leading" secondItem="INC-Mr-eUQ" secondAttribute="trailing" constant="9.5" id="Txg-fh-c2e"/> WanPai/Root/Search/VC/MatchDetailVC.swift
@@ -37,6 +37,7 @@ private var redTeamItems = [WorldCupPeopleModel]() private var blueTeamItems = [WorldCupPeopleModel]() private var model:WorldCupJudgeModel! private var deviceModel:ActivityDetailStoreModel? private var deviceQRCode:String? required init(model:WorldCupJudgeModel) { @@ -124,6 +125,8 @@ if index > redTeamItems.count{ redTeamItems.removeLast() }else if redTeamItems.count == 1{ redTeamItems.removeAll() }else{ redTeamItems.remove(at: index) } @@ -143,6 +146,8 @@ let index = sender.tag - 20 if index > blueTeamItems.count{ blueTeamItems.removeLast() }else if redTeamItems.count == 1{ blueTeamItems.removeAll() }else{ blueTeamItems.remove(at: index) } @@ -197,6 +202,8 @@ view_blue3Img.sd_setImage(with: URL(string: item.avatar)) } } btn_handle.isSelected = deviceModel != nil } private func checkMutable(model:WorldCupPeopleModel)->Bool{ @@ -217,7 +224,7 @@ @IBAction func handleAction(_ sender: UIButton) { if sender.isSelected{ if deviceModel != nil{ guard redTeamItems.count == 3 else{alert(msg: "红队人数不足");return} guard blueTeamItems.count == 3 else{alert(msg: "蓝队人数不足");return} guard let devCode = deviceQRCode else{alert(msg: "请扫描设备二维码");return} @@ -243,8 +250,8 @@ if status{ Services.startWorldCup(code: devCode, people: tempArray.jq_toJson1(), worldCupId: weakSelf.model.id).subscribe(onNext: {data in if let _ = data.data{ weakSelf.btn_handle.isEnabled = false alert(msg: "比赛开始") sender.isSelected = true weakSelf.redTeamItems.removeAll() weakSelf.blueTeamItems.removeAll() weakSelf.updateUserView() @@ -267,6 +274,7 @@ weakSelf.label_mathYard.isHidden = false weakSelf.label_matchPoint.text = "所属赛点:" + model.name weakSelf.label_mathYard.text = "所属场地:" + model.address weakSelf.deviceModel = model } }).disposed(by: weakSelf.disposeBag) } WanPai/Root/Search/VC/SearchVC.swift
@@ -18,6 +18,7 @@ @IBOutlet weak var img_vipMedal: UIImageView! @IBOutlet weak var label_wpCoin: UILabel! @IBOutlet weak var label_coin: UILabel! @IBOutlet weak var btn_becomeVIP: UIButton! var benefitHomeModel:BenefitHomeModel? private var models = [StartClouseExploreModel]() @@ -68,10 +69,17 @@ self?.benefitHomeModel = model self?.user_avarImg.sd_setImage(with: URL(string: model.userHeadImg)) self?.label_userName.text = model.userName.isEmpty ? "未命名":model.userName self?.label_vip.text = model.isMember if model.isMember != "年度会员"{ self?.label_vip.text = "成为会员" }else{ self?.label_vip.text = model.isMember } self?.label_wpCoin.text = model.wpCoin.currencyNotPrefix() self?.label_coin.text = "\(model.userIntegral)" self?.img_vipMedal.isHidden = model.isMember != "年度会员" self?.btn_becomeVIP.isEnabled = model.isMember != "年度会员" if model.referee == 1{ self?.items.append("裁判入口") self?.func_collectionView.reloadData() @@ -82,6 +90,12 @@ }.disposed(by: disposeBag) } @IBAction func becomeVIPAction(_ sender: Any) { let vc = JoinMemberIntroduceVC() push(vc: vc) } @IBAction func customerAction(_ sender: Any) { let vc = CustomerListVC() push(vc: vc) @@ -148,7 +162,7 @@ let vc = ActivitySignupListVC() push(vc: vc) case "我的运动营": self.tabBarController?.selectedIndex = 1 push(vc: SignUpCourseVC()) case "人员管理": let vc = StudentsManagerListVC() push(vc: vc) WanPai/Root/Search/VC/SearchVC.xib
@@ -13,6 +13,7 @@ <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="SearchVC" customModule="WanPai" customModuleProvider="target"> <connections> <outlet property="banner_collectionView" destination="GVG-mQ-5A4" id="keS-lx-iWt"/> <outlet property="btn_becomeVIP" destination="ISP-Cr-8RW" id="vl4-vq-GSF"/> <outlet property="func_collectionView" destination="pyk-ne-JeM" id="eQ5-10-Hci"/> <outlet property="img_vipMedal" destination="reN-LL-PRO" id="WIl-zY-wuj"/> <outlet property="label_coin" destination="TBO-dZ-vzH" id="aHo-fb-qUS"/> @@ -157,6 +158,13 @@ <action selector="coinDetailAction:" destination="-1" eventType="touchUpInside" id="VQC-F2-UZo"/> </connections> </button> <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ISP-Cr-8RW"> <rect key="frame" x="138.66666666666666" y="86.333333333333343" width="48.333333333333343" height="34"/> <inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> <connections> <action selector="becomeVIPAction:" destination="-1" eventType="touchUpInside" id="HMh-UX-cau"/> </connections> </button> </subviews> <color key="backgroundColor" red="0.10588235294117647" green="0.22745098039215686" blue="0.52941176470588236" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <constraints> @@ -175,6 +183,8 @@ <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="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="IFx-3f-1QD" firstAttribute="leading" secondItem="1Yu-z5-de2" secondAttribute="leading" constant="26" id="hAd-UM-xF3"/> @@ -183,6 +193,7 @@ <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="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> </view> <stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="16" translatesAutoresizingMaskIntoConstraints="NO" id="W2A-PE-Zq8"> WanPai/Root/Search/VC/WorldCupContentApplyInputVC.swift
@@ -92,7 +92,7 @@ if detailModel.registrationClosingTime != nil{ label_duetime.text = detailModel.registrationClosingTime }else{ label_duetime.text = "无截止时间" label_duetime.text = detailModel.endTime } @@ -156,34 +156,48 @@ alert(msg: "请选择参赛人员");return } StoresInfoView.show(detailModel.storeInfos.first ?? ActivityDetailStoreModel(),type: .worldCup) {[weak self] status in guard let weakSelf = self else { return } if status{ var result = [Dictionary<String,Int>]() for v in weakSelf.students{ result.append(["id":v.id,"isStudent":v.isStudent]) } var money:Double = 0 var paiCoin:Int = 0 var classHour:Int = 0 money = weakSelf.detailModel.cash * Double(weakSelf.students.count) paiCoin = weakSelf.detailModel.paiCoin * weakSelf.students.count classHour = weakSelf.detailModel.classHour * weakSelf.students.count if money == 0 && paiCoin == 0 && classHour == 0{ weakSelf.payment(payType: .free, result: result) if detailModel.storeInfos.count == 1{ StoresInfoView.show(detailModel.storeInfos.first ?? ActivityDetailStoreModel(),type: .worldCup) {[weak self] status in if status{ self?.showPaymentView() }else{ PaymentView.show(enumType: .worldCup, money: (ali: money, wx: money, coin: paiCoin, course:classHour, integral: nil)) {[weak self] payType in guard let weakSelf = self else { return } weakSelf.payment(payType: payType, result: result) } self?.navigationController?.popToRootViewController(animated: true) NotificationCenter.default.post(name: ChooseHomeStore_Noti, object: nil) } }else{ weakSelf.navigationController?.popToRootViewController(animated: true) NotificationCenter.default.post(name: ChooseHomeStore_Noti, object: nil) } }else{ let stores = detailModel.storeInfos.map({$0.name}) StoresInfo_2_View.show(stores) {[weak self] status in if status{ self?.showPaymentView() } } } } private func showPaymentView(){ var result = [Dictionary<String,Int>]() for v in students{ result.append(["id":v.id,"isStudent":v.isStudent]) } var money:Double = 0 var paiCoin:Int = 0 var classHour:Int = 0 //选中有非学员,显示课时支付灰色 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 money == 0 && paiCoin == 0 && classHour == 0{ payment(payType: .free, result: result) }else{ PaymentView.show(enumType: .worldCup, money: (ali: money, wx: money, coin: paiCoin, course:classHour, integral: nil),hasNotStudent: hasNotStudent) {[weak self] payType in guard let weakSelf = self else { return } weakSelf.payment(payType: payType, result: result) } } } @@ -201,7 +215,9 @@ case .cancel: alert(msg: "交易取消") case .failure(_): let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .worldCup) let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .worldCup){[weak self] () in self?.showPaymentView() } self?.push(vc: vc) } } @@ -218,10 +234,14 @@ if let er = error as? NetworkRequest.NetRequestError{ switch er { case .Other(let code,let string): let vc = PaymentResultVC(result: .fail(string,code), objType: .worldCup) let vc = PaymentResultVC(result: .fail(string,code), objType: .worldCup) {[weak self] () in self?.showPaymentView() } JQ_currentViewController().jq_push(vc: vc) default: let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .worldCup) let vc = PaymentResultVC(result: .fail("支付失败",0), objType: .worldCup){[weak self] () in self?.showPaymentView() } JQ_currentViewController().jq_push(vc: vc) } } WanPai/Root/Search/VC/WorldCupContentApplyVC.swift
@@ -73,7 +73,7 @@ self?.label_title.text = model.name self?.label_hot.text = "\(model.heat)" if model.registrationClosingTime == nil{ self?.label_duetime.text = "无截止时间" self?.label_duetime.text = model.endTime }else{ self?.label_duetime.text = model.registrationClosingTime } WanPai/Root/Search/VC/WorldCupContentDetailVC.swift
@@ -69,7 +69,7 @@ self?.label_title.text = model.name self?.label_hot.text = "\(model.heat)" if model.registrationClosingTime == nil{ self?.label_duetime.text = "无截止时间" self?.label_duetime.text = model.endTime }else{ self?.label_duetime.text = model.registrationClosingTime } WanPai/Root/Search/VC/WorldCupContentVC.swift
@@ -55,14 +55,6 @@ } viewModel.configure(tableView) // if let m = currentPartModel{ // viewModel.studentID.accept(m.id) // viewModel.isStudent.accept(m.isStudent) // viewModel.beginRefresh() // } // tableView.panGestureRecognizer.delegate = self } override func setRx() { WanPai/Root/Search/VC/WorldCupHeaderVC.swift
@@ -13,6 +13,7 @@ class WorldCupHeaderVC: BaseVC { @IBOutlet weak var btn_exchange: QMUIButton! @IBOutlet weak var headerImg: UIImageView! @IBOutlet weak var label_name: UILabel! @IBOutlet weak var img_QR: UIImageView! @IBOutlet weak var label_provinceRank: UILabel! @@ -21,19 +22,6 @@ @IBOutlet weak var label_winNum: UILabel! @IBOutlet weak var label_loseNum: UILabel! @IBOutlet weak var label_winRate: UILabel! // var currentPartModel:ActivityDetailPartModel?{ // didSet{ // if let m = currentPartModel{ // label_name.text = m.name // if let qrCode = WorldCupUserInfoQRCodel(id: m.id, isStudent: m.isStudent).toJSONString(){ // img_QR.image = UIImage.jq_GenerateQRCode(with: "\(qrCode)", width: 76) // } // getData(id: m.id, isStudent: m.isStudent) // } // // } // } var partModel:BehaviorRelay<ActivityDetailPartModel?>? @@ -61,6 +49,7 @@ partModel?.subscribe(onNext: {[weak self]model in if let m = model{ self?.label_name.text = m.name self?.headerImg.sd_setImage(with: URL(string: m.avatar)) if let qrCode = WorldCupUserInfoQRCodel(id: m.id, isStudent: m.isStudent).toJSONString(){ self?.img_QR.image = UIImage.jq_GenerateQRCode(with: "\(qrCode)", width: 76) } @@ -92,7 +81,7 @@ @IBAction func exchangeAction(_ sender: Any) { StudentChoose2View.show {[weak self] item in StudentChoose2View.show(defaultStu: partModel?.value) {[weak self] item in self?.partModel?.accept(item) } } WanPai/Root/Search/VC/WorldCupHeaderVC.xib
@@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> <device id="retina6_12" orientation="portrait" appearance="light"/> <dependencies> <deployment identifier="iOS"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/> <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22684"/> <capability name="Named colors" minToolsVersion="9.0"/> <capability name="Safe area layout guides" minToolsVersion="9.0"/> <capability name="System colors in document resources" minToolsVersion="11.0"/> @@ -13,6 +13,7 @@ <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="WorldCupHeaderVC" customModule="WanPai" customModuleProvider="target"> <connections> <outlet property="btn_exchange" destination="3bk-Zw-hOl" id="guG-Au-EeP"/> <outlet property="headerImg" destination="rC1-GG-uHG" id="aVL-4B-C5W"/> <outlet property="img_QR" destination="kqK-MA-Vfm" id="4cP-wE-jEN"/> <outlet property="label_cityRank" destination="qXP-LB-xCU" id="XyU-KX-35J"/> <outlet property="label_loseNum" destination="lO3-VT-LVU" id="Abh-Hg-KXQ"/> @@ -270,7 +271,7 @@ <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> </systemColor> <systemColor name="systemGray4Color"> <color red="0.81960784313725488" green="0.81960784313725488" blue="0.83921568627450982" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> <color red="0.81960784310000001" green="0.81960784310000001" blue="0.83921568629999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> </systemColor> </resources> </document> WanPai/Root/Search/VC/WorldCupRankVC.swift
@@ -16,7 +16,7 @@ var id = BehaviorRelay<Int>(value: 0) var isStudent = BehaviorRelay<Int>(value: 0) var radius = BehaviorRelay<Int>(value: 2) var sort = BehaviorRelay<Int>(value: 1) var sort = BehaviorRelay<Int>(value: 2) var year = BehaviorRelay<Int?>(value: nil) override func api() -> (Observable<BaseResponse<[WorldCupMatchRankModel]>>)? { @@ -33,8 +33,8 @@ private let yearBtn = QMUIButton(type: .custom) private let ratioRankBtn = QMUIButton(type: .custom) private let provinceBtn = UIButton(type: .custom) private var tableView:UITableView! var superScrollView:UIScrollView? override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .clear @@ -151,7 +151,6 @@ provinceBtn.setTitleColor(UIColor(hexString: "#FE7E03"), for: .normal) provinceBtn.backgroundColor = .white provinceBtn.jq_borderWidth = 1 viewModel.radius.accept(1) viewModel.radius.accept(2) } viewModel.beginRefresh() @@ -174,8 +173,16 @@ @objc func rateAction(sender:UIButton){ sender.isSelected = !sender.isSelected viewModel.sort.accept(sender.isSelected ? 2 : 1) ratioRankBtn.setTitle(viewModel.sort.value == 1 ? "按胜率排名":"按场次排名", for: .normal) ratioRankBtn.setTitle(viewModel.sort.value == 1 ? "按场次排名":"按胜率排名", for: .normal) viewModel.beginRefresh() } } extension WorldCupRankVC:UIScrollViewDelegate{ func scrollViewDidScroll(_ scrollView: UIScrollView) { let off = superScrollView!.contentOffset.y + scrollView.contentOffset.y superScrollView!.contentOffset.y = max(0,min(350,off)) } } @@ -315,7 +322,7 @@ } ratioRankBtn.setTitle("按胜率排名", for: .normal) ratioRankBtn.setTitle(viewModel.sort.value == 1 ? "按胜率排名":"按场次排名", for: .normal) ratioRankBtn.setTitle(viewModel.sort.value == 1 ? "按场次排名":"按胜率排名", for: .normal) ratioRankBtn.setTitleColor(UIColor(hexString: "#3876F2"), for: .normal) ratioRankBtn.titleLabel?.font = UIFont.systemFont(ofSize: 16,weight: .medium) ratioRankBtn.setImage(UIImage(named: "icon_reset"), for: .normal) WanPai/Root/Search/VC/WorldCupRecordVC.swift
@@ -25,6 +25,7 @@ private(set) var tableView:UITableView! private var viewModel = WorldCupRecordViewModel() var partModel:BehaviorRelay<ActivityDetailPartModel?>? var superScrollView:UIScrollView? override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .clear @@ -59,6 +60,13 @@ }).disposed(by: disposeBag) } } extension WorldCupRecordVC:UIScrollViewDelegate{ func scrollViewDidScroll(_ scrollView: UIScrollView) { let off = superScrollView!.contentOffset.y + scrollView.contentOffset.y superScrollView!.contentOffset.y = max(0,min(350,off)) } } extension WorldCupRecordVC:UITableViewDelegate,UITableViewDataSource{ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { @@ -68,6 +76,7 @@ func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "_WorldCupRecordTCell") as! WorldCupRecordTCell cell.backgroundColor = .clear cell.model = viewModel.dataSource.value!.list[indexPath.row] return cell } WanPai/Root/Search/VC/WorldCupVC.swift
@@ -19,7 +19,7 @@ private var partModels = [ActivityDetailPartModel]() private var partModel = BehaviorRelay<ActivityDetailPartModel?>(value:nil) private var toPage:Int? lazy var headerVC:WorldCupHeaderVC = { let vc = WorldCupHeaderVC() vc.partModel = partModel @@ -51,18 +51,26 @@ return pageViewController }() init(toPage:Int? = nil){ super.init(nibName: nil, bundle: nil) self.toPage = toPage } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func viewDidLoad() { super.viewDidLoad() title = "我的报名" view.backgroundColor = .white let bgImg = UIImageView(image: UIImage(named: "bg_long")) bgImg.contentMode = .scaleAspectFill bgImg.contentMode = .top view.addSubview(bgImg) bgImg.snp.makeConstraints { make in make.top.equalTo(200) make.top.equalTo(100) make.left.right.bottom.equalToSuperview() } addChild(adapterVC) adapterVC.view.backgroundColor = .clear @@ -83,6 +91,11 @@ }).disposed(by: disposeBag) headerVC.partModel = partModel DispatchQueue.main.asyncAfter(deadline: .now()+0.5) { self.pageVC.scroll(toPage: self.toPage ?? 0, animation: false) } } override func setUI() { @@ -114,17 +127,19 @@ return contentVC }else if page == 2{ let vc = WorldCupRecordVC() vc.superScrollView = adapterVC.scrollview vc.partModel = partModel return vc }else{ let vc = WorldCupRankVC() vc.superScrollView = adapterVC.scrollview vc.partModel = partModel return vc } } func pageViewController(_ pageViewController: FFPageViewController, didScrollTo index: Int) { func pageViewController(_ pageViewController: FFPageViewController, currentPageChanged currentPage: Int) { menuVC.pageMenu.selectedItemIndex = currentPage } } WanPai/Root/Welfare/TCell/BillInfoTCell.swift
@@ -10,41 +10,47 @@ class BillInfoTCell: UITableViewCell { var billingModel:BillingModel!{ didSet{ label_title.text = billingModel.consumeName label_datetime.text = billingModel.consumeTime var billingModel:BillingModel!{ didSet{ label_title.text = billingModel.consumeName label_datetime.text = billingModel.consumeTime if billingModel.type != nil{ if billingModel.type == .positive{ label_price.text = billingModel.consumeAmount label_price.textColor = UIColor(hexStr: "#FD2A02") }else{ label_price.text = billingModel.consumeAmount label_price.textColor = UIColor(hexStr: "#2AA60B") if billingModel.type != nil{ if billingModel.type == .positive{ label_price.text = billingModel.consumeAmount label_price.textColor = UIColor(hexStr: "#FD2A02") }else{ label_price.text = billingModel.consumeAmount label_price.textColor = UIColor(hexStr: "#2AA60B") } }else if billingModel.detailsType != nil{ if billingModel.detailsType == .positive{ label_price.text = billingModel.consumeAmount label_price.textColor = UIColor(hexStr: "#FD7302") }else{ label_price.text = billingModel.consumeAmount label_price.textColor = UIColor(hexStr: "#FD2A02") } }else{ if billingModel.consumeAmount.contains("-"){ label_price.text = billingModel.consumeAmount label_price.textColor = UIColor(hexStr: "#FD2A02") }else{ label_price.text = billingModel.consumeAmount label_price.textColor = UIColor(hexStr: "#FD7302") } } } } } if billingModel.detailsType != nil{ if billingModel.detailsType == .positive{ label_price.text = billingModel.consumeAmount label_price.textColor = UIColor(hexStr: "#FD7302") }else{ label_price.text = billingModel.consumeAmount label_price.textColor = UIColor(hexStr: "#FD2A02") @IBOutlet weak var label_title: UILabel! @IBOutlet weak var label_datetime: UILabel! @IBOutlet weak var label_price: UILabel! override func awakeFromNib() { super.awakeFromNib() selectionStyle = .none } } } } @IBOutlet weak var label_title: UILabel! @IBOutlet weak var label_datetime: UILabel! @IBOutlet weak var label_price: UILabel! override func awakeFromNib() { super.awakeFromNib() selectionStyle = .none } } WanPai/Root/Welfare/VC/RechargeRecordVC.swift
@@ -72,6 +72,7 @@ tableView.delegate = self tableView.dataSource = self tableView.separatorStyle = .none tableView.showsVerticalScrollIndicator = false tableView.register(UINib(nibName: "BillInfoTCell", bundle: nil), forCellReuseIdentifier:"_BillInfoTCell") // tableView.jq_setEmptyView() WanPai/Root/Welfare/VC/WelfareWeeklyDetailVC.swift
@@ -1,9 +1,9 @@ // // WelfareWeeklyDetailVC.swift // WanPai // // Created by 无故事王国 on 2023/6/21. // // // WelfareWeeklyDetailVC.swift // WanPai // // Created by 无故事王国 on 2023/6/21. // import UIKit import QMUIKit @@ -11,130 +11,130 @@ import SDWebImage class WelfareWeeklyDetailVC: BaseVC { @IBOutlet weak var view_banner: CommonBannerView! @IBOutlet weak var label_name: UILabel! @IBOutlet weak var label_address: UILabel! @IBOutlet weak var label_distance: UILabel! @IBOutlet weak var label_courseNum: UILabel! @IBOutlet weak var view_courseNum: UIView! @IBOutlet weak var label_giftCourseNum: UILabel! @IBOutlet weak var view_giftCourseNum: UIView! @IBOutlet weak var label_attendWeeks: UILabel! @IBOutlet weak var label_datetime: UILabel! @IBOutlet weak var img_intro: UIImageView! @IBOutlet weak var cons_imgIntroHei: NSLayoutConstraint! @IBOutlet weak var label_price: UILabel! @IBOutlet weak var label_originPrice: UILabel! @IBOutlet weak var label_coin: UILabel! @IBOutlet weak var label_vip: UILabel! @IBOutlet weak var btn_handle: UIButton! @IBOutlet weak var label_periodOfValidity: UILabel! @IBOutlet weak var view_periodOfValidity: UIView! private var id:Int! private var weeklyItemDetailModel:WeeklyItemDetailModel? @IBOutlet weak var view_banner: CommonBannerView! @IBOutlet weak var label_name: UILabel! @IBOutlet weak var label_address: UILabel! @IBOutlet weak var label_distance: UILabel! @IBOutlet weak var label_courseNum: UILabel! @IBOutlet weak var view_courseNum: UIView! @IBOutlet weak var label_giftCourseNum: UILabel! @IBOutlet weak var view_giftCourseNum: UIView! @IBOutlet weak var label_attendWeeks: UILabel! @IBOutlet weak var label_datetime: UILabel! @IBOutlet weak var img_intro: UIImageView! @IBOutlet weak var cons_imgIntroHei: NSLayoutConstraint! @IBOutlet weak var label_price: UILabel! @IBOutlet weak var label_originPrice: UILabel! @IBOutlet weak var label_coin: UILabel! @IBOutlet weak var label_vip: UILabel! @IBOutlet weak var btn_handle: UIButton! @IBOutlet weak var label_periodOfValidity: UILabel! @IBOutlet weak var view_periodOfValidity: UIView! required init(id:Int) { super.init(nibName: nil, bundle: nil) self.id = id } private var id:Int! private var weeklyItemDetailModel:WeeklyItemDetailModel? required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } override func viewDidLoad() { super.viewDidLoad() title = "运动营详情" label_vip.isHidden = true label_originPrice.isHidden = true Services.weekBenefitDetail(id: id).subscribe(onNext: {[weak self] data in guard let weakSelf = self else { return } if let model = data.data{ weakSelf.weeklyItemDetailModel = model weakSelf.label_name.text = model.coursePackageName weakSelf.label_address.text = model.storeNameAddr weakSelf.label_courseNum.text = "\(model.classHours)课时" weakSelf.label_giftCourseNum.text = "\(model.freeClassHours)课时" weakSelf.view_courseNum.isHidden = (model.classHours == 0 || model.type == 2) weakSelf.view_giftCourseNum.isHidden = model.freeClassHours == 0 weakSelf.label_attendWeeks.text = model.weekTime weakSelf.label_datetime.text = model.time weakSelf.label_distance.text = String(format: "距离我%.2lfkm", model.distance) // weakSelf.label_coin.isHidden = model.wanpaiGold == 0 // weakSelf.label_coin.text = String(format: "玩湃币:%ld", model.wanpaiGold) // weakSelf.label_originPrice.isHidden = model.costPrice == 0 // // weakSelf.label_originPrice.attributedText = AttributedStringbuilder.build().add(string: model.costPrice.currency(), withFont: UIFont.systemFont(ofSize: 16, weight: .semibold), withColor: UIColor(hexStr: "#3F3F3F").withAlphaComponent(0.58)).delLine(color: UIColor(hexStr: "#3F3F3F").withAlphaComponent(0.58)).mutableAttributedString weakSelf.label_price.text = model.discountPrice.currency() weakSelf.label_periodOfValidity.text = model.holiTime weakSelf.view_periodOfValidity.isHidden = model.holiTime.isEmpty weakSelf.img_intro.sd_setImage(with: URL(string: model.introduceDrawing)) {[weak self] image, error, type, url in if let img = image{ self?.img_intro.image = img let radio = img.size.width / img.size.height self?.cons_imgIntroHei.constant = JQ_ScreenW / radio } required init(id:Int) { super.init(nibName: nil, bundle: nil) self.id = id } let imgs = model.detailDrawing.components(separatedBy: ",") var items = [CommonBannerModel]() for (index,img) in imgs.enumerated(){ items.append(CommonBannerModel(index: index,resource: img,mediaType: .imageUrl)) required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } self?.view_banner.setItems(items: items) override func viewDidLoad() { super.viewDidLoad() title = "运动营详情" label_vip.isHidden = true label_originPrice.isHidden = true Services.weekBenefitDetail(id: id).subscribe(onNext: {[weak self] data in guard let weakSelf = self else { return } if let model = data.data{ weakSelf.weeklyItemDetailModel = model weakSelf.label_name.text = model.coursePackageName weakSelf.label_address.text = model.storeNameAddr weakSelf.label_courseNum.text = "\(model.classHours)课时" weakSelf.label_giftCourseNum.text = "\(model.freeClassHours)课时" weakSelf.view_courseNum.isHidden = (model.classHours == 0 || model.type == 2) weakSelf.view_giftCourseNum.isHidden = model.freeClassHours == 0 weakSelf.label_attendWeeks.text = model.weekTime weakSelf.label_datetime.text = model.time weakSelf.label_distance.text = String(format: "距离我%.2lfkm", model.distance) // weakSelf.label_coin.isHidden = model.wanpaiGold == 0 // weakSelf.label_coin.text = String(format: "玩湃币:%ld", model.wanpaiGold) // weakSelf.label_originPrice.isHidden = model.costPrice == 0 // // weakSelf.label_originPrice.attributedText = AttributedStringbuilder.build().add(string: model.costPrice.currency(), withFont: UIFont.systemFont(ofSize: 16, weight: .semibold), withColor: UIColor(hexStr: "#3F3F3F").withAlphaComponent(0.58)).delLine(color: UIColor(hexStr: "#3F3F3F").withAlphaComponent(0.58)).mutableAttributedString weakSelf.label_price.text = model.discountPrice.currency() weakSelf.label_periodOfValidity.text = model.holiTime weakSelf.view_periodOfValidity.isHidden = model.holiTime.isEmpty weakSelf.img_intro.sd_setImage(with: URL(string: model.introduceDrawing)) {[weak self] image, error, type, url in if let img = image{ self?.img_intro.image = img let radio = img.size.width / img.size.height self?.cons_imgIntroHei.constant = JQ_ScreenW / radio } } let imgs = model.detailDrawing.components(separatedBy: ",") var items = [CommonBannerModel]() for (index,img) in imgs.enumerated(){ items.append(CommonBannerModel(index: index,resource: img,mediaType: .imageUrl)) } self?.view_banner.setItems(items: items) switch model.payType { case .cash: weakSelf.label_coin.isHidden = true weakSelf.label_price.text = model.discountPrice.currency() switch model.payType { case .cash: weakSelf.label_coin.isHidden = true weakSelf.label_price.text = model.discountPrice.currency() if model.costPrice != 0 && model.costPrice > model.discountPrice{ weakSelf.label_originPrice.isHidden = false weakSelf.label_originPrice.attributedText = AttributedStringbuilder.build().add(string: model.costPrice.currency(), withFont: UIFont.systemFont(ofSize: 16, weight: .semibold), withColor: UIColor(hexStr: "#3F3F3F").withAlphaComponent(0.58)).delLine(color: UIColor(hexStr: "#3F3F3F").withAlphaComponent(0.58)).mutableAttributedString }else{ weakSelf.label_originPrice.isHidden = true } if model.costPrice != 0 && model.costPrice > model.discountPrice{ weakSelf.label_originPrice.isHidden = false weakSelf.label_originPrice.attributedText = AttributedStringbuilder.build().add(string: model.costPrice.currency(), withFont: UIFont.systemFont(ofSize: 16, weight: .semibold), withColor: UIColor(hexStr: "#3F3F3F").withAlphaComponent(0.58)).delLine(color: UIColor(hexStr: "#3F3F3F").withAlphaComponent(0.58)).mutableAttributedString }else{ weakSelf.label_originPrice.isHidden = true } if model.costPrice > 0 && model.discountPrice < model.costPrice{ weakSelf.label_originPrice.attributedText = AttributedStringbuilder.build().add(string: model.costPrice.currency(), withFont: UIFont.systemFont(ofSize: 16, weight: .semibold), withColor: UIColor(hexStr: "#3F3F3F").withAlphaComponent(0.58)).delLine(color: UIColor(hexStr: "#3F3F3F").withAlphaComponent(0.58)).mutableAttributedString } if model.costPrice > 0 && model.discountPrice < model.costPrice{ weakSelf.label_originPrice.attributedText = AttributedStringbuilder.build().add(string: model.costPrice.currency(), withFont: UIFont.systemFont(ofSize: 16, weight: .semibold), withColor: UIColor(hexStr: "#3F3F3F").withAlphaComponent(0.58)).delLine(color: UIColor(hexStr: "#3F3F3F").withAlphaComponent(0.58)).mutableAttributedString } case .cashCoin: weakSelf.label_coin.isHidden = false weakSelf.label_coin.attributedText = AttributedStringbuilder.build() .add(string: "玩湃币:", withFont: UIFont.systemFont(ofSize: 14, weight: .semibold), withColor: UIColor(hexStr: "#3F3F3F")) .add(string: "\(model.wanpaiGold)币", withFont: UIFont.systemFont(ofSize: 14, weight: .semibold), withColor: UIColor(hexStr: "#F21313")).mutableAttributedString weakSelf.label_price.text = model.discountPrice.currency() case .cashCoin: weakSelf.label_coin.isHidden = false weakSelf.label_coin.attributedText = AttributedStringbuilder.build() .add(string: "玩湃币:", withFont: UIFont.systemFont(ofSize: 14, weight: .semibold), withColor: UIColor(hexStr: "#3F3F3F")) .add(string: "\(model.wanpaiGold)币", withFont: UIFont.systemFont(ofSize: 14, weight: .semibold), withColor: UIColor(hexStr: "#F21313")).mutableAttributedString weakSelf.label_price.text = model.discountPrice.currency() if model.costPrice > 0 && model.discountPrice < model.costPrice{ weakSelf.label_originPrice.attributedText = AttributedStringbuilder.build().add(string: model.costPrice.currency(), withFont: UIFont.systemFont(ofSize: 16, weight: .semibold), withColor: UIColor(hexStr: "#3F3F3F").withAlphaComponent(0.58)).delLine(color: UIColor(hexStr: "#3F3F3F").withAlphaComponent(0.58)).mutableAttributedString } if model.costPrice > 0 && model.discountPrice < model.costPrice{ weakSelf.label_originPrice.attributedText = AttributedStringbuilder.build().add(string: model.costPrice.currency(), withFont: UIFont.systemFont(ofSize: 16, weight: .semibold), withColor: UIColor(hexStr: "#3F3F3F").withAlphaComponent(0.58)).delLine(color: UIColor(hexStr: "#3F3F3F").withAlphaComponent(0.58)).mutableAttributedString } case .coin: weakSelf.label_originPrice.isHidden = true weakSelf.label_price.isHidden = true weakSelf.label_coin.attributedText = AttributedStringbuilder.build() .add(string: "玩湃币:", withFont: UIFont.systemFont(ofSize: 14, weight: .semibold), withColor: UIColor(hexStr: "#3F3F3F")) .add(string: "\(model.wanpaiGold)币", withFont: UIFont.systemFont(ofSize: 14, weight: .semibold), withColor: UIColor(hexStr: "#F21313")).mutableAttributedString case .coin: weakSelf.label_originPrice.isHidden = true weakSelf.label_price.isHidden = true weakSelf.label_coin.attributedText = AttributedStringbuilder.build() .add(string: "玩湃币:", withFont: UIFont.systemFont(ofSize: 14, weight: .semibold), withColor: UIColor(hexStr: "#3F3F3F")) .add(string: "\(model.wanpaiGold)币", withFont: UIFont.systemFont(ofSize: 14, weight: .semibold), withColor: UIColor(hexStr: "#F21313")).mutableAttributedString } } }).disposed(by: disposeBag) } } }).disposed(by: disposeBag) } @IBAction func applyAction(_ sender: UIButton) { guard let id = weeklyItemDetailModel?.coursePackageDiscountId else{return} Services.queryCourseInfo(id: id).subscribe(onNext: {[weak self] data in if let m = data.data{ let vc = CourseDetailApplyVC(detailModel: m,classHours: self?.weeklyItemDetailModel?.classHours) self?.push(vc: vc) } }).disposed(by: disposeBag) } @IBAction func applyAction(_ sender: UIButton) { guard let id = weeklyItemDetailModel?.coursePackageDiscountId else{return} Services.queryCourseInfo(id: id).subscribe(onNext: {[weak self] data in if let m = data.data{ let vc = CourseDetailApplyVC(detailModel: m,classHours: self?.weeklyItemDetailModel?.classHours) self?.push(vc: vc) } }).disposed(by: disposeBag) } } WanPai/Root/Welfare/VC/WorldCupIntroVC.swift
@@ -24,8 +24,7 @@ self.btn.imageView?.contentMode = .scaleAspectFit self.btn.titleLabel?.font = UIFont.systemFont(ofSize: 15, weight: .medium) self.webView.loadHTMLString(data.content.jq_wrapHtml(), baseURL: nil) self.btn.isHidden = data.turnId == 0 self.btn.isHidden = data.model == "不跳转" self.model = data } }).disposed(by: disposeBag) @@ -58,6 +57,5 @@ if let m = model{ jumpPage(model: m.model, page: m.page, type: m.type, id: m.turnId) } } }