| | |
| | | import QMUIKit |
| | | import OSLog |
| | | |
| | | //https://dummyimage.com/100x100 |
| | | |
| | | let app = UIApplication.shared.delegate as! AppDelegate |
| | | |
| | |
| | | case line = 1 //顺序播放 |
| | | } |
| | | |
| | | enum GenderType:Int,HandyJSONEnum{ |
| | | case none = 0 |
| | | case man = 1 |
| | | case woman = 2 |
| | | } |
| | | |
| | | enum DisplayType:Int,HandyJSONEnum{ |
| | | case horizontal = 1 //横 |
| | |
| | | case increase = 1 |
| | | case decreate = 2 |
| | | } |
| | | |
| | | enum GenderType:Int,HandyJSONEnum,Codable{ |
| | | case man = 1 |
| | | case woman = 2 |
| | | case encrypt = 3 |
| | | |
| | | var rawTitle:String{ |
| | | switch self { |
| | | case .man:return "男" |
| | | case .woman:return "女" |
| | | case .encrypt:return "保密" |
| | | } |
| | | } |
| | | |
| | | static func GenderBy(_ str:String)->GenderType{ |
| | | switch str { |
| | | case "男":return .man |
| | | case "女":return .woman |
| | | default:return .encrypt |
| | | } |
| | | } |
| | | } |
| | |
| | | func setItem(_ item:TitleItem){ |
| | | |
| | | if let localImage = item.coverImage{ |
| | | img_cover.image = UIImage(named: localImage) |
| | | // img_cover.image = UIImage(named: localImage) |
| | | img_cover.sd_setImage(with: URL(string: localImage)) |
| | | } |
| | | |
| | | label_title.text = item.title |
| | |
| | | func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { |
| | | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_HomeRelaxBanner_2_CCell", for: indexPath) as! HomeRelaxBanner_2_CCell |
| | | cell.setCourseModel(items[indexPath.row]) |
| | | cell.backgroundColor = .jq_randomColor |
| | | return cell |
| | | } |
| | | |
| | |
| | | if cell == nil{ |
| | | cell = UITableViewCell(style: .value1, reuseIdentifier: "cell") |
| | | } |
| | | cell?.backgroundColor = .jq_randomColor |
| | | return cell! |
| | | } |
| | | |
| | |
| | | func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { |
| | | let model = viewModel.dataSource.value!.list[indexPath.row] |
| | | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_HomeRelaxBanner_2_1_CCell", for: indexPath) as! HomeRelaxBanner_2_1_CCell |
| | | cell.backgroundColor = .jq_randomColor |
| | | cell.setCourseModel(model) |
| | | return cell |
| | | } |
| | |
| | | } |
| | | let model = viewModel.dataSource.value!.list[indexPath.row] |
| | | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_HomeRelaxBanner_2_CCell", for: indexPath) as! HomeRelaxBanner_2_CCell |
| | | cell.backgroundColor = .jq_randomColor |
| | | cell.setCourseModel(model) |
| | | return cell |
| | | } |
| | |
| | | <rect key="frame" x="0.0" y="0.0" width="160" height="196"/> |
| | | <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> |
| | | <subviews> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="VwD-36-ent"> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="VwD-36-ent"> |
| | | <rect key="frame" x="0.0" y="0.0" width="160" height="196"/> |
| | | </imageView> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="nyj-tV-0t4"> |
| | |
| | | <rect key="frame" x="0.0" y="0.0" width="178" height="301"/> |
| | | <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> |
| | | <subviews> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="cCC-0f-GSV"> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="cCC-0f-GSV"> |
| | | <rect key="frame" x="0.0" y="0.0" width="178" height="301"/> |
| | | </imageView> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Fb9-IV-vVk"> |
| | |
| | | NotificationCenter.default.rx.notification(SetBGMSuccess_Noti).take(until: self.rx.deallocated).subscribe(onNext: {data in |
| | | self.topMenuView.resetTopImage() |
| | | }).disposed(by: disposeBag) |
| | | |
| | | NotificationCenter.default.rx.notification(PlantGuideQuit_Noti).take(until: self.rx.deallocated).subscribe(onNext: {data in |
| | | self.getData() |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | private func getData(){ |
| | |
| | | func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { |
| | | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_HomeRelaxBanner_2_CCell", for: indexPath) as! HomeRelaxBanner_2_CCell |
| | | let model = viewModel.dataSource.value!.list[indexPath.row] |
| | | cell.backgroundColor = .jq_randomColor |
| | | cell.setMeditationModel(model) |
| | | return cell |
| | | } |
| | |
| | | @IBOutlet weak var btn_setting: QMUIButton! |
| | | @IBOutlet weak var btn_share: QMUIButton! |
| | | @IBOutlet weak var view_rank: GradientView! |
| | | @IBOutlet weak var image_vipBg: UIImageView! |
| | | @IBOutlet weak var label_expirtTime: UILabel! |
| | | @IBOutlet weak var label_sustainDay: UILabel! |
| | | @IBOutlet weak var label_today: UILabel! |
| | | @IBOutlet weak var image_medal: UIImageView! |
| | | |
| | | @IBOutlet weak var image_userAvatar: UIImageView! |
| | | @IBOutlet weak var label_userName: UILabel! |
| | | @IBOutlet weak var label_phone: UILabel! |
| | | @IBOutlet weak var label_vipInfo: UILabel! |
| | | @IBOutlet weak var label_totalDay: UILabel! |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | |
| | | let tap = UITapGestureRecognizer(target: self, action: #selector(rankAction)) |
| | | view_rank.isUserInteractionEnabled = true |
| | | view_rank.addGestureRecognizer(tap) |
| | | |
| | | getData() |
| | | } |
| | | |
| | | override func setUI() { |
| | |
| | | btn_share.imagePosition = .top |
| | | } |
| | | |
| | | override func setRx() { |
| | | NotificationCenter.default.rx.notification(UpdateUserProfile_Noti, object: nil).take(until: self.rx.deallocated).subscribe(onNext: { _ in |
| | | self.getData() |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | |
| | | private func getData(){ |
| | | Services.getUserDetail().subscribe(onNext: {data in |
| | | if let model = data.data{ |
| | | UserViewModel.saveAvatarInfo(model) |
| | | } |
| | | }).disposed(by: self.disposeBag) |
| | | |
| | | |
| | | Services.getUserInfo().subscribe(onNext: {data in |
| | | if let model = data.data{ |
| | | self.image_userAvatar.sd_setImage(with: URL(string: model.avatar)) |
| | | self.label_userName.text = model.nickname |
| | | self.label_phone.text = model.cellPhone.jq_blotOutPhone() |
| | | |
| | | self.label_totalDay.attributedText = AttributedStringbuilder.build().add(string: "\(model.cumulative)", withFont: UIFont.init(name: "PingFang-SC-Regular", size: 60)!, withColor: UIColor(hexString: "#152715")!).add(string: "天", withFont: .systemFont(ofSize: 16), withColor: UIColor(hexString: "#152715")!).mutableAttributedString |
| | | |
| | | self.label_sustainDay.attributedText = AttributedStringbuilder.build().add(string: "\(model.continuity)", withFont: .systemFont(ofSize: 23), withColor: UIColor(hexString: "#152715")!).add(string: "天", withFont: .systemFont(ofSize: 12), withColor: UIColor(hexString: "#152715")!).mutableAttributedString |
| | | |
| | | self.image_medal.sd_setImage(with: URL(string: model.levelIcon)) |
| | | |
| | | let timeTurple = Date.jq_formateToTime_tuple(model.today * 60) |
| | | |
| | | self.label_today.attributedText = AttributedStringbuilder.build().add(string: "\(timeTurple.hour)", withFont: .systemFont(ofSize: 23), withColor: UIColor(hexString: "#152715")!).add(string: "时", withFont: .systemFont(ofSize: 12), withColor: UIColor(hexString: "#152715")!).add(string: "\(timeTurple.minute)", withFont: .systemFont(ofSize: 23), withColor: UIColor(hexString: "#152715")!).add(string: "分", withFont: .systemFont(ofSize: 12), withColor: UIColor(hexString: "#152715")!).mutableAttributedString |
| | | |
| | | |
| | | |
| | | if model.isVip == .yes{ |
| | | self.image_vipBg.image = UIImage(named: "bg_vip") |
| | | self.label_vipInfo.text = "你已是高级会员" |
| | | self.label_expirtTime.text = model.vipExpireTime + "到期" |
| | | }else{ |
| | | self.image_vipBg.image = UIImage(named: "bg_vip_u") |
| | | self.label_vipInfo.text = "升级为高级会员,解锁全部体验" |
| | | self.label_expirtTime.text = "你还未开通会员服务" |
| | | } |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | @objc func rankAction(){ |
| | | let vc = WebVC() |
| | | vc.title = "爱心榜单" |
| | |
| | | <outlet property="btn_record" destination="ohz-jh-MYr" id="I71-ch-fvw"/> |
| | | <outlet property="btn_setting" destination="gCl-Xh-n2C" id="QuC-zj-2x4"/> |
| | | <outlet property="btn_share" destination="503-ii-Lw9" id="v1J-Bx-FQ7"/> |
| | | <outlet property="image_medal" destination="dut-7H-aMv" id="7p1-yV-vbS"/> |
| | | <outlet property="image_userAvatar" destination="dFl-Si-mEi" id="j1A-z8-kad"/> |
| | | <outlet property="image_vipBg" destination="lQe-up-4F0" id="pBK-QF-IFs"/> |
| | | <outlet property="label_expirtTime" destination="IcP-op-38A" id="Hxh-C2-qn1"/> |
| | | <outlet property="label_phone" destination="xL7-Qf-iI2" id="R7I-kg-vh2"/> |
| | | <outlet property="label_sustainDay" destination="8j2-ya-Clo" id="kPr-q8-A4K"/> |
| | | <outlet property="label_today" destination="zZP-3q-D6G" id="SA1-hV-SxE"/> |
| | | <outlet property="label_totalDay" destination="YPb-vk-RCa" id="NPs-ta-7BS"/> |
| | | <outlet property="label_userName" destination="Xiq-PE-zPH" id="vAC-Zm-SdG"/> |
| | | <outlet property="label_vipInfo" destination="pJK-nH-NXm" id="cHp-Kf-9fB"/> |
| | | <outlet property="scrollView" destination="eKy-w2-ydR" id="uh0-OR-U8m"/> |
| | | <outlet property="view" destination="iN0-l3-epB" id="xwB-6q-ebc"/> |
| | | <outlet property="view_rank" destination="4fN-Be-XLG" id="3h6-0r-QKI"/> |
| | |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="bg_vip_u" translatesAutoresizingMaskIntoConstraints="NO" id="lQe-up-4F0"> |
| | | <rect key="frame" x="0.0" y="0.0" width="368" height="114.33333333333333"/> |
| | | </imageView> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="--" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Cy9-se-bLv"> |
| | | <rect key="frame" x="19.333333333333336" y="23.666666666666671" width="19.666666666666664" height="26.333333333333329"/> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="心泉·疗愈会员" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Cy9-se-bLv"> |
| | | <rect key="frame" x="19.333333333333329" y="23.666666666666671" width="150.66666666666669" height="26.333333333333329"/> |
| | | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="22"/> |
| | | <color key="textColor" red="0.039215686274509803" green="0.25882352941176467" blue="0.074509803921568626" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0天" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="YPb-vk-RCa"> |
| | | <rect key="frame" x="131.66666666666669" y="192" width="104.66666666666669" height="71.666666666666686"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="60"/> |
| | | <rect key="frame" x="136" y="192" width="96" height="45"/> |
| | | <constraints> |
| | | <constraint firstAttribute="height" constant="45" id="Ma8-cs-j54"/> |
| | | </constraints> |
| | | <fontDescription key="fontDescription" name="PingFangSC-Light" family="PingFang SC" pointSize="60"/> |
| | | <color key="textColor" red="0.082352941176470587" green="0.15294117647058825" blue="0.082352941176470587" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="4ho-wk-mFw"> |
| | | <rect key="frame" x="21.333333333333343" y="326.66666666666663" width="325" height="71"/> |
| | | <rect key="frame" x="21.333333333333343" y="300" width="325" height="71"/> |
| | | <subviews> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="XmC-Kd-dmq"> |
| | | <rect key="frame" x="162" y="20.666666666666742" width="1" height="30"/> |
| | | <rect key="frame" x="162" y="20.666666666666629" width="1" height="30"/> |
| | | <color key="backgroundColor" red="0.94509803921568625" green="0.95294117647058818" blue="0.94901960784313721" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="1" id="hXb-BI-vs2"/> |
| | | </constraints> |
| | | </view> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0小时0分" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="zZP-3q-D6G"> |
| | | <rect key="frame" x="163" y="38.666666666666742" width="162" height="18"/> |
| | | <rect key="frame" x="163" y="38.666666666666629" width="162" height="18"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="15"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0天" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="8j2-ya-Clo"> |
| | | <rect key="frame" x="0.0" y="38.666666666666742" width="162" height="18"/> |
| | | <rect key="frame" x="0.0" y="38.666666666666629" width="162" height="18"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="15"/> |
| | | <nil key="textColor"/> |
| | | <nil key="highlightedColor"/> |
| | |
| | | </constraints> |
| | | </view> |
| | | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="n62-aO-gnS" customClass="TapBtn" customModule="XQMuse" customModuleProvider="target"> |
| | | <rect key="frame" x="21.333333333333343" y="413.33333333333337" width="325" height="50.333333333333314"/> |
| | | <rect key="frame" x="21.333333333333343" y="386.66666666666663" width="325" height="50.333333333333314"/> |
| | | <subviews> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="疗愈等级" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="z63-U0-xCY"> |
| | | <rect key="frame" x="4.6666666666666607" y="16.666666666666629" width="57.333333333333343" height="17"/> |
| | | <rect key="frame" x="4.6666666666666607" y="16.666666666666742" width="57.333333333333343" height="17"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="14"/> |
| | | <color key="textColor" red="0.13725490196078433" green="0.13725490196078433" blue="0.13725490196078433" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="icon_vip_level" translatesAutoresizingMaskIntoConstraints="NO" id="dut-7H-aMv"> |
| | | <rect key="frame" x="72" y="11.333333333333259" width="95.666666666666686" height="27.666666666666671"/> |
| | | <rect key="frame" x="72" y="11.333333333333373" width="95.666666666666686" height="27.666666666666671"/> |
| | | </imageView> |
| | | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="查看详情" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="flg-Hv-HHC"> |
| | | <rect key="frame" x="265.66666666666669" y="18.666666666666629" width="45" height="13.333333333333336"/> |
| | | <rect key="frame" x="265.66666666666669" y="18.666666666666742" width="45" height="13.333333333333336"/> |
| | | <fontDescription key="fontDescription" type="system" pointSize="11"/> |
| | | <color key="textColor" red="0.40392156862745099" green="0.40392156862745099" blue="0.40392156862745099" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> |
| | | <nil key="highlightedColor"/> |
| | | </label> |
| | | <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="IKY-cB-8Vd"> |
| | | <rect key="frame" x="316.66666666666669" y="20.333333333333258" width="5.3333333333333144" height="10"/> |
| | | <rect key="frame" x="316.66666666666669" y="20.333333333333371" width="5.3333333333333144" height="10"/> |
| | | <constraints> |
| | | <constraint firstAttribute="width" constant="5.5" id="UAN-uc-0l9"/> |
| | | <constraint firstAttribute="height" constant="10" id="mje-aH-Ehd"/> |
| | |
| | | import JQTools |
| | | import TZImagePickerController |
| | | |
| | | |
| | | let UpdateUserProfile_Noti = Notification.Name.init("UpdateUserProfile_Noti") |
| | | |
| | | class UserProfileVC: BaseVC { |
| | | |
| | | @IBOutlet weak var image_user: UIImageView! |
| | | @IBOutlet weak var tf_nickName: QMUITextField! |
| | | @IBOutlet weak var tf_realName: QMUITextField! |
| | | @IBOutlet weak var tf_sign: QMUITextField! |
| | | @IBOutlet weak var tf_gender: QMUITextField! |
| | | @IBOutlet weak var tf_birthday: QMUITextField! |
| | | @IBOutlet weak var tf_degree: QMUITextField! |
| | | @IBOutlet weak var tf_industry: QMUITextField! |
| | | @IBOutlet weak var tf_company: QMUITextField! |
| | | @IBOutlet weak var tf_job: QMUITextField! |
| | | @IBOutlet weak var tf_address: QMUITextField! |
| | | @IBOutlet weak var tf_birthland: QMUITextField! |
| | | @IBOutlet weak var tf_email: QMUITextField! |
| | | |
| | | private var clipSize = CGSize(width: JQ_ScreenW, height: JQ_ScreenW) //裁剪大小 |
| | | private var clipFrame:CGRect{ |
| | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "个人资料" |
| | | |
| | | tf_nickName.text = UserViewModel.getAvatarInfo().nickname |
| | | tf_realName.text = UserViewModel.getAvatarInfo().realname |
| | | tf_sign.text = UserViewModel.getAvatarInfo().signature |
| | | tf_gender.text = UserViewModel.getAvatarInfo().gender.rawTitle |
| | | tf_birthday.text = UserViewModel.getAvatarInfo().birthday |
| | | tf_degree.text = UserViewModel.getAvatarInfo().education |
| | | tf_industry.text = UserViewModel.getAvatarInfo().industry |
| | | tf_company.text = UserViewModel.getAvatarInfo().company |
| | | tf_job.text = UserViewModel.getAvatarInfo().occupation |
| | | tf_address.text = UserViewModel.getAvatarInfo().location |
| | | tf_birthland.text = UserViewModel.getAvatarInfo().hometown |
| | | tf_email.text = UserViewModel.getAvatarInfo().email |
| | | } |
| | | |
| | | override func viewDidDisappear(_ animated: Bool) { |
| | | super.viewDidDisappear(animated) |
| | | |
| | | let nickname = tf_nickName.text == UserViewModel.getAvatarInfo().nickname ? nil:tf_nickName.text |
| | | let realname = tf_realName.text == UserViewModel.getAvatarInfo().realname ? nil:tf_realName.text |
| | | let signature = tf_sign.text == UserViewModel.getAvatarInfo().signature ? nil:tf_sign.text |
| | | let gender = tf_gender.text == UserViewModel.getAvatarInfo().gender.rawTitle ? nil:GenderType.GenderBy(tf_gender.text!) |
| | | let birthday = tf_birthday.text == UserViewModel.getAvatarInfo().birthday ? nil:tf_birthday.text |
| | | let education = tf_degree.text == UserViewModel.getAvatarInfo().education ? nil:tf_degree.text |
| | | let industry = tf_industry.text == UserViewModel.getAvatarInfo().industry ? nil:tf_industry.text |
| | | let company = tf_company.text == UserViewModel.getAvatarInfo().company ? nil:tf_company.text |
| | | let occupation = tf_job.text == UserViewModel.getAvatarInfo().occupation ? nil:tf_job.text |
| | | let location = tf_address.text == UserViewModel.getAvatarInfo().location ? nil:tf_address.text |
| | | let hometown = tf_birthland.text == UserViewModel.getAvatarInfo().hometown ? nil:tf_birthland.text |
| | | let email = tf_email.text == UserViewModel.getAvatarInfo().email ? nil:tf_email.text |
| | | |
| | | if nickname != nil || realname != nil || signature != nil || gender != nil || birthday != nil || education != nil || industry != nil || company != nil || occupation != nil || location != nil || hometown != nil || email != nil{ |
| | | Services.updateUserInfo(birthday: birthday, company: company, education: education, email: email, gender: gender, hometown: hometown, industry: industry, location: location, nickname: nickname, realname: realname, occupation: occupation, signature: signature).subscribe(onNext: {data in |
| | | NotificationCenter.default.post(name: UpdateUserProfile_Noti, object: nil) |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | } |
| | | |
| | | override func setUI() { |
| | |
| | | |
| | | if textField == tf_gender{ |
| | | let items = ["男","女","保密"] |
| | | CommonAlertSheetView.show(items: items) {[weak self] index in |
| | | guard let weakSelf = self else { return } |
| | | CommonAlertSheetView.show(items: items) { index in |
| | | guard textField.text != items[index] else {return} |
| | | textField.text = items[index] |
| | | var gender:GenderType! |
| | | if index == 0{ |
| | | gender = .man |
| | | }else{ |
| | | gender = .woman |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | BitrhdayPickerView.show(title: "", type: .YMD) { date in |
| | | |
| | | } |
| | | // CommonDatePickerView.show(before: 60, after: 0, type: .YMD) { year, month, day,_,_ in |
| | | // textField.text = String(format: "%ld-%02ld-%02ld", year!,month!,day!) |
| | | // } |
| | | return false |
| | | } |
| | | |
| | |
| | | <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="UserProfileVC" customModule="XQMuse" customModuleProvider="target"> |
| | | <connections> |
| | | <outlet property="image_user" destination="Qz0-bC-W38" id="eCy-hk-a42"/> |
| | | <outlet property="tf_address" destination="apd-WL-Sql" id="m57-Gx-rtg"/> |
| | | <outlet property="tf_birthday" destination="mG1-O5-m2h" id="QhO-j1-4Id"/> |
| | | <outlet property="tf_birthland" destination="8Mk-n3-NN5" id="84g-kg-wrt"/> |
| | | <outlet property="tf_company" destination="oBn-y6-tL8" id="DSm-9v-SmX"/> |
| | | <outlet property="tf_degree" destination="NG9-8J-4PE" id="8HI-YX-gv2"/> |
| | | <outlet property="tf_email" destination="S2r-9H-Zt2" id="ECV-Od-3Q8"/> |
| | | <outlet property="tf_gender" destination="eyM-56-9BV" id="dX4-by-LUg"/> |
| | | <outlet property="tf_industry" destination="OLk-lo-tWN" id="fMb-Kq-cQn"/> |
| | | <outlet property="tf_job" destination="Shq-k9-lMd" id="xBA-bw-XbQ"/> |
| | | <outlet property="tf_nickName" destination="xDs-61-9P0" id="dKw-c6-6r8"/> |
| | | <outlet property="tf_realName" destination="7Wv-tW-0JD" id="E1t-zc-26s"/> |
| | | <outlet property="tf_sign" destination="HRg-rk-jcD" id="O8Q-AD-caV"/> |
| | | <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> |
| | | </connections> |
| | | </placeholder> |
| | |
| | | var email: String = "" |
| | | var freezingOperator: String = "" |
| | | var freezingReason: String = "" |
| | | var gender: Int = 0 |
| | | var gender: GenderType = .encrypt |
| | | var hometown: String = "" |
| | | var id: Int = 0 |
| | | var income: Int = 0 |
| | |
| | | var location: String = "" |
| | | var logoutTime: String = "" |
| | | var nickname: String = "" |
| | | var realname:String = "" |
| | | var occupation: String = "" |
| | | var registerTime: String = "" |
| | | var sanskritFlag: Int = 0 |
| | |
| | | var vipExpireTime: String = "" |
| | | var isVip:ConditionType = .no |
| | | var wxOpenId: String = "" |
| | | |
| | | var continuity: Int = 0 |
| | | var cumulative: Int = 0 |
| | | var level: Int = 0 |
| | | var levelIcon: String? |
| | | var levelName: String? |
| | | var today: Int = 0 |
| | | } |
| | | |
| | | struct TutorInfoModel:HandyJSON{ |
| | |
| | | var code:String = "" |
| | | } |
| | | |
| | | struct TagModel:HandyJSON,Hashable{ |
| | | var id = 0 |
| | | var tagName = "" |
| | | |
| | | var indexPath:IndexPath? |
| | | } |
| | | |
| | | struct ResponseUserAnswerModel:HandyJSON{ |
| | | var tagsId = "" //问题二 多个tagId使用英文逗号拼接字符串 |
| | | var userAnswerOneDTOList = [ResponseUserAnswerDTOModel]() |
| | | } |
| | | |
| | | struct ResponseUserAnswerDTOModel:HandyJSON{ |
| | | var answer = "" //问题一 答案 1:是2:否3:偶尔,其他补充说明 |
| | | var type = 0 //问题一 问题类型 1:您是否内心纠结敏感多疑?2:您是否辗转反侧彻夜难眠?3:您是否情绪失控暴躁易怒?4:您是否沉迷情感倍受伤害?5:您是否人生迷茫踌躇彷徨?6:其它补充说明 |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | |
| | | |
| | | class func getMeditationPage(_ cateId:Int,page:Int,pageSize:Int = 20)->Observable<BaseResponse<BaseResponseList<MeditationModel>>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | params.interface(url: "/meditation/client/meditation/home/getMeditationAndCateList") |
| | | params.interface(url: "/meditation/client/meditation/home/getMeditationPageByCateId") |
| | | .append(key: "cateId", value: cateId) |
| | | .append(key: "pageCurr", value: page) |
| | | .append(key: "pageSize", value: pageSize) |
| | |
| | | } |
| | | |
| | | /// 获取用户信息 |
| | | class func getUserDetail()->Observable<BaseResponse<UserInfoModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | params.interface(url: "/user/client/app-user/getUserDetail") |
| | | .append(key: "apipost_id", value: "2fc350e9799588") |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 获取用户信息 |
| | | class func getUserInfo()->Observable<BaseResponse<UserInfoModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | params.interface(url: "/user/client/app-user/getCurrentUser") |
| | | .append(key: "apipost_id", value: "2e763463799132") |
| | | params.interface(url: "/user/client/app-user/getUserInfo") |
| | | .append(key: "apipost_id", value: "300079e039993f") |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | class func updateUserInfo(avatar:String? = nil,birthday:String? = nil,company:String? = nil,education:String? = nil,email:String? = nil,gender:GenderType? = nil,hometown:String? = nil,industry:String? = nil,location:String? = nil,nickname:String? = nil,realname:String? = nil,occupation:String? = nil,signature:String? = nil)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | params.interface(url: "/user/client/app-user/updateUserDetail") |
| | | .append(key: "avatar", value: avatar) |
| | | .append(key: "birthday", value: birthday) |
| | | .append(key: "company", value: company) |
| | | .append(key: "education", value: education) |
| | | .append(key: "email", value: email) |
| | | .append(key: "gender", value: gender?.rawValue) |
| | | .append(key: "hometown", value: hometown) |
| | | .append(key: "industry", value: industry) |
| | | .append(key: "location", value: location) |
| | | .append(key: "nickname", value: nickname) |
| | | .append(key: "realname", value: realname) |
| | | .append(key: "occupation", value: occupation) |
| | | .append(key: "signature", value: signature) |
| | | .append(key: "apipost_id", value: "2fc350e9b99599") |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | |
| | | .append(key: "apipost_id", value: "2e763463799134") |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | //获取个性化设置的标签 |
| | | class func getTag()->Observable<BaseResponse<[TagModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | params.interface(url: "/user/client/app-user/getTagList") |
| | | .append(key: "apipost_id", value: "25c3dab9f0e024") |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | class func saveUserAnswers(_ model:ResponseUserAnswerModel)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | params.interface(url: "/user/client/app-user/saveUserAnswers") |
| | | .append(dic: model.toJSON()!) |
| | | .append(key: "apipost_id", value: "25c3dab9f0e025") |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | override func awakeFromNib() { |
| | | super.awakeFromNib() |
| | | |
| | | } |
| | | |
| | | func setPavilionDetailModel(_ model:PavilionDetailModel){ |
| | |
| | | func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { |
| | | let model = viewModel.dataSource.value!.list[indexPath.row] |
| | | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_PavilionItemCell", for: indexPath) as! PavilionItemCell |
| | | cell.backgroundColor = .jq_randomColor |
| | | cell.backgroundColor = .white |
| | | cell.jq_cornerRadius = 16 |
| | | cell.setPavilionDetailModel(model) |
| | | return cell |
| | |
| | | super.viewDidLoad() |
| | | title = "疗愈馆详情" |
| | | scrollView.contentInsetAdjustmentBehavior = .never |
| | | view_bannerBg.backgroundColor = .jq_randomColor |
| | | webView.scrollView.isScrollEnabled = false |
| | | |
| | | Services.getPavlilonDetail(id: id).subscribe(onNext: {data in |
| | |
| | | |
| | | } |
| | | |
| | | override func viewWillAppear(_ animated: Bool) { |
| | | super.viewWillAppear(animated) |
| | | player.play() |
| | | } |
| | | |
| | | override func viewDidDisappear(_ animated: Bool) { |
| | | super.viewDidDisappear(animated) |
| | | player.pause() |
| | | } |
| | | |
| | | override func setUI() { |
| | | |
| | | label_title.font = Def_FlyFlowerSong(fontSize: 35) |
| | |
| | | |
| | | playerLayer.player = player |
| | | view.layer.addSublayer(playerLayer) |
| | | player.play() |
| | | playerLayer.zPosition = -999 |
| | | } |
| | | |
| | |
| | | private var questions = [String]() |
| | | private var questionIndex = -1 |
| | | |
| | | private var responseUserAnswerModel = ResponseUserAnswerModel() |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | |
| | |
| | | btn_deny.isSelected = sender.tag == btn_deny.tag |
| | | btn_OnceInAWel.isSelected = sender.tag == btn_OnceInAWel.tag |
| | | |
| | | var answer:String = "" |
| | | if btn_sure.isSelected{ |
| | | answer = "1" |
| | | }else if btn_deny.isSelected{ |
| | | answer = "2" |
| | | }else{ |
| | | answer = "3" |
| | | } |
| | | |
| | | responseUserAnswerModel.userAnswerOneDTOList.append(ResponseUserAnswerDTOModel(answer: answer, type: questionIndex)) |
| | | |
| | | btn_sure.backgroundColor = btn_sure.isSelected ? UIColor(hexString: "#5E9456"):.clear |
| | | btn_deny.backgroundColor = btn_deny.isSelected ? UIColor(hexString: "#5E9456"):.clear |
| | | btn_OnceInAWel.backgroundColor = btn_OnceInAWel.isSelected ? UIColor(hexString: "#5E9456"):.clear |
| | |
| | | self.btn_OnceInAWel.alpha = 0 |
| | | } |
| | | |
| | | DispatchQueue.main.asyncAfter(delay: 1.8) { |
| | | DispatchQueue.main.asyncAfter(delay: 1.5) { |
| | | if self.questionIndex == self.questions.count - 1{ |
| | | PlanGuidePromptSupplyView.show { text in |
| | | if text != nil{ |
| | | self.responseUserAnswerModel.userAnswerOneDTOList.append(ResponseUserAnswerDTOModel(answer: text!, type: 6)) |
| | | } |
| | | let vc = PlanGuide_3_VC() |
| | | vc.responseUserAnswerModel = self.responseUserAnswerModel |
| | | self.push(vc: vc) |
| | | } |
| | | }else{ |
| | |
| | | @IBOutlet weak var btn_next: UIButton! |
| | | @IBOutlet weak var view_content: UIView! |
| | | @IBOutlet weak var collectionVIew: UICollectionView! |
| | | private var setIndex = Set<IndexPath>() |
| | | private var selectModels = Set<TagModel>() |
| | | |
| | | private var items = [["原生家庭","亲子关系","夫妻关系"],["情感纠结","思念亲人","优质睡眠","提升能量"],["高维智慧","清理净化","情绪稳定"]] |
| | | var responseUserAnswerModel:ResponseUserAnswerModel! |
| | | private var items = [[TagModel]?]() |
| | | |
| | | |
| | | override func viewWillAppear(_ animated: Bool) { |
| | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | |
| | | var topIndex = 0 |
| | | Services.getTag().subscribe(onNext: { data in |
| | | self.items = Array<TagModel>.splitArray((data.data ?? []), subArraySize: 3) |
| | | self.collectionVIew.reloadData() |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | override func setUI() { |
| | |
| | | } |
| | | |
| | | @IBAction func nextAction(_ sender: UIButton) { |
| | | responseUserAnswerModel.tagsId = selectModels.map({"\($0.id)"}).joined(separator: ",") |
| | | Services.saveUserAnswers(responseUserAnswerModel).subscribe(onNext: { data in |
| | | NotificationCenter.default.post(name: PlantGuideQuit_Noti, object: true) |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | @IBAction func previousAction(_ sender: UIButton) { |
| | |
| | | extension PlanGuide_3_VC:UICollectionViewDelegate & UICollectionViewDataSource{ |
| | | |
| | | func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { |
| | | if setIndex.contains(indexPath){ |
| | | setIndex.remove(indexPath) |
| | | let m = items[indexPath.section]![indexPath.row] |
| | | |
| | | if selectModels.contains(m){ |
| | | selectModels.remove(m) |
| | | }else{ |
| | | setIndex.insert(indexPath) |
| | | selectModels.insert(m) |
| | | } |
| | | collectionView.reloadData() |
| | | } |
| | | |
| | | func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { |
| | | return items[section].count |
| | | return items[section]?.count ?? 0 |
| | | } |
| | | |
| | | func numberOfSections(in collectionView: UICollectionView) -> Int { |
| | |
| | | |
| | | func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { |
| | | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! Planguide_3_CCell |
| | | cell.label_title.text = items[indexPath.section][indexPath.row] |
| | | cell.isSelect(setIndex.contains(indexPath)) |
| | | let m = items[indexPath.section]![indexPath.row] |
| | | cell.label_title.text = m.tagName |
| | | cell.isSelect(selectModels.contains(m)) |
| | | return cell |
| | | } |
| | | } |