无故事王国
2024-03-13 919d1d6bb0ec4043ec25b58a492618239ca37529
fix BUG
44个文件已修改
9个文件已添加
3814 ■■■■ 已修改文件
WanPai/Assets.xcassets/Bg/.DS_Store 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/bg_long.imageset/bg_long@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/bg_long.imageset/bg_long@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/.DS_Store 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_coupon_7.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_coupon_7.imageset/Ô½Õ½Ô½ÓÂ@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_coupon_7.imageset/Ô½Õ½Ô½ÓÂ@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_coupon_8.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_coupon_8.imageset/³£Ê¤½«¾ü@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_coupon_8.imageset/³£Ê¤½«¾ü@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_lose.imageset/Contents.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_lose.imageset/icon_lose@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Icons/icon_lose.imageset/icon_lose@3x.png 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Common/VC/CommonWebVC.swift 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Common/View/PaymentView.swift 282 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Common/View/PaymentView.xib 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Config/Enums.swift 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Model/CommonModels.swift 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Network/Services.swift 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Activity/TCell/ActivityInfoTCell.swift 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Activity/VC/ActivityDetailApplyVC.swift 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Course/VC/AddStudentVC.swift 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Course/VC/CourseInfoVC.swift 1036 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Course/VC/CourseVC.swift 162 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Course/VC/SignUpCourseVC.swift 242 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Course/VC/StudentCourseDetailVC.swift 389 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Course/VC/StudentMentalListVC.swift 188 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Course/View/CourseSubTypeView.swift 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Home/Model/WorldCupModel.swift 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Home/VC/WorldCupListVC.swift 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Other/VC/PaymentResultVC.swift 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Other/VC/ProfileVC.swift 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Other/VC/ProfileVC.xib 797 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Other/View/StudentChoose2View.swift 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Other/View/StudentChooseView.swift 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Search/TCell/WorldCupTCell.swift 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Search/TCell/WorldCupTCell.xib 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Search/VC/MatchDetailVC.swift 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Search/VC/SearchVC.swift 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Search/VC/SearchVC.xib 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Search/VC/WorldCupContentApplyInputVC.swift 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Search/VC/WorldCupContentApplyVC.swift 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Search/VC/WorldCupContentDetailVC.swift 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Search/VC/WorldCupContentVC.swift 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Search/VC/WorldCupHeaderVC.swift 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Search/VC/WorldCupHeaderVC.xib 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Search/VC/WorldCupRankVC.swift 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Search/VC/WorldCupRecordVC.swift 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Search/VC/WorldCupVC.swift 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Welfare/TCell/BillInfoTCell.swift 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Welfare/VC/RechargeRecordVC.swift 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Welfare/VC/WelfareWeeklyDetailVC.swift 234 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Root/Welfare/VC/WorldCupIntroVC.swift 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WanPai/Assets.xcassets/Bg/.DS_Store
Binary files differ
WanPai/Assets.xcassets/Bg/bg_long.imageset/bg_long@2x.png

WanPai/Assets.xcassets/Bg/bg_long.imageset/bg_long@3x.png

WanPai/Assets.xcassets/Icons/.DS_Store
Binary 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)
                                }
                }
}